@beworke/pixel 0.1.0-rc.1 → 0.1.0-rc.6
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/CHANGELOG.md +260 -4
- package/README.md +65 -118
- package/RELEASE_CANDIDATE.md +181 -36
- package/dist/{StorageFactory-BhpbB6Jj.d.mts → StorageFactory-CPghDPBj.d.mts} +2 -2
- package/dist/{StorageFactory-CAkJJqVD.d.ts → StorageFactory-tjfzk57c.d.ts} +2 -2
- package/dist/config/index.cjs.js +1 -1
- package/dist/config/index.cjs.js.map +1 -1
- package/dist/config/index.d.mts +4 -3
- package/dist/config/index.d.ts +4 -3
- package/dist/config/index.esm.js +1 -1
- package/dist/config/index.esm.js.map +1 -1
- package/dist/events/index.cjs.js +1 -1
- package/dist/events/index.cjs.js.map +1 -1
- package/dist/events/index.d.mts +2 -1
- package/dist/events/index.d.ts +2 -1
- package/dist/events/index.esm.js +1 -1
- package/dist/events/index.esm.js.map +1 -1
- package/dist/examples/html-script/README.md +24 -2
- package/dist/examples/html-script/RELEASE_CANDIDATE.md +20 -6
- package/dist/examples/html-script/add-payment-info/README.md +3 -3
- package/dist/examples/html-script/add-payment-info/example-add-payment-info-card-autocomplete.html +66 -48
- package/dist/examples/html-script/add-payment-info/example-add-payment-info-card-disabled.html +66 -48
- package/dist/examples/html-script/add-payment-info/example-add-payment-info-card-fields.html +65 -47
- package/dist/examples/html-script/add-payment-info/example-add-payment-info-data-track.html +73 -47
- package/dist/examples/html-script/add-payment-info/example-add-payment-info-dedupe.html +65 -47
- package/dist/examples/html-script/add-payment-info/example-add-payment-info-manual.html +56 -47
- package/dist/examples/html-script/add-payment-info/example-add-payment-info-rules-card.html +65 -47
- package/dist/examples/html-script/add-payment-info/example-add-payment-info-security.html +65 -47
- package/dist/examples/html-script/add-to-cart/README.md +3 -3
- package/dist/examples/html-script/add-to-cart/example-add-to-cart-attribute.html +90 -70
- package/dist/examples/html-script/add-to-cart/example-add-to-cart-auto.html +103 -81
- package/dist/examples/html-script/add-to-cart/example-add-to-cart-click.html +101 -78
- package/dist/examples/html-script/add-to-cart/example-add-to-cart-dedupe.html +90 -70
- package/dist/examples/html-script/add-to-cart/example-add-to-cart-manual.html +81 -67
- package/dist/examples/html-script/add-to-cart/example-add-to-cart-order-bump.html +90 -70
- package/dist/examples/html-script/add-to-cart/example-add-to-cart-text.html +104 -81
- package/dist/examples/html-script/behavior/example-behavior-engagement.html +489 -0
- package/dist/examples/html-script/behavior/example-behavior-heartbeat.html +350 -0
- package/dist/examples/html-script/behavior/example-behavior-runtime-intelligence.html +433 -0
- package/dist/examples/html-script/behavior/example-behavior-viewport.html +397 -0
- package/dist/examples/html-script/{example-behavior.html → behavior/example-behavior.html} +23 -17
- package/dist/examples/html-script/example-checkout-commerce.html +825 -0
- package/dist/examples/html-script/example-integration.html +5 -5
- package/dist/examples/html-script/example-landing-commerce.html +380 -0
- package/dist/examples/html-script/example-runtime-diagnostics.html +108 -0
- package/dist/examples/html-script/example-transport.html +5 -5
- package/dist/examples/html-script/full-funnel/README.md +64 -0
- package/dist/examples/html-script/full-funnel/checkout.html +116 -0
- package/dist/examples/html-script/full-funnel/downsell.html +58 -0
- package/dist/examples/html-script/full-funnel/landing.html +99 -0
- package/dist/examples/html-script/full-funnel/thank-you.html +85 -0
- package/dist/examples/html-script/full-funnel/upsell.html +64 -0
- package/dist/examples/html-script/initiate-checkout/README.md +6 -6
- package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-attribute.html +94 -74
- package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-auto.html +102 -80
- package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-click.html +103 -80
- package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-manual.html +86 -72
- package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-snapshot.html +95 -75
- package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-submit.html +103 -83
- package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-text.html +105 -82
- package/dist/examples/html-script/lead/README.md +9 -7
- package/dist/examples/html-script/lead/example-lead-trigger-attribute.html +67 -47
- package/dist/examples/html-script/lead/example-lead-trigger-auto.html +78 -56
- package/dist/examples/html-script/lead/example-lead-trigger-click.html +78 -55
- package/dist/examples/html-script/release-candidate.html +187 -76
- package/dist/examples/html-script/remove-from-cart/README.md +1 -1
- package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-attribute.html +93 -73
- package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-css.html +93 -73
- package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-dedupe.html +93 -73
- package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-manual.html +84 -70
- package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-multi.html +94 -74
- package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-state.html +95 -75
- package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-text.html +98 -76
- package/dist/examples/html-script/search/README.md +1 -1
- package/dist/examples/html-script/search/example-search-attribute.html +66 -51
- package/dist/examples/html-script/search/example-search-button-sync.html +66 -51
- package/dist/examples/html-script/search/example-search-dedupe.html +66 -51
- package/dist/examples/html-script/search/example-search-input.html +67 -51
- package/dist/examples/html-script/search/example-search-manual.html +57 -48
- package/dist/examples/html-script/search/example-search-submit.html +66 -51
- package/dist/examples/html-script/search/example-search-text.html +71 -51
- package/dist/examples/html-script/url-context/example-url-context-allowed-domains.html +63 -0
- package/dist/examples/html-script/url-context/example-url-context-landing.html +70 -0
- package/dist/examples/html-script/url-context/example-url-context-upsell.html +67 -0
- package/dist/examples/html-script/url-context/example-url-context.html +171 -0
- package/dist/examples/html-script/view-content/README.md +1 -1
- package/dist/examples/html-script/view-content/example-view-content-attribute.html +85 -70
- package/dist/examples/html-script/view-content/example-view-content-css.html +85 -70
- package/dist/examples/html-script/view-content/example-view-content-dedupe.html +85 -70
- package/dist/examples/html-script/view-content/example-view-content-empty.html +85 -70
- package/dist/examples/html-script/view-content/example-view-content-manual.html +76 -67
- package/dist/examples/html-script/view-content/example-view-content-product-card.html +85 -70
- package/dist/examples/html-script/view-content/example-view-content-text.html +90 -73
- package/dist/examples/v2/README.md +4 -1
- package/dist/{index-DUfFzniE.d.ts → index-CQAyT5Od.d.ts} +170 -3
- package/dist/{index-DUfFzniE.d.mts → index-JlKPz4pp.d.mts} +170 -3
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.mts +435 -12
- package/dist/index.d.ts +435 -12
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/{pixel-CbeF25mD.d.mts → pixel-BxZZx8l5.d.ts} +248 -72
- package/dist/{pixel-CbeF25mD.d.ts → pixel-CKc4OQUx.d.mts} +248 -72
- package/dist/{pixel-default-config-1VgLFOiL.d.mts → pixel-default-config-CJl-eypl.d.mts} +1 -1
- package/dist/{pixel-default-config-Bxb-Vdd8.d.ts → pixel-default-config-aAOujzwp.d.ts} +1 -1
- package/dist/runtime/index.cjs.js +1 -1
- package/dist/runtime/index.cjs.js.map +1 -1
- package/dist/runtime/index.d.mts +19 -26
- package/dist/runtime/index.d.ts +19 -26
- package/dist/runtime/index.esm.js +1 -1
- package/dist/runtime/index.esm.js.map +1 -1
- package/dist/services/index.cjs.js +1 -1
- package/dist/services/index.cjs.js.map +1 -1
- package/dist/services/index.d.mts +14 -6
- package/dist/services/index.d.ts +14 -6
- package/dist/services/index.esm.js +1 -1
- package/dist/services/index.esm.js.map +1 -1
- package/dist/types-BP8dz1gP.d.mts +19 -0
- package/dist/types-C75pQP31.d.ts +19 -0
- package/dist/types-DMhzHSVC.d.mts +293 -0
- package/dist/types-D_SsCur9.d.ts +293 -0
- package/dist/url-context-BjAsQoVl.d.mts +85 -0
- package/dist/url-context-BjAsQoVl.d.ts +85 -0
- package/dist/v2/global.global.js +1 -1
- package/dist/v2/global.global.js.map +1 -1
- package/dist/v2/index.cjs.js +1 -1
- package/dist/v2/index.cjs.js.map +1 -1
- package/dist/v2/index.d.mts +8 -6
- package/dist/v2/index.d.ts +8 -6
- package/dist/v2/index.esm.js +1 -1
- package/dist/v2/index.esm.js.map +1 -1
- package/docs/public/README.md +75 -0
- package/docs/public/api/exports.md +47 -0
- package/docs/public/api/pixel.md +65 -0
- package/docs/public/configuration/commerce.md +44 -0
- package/docs/public/configuration/modules.md +66 -0
- package/docs/public/configuration/overview.md +66 -0
- package/docs/public/events/catalog.md +65 -0
- package/docs/public/getting-started/installation.md +75 -0
- package/docs/public/getting-started/quick-start.md +77 -0
- package/docs/public/getting-started/react-nextjs.md +55 -0
- package/docs/public/getting-started/script-tag.md +57 -0
- package/docs/public/guides/funnel-checkout.md +52 -0
- package/docs/public/guides/funnel-downsell.md +53 -0
- package/docs/public/guides/funnel-full.md +64 -0
- package/docs/public/guides/funnel-landing.md +68 -0
- package/docs/public/guides/funnel-thank-you.md +48 -0
- package/docs/public/guides/funnel-upsell.md +72 -0
- package/docs/public/limitations.md +32 -0
- package/docs/public/privacy/limitations.md +33 -0
- package/docs/public/release-candidate/validation.md +37 -0
- package/docs/public/troubleshooting.md +55 -0
- package/package.json +13 -1
- package/dist/types-CTpRvFKZ.d.ts +0 -71
- package/dist/types-DGlBdsAy.d.mts +0 -71
|
@@ -197,10 +197,19 @@ code { font-size: 0.85em; }
|
|
|
197
197
|
|
|
198
198
|
function viewContentDetectorConfig() {
|
|
199
199
|
return {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
200
|
+
enabled: true,
|
|
201
|
+
sources: [
|
|
202
|
+
{
|
|
203
|
+
name: 'viewContent-selector',
|
|
204
|
+
type: 'selector',
|
|
205
|
+
selector: [
|
|
206
|
+
'[data-product-id]'
|
|
207
|
+
],
|
|
208
|
+
selectorType: 'css',
|
|
209
|
+
trigger: 'click'
|
|
210
|
+
}
|
|
211
|
+
]
|
|
212
|
+
};
|
|
204
213
|
}
|
|
205
214
|
|
|
206
215
|
function buildConfig() {
|
|
@@ -219,6 +228,64 @@ code { font-size: 0.85em; }
|
|
|
219
228
|
timeoutMs: 10000,
|
|
220
229
|
},
|
|
221
230
|
identity: { ...base.identity, pixelId: PIXEL_ID },
|
|
231
|
+
commerce: {
|
|
232
|
+
enabled: true,
|
|
233
|
+
currency: 'BRL',
|
|
234
|
+
catalog: {
|
|
235
|
+
products: [
|
|
236
|
+
{
|
|
237
|
+
id: 'main_offer',
|
|
238
|
+
name: 'Oferta Principal',
|
|
239
|
+
type: 'main',
|
|
240
|
+
price: 197,
|
|
241
|
+
currency: 'BRL',
|
|
242
|
+
quantity: 1,
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
id: 'sku_shoes_01',
|
|
246
|
+
name: 'Tênis Runner',
|
|
247
|
+
type: 'main',
|
|
248
|
+
price: 299,
|
|
249
|
+
currency: 'BRL',
|
|
250
|
+
quantity: 1,
|
|
251
|
+
},
|
|
252
|
+
],
|
|
253
|
+
},
|
|
254
|
+
cart: {
|
|
255
|
+
mode: 'single_product',
|
|
256
|
+
initialItems: [],
|
|
257
|
+
calculateValueFrom: 'cart',
|
|
258
|
+
allowDynamicItems: true,
|
|
259
|
+
},
|
|
260
|
+
mappings: {
|
|
261
|
+
attributes: {
|
|
262
|
+
productId: ['data-product-id', 'data-sku', 'data-content-id', 'data-offer-id'],
|
|
263
|
+
productName: ['data-product-name', 'data-name'],
|
|
264
|
+
price: ['data-product-price', 'data-price', 'data-value'],
|
|
265
|
+
quantity: ['data-quantity', 'data-qty'],
|
|
266
|
+
currency: ['data-currency'],
|
|
267
|
+
},
|
|
268
|
+
fields: {
|
|
269
|
+
productId: ['productId', 'contentId', 'sku'],
|
|
270
|
+
productName: ['productName', 'name'],
|
|
271
|
+
price: ['price', 'value'],
|
|
272
|
+
quantity: ['quantity'],
|
|
273
|
+
currency: ['currency'],
|
|
274
|
+
email: ['email'],
|
|
275
|
+
phone: ['phone'],
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
enrichment: {
|
|
279
|
+
pageView: { enabled: false, source: 'cart' },
|
|
280
|
+
viewContent: { enabled: true, source: 'event_or_cart' },
|
|
281
|
+
lead: { enabled: false, source: 'event_or_cart' },
|
|
282
|
+
addToCart: { enabled: true, source: 'event_or_cart' },
|
|
283
|
+
removeFromCart: { enabled: true, source: 'event_or_cart' },
|
|
284
|
+
initiateCheckout: { enabled: true, source: 'cart' },
|
|
285
|
+
addPaymentInfo: { enabled: true, source: 'cart' },
|
|
286
|
+
purchase: { enabled: true, source: 'cart' },
|
|
287
|
+
}
|
|
288
|
+
},
|
|
222
289
|
modules: {
|
|
223
290
|
...base.modules,
|
|
224
291
|
core: {
|
|
@@ -280,79 +347,27 @@ code { font-size: 0.85em; }
|
|
|
280
347
|
integrations: { ...base.modules.integrations, enabled: false },
|
|
281
348
|
conversion: {
|
|
282
349
|
enabled: true,
|
|
283
|
-
commerce: {
|
|
284
|
-
currency: 'BRL',
|
|
285
|
-
catalog: {
|
|
286
|
-
products: [
|
|
287
|
-
{
|
|
288
|
-
id: 'main_offer',
|
|
289
|
-
name: 'Oferta Principal',
|
|
290
|
-
type: 'main',
|
|
291
|
-
price: 197,
|
|
292
|
-
currency: 'BRL',
|
|
293
|
-
quantity: 1,
|
|
294
|
-
},
|
|
295
|
-
{
|
|
296
|
-
id: 'sku_shoes_01',
|
|
297
|
-
name: 'Tênis Runner',
|
|
298
|
-
type: 'main',
|
|
299
|
-
price: 299,
|
|
300
|
-
currency: 'BRL',
|
|
301
|
-
quantity: 1,
|
|
302
|
-
},
|
|
303
|
-
],
|
|
304
|
-
},
|
|
305
|
-
checkout: {
|
|
306
|
-
mode: 'single_product',
|
|
307
|
-
selectedItems: [],
|
|
308
|
-
calculateValueFrom: 'selected_items',
|
|
309
|
-
allowDynamicItems: true,
|
|
310
|
-
},
|
|
311
|
-
mappings: {
|
|
312
|
-
attributes: {
|
|
313
|
-
productId: ['data-product-id', 'data-sku', 'data-content-id', 'data-offer-id'],
|
|
314
|
-
productName: ['data-product-name', 'data-name'],
|
|
315
|
-
price: ['data-product-price', 'data-price', 'data-value'],
|
|
316
|
-
quantity: ['data-quantity', 'data-qty'],
|
|
317
|
-
currency: ['data-currency'],
|
|
318
|
-
},
|
|
319
|
-
fields: {
|
|
320
|
-
productId: ['productId', 'contentId', 'sku'],
|
|
321
|
-
productName: ['productName', 'name'],
|
|
322
|
-
price: ['price', 'value'],
|
|
323
|
-
quantity: ['quantity'],
|
|
324
|
-
currency: ['currency'],
|
|
325
|
-
email: ['email'],
|
|
326
|
-
phone: ['phone'],
|
|
327
|
-
},
|
|
328
|
-
},
|
|
329
|
-
},
|
|
330
350
|
manual: {
|
|
331
351
|
pageView: { enabled: false },
|
|
332
|
-
purchase: { enabled: false },
|
|
333
|
-
lead: { enabled: false },
|
|
334
|
-
addToCart: { enabled: false },
|
|
335
|
-
removeFromCart: { enabled: false },
|
|
336
|
-
initiateCheckout: { enabled: false },
|
|
337
|
-
addPaymentInfo: { enabled: false },
|
|
338
|
-
search: { enabled: false },
|
|
352
|
+
purchase: { enabled: false, sources: [] },
|
|
353
|
+
lead: { enabled: false, sources: [] },
|
|
354
|
+
addToCart: { enabled: false, sources: [] },
|
|
355
|
+
removeFromCart: { enabled: false, sources: [] },
|
|
356
|
+
initiateCheckout: { enabled: false, sources: [] },
|
|
357
|
+
addPaymentInfo: { enabled: false, sources: [] },
|
|
358
|
+
search: { enabled: false, sources: [] },
|
|
339
359
|
viewContent: { enabled: true },
|
|
340
360
|
},
|
|
341
361
|
auto: {
|
|
342
362
|
enabled: true,
|
|
343
363
|
detectors: {
|
|
344
|
-
lead: { enabled: false },
|
|
345
|
-
purchase: { enabled: false },
|
|
346
|
-
addToCart: { enabled: false },
|
|
347
|
-
removeFromCart: { enabled: false },
|
|
348
|
-
initiateCheckout: { enabled: false },
|
|
349
|
-
addPaymentInfo: {
|
|
350
|
-
|
|
351
|
-
paymentMethod: 'CREDIT_CARD',
|
|
352
|
-
cardDetection: false,
|
|
353
|
-
autoDispatch: false,
|
|
354
|
-
},
|
|
355
|
-
search: { enabled: false },
|
|
364
|
+
lead: { enabled: false, sources: [] },
|
|
365
|
+
purchase: { enabled: false, sources: [] },
|
|
366
|
+
addToCart: { enabled: false, sources: [] },
|
|
367
|
+
removeFromCart: { enabled: false, sources: [] },
|
|
368
|
+
initiateCheckout: { enabled: false, sources: [] },
|
|
369
|
+
addPaymentInfo: { enabled: false, sources: [] },
|
|
370
|
+
search: { enabled: false, sources: [] },
|
|
356
371
|
viewContent: viewContentDetectorConfig(),
|
|
357
372
|
},
|
|
358
373
|
},
|
|
@@ -185,13 +185,24 @@ code { font-size: 0.85em; }
|
|
|
185
185
|
|
|
186
186
|
function viewContentDetectorConfig() {
|
|
187
187
|
return {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
188
|
+
enabled: true,
|
|
189
|
+
sources: [
|
|
190
|
+
{
|
|
191
|
+
name: 'viewContent-selector',
|
|
192
|
+
type: 'selector',
|
|
193
|
+
selector: [
|
|
194
|
+
'text:Ver produto',
|
|
195
|
+
{
|
|
196
|
+
type: 'text',
|
|
197
|
+
value: 'Ver produto',
|
|
198
|
+
exact: true
|
|
199
|
+
}
|
|
200
|
+
],
|
|
201
|
+
selectorType: 'css',
|
|
202
|
+
trigger: 'click'
|
|
203
|
+
}
|
|
204
|
+
]
|
|
205
|
+
};
|
|
195
206
|
}
|
|
196
207
|
|
|
197
208
|
function buildConfig() {
|
|
@@ -210,6 +221,64 @@ code { font-size: 0.85em; }
|
|
|
210
221
|
timeoutMs: 10000,
|
|
211
222
|
},
|
|
212
223
|
identity: { ...base.identity, pixelId: PIXEL_ID },
|
|
224
|
+
commerce: {
|
|
225
|
+
enabled: true,
|
|
226
|
+
currency: 'BRL',
|
|
227
|
+
catalog: {
|
|
228
|
+
products: [
|
|
229
|
+
{
|
|
230
|
+
id: 'main_offer',
|
|
231
|
+
name: 'Oferta Principal',
|
|
232
|
+
type: 'main',
|
|
233
|
+
price: 197,
|
|
234
|
+
currency: 'BRL',
|
|
235
|
+
quantity: 1,
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
id: 'sku_shoes_01',
|
|
239
|
+
name: 'Tênis Runner',
|
|
240
|
+
type: 'main',
|
|
241
|
+
price: 299,
|
|
242
|
+
currency: 'BRL',
|
|
243
|
+
quantity: 1,
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
},
|
|
247
|
+
cart: {
|
|
248
|
+
mode: 'single_product',
|
|
249
|
+
initialItems: [],
|
|
250
|
+
calculateValueFrom: 'cart',
|
|
251
|
+
allowDynamicItems: true,
|
|
252
|
+
},
|
|
253
|
+
mappings: {
|
|
254
|
+
attributes: {
|
|
255
|
+
productId: ['data-product-id', 'data-sku', 'data-content-id', 'data-offer-id'],
|
|
256
|
+
productName: ['data-product-name', 'data-name'],
|
|
257
|
+
price: ['data-product-price', 'data-price', 'data-value'],
|
|
258
|
+
quantity: ['data-quantity', 'data-qty'],
|
|
259
|
+
currency: ['data-currency'],
|
|
260
|
+
},
|
|
261
|
+
fields: {
|
|
262
|
+
productId: ['productId', 'contentId', 'sku'],
|
|
263
|
+
productName: ['productName', 'name'],
|
|
264
|
+
price: ['price', 'value'],
|
|
265
|
+
quantity: ['quantity'],
|
|
266
|
+
currency: ['currency'],
|
|
267
|
+
email: ['email'],
|
|
268
|
+
phone: ['phone'],
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
enrichment: {
|
|
272
|
+
pageView: { enabled: false, source: 'cart' },
|
|
273
|
+
viewContent: { enabled: true, source: 'event_or_cart' },
|
|
274
|
+
lead: { enabled: false, source: 'event_or_cart' },
|
|
275
|
+
addToCart: { enabled: true, source: 'event_or_cart' },
|
|
276
|
+
removeFromCart: { enabled: true, source: 'event_or_cart' },
|
|
277
|
+
initiateCheckout: { enabled: true, source: 'cart' },
|
|
278
|
+
addPaymentInfo: { enabled: true, source: 'cart' },
|
|
279
|
+
purchase: { enabled: true, source: 'cart' },
|
|
280
|
+
}
|
|
281
|
+
},
|
|
213
282
|
modules: {
|
|
214
283
|
...base.modules,
|
|
215
284
|
core: {
|
|
@@ -271,79 +340,27 @@ code { font-size: 0.85em; }
|
|
|
271
340
|
integrations: { ...base.modules.integrations, enabled: false },
|
|
272
341
|
conversion: {
|
|
273
342
|
enabled: true,
|
|
274
|
-
commerce: {
|
|
275
|
-
currency: 'BRL',
|
|
276
|
-
catalog: {
|
|
277
|
-
products: [
|
|
278
|
-
{
|
|
279
|
-
id: 'main_offer',
|
|
280
|
-
name: 'Oferta Principal',
|
|
281
|
-
type: 'main',
|
|
282
|
-
price: 197,
|
|
283
|
-
currency: 'BRL',
|
|
284
|
-
quantity: 1,
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
id: 'sku_shoes_01',
|
|
288
|
-
name: 'Tênis Runner',
|
|
289
|
-
type: 'main',
|
|
290
|
-
price: 299,
|
|
291
|
-
currency: 'BRL',
|
|
292
|
-
quantity: 1,
|
|
293
|
-
},
|
|
294
|
-
],
|
|
295
|
-
},
|
|
296
|
-
checkout: {
|
|
297
|
-
mode: 'single_product',
|
|
298
|
-
selectedItems: [],
|
|
299
|
-
calculateValueFrom: 'selected_items',
|
|
300
|
-
allowDynamicItems: true,
|
|
301
|
-
},
|
|
302
|
-
mappings: {
|
|
303
|
-
attributes: {
|
|
304
|
-
productId: ['data-product-id', 'data-sku', 'data-content-id', 'data-offer-id'],
|
|
305
|
-
productName: ['data-product-name', 'data-name'],
|
|
306
|
-
price: ['data-product-price', 'data-price', 'data-value'],
|
|
307
|
-
quantity: ['data-quantity', 'data-qty'],
|
|
308
|
-
currency: ['data-currency'],
|
|
309
|
-
},
|
|
310
|
-
fields: {
|
|
311
|
-
productId: ['productId', 'contentId', 'sku'],
|
|
312
|
-
productName: ['productName', 'name'],
|
|
313
|
-
price: ['price', 'value'],
|
|
314
|
-
quantity: ['quantity'],
|
|
315
|
-
currency: ['currency'],
|
|
316
|
-
email: ['email'],
|
|
317
|
-
phone: ['phone'],
|
|
318
|
-
},
|
|
319
|
-
},
|
|
320
|
-
},
|
|
321
343
|
manual: {
|
|
322
344
|
pageView: { enabled: false },
|
|
323
|
-
purchase: { enabled: false },
|
|
324
|
-
lead: { enabled: false },
|
|
325
|
-
addToCart: { enabled: false },
|
|
326
|
-
removeFromCart: { enabled: false },
|
|
327
|
-
initiateCheckout: { enabled: false },
|
|
328
|
-
addPaymentInfo: { enabled: false },
|
|
329
|
-
search: { enabled: false },
|
|
345
|
+
purchase: { enabled: false, sources: [] },
|
|
346
|
+
lead: { enabled: false, sources: [] },
|
|
347
|
+
addToCart: { enabled: false, sources: [] },
|
|
348
|
+
removeFromCart: { enabled: false, sources: [] },
|
|
349
|
+
initiateCheckout: { enabled: false, sources: [] },
|
|
350
|
+
addPaymentInfo: { enabled: false, sources: [] },
|
|
351
|
+
search: { enabled: false, sources: [] },
|
|
330
352
|
viewContent: { enabled: true },
|
|
331
353
|
},
|
|
332
354
|
auto: {
|
|
333
355
|
enabled: true,
|
|
334
356
|
detectors: {
|
|
335
|
-
lead: { enabled: false },
|
|
336
|
-
purchase: { enabled: false },
|
|
337
|
-
addToCart: { enabled: false },
|
|
338
|
-
removeFromCart: { enabled: false },
|
|
339
|
-
initiateCheckout: { enabled: false },
|
|
340
|
-
addPaymentInfo: {
|
|
341
|
-
|
|
342
|
-
paymentMethod: 'CREDIT_CARD',
|
|
343
|
-
cardDetection: false,
|
|
344
|
-
autoDispatch: false,
|
|
345
|
-
},
|
|
346
|
-
search: { enabled: false },
|
|
357
|
+
lead: { enabled: false, sources: [] },
|
|
358
|
+
purchase: { enabled: false, sources: [] },
|
|
359
|
+
addToCart: { enabled: false, sources: [] },
|
|
360
|
+
removeFromCart: { enabled: false, sources: [] },
|
|
361
|
+
initiateCheckout: { enabled: false, sources: [] },
|
|
362
|
+
addPaymentInfo: { enabled: false, sources: [] },
|
|
363
|
+
search: { enabled: false, sources: [] },
|
|
347
364
|
viewContent: viewContentDetectorConfig(),
|
|
348
365
|
},
|
|
349
366
|
},
|
|
@@ -3,12 +3,15 @@
|
|
|
3
3
|
> **Playgrounds oficiais de Commerce + AutoTrack:**
|
|
4
4
|
> [`../html-script/`](../html-script/README.md)
|
|
5
5
|
|
|
6
|
+
**Versão RC:** `@beworke/pixel` `0.1.0-rc.4` · Etapas 1–15B concluídas
|
|
7
|
+
|
|
6
8
|
A pasta histórica `examples/v2/` foi consolidada em `examples/html-script/` (Etapa 12L+), com um playground por evento/cenário.
|
|
7
9
|
|
|
8
10
|
Não existe mais um único `example-commerce-autotrack.html` monolítico. Use:
|
|
9
11
|
|
|
10
12
|
```txt
|
|
11
13
|
examples/html-script/release-candidate.html # RC 13A (script tag + API)
|
|
14
|
+
examples/html-script/example-landing-commerce.html # landing_page + PAGE_VIEW (14A)
|
|
12
15
|
examples/html-script/RELEASE_CANDIDATE.md
|
|
13
16
|
examples/html-script/lead/
|
|
14
17
|
examples/html-script/add-to-cart/
|
|
@@ -30,4 +33,4 @@ npm test
|
|
|
30
33
|
npm run test:smoke:real # skip seguro sem .env
|
|
31
34
|
```
|
|
32
35
|
|
|
33
|
-
Ver também: `PIXEL_V2_COMMERCE_AUTOTRACK_PLAN.md` (12L–
|
|
36
|
+
Ver também: `PIXEL_V2_COMMERCE_AUTOTRACK_PLAN.md` (12L–14C) e `PIXEL_V2_BACKLOG_PENDENCIAS_ISOLADO.md`.
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { c as UrlContextPayload, U as UrlContextConfig, d as UrlContextSnapshot } from './url-context-BjAsQoVl.js';
|
|
2
|
+
|
|
1
3
|
type AttributionIdentifiers = {
|
|
2
4
|
readonly fbclid?: string;
|
|
3
5
|
readonly fbp?: string;
|
|
@@ -38,6 +40,21 @@ interface AttributionService {
|
|
|
38
40
|
clear(): void;
|
|
39
41
|
}
|
|
40
42
|
|
|
43
|
+
interface StorageAdapter {
|
|
44
|
+
get(key: string): string | null;
|
|
45
|
+
set(key: string, value: string): void;
|
|
46
|
+
remove(key: string): void;
|
|
47
|
+
clear(): void;
|
|
48
|
+
}
|
|
49
|
+
interface StorageService {
|
|
50
|
+
get<T>(key: string): T | null;
|
|
51
|
+
set<T>(key: string, value: T): void;
|
|
52
|
+
remove(key: string): void;
|
|
53
|
+
has(key: string): boolean;
|
|
54
|
+
clear(): void;
|
|
55
|
+
createKey(key: string): string;
|
|
56
|
+
}
|
|
57
|
+
|
|
41
58
|
interface BasePixelEvent {
|
|
42
59
|
readonly type: string;
|
|
43
60
|
readonly timestamp: number;
|
|
@@ -48,6 +65,10 @@ interface BasePixelEvent {
|
|
|
48
65
|
readonly timezone?: string;
|
|
49
66
|
/** Attribution click IDs / cookies — anexados pelo BaseEventBuilder. */
|
|
50
67
|
readonly identifiers?: AttributionIdentifiers;
|
|
68
|
+
/** Snapshot sanitizado dos query params da URL — Core UrlContext. */
|
|
69
|
+
readonly queryParams?: Record<string, string>;
|
|
70
|
+
/** Auditoria operacional UrlContext (managed / forwarded / source). */
|
|
71
|
+
readonly urlContext?: UrlContextPayload;
|
|
51
72
|
}
|
|
52
73
|
|
|
53
74
|
interface PageViewEvent extends BasePixelEvent {
|
|
@@ -131,6 +152,125 @@ interface ExitIntentEvent extends BasePixelEvent {
|
|
|
131
152
|
readonly clientY?: number;
|
|
132
153
|
}
|
|
133
154
|
|
|
155
|
+
/**
|
|
156
|
+
* Evento público de presença periódica (Etapa 17).
|
|
157
|
+
* Representa estado, não transporte.
|
|
158
|
+
*/
|
|
159
|
+
interface BehaviorHeartbeatEvent extends BasePixelEvent {
|
|
160
|
+
readonly type: 'BEHAVIOR_HEARTBEAT';
|
|
161
|
+
readonly category: EngagementEventCategory;
|
|
162
|
+
readonly sequence: number;
|
|
163
|
+
readonly active: boolean;
|
|
164
|
+
readonly idle: boolean;
|
|
165
|
+
readonly visible: boolean;
|
|
166
|
+
readonly elapsedMs: number;
|
|
167
|
+
readonly lastActivityAt?: number;
|
|
168
|
+
readonly idleSince?: number;
|
|
169
|
+
readonly visibleSince?: number;
|
|
170
|
+
readonly hiddenSince?: number;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
interface ViewportEnterEvent extends BasePixelEvent {
|
|
174
|
+
readonly type: 'VIEWPORT_ENTER';
|
|
175
|
+
readonly category: EngagementEventCategory;
|
|
176
|
+
readonly key: string;
|
|
177
|
+
readonly selector: string;
|
|
178
|
+
readonly elementId: string;
|
|
179
|
+
readonly visibilityRatio: number;
|
|
180
|
+
readonly enterThreshold: number;
|
|
181
|
+
readonly exitThreshold: number;
|
|
182
|
+
readonly enteredAt: number;
|
|
183
|
+
readonly minVisibleMs: number;
|
|
184
|
+
readonly element?: ElementDescriptor;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
type ViewportExitReason = 'threshold' | 'not_intersecting' | 'removed';
|
|
188
|
+
interface ViewportExitEvent extends BasePixelEvent {
|
|
189
|
+
readonly type: 'VIEWPORT_EXIT';
|
|
190
|
+
readonly category: EngagementEventCategory;
|
|
191
|
+
readonly key: string;
|
|
192
|
+
readonly selector: string;
|
|
193
|
+
readonly elementId: string;
|
|
194
|
+
readonly visibilityRatio: number;
|
|
195
|
+
readonly enterThreshold: number;
|
|
196
|
+
readonly exitThreshold: number;
|
|
197
|
+
readonly enteredAt: number;
|
|
198
|
+
readonly exitedAt: number;
|
|
199
|
+
readonly visibleDurationMs: number;
|
|
200
|
+
readonly reason: ViewportExitReason;
|
|
201
|
+
readonly element?: ElementDescriptor;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
type EngagementLevel = 'low' | 'medium' | 'high';
|
|
205
|
+
type EngagementUpdateReason = 'initial' | 'interval' | 'signal_threshold' | 'manual_evaluation';
|
|
206
|
+
/**
|
|
207
|
+
* Evento público de atualização de engajamento (Etapa 19).
|
|
208
|
+
* Score determinístico 0..100. Não carrega a explicação completa do cálculo.
|
|
209
|
+
*/
|
|
210
|
+
interface EngagementUpdateEvent extends BasePixelEvent {
|
|
211
|
+
readonly type: 'ENGAGEMENT_UPDATE';
|
|
212
|
+
readonly category: EngagementEventCategory;
|
|
213
|
+
readonly score: number;
|
|
214
|
+
readonly previousScore: number;
|
|
215
|
+
readonly delta: number;
|
|
216
|
+
readonly level: EngagementLevel;
|
|
217
|
+
readonly evaluatedAt: number;
|
|
218
|
+
readonly reason: EngagementUpdateReason;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Evento público de resumo de engajamento (Etapa 19).
|
|
223
|
+
* Sem PII, sem DOM. Emitido no máximo uma vez no destroy quando configurado.
|
|
224
|
+
*/
|
|
225
|
+
interface EngagementSummaryEvent extends BasePixelEvent {
|
|
226
|
+
readonly type: 'ENGAGEMENT_SUMMARY';
|
|
227
|
+
readonly category: EngagementEventCategory;
|
|
228
|
+
readonly score: number;
|
|
229
|
+
readonly peakScore: number;
|
|
230
|
+
readonly averageScore: number;
|
|
231
|
+
readonly level: EngagementLevel;
|
|
232
|
+
readonly activeDurationMs: number;
|
|
233
|
+
readonly idleDurationMs: number;
|
|
234
|
+
readonly visibleDurationMs: number;
|
|
235
|
+
readonly hiddenDurationMs: number;
|
|
236
|
+
readonly maxScrollPercent: number;
|
|
237
|
+
readonly clickCount: number;
|
|
238
|
+
readonly rageClickCount: number;
|
|
239
|
+
readonly viewportEntryCount: number;
|
|
240
|
+
readonly heartbeatCount: number;
|
|
241
|
+
readonly startedAt: number;
|
|
242
|
+
readonly endedAt: number;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
type BehaviorState = 'NOT_INITIALIZED' | 'INITIALIZING' | 'ACTIVE' | 'IDLE' | 'HIDDEN' | 'PAUSED' | 'DESTROYING' | 'DESTROYED';
|
|
246
|
+
type BehaviorSessionSummaryReason = 'hidden' | 'destroy';
|
|
247
|
+
/**
|
|
248
|
+
* Evento público de resumo de sessão de comportamento (Etapa 20).
|
|
249
|
+
* Sem PII, sem DOM, sem sinais brutos. Emitido no máximo uma vez por
|
|
250
|
+
* fechamento lógico (hidden/destroy), conforme config.
|
|
251
|
+
*/
|
|
252
|
+
interface BehaviorSessionSummaryEvent extends BasePixelEvent {
|
|
253
|
+
readonly type: 'BEHAVIOR_SESSION_SUMMARY';
|
|
254
|
+
readonly category: EngagementEventCategory;
|
|
255
|
+
readonly activeDurationMs: number;
|
|
256
|
+
readonly idleDurationMs: number;
|
|
257
|
+
readonly visibleDurationMs: number;
|
|
258
|
+
readonly hiddenDurationMs: number;
|
|
259
|
+
readonly maxScrollPercent: number;
|
|
260
|
+
readonly clickCount: number;
|
|
261
|
+
readonly rageClickCount: number;
|
|
262
|
+
readonly viewportEntryCount: number;
|
|
263
|
+
readonly viewportVisibleDurationMs: number;
|
|
264
|
+
readonly heartbeatCount: number;
|
|
265
|
+
readonly engagementScore: number;
|
|
266
|
+
readonly engagementPeakScore: number;
|
|
267
|
+
readonly startedAt: number;
|
|
268
|
+
readonly endedAt: number;
|
|
269
|
+
readonly finalState: BehaviorState;
|
|
270
|
+
readonly generation: number;
|
|
271
|
+
readonly reason: BehaviorSessionSummaryReason;
|
|
272
|
+
}
|
|
273
|
+
|
|
134
274
|
interface SessionRenewedEvent extends BasePixelEvent {
|
|
135
275
|
readonly type: 'SESSION_RENEWED';
|
|
136
276
|
readonly sessionId: string;
|
|
@@ -241,7 +381,7 @@ interface SearchEvent extends BasePixelEvent {
|
|
|
241
381
|
readonly data: SearchData;
|
|
242
382
|
}
|
|
243
383
|
|
|
244
|
-
type PixelEvent = PageViewEvent | SessionRenewedEvent | SessionExpiredEvent | ScrollEvent | PageClickEvent | RageClickEvent | VisibilityChangeEvent | UserIdleEvent | UserActiveEvent | ExitIntentEvent | PurchaseEvent | LeadEvent | AddToCartEvent | RemoveFromCartEvent | InitiateCheckoutEvent | AddPaymentInfoEvent | ViewContentEvent | SearchEvent;
|
|
384
|
+
type PixelEvent = PageViewEvent | SessionRenewedEvent | SessionExpiredEvent | ScrollEvent | PageClickEvent | RageClickEvent | VisibilityChangeEvent | UserIdleEvent | UserActiveEvent | ExitIntentEvent | BehaviorHeartbeatEvent | ViewportEnterEvent | ViewportExitEvent | EngagementUpdateEvent | EngagementSummaryEvent | BehaviorSessionSummaryEvent | PurchaseEvent | LeadEvent | AddToCartEvent | RemoveFromCartEvent | InitiateCheckoutEvent | AddPaymentInfoEvent | ViewContentEvent | SearchEvent;
|
|
245
385
|
|
|
246
386
|
interface BrowserMetadata {
|
|
247
387
|
readonly url?: string;
|
|
@@ -262,13 +402,40 @@ interface BrowserMetadataService {
|
|
|
262
402
|
getMetadata(): BrowserMetadata;
|
|
263
403
|
}
|
|
264
404
|
|
|
405
|
+
/**
|
|
406
|
+
* Orquestra UrlContext: collect → manage → forward → decorate → snapshot.
|
|
407
|
+
* SSR-safe; init/destroy idempotentes.
|
|
408
|
+
*/
|
|
409
|
+
declare class UrlContextService {
|
|
410
|
+
private readonly storage;
|
|
411
|
+
private readonly rawConfig;
|
|
412
|
+
private readonly collector;
|
|
413
|
+
private readonly forwardResolver;
|
|
414
|
+
private store;
|
|
415
|
+
private managedResolver;
|
|
416
|
+
private decorator;
|
|
417
|
+
private snapshot;
|
|
418
|
+
private initialized;
|
|
419
|
+
private enabled;
|
|
420
|
+
constructor(config: UrlContextConfig | undefined, storage?: StorageService | null);
|
|
421
|
+
init(): void;
|
|
422
|
+
destroy(): void;
|
|
423
|
+
/** Alias de destroy — cleanup completo sem listeners/refs. */
|
|
424
|
+
dispose(): void;
|
|
425
|
+
isEnabled(): boolean;
|
|
426
|
+
getSnapshot(): UrlContextSnapshot;
|
|
427
|
+
getQueryParams(): Record<string, string>;
|
|
428
|
+
getUrlContext(): UrlContextPayload;
|
|
429
|
+
}
|
|
430
|
+
|
|
265
431
|
declare class BaseEventBuilder {
|
|
266
432
|
private readonly metadataService;
|
|
267
433
|
private readonly attribution;
|
|
268
|
-
|
|
434
|
+
private readonly urlContext;
|
|
435
|
+
constructor(metadataService: BrowserMetadataService, attribution?: AttributionService | null, urlContext?: UrlContextService | null);
|
|
269
436
|
build<T extends {
|
|
270
437
|
type: string;
|
|
271
438
|
}>(event: T): T & BasePixelEvent;
|
|
272
439
|
}
|
|
273
440
|
|
|
274
|
-
export { type AttributionService as A, type BrowserMetadataService as B, type
|
|
441
|
+
export { type EngagementEventCategory as $, type AttributionService as A, type BrowserMetadataService as B, type EngagementSummaryEvent as C, DEFAULT_ATTRIBUTION_CONFIG as D, type ExitIntentEvent as E, type BehaviorSessionSummaryEvent as F, type BehaviorSessionSummaryReason as G, type BehaviorState as H, type InitiateCheckoutData as I, type EngagementLevel as J, type EngagementUpdateReason as K, type LeadData as L, type PurchaseEvent as M, type LeadEvent as N, type AddToCartEvent as O, type PixelEvent as P, type RemoveFromCartEvent as Q, type RemoveFromCartData as R, type StorageAdapter as S, type InitiateCheckoutEvent as T, UrlContextService as U, type ViewContentData as V, type AddPaymentInfoEvent as W, type ViewContentEvent as X, type SearchEvent as Y, type ConversionEventData as Z, type PixelEventCategory as _, type PixelItem as a, type ConversionEventCategory as a0, type ElementDescriptor as a1, type StorageService as b, BaseEventBuilder as c, type AttributionConfig as d, type AttributionIdentifiers as e, type BrowserMetadata as f, type BasePixelEvent as g, type PageViewEvent as h, type SessionRenewedEvent as i, type SessionExpiredEvent as j, ATTRIBUTION_STORAGE_KEY as k, type PurchaseData as l, type AddToCartData as m, type AddPaymentInfoData as n, type SearchData as o, type ScrollEvent as p, type PageClickEvent as q, type RageClickEvent as r, type VisibilityChangeEvent as s, type UserIdleEvent as t, type UserActiveEvent as u, type BehaviorHeartbeatEvent as v, type ViewportEnterEvent as w, type ViewportExitEvent as x, type ViewportExitReason as y, type EngagementUpdateEvent as z };
|