@gem-sdk/trackers 3.5.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.
Files changed (49) hide show
  1. package/README.md +220 -0
  2. package/dist/esm/index.js +402 -0
  3. package/dist/esm/index.mjs +402 -0
  4. package/dist/esm/tooling/tsconfig/dist/callback-worker.d.ts +1 -0
  5. package/dist/esm/tooling/tsconfig/dist/data/callbackStore.d.ts +20 -0
  6. package/dist/esm/tooling/tsconfig/dist/data/eventStore.d.ts +14 -0
  7. package/dist/esm/tooling/tsconfig/dist/data/index.d.ts +2 -0
  8. package/dist/esm/tooling/tsconfig/dist/debug/index.d.ts +9 -0
  9. package/dist/esm/tooling/tsconfig/dist/event-worker.d.ts +1 -0
  10. package/dist/esm/tooling/tsconfig/dist/handlers/event-worker/click-handler.d.ts +2 -0
  11. package/dist/esm/tooling/tsconfig/dist/handlers/event-worker/index.d.ts +5 -0
  12. package/dist/esm/tooling/tsconfig/dist/handlers/event-worker/page-view-handler.d.ts +2 -0
  13. package/dist/esm/tooling/tsconfig/dist/handlers/event-worker/performance-entry-handler.d.ts +2 -0
  14. package/dist/esm/tooling/tsconfig/dist/handlers/event-worker/performance-handler.d.ts +2 -0
  15. package/dist/esm/tooling/tsconfig/dist/handlers/event-worker/scroll-handler.d.ts +2 -0
  16. package/dist/esm/tooling/tsconfig/dist/handlers/index.d.ts +1 -0
  17. package/dist/esm/tooling/tsconfig/dist/index.d.ts +2 -0
  18. package/dist/esm/tooling/tsconfig/dist/tracking-sdk.d.ts +53 -0
  19. package/dist/esm/tooling/tsconfig/dist/types/callback.d.ts +43 -0
  20. package/dist/esm/tooling/tsconfig/dist/types/event.d.ts +91 -0
  21. package/dist/esm/tooling/tsconfig/dist/types/index.d.ts +4 -0
  22. package/dist/esm/tooling/tsconfig/dist/types/tracking.d.ts +16 -0
  23. package/dist/esm/tooling/tsconfig/dist/types/worker.d.ts +21 -0
  24. package/dist/esm/tooling/tsconfig/dist/utils/event-worker.d.ts +1 -0
  25. package/dist/esm/tooling/tsconfig/dist/utils/index.d.ts +1 -0
  26. package/dist/umd/index.js +1 -0
  27. package/dist/umd/tooling/tsconfig/dist/callback-worker.d.ts +1 -0
  28. package/dist/umd/tooling/tsconfig/dist/data/callbackStore.d.ts +20 -0
  29. package/dist/umd/tooling/tsconfig/dist/data/eventStore.d.ts +14 -0
  30. package/dist/umd/tooling/tsconfig/dist/data/index.d.ts +2 -0
  31. package/dist/umd/tooling/tsconfig/dist/debug/index.d.ts +9 -0
  32. package/dist/umd/tooling/tsconfig/dist/event-worker.d.ts +1 -0
  33. package/dist/umd/tooling/tsconfig/dist/handlers/event-worker/click-handler.d.ts +2 -0
  34. package/dist/umd/tooling/tsconfig/dist/handlers/event-worker/index.d.ts +5 -0
  35. package/dist/umd/tooling/tsconfig/dist/handlers/event-worker/page-view-handler.d.ts +2 -0
  36. package/dist/umd/tooling/tsconfig/dist/handlers/event-worker/performance-entry-handler.d.ts +2 -0
  37. package/dist/umd/tooling/tsconfig/dist/handlers/event-worker/performance-handler.d.ts +2 -0
  38. package/dist/umd/tooling/tsconfig/dist/handlers/event-worker/scroll-handler.d.ts +2 -0
  39. package/dist/umd/tooling/tsconfig/dist/handlers/index.d.ts +1 -0
  40. package/dist/umd/tooling/tsconfig/dist/index.d.ts +2 -0
  41. package/dist/umd/tooling/tsconfig/dist/tracking-sdk.d.ts +53 -0
  42. package/dist/umd/tooling/tsconfig/dist/types/callback.d.ts +43 -0
  43. package/dist/umd/tooling/tsconfig/dist/types/event.d.ts +91 -0
  44. package/dist/umd/tooling/tsconfig/dist/types/index.d.ts +4 -0
  45. package/dist/umd/tooling/tsconfig/dist/types/tracking.d.ts +16 -0
  46. package/dist/umd/tooling/tsconfig/dist/types/worker.d.ts +21 -0
  47. package/dist/umd/tooling/tsconfig/dist/utils/event-worker.d.ts +1 -0
  48. package/dist/umd/tooling/tsconfig/dist/utils/index.d.ts +1 -0
  49. package/package.json +45 -0
