@xylabs/pixel 1.2.2 → 1.2.3
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/Api/Api.js +1 -1
- package/dist/Api/Api.js.map +1 -1
- package/dist/esm2017/index.js +1 -1
- package/dist/esm2017/index.js.map +1 -1
- package/dist/esm5/index.js +1 -1
- package/dist/esm5/index.js.map +1 -1
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node-esm/index.js +1 -1
- package/dist/node-esm/index.js.map +1 -1
- package/package.json +1 -1
- package/src/Api/Api.ts +1 -1
package/dist/Api/Api.js
CHANGED
|
@@ -10,7 +10,7 @@ var PixelApi = /** @class */ (function () {
|
|
|
10
10
|
function PixelApi(baseUri) {
|
|
11
11
|
if (baseUri === void 0) { baseUri = 'prod'; }
|
|
12
12
|
console.log("baseUri: ".concat(baseUri));
|
|
13
|
-
this.endPoint = apiBaseUri[baseUri] ? "".concat(apiBaseUri[baseUri], "/t/event") : baseUri;
|
|
13
|
+
this.endPoint = apiBaseUri[baseUri] ? "".concat(apiBaseUri[baseUri], "/t/event/queue") : baseUri;
|
|
14
14
|
console.log("EndPoint: ".concat(this.endPoint));
|
|
15
15
|
}
|
|
16
16
|
PixelApi.prototype.trackEvents = function (events) {
|
package/dist/Api/Api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/Api/Api.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,IAAM,UAAU,GAA2B;IACzC,IAAI,EAAE,0BAA0B;IAChC,KAAK,EAAE,uBAAuB;IAC9B,IAAI,EAAE,0BAA0B;CACjC,CAAA;AAED;IAGE,2EAA2E;IAC3E,kBAAY,OAAgB;QAAhB,wBAAA,EAAA,gBAAgB;QAC1B,OAAO,CAAC,GAAG,CAAC,mBAAY,OAAO,CAAE,CAAC,CAAA;QAClC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAG,UAAU,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/Api/Api.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,IAAM,UAAU,GAA2B;IACzC,IAAI,EAAE,0BAA0B;IAChC,KAAK,EAAE,uBAAuB;IAC9B,IAAI,EAAE,0BAA0B;CACjC,CAAA;AAED;IAGE,2EAA2E;IAC3E,kBAAY,OAAgB;QAAhB,wBAAA,EAAA,gBAAgB;QAC1B,OAAO,CAAC,GAAG,CAAC,mBAAY,OAAO,CAAE,CAAC,CAAA;QAClC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAG,UAAU,CAAC,OAAO,CAAC,mBAAgB,CAAC,CAAC,CAAC,OAAO,CAAA;QACtF,OAAO,CAAC,GAAG,CAAC,oBAAa,IAAI,CAAC,QAAQ,CAAE,CAAC,CAAA;IAC3C,CAAC;IAEY,8BAAW,GAAxB,UAAyB,MAAmB;;;;4BAClC,qBAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAA;4BAA/C,sBAAO,CAAC,SAAuC,CAAC,CAAC,IAAI,EAAA;;;;KACtD;IACH,eAAC;AAAD,CAAC,AAbD,IAaC;AAED,eAAe,QAAQ,CAAA"}
|
package/dist/esm2017/index.js
CHANGED
|
@@ -113,7 +113,7 @@ class PixelApi {
|
|
|
113
113
|
/* baseUri can either be a preset (prod, beta, local), or a specific uri */
|
|
114
114
|
constructor(baseUri = 'prod') {
|
|
115
115
|
console.log(`baseUri: ${baseUri}`);
|
|
116
|
-
this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event` : baseUri;
|
|
116
|
+
this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event/queue` : baseUri;
|
|
117
117
|
console.log(`EndPoint: ${this.endPoint}`);
|
|
118
118
|
}
|
|
119
119
|
async trackEvents(events) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/Referrer.ts","../../src/UniqueUserId.ts","../../src/UserEventHandler.ts","../../src/UtmFields.ts","../../src/Api/Api.ts","../../src/getSystemInfo.ts","../../src/Pixel.ts","../../src/XyUserEventHandler.ts"],"sourcesContent":["class Referrer {\n private static storageId = '_coin_referrer'\n public local: string\n public 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 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 public 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\nexport default Referrer\n","import randomBytes from 'randombytes'\n\nclass UniqueUserId {\n private static localStorageId = '_coin_cid'\n public id: string\n constructor() {\n this.id = window.localStorage.getItem(UniqueUserId.localStorageId) ?? this.generateId()\n window.localStorage.setItem(UniqueUserId.localStorageId, this.id)\n }\n private generateId() {\n return randomBytes(16).toString('base64')\n }\n\n public toString() {\n return this.id\n }\n}\n\nexport default UniqueUserId\n","import FunnelStartedFields from './FunnelStartedFields'\nimport TestStartedFields from './TestStartedFields'\nimport UserClickFields from './UserClickFields'\nimport ViewContentFields from './ViewContentFields'\n\nabstract class UserEventHandler<T> {\n abstract testStarted(fields: T | TestStartedFields): Promise<void>\n abstract funnelStarted(fields: T | FunnelStartedFields): Promise<void>\n abstract viewContent(fields: T | ViewContentFields): Promise<void>\n abstract userClick(fields: T | UserClickFields): Promise<void>\n}\n\nexport default UserEventHandler\n","import isEqual from 'lodash/isEqual'\n\nclass UtmFields {\n private static localStorageId = '_coin_utm'\n public 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 public 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 //check the query string and if there an new/updated utm values, add them to the fields\n public update() {\n const record = this.getUtmRecord()\n if (record) {\n if (!isEqual(this.fields[this.fields.length - 1], record)) {\n this.fields.push(record)\n }\n }\n return this.fields ?? undefined\n }\n\n public toString() {\n return JSON.stringify(this.fields)\n }\n}\n\nexport default UtmFields\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\nclass 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 console.log(`baseUri: ${baseUri}`)\n this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event` : baseUri\n console.log(`EndPoint: ${this.endPoint}`)\n }\n\n public async trackEvents(events: UserEvent[]) {\n return (await axios.post(this.endPoint, events)).data\n }\n}\n\nexport default PixelApi\n","import Bowser from 'bowser'\n\nimport { UserEventSystem } from './Api'\n\nlet systemInfo: UserEventSystem | undefined = undefined\n\nconst getSystemInfo = () => {\n try {\n systemInfo = systemInfo || Bowser.parse(window.navigator.userAgent)\n } catch (ex) {\n console.log(`getSystemInfo Error: ${ex}`)\n }\n return systemInfo\n}\n\nexport default getSystemInfo\n","import { assertEx } from '@xylabs/sdk-js'\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\nexport class XyPixel {\n public pixelId?: string\n public email?: string\n public email_hash?: string | null\n public queue: UserEvent[] = []\n public cid = new UniqueUserId().id\n public exids?: ExIds\n private queueMutex = new Mutex()\n\n private constructor(pixelId: string) {\n this.pixelId = pixelId\n }\n\n public identify(email?: string) {\n this.email = email\n this.email_hash = email ? md5(email) : undefined\n }\n\n private updateFbId() {\n this.exids = {\n ...{\n fbc: Cookies.get('_fbc'),\n fbp: Cookies.get('_fbp'),\n ga: Cookies.get('_ga'),\n gclid: Cookies.get('_gclid'),\n rdt_uid: Cookies.get('rdt_uid'),\n scid: Cookies.get('_scid'),\n tt_sessionId: sessionStorage.getItem('tt_sessionId') ?? undefined,\n },\n }\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.concat(events)\n }\n console.error(ex)\n }\n }\n })\n }\n\n private static utmFieldsObj: UtmFields\n private static utmFields = () => {\n if (XyPixel.utmFieldsObj === undefined) {\n XyPixel.utmFieldsObj = new UtmFields()\n }\n return XyPixel.utmFieldsObj\n }\n\n public async send<T extends Record<string, unknown>>(event: string, fields?: T) {\n this.updateFbId()\n const utm = XyPixel.utmFields().update()\n const referrer = new Referrer()\n this.queue.push({\n ...{\n cid: this.cid,\n create_time: Date.now(),\n email_hash: this.email_hash ?? undefined,\n event,\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 })\n await this.tryFlushQueue()\n }\n\n private static _instance?: XyPixel\n public static get instance(): XyPixel {\n return assertEx(this._instance, 'XyPixel uninitialized')\n }\n\n public static init(pixelId: string) {\n this._instance = new XyPixel(pixelId)\n return this._instance\n }\n\n public static api = new PixelApi()\n public static selectApi(api: PixelApi) {\n this.api = api\n }\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\nclass XyUserEventHandler<T extends Record<string, unknown>> extends UserEventHandler<T> {\n constructor() {\n super()\n }\n public async testStarted(fields: T | TestStartedFields) {\n return await XyPixel.instance.send('TestStarted', fields)\n }\n public async funnelStarted(fields: T | FunnelStartedFields) {\n return await XyPixel.instance.send('FunnelStarted', fields)\n }\n public async viewContent(fields: T | ViewContentFields) {\n return await XyPixel.instance.send('ViewContent', fields)\n }\n public async userClick(fields: T | UserClickFields) {\n return await XyPixel.instance.send('ViewPage', fields)\n }\n}\n\nexport default XyUserEventHandler\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/Referrer.ts","../../src/UniqueUserId.ts","../../src/UserEventHandler.ts","../../src/UtmFields.ts","../../src/Api/Api.ts","../../src/getSystemInfo.ts","../../src/Pixel.ts","../../src/XyUserEventHandler.ts"],"sourcesContent":["class Referrer {\n private static storageId = '_coin_referrer'\n public local: string\n public 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 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 public 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\nexport default Referrer\n","import randomBytes from 'randombytes'\n\nclass UniqueUserId {\n private static localStorageId = '_coin_cid'\n public id: string\n constructor() {\n this.id = window.localStorage.getItem(UniqueUserId.localStorageId) ?? this.generateId()\n window.localStorage.setItem(UniqueUserId.localStorageId, this.id)\n }\n private generateId() {\n return randomBytes(16).toString('base64')\n }\n\n public toString() {\n return this.id\n }\n}\n\nexport default UniqueUserId\n","import FunnelStartedFields from './FunnelStartedFields'\nimport TestStartedFields from './TestStartedFields'\nimport UserClickFields from './UserClickFields'\nimport ViewContentFields from './ViewContentFields'\n\nabstract class UserEventHandler<T> {\n abstract testStarted(fields: T | TestStartedFields): Promise<void>\n abstract funnelStarted(fields: T | FunnelStartedFields): Promise<void>\n abstract viewContent(fields: T | ViewContentFields): Promise<void>\n abstract userClick(fields: T | UserClickFields): Promise<void>\n}\n\nexport default UserEventHandler\n","import isEqual from 'lodash/isEqual'\n\nclass UtmFields {\n private static localStorageId = '_coin_utm'\n public 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 public 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 //check the query string and if there an new/updated utm values, add them to the fields\n public update() {\n const record = this.getUtmRecord()\n if (record) {\n if (!isEqual(this.fields[this.fields.length - 1], record)) {\n this.fields.push(record)\n }\n }\n return this.fields ?? undefined\n }\n\n public toString() {\n return JSON.stringify(this.fields)\n }\n}\n\nexport default UtmFields\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\nclass 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 console.log(`baseUri: ${baseUri}`)\n this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event/queue` : baseUri\n console.log(`EndPoint: ${this.endPoint}`)\n }\n\n public async trackEvents(events: UserEvent[]) {\n return (await axios.post(this.endPoint, events)).data\n }\n}\n\nexport default PixelApi\n","import Bowser from 'bowser'\n\nimport { UserEventSystem } from './Api'\n\nlet systemInfo: UserEventSystem | undefined = undefined\n\nconst getSystemInfo = () => {\n try {\n systemInfo = systemInfo || Bowser.parse(window.navigator.userAgent)\n } catch (ex) {\n console.log(`getSystemInfo Error: ${ex}`)\n }\n return systemInfo\n}\n\nexport default getSystemInfo\n","import { assertEx } from '@xylabs/sdk-js'\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\nexport class XyPixel {\n public pixelId?: string\n public email?: string\n public email_hash?: string | null\n public queue: UserEvent[] = []\n public cid = new UniqueUserId().id\n public exids?: ExIds\n private queueMutex = new Mutex()\n\n private constructor(pixelId: string) {\n this.pixelId = pixelId\n }\n\n public identify(email?: string) {\n this.email = email\n this.email_hash = email ? md5(email) : undefined\n }\n\n private updateFbId() {\n this.exids = {\n ...{\n fbc: Cookies.get('_fbc'),\n fbp: Cookies.get('_fbp'),\n ga: Cookies.get('_ga'),\n gclid: Cookies.get('_gclid'),\n rdt_uid: Cookies.get('rdt_uid'),\n scid: Cookies.get('_scid'),\n tt_sessionId: sessionStorage.getItem('tt_sessionId') ?? undefined,\n },\n }\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.concat(events)\n }\n console.error(ex)\n }\n }\n })\n }\n\n private static utmFieldsObj: UtmFields\n private static utmFields = () => {\n if (XyPixel.utmFieldsObj === undefined) {\n XyPixel.utmFieldsObj = new UtmFields()\n }\n return XyPixel.utmFieldsObj\n }\n\n public async send<T extends Record<string, unknown>>(event: string, fields?: T) {\n this.updateFbId()\n const utm = XyPixel.utmFields().update()\n const referrer = new Referrer()\n this.queue.push({\n ...{\n cid: this.cid,\n create_time: Date.now(),\n email_hash: this.email_hash ?? undefined,\n event,\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 })\n await this.tryFlushQueue()\n }\n\n private static _instance?: XyPixel\n public static get instance(): XyPixel {\n return assertEx(this._instance, 'XyPixel uninitialized')\n }\n\n public static init(pixelId: string) {\n this._instance = new XyPixel(pixelId)\n return this._instance\n }\n\n public static api = new PixelApi()\n public static selectApi(api: PixelApi) {\n this.api = api\n }\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\nclass XyUserEventHandler<T extends Record<string, unknown>> extends UserEventHandler<T> {\n constructor() {\n super()\n }\n public async testStarted(fields: T | TestStartedFields) {\n return await XyPixel.instance.send('TestStarted', fields)\n }\n public async funnelStarted(fields: T | FunnelStartedFields) {\n return await XyPixel.instance.send('FunnelStarted', fields)\n }\n public async viewContent(fields: T | ViewContentFields) {\n return await XyPixel.instance.send('ViewContent', fields)\n }\n public async userClick(fields: T | UserClickFields) {\n return await XyPixel.instance.send('ViewPage', fields)\n }\n}\n\nexport default XyUserEventHandler\n"],"names":[],"mappings":"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"}
|
package/dist/esm5/index.js
CHANGED
|
@@ -200,7 +200,7 @@ var PixelApi = /** @class */ (function () {
|
|
|
200
200
|
function PixelApi(baseUri) {
|
|
201
201
|
if (baseUri === void 0) { baseUri = 'prod'; }
|
|
202
202
|
console.log("baseUri: ".concat(baseUri));
|
|
203
|
-
this.endPoint = apiBaseUri[baseUri] ? "".concat(apiBaseUri[baseUri], "/t/event") : baseUri;
|
|
203
|
+
this.endPoint = apiBaseUri[baseUri] ? "".concat(apiBaseUri[baseUri], "/t/event/queue") : baseUri;
|
|
204
204
|
console.log("EndPoint: ".concat(this.endPoint));
|
|
205
205
|
}
|
|
206
206
|
PixelApi.prototype.trackEvents = function (events) {
|
package/dist/esm5/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/Referrer.ts","../../src/UniqueUserId.ts","../../src/UserEventHandler.ts","../../src/UtmFields.ts","../../src/Api/Api.ts","../../src/getSystemInfo.ts","../../src/Pixel.ts","../../src/XyUserEventHandler.ts"],"sourcesContent":["class Referrer {\n private static storageId = '_coin_referrer'\n public local: string\n public 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 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 public 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\nexport default Referrer\n","import randomBytes from 'randombytes'\n\nclass UniqueUserId {\n private static localStorageId = '_coin_cid'\n public id: string\n constructor() {\n this.id = window.localStorage.getItem(UniqueUserId.localStorageId) ?? this.generateId()\n window.localStorage.setItem(UniqueUserId.localStorageId, this.id)\n }\n private generateId() {\n return randomBytes(16).toString('base64')\n }\n\n public toString() {\n return this.id\n }\n}\n\nexport default UniqueUserId\n","import FunnelStartedFields from './FunnelStartedFields'\nimport TestStartedFields from './TestStartedFields'\nimport UserClickFields from './UserClickFields'\nimport ViewContentFields from './ViewContentFields'\n\nabstract class UserEventHandler<T> {\n abstract testStarted(fields: T | TestStartedFields): Promise<void>\n abstract funnelStarted(fields: T | FunnelStartedFields): Promise<void>\n abstract viewContent(fields: T | ViewContentFields): Promise<void>\n abstract userClick(fields: T | UserClickFields): Promise<void>\n}\n\nexport default UserEventHandler\n","import isEqual from 'lodash/isEqual'\n\nclass UtmFields {\n private static localStorageId = '_coin_utm'\n public 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 public 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 //check the query string and if there an new/updated utm values, add them to the fields\n public update() {\n const record = this.getUtmRecord()\n if (record) {\n if (!isEqual(this.fields[this.fields.length - 1], record)) {\n this.fields.push(record)\n }\n }\n return this.fields ?? undefined\n }\n\n public toString() {\n return JSON.stringify(this.fields)\n }\n}\n\nexport default UtmFields\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\nclass 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 console.log(`baseUri: ${baseUri}`)\n this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event` : baseUri\n console.log(`EndPoint: ${this.endPoint}`)\n }\n\n public async trackEvents(events: UserEvent[]) {\n return (await axios.post(this.endPoint, events)).data\n }\n}\n\nexport default PixelApi\n","import Bowser from 'bowser'\n\nimport { UserEventSystem } from './Api'\n\nlet systemInfo: UserEventSystem | undefined = undefined\n\nconst getSystemInfo = () => {\n try {\n systemInfo = systemInfo || Bowser.parse(window.navigator.userAgent)\n } catch (ex) {\n console.log(`getSystemInfo Error: ${ex}`)\n }\n return systemInfo\n}\n\nexport default getSystemInfo\n","import { assertEx } from '@xylabs/sdk-js'\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\nexport class XyPixel {\n public pixelId?: string\n public email?: string\n public email_hash?: string | null\n public queue: UserEvent[] = []\n public cid = new UniqueUserId().id\n public exids?: ExIds\n private queueMutex = new Mutex()\n\n private constructor(pixelId: string) {\n this.pixelId = pixelId\n }\n\n public identify(email?: string) {\n this.email = email\n this.email_hash = email ? md5(email) : undefined\n }\n\n private updateFbId() {\n this.exids = {\n ...{\n fbc: Cookies.get('_fbc'),\n fbp: Cookies.get('_fbp'),\n ga: Cookies.get('_ga'),\n gclid: Cookies.get('_gclid'),\n rdt_uid: Cookies.get('rdt_uid'),\n scid: Cookies.get('_scid'),\n tt_sessionId: sessionStorage.getItem('tt_sessionId') ?? undefined,\n },\n }\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.concat(events)\n }\n console.error(ex)\n }\n }\n })\n }\n\n private static utmFieldsObj: UtmFields\n private static utmFields = () => {\n if (XyPixel.utmFieldsObj === undefined) {\n XyPixel.utmFieldsObj = new UtmFields()\n }\n return XyPixel.utmFieldsObj\n }\n\n public async send<T extends Record<string, unknown>>(event: string, fields?: T) {\n this.updateFbId()\n const utm = XyPixel.utmFields().update()\n const referrer = new Referrer()\n this.queue.push({\n ...{\n cid: this.cid,\n create_time: Date.now(),\n email_hash: this.email_hash ?? undefined,\n event,\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 })\n await this.tryFlushQueue()\n }\n\n private static _instance?: XyPixel\n public static get instance(): XyPixel {\n return assertEx(this._instance, 'XyPixel uninitialized')\n }\n\n public static init(pixelId: string) {\n this._instance = new XyPixel(pixelId)\n return this._instance\n }\n\n public static api = new PixelApi()\n public static selectApi(api: PixelApi) {\n this.api = api\n }\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\nclass XyUserEventHandler<T extends Record<string, unknown>> extends UserEventHandler<T> {\n constructor() {\n super()\n }\n public async testStarted(fields: T | TestStartedFields) {\n return await XyPixel.instance.send('TestStarted', fields)\n }\n public async funnelStarted(fields: T | FunnelStartedFields) {\n return await XyPixel.instance.send('FunnelStarted', fields)\n }\n public async viewContent(fields: T | ViewContentFields) {\n return await XyPixel.instance.send('ViewContent', fields)\n }\n public async userClick(fields: T | UserClickFields) {\n return await XyPixel.instance.send('ViewPage', fields)\n }\n}\n\nexport default XyUserEventHandler\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/Referrer.ts","../../src/UniqueUserId.ts","../../src/UserEventHandler.ts","../../src/UtmFields.ts","../../src/Api/Api.ts","../../src/getSystemInfo.ts","../../src/Pixel.ts","../../src/XyUserEventHandler.ts"],"sourcesContent":["class Referrer {\n private static storageId = '_coin_referrer'\n public local: string\n public 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 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 public 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\nexport default Referrer\n","import randomBytes from 'randombytes'\n\nclass UniqueUserId {\n private static localStorageId = '_coin_cid'\n public id: string\n constructor() {\n this.id = window.localStorage.getItem(UniqueUserId.localStorageId) ?? this.generateId()\n window.localStorage.setItem(UniqueUserId.localStorageId, this.id)\n }\n private generateId() {\n return randomBytes(16).toString('base64')\n }\n\n public toString() {\n return this.id\n }\n}\n\nexport default UniqueUserId\n","import FunnelStartedFields from './FunnelStartedFields'\nimport TestStartedFields from './TestStartedFields'\nimport UserClickFields from './UserClickFields'\nimport ViewContentFields from './ViewContentFields'\n\nabstract class UserEventHandler<T> {\n abstract testStarted(fields: T | TestStartedFields): Promise<void>\n abstract funnelStarted(fields: T | FunnelStartedFields): Promise<void>\n abstract viewContent(fields: T | ViewContentFields): Promise<void>\n abstract userClick(fields: T | UserClickFields): Promise<void>\n}\n\nexport default UserEventHandler\n","import isEqual from 'lodash/isEqual'\n\nclass UtmFields {\n private static localStorageId = '_coin_utm'\n public 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 public 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 //check the query string and if there an new/updated utm values, add them to the fields\n public update() {\n const record = this.getUtmRecord()\n if (record) {\n if (!isEqual(this.fields[this.fields.length - 1], record)) {\n this.fields.push(record)\n }\n }\n return this.fields ?? undefined\n }\n\n public toString() {\n return JSON.stringify(this.fields)\n }\n}\n\nexport default UtmFields\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\nclass 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 console.log(`baseUri: ${baseUri}`)\n this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event/queue` : baseUri\n console.log(`EndPoint: ${this.endPoint}`)\n }\n\n public async trackEvents(events: UserEvent[]) {\n return (await axios.post(this.endPoint, events)).data\n }\n}\n\nexport default PixelApi\n","import Bowser from 'bowser'\n\nimport { UserEventSystem } from './Api'\n\nlet systemInfo: UserEventSystem | undefined = undefined\n\nconst getSystemInfo = () => {\n try {\n systemInfo = systemInfo || Bowser.parse(window.navigator.userAgent)\n } catch (ex) {\n console.log(`getSystemInfo Error: ${ex}`)\n }\n return systemInfo\n}\n\nexport default getSystemInfo\n","import { assertEx } from '@xylabs/sdk-js'\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\nexport class XyPixel {\n public pixelId?: string\n public email?: string\n public email_hash?: string | null\n public queue: UserEvent[] = []\n public cid = new UniqueUserId().id\n public exids?: ExIds\n private queueMutex = new Mutex()\n\n private constructor(pixelId: string) {\n this.pixelId = pixelId\n }\n\n public identify(email?: string) {\n this.email = email\n this.email_hash = email ? md5(email) : undefined\n }\n\n private updateFbId() {\n this.exids = {\n ...{\n fbc: Cookies.get('_fbc'),\n fbp: Cookies.get('_fbp'),\n ga: Cookies.get('_ga'),\n gclid: Cookies.get('_gclid'),\n rdt_uid: Cookies.get('rdt_uid'),\n scid: Cookies.get('_scid'),\n tt_sessionId: sessionStorage.getItem('tt_sessionId') ?? undefined,\n },\n }\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.concat(events)\n }\n console.error(ex)\n }\n }\n })\n }\n\n private static utmFieldsObj: UtmFields\n private static utmFields = () => {\n if (XyPixel.utmFieldsObj === undefined) {\n XyPixel.utmFieldsObj = new UtmFields()\n }\n return XyPixel.utmFieldsObj\n }\n\n public async send<T extends Record<string, unknown>>(event: string, fields?: T) {\n this.updateFbId()\n const utm = XyPixel.utmFields().update()\n const referrer = new Referrer()\n this.queue.push({\n ...{\n cid: this.cid,\n create_time: Date.now(),\n email_hash: this.email_hash ?? undefined,\n event,\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 })\n await this.tryFlushQueue()\n }\n\n private static _instance?: XyPixel\n public static get instance(): XyPixel {\n return assertEx(this._instance, 'XyPixel uninitialized')\n }\n\n public static init(pixelId: string) {\n this._instance = new XyPixel(pixelId)\n return this._instance\n }\n\n public static api = new PixelApi()\n public static selectApi(api: PixelApi) {\n this.api = api\n }\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\nclass XyUserEventHandler<T extends Record<string, unknown>> extends UserEventHandler<T> {\n constructor() {\n super()\n }\n public async testStarted(fields: T | TestStartedFields) {\n return await XyPixel.instance.send('TestStarted', fields)\n }\n public async funnelStarted(fields: T | FunnelStartedFields) {\n return await XyPixel.instance.send('FunnelStarted', fields)\n }\n public async viewContent(fields: T | ViewContentFields) {\n return await XyPixel.instance.send('ViewContent', fields)\n }\n public async userClick(fields: T | UserClickFields) {\n return await XyPixel.instance.send('ViewPage', fields)\n }\n}\n\nexport default XyUserEventHandler\n"],"names":[],"mappings":"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"}
|
package/dist/node/index.js
CHANGED
|
@@ -213,7 +213,7 @@ var PixelApi = /** @class */ (function () {
|
|
|
213
213
|
function PixelApi(baseUri) {
|
|
214
214
|
if (baseUri === void 0) { baseUri = 'prod'; }
|
|
215
215
|
console.log("baseUri: ".concat(baseUri));
|
|
216
|
-
this.endPoint = apiBaseUri[baseUri] ? "".concat(apiBaseUri[baseUri], "/t/event") : baseUri;
|
|
216
|
+
this.endPoint = apiBaseUri[baseUri] ? "".concat(apiBaseUri[baseUri], "/t/event/queue") : baseUri;
|
|
217
217
|
console.log("EndPoint: ".concat(this.endPoint));
|
|
218
218
|
}
|
|
219
219
|
PixelApi.prototype.trackEvents = function (events) {
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/Referrer.ts","../../src/UniqueUserId.ts","../../src/UserEventHandler.ts","../../src/UtmFields.ts","../../src/Api/Api.ts","../../src/getSystemInfo.ts","../../src/Pixel.ts","../../src/XyUserEventHandler.ts"],"sourcesContent":["class Referrer {\n private static storageId = '_coin_referrer'\n public local: string\n public 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 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 public 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\nexport default Referrer\n","import randomBytes from 'randombytes'\n\nclass UniqueUserId {\n private static localStorageId = '_coin_cid'\n public id: string\n constructor() {\n this.id = window.localStorage.getItem(UniqueUserId.localStorageId) ?? this.generateId()\n window.localStorage.setItem(UniqueUserId.localStorageId, this.id)\n }\n private generateId() {\n return randomBytes(16).toString('base64')\n }\n\n public toString() {\n return this.id\n }\n}\n\nexport default UniqueUserId\n","import FunnelStartedFields from './FunnelStartedFields'\nimport TestStartedFields from './TestStartedFields'\nimport UserClickFields from './UserClickFields'\nimport ViewContentFields from './ViewContentFields'\n\nabstract class UserEventHandler<T> {\n abstract testStarted(fields: T | TestStartedFields): Promise<void>\n abstract funnelStarted(fields: T | FunnelStartedFields): Promise<void>\n abstract viewContent(fields: T | ViewContentFields): Promise<void>\n abstract userClick(fields: T | UserClickFields): Promise<void>\n}\n\nexport default UserEventHandler\n","import isEqual from 'lodash/isEqual'\n\nclass UtmFields {\n private static localStorageId = '_coin_utm'\n public 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 public 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 //check the query string and if there an new/updated utm values, add them to the fields\n public update() {\n const record = this.getUtmRecord()\n if (record) {\n if (!isEqual(this.fields[this.fields.length - 1], record)) {\n this.fields.push(record)\n }\n }\n return this.fields ?? undefined\n }\n\n public toString() {\n return JSON.stringify(this.fields)\n }\n}\n\nexport default UtmFields\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\nclass 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 console.log(`baseUri: ${baseUri}`)\n this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event` : baseUri\n console.log(`EndPoint: ${this.endPoint}`)\n }\n\n public async trackEvents(events: UserEvent[]) {\n return (await axios.post(this.endPoint, events)).data\n }\n}\n\nexport default PixelApi\n","import Bowser from 'bowser'\n\nimport { UserEventSystem } from './Api'\n\nlet systemInfo: UserEventSystem | undefined = undefined\n\nconst getSystemInfo = () => {\n try {\n systemInfo = systemInfo || Bowser.parse(window.navigator.userAgent)\n } catch (ex) {\n console.log(`getSystemInfo Error: ${ex}`)\n }\n return systemInfo\n}\n\nexport default getSystemInfo\n","import { assertEx } from '@xylabs/sdk-js'\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\nexport class XyPixel {\n public pixelId?: string\n public email?: string\n public email_hash?: string | null\n public queue: UserEvent[] = []\n public cid = new UniqueUserId().id\n public exids?: ExIds\n private queueMutex = new Mutex()\n\n private constructor(pixelId: string) {\n this.pixelId = pixelId\n }\n\n public identify(email?: string) {\n this.email = email\n this.email_hash = email ? md5(email) : undefined\n }\n\n private updateFbId() {\n this.exids = {\n ...{\n fbc: Cookies.get('_fbc'),\n fbp: Cookies.get('_fbp'),\n ga: Cookies.get('_ga'),\n gclid: Cookies.get('_gclid'),\n rdt_uid: Cookies.get('rdt_uid'),\n scid: Cookies.get('_scid'),\n tt_sessionId: sessionStorage.getItem('tt_sessionId') ?? undefined,\n },\n }\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.concat(events)\n }\n console.error(ex)\n }\n }\n })\n }\n\n private static utmFieldsObj: UtmFields\n private static utmFields = () => {\n if (XyPixel.utmFieldsObj === undefined) {\n XyPixel.utmFieldsObj = new UtmFields()\n }\n return XyPixel.utmFieldsObj\n }\n\n public async send<T extends Record<string, unknown>>(event: string, fields?: T) {\n this.updateFbId()\n const utm = XyPixel.utmFields().update()\n const referrer = new Referrer()\n this.queue.push({\n ...{\n cid: this.cid,\n create_time: Date.now(),\n email_hash: this.email_hash ?? undefined,\n event,\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 })\n await this.tryFlushQueue()\n }\n\n private static _instance?: XyPixel\n public static get instance(): XyPixel {\n return assertEx(this._instance, 'XyPixel uninitialized')\n }\n\n public static init(pixelId: string) {\n this._instance = new XyPixel(pixelId)\n return this._instance\n }\n\n public static api = new PixelApi()\n public static selectApi(api: PixelApi) {\n this.api = api\n }\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\nclass XyUserEventHandler<T extends Record<string, unknown>> extends UserEventHandler<T> {\n constructor() {\n super()\n }\n public async testStarted(fields: T | TestStartedFields) {\n return await XyPixel.instance.send('TestStarted', fields)\n }\n public async funnelStarted(fields: T | FunnelStartedFields) {\n return await XyPixel.instance.send('FunnelStarted', fields)\n }\n public async viewContent(fields: T | ViewContentFields) {\n return await XyPixel.instance.send('ViewContent', fields)\n }\n public async userClick(fields: T | UserClickFields) {\n return await XyPixel.instance.send('ViewPage', fields)\n }\n}\n\nexport default XyUserEventHandler\n"],"names":["randomBytes","isEqual","axios","Bowser","Mutex","md5","Cookies","assertEx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/Referrer.ts","../../src/UniqueUserId.ts","../../src/UserEventHandler.ts","../../src/UtmFields.ts","../../src/Api/Api.ts","../../src/getSystemInfo.ts","../../src/Pixel.ts","../../src/XyUserEventHandler.ts"],"sourcesContent":["class Referrer {\n private static storageId = '_coin_referrer'\n public local: string\n public 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 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 public 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\nexport default Referrer\n","import randomBytes from 'randombytes'\n\nclass UniqueUserId {\n private static localStorageId = '_coin_cid'\n public id: string\n constructor() {\n this.id = window.localStorage.getItem(UniqueUserId.localStorageId) ?? this.generateId()\n window.localStorage.setItem(UniqueUserId.localStorageId, this.id)\n }\n private generateId() {\n return randomBytes(16).toString('base64')\n }\n\n public toString() {\n return this.id\n }\n}\n\nexport default UniqueUserId\n","import FunnelStartedFields from './FunnelStartedFields'\nimport TestStartedFields from './TestStartedFields'\nimport UserClickFields from './UserClickFields'\nimport ViewContentFields from './ViewContentFields'\n\nabstract class UserEventHandler<T> {\n abstract testStarted(fields: T | TestStartedFields): Promise<void>\n abstract funnelStarted(fields: T | FunnelStartedFields): Promise<void>\n abstract viewContent(fields: T | ViewContentFields): Promise<void>\n abstract userClick(fields: T | UserClickFields): Promise<void>\n}\n\nexport default UserEventHandler\n","import isEqual from 'lodash/isEqual'\n\nclass UtmFields {\n private static localStorageId = '_coin_utm'\n public 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 public 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 //check the query string and if there an new/updated utm values, add them to the fields\n public update() {\n const record = this.getUtmRecord()\n if (record) {\n if (!isEqual(this.fields[this.fields.length - 1], record)) {\n this.fields.push(record)\n }\n }\n return this.fields ?? undefined\n }\n\n public toString() {\n return JSON.stringify(this.fields)\n }\n}\n\nexport default UtmFields\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\nclass 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 console.log(`baseUri: ${baseUri}`)\n this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event/queue` : baseUri\n console.log(`EndPoint: ${this.endPoint}`)\n }\n\n public async trackEvents(events: UserEvent[]) {\n return (await axios.post(this.endPoint, events)).data\n }\n}\n\nexport default PixelApi\n","import Bowser from 'bowser'\n\nimport { UserEventSystem } from './Api'\n\nlet systemInfo: UserEventSystem | undefined = undefined\n\nconst getSystemInfo = () => {\n try {\n systemInfo = systemInfo || Bowser.parse(window.navigator.userAgent)\n } catch (ex) {\n console.log(`getSystemInfo Error: ${ex}`)\n }\n return systemInfo\n}\n\nexport default getSystemInfo\n","import { assertEx } from '@xylabs/sdk-js'\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\nexport class XyPixel {\n public pixelId?: string\n public email?: string\n public email_hash?: string | null\n public queue: UserEvent[] = []\n public cid = new UniqueUserId().id\n public exids?: ExIds\n private queueMutex = new Mutex()\n\n private constructor(pixelId: string) {\n this.pixelId = pixelId\n }\n\n public identify(email?: string) {\n this.email = email\n this.email_hash = email ? md5(email) : undefined\n }\n\n private updateFbId() {\n this.exids = {\n ...{\n fbc: Cookies.get('_fbc'),\n fbp: Cookies.get('_fbp'),\n ga: Cookies.get('_ga'),\n gclid: Cookies.get('_gclid'),\n rdt_uid: Cookies.get('rdt_uid'),\n scid: Cookies.get('_scid'),\n tt_sessionId: sessionStorage.getItem('tt_sessionId') ?? undefined,\n },\n }\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.concat(events)\n }\n console.error(ex)\n }\n }\n })\n }\n\n private static utmFieldsObj: UtmFields\n private static utmFields = () => {\n if (XyPixel.utmFieldsObj === undefined) {\n XyPixel.utmFieldsObj = new UtmFields()\n }\n return XyPixel.utmFieldsObj\n }\n\n public async send<T extends Record<string, unknown>>(event: string, fields?: T) {\n this.updateFbId()\n const utm = XyPixel.utmFields().update()\n const referrer = new Referrer()\n this.queue.push({\n ...{\n cid: this.cid,\n create_time: Date.now(),\n email_hash: this.email_hash ?? undefined,\n event,\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 })\n await this.tryFlushQueue()\n }\n\n private static _instance?: XyPixel\n public static get instance(): XyPixel {\n return assertEx(this._instance, 'XyPixel uninitialized')\n }\n\n public static init(pixelId: string) {\n this._instance = new XyPixel(pixelId)\n return this._instance\n }\n\n public static api = new PixelApi()\n public static selectApi(api: PixelApi) {\n this.api = api\n }\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\nclass XyUserEventHandler<T extends Record<string, unknown>> extends UserEventHandler<T> {\n constructor() {\n super()\n }\n public async testStarted(fields: T | TestStartedFields) {\n return await XyPixel.instance.send('TestStarted', fields)\n }\n public async funnelStarted(fields: T | FunnelStartedFields) {\n return await XyPixel.instance.send('FunnelStarted', fields)\n }\n public async viewContent(fields: T | ViewContentFields) {\n return await XyPixel.instance.send('ViewContent', fields)\n }\n public async userClick(fields: T | UserClickFields) {\n return await XyPixel.instance.send('ViewPage', fields)\n }\n}\n\nexport default XyUserEventHandler\n"],"names":["randomBytes","isEqual","axios","Bowser","Mutex","md5","Cookies","assertEx"],"mappings":"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"}
|
package/dist/node-esm/index.js
CHANGED
|
@@ -113,7 +113,7 @@ class PixelApi {
|
|
|
113
113
|
/* baseUri can either be a preset (prod, beta, local), or a specific uri */
|
|
114
114
|
constructor(baseUri = 'prod') {
|
|
115
115
|
console.log(`baseUri: ${baseUri}`);
|
|
116
|
-
this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event` : baseUri;
|
|
116
|
+
this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event/queue` : baseUri;
|
|
117
117
|
console.log(`EndPoint: ${this.endPoint}`);
|
|
118
118
|
}
|
|
119
119
|
async trackEvents(events) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/Referrer.ts","../../src/UniqueUserId.ts","../../src/UserEventHandler.ts","../../src/UtmFields.ts","../../src/Api/Api.ts","../../src/getSystemInfo.ts","../../src/Pixel.ts","../../src/XyUserEventHandler.ts"],"sourcesContent":["class Referrer {\n private static storageId = '_coin_referrer'\n public local: string\n public 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 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 public 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\nexport default Referrer\n","import randomBytes from 'randombytes'\n\nclass UniqueUserId {\n private static localStorageId = '_coin_cid'\n public id: string\n constructor() {\n this.id = window.localStorage.getItem(UniqueUserId.localStorageId) ?? this.generateId()\n window.localStorage.setItem(UniqueUserId.localStorageId, this.id)\n }\n private generateId() {\n return randomBytes(16).toString('base64')\n }\n\n public toString() {\n return this.id\n }\n}\n\nexport default UniqueUserId\n","import FunnelStartedFields from './FunnelStartedFields'\nimport TestStartedFields from './TestStartedFields'\nimport UserClickFields from './UserClickFields'\nimport ViewContentFields from './ViewContentFields'\n\nabstract class UserEventHandler<T> {\n abstract testStarted(fields: T | TestStartedFields): Promise<void>\n abstract funnelStarted(fields: T | FunnelStartedFields): Promise<void>\n abstract viewContent(fields: T | ViewContentFields): Promise<void>\n abstract userClick(fields: T | UserClickFields): Promise<void>\n}\n\nexport default UserEventHandler\n","import isEqual from 'lodash/isEqual'\n\nclass UtmFields {\n private static localStorageId = '_coin_utm'\n public 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 public 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 //check the query string and if there an new/updated utm values, add them to the fields\n public update() {\n const record = this.getUtmRecord()\n if (record) {\n if (!isEqual(this.fields[this.fields.length - 1], record)) {\n this.fields.push(record)\n }\n }\n return this.fields ?? undefined\n }\n\n public toString() {\n return JSON.stringify(this.fields)\n }\n}\n\nexport default UtmFields\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\nclass 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 console.log(`baseUri: ${baseUri}`)\n this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event` : baseUri\n console.log(`EndPoint: ${this.endPoint}`)\n }\n\n public async trackEvents(events: UserEvent[]) {\n return (await axios.post(this.endPoint, events)).data\n }\n}\n\nexport default PixelApi\n","import Bowser from 'bowser'\n\nimport { UserEventSystem } from './Api'\n\nlet systemInfo: UserEventSystem | undefined = undefined\n\nconst getSystemInfo = () => {\n try {\n systemInfo = systemInfo || Bowser.parse(window.navigator.userAgent)\n } catch (ex) {\n console.log(`getSystemInfo Error: ${ex}`)\n }\n return systemInfo\n}\n\nexport default getSystemInfo\n","import { assertEx } from '@xylabs/sdk-js'\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\nexport class XyPixel {\n public pixelId?: string\n public email?: string\n public email_hash?: string | null\n public queue: UserEvent[] = []\n public cid = new UniqueUserId().id\n public exids?: ExIds\n private queueMutex = new Mutex()\n\n private constructor(pixelId: string) {\n this.pixelId = pixelId\n }\n\n public identify(email?: string) {\n this.email = email\n this.email_hash = email ? md5(email) : undefined\n }\n\n private updateFbId() {\n this.exids = {\n ...{\n fbc: Cookies.get('_fbc'),\n fbp: Cookies.get('_fbp'),\n ga: Cookies.get('_ga'),\n gclid: Cookies.get('_gclid'),\n rdt_uid: Cookies.get('rdt_uid'),\n scid: Cookies.get('_scid'),\n tt_sessionId: sessionStorage.getItem('tt_sessionId') ?? undefined,\n },\n }\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.concat(events)\n }\n console.error(ex)\n }\n }\n })\n }\n\n private static utmFieldsObj: UtmFields\n private static utmFields = () => {\n if (XyPixel.utmFieldsObj === undefined) {\n XyPixel.utmFieldsObj = new UtmFields()\n }\n return XyPixel.utmFieldsObj\n }\n\n public async send<T extends Record<string, unknown>>(event: string, fields?: T) {\n this.updateFbId()\n const utm = XyPixel.utmFields().update()\n const referrer = new Referrer()\n this.queue.push({\n ...{\n cid: this.cid,\n create_time: Date.now(),\n email_hash: this.email_hash ?? undefined,\n event,\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 })\n await this.tryFlushQueue()\n }\n\n private static _instance?: XyPixel\n public static get instance(): XyPixel {\n return assertEx(this._instance, 'XyPixel uninitialized')\n }\n\n public static init(pixelId: string) {\n this._instance = new XyPixel(pixelId)\n return this._instance\n }\n\n public static api = new PixelApi()\n public static selectApi(api: PixelApi) {\n this.api = api\n }\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\nclass XyUserEventHandler<T extends Record<string, unknown>> extends UserEventHandler<T> {\n constructor() {\n super()\n }\n public async testStarted(fields: T | TestStartedFields) {\n return await XyPixel.instance.send('TestStarted', fields)\n }\n public async funnelStarted(fields: T | FunnelStartedFields) {\n return await XyPixel.instance.send('FunnelStarted', fields)\n }\n public async viewContent(fields: T | ViewContentFields) {\n return await XyPixel.instance.send('ViewContent', fields)\n }\n public async userClick(fields: T | UserClickFields) {\n return await XyPixel.instance.send('ViewPage', fields)\n }\n}\n\nexport default XyUserEventHandler\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/Referrer.ts","../../src/UniqueUserId.ts","../../src/UserEventHandler.ts","../../src/UtmFields.ts","../../src/Api/Api.ts","../../src/getSystemInfo.ts","../../src/Pixel.ts","../../src/XyUserEventHandler.ts"],"sourcesContent":["class Referrer {\n private static storageId = '_coin_referrer'\n public local: string\n public 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 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 public 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\nexport default Referrer\n","import randomBytes from 'randombytes'\n\nclass UniqueUserId {\n private static localStorageId = '_coin_cid'\n public id: string\n constructor() {\n this.id = window.localStorage.getItem(UniqueUserId.localStorageId) ?? this.generateId()\n window.localStorage.setItem(UniqueUserId.localStorageId, this.id)\n }\n private generateId() {\n return randomBytes(16).toString('base64')\n }\n\n public toString() {\n return this.id\n }\n}\n\nexport default UniqueUserId\n","import FunnelStartedFields from './FunnelStartedFields'\nimport TestStartedFields from './TestStartedFields'\nimport UserClickFields from './UserClickFields'\nimport ViewContentFields from './ViewContentFields'\n\nabstract class UserEventHandler<T> {\n abstract testStarted(fields: T | TestStartedFields): Promise<void>\n abstract funnelStarted(fields: T | FunnelStartedFields): Promise<void>\n abstract viewContent(fields: T | ViewContentFields): Promise<void>\n abstract userClick(fields: T | UserClickFields): Promise<void>\n}\n\nexport default UserEventHandler\n","import isEqual from 'lodash/isEqual'\n\nclass UtmFields {\n private static localStorageId = '_coin_utm'\n public 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 public 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 //check the query string and if there an new/updated utm values, add them to the fields\n public update() {\n const record = this.getUtmRecord()\n if (record) {\n if (!isEqual(this.fields[this.fields.length - 1], record)) {\n this.fields.push(record)\n }\n }\n return this.fields ?? undefined\n }\n\n public toString() {\n return JSON.stringify(this.fields)\n }\n}\n\nexport default UtmFields\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\nclass 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 console.log(`baseUri: ${baseUri}`)\n this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event/queue` : baseUri\n console.log(`EndPoint: ${this.endPoint}`)\n }\n\n public async trackEvents(events: UserEvent[]) {\n return (await axios.post(this.endPoint, events)).data\n }\n}\n\nexport default PixelApi\n","import Bowser from 'bowser'\n\nimport { UserEventSystem } from './Api'\n\nlet systemInfo: UserEventSystem | undefined = undefined\n\nconst getSystemInfo = () => {\n try {\n systemInfo = systemInfo || Bowser.parse(window.navigator.userAgent)\n } catch (ex) {\n console.log(`getSystemInfo Error: ${ex}`)\n }\n return systemInfo\n}\n\nexport default getSystemInfo\n","import { assertEx } from '@xylabs/sdk-js'\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\nexport class XyPixel {\n public pixelId?: string\n public email?: string\n public email_hash?: string | null\n public queue: UserEvent[] = []\n public cid = new UniqueUserId().id\n public exids?: ExIds\n private queueMutex = new Mutex()\n\n private constructor(pixelId: string) {\n this.pixelId = pixelId\n }\n\n public identify(email?: string) {\n this.email = email\n this.email_hash = email ? md5(email) : undefined\n }\n\n private updateFbId() {\n this.exids = {\n ...{\n fbc: Cookies.get('_fbc'),\n fbp: Cookies.get('_fbp'),\n ga: Cookies.get('_ga'),\n gclid: Cookies.get('_gclid'),\n rdt_uid: Cookies.get('rdt_uid'),\n scid: Cookies.get('_scid'),\n tt_sessionId: sessionStorage.getItem('tt_sessionId') ?? undefined,\n },\n }\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.concat(events)\n }\n console.error(ex)\n }\n }\n })\n }\n\n private static utmFieldsObj: UtmFields\n private static utmFields = () => {\n if (XyPixel.utmFieldsObj === undefined) {\n XyPixel.utmFieldsObj = new UtmFields()\n }\n return XyPixel.utmFieldsObj\n }\n\n public async send<T extends Record<string, unknown>>(event: string, fields?: T) {\n this.updateFbId()\n const utm = XyPixel.utmFields().update()\n const referrer = new Referrer()\n this.queue.push({\n ...{\n cid: this.cid,\n create_time: Date.now(),\n email_hash: this.email_hash ?? undefined,\n event,\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 })\n await this.tryFlushQueue()\n }\n\n private static _instance?: XyPixel\n public static get instance(): XyPixel {\n return assertEx(this._instance, 'XyPixel uninitialized')\n }\n\n public static init(pixelId: string) {\n this._instance = new XyPixel(pixelId)\n return this._instance\n }\n\n public static api = new PixelApi()\n public static selectApi(api: PixelApi) {\n this.api = api\n }\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\nclass XyUserEventHandler<T extends Record<string, unknown>> extends UserEventHandler<T> {\n constructor() {\n super()\n }\n public async testStarted(fields: T | TestStartedFields) {\n return await XyPixel.instance.send('TestStarted', fields)\n }\n public async funnelStarted(fields: T | FunnelStartedFields) {\n return await XyPixel.instance.send('FunnelStarted', fields)\n }\n public async viewContent(fields: T | ViewContentFields) {\n return await XyPixel.instance.send('ViewContent', fields)\n }\n public async userClick(fields: T | UserClickFields) {\n return await XyPixel.instance.send('ViewPage', fields)\n }\n}\n\nexport default XyUserEventHandler\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Api/Api.ts
CHANGED
|
@@ -14,7 +14,7 @@ class PixelApi {
|
|
|
14
14
|
/* baseUri can either be a preset (prod, beta, local), or a specific uri */
|
|
15
15
|
constructor(baseUri = 'prod') {
|
|
16
16
|
console.log(`baseUri: ${baseUri}`)
|
|
17
|
-
this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event` : baseUri
|
|
17
|
+
this.endPoint = apiBaseUri[baseUri] ? `${apiBaseUri[baseUri]}/t/event/queue` : baseUri
|
|
18
18
|
console.log(`EndPoint: ${this.endPoint}`)
|
|
19
19
|
}
|
|
20
20
|
|