@tagadapay/headless-sdk 1.22.0 → 1.24.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/CHANGELOG.md +45 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +1 -1
- package/dist/core/client.js.map +1 -1
- package/dist/core/helpers/checkoutRisk.d.ts +29 -0
- package/dist/core/helpers/checkoutRisk.d.ts.map +1 -0
- package/dist/core/helpers/checkoutRisk.js +107 -0
- package/dist/core/helpers/checkoutRisk.js.map +1 -0
- package/dist/core/helpers/paymentsApi.d.ts +5 -0
- package/dist/core/helpers/paymentsApi.d.ts.map +1 -1
- package/dist/core/helpers/paymentsApi.js +30 -0
- package/dist/core/helpers/paymentsApi.js.map +1 -1
- package/dist/core/modules/checkout.d.ts.map +1 -1
- package/dist/core/modules/checkout.js +3 -0
- package/dist/core/modules/checkout.js.map +1 -1
- package/dist/core/modules/offers.d.ts +2 -1
- package/dist/core/modules/offers.d.ts.map +1 -1
- package/dist/core/modules/offers.js +6 -2
- package/dist/core/modules/offers.js.map +1 -1
- package/dist/core/modules/payment.d.ts.map +1 -1
- package/dist/core/modules/payment.js +12 -0
- package/dist/core/modules/payment.js.map +1 -1
- package/dist/core/modules/track.d.ts +10 -1
- package/dist/core/modules/track.d.ts.map +1 -1
- package/dist/core/modules/track.js +89 -3
- package/dist/core/modules/track.js.map +1 -1
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/pixels/engine.d.ts +3 -3
- package/dist/pixels/engine.d.ts.map +1 -1
- package/dist/pixels/engine.js +12 -8
- package/dist/pixels/engine.js.map +1 -1
- package/dist/pixels/index.d.ts +3 -3
- package/dist/pixels/index.d.ts.map +1 -1
- package/dist/pixels/index.js +1 -1
- package/dist/pixels/index.js.map +1 -1
- package/dist/pixels/pixelIdentity.d.ts +23 -0
- package/dist/pixels/pixelIdentity.d.ts.map +1 -1
- package/dist/pixels/pixelIdentity.js +23 -0
- package/dist/pixels/pixelIdentity.js.map +1 -1
- package/dist/pixels/pixelMapping.d.ts +50 -6
- package/dist/pixels/pixelMapping.d.ts.map +1 -1
- package/dist/pixels/pixelMapping.js +259 -11
- package/dist/pixels/pixelMapping.js.map +1 -1
- package/dist/pixels/pixelPurchaseHanded.d.ts +5 -0
- package/dist/pixels/pixelPurchaseHanded.d.ts.map +1 -0
- package/dist/pixels/pixelPurchaseHanded.js +135 -0
- package/dist/pixels/pixelPurchaseHanded.js.map +1 -0
- package/dist/pixels/pixelTracker.d.ts +26 -8
- package/dist/pixels/pixelTracker.d.ts.map +1 -1
- package/dist/pixels/pixelTracker.js +292 -28
- package/dist/pixels/pixelTracker.js.map +1 -1
- package/dist/pixels/types.d.ts +18 -2
- package/dist/pixels/types.d.ts.map +1 -1
- package/dist/pixels/types.js +1 -0
- package/dist/pixels/types.js.map +1 -1
- package/dist/tagada-headless-commerce.min.js +2 -2
- package/dist/tagada-headless-commerce.min.js.map +3 -3
- package/dist/tagada-headless-react.min.js +2 -2
- package/dist/tagada-headless-react.min.js.map +4 -4
- package/dist/tagada-headless.js +191 -11
- package/dist/tagada-headless.min.js +2 -2
- package/dist/tagada-headless.min.js.map +4 -4
- package/dist/tagada-pixels.min.js +2 -2
- package/dist/tagada-pixels.min.js.map +4 -4
- package/dist/tgd/contract/envelope.d.ts +1 -1
- package/dist/tgd/contract/envelope.d.ts.map +1 -1
- package/dist/tgd/contract/registry.d.ts +10 -3
- package/dist/tgd/contract/registry.d.ts.map +1 -1
- package/dist/tgd/contract/registry.js +3 -2
- package/dist/tgd/contract/registry.js.map +1 -1
- package/dist/tgd/contract/unions.d.ts +1 -1
- package/dist/tgd/contract/unions.d.ts.map +1 -1
- package/dist/tgd/contract/unions.js +1 -1
- package/dist/tgd/contract/unions.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/pixels/engine.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAOtE,MAAM,CAAC,MAAM,mBAAmB,GAAgC,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/pixels/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/pixels/index.d.ts
CHANGED
|
@@ -2,9 +2,9 @@ export { createPixelEngine, SDK_PIXEL_PROVIDERS } from './engine.js';
|
|
|
2
2
|
export type { PixelEngine, PixelEngineConfig, PixelSignal, PixelSignalKind, SdkPixelProvider, } from './engine.js';
|
|
3
3
|
export { makeMetaEventId } from './metaEventId.js';
|
|
4
4
|
export { bootstrapPixelTrackerFromWindow, createPixelTracker, isSafePixelId } from './pixelTracker.js';
|
|
5
|
-
export type { PixelTracker, TrackOptions } from './pixelTracker.js';
|
|
6
|
-
export { buildGa4PurchasePayload, getEligiblePixels, isEventEnabled, pixelIdKeyOf, resolvePixelEvents } from './pixelMapping.js';
|
|
5
|
+
export type { PixelTracker, PurchaseTrace, TrackOptions } from './pixelTracker.js';
|
|
6
|
+
export { buildGa4PurchasePayload, getEligiblePixels, IDENTITY_HASHES_PARAM_KEY, isEventEnabled, pixelIdKeyOf, resolvePixelEvents, } from './pixelMapping.js';
|
|
7
7
|
export type { PixelProviderKey, StandardPixelEvent } from './pixelMapping.js';
|
|
8
|
-
export type { PixelRawIdentity } from './pixelIdentity.js';
|
|
8
|
+
export type { PixelRawIdentity, ServerIdentityHashes } from './pixelIdentity.js';
|
|
9
9
|
export type { PixelConfig, PixelsConfig } from './types.js';
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pixels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACrE,YAAY,EACV,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,GAC/E,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvG,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pixels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACrE,YAAY,EACV,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,GAC/E,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvG,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EACL,uBAAuB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,GACxH,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACjF,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/pixels/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { createPixelEngine, SDK_PIXEL_PROVIDERS } from './engine.js';
|
|
2
2
|
export { makeMetaEventId } from './metaEventId.js';
|
|
3
3
|
export { bootstrapPixelTrackerFromWindow, createPixelTracker, isSafePixelId } from './pixelTracker.js';
|
|
4
|
-
export { buildGa4PurchasePayload, getEligiblePixels, isEventEnabled, pixelIdKeyOf, resolvePixelEvents } from './pixelMapping.js';
|
|
4
|
+
export { buildGa4PurchasePayload, getEligiblePixels, IDENTITY_HASHES_PARAM_KEY, isEventEnabled, pixelIdKeyOf, resolvePixelEvents, } from './pixelMapping.js';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/dist/pixels/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pixels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKrE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvG,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pixels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKrE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvG,OAAO,EACL,uBAAuB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,GACxH,MAAM,mBAAmB,CAAC"}
|
|
@@ -24,6 +24,29 @@ export interface PixelHashedIdentity {
|
|
|
24
24
|
/** SHA-256 hex of the trimmed external id. */
|
|
25
25
|
externalId?: string;
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* The buyer's email and phone hashed by our server, per ad platform format, as
|
|
29
|
+
* the public order read returns them to the recognised buyer.
|
|
30
|
+
*/
|
|
31
|
+
export interface ServerIdentityHashes {
|
|
32
|
+
meta?: IdentityHashPair;
|
|
33
|
+
tiktok?: IdentityHashPair;
|
|
34
|
+
snap?: IdentityHashPair;
|
|
35
|
+
google?: IdentityHashPair;
|
|
36
|
+
applovin?: IdentityHashPair;
|
|
37
|
+
}
|
|
38
|
+
export interface IdentityHashPair {
|
|
39
|
+
email?: string;
|
|
40
|
+
phone?: string;
|
|
41
|
+
}
|
|
42
|
+
export declare function isSha256Hex(value: unknown): value is string;
|
|
43
|
+
/**
|
|
44
|
+
* A masked value (`r***@gmail.com`, as the public order read returns it) is
|
|
45
|
+
* never hashed nor handed to a pixel: it would become a key that matches no one.
|
|
46
|
+
*/
|
|
47
|
+
export declare function isMaskedValue(value: string | undefined): boolean;
|
|
48
|
+
/** The identity with every masked value removed. */
|
|
49
|
+
export declare function withoutMaskedValues(id: PixelRawIdentity): PixelRawIdentity;
|
|
27
50
|
/** True when SubtleCrypto is usable (secure context). */
|
|
28
51
|
export declare function canHashIdentity(): boolean;
|
|
29
52
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pixelIdentity.d.ts","sourceRoot":"","sources":["../../src/pixels/pixelIdentity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA6BD,yDAAyD;AACzD,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiB5F"}
|
|
1
|
+
{"version":3,"file":"pixelIdentity.d.ts","sourceRoot":"","sources":["../../src/pixels/pixelIdentity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE3D;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEhE;AAED,oDAAoD;AACpD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,gBAAgB,GAAG,gBAAgB,CAM1E;AA6BD,yDAAyD;AACzD,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiB5F"}
|
|
@@ -8,6 +8,29 @@
|
|
|
8
8
|
* the page — TikTok requires pre-hashed values anyway, and Snap/Meta accept
|
|
9
9
|
* pre-hashed too.
|
|
10
10
|
*/
|
|
11
|
+
const SHA256_HEX_PATTERN = /^[a-f0-9]{64}$/;
|
|
12
|
+
export function isSha256Hex(value) {
|
|
13
|
+
return typeof value === 'string' && SHA256_HEX_PATTERN.test(value);
|
|
14
|
+
}
|
|
15
|
+
const MASKED_VALUE_PATTERN = /[*•]/;
|
|
16
|
+
/**
|
|
17
|
+
* A masked value (`r***@gmail.com`, as the public order read returns it) is
|
|
18
|
+
* never hashed nor handed to a pixel: it would become a key that matches no one.
|
|
19
|
+
*/
|
|
20
|
+
export function isMaskedValue(value) {
|
|
21
|
+
return value != null && MASKED_VALUE_PATTERN.test(value);
|
|
22
|
+
}
|
|
23
|
+
/** The identity with every masked value removed. */
|
|
24
|
+
export function withoutMaskedValues(id) {
|
|
25
|
+
const out = {};
|
|
26
|
+
if (id.email && !isMaskedValue(id.email))
|
|
27
|
+
out.email = id.email;
|
|
28
|
+
if (id.phone && !isMaskedValue(id.phone))
|
|
29
|
+
out.phone = id.phone;
|
|
30
|
+
if (id.externalId && !isMaskedValue(id.externalId))
|
|
31
|
+
out.externalId = id.externalId;
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
11
34
|
/** Lowercase + trim — the normalization Meta/Snap/TikTok all expect for email. */
|
|
12
35
|
function normalizeEmail(email) {
|
|
13
36
|
return email.trim().toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pixelIdentity.js","sourceRoot":"","sources":["../../src/pixels/pixelIdentity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"pixelIdentity.js","sourceRoot":"","sources":["../../src/pixels/pixelIdentity.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,17 +11,20 @@
|
|
|
11
11
|
* Pinterest: pintrk('track', 'checkout', { value, currency }) — help.pinterest.com/en/business/article/add-event-codes
|
|
12
12
|
* GTM/GA4: gtag('event', 'purchase', { value, currency, items })
|
|
13
13
|
* Clarity: clarity('event', 'Purchase') — learn.microsoft.com/en-us/clarity/setup-and-installation/clarity-api
|
|
14
|
+
* AppLovin: axon('track', 'purchase', { value, currency, items }) — support.axon.ai/en/growth/axon-pixel/events-and-objects
|
|
14
15
|
*/
|
|
15
|
-
import type { GTMTrackingConfig, PixelConfig, PixelsConfig } from './types.js';
|
|
16
|
+
import type { GTMTrackingConfig, ApplovinTrackingConfig, PixelConfig, PixelsConfig } from './types.js';
|
|
17
|
+
import { type IdentityHashPair, type PixelRawIdentity, type ServerIdentityHashes } from './pixelIdentity.js';
|
|
16
18
|
export type StandardPixelEvent = 'PageView' | 'ViewContent' | 'AddToCart' | 'AddToWishlist' | 'Search' | 'InitiateCheckout' | 'AddPaymentInfo' | 'Purchase' | 'Lead' | 'CompleteRegistration' | 'Conversion';
|
|
17
|
-
export type PixelProviderKey = 'facebook' | 'tiktok' | 'snapchat' | 'pinterest' | 'gtm' | 'clarity';
|
|
19
|
+
export type PixelProviderKey = 'facebook' | 'tiktok' | 'snapchat' | 'pinterest' | 'gtm' | 'clarity' | 'applovin';
|
|
18
20
|
/** The field a pixel entry carries its tracking id in. */
|
|
19
|
-
export type PixelIdKey = 'pixelId' | 'containerId' | 'projectId';
|
|
21
|
+
export type PixelIdKey = 'pixelId' | 'containerId' | 'projectId' | 'eventKey';
|
|
20
22
|
/**
|
|
21
23
|
* Which key holds this entry's id: GTM stores a `containerId`, Clarity a
|
|
22
|
-
* `projectId`, every other provider a `pixelId`.
|
|
23
|
-
* or display an id go through here rather than
|
|
24
|
-
* so a new provider with its own field name is
|
|
24
|
+
* `projectId`, AppLovin an `eventKey`, every other provider a `pixelId`.
|
|
25
|
+
* Callers that sanitize, split or display an id go through here rather than
|
|
26
|
+
* testing the keys themselves, so a new provider with its own field name is
|
|
27
|
+
* one edit, not six.
|
|
25
28
|
*/
|
|
26
29
|
export declare function pixelIdKeyOf(pixel: unknown): PixelIdKey;
|
|
27
30
|
export interface MappedEvent {
|
|
@@ -29,6 +32,8 @@ export interface MappedEvent {
|
|
|
29
32
|
params: Record<string, unknown>;
|
|
30
33
|
}
|
|
31
34
|
export declare const GA4_PARAM_KEY: "_ga4";
|
|
35
|
+
/** Reserved key of the Purchase params carrying the server's `ServerIdentityHashes`; stripped from every payload. */
|
|
36
|
+
export declare const IDENTITY_HASHES_PARAM_KEY: "_identity_hashes";
|
|
32
37
|
export interface Ga4UserData {
|
|
33
38
|
email_address?: string;
|
|
34
39
|
phone_number?: string;
|
|
@@ -42,6 +47,15 @@ export interface Ga4UserData {
|
|
|
42
47
|
country?: string;
|
|
43
48
|
};
|
|
44
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* The server's hashes an event carries under `IDENTITY_HASHES_PARAM_KEY`, or undefined when no platform's pair holds a
|
|
52
|
+
* SHA-256 hash: a buyer the server did not recognise must not switch the tracker into server-hash mode with nothing.
|
|
53
|
+
*/
|
|
54
|
+
export declare function serverIdentityHashesOf(parameters: Record<string, unknown>): ServerIdentityHashes | undefined;
|
|
55
|
+
/** Google's user data with the server's hashes in place of the email and the phone, the rest of the address kept. */
|
|
56
|
+
export declare function withGoogleServerHashes(ud: Ga4UserData | undefined, hashes: IdentityHashPair | undefined): Record<string, unknown>;
|
|
57
|
+
/** The user data without a masked email or phone. */
|
|
58
|
+
export declare function withoutMaskedUserData(ud: Ga4UserData): Ga4UserData;
|
|
45
59
|
export interface Ga4Item {
|
|
46
60
|
item_id?: string;
|
|
47
61
|
item_name?: string;
|
|
@@ -154,6 +168,36 @@ export declare function mapSnapchatEvent(eventName: StandardPixelEvent, paramete
|
|
|
154
168
|
export declare function mapPinterestEvent(eventName: StandardPixelEvent, parameters: Record<string, unknown>): MappedEvent;
|
|
155
169
|
export declare function mapGTMEvent(eventName: StandardPixelEvent, parameters: Record<string, unknown>): MappedEvent;
|
|
156
170
|
export declare function mapClarityEvent(eventName: StandardPixelEvent, parameters: Record<string, unknown>): MappedEvent;
|
|
171
|
+
export declare const APPLOVIN_EVENT_MAP: Partial<Record<StandardPixelEvent, string>>;
|
|
172
|
+
/** AppLovin's user data object. Raw values: the Axon script hashes them itself. */
|
|
173
|
+
export interface ApplovinUserData {
|
|
174
|
+
email?: string;
|
|
175
|
+
phone?: string;
|
|
176
|
+
user_id?: string;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Shape an identity as AppLovin's `user_data`: email lowercased, phone as
|
|
180
|
+
* digits only (leading zeros dropped, as AppLovin's normalisation does), and
|
|
181
|
+
* the external id as `user_id` only when it has the six characters AppLovin
|
|
182
|
+
* requires. A masked email or phone (`r***@gmail.com`, as some order reads
|
|
183
|
+
* return it) is dropped: AppLovin would hash it into a key that matches no one.
|
|
184
|
+
* Returns undefined when nothing usable is left.
|
|
185
|
+
*/
|
|
186
|
+
export declare function toApplovinUserData(identity: PixelRawIdentity): ApplovinUserData | undefined;
|
|
187
|
+
/** AppLovin's `user_data` from the server's hashes, which the Axon script passes through unhashed. */
|
|
188
|
+
export declare function toApplovinServerUserData(hashes: IdentityHashPair | undefined, externalId: string | undefined): ApplovinUserData | undefined;
|
|
189
|
+
/**
|
|
190
|
+
* The entry a page loads: AppLovin's script takes one event key per page, so
|
|
191
|
+
* only the first enabled entry is initialised and only its toggles apply.
|
|
192
|
+
*/
|
|
193
|
+
export declare function activeApplovinPixel(pixels: ApplovinTrackingConfig[] | undefined): ApplovinTrackingConfig | undefined;
|
|
194
|
+
/**
|
|
195
|
+
* Map a standard event to AppLovin's name and payload, or null when AppLovin
|
|
196
|
+
* has no such event. Amounts leave in major units. `value` is the subtotal
|
|
197
|
+
* AppLovin asks for on `begin_checkout` and `purchase`: the amount minus
|
|
198
|
+
* shipping and tax, never below zero.
|
|
199
|
+
*/
|
|
200
|
+
export declare function mapApplovinEvent(eventName: StandardPixelEvent, parameters: Record<string, unknown>): MappedEvent | null;
|
|
157
201
|
/**
|
|
158
202
|
* Append Google Ads `send_to` parameter when conversion tracking is configured.
|
|
159
203
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pixelMapping.d.ts","sourceRoot":"","sources":["../../src/pixels/pixelMapping.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pixelMapping.d.ts","sourceRoot":"","sources":["../../src/pixels/pixelMapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,12 +11,15 @@
|
|
|
11
11
|
* Pinterest: pintrk('track', 'checkout', { value, currency }) — help.pinterest.com/en/business/article/add-event-codes
|
|
12
12
|
* GTM/GA4: gtag('event', 'purchase', { value, currency, items })
|
|
13
13
|
* Clarity: clarity('event', 'Purchase') — learn.microsoft.com/en-us/clarity/setup-and-installation/clarity-api
|
|
14
|
+
* AppLovin: axon('track', 'purchase', { value, currency, items }) — support.axon.ai/en/growth/axon-pixel/events-and-objects
|
|
14
15
|
*/
|
|
16
|
+
import { isMaskedValue, isSha256Hex, } from './pixelIdentity.js';
|
|
15
17
|
/**
|
|
16
18
|
* Which key holds this entry's id: GTM stores a `containerId`, Clarity a
|
|
17
|
-
* `projectId`, every other provider a `pixelId`.
|
|
18
|
-
* or display an id go through here rather than
|
|
19
|
-
* so a new provider with its own field name is
|
|
19
|
+
* `projectId`, AppLovin an `eventKey`, every other provider a `pixelId`.
|
|
20
|
+
* Callers that sanitize, split or display an id go through here rather than
|
|
21
|
+
* testing the keys themselves, so a new provider with its own field name is
|
|
22
|
+
* one edit, not six.
|
|
20
23
|
*/
|
|
21
24
|
export function pixelIdKeyOf(pixel) {
|
|
22
25
|
if (pixel && typeof pixel === 'object') {
|
|
@@ -24,6 +27,8 @@ export function pixelIdKeyOf(pixel) {
|
|
|
24
27
|
return 'containerId';
|
|
25
28
|
if ('projectId' in pixel)
|
|
26
29
|
return 'projectId';
|
|
30
|
+
if ('eventKey' in pixel)
|
|
31
|
+
return 'eventKey';
|
|
27
32
|
}
|
|
28
33
|
return 'pixelId';
|
|
29
34
|
}
|
|
@@ -39,6 +44,44 @@ export function pixelIdKeyOf(pixel) {
|
|
|
39
44
|
// units here — mapGTMEvent converts to major via the same currency helpers.
|
|
40
45
|
// ---------------------------------------------------------------------------
|
|
41
46
|
export const GA4_PARAM_KEY = '_ga4';
|
|
47
|
+
/** Reserved key of the Purchase params carrying the server's `ServerIdentityHashes`; stripped from every payload. */
|
|
48
|
+
export const IDENTITY_HASHES_PARAM_KEY = '_identity_hashes';
|
|
49
|
+
function hasSha256Pair(pair) {
|
|
50
|
+
if (typeof pair !== 'object' || pair === null)
|
|
51
|
+
return false;
|
|
52
|
+
const { email, phone } = pair;
|
|
53
|
+
return isSha256Hex(email) || isSha256Hex(phone);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The server's hashes an event carries under `IDENTITY_HASHES_PARAM_KEY`, or undefined when no platform's pair holds a
|
|
57
|
+
* SHA-256 hash: a buyer the server did not recognise must not switch the tracker into server-hash mode with nothing.
|
|
58
|
+
*/
|
|
59
|
+
export function serverIdentityHashesOf(parameters) {
|
|
60
|
+
const hashes = parameters[IDENTITY_HASHES_PARAM_KEY];
|
|
61
|
+
if (typeof hashes !== 'object' || hashes === null)
|
|
62
|
+
return undefined;
|
|
63
|
+
return Object.values(hashes).some(hasSha256Pair) ? hashes : undefined;
|
|
64
|
+
}
|
|
65
|
+
/** Google's user data with the server's hashes in place of the email and the phone, the rest of the address kept. */
|
|
66
|
+
export function withGoogleServerHashes(ud, hashes) {
|
|
67
|
+
const { email_address: _email, phone_number: _phone, ...rest } = ud ?? {};
|
|
68
|
+
const out = { ...rest };
|
|
69
|
+
if (isSha256Hex(hashes?.email))
|
|
70
|
+
out.sha256_email_address = hashes.email;
|
|
71
|
+
if (isSha256Hex(hashes?.phone))
|
|
72
|
+
out.sha256_phone_number = hashes.phone;
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
/** The user data without a masked email or phone. */
|
|
76
|
+
export function withoutMaskedUserData(ud) {
|
|
77
|
+
const { email_address, phone_number, ...rest } = ud;
|
|
78
|
+
const out = { ...rest };
|
|
79
|
+
if (email_address && !isMaskedValue(email_address))
|
|
80
|
+
out.email_address = email_address;
|
|
81
|
+
if (phone_number && !isMaskedValue(phone_number))
|
|
82
|
+
out.phone_number = phone_number;
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
42
85
|
/**
|
|
43
86
|
* Extract the distinct coupon codes applied to an order, comma-joined.
|
|
44
87
|
* Returns undefined when the order carries no coded promotions (automatic
|
|
@@ -118,9 +161,9 @@ export function buildGa4PurchasePayload(order) {
|
|
|
118
161
|
payload.user_id = order.customer.id;
|
|
119
162
|
const addr = order.billingAddress ?? order.shippingAddress;
|
|
120
163
|
const userData = {};
|
|
121
|
-
if (order.customer?.email)
|
|
164
|
+
if (order.customer?.email && !isMaskedValue(order.customer.email))
|
|
122
165
|
userData.email_address = order.customer.email;
|
|
123
|
-
const phone = order.customer?.phone
|
|
166
|
+
const phone = [order.customer?.phone, addr?.phone].find((value) => value && !isMaskedValue(value));
|
|
124
167
|
if (phone)
|
|
125
168
|
userData.phone_number = phone;
|
|
126
169
|
if (addr) {
|
|
@@ -240,9 +283,10 @@ function baseTransform(params) {
|
|
|
240
283
|
p = convertContentsPricesToMajor(p);
|
|
241
284
|
// Strip GA4-only enrichment so it never reaches Meta/TikTok/Snapchat/Pinterest
|
|
242
285
|
// (those mappers spread all params). mapGTMEvent reads it from the raw input.
|
|
243
|
-
if (GA4_PARAM_KEY in p) {
|
|
286
|
+
if (GA4_PARAM_KEY in p || IDENTITY_HASHES_PARAM_KEY in p) {
|
|
244
287
|
p = { ...p };
|
|
245
288
|
delete p[GA4_PARAM_KEY];
|
|
289
|
+
delete p[IDENTITY_HASHES_PARAM_KEY];
|
|
246
290
|
}
|
|
247
291
|
return p;
|
|
248
292
|
}
|
|
@@ -310,9 +354,8 @@ export function mapTikTokEvent(eventName, parameters) {
|
|
|
310
354
|
const ids = params.contents
|
|
311
355
|
.map((i) => i.content_id)
|
|
312
356
|
.filter(Boolean);
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
params.content_id = ids.length === 1 ? ids[0] : JSON.stringify(ids);
|
|
357
|
+
if (!params.content_id && ids.length === 1) {
|
|
358
|
+
params.content_id = ids[0];
|
|
316
359
|
}
|
|
317
360
|
// Also keep content_ids for backwards compatibility
|
|
318
361
|
if (!params.content_ids) {
|
|
@@ -469,8 +512,12 @@ export function mapGTMEvent(eventName, parameters) {
|
|
|
469
512
|
const out = { ecommerce };
|
|
470
513
|
if (ga4.user_id)
|
|
471
514
|
out.user_id = ga4.user_id;
|
|
472
|
-
|
|
473
|
-
|
|
515
|
+
const serverHashes = serverIdentityHashesOf(parameters);
|
|
516
|
+
const userData = serverHashes
|
|
517
|
+
? withGoogleServerHashes(ga4.user_data, serverHashes.google)
|
|
518
|
+
: ga4.user_data && withoutMaskedUserData(ga4.user_data);
|
|
519
|
+
if (userData && Object.keys(userData).length > 0)
|
|
520
|
+
out.user_data = userData;
|
|
474
521
|
return { name, params: out };
|
|
475
522
|
}
|
|
476
523
|
const params = baseTransform(parameters);
|
|
@@ -519,6 +566,201 @@ export function mapClarityEvent(eventName, parameters) {
|
|
|
519
566
|
const name = CLARITY_EVENT_MAP[eventName] ?? eventName;
|
|
520
567
|
return { name, params: baseTransform(parameters) };
|
|
521
568
|
}
|
|
569
|
+
// ---------------------------------------------------------------------------
|
|
570
|
+
// AppLovin (Axon pixel)
|
|
571
|
+
// Official: axon('track', 'purchase', { currency, items, shipping, tax,
|
|
572
|
+
// transaction_id, value, user_data }, { dedupe_id })
|
|
573
|
+
// Source: support.axon.ai/en/growth/axon-pixel/events-and-objects
|
|
574
|
+
// Event names are snake_case. Only the events below exist for a purchase site;
|
|
575
|
+
// any other standard event is not sent to AppLovin. Every payload is rebuilt
|
|
576
|
+
// from scratch, so a parameter AppLovin does not define never reaches it.
|
|
577
|
+
// ---------------------------------------------------------------------------
|
|
578
|
+
export const APPLOVIN_EVENT_MAP = {
|
|
579
|
+
PageView: 'page_view',
|
|
580
|
+
ViewContent: 'view_item',
|
|
581
|
+
AddToCart: 'add_to_cart',
|
|
582
|
+
InitiateCheckout: 'begin_checkout',
|
|
583
|
+
AddPaymentInfo: 'add_payment_info',
|
|
584
|
+
Purchase: 'purchase',
|
|
585
|
+
};
|
|
586
|
+
const APPLOVIN_MIN_USER_ID_LENGTH = 6;
|
|
587
|
+
const APPLOVIN_IMAGE_PATTERN = /\.(png|jpe?g)$/i;
|
|
588
|
+
/**
|
|
589
|
+
* Shape an identity as AppLovin's `user_data`: email lowercased, phone as
|
|
590
|
+
* digits only (leading zeros dropped, as AppLovin's normalisation does), and
|
|
591
|
+
* the external id as `user_id` only when it has the six characters AppLovin
|
|
592
|
+
* requires. A masked email or phone (`r***@gmail.com`, as some order reads
|
|
593
|
+
* return it) is dropped: AppLovin would hash it into a key that matches no one.
|
|
594
|
+
* Returns undefined when nothing usable is left.
|
|
595
|
+
*/
|
|
596
|
+
export function toApplovinUserData(identity) {
|
|
597
|
+
const out = {};
|
|
598
|
+
const email = identity.email?.trim().toLowerCase();
|
|
599
|
+
if (email && !isMaskedValue(email))
|
|
600
|
+
out.email = email;
|
|
601
|
+
const rawPhone = identity.phone?.trim();
|
|
602
|
+
const phone = rawPhone && !isMaskedValue(rawPhone) && !/[a-z]/i.test(rawPhone)
|
|
603
|
+
? rawPhone.replace(/[^0-9]/g, '').replace(/^0+/, '')
|
|
604
|
+
: undefined;
|
|
605
|
+
if (phone)
|
|
606
|
+
out.phone = phone;
|
|
607
|
+
const userId = identity.externalId?.trim();
|
|
608
|
+
if (userId && userId.length >= APPLOVIN_MIN_USER_ID_LENGTH)
|
|
609
|
+
out.user_id = userId;
|
|
610
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
611
|
+
}
|
|
612
|
+
/** AppLovin's `user_data` from the server's hashes, which the Axon script passes through unhashed. */
|
|
613
|
+
export function toApplovinServerUserData(hashes, externalId) {
|
|
614
|
+
const out = {};
|
|
615
|
+
if (isSha256Hex(hashes?.email))
|
|
616
|
+
out.email = hashes.email;
|
|
617
|
+
if (isSha256Hex(hashes?.phone))
|
|
618
|
+
out.phone = hashes.phone;
|
|
619
|
+
const userId = toApplovinUserData({ externalId })?.user_id;
|
|
620
|
+
if (userId)
|
|
621
|
+
out.user_id = userId;
|
|
622
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
623
|
+
}
|
|
624
|
+
/**
|
|
625
|
+
* The entry a page loads: AppLovin's script takes one event key per page, so
|
|
626
|
+
* only the first enabled entry is initialised and only its toggles apply.
|
|
627
|
+
*/
|
|
628
|
+
export function activeApplovinPixel(pixels) {
|
|
629
|
+
return pixels?.find((pixel) => pixel.enabled);
|
|
630
|
+
}
|
|
631
|
+
function finiteNumber(value) {
|
|
632
|
+
if (value == null || value === '')
|
|
633
|
+
return undefined;
|
|
634
|
+
const n = Number(value);
|
|
635
|
+
return Number.isFinite(n) ? n : undefined;
|
|
636
|
+
}
|
|
637
|
+
function roundMoney(amount) {
|
|
638
|
+
return Math.round(amount * 1000) / 1000;
|
|
639
|
+
}
|
|
640
|
+
/**
|
|
641
|
+
* Our `content_id` is `<productId>-<variantId>`. A product id may hold dashes
|
|
642
|
+
* (`bpc157-10mg`), a variant id does not: the longest known product id that
|
|
643
|
+
* starts the content id wins, else the split is at the last dash.
|
|
644
|
+
*/
|
|
645
|
+
function splitContentId(contentId, productIds) {
|
|
646
|
+
const productId = productIds
|
|
647
|
+
.filter((id) => contentId.startsWith(`${id}-`))
|
|
648
|
+
.reduce((longest, id) => (!longest || id.length > longest.length ? id : longest), undefined);
|
|
649
|
+
if (productId) {
|
|
650
|
+
const variantId = contentId.slice(productId.length + 1);
|
|
651
|
+
return variantId ? { itemId: productId, variantId } : { itemId: productId };
|
|
652
|
+
}
|
|
653
|
+
const dash = contentId.lastIndexOf('-');
|
|
654
|
+
if (dash === -1)
|
|
655
|
+
return { itemId: contentId };
|
|
656
|
+
const product = contentId.slice(0, dash);
|
|
657
|
+
const variant = contentId.slice(dash + 1);
|
|
658
|
+
if (!product)
|
|
659
|
+
return { itemId: variant };
|
|
660
|
+
return variant ? { itemId: product, variantId: variant } : { itemId: product };
|
|
661
|
+
}
|
|
662
|
+
function applovinImageUrl(value) {
|
|
663
|
+
if (typeof value !== 'string' || !value)
|
|
664
|
+
return undefined;
|
|
665
|
+
const path = value.split(/[?#]/)[0];
|
|
666
|
+
return APPLOVIN_IMAGE_PATTERN.test(path) ? value : undefined;
|
|
667
|
+
}
|
|
668
|
+
/**
|
|
669
|
+
* Reads `contents[]` after baseTransform, so `price` is already in major units.
|
|
670
|
+
* `productIds` are the order's own product ids, from its GA4 items.
|
|
671
|
+
*/
|
|
672
|
+
function applovinItems(contents, productIds) {
|
|
673
|
+
if (!Array.isArray(contents))
|
|
674
|
+
return [];
|
|
675
|
+
return contents.flatMap((entry) => {
|
|
676
|
+
if (!entry || typeof entry !== 'object')
|
|
677
|
+
return [];
|
|
678
|
+
const item = entry;
|
|
679
|
+
const rawId = typeof item.content_id === 'string' && item.content_id ? item.content_id : item.id;
|
|
680
|
+
if (typeof rawId !== 'string' || !rawId)
|
|
681
|
+
return [];
|
|
682
|
+
const { itemId, variantId } = splitContentId(rawId, productIds);
|
|
683
|
+
if (!itemId)
|
|
684
|
+
return [];
|
|
685
|
+
const out = { item_id: itemId };
|
|
686
|
+
if (variantId)
|
|
687
|
+
out.item_variant_id = variantId;
|
|
688
|
+
if (typeof item.content_name === 'string' && item.content_name)
|
|
689
|
+
out.item_name = item.content_name;
|
|
690
|
+
const price = finiteNumber(item.price);
|
|
691
|
+
if (price != null)
|
|
692
|
+
out.price = price;
|
|
693
|
+
const quantity = finiteNumber(item.quantity);
|
|
694
|
+
if (quantity != null)
|
|
695
|
+
out.quantity = quantity;
|
|
696
|
+
const imageUrl = applovinImageUrl(item.image_url);
|
|
697
|
+
if (imageUrl)
|
|
698
|
+
out.image_url = imageUrl;
|
|
699
|
+
return [out];
|
|
700
|
+
});
|
|
701
|
+
}
|
|
702
|
+
/**
|
|
703
|
+
* Map a standard event to AppLovin's name and payload, or null when AppLovin
|
|
704
|
+
* has no such event. Amounts leave in major units. `value` is the subtotal
|
|
705
|
+
* AppLovin asks for on `begin_checkout` and `purchase`: the amount minus
|
|
706
|
+
* shipping and tax, never below zero.
|
|
707
|
+
*/
|
|
708
|
+
export function mapApplovinEvent(eventName, parameters) {
|
|
709
|
+
const name = APPLOVIN_EVENT_MAP[eventName];
|
|
710
|
+
if (!name)
|
|
711
|
+
return null;
|
|
712
|
+
const ga4 = parameters[GA4_PARAM_KEY];
|
|
713
|
+
const params = {};
|
|
714
|
+
const serverHashes = serverIdentityHashesOf(parameters);
|
|
715
|
+
const userData = serverHashes
|
|
716
|
+
? toApplovinServerUserData(serverHashes.applovin, ga4?.user_id)
|
|
717
|
+
: ga4
|
|
718
|
+
? toApplovinUserData({
|
|
719
|
+
email: ga4.user_data?.email_address,
|
|
720
|
+
phone: ga4.user_data?.phone_number,
|
|
721
|
+
externalId: ga4.user_id,
|
|
722
|
+
})
|
|
723
|
+
: undefined;
|
|
724
|
+
if (eventName === 'PageView') {
|
|
725
|
+
if (userData)
|
|
726
|
+
params.user_data = userData;
|
|
727
|
+
return { name, params };
|
|
728
|
+
}
|
|
729
|
+
const p = baseTransform(parameters);
|
|
730
|
+
const currency = typeof p.currency === 'string' && p.currency ? p.currency : undefined;
|
|
731
|
+
const toMajor = (amount) => {
|
|
732
|
+
const n = finiteNumber(amount);
|
|
733
|
+
return n == null || !currency ? undefined : minorToMajor(n, currency);
|
|
734
|
+
};
|
|
735
|
+
if (currency)
|
|
736
|
+
params.currency = currency;
|
|
737
|
+
const productIds = (ga4?.items ?? [])
|
|
738
|
+
.map((item) => item.item_id)
|
|
739
|
+
.filter((id) => typeof id === 'string' && id.length > 0);
|
|
740
|
+
const items = applovinItems(p.contents, productIds);
|
|
741
|
+
if (items.length > 0)
|
|
742
|
+
params.items = items;
|
|
743
|
+
// Without a currency `value` is still in minor units, so it is left out.
|
|
744
|
+
const value = currency ? finiteNumber(p.value) ?? toMajor(ga4?.value) : undefined;
|
|
745
|
+
if (eventName === 'InitiateCheckout' || eventName === 'Purchase') {
|
|
746
|
+
const shipping = (currency ? finiteNumber(p.shipping) : undefined) ?? toMajor(ga4?.shipping) ?? 0;
|
|
747
|
+
const tax = (currency ? finiteNumber(p.tax) : undefined) ?? toMajor(ga4?.tax) ?? 0;
|
|
748
|
+
if (value != null)
|
|
749
|
+
params.value = Math.max(0, roundMoney(value - shipping - tax));
|
|
750
|
+
if (eventName === 'Purchase') {
|
|
751
|
+
params.shipping = shipping;
|
|
752
|
+
params.tax = tax;
|
|
753
|
+
if (p.transaction_id != null && p.transaction_id !== '')
|
|
754
|
+
params.transaction_id = String(p.transaction_id);
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
else if (value != null) {
|
|
758
|
+
params.value = value;
|
|
759
|
+
}
|
|
760
|
+
if (userData)
|
|
761
|
+
params.user_data = userData;
|
|
762
|
+
return { name, params };
|
|
763
|
+
}
|
|
522
764
|
function googleAdsTag(id) {
|
|
523
765
|
const text = String(id).trim();
|
|
524
766
|
return /^\d+$/.test(text) ? `AW-${text}` : text;
|
|
@@ -569,6 +811,12 @@ export function resolvePixelEvents(pixels, eventName, parameters) {
|
|
|
569
811
|
const mapped = mapClarityEvent(eventName, parameters);
|
|
570
812
|
clarity.forEach((pixel) => results.push({ provider: 'clarity', mapped, pixel }));
|
|
571
813
|
}
|
|
814
|
+
const applovin = activeApplovinPixel(pixels.applovin);
|
|
815
|
+
if (applovin && getEligiblePixels([applovin], eventName).length > 0) {
|
|
816
|
+
const mapped = mapApplovinEvent(eventName, parameters);
|
|
817
|
+
if (mapped)
|
|
818
|
+
results.push({ provider: 'applovin', mapped, pixel: applovin });
|
|
819
|
+
}
|
|
572
820
|
const gtm = getEligiblePixels(pixels.gtm, eventName);
|
|
573
821
|
if (gtm.length > 0) {
|
|
574
822
|
const mapped = mapGTMEvent(eventName, parameters);
|