@@ -0,0 +1,4 @@
1
+ export * from './callback';
2
+ export * from './event';
3
+ export * from './tracking';
4
+ export * from './worker';
@@ -0,0 +1,16 @@
1
+ import { ITrackingEvent } from './event';
2
+ import { WorkerStatus } from './worker';
3
+ export interface ITrackingConfig {
4
+ events: ITrackingEvent[];
5
+ workerTimeout?: number;
6
+ }
7
+ export interface IWorkerStatus {
8
+ eventWorker: WorkerStatus;
9
+ callbackWorker: WorkerStatus;
10
+ }
11
+ export interface ITrackingSDKStatus {
12
+ isInitialized: boolean;
13
+ workerStatus: IWorkerStatus;
14
+ registeredCallbacks: string[];
15
+ totalCallbacks: number;
16
+ }
@@ -0,0 +1,21 @@
1
+ import { IPerformanceMetrics, IProcessedEventData } from './event';
2
+ import { ITrackingConfig } from './tracking';
3
+ export interface IWorkerMessage {
4
+ type: string;
5
+ data?: any;
6
+ event?: string;
7
+ processedData?: IProcessedEventData;
8
+ metrics?: IPerformanceMetrics;
9
+ config?: ITrackingConfig;
10
+ eventType?: string;
11
+ callbackCount?: number;
12
+ timestamp?: number;
13
+ error?: any;
14
+ callbacks?: string[];
15
+ requestId?: string;
16
+ payload?: any;
17
+ successCount?: number;
18
+ errorCount?: number;
19
+ executionTime?: number;
20
+ }
21
+ export type WorkerStatus = 'idle' | 'ready' | 'active' | 'error' | 'destroyed';
@@ -0,0 +1 @@
1
+ export declare function generateSessionId(): string;
@@ -0,0 +1 @@
1
+ export * from './event-worker';
@@ -0,0 +1 @@
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).ReactFlow={})}(this,function(e){"use strict";var t="undefined"!=typeof document?document.currentScript:null;const r=new class{constructor(e){this.enableLog=!!e}log(e,...t){this.enableLog&&console.log(e,...t)}warn(e,...t){this.enableLog&&console.warn(e,...t)}error(e,...t){this.enableLog&&console.error(e,...t)}};var a;e.ITrackingEvent=void 0,(a=e.ITrackingEvent||(e.ITrackingEvent={})).PAGE_LOAD="pageLoad",a.CLICK="click",a.PERFORMANCE="performance",a.PERFORMANCE_ENTRY="performanceEntry",a.SCROLL="scroll",a.MANUAL_CLICK="manualClick";const n=new class{constructor(){this.config={events:[e.ITrackingEvent.PAGE_LOAD,e.ITrackingEvent.CLICK],workerTimeout:5e3},this.isInitialized=!1,this.eventWorker=null,this.callbackWorker=null,this.callbacks={},this.workerStatus={eventWorker:"idle",callbackWorker:"idle"},this.perEventCallbacks=new Map,this.handlePageLoad=()=>{this.trackEvent(e.ITrackingEvent.PAGE_LOAD,{timestamp:Date.now(),url:window.location.href})},this.handleClick=t=>{const r=t.target;"SCRIPT"!==r.tagName&&"STYLE"!==r.tagName||this.trackEvent(e.ITrackingEvent.CLICK,{target:r.tagName,targetId:r.id||"",targetClass:r.className||"",x:t.clientX,y:t.clientY,timestamp:Date.now()})},"undefined"==typeof window||window.Worker||r.warn("Web Worker not supported. Falling back to main thread.")}init(e={}){if(this.isInitialized)return void r.warn("SDK already initialized");Object.assign(this.config,e),r.log("🚀 GXTrackingSDK initialized with config:",this.config),this.initWorkers();const t=()=>{setTimeout(()=>{this.isInitialized=!0,this.startTracking(),r.log("✅ All workers are running")},0)};"complete"===document.readyState?t():window.addEventListener("load",t)}initWorkers(){this.initEventWorker(),this.initCallbackWorker()}initEventWorker(){try{this.eventWorker=new Worker(new URL("./event-worker.ts","undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(__filename).href:"undefined"==typeof document?location.href:t&&"SCRIPT"===t.tagName.toUpperCase()&&t.src||new URL("index.js",document.baseURI).href),{type:"module"}),this.eventWorker.onmessage=e=>{const{type:t,data:r}=e.data;switch(this.workerStatus.eventWorker="active",t){case"processed":this.sendToCallbackWorker({type:"processedResult",event:r.event,eventType:r.event,processedData:r.processedData,timestamp:Date.now()});break;case"error":this.handleError(r)}},this.eventWorker.onerror=e=>{this.workerStatus.eventWorker="error",this.handleError({message:"Event Worker crashed",error:e})},this.sendToEventWorker({type:"init",config:this.config}),this.workerStatus.eventWorker="ready"}catch(e){this.handleError({message:"Failed to create Event Worker",error:e})}}initCallbackWorker(){try{this.callbackWorker=new Worker(new URL("./callback-worker.ts","undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(__filename).href:"undefined"==typeof document?location.href:t&&"SCRIPT"===t.tagName.toUpperCase()&&t.src||new URL("index.js",document.baseURI).href),{type:"module"}),this.callbackWorker.onmessage=e=>{const{type:t,data:a}=e.data;switch(this.workerStatus.callbackWorker="active",t){case"executeCallbacks":{const{eventType:t,requestId:r,payload:a}=e.data||{},n=t&&this.callbacks[t]||[];let s=0,i=0;const o=Date.now(),c=a&&a.data&&a.data.eventId,l=c?this.perEventCallbacks.get(c):void 0;if(l)try{l(a),s++}catch(e){i++}finally{this.perEventCallbacks.delete(c)}n.length>0&&n.forEach(e=>{try{e(a),s++}catch(e){i++,this.callbacks.error&&this.callbacks.error.forEach(t=>{try{t({type:"error",data:{message:"Callback error",error:this.serializeError(e)},timestamp:Date.now(),processingTime:0,workerId:"tracking-sdk"})}catch(e){}})}});const k=Date.now()-o;this.sendToCallbackWorker({type:"executionResult",requestId:r,successCount:s,errorCount:i,executionTime:k});break}case"callbackReady":r.log("📨 Callback processed successfully");break;case"error":this.handleError(a)}},this.callbackWorker.onerror=e=>{this.workerStatus.callbackWorker="error",this.handleError({message:"Callback Worker crashed",error:e})},this.sendToCallbackWorker({type:"init",config:this.config,callbacks:Object.keys(this.callbacks)}),this.workerStatus.callbackWorker="ready"}catch(e){this.handleError({message:"Failed to create Callback Worker",error:e})}}startTracking(){if("undefined"!=typeof window){if(r.log("👁️ Starting event tracking...",this.config.events),this.config.events.includes(e.ITrackingEvent.PAGE_LOAD)&&this.handlePageLoad(),this.config.events.includes(e.ITrackingEvent.CLICK)&&document.addEventListener("click",this.handleClick),this.config.events.includes(e.ITrackingEvent.PERFORMANCE)&&"PerformanceObserver"in window){new PerformanceObserver(t=>{t.getEntries().forEach(t=>{this.trackEvent(e.ITrackingEvent.PERFORMANCE_ENTRY,{name:t.name,entryType:t.entryType,duration:Math.round(t.duration),startTime:Math.round(t.startTime),timestamp:Date.now()})})}).observe({entryTypes:["navigation","paint","resource","largest-contentful-paint"]})}r.log("✅ All event listeners attached")}}trackEvent(e,t,a){if(!this.isInitialized)return void r.warn("SDK not initialized. Call init() first.");const n=t.eventId||`ev_${Date.now()}_${Math.random().toString(36).slice(2)}`;a&&this.perEventCallbacks.set(n,a);const s={type:"track",event:e,data:Object.assign(Object.assign({},t),{timestamp:Date.now(),eventId:n})};r.log("📤 Sending event to Event Worker:",e,s.data),this.sendToEventWorker(s)}sendToEventWorker(e){this.eventWorker?this.eventWorker.postMessage(e):r.error("Event Worker not initialized")}sendToCallbackWorker(e){this.callbackWorker?this.callbackWorker.postMessage(e):r.error("Callback Worker not initialized")}on(e,t){return this.callbacks[e]||(this.callbacks[e]=[]),this.callbacks[e].push(t),r.log(`🔗 Registered callback for "${e}". Total: ${this.callbacks[e].length}`),this.sendToCallbackWorker({type:"registerCallback",eventType:e,callbackCount:this.callbacks[e].length}),()=>{if(!this.callbacks[e])return;const a=this.callbacks[e].indexOf(t);a>-1&&(this.callbacks[e].splice(a,1),r.log(`❌ Unregistered callback for "${e}"`))}}handleError(e){const t=this.serializeError(e);this.callbacks.error&&this.callbacks.error.forEach(e=>e(t)),this.sendToCallbackWorker({type:"error",data:t,timestamp:Date.now()})}serializeError(e){try{if(!e)return{message:"Unknown error"};if(e instanceof Error)return{message:e.message,name:e.name,stack:e.stack};if("string"==typeof e)return{message:e};if(e.message||e.error){const t=e.error,r={message:e.message||"Error",context:void 0};if(t instanceof Error)return Object.assign(Object.assign({},r),{error:{message:t.message,name:t.name,stack:t.stack}});try{return Object.assign(Object.assign({},r),{error:JSON.parse(JSON.stringify(t))})}catch(e){return Object.assign(Object.assign({},r),{error:String(t)})}}return JSON.parse(JSON.stringify(e))}catch(e){return{message:"Unserializable error"}}}getStatus(){return{isInitialized:this.isInitialized,workerStatus:this.workerStatus,registeredCallbacks:Object.keys(this.callbacks),totalCallbacks:Object.values(this.callbacks).reduce((e,t)=>e+t.length,0)}}destroy(){r.log("🧹 Destroying GXTrackingSDK..."),"undefined"!=typeof window&&(window.removeEventListener("load",this.handlePageLoad),document.removeEventListener("click",this.handleClick)),this.eventWorker&&(this.eventWorker.terminate(),this.eventWorker=null,r.log("🔌 Event Worker terminated")),this.callbackWorker&&(this.callbackWorker.terminate(),this.callbackWorker=null,r.log("🔌 Callback Worker terminated")),this.callbacks={},this.isInitialized=!1,this.workerStatus={eventWorker:"destroyed",callbackWorker:"destroyed"},r.log("✅ GXTrackingSDK destroyed successfully")}};"undefined"!=typeof window&&(window.GXTrackingSDK=n),e.gxTrackingSDK=n});
@@ -0,0 +1,20 @@
1
+ import { ICallbackQueueItem, ICallbackStats, IPerformanceMetrics, IProcessedEventData, ITrackingConfig } from '../types';
2
+ interface CallbackStore {
3
+ getRegisteredCallbacks(): Record<string, number>;
4
+ getCallbackQueue(): ICallbackQueueItem[];
5
+ getIsProcessingCallbacks(): boolean;
6
+ getCallbackStats(): ICallbackStats;
7
+ getPendingExecutions(): Record<string, (result: {
8
+ successCount: number;
9
+ errorCount: number;
10
+ executionTime: number;
11
+ }) => void>;
12
+ setConfig(newConfig: ITrackingConfig): void;
13
+ setRegisteredCallbacks(newRegisteredCallbacks: Record<string, number>): void;
14
+ executeCallbacksForEvent(queueItem: ICallbackQueueItem): Promise<void>;
15
+ processCallbackQueue(): Promise<void>;
16
+ handleProcessedEvent(eventType: string, processedData: IProcessedEventData, metrics?: IPerformanceMetrics): void;
17
+ handleErrorEvent(eventType: string, errorData: IProcessedEventData): void;
18
+ }
19
+ export declare const callbackStore: CallbackStore;
20
+ export default callbackStore;
@@ -0,0 +1,14 @@
1
+ import { IEventData, IProcessingQueueItem, ITrackingConfig } from '../types';
2
+ interface EventStore {
3
+ getConfig(): ITrackingConfig;
4
+ getProcessingQueue(): IProcessingQueueItem[];
5
+ getIsProcessing(): boolean;
6
+ setConfig(newConfig: ITrackingConfig): void;
7
+ setProcessingQueue(newProcessingQueue: IProcessingQueueItem[]): void;
8
+ setIsProcessing(newIsProcessing: boolean): void;
9
+ processSingleEvent(eventName: string, eventData: IEventData): Promise<void>;
10
+ processQueue(): Promise<void>;
11
+ processEvent(eventName: string, eventData: IEventData): void;
12
+ }
13
+ export declare const eventStore: EventStore;
14
+ export default eventStore;
@@ -0,0 +1,2 @@
1
+ export * from './callbackStore';
2
+ export * from './eventStore';
@@ -0,0 +1,9 @@
1
+ declare class DebugTrackers {
2
+ private enableLog;
3
+ constructor(enableLog?: boolean);
4
+ log(message: string, ...args: any[]): void;
5
+ warn(message: string, ...args: any[]): void;
6
+ error(message: string, ...args: any[]): void;
7
+ }
8
+ export declare const debugTrackers: DebugTrackers;
9
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { IEventData, IProcessedClickData } from '../../types';
2
+ export declare function processClick(data: IEventData): Promise<IProcessedClickData>;
@@ -0,0 +1,5 @@
1
+ export * from './click-handler';
2
+ export * from './page-view-handler';
3
+ export * from './performance-entry-handler';
4
+ export * from './performance-handler';
5
+ export * from './scroll-handler';
@@ -0,0 +1,2 @@
1
+ import { IEventData, IProcessedPageViewData } from '../../types';
2
+ export declare function processPageView(data: IEventData): Promise<IProcessedPageViewData>;
@@ -0,0 +1,2 @@
1
+ import { IEventData, IProcessedPerformanceEntryData } from '../../types';
2
+ export declare function processPerformanceEntry(data: IEventData): Promise<IProcessedPerformanceEntryData>;
@@ -0,0 +1,2 @@
1
+ import { IEventData, IPerformanceMetrics } from '../../types';
2
+ export declare function processPerformance(data: IEventData): Promise<IPerformanceMetrics>;
@@ -0,0 +1,2 @@
1
+ import { IEventData, IProcessedScrollData } from '../../types';
2
+ export declare function processScroll(data: IEventData): Promise<IProcessedScrollData>;
@@ -0,0 +1 @@
1
+ export * from './event-worker';
@@ -0,0 +1,2 @@
1
+ export * from './tracking-sdk';
2
+ export * from './types';
@@ -0,0 +1,53 @@
1
+ import { EventCallback, IEventData, ITrackingConfig, ITrackingEvent, ITrackingSDKStatus, IWorkerMessage, IWorkerStatus, UnsubscribeFunction } from './types';
2
+ declare global {
3
+ interface Window {
4
+ GXTrackingSDK: ITrackingSDKInterface;
5
+ }
6
+ }
7
+ export interface ITrackingSDKInterface {
8
+ config: ITrackingConfig;
9
+ isInitialized: boolean;
10
+ eventWorker: Worker | null;
11
+ callbackWorker: Worker | null;
12
+ callbacks: Record<string, EventCallback[]>;
13
+ workerStatus: IWorkerStatus;
14
+ init(userConfig?: Partial<ITrackingConfig>): void;
15
+ initWorkers(): void;
16
+ initEventWorker(): void;
17
+ initCallbackWorker(): void;
18
+ startTracking(): void;
19
+ trackEvent(eventName: ITrackingEvent, data: IEventData, callback?: EventCallback): void;
20
+ sendToEventWorker(message: IWorkerMessage): void;
21
+ sendToCallbackWorker(message: IWorkerMessage): void;
22
+ on(eventType: string, callback: EventCallback): UnsubscribeFunction;
23
+ handleError(errorData: any): void;
24
+ getStatus(): ITrackingSDKStatus;
25
+ destroy(): void;
26
+ }
27
+ declare class GXTrackingSDK implements ITrackingSDKInterface {
28
+ config: ITrackingConfig;
29
+ isInitialized: boolean;
30
+ eventWorker: Worker | null;
31
+ callbackWorker: Worker | null;
32
+ callbacks: Record<string, EventCallback[]>;
33
+ workerStatus: IWorkerStatus;
34
+ private perEventCallbacks;
35
+ constructor();
36
+ init(userConfig?: Partial<ITrackingConfig>): void;
37
+ initWorkers(): void;
38
+ initEventWorker(): void;
39
+ initCallbackWorker(): void;
40
+ startTracking(): void;
41
+ trackEvent(eventName: ITrackingEvent, data: IEventData, callback?: EventCallback): void;
42
+ sendToEventWorker(message: IWorkerMessage): void;
43
+ sendToCallbackWorker(message: IWorkerMessage): void;
44
+ on(eventType: string, callback: EventCallback): UnsubscribeFunction;
45
+ handleError(errorData: any): void;
46
+ private serializeError;
47
+ getStatus(): ITrackingSDKStatus;
48
+ destroy(): void;
49
+ private handlePageLoad;
50
+ private handleClick;
51
+ }
52
+ declare const gxTrackingSDK: GXTrackingSDK;
53
+ export { gxTrackingSDK };
@@ -0,0 +1,43 @@
1
+ import { IPerformanceMetrics, IProcessedEventData } from './event';
2
+ import { ITrackingConfig } from './tracking';
3
+ import { IWorkerMessage } from './worker';
4
+ export interface ICallbackQueueItem {
5
+ eventType: string;
6
+ processedData: IProcessedEventData;
7
+ metrics?: IPerformanceMetrics;
8
+ timestamp: number;
9
+ attempt: number;
10
+ }
11
+ export interface ICallbackStats {
12
+ totalProcessed: number;
13
+ totalErrors: number;
14
+ lastProcessed: number | null;
15
+ }
16
+ export interface ICallbackWorkerMessage extends IWorkerMessage {
17
+ type: 'init' | 'registerCallback' | 'processedResult' | 'error' | 'healthCheck' | 'executionResult';
18
+ eventType?: string;
19
+ processedData?: IProcessedEventData;
20
+ metrics?: IPerformanceMetrics;
21
+ config?: ITrackingConfig;
22
+ callbackCount?: number;
23
+ requestId?: string;
24
+ successCount?: number;
25
+ errorCount?: number;
26
+ executionTime?: number;
27
+ }
28
+ export interface ICallbackWorkerResponse {
29
+ type: 'ready' | 'health' | 'callbackReady' | 'executionSummary' | 'callbackFailed' | 'heartbeat';
30
+ message?: string;
31
+ status?: 'busy' | 'idle';
32
+ queueLength?: number;
33
+ stats?: ICallbackStats;
34
+ eventType?: string;
35
+ successCount?: number;
36
+ errorCount?: number;
37
+ executionTime?: number;
38
+ dataSample?: IProcessedEventData;
39
+ error?: string;
40
+ finalAttempt?: boolean;
41
+ timestamp?: number;
42
+ processing?: boolean;
43
+ }
@@ -0,0 +1,91 @@
1
+ import { ITrackingConfig } from './tracking';
2
+ import { IWorkerMessage } from './worker';
3
+ export interface IEventData {
4
+ timestamp: number;
5
+ eventId?: string;
6
+ [key: string]: any;
7
+ }
8
+ export interface IProcessedEventData extends IEventData {
9
+ eventType: string;
10
+ processed: boolean;
11
+ [key: string]: any;
12
+ }
13
+ export interface IPerformanceMetrics {
14
+ manualTrigger?: boolean;
15
+ timestamp: number;
16
+ cpuUsage?: number;
17
+ memoryUsage?: number;
18
+ networkSpeed?: number;
19
+ processingTime: number;
20
+ entryCount?: number;
21
+ largestContentfulPaint?: number;
22
+ }
23
+ export interface ICallbackData {
24
+ type: string;
25
+ data: IProcessedEventData;
26
+ metrics?: IPerformanceMetrics;
27
+ timestamp: number;
28
+ processingTime: number;
29
+ workerId: string;
30
+ }
31
+ export interface IProcessingQueueItem {
32
+ eventName: string;
33
+ eventData: IEventData;
34
+ timestamp: number;
35
+ }
36
+ export interface IEventWorkerMessage extends IWorkerMessage {
37
+ type: 'init' | 'track' | 'healthCheck';
38
+ event?: string;
39
+ data?: IEventData;
40
+ config?: ITrackingConfig;
41
+ }
42
+ export interface IEventWorkerResponse {
43
+ type: 'ready' | 'health' | 'processed' | 'error';
44
+ message?: string;
45
+ status?: 'busy' | 'idle';
46
+ queueLength?: number;
47
+ data?: {
48
+ event: string;
49
+ processedData?: IProcessedEventData;
50
+ metrics?: IPerformanceMetrics;
51
+ processingTime?: number;
52
+ workerTimestamp?: number;
53
+ error?: {
54
+ message: string;
55
+ stack?: string;
56
+ timestamp: number;
57
+ };
58
+ };
59
+ }
60
+ export interface INavigationTiming {
61
+ navigationStart: number;
62
+ domContentLoaded: number;
63
+ loadEvent: number;
64
+ totalLoadTime: number;
65
+ }
66
+ export interface IProcessedClickData extends IProcessedEventData {
67
+ eventType: ITrackingEvent.CLICK;
68
+ sessionId: string;
69
+ }
70
+ export interface IProcessedPageViewData extends IProcessedEventData {
71
+ eventType: ITrackingEvent.PAGE_LOAD;
72
+ userAgent: string;
73
+ }
74
+ export interface IProcessedScrollData extends IProcessedEventData {
75
+ eventType: ITrackingEvent.SCROLL;
76
+ scrollPercentage: number;
77
+ }
78
+ export interface IProcessedPerformanceEntryData extends IProcessedEventData {
79
+ eventType: ITrackingEvent.PERFORMANCE_ENTRY;
80
+ category: string;
81
+ }
82
+ export type EventCallback = (data: ICallbackData) => void;
83
+ export type UnsubscribeFunction = () => void;
84
+ export declare enum ITrackingEvent {
85
+ PAGE_LOAD = "pageLoad",
86
+ CLICK = "click",
87
+ PERFORMANCE = "performance",
88
+ PERFORMANCE_ENTRY = "performanceEntry",
89
+ SCROLL = "scroll",
90
+ MANUAL_CLICK = "manualClick"
91
+ }
@@ -0,0 +1,4 @@
1
+ export * from './callback';
2
+ export * from './event';
3
+ export * from './tracking';
4
+ export * from './worker';
@@ -0,0 +1,16 @@
1
+ import { ITrackingEvent } from './event';
2
+ import { WorkerStatus } from './worker';
3
+ export interface ITrackingConfig {
4
+ events: ITrackingEvent[];
5
+ workerTimeout?: number;
6
+ }
7
+ export interface IWorkerStatus {
8
+ eventWorker: WorkerStatus;
9
+ callbackWorker: WorkerStatus;
10
+ }
11
+ export interface ITrackingSDKStatus {
12
+ isInitialized: boolean;
13
+ workerStatus: IWorkerStatus;
14
+ registeredCallbacks: string[];
15
+ totalCallbacks: number;
16
+ }
@@ -0,0 +1,21 @@
1
+ import { IPerformanceMetrics, IProcessedEventData } from './event';
2
+ import { ITrackingConfig } from './tracking';
3
+ export interface IWorkerMessage {
4
+ type: string;
5
+ data?: any;
6
+ event?: string;
7
+ processedData?: IProcessedEventData;
8
+ metrics?: IPerformanceMetrics;
9
+ config?: ITrackingConfig;
10
+ eventType?: string;
11
+ callbackCount?: number;
12
+ timestamp?: number;
13
+ error?: any;
14
+ callbacks?: string[];
15
+ requestId?: string;
16
+ payload?: any;
17
+ successCount?: number;
18
+ errorCount?: number;
19
+ executionTime?: number;
20
+ }
21
+ export type WorkerStatus = 'idle' | 'ready' | 'active' | 'error' | 'destroyed';
@@ -0,0 +1 @@
1
+ export declare function generateSessionId(): string;
@@ -0,0 +1 @@
1
+ export * from './event-worker';
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@gem-sdk/trackers",
3
+ "version": "3.5.3",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "source": "src/index.ts",
7
+ "scripts": {
8
+ "build": "rollup --config node:@gem-sdk/rollup-config --environment NODE_ENV:production",
9
+ "clean": "rm -rf dist",
10
+ "dev": "echo 'Add dev script here'",
11
+ "format": "prettier --write \"**/*.{ts,tsx,md}\"",
12
+ "lint": "eslint \"src/**/*.{ts,tsx}\"",
13
+ "lint:all": "yarn lint && yarn lint:tsc",
14
+ "lint:tsc": "tsc --noEmit",
15
+ "post:publish": "node ../../scripts/convert-publish.js",
16
+ "pre:publish": "node ../../scripts/convert-publish.js -p",
17
+ "test": "jest --runInBand"
18
+ },
19
+ "devDependencies": {
20
+ "eslint": "9.36.0",
21
+ "rollup": "3.29.5"
22
+ },
23
+ "main": "dist/umd/index.js",
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "module": "dist/esm/index.js",
28
+ "types": "dist/esm/index.d.ts",
29
+ "exports": {
30
+ "./package.json": "./package.json",
31
+ ".": {
32
+ "node": {
33
+ "types": "./dist/esm/index.d.ts",
34
+ "module": "./dist/esm/index.js",
35
+ "require": "./dist/umd/index.js",
36
+ "import": "./dist/esm/index.mjs"
37
+ },
38
+ "browser": {
39
+ "import": "./dist/esm/index.js",
40
+ "require": "./dist/umd/index.js"
41
+ },
42
+ "default": "./dist/esm/index.js"
43
+ }
44
+ }
45
+ }