@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 @@
|
|
|
1
|
+
{"version":3,"file":"getSystemInfo.d.ts","sourceRoot":"","sources":["../../src/getSystemInfo.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,wDAOzB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSystemInfo.d.ts","sourceRoot":"","sources":["../../src/getSystemInfo.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,wDAOzB,CAAA"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var src_exports = {};
|
|
32
|
+
__export(src_exports, {
|
|
33
|
+
PixelApi: () => PixelApi,
|
|
34
|
+
Referrer: () => Referrer,
|
|
35
|
+
UniqueUserId: () => UniqueUserId,
|
|
36
|
+
UserEventHandler: () => UserEventHandler,
|
|
37
|
+
UtmFields: () => UtmFields,
|
|
38
|
+
XyPixel: () => XyPixel,
|
|
39
|
+
XyUserEventHandler: () => XyUserEventHandler
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(src_exports);
|
|
42
|
+
|
|
43
|
+
// src/Api/Api.ts
|
|
44
|
+
var import_axios = __toESM(require("axios"), 1);
|
|
45
|
+
var apiBaseUri = {
|
|
46
|
+
beta: "https://pixel.xylabs.com",
|
|
47
|
+
local: "http://localhost:3030",
|
|
48
|
+
prod: "https://pixel.xylabs.com"
|
|
49
|
+
};
|
|
50
|
+
var PixelApi = class {
|
|
51
|
+
endPoint;
|
|
52
|
+
/* baseUri can either be a preset (prod, beta, local), or a specific uri */
|
|
53
|
+
constructor(baseUri = "prod") {
|
|
54
|
+
this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event/queue` : baseUri;
|
|
55
|
+
}
|
|
56
|
+
async trackEvents(events) {
|
|
57
|
+
return (await import_axios.default.post(this.endPoint, events)).data;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
// src/Pixel.ts
|
|
62
|
+
var import_assert = require("@xylabs/assert");
|
|
63
|
+
var import_async_mutex = require("async-mutex");
|
|
64
|
+
var import_js_cookie = __toESM(require("js-cookie"), 1);
|
|
65
|
+
var import_md5 = __toESM(require("md5"), 1);
|
|
66
|
+
|
|
67
|
+
// src/getSystemInfo.ts
|
|
68
|
+
var import_bowser = require("bowser");
|
|
69
|
+
var systemInfo;
|
|
70
|
+
var getSystemInfo = () => {
|
|
71
|
+
try {
|
|
72
|
+
systemInfo = systemInfo || (0, import_bowser.parse)(window.navigator.userAgent);
|
|
73
|
+
} catch (ex) {
|
|
74
|
+
console.log(`getSystemInfo Error: ${ex}`);
|
|
75
|
+
}
|
|
76
|
+
return systemInfo;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// src/Referrer.ts
|
|
80
|
+
var Referrer = class _Referrer {
|
|
81
|
+
static storageId = "_coin_referrer";
|
|
82
|
+
local;
|
|
83
|
+
session;
|
|
84
|
+
constructor() {
|
|
85
|
+
this.session = this.getFromSession() ?? document.referrer;
|
|
86
|
+
sessionStorage.setItem(_Referrer.storageId, this.session);
|
|
87
|
+
this.local = this.getFromLocal() ?? document.referrer;
|
|
88
|
+
window.localStorage.setItem(_Referrer.storageId, this.local);
|
|
89
|
+
}
|
|
90
|
+
toJson() {
|
|
91
|
+
if (this.local && this.local.length > 0 || this.session && this.session.length > 0) {
|
|
92
|
+
return {
|
|
93
|
+
local: this.local,
|
|
94
|
+
session: this.session
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
getFromLocal() {
|
|
99
|
+
const value = window.localStorage.getItem(_Referrer.storageId);
|
|
100
|
+
if (value && value.length > 0) {
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
getFromSession() {
|
|
105
|
+
const value = sessionStorage.getItem(_Referrer.storageId);
|
|
106
|
+
if (value && value.length > 0) {
|
|
107
|
+
return value;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// src/UniqueUserId.ts
|
|
113
|
+
var import_randombytes = __toESM(require("randombytes"), 1);
|
|
114
|
+
var UniqueUserId = class _UniqueUserId {
|
|
115
|
+
static localStorageId = "_coin_cid";
|
|
116
|
+
id;
|
|
117
|
+
constructor() {
|
|
118
|
+
this.id = window.localStorage.getItem(_UniqueUserId.localStorageId) ?? this.generateId();
|
|
119
|
+
window.localStorage.setItem(_UniqueUserId.localStorageId, this.id);
|
|
120
|
+
}
|
|
121
|
+
toString() {
|
|
122
|
+
return this.id;
|
|
123
|
+
}
|
|
124
|
+
generateId() {
|
|
125
|
+
return (0, import_randombytes.default)(16).toString("base64");
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
// src/UtmFields.ts
|
|
130
|
+
var import_lodash = require("@xylabs/lodash");
|
|
131
|
+
var UtmFields = class _UtmFields {
|
|
132
|
+
static localStorageId = "_coin_utm";
|
|
133
|
+
fields = [];
|
|
134
|
+
constructor() {
|
|
135
|
+
const storedString = window.localStorage.getItem(_UtmFields.localStorageId) ?? "[]";
|
|
136
|
+
try {
|
|
137
|
+
this.fields = JSON.parse(storedString);
|
|
138
|
+
} catch {
|
|
139
|
+
this.fields = [];
|
|
140
|
+
}
|
|
141
|
+
if (!Array.isArray(this.fields)) {
|
|
142
|
+
this.fields = [];
|
|
143
|
+
}
|
|
144
|
+
this.update();
|
|
145
|
+
window.localStorage.setItem(_UtmFields.localStorageId, JSON.stringify(this.fields));
|
|
146
|
+
}
|
|
147
|
+
getUtmRecord = () => {
|
|
148
|
+
const record = {};
|
|
149
|
+
const parsedQueryString = document.location.search.split("?")[1]?.split("&") ?? [];
|
|
150
|
+
parsedQueryString.map((item) => {
|
|
151
|
+
const [fullKey, value] = item.split("=");
|
|
152
|
+
const [keyCategory, keyName] = fullKey.split("_");
|
|
153
|
+
if (keyCategory === "utm") {
|
|
154
|
+
record[keyName] = value;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
return Object.keys(record).length > 0 ? record : null;
|
|
158
|
+
};
|
|
159
|
+
toString() {
|
|
160
|
+
return JSON.stringify(this.fields);
|
|
161
|
+
}
|
|
162
|
+
//check the query string and if there an new/updated utm values, add them to the fields
|
|
163
|
+
update() {
|
|
164
|
+
const record = this.getUtmRecord();
|
|
165
|
+
if (record && !(0, import_lodash.isEqual)(this.fields.at(-1), record)) {
|
|
166
|
+
this.fields.push(record);
|
|
167
|
+
}
|
|
168
|
+
return this.fields ?? void 0;
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
// src/Pixel.ts
|
|
173
|
+
var emailHashLocalStorageName = "xy_email_hash";
|
|
174
|
+
var XyPixel = class _XyPixel {
|
|
175
|
+
static api = new PixelApi();
|
|
176
|
+
static _instance;
|
|
177
|
+
static utmFieldsObj;
|
|
178
|
+
cid = new UniqueUserId().id;
|
|
179
|
+
email;
|
|
180
|
+
email_hash;
|
|
181
|
+
exids;
|
|
182
|
+
pixelId;
|
|
183
|
+
queue = [];
|
|
184
|
+
queueMutex = new import_async_mutex.Mutex();
|
|
185
|
+
constructor(pixelId) {
|
|
186
|
+
this.pixelId = pixelId;
|
|
187
|
+
this.email_hash = localStorage.getItem(emailHashLocalStorageName);
|
|
188
|
+
}
|
|
189
|
+
static get instance() {
|
|
190
|
+
return (0, import_assert.assertEx)(this._instance, "XyPixel uninitialized");
|
|
191
|
+
}
|
|
192
|
+
static init(pixelId) {
|
|
193
|
+
this._instance = new _XyPixel(pixelId);
|
|
194
|
+
return this._instance;
|
|
195
|
+
}
|
|
196
|
+
static selectApi(api) {
|
|
197
|
+
this.api = api;
|
|
198
|
+
}
|
|
199
|
+
static utmFields = () => {
|
|
200
|
+
if (_XyPixel.utmFieldsObj === void 0) {
|
|
201
|
+
_XyPixel.utmFieldsObj = new UtmFields();
|
|
202
|
+
}
|
|
203
|
+
return _XyPixel.utmFieldsObj;
|
|
204
|
+
};
|
|
205
|
+
identify(email) {
|
|
206
|
+
this.email = email;
|
|
207
|
+
this.email_hash = email ? (0, import_md5.default)(email) : void 0;
|
|
208
|
+
if (this.email_hash) {
|
|
209
|
+
localStorage.setItem(emailHashLocalStorageName, this.email_hash);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async send(event, fields, eventId) {
|
|
213
|
+
this.updateFbId();
|
|
214
|
+
const utm = _XyPixel.utmFields().update();
|
|
215
|
+
const referrer = new Referrer();
|
|
216
|
+
this.queue.push({
|
|
217
|
+
cid: this.cid,
|
|
218
|
+
create_time: Date.now(),
|
|
219
|
+
email_hash: this.email_hash ?? void 0,
|
|
220
|
+
event,
|
|
221
|
+
event_id: eventId,
|
|
222
|
+
exids: this.exids,
|
|
223
|
+
fields,
|
|
224
|
+
host: document.location.host,
|
|
225
|
+
pathname: document.location.pathname,
|
|
226
|
+
pixel: this.pixelId,
|
|
227
|
+
referrer: referrer.toJson(),
|
|
228
|
+
system: getSystemInfo(),
|
|
229
|
+
utm
|
|
230
|
+
});
|
|
231
|
+
await this.tryFlushQueue();
|
|
232
|
+
}
|
|
233
|
+
async tryFlushQueue() {
|
|
234
|
+
await this.queueMutex.runExclusive(async () => {
|
|
235
|
+
if (this.queue.length === 0)
|
|
236
|
+
return;
|
|
237
|
+
const api = _XyPixel.api;
|
|
238
|
+
if (api) {
|
|
239
|
+
const events = this.queue;
|
|
240
|
+
this.queue = [];
|
|
241
|
+
try {
|
|
242
|
+
await api.trackEvents(events);
|
|
243
|
+
} catch (ex) {
|
|
244
|
+
if (events) {
|
|
245
|
+
this.queue = [...this.queue, ...events];
|
|
246
|
+
}
|
|
247
|
+
console.error(ex);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
updateFbId() {
|
|
253
|
+
this.exids = {
|
|
254
|
+
fbc: import_js_cookie.default.get("_fbc"),
|
|
255
|
+
fbp: import_js_cookie.default.get("_fbp"),
|
|
256
|
+
ga: import_js_cookie.default.get("_ga"),
|
|
257
|
+
gclid: import_js_cookie.default.get("_gcl_aw"),
|
|
258
|
+
rdt_uid: import_js_cookie.default.get("rdt_uid"),
|
|
259
|
+
scid: import_js_cookie.default.get("_scid"),
|
|
260
|
+
tt_sessionId: sessionStorage.getItem("tt_sessionId") ?? void 0
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
// src/UserEventHandler.ts
|
|
266
|
+
var UserEventHandler = class {
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
// src/XyUserEventHandler.ts
|
|
270
|
+
var XyUserEventHandler = class extends UserEventHandler {
|
|
271
|
+
constructor() {
|
|
272
|
+
super();
|
|
273
|
+
}
|
|
274
|
+
async funnelStarted(fields) {
|
|
275
|
+
return await XyPixel.instance.send("FunnelStarted", fields);
|
|
276
|
+
}
|
|
277
|
+
async testStarted(fields) {
|
|
278
|
+
return await XyPixel.instance.send("TestStarted", fields);
|
|
279
|
+
}
|
|
280
|
+
async userClick(fields) {
|
|
281
|
+
return await XyPixel.instance.send("ViewPage", fields);
|
|
282
|
+
}
|
|
283
|
+
async viewContent(fields) {
|
|
284
|
+
return await XyPixel.instance.send("ViewContent", fields);
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../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":["export * from './Api'\nexport * from './FunnelStartedFields'\nexport * from './Pixel'\nexport * from './Referrer'\nexport * from './TestStartedFields'\nexport * from './UniqueUserId'\nexport * from './UserClickFields'\nexport * from './UserEventHandler'\nexport * from './UtmFields'\nexport * from './ViewContentFields'\nexport * from './XyLabsTrackingEventJson'\nexport * from './XyUserEventHandler'\n","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":["axios","randomBytes","md5","Cookies"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,uBAAuB,CAAA;AACrC,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './Api';
|
|
2
|
+
export * from './FunnelStartedFields';
|
|
3
|
+
export * from './Pixel';
|
|
4
|
+
export * from './Referrer';
|
|
5
|
+
export * from './TestStartedFields';
|
|
6
|
+
export * from './UniqueUserId';
|
|
7
|
+
export * from './UserClickFields';
|
|
8
|
+
export * from './UserEventHandler';
|
|
9
|
+
export * from './UtmFields';
|
|
10
|
+
export * from './ViewContentFields';
|
|
11
|
+
export * from './XyLabsTrackingEventJson';
|
|
12
|
+
export * from './XyUserEventHandler';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,uBAAuB,CAAA;AACrC,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,254 @@
|
|
|
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
|
+
const record = {};
|
|
107
|
+
const parsedQueryString = document.location.search.split("?")[1]?.split("&") ?? [];
|
|
108
|
+
parsedQueryString.map((item) => {
|
|
109
|
+
const [fullKey, value] = item.split("=");
|
|
110
|
+
const [keyCategory, keyName] = fullKey.split("_");
|
|
111
|
+
if (keyCategory === "utm") {
|
|
112
|
+
record[keyName] = value;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
return Object.keys(record).length > 0 ? record : null;
|
|
116
|
+
};
|
|
117
|
+
toString() {
|
|
118
|
+
return JSON.stringify(this.fields);
|
|
119
|
+
}
|
|
120
|
+
//check the query string and if there an new/updated utm values, add them to the fields
|
|
121
|
+
update() {
|
|
122
|
+
const record = this.getUtmRecord();
|
|
123
|
+
if (record && !isEqual(this.fields.at(-1), record)) {
|
|
124
|
+
this.fields.push(record);
|
|
125
|
+
}
|
|
126
|
+
return this.fields ?? void 0;
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
// src/Pixel.ts
|
|
131
|
+
var emailHashLocalStorageName = "xy_email_hash";
|
|
132
|
+
var XyPixel = class _XyPixel {
|
|
133
|
+
static api = new PixelApi();
|
|
134
|
+
static _instance;
|
|
135
|
+
static utmFieldsObj;
|
|
136
|
+
cid = new UniqueUserId().id;
|
|
137
|
+
email;
|
|
138
|
+
email_hash;
|
|
139
|
+
exids;
|
|
140
|
+
pixelId;
|
|
141
|
+
queue = [];
|
|
142
|
+
queueMutex = new Mutex();
|
|
143
|
+
constructor(pixelId) {
|
|
144
|
+
this.pixelId = pixelId;
|
|
145
|
+
this.email_hash = localStorage.getItem(emailHashLocalStorageName);
|
|
146
|
+
}
|
|
147
|
+
static get instance() {
|
|
148
|
+
return assertEx(this._instance, "XyPixel uninitialized");
|
|
149
|
+
}
|
|
150
|
+
static init(pixelId) {
|
|
151
|
+
this._instance = new _XyPixel(pixelId);
|
|
152
|
+
return this._instance;
|
|
153
|
+
}
|
|
154
|
+
static selectApi(api) {
|
|
155
|
+
this.api = api;
|
|
156
|
+
}
|
|
157
|
+
static utmFields = () => {
|
|
158
|
+
if (_XyPixel.utmFieldsObj === void 0) {
|
|
159
|
+
_XyPixel.utmFieldsObj = new UtmFields();
|
|
160
|
+
}
|
|
161
|
+
return _XyPixel.utmFieldsObj;
|
|
162
|
+
};
|
|
163
|
+
identify(email) {
|
|
164
|
+
this.email = email;
|
|
165
|
+
this.email_hash = email ? md5(email) : void 0;
|
|
166
|
+
if (this.email_hash) {
|
|
167
|
+
localStorage.setItem(emailHashLocalStorageName, this.email_hash);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async send(event, fields, eventId) {
|
|
171
|
+
this.updateFbId();
|
|
172
|
+
const utm = _XyPixel.utmFields().update();
|
|
173
|
+
const referrer = new Referrer();
|
|
174
|
+
this.queue.push({
|
|
175
|
+
cid: this.cid,
|
|
176
|
+
create_time: Date.now(),
|
|
177
|
+
email_hash: this.email_hash ?? void 0,
|
|
178
|
+
event,
|
|
179
|
+
event_id: eventId,
|
|
180
|
+
exids: this.exids,
|
|
181
|
+
fields,
|
|
182
|
+
host: document.location.host,
|
|
183
|
+
pathname: document.location.pathname,
|
|
184
|
+
pixel: this.pixelId,
|
|
185
|
+
referrer: referrer.toJson(),
|
|
186
|
+
system: getSystemInfo(),
|
|
187
|
+
utm
|
|
188
|
+
});
|
|
189
|
+
await this.tryFlushQueue();
|
|
190
|
+
}
|
|
191
|
+
async tryFlushQueue() {
|
|
192
|
+
await this.queueMutex.runExclusive(async () => {
|
|
193
|
+
if (this.queue.length === 0)
|
|
194
|
+
return;
|
|
195
|
+
const api = _XyPixel.api;
|
|
196
|
+
if (api) {
|
|
197
|
+
const events = this.queue;
|
|
198
|
+
this.queue = [];
|
|
199
|
+
try {
|
|
200
|
+
await api.trackEvents(events);
|
|
201
|
+
} catch (ex) {
|
|
202
|
+
if (events) {
|
|
203
|
+
this.queue = [...this.queue, ...events];
|
|
204
|
+
}
|
|
205
|
+
console.error(ex);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
updateFbId() {
|
|
211
|
+
this.exids = {
|
|
212
|
+
fbc: Cookies.get("_fbc"),
|
|
213
|
+
fbp: Cookies.get("_fbp"),
|
|
214
|
+
ga: Cookies.get("_ga"),
|
|
215
|
+
gclid: Cookies.get("_gcl_aw"),
|
|
216
|
+
rdt_uid: Cookies.get("rdt_uid"),
|
|
217
|
+
scid: Cookies.get("_scid"),
|
|
218
|
+
tt_sessionId: sessionStorage.getItem("tt_sessionId") ?? void 0
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
// src/UserEventHandler.ts
|
|
224
|
+
var UserEventHandler = class {
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
// src/XyUserEventHandler.ts
|
|
228
|
+
var XyUserEventHandler = class extends UserEventHandler {
|
|
229
|
+
constructor() {
|
|
230
|
+
super();
|
|
231
|
+
}
|
|
232
|
+
async funnelStarted(fields) {
|
|
233
|
+
return await XyPixel.instance.send("FunnelStarted", fields);
|
|
234
|
+
}
|
|
235
|
+
async testStarted(fields) {
|
|
236
|
+
return await XyPixel.instance.send("TestStarted", fields);
|
|
237
|
+
}
|
|
238
|
+
async userClick(fields) {
|
|
239
|
+
return await XyPixel.instance.send("ViewPage", fields);
|
|
240
|
+
}
|
|
241
|
+
async viewContent(fields) {
|
|
242
|
+
return await XyPixel.instance.send("ViewContent", fields);
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
export {
|
|
246
|
+
PixelApi,
|
|
247
|
+
Referrer,
|
|
248
|
+
UniqueUserId,
|
|
249
|
+
UserEventHandler,
|
|
250
|
+
UtmFields,
|
|
251
|
+
XyPixel,
|
|
252
|
+
XyUserEventHandler
|
|
253
|
+
};
|
|
254
|
+
//# 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":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Api.d.ts","sourceRoot":"","sources":["../../../src/Api/Api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAQvC,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAQ;gBAGZ,OAAO,SAAS;IAItB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE;CAGtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Api.d.ts","sourceRoot":"","sources":["../../../src/Api/Api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAQvC,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAQ;gBAGZ,OAAO,SAAS;IAItB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE;CAGtC"}
|