@tagadapay/headless-sdk 1.14.1 → 1.17.0
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/dist/core/client.d.ts +12 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +16 -4
- package/dist/core/client.js.map +1 -1
- package/dist/core/http.d.ts +2 -0
- package/dist/core/http.d.ts.map +1 -1
- package/dist/core/http.js +21 -5
- package/dist/core/http.js.map +1 -1
- package/dist/core/index.d.ts +7 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/modules/checkout.d.ts +5 -1
- package/dist/core/modules/checkout.d.ts.map +1 -1
- package/dist/core/modules/checkout.js +22 -1
- package/dist/core/modules/checkout.js.map +1 -1
- package/dist/core/modules/commerce.d.ts +4 -0
- package/dist/core/modules/commerce.d.ts.map +1 -0
- package/dist/core/modules/commerce.js +5 -0
- package/dist/core/modules/commerce.js.map +1 -0
- package/dist/core/modules/customer.d.ts +47 -1
- package/dist/core/modules/customer.d.ts.map +1 -1
- package/dist/core/modules/customer.js +60 -3
- package/dist/core/modules/customer.js.map +1 -1
- package/dist/core/modules/experiments.d.ts +21 -0
- package/dist/core/modules/experiments.d.ts.map +1 -0
- package/dist/core/modules/experiments.js +85 -0
- package/dist/core/modules/experiments.js.map +1 -0
- package/dist/core/modules/funnel.d.ts +2 -1
- package/dist/core/modules/funnel.d.ts.map +1 -1
- package/dist/core/modules/funnel.js +6 -1
- package/dist/core/modules/funnel.js.map +1 -1
- package/dist/core/modules/lazyCommerce.d.ts +16 -0
- package/dist/core/modules/lazyCommerce.d.ts.map +1 -0
- package/dist/core/modules/lazyCommerce.js +20 -0
- package/dist/core/modules/lazyCommerce.js.map +1 -0
- package/dist/core/modules/offers.d.ts +30 -5
- package/dist/core/modules/offers.d.ts.map +1 -1
- package/dist/core/modules/offers.js +66 -7
- package/dist/core/modules/offers.js.map +1 -1
- package/dist/core/modules/payment.d.ts +19 -1
- package/dist/core/modules/payment.d.ts.map +1 -1
- package/dist/core/modules/payment.js +42 -3
- package/dist/core/modules/payment.js.map +1 -1
- package/dist/core/modules/portal/index.d.ts +102 -0
- package/dist/core/modules/portal/index.d.ts.map +1 -0
- package/dist/core/modules/portal/index.js +166 -0
- package/dist/core/modules/portal/index.js.map +1 -0
- package/dist/core/modules/portal/types.d.ts +617 -0
- package/dist/core/modules/portal/types.d.ts.map +1 -0
- package/dist/core/modules/portal/types.js +11 -0
- package/dist/core/modules/portal/types.js.map +1 -0
- package/dist/core/modules/rx.d.ts +32 -1
- package/dist/core/modules/rx.d.ts.map +1 -1
- package/dist/core/modules/rx.js +17 -1
- package/dist/core/modules/rx.js.map +1 -1
- package/dist/core/modules/track.d.ts +135 -0
- package/dist/core/modules/track.d.ts.map +1 -0
- package/dist/core/modules/track.js +412 -0
- package/dist/core/modules/track.js.map +1 -0
- package/dist/core/types.d.ts +13 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +0 -3
- package/dist/core/types.js.map +1 -1
- package/dist/core/version.d.ts +4 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +4 -0
- package/dist/core/version.js.map +1 -0
- package/dist/pixels/engine.d.ts +56 -0
- package/dist/pixels/engine.d.ts.map +1 -0
- package/dist/pixels/engine.js +263 -0
- package/dist/pixels/engine.js.map +1 -0
- package/dist/pixels/index.d.ts +10 -0
- package/dist/pixels/index.d.ts.map +1 -0
- package/dist/pixels/index.js +5 -0
- package/dist/pixels/index.js.map +1 -0
- package/dist/pixels/metaEventId.d.ts +15 -0
- package/dist/pixels/metaEventId.d.ts.map +1 -0
- package/dist/pixels/metaEventId.js +17 -0
- package/dist/pixels/metaEventId.js.map +1 -0
- package/dist/pixels/pixelIdentity.d.ts +34 -0
- package/dist/pixels/pixelIdentity.d.ts.map +1 -0
- package/dist/pixels/pixelIdentity.js +65 -0
- package/dist/pixels/pixelIdentity.js.map +1 -0
- package/dist/pixels/pixelMapping.d.ts +172 -0
- package/dist/pixels/pixelMapping.d.ts.map +1 -0
- package/dist/pixels/pixelMapping.js +574 -0
- package/dist/pixels/pixelMapping.js.map +1 -0
- package/dist/pixels/pixelTracker.d.ts +81 -0
- package/dist/pixels/pixelTracker.d.ts.map +1 -0
- package/dist/pixels/pixelTracker.js +797 -0
- package/dist/pixels/pixelTracker.js.map +1 -0
- package/dist/pixels/types.d.ts +103 -0
- package/dist/pixels/types.d.ts.map +1 -0
- package/dist/pixels/types.js +14 -0
- package/dist/pixels/types.js.map +1 -0
- package/dist/react/hooks/useStep.d.ts +7 -0
- package/dist/react/hooks/useStep.d.ts.map +1 -0
- package/dist/react/hooks/useStep.js +14 -0
- package/dist/react/hooks/useStep.js.map +1 -0
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +1 -0
- package/dist/react/index.js.map +1 -1
- package/dist/stripe/index.d.ts +3 -1
- package/dist/stripe/index.d.ts.map +1 -1
- package/dist/stripe/index.js +13 -6
- package/dist/stripe/index.js.map +1 -1
- package/dist/stripe/useStripeExpress.d.ts.map +1 -1
- package/dist/stripe/useStripeExpress.js +15 -1
- package/dist/stripe/useStripeExpress.js.map +1 -1
- package/dist/tagada-headless-commerce.min.js +8 -0
- package/dist/tagada-headless-commerce.min.js.map +7 -0
- package/dist/tagada-headless-react.min.js +2 -2
- package/dist/tagada-headless-react.min.js.map +4 -4
- package/dist/tagada-headless.js +722 -288
- package/dist/tagada-headless.min.js +2 -2
- package/dist/tagada-headless.min.js.map +4 -4
- package/dist/tagada-pixels.min.js +7 -0
- package/dist/tagada-pixels.min.js.map +7 -0
- package/dist/tgd/contract/attribution.d.ts +28 -0
- package/dist/tgd/contract/attribution.d.ts.map +1 -0
- package/dist/tgd/contract/attribution.js +44 -0
- package/dist/tgd/contract/attribution.js.map +1 -0
- package/dist/tgd/contract/browser-api.d.ts +57 -0
- package/dist/tgd/contract/browser-api.d.ts.map +1 -0
- package/dist/tgd/contract/browser-api.js +2 -0
- package/dist/tgd/contract/browser-api.js.map +1 -0
- package/dist/tgd/contract/canvas.d.ts +120 -0
- package/dist/tgd/contract/canvas.d.ts.map +1 -0
- package/dist/tgd/contract/canvas.js +12 -0
- package/dist/tgd/contract/canvas.js.map +1 -0
- package/dist/tgd/contract/dedup-keys.d.ts +24 -0
- package/dist/tgd/contract/dedup-keys.d.ts.map +1 -0
- package/dist/tgd/contract/dedup-keys.js +23 -0
- package/dist/tgd/contract/dedup-keys.js.map +1 -0
- package/dist/tgd/contract/destination-names.d.ts +4 -0
- package/dist/tgd/contract/destination-names.d.ts.map +1 -0
- package/dist/tgd/contract/destination-names.js +66 -0
- package/dist/tgd/contract/destination-names.js.map +1 -0
- package/dist/tgd/contract/destinations.d.ts +124 -0
- package/dist/tgd/contract/destinations.d.ts.map +1 -0
- package/dist/tgd/contract/destinations.js +63 -0
- package/dist/tgd/contract/destinations.js.map +1 -0
- package/dist/tgd/contract/envelope.d.ts +203 -0
- package/dist/tgd/contract/envelope.d.ts.map +1 -0
- package/dist/tgd/contract/envelope.js +103 -0
- package/dist/tgd/contract/envelope.js.map +1 -0
- package/dist/tgd/contract/experiments.d.ts +87 -0
- package/dist/tgd/contract/experiments.d.ts.map +1 -0
- package/dist/tgd/contract/experiments.js +2 -0
- package/dist/tgd/contract/experiments.js.map +1 -0
- package/dist/tgd/contract/index.d.ts +20 -0
- package/dist/tgd/contract/index.d.ts.map +1 -0
- package/dist/tgd/contract/index.js +20 -0
- package/dist/tgd/contract/index.js.map +1 -0
- package/dist/tgd/contract/is-test.d.ts +2 -0
- package/dist/tgd/contract/is-test.d.ts.map +1 -0
- package/dist/tgd/contract/is-test.js +3 -0
- package/dist/tgd/contract/is-test.js.map +1 -0
- package/dist/tgd/contract/junk-ids.d.ts +4 -0
- package/dist/tgd/contract/junk-ids.d.ts.map +1 -0
- package/dist/tgd/contract/junk-ids.js +7 -0
- package/dist/tgd/contract/junk-ids.js.map +1 -0
- package/dist/tgd/contract/limits.d.ts +19 -0
- package/dist/tgd/contract/limits.d.ts.map +1 -0
- package/dist/tgd/contract/limits.js +20 -0
- package/dist/tgd/contract/limits.js.map +1 -0
- package/dist/tgd/contract/names.d.ts +13 -0
- package/dist/tgd/contract/names.d.ts.map +1 -0
- package/dist/tgd/contract/names.js +15 -0
- package/dist/tgd/contract/names.js.map +1 -0
- package/dist/tgd/contract/registry.d.ts +116 -0
- package/dist/tgd/contract/registry.d.ts.map +1 -0
- package/dist/tgd/contract/registry.js +59 -0
- package/dist/tgd/contract/registry.js.map +1 -0
- package/dist/tgd/contract/signed-ids.d.ts +33 -0
- package/dist/tgd/contract/signed-ids.d.ts.map +1 -0
- package/dist/tgd/contract/signed-ids.js +26 -0
- package/dist/tgd/contract/signed-ids.js.map +1 -0
- package/dist/tgd/contract/snapshots.d.ts +69 -0
- package/dist/tgd/contract/snapshots.d.ts.map +1 -0
- package/dist/tgd/contract/snapshots.js +2 -0
- package/dist/tgd/contract/snapshots.js.map +1 -0
- package/dist/tgd/contract/time.d.ts +9 -0
- package/dist/tgd/contract/time.d.ts.map +1 -0
- package/dist/tgd/contract/time.js +9 -0
- package/dist/tgd/contract/time.js.map +1 -0
- package/dist/tgd/contract/unions.d.ts +21 -0
- package/dist/tgd/contract/unions.d.ts.map +1 -0
- package/dist/tgd/contract/unions.js +17 -0
- package/dist/tgd/contract/unions.js.map +1 -0
- package/dist/tgd/contract/unit.d.ts +12 -0
- package/dist/tgd/contract/unit.d.ts.map +1 -0
- package/dist/tgd/contract/unit.js +18 -0
- package/dist/tgd/contract/unit.js.map +1 -0
- package/dist/tgd/contract/wire.d.ts +59 -0
- package/dist/tgd/contract/wire.d.ts.map +1 -0
- package/dist/tgd/contract/wire.js +2 -0
- package/dist/tgd/contract/wire.js.map +1 -0
- package/package.json +8 -1
|
@@ -0,0 +1,574 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core pixel event mapping, parameter transformation, and event gating.
|
|
3
|
+
*
|
|
4
|
+
* This module is framework-agnostic (no React, no DOM) so it can be shared
|
|
5
|
+
* between the React `PixelTrackingProvider` and the standalone vanilla SDK.
|
|
6
|
+
*
|
|
7
|
+
* Official event name references (verified Feb 2026 against vendor docs):
|
|
8
|
+
* Meta: fbq('track', 'Purchase', { value, currency }) — developers.facebook.com/docs/meta-pixel/reference
|
|
9
|
+
* TikTok: ttq.track('Purchase', { value, currency }) — ads.tiktok.com/help/article/standard-events-parameters (Sep 2025)
|
|
10
|
+
* Snapchat: snaptr('track', 'PURCHASE', { price, currency }) — developers.snap.com/api/marketing-api/Conversions-API/Parameters
|
|
11
|
+
* Pinterest: pintrk('track', 'checkout', { value, currency }) — help.pinterest.com/en/business/article/add-event-codes
|
|
12
|
+
* GTM/GA4: gtag('event', 'purchase', { value, currency, items })
|
|
13
|
+
* Clarity: clarity('event', 'Purchase') — learn.microsoft.com/en-us/clarity/setup-and-installation/clarity-api
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Which key holds this entry's id: GTM stores a `containerId`, Clarity a
|
|
17
|
+
* `projectId`, every other provider a `pixelId`. Callers that sanitize, split
|
|
18
|
+
* or display an id go through here rather than testing the keys themselves,
|
|
19
|
+
* so a new provider with its own field name is one edit, not six.
|
|
20
|
+
*/
|
|
21
|
+
export function pixelIdKeyOf(pixel) {
|
|
22
|
+
if (pixel && typeof pixel === 'object') {
|
|
23
|
+
if ('containerId' in pixel)
|
|
24
|
+
return 'containerId';
|
|
25
|
+
if ('projectId' in pixel)
|
|
26
|
+
return 'projectId';
|
|
27
|
+
}
|
|
28
|
+
return 'pixelId';
|
|
29
|
+
}
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// GA4-only enrichment
|
|
32
|
+
//
|
|
33
|
+
// Canonical GA4 ecommerce `purchase` data carries user identity + a nested
|
|
34
|
+
// `ecommerce` object that the flat Meta/TikTok payload does not. We attach it
|
|
35
|
+
// to the shared track() params under the reserved `_ga4` key. ONLY mapGTMEvent
|
|
36
|
+
// reads it; `baseTransform` strips it so it can never leak into the
|
|
37
|
+
// Meta/TikTok/Snapchat/Pinterest payloads (those would otherwise spread it,
|
|
38
|
+
// shipping unhashed PII to those pixels). All monetary fields are in MINOR
|
|
39
|
+
// units here — mapGTMEvent converts to major via the same currency helpers.
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
export const GA4_PARAM_KEY = '_ga4';
|
|
42
|
+
/**
|
|
43
|
+
* Extract the distinct coupon codes applied to an order, comma-joined.
|
|
44
|
+
* Returns undefined when the order carries no coded promotions (automatic
|
|
45
|
+
* promotions have `code: null` and are deliberately excluded — GA4's `coupon`
|
|
46
|
+
* dimension is for codes the shopper entered).
|
|
47
|
+
*/
|
|
48
|
+
export function extractCouponCodes(order) {
|
|
49
|
+
const codes = (order.promotions ?? [])
|
|
50
|
+
.map((p) => p.code ?? p.promotion?.code)
|
|
51
|
+
.filter((c) => typeof c === 'string' && c.length > 0);
|
|
52
|
+
if (codes.length === 0)
|
|
53
|
+
return undefined;
|
|
54
|
+
return [...new Set(codes)].join(',');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Build the GA4-only enrichment payload (`_ga4`) from an order. Pure, defensive,
|
|
58
|
+
* framework-agnostic — shared by the native ThankYouPage and the Studio
|
|
59
|
+
* OrderConfirmation island so both emit an identical canonical GA4 purchase.
|
|
60
|
+
* Returns minor-unit amounts; mapGTMEvent converts them to major units.
|
|
61
|
+
*/
|
|
62
|
+
export function buildGa4PurchasePayload(order) {
|
|
63
|
+
const sourceItems = order.items ?? [];
|
|
64
|
+
const coupon = extractCouponCodes(order);
|
|
65
|
+
const summary = order.summaries?.find((s) => s.currency === order.currency) ?? order.summaries?.[0];
|
|
66
|
+
const itemsSum = sourceItems.reduce((sum, i) => sum + (i.adjustedAmount ?? 0) * (i.quantity ?? 0), 0);
|
|
67
|
+
// GA4 requires order-level discounts to be allocated across items: `price`
|
|
68
|
+
// must be the post-discount unit price and `discount` the per-unit monetary
|
|
69
|
+
// discount. Line-level discounts are already baked into adjustedAmount; the
|
|
70
|
+
// order-level remainder (totalPromotionAmount minus line-level discounts,
|
|
71
|
+
// capped to the item subtotal — promos can also cover shipping) is spread
|
|
72
|
+
// proportionally by line value.
|
|
73
|
+
const lineLevelDiscountTotal = sourceItems.reduce((sum, i) => sum + Math.max(0, (i.amount ?? i.adjustedAmount ?? 0) - (i.adjustedAmount ?? 0)) * (i.quantity ?? 0), 0);
|
|
74
|
+
const orderLevelDiscount = Math.min(Math.max(0, (summary?.totalPromotionAmount ?? 0) - lineLevelDiscountTotal), itemsSum);
|
|
75
|
+
let remainingAllocation = orderLevelDiscount;
|
|
76
|
+
const items = sourceItems.map((item, index) => {
|
|
77
|
+
const quantity = item.quantity ?? 0;
|
|
78
|
+
const unitAdjusted = item.adjustedAmount ?? 0;
|
|
79
|
+
const lineValue = unitAdjusted * quantity;
|
|
80
|
+
// Last item takes the remainder so allocations sum exactly.
|
|
81
|
+
const lineAllocation = orderLevelDiscount === 0 || itemsSum === 0
|
|
82
|
+
? 0
|
|
83
|
+
: index === sourceItems.length - 1
|
|
84
|
+
? remainingAllocation
|
|
85
|
+
: Math.round((orderLevelDiscount * lineValue) / itemsSum);
|
|
86
|
+
remainingAllocation -= lineAllocation;
|
|
87
|
+
const unitAllocation = quantity > 0 ? lineAllocation / quantity : 0;
|
|
88
|
+
const lineLevelUnitDiscount = Math.max(0, (item.amount ?? unitAdjusted) - unitAdjusted);
|
|
89
|
+
const unitDiscount = lineLevelUnitDiscount + unitAllocation;
|
|
90
|
+
const ga4Item = {
|
|
91
|
+
item_id: item.productId || undefined,
|
|
92
|
+
// GA4 convention: item_name = product, item_variant = variant.
|
|
93
|
+
item_name: item.orderLineItemProduct?.name || item.orderLineItemVariant?.name || undefined,
|
|
94
|
+
item_variant: item.orderLineItemVariant?.name || undefined,
|
|
95
|
+
price: unitAdjusted - unitAllocation,
|
|
96
|
+
quantity: item.quantity,
|
|
97
|
+
};
|
|
98
|
+
if (unitDiscount > 0) {
|
|
99
|
+
ga4Item.discount = unitDiscount;
|
|
100
|
+
if (coupon)
|
|
101
|
+
ga4Item.coupon = coupon;
|
|
102
|
+
}
|
|
103
|
+
return ga4Item;
|
|
104
|
+
});
|
|
105
|
+
// Prefer the captured paid amount; fall back to the summary total, then to
|
|
106
|
+
// the sum of line items. Guards against the value:0 seen in the field.
|
|
107
|
+
const value = order.paidAmount && order.paidAmount > 0
|
|
108
|
+
? order.paidAmount
|
|
109
|
+
: (summary?.totalAdjustedAmount ?? itemsSum);
|
|
110
|
+
const payload = { items, value };
|
|
111
|
+
if (summary?.totalTaxAmount != null)
|
|
112
|
+
payload.tax = summary.totalTaxAmount;
|
|
113
|
+
if (summary?.shippingCost != null)
|
|
114
|
+
payload.shipping = summary.shippingCost;
|
|
115
|
+
if (coupon)
|
|
116
|
+
payload.coupon = coupon;
|
|
117
|
+
if (order.customer?.id)
|
|
118
|
+
payload.user_id = order.customer.id;
|
|
119
|
+
const addr = order.billingAddress ?? order.shippingAddress;
|
|
120
|
+
const userData = {};
|
|
121
|
+
if (order.customer?.email)
|
|
122
|
+
userData.email_address = order.customer.email;
|
|
123
|
+
const phone = order.customer?.phone || addr?.phone;
|
|
124
|
+
if (phone)
|
|
125
|
+
userData.phone_number = phone;
|
|
126
|
+
if (addr) {
|
|
127
|
+
const address = {
|
|
128
|
+
first_name: addr.firstName || order.customer?.firstName || undefined,
|
|
129
|
+
last_name: addr.lastName || order.customer?.lastName || undefined,
|
|
130
|
+
street: addr.address1 || undefined,
|
|
131
|
+
city: addr.city || undefined,
|
|
132
|
+
region: addr.state || undefined,
|
|
133
|
+
postal_code: addr.postal || undefined,
|
|
134
|
+
country: addr.country || undefined,
|
|
135
|
+
};
|
|
136
|
+
if (Object.values(address).some((v) => v != null))
|
|
137
|
+
userData.address = address;
|
|
138
|
+
}
|
|
139
|
+
if (Object.keys(userData).length > 0)
|
|
140
|
+
payload.user_data = userData;
|
|
141
|
+
return payload;
|
|
142
|
+
}
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
// Currency conversion helper (inline, zero-dep)
|
|
145
|
+
// ---------------------------------------------------------------------------
|
|
146
|
+
/**
|
|
147
|
+
* Convert minor units (cents) to major units using ISO 4217 digit counts.
|
|
148
|
+
* Falls back to ÷100 for unknown currencies.
|
|
149
|
+
*/
|
|
150
|
+
const ZERO_DECIMAL_CURRENCIES = new Set([
|
|
151
|
+
'BIF', 'CLP', 'DJF', 'GNF', 'ISK', 'JPY', 'KMF', 'KRW',
|
|
152
|
+
'PYG', 'RWF', 'UGX', 'VND', 'VUV', 'XAF', 'XOF', 'XPF',
|
|
153
|
+
]);
|
|
154
|
+
const THREE_DECIMAL_CURRENCIES = new Set(['BHD', 'IQD', 'JOD', 'KWD', 'LYD', 'OMR', 'TND']);
|
|
155
|
+
function minorToMajor(amount, currency) {
|
|
156
|
+
const code = currency.toUpperCase();
|
|
157
|
+
if (ZERO_DECIMAL_CURRENCIES.has(code))
|
|
158
|
+
return amount;
|
|
159
|
+
if (THREE_DECIMAL_CURRENCIES.has(code))
|
|
160
|
+
return amount / 1000;
|
|
161
|
+
return amount / 100;
|
|
162
|
+
}
|
|
163
|
+
// ---------------------------------------------------------------------------
|
|
164
|
+
// Event gating – respects per-event toggles
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
/**
|
|
167
|
+
* Returns `true` if the given event is enabled on the pixel config.
|
|
168
|
+
* If the pixel has no `events` map (e.g. MetaConversionTrackingConfig) we allow all.
|
|
169
|
+
*/
|
|
170
|
+
export function isEventEnabled(pixel, eventName) {
|
|
171
|
+
if (!('events' in pixel) || !pixel.events)
|
|
172
|
+
return true;
|
|
173
|
+
const events = pixel.events;
|
|
174
|
+
if (!(eventName in events))
|
|
175
|
+
return true; // unknown event → allow
|
|
176
|
+
return events[eventName] === true;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Filter an array of pixel configs to only those that are globally enabled
|
|
180
|
+
* AND have the specific event toggled on.
|
|
181
|
+
*/
|
|
182
|
+
export function getEligiblePixels(pixels, eventName) {
|
|
183
|
+
if (!pixels)
|
|
184
|
+
return [];
|
|
185
|
+
return pixels.filter((p) => p.enabled && isEventEnabled(p, eventName));
|
|
186
|
+
}
|
|
187
|
+
// ---------------------------------------------------------------------------
|
|
188
|
+
// Shared parameter transforms
|
|
189
|
+
// ---------------------------------------------------------------------------
|
|
190
|
+
function ensureCurrencyUppercase(params) {
|
|
191
|
+
if (params.currency && typeof params.currency === 'string') {
|
|
192
|
+
return { ...params, currency: params.currency.toUpperCase() };
|
|
193
|
+
}
|
|
194
|
+
return { ...params };
|
|
195
|
+
}
|
|
196
|
+
function convertValueToMajor(params) {
|
|
197
|
+
if (params.currency && params.value != null) {
|
|
198
|
+
const currency = String(params.currency);
|
|
199
|
+
const major = minorToMajor(Number(params.value), currency);
|
|
200
|
+
return { ...params, value: major };
|
|
201
|
+
}
|
|
202
|
+
return params;
|
|
203
|
+
}
|
|
204
|
+
/** Convert top-level monetary fields (shipping, tax, subtotal, total_discount) from minor → major units. */
|
|
205
|
+
function convertMonetaryFieldsToMajor(params) {
|
|
206
|
+
const currency = params.currency ? String(params.currency) : null;
|
|
207
|
+
if (!currency)
|
|
208
|
+
return params;
|
|
209
|
+
const result = { ...params };
|
|
210
|
+
for (const field of ['shipping', 'tax', 'subtotal', 'total_discount']) {
|
|
211
|
+
if (result[field] != null) {
|
|
212
|
+
result[field] = minorToMajor(Number(result[field]), currency);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return result;
|
|
216
|
+
}
|
|
217
|
+
/** Convert price fields inside contents[] items from minor → major units. */
|
|
218
|
+
function convertContentsPricesToMajor(params) {
|
|
219
|
+
if (!params.contents || !Array.isArray(params.contents))
|
|
220
|
+
return params;
|
|
221
|
+
const currency = params.currency ? String(params.currency) : null;
|
|
222
|
+
const result = { ...params };
|
|
223
|
+
result.contents = params.contents.map((item) => {
|
|
224
|
+
const itemCurrency = item.currency ? String(item.currency) : currency;
|
|
225
|
+
if (!itemCurrency)
|
|
226
|
+
return { ...item };
|
|
227
|
+
const converted = { ...item };
|
|
228
|
+
if (converted.price != null)
|
|
229
|
+
converted.price = minorToMajor(Number(converted.price), itemCurrency);
|
|
230
|
+
if (converted.original_price != null)
|
|
231
|
+
converted.original_price = minorToMajor(Number(converted.original_price), itemCurrency);
|
|
232
|
+
return converted;
|
|
233
|
+
});
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
function baseTransform(params) {
|
|
237
|
+
let p = ensureCurrencyUppercase(params);
|
|
238
|
+
p = convertValueToMajor(p);
|
|
239
|
+
p = convertMonetaryFieldsToMajor(p);
|
|
240
|
+
p = convertContentsPricesToMajor(p);
|
|
241
|
+
// Strip GA4-only enrichment so it never reaches Meta/TikTok/Snapchat/Pinterest
|
|
242
|
+
// (those mappers spread all params). mapGTMEvent reads it from the raw input.
|
|
243
|
+
if (GA4_PARAM_KEY in p) {
|
|
244
|
+
p = { ...p };
|
|
245
|
+
delete p[GA4_PARAM_KEY];
|
|
246
|
+
}
|
|
247
|
+
return p;
|
|
248
|
+
}
|
|
249
|
+
// ---------------------------------------------------------------------------
|
|
250
|
+
// Meta / Facebook
|
|
251
|
+
// ---------------------------------------------------------------------------
|
|
252
|
+
const META_EVENT_MAP = {
|
|
253
|
+
PageView: 'PageView',
|
|
254
|
+
ViewContent: 'ViewContent',
|
|
255
|
+
AddToCart: 'AddToCart',
|
|
256
|
+
AddToWishlist: 'AddToWishlist',
|
|
257
|
+
Search: 'Search',
|
|
258
|
+
InitiateCheckout: 'InitiateCheckout',
|
|
259
|
+
AddPaymentInfo: 'AddPaymentInfo',
|
|
260
|
+
Purchase: 'Purchase',
|
|
261
|
+
Lead: 'Lead',
|
|
262
|
+
CompleteRegistration: 'CompleteRegistration',
|
|
263
|
+
};
|
|
264
|
+
export function mapMetaEvent(eventName, parameters) {
|
|
265
|
+
const name = META_EVENT_MAP[eventName] ?? eventName;
|
|
266
|
+
// `coupon` intentionally flows through: Meta has no standard coupon param but
|
|
267
|
+
// accepts custom parameters on standard events (usable in custom conversions).
|
|
268
|
+
const params = baseTransform(parameters);
|
|
269
|
+
if (params.contents && Array.isArray(params.contents)) {
|
|
270
|
+
params.content_ids = params.contents.map((i) => i.content_id).filter(Boolean);
|
|
271
|
+
params.content_type = params.content_type ?? 'product';
|
|
272
|
+
// Reshape contents to Meta's expected format (prices already converted by baseTransform)
|
|
273
|
+
params.contents = params.contents.map((item) => ({
|
|
274
|
+
id: item.content_id,
|
|
275
|
+
quantity: item.quantity != null ? Number(item.quantity) : undefined,
|
|
276
|
+
item_price: item.price != null ? Number(item.price) : undefined,
|
|
277
|
+
content_name: item.content_name,
|
|
278
|
+
content_category: item.content_category,
|
|
279
|
+
}));
|
|
280
|
+
}
|
|
281
|
+
return { name, params };
|
|
282
|
+
}
|
|
283
|
+
// ---------------------------------------------------------------------------
|
|
284
|
+
// TikTok
|
|
285
|
+
// Official: ttq.track('Purchase', { value, currency })
|
|
286
|
+
// Source: ads.tiktok.com/help/article/standard-events-parameters (Sep 2025)
|
|
287
|
+
// Standard events use PascalCase. Note: TikTok has no standard PageView event
|
|
288
|
+
// (page views use ttq.page()), so we pass it as-is for custom tracking.
|
|
289
|
+
// TikTok has no Lead event; SubmitForm is the closest standard equivalent.
|
|
290
|
+
// ---------------------------------------------------------------------------
|
|
291
|
+
const TIKTOK_EVENT_MAP = {
|
|
292
|
+
PageView: 'Pageview',
|
|
293
|
+
ViewContent: 'ViewContent',
|
|
294
|
+
AddToCart: 'AddToCart',
|
|
295
|
+
AddToWishlist: 'AddToWishlist',
|
|
296
|
+
Search: 'Search',
|
|
297
|
+
InitiateCheckout: 'InitiateCheckout',
|
|
298
|
+
AddPaymentInfo: 'AddPaymentInfo',
|
|
299
|
+
Purchase: 'Purchase',
|
|
300
|
+
Lead: 'SubmitForm',
|
|
301
|
+
CompleteRegistration: 'CompleteRegistration',
|
|
302
|
+
};
|
|
303
|
+
export function mapTikTokEvent(eventName, parameters) {
|
|
304
|
+
const name = TIKTOK_EVENT_MAP[eventName] ?? eventName;
|
|
305
|
+
const params = baseTransform(parameters);
|
|
306
|
+
// TikTok's event spec has no coupon/discount parameter — strip it to keep
|
|
307
|
+
// the payload within spec (avoids Events Manager diagnostics warnings).
|
|
308
|
+
delete params.coupon;
|
|
309
|
+
if (params.contents && Array.isArray(params.contents)) {
|
|
310
|
+
const ids = params.contents
|
|
311
|
+
.map((i) => i.content_id)
|
|
312
|
+
.filter(Boolean);
|
|
313
|
+
// TikTok requires content_id (singular) at the top level for VSA
|
|
314
|
+
if (!params.content_id && ids.length > 0) {
|
|
315
|
+
params.content_id = ids.length === 1 ? ids[0] : JSON.stringify(ids);
|
|
316
|
+
}
|
|
317
|
+
// Also keep content_ids for backwards compatibility
|
|
318
|
+
if (!params.content_ids) {
|
|
319
|
+
params.content_ids = ids;
|
|
320
|
+
}
|
|
321
|
+
// Reshape contents to TikTok's expected format (prices already converted by baseTransform)
|
|
322
|
+
params.contents = params.contents.map((item) => ({
|
|
323
|
+
content_id: item.content_id,
|
|
324
|
+
content_name: item.content_name,
|
|
325
|
+
content_type: item.content_type ?? 'product',
|
|
326
|
+
content_category: item.content_category,
|
|
327
|
+
price: item.price != null ? Number(item.price) : undefined,
|
|
328
|
+
original_price: item.original_price != null ? Number(item.original_price) : undefined,
|
|
329
|
+
quantity: item.quantity != null ? Number(item.quantity) : undefined,
|
|
330
|
+
description: item.description,
|
|
331
|
+
}));
|
|
332
|
+
}
|
|
333
|
+
// Set required fields for InitiateCheckout
|
|
334
|
+
if (eventName === 'InitiateCheckout') {
|
|
335
|
+
params.content_type = params.content_type ?? 'product';
|
|
336
|
+
if (!params.delivery_category) {
|
|
337
|
+
params.delivery_category = 'home_delivery';
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return { name, params };
|
|
341
|
+
}
|
|
342
|
+
// ---------------------------------------------------------------------------
|
|
343
|
+
// Snapchat
|
|
344
|
+
// Official: snaptr('track', 'PURCHASE', { price, currency })
|
|
345
|
+
// Source: developers.snap.com/api/marketing-api/Conversions-API/Parameters
|
|
346
|
+
// All event names are UPPER_SNAKE_CASE.
|
|
347
|
+
// Note: Snapchat has no LEAD standard event; we pass it as-is (custom event).
|
|
348
|
+
// ---------------------------------------------------------------------------
|
|
349
|
+
const SNAPCHAT_EVENT_MAP = {
|
|
350
|
+
PageView: 'PAGE_VIEW',
|
|
351
|
+
ViewContent: 'VIEW_CONTENT',
|
|
352
|
+
AddToCart: 'ADD_CART',
|
|
353
|
+
AddToWishlist: 'ADD_TO_WISHLIST',
|
|
354
|
+
Search: 'SEARCH',
|
|
355
|
+
InitiateCheckout: 'START_CHECKOUT',
|
|
356
|
+
AddPaymentInfo: 'ADD_BILLING',
|
|
357
|
+
Purchase: 'PURCHASE',
|
|
358
|
+
Lead: 'LEAD',
|
|
359
|
+
CompleteRegistration: 'SIGN_UP',
|
|
360
|
+
};
|
|
361
|
+
export function mapSnapchatEvent(eventName, parameters) {
|
|
362
|
+
const name = SNAPCHAT_EVENT_MAP[eventName] ?? eventName;
|
|
363
|
+
let params = baseTransform(parameters);
|
|
364
|
+
// Snap's parameter spec has no coupon/discount field — strip it.
|
|
365
|
+
delete params.coupon;
|
|
366
|
+
// Snapchat uses `price` not `value`
|
|
367
|
+
if ('value' in params) {
|
|
368
|
+
params = { ...params, price: params.value };
|
|
369
|
+
delete params.value;
|
|
370
|
+
}
|
|
371
|
+
// Snapchat uses `number_items` not `num_items`
|
|
372
|
+
if ('num_items' in params) {
|
|
373
|
+
params = { ...params, number_items: params.num_items };
|
|
374
|
+
delete params.num_items;
|
|
375
|
+
}
|
|
376
|
+
if (params.contents && Array.isArray(params.contents)) {
|
|
377
|
+
params.item_ids = params.contents.map((i) => i.content_id).filter(Boolean);
|
|
378
|
+
}
|
|
379
|
+
return { name, params };
|
|
380
|
+
}
|
|
381
|
+
// ---------------------------------------------------------------------------
|
|
382
|
+
// Pinterest
|
|
383
|
+
// Official: pintrk('track', 'checkout', { value, currency, line_items })
|
|
384
|
+
// Event names are all lowercase.
|
|
385
|
+
// ---------------------------------------------------------------------------
|
|
386
|
+
const PINTEREST_EVENT_MAP = {
|
|
387
|
+
PageView: 'pagevisit',
|
|
388
|
+
ViewContent: 'viewcontent',
|
|
389
|
+
AddToCart: 'addtocart',
|
|
390
|
+
AddToWishlist: 'addtowishlist',
|
|
391
|
+
Search: 'search',
|
|
392
|
+
InitiateCheckout: 'initiatecheckout',
|
|
393
|
+
AddPaymentInfo: 'addpaymentinfo',
|
|
394
|
+
Purchase: 'checkout',
|
|
395
|
+
Lead: 'lead',
|
|
396
|
+
CompleteRegistration: 'signup',
|
|
397
|
+
};
|
|
398
|
+
export function mapPinterestEvent(eventName, parameters) {
|
|
399
|
+
const name = PINTEREST_EVENT_MAP[eventName] ?? eventName.toLowerCase();
|
|
400
|
+
const params = baseTransform(parameters);
|
|
401
|
+
// Pinterest's official field for coupon codes is `promo_code`.
|
|
402
|
+
if (params.coupon != null) {
|
|
403
|
+
params.promo_code = params.coupon;
|
|
404
|
+
delete params.coupon;
|
|
405
|
+
}
|
|
406
|
+
if (params.order_quantity !== undefined) {
|
|
407
|
+
params.order_quantity = Number(params.order_quantity);
|
|
408
|
+
}
|
|
409
|
+
if (params.contents && Array.isArray(params.contents)) {
|
|
410
|
+
// Reshape to Pinterest line_items format (prices already converted by baseTransform)
|
|
411
|
+
params.line_items = params.contents.map((item) => ({
|
|
412
|
+
product_id: item.content_id,
|
|
413
|
+
product_name: item.content_name,
|
|
414
|
+
product_category: item.content_category,
|
|
415
|
+
product_price: item.price != null ? Number(item.price) : undefined,
|
|
416
|
+
product_quantity: item.quantity != null ? Number(item.quantity) : undefined,
|
|
417
|
+
}));
|
|
418
|
+
}
|
|
419
|
+
return { name, params };
|
|
420
|
+
}
|
|
421
|
+
// ---------------------------------------------------------------------------
|
|
422
|
+
// GTM / GA4 / Google Ads
|
|
423
|
+
// Official: gtag('event', 'purchase', { value, currency, items })
|
|
424
|
+
// Event names are snake_case (GA4 convention).
|
|
425
|
+
// ---------------------------------------------------------------------------
|
|
426
|
+
const GTM_EVENT_MAP = {
|
|
427
|
+
PageView: 'page_view',
|
|
428
|
+
ViewContent: 'view_item',
|
|
429
|
+
AddToCart: 'add_to_cart',
|
|
430
|
+
AddToWishlist: 'add_to_wishlist',
|
|
431
|
+
Search: 'search',
|
|
432
|
+
InitiateCheckout: 'begin_checkout',
|
|
433
|
+
AddPaymentInfo: 'add_payment_info',
|
|
434
|
+
Purchase: 'purchase',
|
|
435
|
+
Lead: 'generate_lead',
|
|
436
|
+
CompleteRegistration: 'sign_up',
|
|
437
|
+
Conversion: 'conversion',
|
|
438
|
+
};
|
|
439
|
+
export function mapGTMEvent(eventName, parameters) {
|
|
440
|
+
const name = GTM_EVENT_MAP[eventName] ?? eventName.toLowerCase();
|
|
441
|
+
// Canonical GA4 ecommerce shape: when the caller attached `_ga4` enrichment
|
|
442
|
+
// (purchase from the thank-you page) emit a nested `ecommerce` object plus
|
|
443
|
+
// user identity instead of the legacy flat payload. baseTransform strips
|
|
444
|
+
// `_ga4`, so read it from the raw input first.
|
|
445
|
+
const ga4 = parameters[GA4_PARAM_KEY];
|
|
446
|
+
if (ga4) {
|
|
447
|
+
const currency = typeof parameters.currency === 'string' ? parameters.currency.toUpperCase() : undefined;
|
|
448
|
+
const toMajor = (v) => v == null || !currency ? v : minorToMajor(Number(v), currency);
|
|
449
|
+
const ecommerce = {
|
|
450
|
+
transaction_id: parameters.transaction_id,
|
|
451
|
+
currency,
|
|
452
|
+
value: toMajor(ga4.value),
|
|
453
|
+
};
|
|
454
|
+
if (ga4.tax != null)
|
|
455
|
+
ecommerce.tax = toMajor(ga4.tax);
|
|
456
|
+
if (ga4.shipping != null)
|
|
457
|
+
ecommerce.shipping = toMajor(ga4.shipping);
|
|
458
|
+
if (ga4.coupon)
|
|
459
|
+
ecommerce.coupon = ga4.coupon;
|
|
460
|
+
ecommerce.items = (ga4.items ?? []).map((item) => ({
|
|
461
|
+
item_id: item.item_id,
|
|
462
|
+
item_name: item.item_name,
|
|
463
|
+
item_variant: item.item_variant,
|
|
464
|
+
price: toMajor(item.price),
|
|
465
|
+
quantity: item.quantity != null ? Number(item.quantity) : undefined,
|
|
466
|
+
...(item.discount != null ? { discount: toMajor(item.discount) } : {}),
|
|
467
|
+
...(item.coupon ? { coupon: item.coupon } : {}),
|
|
468
|
+
}));
|
|
469
|
+
const out = { ecommerce };
|
|
470
|
+
if (ga4.user_id)
|
|
471
|
+
out.user_id = ga4.user_id;
|
|
472
|
+
if (ga4.user_data)
|
|
473
|
+
out.user_data = ga4.user_data;
|
|
474
|
+
return { name, params: out };
|
|
475
|
+
}
|
|
476
|
+
const params = baseTransform(parameters);
|
|
477
|
+
if (params.num_items !== undefined) {
|
|
478
|
+
params.num_items = Number(params.num_items);
|
|
479
|
+
}
|
|
480
|
+
if (params.contents && Array.isArray(params.contents)) {
|
|
481
|
+
// Reshape to GA4 items format (prices already converted by baseTransform)
|
|
482
|
+
params.items = params.contents.map((item) => ({
|
|
483
|
+
item_id: item.content_id,
|
|
484
|
+
item_name: item.content_name,
|
|
485
|
+
item_category: item.content_category,
|
|
486
|
+
price: item.price != null ? Number(item.price) : undefined,
|
|
487
|
+
quantity: item.quantity != null ? Number(item.quantity) : undefined,
|
|
488
|
+
}));
|
|
489
|
+
params.contents = params.contents.map((item) => ({
|
|
490
|
+
id: item.content_id,
|
|
491
|
+
name: item.content_name,
|
|
492
|
+
category: item.content_category,
|
|
493
|
+
price: item.price != null ? Number(item.price) : undefined,
|
|
494
|
+
quantity: item.quantity != null ? Number(item.quantity) : undefined,
|
|
495
|
+
}));
|
|
496
|
+
}
|
|
497
|
+
return { name, params };
|
|
498
|
+
}
|
|
499
|
+
// ---------------------------------------------------------------------------
|
|
500
|
+
// Microsoft Clarity
|
|
501
|
+
// Official: clarity('event', 'Purchase') — custom ("smart") events take a name
|
|
502
|
+
// and no parameters, so the mapped params are carried for the dedup guard only.
|
|
503
|
+
// Clarity records page views by itself; the PageView toggle still emits a named
|
|
504
|
+
// event so a merchant can filter recordings on it like any other funnel step.
|
|
505
|
+
// ---------------------------------------------------------------------------
|
|
506
|
+
const CLARITY_EVENT_MAP = {
|
|
507
|
+
PageView: 'PageView',
|
|
508
|
+
ViewContent: 'ViewContent',
|
|
509
|
+
AddToCart: 'AddToCart',
|
|
510
|
+
AddToWishlist: 'AddToWishlist',
|
|
511
|
+
Search: 'Search',
|
|
512
|
+
InitiateCheckout: 'InitiateCheckout',
|
|
513
|
+
AddPaymentInfo: 'AddPaymentInfo',
|
|
514
|
+
Purchase: 'Purchase',
|
|
515
|
+
Lead: 'Lead',
|
|
516
|
+
CompleteRegistration: 'CompleteRegistration',
|
|
517
|
+
};
|
|
518
|
+
export function mapClarityEvent(eventName, parameters) {
|
|
519
|
+
const name = CLARITY_EVENT_MAP[eventName] ?? eventName;
|
|
520
|
+
return { name, params: baseTransform(parameters) };
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* Append Google Ads `send_to` parameter when conversion tracking is configured.
|
|
524
|
+
*/
|
|
525
|
+
export function applyGoogleAdsConversion(params, eventName, pixel) {
|
|
526
|
+
if ((eventName === 'Purchase' || eventName === 'Conversion') &&
|
|
527
|
+
pixel.googleAdsConversionId &&
|
|
528
|
+
pixel.googleAdsConversionLabel) {
|
|
529
|
+
return { ...params, send_to: `${pixel.googleAdsConversionId}/${pixel.googleAdsConversionLabel}` };
|
|
530
|
+
}
|
|
531
|
+
return params;
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* Given a PixelsConfig and an event, return per-provider mapped events
|
|
535
|
+
* for every eligible (enabled + event-toggled-on) pixel.
|
|
536
|
+
*/
|
|
537
|
+
export function resolvePixelEvents(pixels, eventName, parameters) {
|
|
538
|
+
const results = [];
|
|
539
|
+
const fb = getEligiblePixels(pixels.facebook, eventName);
|
|
540
|
+
if (fb.length > 0) {
|
|
541
|
+
const mapped = mapMetaEvent(eventName, parameters);
|
|
542
|
+
fb.forEach((pixel) => results.push({ provider: 'facebook', mapped, pixel }));
|
|
543
|
+
}
|
|
544
|
+
const tt = getEligiblePixels(pixels.tiktok, eventName);
|
|
545
|
+
if (tt.length > 0) {
|
|
546
|
+
const mapped = mapTikTokEvent(eventName, parameters);
|
|
547
|
+
tt.forEach((pixel) => results.push({ provider: 'tiktok', mapped, pixel }));
|
|
548
|
+
}
|
|
549
|
+
const sc = getEligiblePixels(pixels.snapchat, eventName);
|
|
550
|
+
if (sc.length > 0) {
|
|
551
|
+
const mapped = mapSnapchatEvent(eventName, parameters);
|
|
552
|
+
sc.forEach((pixel) => results.push({ provider: 'snapchat', mapped, pixel }));
|
|
553
|
+
}
|
|
554
|
+
const pt = getEligiblePixels(pixels.pinterest, eventName);
|
|
555
|
+
if (pt.length > 0) {
|
|
556
|
+
const mapped = mapPinterestEvent(eventName, parameters);
|
|
557
|
+
pt.forEach((pixel) => results.push({ provider: 'pinterest', mapped, pixel }));
|
|
558
|
+
}
|
|
559
|
+
const clarity = getEligiblePixels(pixels.clarity, eventName);
|
|
560
|
+
if (clarity.length > 0) {
|
|
561
|
+
const mapped = mapClarityEvent(eventName, parameters);
|
|
562
|
+
clarity.forEach((pixel) => results.push({ provider: 'clarity', mapped, pixel }));
|
|
563
|
+
}
|
|
564
|
+
const gtm = getEligiblePixels(pixels.gtm, eventName);
|
|
565
|
+
if (gtm.length > 0) {
|
|
566
|
+
const mapped = mapGTMEvent(eventName, parameters);
|
|
567
|
+
gtm.forEach((pixel) => {
|
|
568
|
+
const finalParams = applyGoogleAdsConversion(mapped.params, eventName, pixel);
|
|
569
|
+
results.push({ provider: 'gtm', mapped: { name: mapped.name, params: finalParams }, pixel });
|
|
570
|
+
});
|
|
571
|
+
}
|
|
572
|
+
return results;
|
|
573
|
+
}
|
|
574
|
+
//# sourceMappingURL=pixelMapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pixelMapping.js","sourceRoot":"","sources":["../../src/pixels/pixelMapping.ts"],"names":[],"mappings":"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"}
|