@xylabs/pixel 1.4.13 → 1.5.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/browser/Api/Api.d.cts.map +1 -0
- package/dist/browser/Api/Api.d.mts +7 -0
- package/dist/browser/Api/Api.d.mts.map +1 -0
- package/dist/browser/Api/Api.d.ts +7 -0
- package/dist/{types → browser}/Api/Api.d.ts.map +1 -1
- package/dist/browser/Api/UserEvent.d.cts +25 -0
- package/dist/browser/Api/UserEvent.d.cts.map +1 -0
- package/dist/browser/Api/UserEvent.d.mts +25 -0
- package/dist/browser/Api/UserEvent.d.mts.map +1 -0
- package/dist/{types → browser}/Api/UserEvent.d.ts +6 -0
- package/dist/browser/Api/UserEvent.d.ts.map +1 -0
- package/dist/browser/Api/UserEventSystem.d.mts +3 -0
- package/dist/browser/Api/UserEventSystem.d.mts.map +1 -0
- package/dist/browser/Api/UserEventSystem.d.ts +3 -0
- package/dist/browser/Api/UserEventSystem.d.ts.map +1 -0
- package/dist/{esm/Api/index.js → browser/Api/index.d.mts} +1 -1
- package/dist/browser/Api/index.d.mts.map +1 -0
- package/dist/browser/Api/index.d.ts +4 -0
- package/dist/browser/Api/index.d.ts.map +1 -0
- package/dist/browser/CommonFields.d.mts +5 -0
- package/dist/browser/CommonFields.d.mts.map +1 -0
- package/dist/browser/CommonFields.d.ts +5 -0
- package/dist/browser/CommonFields.d.ts.map +1 -0
- package/dist/browser/ExIds.d.mts +10 -0
- package/dist/browser/ExIds.d.mts.map +1 -0
- package/dist/browser/ExIds.d.ts +10 -0
- package/dist/browser/ExIds.d.ts.map +1 -0
- package/dist/browser/FunnelStartedFields.d.mts +5 -0
- package/dist/browser/FunnelStartedFields.d.mts.map +1 -0
- package/dist/browser/FunnelStartedFields.d.ts +5 -0
- package/dist/browser/FunnelStartedFields.d.ts.map +1 -0
- package/dist/browser/Pixel.d.cts.map +1 -0
- package/dist/browser/Pixel.d.mts +24 -0
- package/dist/browser/Pixel.d.mts.map +1 -0
- package/dist/browser/Pixel.d.ts +24 -0
- package/dist/browser/Pixel.d.ts.map +1 -0
- package/dist/browser/Referrer.d.cts.map +1 -0
- package/dist/browser/Referrer.d.mts +13 -0
- package/dist/browser/Referrer.d.mts.map +1 -0
- package/dist/browser/Referrer.d.ts +13 -0
- package/dist/browser/Referrer.d.ts.map +1 -0
- package/dist/browser/TestStartedFields.d.mts +5 -0
- package/dist/browser/TestStartedFields.d.mts.map +1 -0
- package/dist/browser/TestStartedFields.d.ts +5 -0
- package/dist/browser/TestStartedFields.d.ts.map +1 -0
- package/dist/browser/UniqueUserId.d.cts.map +1 -0
- package/dist/browser/UniqueUserId.d.mts +8 -0
- package/dist/browser/UniqueUserId.d.mts.map +1 -0
- package/dist/browser/UniqueUserId.d.ts +8 -0
- package/dist/{types → browser}/UniqueUserId.d.ts.map +1 -1
- package/dist/browser/UserClickFields.d.mts +6 -0
- package/dist/browser/UserClickFields.d.mts.map +1 -0
- package/dist/browser/UserClickFields.d.ts +6 -0
- package/dist/browser/UserClickFields.d.ts.map +1 -0
- package/dist/browser/UserEventHandler.d.mts +11 -0
- package/dist/browser/UserEventHandler.d.mts.map +1 -0
- package/dist/browser/UserEventHandler.d.ts +11 -0
- package/dist/browser/UserEventHandler.d.ts.map +1 -0
- package/dist/browser/UtmFields.d.cts.map +1 -0
- package/dist/browser/UtmFields.d.mts +9 -0
- package/dist/browser/UtmFields.d.mts.map +1 -0
- package/dist/browser/UtmFields.d.ts +9 -0
- package/dist/browser/UtmFields.d.ts.map +1 -0
- package/dist/browser/ViewContentFields.d.mts +6 -0
- package/dist/browser/ViewContentFields.d.mts.map +1 -0
- package/dist/browser/ViewContentFields.d.ts +6 -0
- package/dist/browser/ViewContentFields.d.ts.map +1 -0
- package/dist/browser/XyLabsTrackingEventJson.d.mts +21 -0
- package/dist/browser/XyLabsTrackingEventJson.d.mts.map +1 -0
- package/dist/browser/XyLabsTrackingEventJson.d.ts +21 -0
- package/dist/browser/XyLabsTrackingEventJson.d.ts.map +1 -0
- package/dist/browser/XyUserEventHandler.d.cts.map +1 -0
- package/dist/browser/XyUserEventHandler.d.mts +13 -0
- package/dist/browser/XyUserEventHandler.d.mts.map +1 -0
- package/dist/browser/XyUserEventHandler.d.ts +13 -0
- package/dist/{types → browser}/XyUserEventHandler.d.ts.map +1 -1
- package/dist/browser/getSystemInfo.d.mts +2 -0
- package/dist/browser/getSystemInfo.d.mts.map +1 -0
- package/dist/browser/getSystemInfo.d.ts +2 -0
- package/dist/browser/getSystemInfo.d.ts.map +1 -0
- package/dist/browser/index.cjs +287 -0
- package/dist/browser/index.cjs.map +1 -0
- package/dist/{esm/index.js → browser/index.d.mts} +1 -1
- package/dist/browser/index.d.mts.map +1 -0
- package/dist/browser/index.d.ts +13 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +254 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/node/Api/Api.d.cts +7 -0
- package/dist/node/Api/Api.d.cts.map +1 -0
- package/dist/node/Api/Api.d.mts +7 -0
- package/dist/node/Api/Api.d.mts.map +1 -0
- package/dist/node/Api/Api.d.ts +7 -0
- package/dist/node/Api/Api.d.ts.map +1 -0
- package/dist/node/Api/UserEvent.d.cts +25 -0
- package/dist/node/Api/UserEvent.d.cts.map +1 -0
- package/dist/node/Api/UserEvent.d.mts +25 -0
- package/dist/node/Api/UserEvent.d.mts.map +1 -0
- package/dist/node/Api/UserEvent.d.ts +25 -0
- package/dist/node/Api/UserEvent.d.ts.map +1 -0
- package/dist/node/Api/UserEventSystem.d.cts +3 -0
- package/dist/node/Api/UserEventSystem.d.cts.map +1 -0
- package/dist/node/Api/UserEventSystem.d.mts +3 -0
- package/dist/node/Api/UserEventSystem.d.mts.map +1 -0
- package/dist/node/Api/UserEventSystem.d.ts +3 -0
- package/dist/node/Api/UserEventSystem.d.ts.map +1 -0
- package/dist/node/Api/index.d.cts +4 -0
- package/dist/node/Api/index.d.cts.map +1 -0
- package/dist/node/Api/index.d.mts +4 -0
- package/dist/node/Api/index.d.mts.map +1 -0
- package/dist/node/Api/index.d.ts +4 -0
- package/dist/node/Api/index.d.ts.map +1 -0
- package/dist/node/CommonFields.d.cts +5 -0
- package/dist/node/CommonFields.d.cts.map +1 -0
- package/dist/node/CommonFields.d.mts +5 -0
- package/dist/node/CommonFields.d.mts.map +1 -0
- package/dist/node/CommonFields.d.ts +5 -0
- package/dist/node/CommonFields.d.ts.map +1 -0
- package/dist/node/ExIds.d.cts +10 -0
- package/dist/node/ExIds.d.cts.map +1 -0
- package/dist/node/ExIds.d.mts +10 -0
- package/dist/node/ExIds.d.mts.map +1 -0
- package/dist/node/ExIds.d.ts +10 -0
- package/dist/node/ExIds.d.ts.map +1 -0
- package/dist/node/FunnelStartedFields.d.cts +5 -0
- package/dist/node/FunnelStartedFields.d.cts.map +1 -0
- package/dist/node/FunnelStartedFields.d.mts +5 -0
- package/dist/node/FunnelStartedFields.d.mts.map +1 -0
- package/dist/node/FunnelStartedFields.d.ts +5 -0
- package/dist/node/FunnelStartedFields.d.ts.map +1 -0
- package/dist/node/Pixel.d.cts +24 -0
- package/dist/node/Pixel.d.cts.map +1 -0
- package/dist/node/Pixel.d.mts +24 -0
- package/dist/node/Pixel.d.mts.map +1 -0
- package/dist/node/Pixel.d.ts +24 -0
- package/dist/node/Pixel.d.ts.map +1 -0
- package/dist/node/Referrer.d.cts +13 -0
- package/dist/node/Referrer.d.cts.map +1 -0
- package/dist/node/Referrer.d.mts +13 -0
- package/dist/node/Referrer.d.mts.map +1 -0
- package/dist/node/Referrer.d.ts +13 -0
- package/dist/node/Referrer.d.ts.map +1 -0
- package/dist/node/TestStartedFields.d.cts +5 -0
- package/dist/node/TestStartedFields.d.cts.map +1 -0
- package/dist/node/TestStartedFields.d.mts +5 -0
- package/dist/node/TestStartedFields.d.mts.map +1 -0
- package/dist/node/TestStartedFields.d.ts +5 -0
- package/dist/node/TestStartedFields.d.ts.map +1 -0
- package/dist/node/UniqueUserId.d.cts +8 -0
- package/dist/node/UniqueUserId.d.cts.map +1 -0
- package/dist/node/UniqueUserId.d.mts +8 -0
- package/dist/node/UniqueUserId.d.mts.map +1 -0
- package/dist/node/UniqueUserId.d.ts +8 -0
- package/dist/node/UniqueUserId.d.ts.map +1 -0
- package/dist/node/UserClickFields.d.cts +6 -0
- package/dist/node/UserClickFields.d.cts.map +1 -0
- package/dist/node/UserClickFields.d.mts +6 -0
- package/dist/node/UserClickFields.d.mts.map +1 -0
- package/dist/node/UserClickFields.d.ts +6 -0
- package/dist/node/UserClickFields.d.ts.map +1 -0
- package/dist/node/UserEventHandler.d.cts +11 -0
- package/dist/node/UserEventHandler.d.cts.map +1 -0
- package/dist/node/UserEventHandler.d.mts +11 -0
- package/dist/node/UserEventHandler.d.mts.map +1 -0
- package/dist/node/UserEventHandler.d.ts +11 -0
- package/dist/node/UserEventHandler.d.ts.map +1 -0
- package/dist/node/UtmFields.d.cts +9 -0
- package/dist/node/UtmFields.d.cts.map +1 -0
- package/dist/node/UtmFields.d.mts +9 -0
- package/dist/node/UtmFields.d.mts.map +1 -0
- package/dist/node/UtmFields.d.ts +9 -0
- package/dist/node/UtmFields.d.ts.map +1 -0
- package/dist/node/ViewContentFields.d.cts +6 -0
- package/dist/node/ViewContentFields.d.cts.map +1 -0
- package/dist/node/ViewContentFields.d.mts +6 -0
- package/dist/node/ViewContentFields.d.mts.map +1 -0
- package/dist/node/ViewContentFields.d.ts +6 -0
- package/dist/node/ViewContentFields.d.ts.map +1 -0
- package/dist/node/XyLabsTrackingEventJson.d.cts +21 -0
- package/dist/node/XyLabsTrackingEventJson.d.cts.map +1 -0
- package/dist/node/XyLabsTrackingEventJson.d.mts +21 -0
- package/dist/node/XyLabsTrackingEventJson.d.mts.map +1 -0
- package/dist/node/XyLabsTrackingEventJson.d.ts +21 -0
- package/dist/node/XyLabsTrackingEventJson.d.ts.map +1 -0
- package/dist/node/XyUserEventHandler.d.cts +13 -0
- package/dist/node/XyUserEventHandler.d.cts.map +1 -0
- package/dist/node/XyUserEventHandler.d.mts +13 -0
- package/dist/node/XyUserEventHandler.d.mts.map +1 -0
- package/dist/node/XyUserEventHandler.d.ts +13 -0
- package/dist/node/XyUserEventHandler.d.ts.map +1 -0
- package/dist/node/getSystemInfo.d.cts +2 -0
- package/dist/node/getSystemInfo.d.cts.map +1 -0
- package/dist/node/getSystemInfo.d.mts +2 -0
- package/dist/node/getSystemInfo.d.mts.map +1 -0
- package/dist/node/getSystemInfo.d.ts +2 -0
- package/dist/node/getSystemInfo.d.ts.map +1 -0
- package/dist/node/index.cjs +298 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.d.cts +13 -0
- package/dist/node/index.d.cts.map +1 -0
- package/dist/node/index.d.mts +13 -0
- package/dist/node/index.d.mts.map +1 -0
- package/dist/node/index.d.ts +13 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +255 -0
- package/dist/node/index.js.map +1 -0
- package/package.json +48 -33
- package/src/Api/Api.ts +1 -1
- package/src/Api/UserEvent.ts +3 -0
- package/src/Pixel.ts +33 -37
- package/src/Referrer.ts +3 -3
- package/src/UniqueUserId.ts +2 -2
- package/src/UtmFields.ts +7 -9
- package/src/XyUserEventHandler.ts +4 -4
- package/src/getSystemInfo.ts +1 -1
- package/src/{Pixel.spec.ts → spec/Pixel.spec.ts} +3 -3
- package/dist/cjs/Api/Api.js +0 -23
- package/dist/cjs/Api/Api.js.map +0 -1
- package/dist/cjs/Api/UserEvent.js +0 -3
- package/dist/cjs/Api/UserEvent.js.map +0 -1
- package/dist/cjs/Api/UserEventSystem.js +0 -3
- package/dist/cjs/Api/UserEventSystem.js.map +0 -1
- package/dist/cjs/Api/index.js +0 -7
- package/dist/cjs/Api/index.js.map +0 -1
- package/dist/cjs/CommonFields.js +0 -3
- package/dist/cjs/CommonFields.js.map +0 -1
- package/dist/cjs/ExIds.js +0 -3
- package/dist/cjs/ExIds.js.map +0 -1
- package/dist/cjs/FunnelStartedFields.js +0 -3
- package/dist/cjs/FunnelStartedFields.js.map +0 -1
- package/dist/cjs/Pixel.js +0 -108
- package/dist/cjs/Pixel.js.map +0 -1
- package/dist/cjs/Referrer.js +0 -35
- package/dist/cjs/Referrer.js.map +0 -1
- package/dist/cjs/TestStartedFields.js +0 -3
- package/dist/cjs/TestStartedFields.js.map +0 -1
- package/dist/cjs/UniqueUserId.js +0 -21
- package/dist/cjs/UniqueUserId.js.map +0 -1
- package/dist/cjs/UserClickFields.js +0 -3
- package/dist/cjs/UserClickFields.js.map +0 -1
- package/dist/cjs/UserEventHandler.js +0 -7
- package/dist/cjs/UserEventHandler.js.map +0 -1
- package/dist/cjs/UtmFields.js +0 -53
- package/dist/cjs/UtmFields.js.map +0 -1
- package/dist/cjs/ViewContentFields.js +0 -3
- package/dist/cjs/ViewContentFields.js.map +0 -1
- package/dist/cjs/XyLabsTrackingEventJson.js +0 -3
- package/dist/cjs/XyLabsTrackingEventJson.js.map +0 -1
- package/dist/cjs/XyUserEventHandler.js +0 -33
- package/dist/cjs/XyUserEventHandler.js.map +0 -1
- package/dist/cjs/getSystemInfo.js +0 -16
- package/dist/cjs/getSystemInfo.js.map +0 -1
- package/dist/cjs/index.js +0 -16
- package/dist/cjs/index.js.map +0 -1
- package/dist/docs.json +0 -3781
- package/dist/esm/Api/Api.js +0 -17
- package/dist/esm/Api/Api.js.map +0 -1
- package/dist/esm/Api/UserEvent.js +0 -2
- package/dist/esm/Api/UserEvent.js.map +0 -1
- package/dist/esm/Api/UserEventSystem.js +0 -2
- package/dist/esm/Api/UserEventSystem.js.map +0 -1
- package/dist/esm/Api/index.js.map +0 -1
- package/dist/esm/CommonFields.js +0 -2
- package/dist/esm/CommonFields.js.map +0 -1
- package/dist/esm/ExIds.js +0 -2
- package/dist/esm/ExIds.js.map +0 -1
- package/dist/esm/FunnelStartedFields.js +0 -2
- package/dist/esm/FunnelStartedFields.js.map +0 -1
- package/dist/esm/Pixel.js +0 -107
- package/dist/esm/Pixel.js.map +0 -1
- package/dist/esm/Referrer.js +0 -32
- package/dist/esm/Referrer.js.map +0 -1
- package/dist/esm/TestStartedFields.js +0 -2
- package/dist/esm/TestStartedFields.js.map +0 -1
- package/dist/esm/UniqueUserId.js +0 -16
- package/dist/esm/UniqueUserId.js.map +0 -1
- package/dist/esm/UserClickFields.js +0 -2
- package/dist/esm/UserClickFields.js.map +0 -1
- package/dist/esm/UserEventHandler.js +0 -3
- package/dist/esm/UserEventHandler.js.map +0 -1
- package/dist/esm/UtmFields.js +0 -46
- package/dist/esm/UtmFields.js.map +0 -1
- package/dist/esm/ViewContentFields.js +0 -2
- package/dist/esm/ViewContentFields.js.map +0 -1
- package/dist/esm/XyLabsTrackingEventJson.js +0 -2
- package/dist/esm/XyLabsTrackingEventJson.js.map +0 -1
- package/dist/esm/XyUserEventHandler.js +0 -20
- package/dist/esm/XyUserEventHandler.js.map +0 -1
- package/dist/esm/getSystemInfo.js +0 -12
- package/dist/esm/getSystemInfo.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/types/Api/UserEvent.d.ts.map +0 -1
- package/dist/types/Pixel.d.ts.map +0 -1
- package/dist/types/Referrer.d.ts.map +0 -1
- package/dist/types/UtmFields.d.ts.map +0 -1
- package/src/types/async-mutex.d.ts +0 -1
- /package/dist/{types/Api/Api.d.ts → browser/Api/Api.d.cts} +0 -0
- /package/dist/{types/Api/UserEventSystem.d.ts → browser/Api/UserEventSystem.d.cts} +0 -0
- /package/dist/{types/Api/UserEventSystem.d.ts.map → browser/Api/UserEventSystem.d.cts.map} +0 -0
- /package/dist/{types/Api/index.d.ts → browser/Api/index.d.cts} +0 -0
- /package/dist/{types/Api/index.d.ts.map → browser/Api/index.d.cts.map} +0 -0
- /package/dist/{types/CommonFields.d.ts → browser/CommonFields.d.cts} +0 -0
- /package/dist/{types/CommonFields.d.ts.map → browser/CommonFields.d.cts.map} +0 -0
- /package/dist/{types/ExIds.d.ts → browser/ExIds.d.cts} +0 -0
- /package/dist/{types/ExIds.d.ts.map → browser/ExIds.d.cts.map} +0 -0
- /package/dist/{types/FunnelStartedFields.d.ts → browser/FunnelStartedFields.d.cts} +0 -0
- /package/dist/{types/FunnelStartedFields.d.ts.map → browser/FunnelStartedFields.d.cts.map} +0 -0
- /package/dist/{types/Pixel.d.ts → browser/Pixel.d.cts} +0 -0
- /package/dist/{types/Referrer.d.ts → browser/Referrer.d.cts} +0 -0
- /package/dist/{types/TestStartedFields.d.ts → browser/TestStartedFields.d.cts} +0 -0
- /package/dist/{types/TestStartedFields.d.ts.map → browser/TestStartedFields.d.cts.map} +0 -0
- /package/dist/{types/UniqueUserId.d.ts → browser/UniqueUserId.d.cts} +0 -0
- /package/dist/{types/UserClickFields.d.ts → browser/UserClickFields.d.cts} +0 -0
- /package/dist/{types/UserClickFields.d.ts.map → browser/UserClickFields.d.cts.map} +0 -0
- /package/dist/{types/UserEventHandler.d.ts → browser/UserEventHandler.d.cts} +0 -0
- /package/dist/{types/UserEventHandler.d.ts.map → browser/UserEventHandler.d.cts.map} +0 -0
- /package/dist/{types/UtmFields.d.ts → browser/UtmFields.d.cts} +0 -0
- /package/dist/{types/ViewContentFields.d.ts → browser/ViewContentFields.d.cts} +0 -0
- /package/dist/{types/ViewContentFields.d.ts.map → browser/ViewContentFields.d.cts.map} +0 -0
- /package/dist/{types/XyLabsTrackingEventJson.d.ts → browser/XyLabsTrackingEventJson.d.cts} +0 -0
- /package/dist/{types/XyLabsTrackingEventJson.d.ts.map → browser/XyLabsTrackingEventJson.d.cts.map} +0 -0
- /package/dist/{types/XyUserEventHandler.d.ts → browser/XyUserEventHandler.d.cts} +0 -0
- /package/dist/{types/getSystemInfo.d.ts → browser/getSystemInfo.d.cts} +0 -0
- /package/dist/{types/getSystemInfo.d.ts.map → browser/getSystemInfo.d.cts.map} +0 -0
- /package/dist/{types/index.d.ts → browser/index.d.cts} +0 -0
- /package/dist/{types/index.d.ts.map → browser/index.d.cts.map} +0 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
// src/Api/Api.ts
|
|
2
|
+
import axios from "axios";
|
|
3
|
+
var apiBaseUri = {
|
|
4
|
+
beta: "https://pixel.xylabs.com",
|
|
5
|
+
local: "http://localhost:3030",
|
|
6
|
+
prod: "https://pixel.xylabs.com"
|
|
7
|
+
};
|
|
8
|
+
var PixelApi = class {
|
|
9
|
+
endPoint;
|
|
10
|
+
/* baseUri can either be a preset (prod, beta, local), or a specific uri */
|
|
11
|
+
constructor(baseUri = "prod") {
|
|
12
|
+
this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event/queue` : baseUri;
|
|
13
|
+
}
|
|
14
|
+
async trackEvents(events) {
|
|
15
|
+
return (await axios.post(this.endPoint, events)).data;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// src/Pixel.ts
|
|
20
|
+
import { assertEx } from "@xylabs/assert";
|
|
21
|
+
import { Mutex } from "async-mutex";
|
|
22
|
+
import Cookies from "js-cookie";
|
|
23
|
+
import md5 from "md5";
|
|
24
|
+
|
|
25
|
+
// src/getSystemInfo.ts
|
|
26
|
+
import { parse } from "bowser";
|
|
27
|
+
var systemInfo;
|
|
28
|
+
var getSystemInfo = () => {
|
|
29
|
+
try {
|
|
30
|
+
systemInfo = systemInfo || parse(window.navigator.userAgent);
|
|
31
|
+
} catch (ex) {
|
|
32
|
+
console.log(`getSystemInfo Error: ${ex}`);
|
|
33
|
+
}
|
|
34
|
+
return systemInfo;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// src/Referrer.ts
|
|
38
|
+
var Referrer = class _Referrer {
|
|
39
|
+
static storageId = "_coin_referrer";
|
|
40
|
+
local;
|
|
41
|
+
session;
|
|
42
|
+
constructor() {
|
|
43
|
+
this.session = this.getFromSession() ?? document.referrer;
|
|
44
|
+
sessionStorage.setItem(_Referrer.storageId, this.session);
|
|
45
|
+
this.local = this.getFromLocal() ?? document.referrer;
|
|
46
|
+
window.localStorage.setItem(_Referrer.storageId, this.local);
|
|
47
|
+
}
|
|
48
|
+
toJson() {
|
|
49
|
+
if (this.local && this.local.length > 0 || this.session && this.session.length > 0) {
|
|
50
|
+
return {
|
|
51
|
+
local: this.local,
|
|
52
|
+
session: this.session
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
getFromLocal() {
|
|
57
|
+
const value = window.localStorage.getItem(_Referrer.storageId);
|
|
58
|
+
if (value && value.length > 0) {
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
getFromSession() {
|
|
63
|
+
const value = sessionStorage.getItem(_Referrer.storageId);
|
|
64
|
+
if (value && value.length > 0) {
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// src/UniqueUserId.ts
|
|
71
|
+
import randomBytes from "randombytes";
|
|
72
|
+
var UniqueUserId = class _UniqueUserId {
|
|
73
|
+
static localStorageId = "_coin_cid";
|
|
74
|
+
id;
|
|
75
|
+
constructor() {
|
|
76
|
+
this.id = window.localStorage.getItem(_UniqueUserId.localStorageId) ?? this.generateId();
|
|
77
|
+
window.localStorage.setItem(_UniqueUserId.localStorageId, this.id);
|
|
78
|
+
}
|
|
79
|
+
toString() {
|
|
80
|
+
return this.id;
|
|
81
|
+
}
|
|
82
|
+
generateId() {
|
|
83
|
+
return randomBytes(16).toString("base64");
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// src/UtmFields.ts
|
|
88
|
+
import { isEqual } from "@xylabs/lodash";
|
|
89
|
+
var UtmFields = class _UtmFields {
|
|
90
|
+
static localStorageId = "_coin_utm";
|
|
91
|
+
fields = [];
|
|
92
|
+
constructor() {
|
|
93
|
+
const storedString = window.localStorage.getItem(_UtmFields.localStorageId) ?? "[]";
|
|
94
|
+
try {
|
|
95
|
+
this.fields = JSON.parse(storedString);
|
|
96
|
+
} catch {
|
|
97
|
+
this.fields = [];
|
|
98
|
+
}
|
|
99
|
+
if (!Array.isArray(this.fields)) {
|
|
100
|
+
this.fields = [];
|
|
101
|
+
}
|
|
102
|
+
this.update();
|
|
103
|
+
window.localStorage.setItem(_UtmFields.localStorageId, JSON.stringify(this.fields));
|
|
104
|
+
}
|
|
105
|
+
getUtmRecord = () => {
|
|
106
|
+
var _a;
|
|
107
|
+
const record = {};
|
|
108
|
+
const parsedQueryString = ((_a = document.location.search.split("?")[1]) == null ? void 0 : _a.split("&")) ?? [];
|
|
109
|
+
parsedQueryString.map((item) => {
|
|
110
|
+
const [fullKey, value] = item.split("=");
|
|
111
|
+
const [keyCategory, keyName] = fullKey.split("_");
|
|
112
|
+
if (keyCategory === "utm") {
|
|
113
|
+
record[keyName] = value;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
return Object.keys(record).length > 0 ? record : null;
|
|
117
|
+
};
|
|
118
|
+
toString() {
|
|
119
|
+
return JSON.stringify(this.fields);
|
|
120
|
+
}
|
|
121
|
+
//check the query string and if there an new/updated utm values, add them to the fields
|
|
122
|
+
update() {
|
|
123
|
+
const record = this.getUtmRecord();
|
|
124
|
+
if (record && !isEqual(this.fields.at(-1), record)) {
|
|
125
|
+
this.fields.push(record);
|
|
126
|
+
}
|
|
127
|
+
return this.fields ?? void 0;
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
// src/Pixel.ts
|
|
132
|
+
var emailHashLocalStorageName = "xy_email_hash";
|
|
133
|
+
var XyPixel = class _XyPixel {
|
|
134
|
+
static api = new PixelApi();
|
|
135
|
+
static _instance;
|
|
136
|
+
static utmFieldsObj;
|
|
137
|
+
cid = new UniqueUserId().id;
|
|
138
|
+
email;
|
|
139
|
+
email_hash;
|
|
140
|
+
exids;
|
|
141
|
+
pixelId;
|
|
142
|
+
queue = [];
|
|
143
|
+
queueMutex = new Mutex();
|
|
144
|
+
constructor(pixelId) {
|
|
145
|
+
this.pixelId = pixelId;
|
|
146
|
+
this.email_hash = localStorage.getItem(emailHashLocalStorageName);
|
|
147
|
+
}
|
|
148
|
+
static get instance() {
|
|
149
|
+
return assertEx(this._instance, "XyPixel uninitialized");
|
|
150
|
+
}
|
|
151
|
+
static init(pixelId) {
|
|
152
|
+
this._instance = new _XyPixel(pixelId);
|
|
153
|
+
return this._instance;
|
|
154
|
+
}
|
|
155
|
+
static selectApi(api) {
|
|
156
|
+
this.api = api;
|
|
157
|
+
}
|
|
158
|
+
static utmFields = () => {
|
|
159
|
+
if (_XyPixel.utmFieldsObj === void 0) {
|
|
160
|
+
_XyPixel.utmFieldsObj = new UtmFields();
|
|
161
|
+
}
|
|
162
|
+
return _XyPixel.utmFieldsObj;
|
|
163
|
+
};
|
|
164
|
+
identify(email) {
|
|
165
|
+
this.email = email;
|
|
166
|
+
this.email_hash = email ? md5(email) : void 0;
|
|
167
|
+
if (this.email_hash) {
|
|
168
|
+
localStorage.setItem(emailHashLocalStorageName, this.email_hash);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async send(event, fields, eventId) {
|
|
172
|
+
this.updateFbId();
|
|
173
|
+
const utm = _XyPixel.utmFields().update();
|
|
174
|
+
const referrer = new Referrer();
|
|
175
|
+
this.queue.push({
|
|
176
|
+
cid: this.cid,
|
|
177
|
+
create_time: Date.now(),
|
|
178
|
+
email_hash: this.email_hash ?? void 0,
|
|
179
|
+
event,
|
|
180
|
+
event_id: eventId,
|
|
181
|
+
exids: this.exids,
|
|
182
|
+
fields,
|
|
183
|
+
host: document.location.host,
|
|
184
|
+
pathname: document.location.pathname,
|
|
185
|
+
pixel: this.pixelId,
|
|
186
|
+
referrer: referrer.toJson(),
|
|
187
|
+
system: getSystemInfo(),
|
|
188
|
+
utm
|
|
189
|
+
});
|
|
190
|
+
await this.tryFlushQueue();
|
|
191
|
+
}
|
|
192
|
+
async tryFlushQueue() {
|
|
193
|
+
await this.queueMutex.runExclusive(async () => {
|
|
194
|
+
if (this.queue.length === 0)
|
|
195
|
+
return;
|
|
196
|
+
const api = _XyPixel.api;
|
|
197
|
+
if (api) {
|
|
198
|
+
const events = this.queue;
|
|
199
|
+
this.queue = [];
|
|
200
|
+
try {
|
|
201
|
+
await api.trackEvents(events);
|
|
202
|
+
} catch (ex) {
|
|
203
|
+
if (events) {
|
|
204
|
+
this.queue = [...this.queue, ...events];
|
|
205
|
+
}
|
|
206
|
+
console.error(ex);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
updateFbId() {
|
|
212
|
+
this.exids = {
|
|
213
|
+
fbc: Cookies.get("_fbc"),
|
|
214
|
+
fbp: Cookies.get("_fbp"),
|
|
215
|
+
ga: Cookies.get("_ga"),
|
|
216
|
+
gclid: Cookies.get("_gcl_aw"),
|
|
217
|
+
rdt_uid: Cookies.get("rdt_uid"),
|
|
218
|
+
scid: Cookies.get("_scid"),
|
|
219
|
+
tt_sessionId: sessionStorage.getItem("tt_sessionId") ?? void 0
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
// src/UserEventHandler.ts
|
|
225
|
+
var UserEventHandler = class {
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
// src/XyUserEventHandler.ts
|
|
229
|
+
var XyUserEventHandler = class extends UserEventHandler {
|
|
230
|
+
constructor() {
|
|
231
|
+
super();
|
|
232
|
+
}
|
|
233
|
+
async funnelStarted(fields) {
|
|
234
|
+
return await XyPixel.instance.send("FunnelStarted", fields);
|
|
235
|
+
}
|
|
236
|
+
async testStarted(fields) {
|
|
237
|
+
return await XyPixel.instance.send("TestStarted", fields);
|
|
238
|
+
}
|
|
239
|
+
async userClick(fields) {
|
|
240
|
+
return await XyPixel.instance.send("ViewPage", fields);
|
|
241
|
+
}
|
|
242
|
+
async viewContent(fields) {
|
|
243
|
+
return await XyPixel.instance.send("ViewContent", fields);
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
export {
|
|
247
|
+
PixelApi,
|
|
248
|
+
Referrer,
|
|
249
|
+
UniqueUserId,
|
|
250
|
+
UserEventHandler,
|
|
251
|
+
UtmFields,
|
|
252
|
+
XyPixel,
|
|
253
|
+
XyUserEventHandler
|
|
254
|
+
};
|
|
255
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/Api/Api.ts","../../src/Pixel.ts","../../src/getSystemInfo.ts","../../src/Referrer.ts","../../src/UniqueUserId.ts","../../src/UtmFields.ts","../../src/UserEventHandler.ts","../../src/XyUserEventHandler.ts"],"sourcesContent":["import axios from 'axios'\n\nimport { UserEvent } from './UserEvent'\n\nconst apiBaseUri: Record<string, string> = {\n beta: 'https://pixel.xylabs.com',\n local: 'http://localhost:3030',\n prod: 'https://pixel.xylabs.com',\n}\n\nexport class PixelApi {\n private endPoint: string\n\n /* baseUri can either be a preset (prod, beta, local), or a specific uri */\n constructor(baseUri = 'prod') {\n this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event/queue` : baseUri\n }\n\n async trackEvents(events: UserEvent[]) {\n return (await axios.post(this.endPoint, events)).data\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Mutex } from 'async-mutex'\nimport Cookies from 'js-cookie'\nimport md5 from 'md5'\n\nimport { PixelApi, UserEvent } from './Api'\nimport { ExIds } from './ExIds'\nimport { getSystemInfo } from './getSystemInfo'\nimport { Referrer } from './Referrer'\nimport { UniqueUserId } from './UniqueUserId'\nimport { UtmFields } from './UtmFields'\n\nconst emailHashLocalStorageName = 'xy_email_hash'\n\nexport class XyPixel {\n static api = new PixelApi()\n\n private static _instance?: XyPixel\n private static utmFieldsObj: UtmFields\n\n cid = new UniqueUserId().id\n email?: string\n email_hash?: string | null\n exids?: ExIds\n pixelId?: string\n\n queue: UserEvent[] = []\n\n private queueMutex = new Mutex()\n\n private constructor(pixelId: string) {\n this.pixelId = pixelId\n this.email_hash = localStorage.getItem(emailHashLocalStorageName)\n }\n\n static get instance(): XyPixel {\n return assertEx(this._instance, 'XyPixel uninitialized')\n }\n\n static init(pixelId: string) {\n this._instance = new XyPixel(pixelId)\n return this._instance\n }\n\n static selectApi(api: PixelApi) {\n this.api = api\n }\n\n private static utmFields = () => {\n if (XyPixel.utmFieldsObj === undefined) {\n XyPixel.utmFieldsObj = new UtmFields()\n }\n return XyPixel.utmFieldsObj\n }\n\n identify(email?: string) {\n this.email = email\n this.email_hash = email ? md5(email) : undefined\n if (this.email_hash) {\n localStorage.setItem(emailHashLocalStorageName, this.email_hash)\n }\n }\n\n async send<T extends Record<string, unknown>>(event: string, fields?: T, eventId?: string) {\n this.updateFbId()\n const utm = XyPixel.utmFields().update()\n const referrer = new Referrer()\n this.queue.push({\n cid: this.cid,\n create_time: Date.now(),\n email_hash: this.email_hash ?? undefined,\n event,\n event_id: eventId,\n exids: this.exids,\n fields,\n host: document.location.host,\n pathname: document.location.pathname,\n pixel: this.pixelId,\n referrer: referrer.toJson(),\n system: getSystemInfo(),\n utm,\n })\n await this.tryFlushQueue()\n }\n\n private async tryFlushQueue() {\n await this.queueMutex.runExclusive(async () => {\n if (this.queue.length === 0) return\n const api = XyPixel.api\n if (api) {\n const events = this.queue\n this.queue = []\n try {\n await api.trackEvents(events)\n } catch (ex) {\n if (events) {\n //put it back since it failed\n this.queue = [...this.queue, ...events]\n }\n console.error(ex)\n }\n }\n })\n }\n\n private updateFbId() {\n this.exids = {\n fbc: Cookies.get('_fbc'),\n fbp: Cookies.get('_fbp'),\n ga: Cookies.get('_ga'),\n gclid: Cookies.get('_gcl_aw'),\n rdt_uid: Cookies.get('rdt_uid'),\n scid: Cookies.get('_scid'),\n tt_sessionId: sessionStorage.getItem('tt_sessionId') ?? undefined,\n }\n }\n}\n","import { parse } from 'bowser'\n\nimport { UserEventSystem } from './Api'\n\nlet systemInfo: UserEventSystem | undefined\n\nexport const getSystemInfo = () => {\n try {\n systemInfo = systemInfo || parse(window.navigator.userAgent)\n } catch (ex) {\n console.log(`getSystemInfo Error: ${ex}`)\n }\n return systemInfo\n}\n","export class Referrer {\n private static storageId = '_coin_referrer'\n local: string\n session: string\n constructor() {\n this.session = this.getFromSession() ?? document.referrer\n sessionStorage.setItem(Referrer.storageId, this.session)\n this.local = this.getFromLocal() ?? document.referrer\n window.localStorage.setItem(Referrer.storageId, this.local)\n }\n\n toJson() {\n if ((this.local && this.local.length > 0) || (this.session && this.session.length > 0)) {\n return {\n local: this.local,\n session: this.session,\n }\n }\n }\n\n private getFromLocal() {\n const value = window.localStorage.getItem(Referrer.storageId)\n if (value && value.length > 0) {\n return value\n }\n }\n\n private getFromSession() {\n const value = sessionStorage.getItem(Referrer.storageId)\n if (value && value.length > 0) {\n return value\n }\n }\n}\n","import randomBytes from 'randombytes'\n\nexport class UniqueUserId {\n private static localStorageId = '_coin_cid'\n id: string\n\n constructor() {\n this.id = window.localStorage.getItem(UniqueUserId.localStorageId) ?? this.generateId()\n window.localStorage.setItem(UniqueUserId.localStorageId, this.id)\n }\n\n toString() {\n return this.id\n }\n\n private generateId() {\n return randomBytes(16).toString('base64')\n }\n}\n","import { isEqual } from '@xylabs/lodash'\n\nexport class UtmFields {\n private static localStorageId = '_coin_utm'\n fields: Record<string, string>[] = []\n constructor() {\n const storedString = window.localStorage.getItem(UtmFields.localStorageId) ?? '[]'\n try {\n this.fields = JSON.parse(storedString)\n } catch {\n this.fields = []\n }\n //this clears the old object version if needed\n if (!Array.isArray(this.fields)) {\n this.fields = []\n }\n this.update()\n window.localStorage.setItem(UtmFields.localStorageId, JSON.stringify(this.fields))\n }\n\n getUtmRecord = () => {\n const record: Record<string, string> = {}\n const parsedQueryString = document.location.search.split('?')[1]?.split('&') ?? []\n parsedQueryString.map((item) => {\n const [fullKey, value] = item.split('=')\n const [keyCategory, keyName] = fullKey.split('_')\n if (keyCategory === 'utm') {\n record[keyName] = value\n }\n })\n return Object.keys(record).length > 0 ? record : null\n }\n\n toString() {\n return JSON.stringify(this.fields)\n }\n\n //check the query string and if there an new/updated utm values, add them to the fields\n update() {\n const record = this.getUtmRecord()\n if (record && !isEqual(this.fields.at(-1), record)) {\n this.fields.push(record)\n }\n return this.fields ?? undefined\n }\n}\n","import { FunnelStartedFields } from './FunnelStartedFields'\nimport { TestStartedFields } from './TestStartedFields'\nimport { UserClickFields } from './UserClickFields'\nimport { ViewContentFields } from './ViewContentFields'\n\nexport abstract class UserEventHandler<T> {\n abstract funnelStarted(fields: T | FunnelStartedFields): Promise<void>\n abstract testStarted(fields: T | TestStartedFields): Promise<void>\n abstract userClick(fields: T | UserClickFields): Promise<void>\n abstract viewContent(fields: T | ViewContentFields): Promise<void>\n}\n","import { FunnelStartedFields } from './FunnelStartedFields'\nimport { XyPixel } from './Pixel'\nimport { TestStartedFields } from './TestStartedFields'\nimport { UserClickFields } from './UserClickFields'\nimport { UserEventHandler } from './UserEventHandler'\nimport { ViewContentFields } from './ViewContentFields'\n\nexport class XyUserEventHandler<T extends Record<string, unknown>> extends UserEventHandler<T> {\n constructor() {\n super()\n }\n\n async funnelStarted(fields: T | FunnelStartedFields) {\n return await XyPixel.instance.send('FunnelStarted', fields)\n }\n\n async testStarted(fields: T | TestStartedFields) {\n return await XyPixel.instance.send('TestStarted', fields)\n }\n\n async userClick(fields: T | UserClickFields) {\n return await XyPixel.instance.send('ViewPage', fields)\n }\n\n async viewContent(fields: T | ViewContentFields) {\n return await XyPixel.instance.send('ViewContent', fields)\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -9,10 +9,11 @@
|
|
|
9
9
|
"url": "https://github.com/xylabs/sdk-pixel-js/issues"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@xylabs/assert": "^
|
|
13
|
-
"
|
|
12
|
+
"@xylabs/assert": "^3.0.6",
|
|
13
|
+
"@xylabs/lodash": "^3.0.6",
|
|
14
|
+
"async-mutex": "^0.4.1",
|
|
14
15
|
"bowser": "^2.11.0",
|
|
15
|
-
"js-cookie": "^3.0.
|
|
16
|
+
"js-cookie": "^3.0.5",
|
|
16
17
|
"lodash-es": "^4.17.21",
|
|
17
18
|
"md5": "^2.3.0",
|
|
18
19
|
"randombytes": "^2.1.0"
|
|
@@ -22,44 +23,57 @@
|
|
|
22
23
|
},
|
|
23
24
|
"description": "Event Client for xylabs ESB",
|
|
24
25
|
"devDependencies": {
|
|
25
|
-
"@types/jest": "^29.
|
|
26
|
-
"@types/js-cookie": "^3.0.
|
|
27
|
-
"@types/jsdom": "^21.1.
|
|
28
|
-
"@types/lodash-es": "^4.17.
|
|
29
|
-
"@types/md5": "^2.3.
|
|
30
|
-
"@types/node": "^
|
|
31
|
-
"@types/randombytes": "^2.0.
|
|
32
|
-
"@xylabs/eslint-config": "^
|
|
33
|
-
"@xylabs/ts-scripts-yarn3": "^
|
|
34
|
-
"@xylabs/tsconfig-dom": "^
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"jest
|
|
39
|
-
"jsdom": "^
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"ts-
|
|
44
|
-
"
|
|
26
|
+
"@types/jest": "^29.5.12",
|
|
27
|
+
"@types/js-cookie": "^3.0.6",
|
|
28
|
+
"@types/jsdom": "^21.1.6",
|
|
29
|
+
"@types/lodash-es": "^4.17.12",
|
|
30
|
+
"@types/md5": "^2.3.5",
|
|
31
|
+
"@types/node": "^20.11.24",
|
|
32
|
+
"@types/randombytes": "^2.0.3",
|
|
33
|
+
"@xylabs/eslint-config": "^3.4.1",
|
|
34
|
+
"@xylabs/ts-scripts-yarn3": "^3.4.1",
|
|
35
|
+
"@xylabs/tsconfig-dom": "^3.4.1",
|
|
36
|
+
"@xylabs/tsconfig-jest": "^3.4.1",
|
|
37
|
+
"axios": "^1.6.7",
|
|
38
|
+
"eslint": "^8.57.0",
|
|
39
|
+
"jest": "^29.7.0",
|
|
40
|
+
"jest-environment-jsdom": "^29.7.0",
|
|
41
|
+
"jsdom": "^24.0.0",
|
|
42
|
+
"npm-package-json-lint": "^7.1.0",
|
|
43
|
+
"reflect-metadata": "^0.2.1",
|
|
44
|
+
"ts-jest": "^29.1.2",
|
|
45
|
+
"ts-node": "^10.9.2",
|
|
46
|
+
"typescript": "^5.3.3"
|
|
45
47
|
},
|
|
46
|
-
"
|
|
47
|
-
"module": "dist/esm/index.js",
|
|
48
|
-
"types": "dist/types/index.d.ts",
|
|
48
|
+
"types": "dist/browser/index.d.ts",
|
|
49
49
|
"exports": {
|
|
50
50
|
".": {
|
|
51
51
|
"node": {
|
|
52
|
-
"import":
|
|
53
|
-
|
|
52
|
+
"import": {
|
|
53
|
+
"types": "./dist/node/index.d.mts",
|
|
54
|
+
"default": "./dist/node/index.js"
|
|
55
|
+
},
|
|
56
|
+
"require": {
|
|
57
|
+
"types": "./dist/node/index.d.cts",
|
|
58
|
+
"default": "./dist/node/index.cjs"
|
|
59
|
+
}
|
|
54
60
|
},
|
|
55
61
|
"browser": {
|
|
56
|
-
"import":
|
|
57
|
-
|
|
62
|
+
"import": {
|
|
63
|
+
"types": "./dist/browser/index.d.mts",
|
|
64
|
+
"default": "./dist/browser/index.js"
|
|
65
|
+
},
|
|
66
|
+
"require": {
|
|
67
|
+
"types": "./dist/browser/index.d.cts",
|
|
68
|
+
"default": "./dist/browser/index.cjs"
|
|
69
|
+
}
|
|
58
70
|
},
|
|
59
|
-
"default": "./dist/
|
|
71
|
+
"default": "./dist/browser/index.js"
|
|
60
72
|
},
|
|
61
73
|
"./package.json": "./package.json"
|
|
62
74
|
},
|
|
75
|
+
"main": "dist/browser/index.cjs",
|
|
76
|
+
"module": "dist/browser/index.js",
|
|
63
77
|
"homepage": "https://xylabs.com",
|
|
64
78
|
"license": "LGPL-3.0-or-later",
|
|
65
79
|
"name": "@xylabs/pixel",
|
|
@@ -71,6 +85,7 @@
|
|
|
71
85
|
"url": "https://github.com/xylabs/sdk-pixel-js.git"
|
|
72
86
|
},
|
|
73
87
|
"sideEffects": false,
|
|
74
|
-
"version": "1.
|
|
75
|
-
"packageManager": "yarn@
|
|
88
|
+
"version": "1.5.0",
|
|
89
|
+
"packageManager": "yarn@4.1.1",
|
|
90
|
+
"type": "module"
|
|
76
91
|
}
|
package/src/Api/Api.ts
CHANGED
|
@@ -16,7 +16,7 @@ export class PixelApi {
|
|
|
16
16
|
this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event/queue` : baseUri
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
async trackEvents(events: UserEvent[]) {
|
|
20
20
|
return (await axios.post(this.endPoint, events)).data
|
|
21
21
|
}
|
|
22
22
|
}
|
package/src/Api/UserEvent.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ExIds } from '../ExIds'
|
|
1
2
|
import { UserEventSystem } from './UserEventSystem'
|
|
2
3
|
|
|
3
4
|
export interface UserEvent {
|
|
@@ -7,11 +8,13 @@ export interface UserEvent {
|
|
|
7
8
|
email_hash?: string
|
|
8
9
|
event?: string
|
|
9
10
|
event_id?: string
|
|
11
|
+
exids?: ExIds
|
|
10
12
|
fields?: Record<string, unknown>
|
|
11
13
|
host?: string
|
|
12
14
|
pathname?: string
|
|
13
15
|
pixel?: string
|
|
14
16
|
receive_time?: number
|
|
17
|
+
referrer?: { local: string; session: string }
|
|
15
18
|
rid?: string
|
|
16
19
|
system?: UserEventSystem
|
|
17
20
|
uid?: string
|
package/src/Pixel.ts
CHANGED
|
@@ -13,18 +13,18 @@ import { UtmFields } from './UtmFields'
|
|
|
13
13
|
const emailHashLocalStorageName = 'xy_email_hash'
|
|
14
14
|
|
|
15
15
|
export class XyPixel {
|
|
16
|
-
|
|
16
|
+
static api = new PixelApi()
|
|
17
17
|
|
|
18
18
|
private static _instance?: XyPixel
|
|
19
19
|
private static utmFieldsObj: UtmFields
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
cid = new UniqueUserId().id
|
|
22
|
+
email?: string
|
|
23
|
+
email_hash?: string | null
|
|
24
|
+
exids?: ExIds
|
|
25
|
+
pixelId?: string
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
queue: UserEvent[] = []
|
|
28
28
|
|
|
29
29
|
private queueMutex = new Mutex()
|
|
30
30
|
|
|
@@ -33,16 +33,16 @@ export class XyPixel {
|
|
|
33
33
|
this.email_hash = localStorage.getItem(emailHashLocalStorageName)
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
static get instance(): XyPixel {
|
|
37
37
|
return assertEx(this._instance, 'XyPixel uninitialized')
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
static init(pixelId: string) {
|
|
41
41
|
this._instance = new XyPixel(pixelId)
|
|
42
42
|
return this._instance
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
static selectApi(api: PixelApi) {
|
|
46
46
|
this.api = api
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -53,7 +53,7 @@ export class XyPixel {
|
|
|
53
53
|
return XyPixel.utmFieldsObj
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
identify(email?: string) {
|
|
57
57
|
this.email = email
|
|
58
58
|
this.email_hash = email ? md5(email) : undefined
|
|
59
59
|
if (this.email_hash) {
|
|
@@ -61,26 +61,24 @@ export class XyPixel {
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
async send<T extends Record<string, unknown>>(event: string, fields?: T, eventId?: string) {
|
|
65
65
|
this.updateFbId()
|
|
66
66
|
const utm = XyPixel.utmFields().update()
|
|
67
67
|
const referrer = new Referrer()
|
|
68
68
|
this.queue.push({
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
utm,
|
|
83
|
-
},
|
|
69
|
+
cid: this.cid,
|
|
70
|
+
create_time: Date.now(),
|
|
71
|
+
email_hash: this.email_hash ?? undefined,
|
|
72
|
+
event,
|
|
73
|
+
event_id: eventId,
|
|
74
|
+
exids: this.exids,
|
|
75
|
+
fields,
|
|
76
|
+
host: document.location.host,
|
|
77
|
+
pathname: document.location.pathname,
|
|
78
|
+
pixel: this.pixelId,
|
|
79
|
+
referrer: referrer.toJson(),
|
|
80
|
+
system: getSystemInfo(),
|
|
81
|
+
utm,
|
|
84
82
|
})
|
|
85
83
|
await this.tryFlushQueue()
|
|
86
84
|
}
|
|
@@ -97,7 +95,7 @@ export class XyPixel {
|
|
|
97
95
|
} catch (ex) {
|
|
98
96
|
if (events) {
|
|
99
97
|
//put it back since it failed
|
|
100
|
-
this.queue = this.queue
|
|
98
|
+
this.queue = [...this.queue, ...events]
|
|
101
99
|
}
|
|
102
100
|
console.error(ex)
|
|
103
101
|
}
|
|
@@ -107,15 +105,13 @@ export class XyPixel {
|
|
|
107
105
|
|
|
108
106
|
private updateFbId() {
|
|
109
107
|
this.exids = {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
tt_sessionId: sessionStorage.getItem('tt_sessionId') ?? undefined,
|
|
118
|
-
},
|
|
108
|
+
fbc: Cookies.get('_fbc'),
|
|
109
|
+
fbp: Cookies.get('_fbp'),
|
|
110
|
+
ga: Cookies.get('_ga'),
|
|
111
|
+
gclid: Cookies.get('_gcl_aw'),
|
|
112
|
+
rdt_uid: Cookies.get('rdt_uid'),
|
|
113
|
+
scid: Cookies.get('_scid'),
|
|
114
|
+
tt_sessionId: sessionStorage.getItem('tt_sessionId') ?? undefined,
|
|
119
115
|
}
|
|
120
116
|
}
|
|
121
117
|
}
|
package/src/Referrer.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export class Referrer {
|
|
2
2
|
private static storageId = '_coin_referrer'
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
local: string
|
|
4
|
+
session: string
|
|
5
5
|
constructor() {
|
|
6
6
|
this.session = this.getFromSession() ?? document.referrer
|
|
7
7
|
sessionStorage.setItem(Referrer.storageId, this.session)
|
|
@@ -9,7 +9,7 @@ export class Referrer {
|
|
|
9
9
|
window.localStorage.setItem(Referrer.storageId, this.local)
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
toJson() {
|
|
13
13
|
if ((this.local && this.local.length > 0) || (this.session && this.session.length > 0)) {
|
|
14
14
|
return {
|
|
15
15
|
local: this.local,
|
package/src/UniqueUserId.ts
CHANGED
|
@@ -2,14 +2,14 @@ import randomBytes from 'randombytes'
|
|
|
2
2
|
|
|
3
3
|
export class UniqueUserId {
|
|
4
4
|
private static localStorageId = '_coin_cid'
|
|
5
|
-
|
|
5
|
+
id: string
|
|
6
6
|
|
|
7
7
|
constructor() {
|
|
8
8
|
this.id = window.localStorage.getItem(UniqueUserId.localStorageId) ?? this.generateId()
|
|
9
9
|
window.localStorage.setItem(UniqueUserId.localStorageId, this.id)
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
toString() {
|
|
13
13
|
return this.id
|
|
14
14
|
}
|
|
15
15
|
|
package/src/UtmFields.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { isEqual } from 'lodash
|
|
1
|
+
import { isEqual } from '@xylabs/lodash'
|
|
2
2
|
|
|
3
3
|
export class UtmFields {
|
|
4
4
|
private static localStorageId = '_coin_utm'
|
|
5
|
-
|
|
5
|
+
fields: Record<string, string>[] = []
|
|
6
6
|
constructor() {
|
|
7
7
|
const storedString = window.localStorage.getItem(UtmFields.localStorageId) ?? '[]'
|
|
8
8
|
try {
|
|
@@ -18,7 +18,7 @@ export class UtmFields {
|
|
|
18
18
|
window.localStorage.setItem(UtmFields.localStorageId, JSON.stringify(this.fields))
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
getUtmRecord = () => {
|
|
22
22
|
const record: Record<string, string> = {}
|
|
23
23
|
const parsedQueryString = document.location.search.split('?')[1]?.split('&') ?? []
|
|
24
24
|
parsedQueryString.map((item) => {
|
|
@@ -31,17 +31,15 @@ export class UtmFields {
|
|
|
31
31
|
return Object.keys(record).length > 0 ? record : null
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
toString() {
|
|
35
35
|
return JSON.stringify(this.fields)
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
//check the query string and if there an new/updated utm values, add them to the fields
|
|
39
|
-
|
|
39
|
+
update() {
|
|
40
40
|
const record = this.getUtmRecord()
|
|
41
|
-
if (record) {
|
|
42
|
-
|
|
43
|
-
this.fields.push(record)
|
|
44
|
-
}
|
|
41
|
+
if (record && !isEqual(this.fields.at(-1), record)) {
|
|
42
|
+
this.fields.push(record)
|
|
45
43
|
}
|
|
46
44
|
return this.fields ?? undefined
|
|
47
45
|
}
|
|
@@ -10,19 +10,19 @@ export class XyUserEventHandler<T extends Record<string, unknown>> extends UserE
|
|
|
10
10
|
super()
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
async funnelStarted(fields: T | FunnelStartedFields) {
|
|
14
14
|
return await XyPixel.instance.send('FunnelStarted', fields)
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
async testStarted(fields: T | TestStartedFields) {
|
|
18
18
|
return await XyPixel.instance.send('TestStarted', fields)
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
async userClick(fields: T | UserClickFields) {
|
|
22
22
|
return await XyPixel.instance.send('ViewPage', fields)
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
async viewContent(fields: T | ViewContentFields) {
|
|
26
26
|
return await XyPixel.instance.send('ViewContent', fields)
|
|
27
27
|
}
|
|
28
28
|
}
|