@grainql/analytics-web 3.1.2 → 3.2.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"page-tracking.js","sourceRoot":"","sources":["../../src/page-tracking.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page-tracking.js","sourceRoot":"","sources":["../../src/page-tracking.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,9 @@
4
4
  export interface HeatmapClickData {
5
5
  pageUrl: string;
6
6
  xpath: string;
7
+ selector?: string;
8
+ relX?: number;
9
+ relY?: number;
7
10
  viewportX: number;
8
11
  viewportY: number;
9
12
  pageX: number;
@@ -11,6 +14,13 @@ export interface HeatmapClickData {
11
14
  elementTag: string;
12
15
  elementText?: string;
13
16
  timestamp: number;
17
+ deviceType: 'mobile' | 'desktop';
18
+ }
19
+ export interface HeatmapSnapshot {
20
+ sessionId: string;
21
+ pageUrl: string;
22
+ snapshot: unknown;
23
+ timestamp: number;
14
24
  }
15
25
  export interface HeatmapScrollData {
16
26
  pageUrl: string;
@@ -21,6 +31,7 @@ export interface HeatmapScrollData {
21
31
  exitTimestamp: number;
22
32
  pageHeight: number;
23
33
  viewportHeight: number;
34
+ deviceType: 'mobile' | 'desktop';
24
35
  }
25
36
  export interface HeatmapTrackingOptions {
26
37
  scrollDebounceDelay: number;
@@ -1 +1 @@
1
- {"version":3,"file":"heatmap-tracking.d.ts","sourceRoot":"","sources":["../../../src/types/heatmap-tracking.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC9C,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,cAAc,EAAE,iBAAiB,EAAE,CAAC;CACrC"}
1
+ {"version":3,"file":"heatmap-tracking.d.ts","sourceRoot":"","sources":["../../../src/types/heatmap-tracking.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,sBAAsB;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC9C,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,cAAc,EAAE,iBAAiB,EAAE,CAAC;CACrC"}
@@ -11,6 +11,8 @@ export interface HeatmapTracker {
11
11
  trackSystemEvent(eventName: string, properties?: Record<string, unknown>, options?: SendEventOptions): void | Promise<void>;
12
12
  hasConsent(category: 'analytics' | 'marketing' | 'functional'): boolean;
13
13
  getActivityDetector(): ActivityDetector;
14
+ getConfigAsync(key: string): Promise<string | undefined>;
15
+ getEffectiveUserId(): string;
14
16
  log(...args: unknown[]): void;
15
17
  }
16
18
  export declare class HeatmapTrackingManager {
@@ -28,11 +30,50 @@ export declare class HeatmapTrackingManager {
28
30
  private lastScrollTime;
29
31
  private readonly SPLIT_DURATION;
30
32
  private attentionQuality;
33
+ private snapshotCaptured;
34
+ private snapshotEnabled;
35
+ private deviceType;
31
36
  constructor(tracker: HeatmapTracker, options?: Partial<HeatmapTrackingOptions>);
32
37
  /**
33
38
  * Initialize heatmap tracking
34
39
  */
35
40
  private initialize;
41
+ /**
42
+ * Check remote config for snapshot capture enablement
43
+ */
44
+ /**
45
+ * Detect device type based on viewport width and user agent
46
+ * Mobile: width < 768px OR mobile user agent
47
+ * Desktop: width >= 768px AND non-mobile user agent
48
+ */
49
+ private detectDeviceType;
50
+ /**
51
+ * Normalize URL by removing query params and hash, and stripping www prefix
52
+ * This ensures heatmap data is aggregated by page, not by URL variations
53
+ * Subdomains (other than www) are preserved: api.example.com != app.example.com
54
+ */
55
+ private normalizeUrl;
56
+ private checkSnapshotConfig;
57
+ /**
58
+ * Capture DOM snapshot using rrweb-snapshot
59
+ */
60
+ private captureSnapshot;
61
+ /**
62
+ * Upload snapshot to backend
63
+ */
64
+ private uploadSnapshot;
65
+ /**
66
+ * Get API URL from tracker configuration
67
+ */
68
+ private getApiUrl;
69
+ /**
70
+ * Get tenant ID from tracker configuration
71
+ */
72
+ private getTenantId;
73
+ /**
74
+ * Get auth headers from tracker
75
+ */
76
+ private getAuthHeaders;
36
77
  /**
37
78
  * Setup click event tracking
38
79
  */
@@ -65,6 +106,10 @@ export declare class HeatmapTrackingManager {
65
106
  * Update current scroll state
66
107
  */
67
108
  private updateScrollState;
109
+ /**
110
+ * Generate CSS selector for an element (for element-relative positioning)
111
+ */
112
+ private generateCSSSelector;
68
113
  /**
69
114
  * Generate XPath for an element
70
115
  */
@@ -1 +1 @@
1
- {"version":3,"file":"heatmap-tracking.d.ts","sourceRoot":"","sources":["../../src/heatmap-tracking.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAGV,sBAAsB,EAEvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5H,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;IACxE,mBAAmB,IAAI,gBAAgB,CAAC;IACxC,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC/B;AASD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,cAAc,CAA2B;IAGjD,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,mBAAmB,CAAuB;IAGlD,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IAGvC,OAAO,CAAC,gBAAgB,CAA0B;gBAGhD,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,OAAO,CAAC,sBAAsB,CAAM;IA0B/C;;OAEG;IACH,OAAO,CAAC,UAAU;IAkBlB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAyEnC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAyDnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsDzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiCrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiD1B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA0CpC;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,IAAI,IAAI;CA8BhB"}
1
+ {"version":3,"file":"heatmap-tracking.d.ts","sourceRoot":"","sources":["../../src/heatmap-tracking.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAGV,sBAAsB,EAEvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5H,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;IACxE,mBAAmB,IAAI,gBAAgB,CAAC;IACxC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACzD,kBAAkB,IAAI,MAAM,CAAC;IAC7B,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC/B;AASD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,cAAc,CAA2B;IAGjD,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,mBAAmB,CAAuB;IAGlD,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IAGvC,OAAO,CAAC,gBAAgB,CAA0B;IAGlD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,eAAe,CAAS;IAGhC,OAAO,CAAC,UAAU,CAAmC;gBAGnD,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,OAAO,CAAC,sBAAsB,CAAM;IA6B/C;;OAEG;YACW,UAAU;IA0BxB;;OAEG;IACH;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IA6BxB;;;;OAIG;IACH,OAAO,CAAC,YAAY;YAkBN,mBAAmB;IAWjC;;OAEG;YACW,eAAe;IA6B7B;;OAEG;YACW,cAAc;IA0D5B;;OAEG;YACW,SAAS;IAQvB;;OAEG;YACW,WAAW;IAQzB;;OAEG;YACW,cAAc;IAW5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IA2EnC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmC1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAiFnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuDzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkD3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAiCrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsD1B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA+CpC;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,IAAI,IAAI;CA8BhB"}
@@ -26,8 +26,15 @@ export class HeatmapTrackingManager {
26
26
  this.lastScrollPosition = 0;
27
27
  this.lastScrollTime = Date.now();
28
28
  this.SPLIT_DURATION = 3000; // 3 seconds - same as section tracking
29
+ // Snapshot capture state
30
+ this.snapshotCaptured = false;
31
+ this.snapshotEnabled = false;
32
+ // Device type detection
33
+ this.deviceType = 'desktop';
29
34
  this.tracker = tracker;
30
35
  this.options = { ...DEFAULT_OPTIONS, ...options };
36
+ // Detect device type on initialization
37
+ this.deviceType = this.detectDeviceType();
31
38
  // Initialize attention quality manager
32
39
  this.attentionQuality = new AttentionQualityManager(tracker.getActivityDetector(), {
33
40
  maxSectionDuration: 9000, // 9 seconds per viewport section
@@ -48,10 +55,12 @@ export class HeatmapTrackingManager {
48
55
  /**
49
56
  * Initialize heatmap tracking
50
57
  */
51
- initialize() {
58
+ async initialize() {
52
59
  if (this.isDestroyed)
53
60
  return;
54
61
  this.log('Initializing heatmap tracking');
62
+ // Check remote config for snapshot capture
63
+ await this.checkSnapshotConfig();
55
64
  // Setup click tracking
56
65
  this.setupClickTracking();
57
66
  // Setup scroll tracking
@@ -60,6 +69,187 @@ export class HeatmapTrackingManager {
60
69
  this.startScrollTracking();
61
70
  // Setup page unload handler for beaconing
62
71
  this.setupUnloadHandler();
72
+ // Initialize snapshot capture if enabled
73
+ if (this.snapshotEnabled && !this.snapshotCaptured) {
74
+ this.captureSnapshot();
75
+ }
76
+ }
77
+ /**
78
+ * Check remote config for snapshot capture enablement
79
+ */
80
+ /**
81
+ * Detect device type based on viewport width and user agent
82
+ * Mobile: width < 768px OR mobile user agent
83
+ * Desktop: width >= 768px AND non-mobile user agent
84
+ */
85
+ detectDeviceType() {
86
+ if (typeof window === 'undefined' || typeof navigator === 'undefined') {
87
+ return 'desktop'; // SSR default
88
+ }
89
+ // Check viewport width
90
+ const width = window.innerWidth || window.screen?.width || 0;
91
+ const isMobileWidth = width < 768;
92
+ // Check user agent for mobile indicators
93
+ const userAgent = navigator.userAgent.toLowerCase();
94
+ const mobileKeywords = [
95
+ 'mobile',
96
+ 'android',
97
+ 'iphone',
98
+ 'ipad',
99
+ 'ipod',
100
+ 'blackberry',
101
+ 'windows phone',
102
+ 'webos',
103
+ ];
104
+ const isMobileUserAgent = mobileKeywords.some((keyword) => userAgent.includes(keyword));
105
+ // Device is mobile if either width OR user agent indicates mobile
106
+ return isMobileWidth || isMobileUserAgent ? 'mobile' : 'desktop';
107
+ }
108
+ /**
109
+ * Normalize URL by removing query params and hash, and stripping www prefix
110
+ * This ensures heatmap data is aggregated by page, not by URL variations
111
+ * Subdomains (other than www) are preserved: api.example.com != app.example.com
112
+ */
113
+ normalizeUrl(url) {
114
+ try {
115
+ const urlObj = new URL(url);
116
+ let hostname = urlObj.hostname.toLowerCase();
117
+ // Strip www prefix but keep other subdomains
118
+ if (hostname.startsWith('www.')) {
119
+ hostname = hostname.substring(4);
120
+ }
121
+ // Return protocol + normalized hostname + pathname only
122
+ return `${urlObj.protocol}//${hostname}${urlObj.pathname}`;
123
+ }
124
+ catch {
125
+ // If URL parsing fails, return as-is
126
+ return url;
127
+ }
128
+ }
129
+ async checkSnapshotConfig() {
130
+ try {
131
+ const enableSnapshot = await this.tracker.getConfigAsync('enableHeatmapSnapshot');
132
+ this.snapshotEnabled = enableSnapshot === 'true';
133
+ this.log('Heatmap snapshot capture enabled:', this.snapshotEnabled);
134
+ }
135
+ catch (error) {
136
+ this.log('Failed to check snapshot config, defaulting to disabled:', error);
137
+ this.snapshotEnabled = false;
138
+ }
139
+ }
140
+ /**
141
+ * Capture DOM snapshot using rrweb-snapshot
142
+ */
143
+ async captureSnapshot() {
144
+ if (this.snapshotCaptured || !this.snapshotEnabled)
145
+ return;
146
+ try {
147
+ this.log('Capturing DOM snapshot...');
148
+ // Dynamically import rrweb-snapshot (only if enabled)
149
+ // @ts-ignore - rrweb-snapshot is an optional dependency, may not be resolvable during React build
150
+ const rrwebSnapshot = await import('rrweb-snapshot');
151
+ // Capture full DOM snapshot with PII masking
152
+ const snapshot = rrwebSnapshot.snapshot(document, {
153
+ maskAllInputs: true,
154
+ maskTextFn: (text) => {
155
+ // Basic PII masking - mask anything that looks like email or sensitive data
156
+ return text.replace(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, '*****');
157
+ },
158
+ });
159
+ this.snapshotCaptured = true;
160
+ this.log('DOM snapshot captured successfully');
161
+ // Upload snapshot to backend
162
+ await this.uploadSnapshot(snapshot);
163
+ }
164
+ catch (error) {
165
+ this.log('Failed to capture DOM snapshot:', error);
166
+ }
167
+ }
168
+ /**
169
+ * Upload snapshot to backend
170
+ */
171
+ async uploadSnapshot(snapshot) {
172
+ try {
173
+ const sessionId = this.tracker.getEffectiveUserId();
174
+ const pageUrl = this.normalizeUrl(window.location.href);
175
+ this.log('Uploading snapshot to backend - sessionId:', sessionId);
176
+ // Note: The actual API call would need the tenantId from the tracker
177
+ // For now, we'll log that the snapshot is ready to be uploaded
178
+ // The tracker would need to expose tenantId for this to work
179
+ const snapshotData = {
180
+ sessionId,
181
+ pageUrl,
182
+ snapshot
183
+ };
184
+ this.log('Snapshot data prepared:', { sessionId, pageUrl, snapshotSize: JSON.stringify(snapshot).length });
185
+ // Get API configuration from tracker
186
+ const apiUrl = await this.getApiUrl();
187
+ const tenantId = await this.getTenantId();
188
+ const headers = await this.getAuthHeaders();
189
+ if (!apiUrl || !tenantId) {
190
+ this.log('Cannot upload snapshot: missing API URL or tenant ID');
191
+ return;
192
+ }
193
+ // Upload to backend
194
+ const response = await fetch(`${apiUrl}/v1/events/${encodeURIComponent(tenantId)}/snapshot`, {
195
+ method: 'POST',
196
+ headers: {
197
+ 'Content-Type': 'application/json',
198
+ ...headers
199
+ },
200
+ body: JSON.stringify({
201
+ sessionId,
202
+ pageUrl,
203
+ snapshot: JSON.stringify(snapshot),
204
+ timestamp: Date.now(),
205
+ deviceType: this.deviceType
206
+ })
207
+ });
208
+ if (!response.ok) {
209
+ throw new Error(`Snapshot upload failed: ${response.status}`);
210
+ }
211
+ const result = await response.json();
212
+ this.log('Snapshot uploaded successfully:', result);
213
+ }
214
+ catch (error) {
215
+ this.log('Failed to upload snapshot:', error);
216
+ }
217
+ }
218
+ /**
219
+ * Get API URL from tracker configuration
220
+ */
221
+ async getApiUrl() {
222
+ try {
223
+ return this.tracker.config?.apiUrl || 'https://api.grainql.com';
224
+ }
225
+ catch {
226
+ return 'https://api.grainql.com';
227
+ }
228
+ }
229
+ /**
230
+ * Get tenant ID from tracker configuration
231
+ */
232
+ async getTenantId() {
233
+ try {
234
+ return this.tracker.config?.tenantId;
235
+ }
236
+ catch {
237
+ return undefined;
238
+ }
239
+ }
240
+ /**
241
+ * Get auth headers from tracker
242
+ */
243
+ async getAuthHeaders() {
244
+ try {
245
+ if (typeof this.tracker.getAuthHeaders === 'function') {
246
+ return await this.tracker.getAuthHeaders();
247
+ }
248
+ return {};
249
+ }
250
+ catch {
251
+ return {};
252
+ }
63
253
  }
64
254
  /**
65
255
  * Setup click event tracking
@@ -148,7 +338,7 @@ export class HeatmapTrackingManager {
148
338
  return;
149
339
  }
150
340
  const scrollData = {
151
- pageUrl: window.location.href,
341
+ pageUrl: this.normalizeUrl(window.location.href),
152
342
  viewportSection: this.currentScrollState.viewportSection,
153
343
  scrollDepthPx: scrollY,
154
344
  durationMs: duration,
@@ -156,6 +346,7 @@ export class HeatmapTrackingManager {
156
346
  exitTimestamp: currentTime,
157
347
  pageHeight,
158
348
  viewportHeight,
349
+ deviceType: this.deviceType,
159
350
  };
160
351
  // Send immediately using beacon to ensure delivery
161
352
  this.tracker.trackSystemEvent('_grain_heatmap_scroll', {
@@ -167,6 +358,7 @@ export class HeatmapTrackingManager {
167
358
  exit_timestamp: scrollData.exitTimestamp,
168
359
  page_height: scrollData.pageHeight,
169
360
  viewport_height: scrollData.viewportHeight,
361
+ device_type: scrollData.deviceType,
170
362
  is_split: true, // Flag to indicate periodic tracking, not final exit
171
363
  }, { flush: true });
172
364
  // Update attention quality duration tracker
@@ -189,7 +381,7 @@ export class HeatmapTrackingManager {
189
381
  const duration = currentTime - this.currentScrollState.entryTime;
190
382
  if (duration > 100) {
191
383
  const scrollData = {
192
- pageUrl: window.location.href,
384
+ pageUrl: this.normalizeUrl(window.location.href),
193
385
  viewportSection: this.currentScrollState.viewportSection,
194
386
  scrollDepthPx: this.currentScrollState.scrollDepthPx,
195
387
  durationMs: duration,
@@ -197,6 +389,7 @@ export class HeatmapTrackingManager {
197
389
  exitTimestamp: currentTime,
198
390
  pageHeight: document.documentElement.scrollHeight,
199
391
  viewportHeight: window.innerHeight,
392
+ deviceType: this.deviceType,
200
393
  };
201
394
  this.pendingScrolls.push(scrollData);
202
395
  }
@@ -217,8 +410,23 @@ export class HeatmapTrackingManager {
217
410
  const element = event.target;
218
411
  if (!element)
219
412
  return;
220
- const pageUrl = window.location.href;
413
+ const pageUrl = this.normalizeUrl(window.location.href);
221
414
  const xpath = this.generateXPath(element);
415
+ // Generate CSS selector for element-relative positioning
416
+ const selector = this.generateCSSSelector(element);
417
+ // Calculate element-relative coordinates
418
+ let relX;
419
+ let relY;
420
+ try {
421
+ const rect = element.getBoundingClientRect();
422
+ if (rect.width > 0 && rect.height > 0) {
423
+ relX = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));
424
+ relY = Math.max(0, Math.min(1, (event.clientY - rect.top) / rect.height));
425
+ }
426
+ }
427
+ catch (error) {
428
+ this.log('Failed to calculate relative coordinates:', error);
429
+ }
222
430
  // Get viewport coordinates
223
431
  const viewportX = Math.round(event.clientX);
224
432
  const viewportY = Math.round(event.clientY);
@@ -230,6 +438,9 @@ export class HeatmapTrackingManager {
230
438
  const clickData = {
231
439
  pageUrl,
232
440
  xpath,
441
+ selector,
442
+ relX,
443
+ relY,
233
444
  viewportX,
234
445
  viewportY,
235
446
  pageX,
@@ -237,6 +448,7 @@ export class HeatmapTrackingManager {
237
448
  elementTag,
238
449
  elementText: elementText || undefined,
239
450
  timestamp: Date.now(),
451
+ deviceType: this.deviceType,
240
452
  };
241
453
  // Check if this is a navigation link
242
454
  const isNavigationLink = element instanceof HTMLAnchorElement && element.href;
@@ -245,6 +457,9 @@ export class HeatmapTrackingManager {
245
457
  this.tracker.trackSystemEvent('_grain_heatmap_click', {
246
458
  page_url: clickData.pageUrl,
247
459
  xpath: clickData.xpath,
460
+ selector: clickData.selector,
461
+ rel_x: clickData.relX,
462
+ rel_y: clickData.relY,
248
463
  viewport_x: clickData.viewportX,
249
464
  viewport_y: clickData.viewportY,
250
465
  page_x: clickData.pageX,
@@ -252,6 +467,7 @@ export class HeatmapTrackingManager {
252
467
  element_tag: clickData.elementTag,
253
468
  element_text: clickData.elementText,
254
469
  timestamp: clickData.timestamp,
470
+ device_type: clickData.deviceType,
255
471
  }, { flush: true });
256
472
  }
257
473
  else {
@@ -288,7 +504,7 @@ export class HeatmapTrackingManager {
288
504
  // Only record if duration is meaningful (> 100ms)
289
505
  if (duration > 100) {
290
506
  const scrollData = {
291
- pageUrl: window.location.href,
507
+ pageUrl: this.normalizeUrl(window.location.href),
292
508
  viewportSection: this.currentScrollState.viewportSection,
293
509
  scrollDepthPx: this.currentScrollState.scrollDepthPx,
294
510
  durationMs: duration,
@@ -296,6 +512,7 @@ export class HeatmapTrackingManager {
296
512
  exitTimestamp: currentTime,
297
513
  pageHeight,
298
514
  viewportHeight,
515
+ deviceType: this.deviceType,
299
516
  };
300
517
  this.pendingScrolls.push(scrollData);
301
518
  }
@@ -316,6 +533,50 @@ export class HeatmapTrackingManager {
316
533
  // Check if we should flush
317
534
  this.considerBatchFlush();
318
535
  }
536
+ /**
537
+ * Generate CSS selector for an element (for element-relative positioning)
538
+ */
539
+ generateCSSSelector(element) {
540
+ if (!element)
541
+ return '';
542
+ // Prefer ID if available
543
+ if (element.id) {
544
+ return `#${element.id}`;
545
+ }
546
+ // Try data attributes
547
+ const dataAttrs = Array.from(element.attributes).filter(attr => attr.name.startsWith('data-'));
548
+ if (dataAttrs.length > 0) {
549
+ const attr = dataAttrs[0];
550
+ return `${element.tagName.toLowerCase()}[${attr.name}="${attr.value}"]`;
551
+ }
552
+ // Try class names (pick first meaningful class)
553
+ if (element.className && typeof element.className === 'string') {
554
+ const classes = element.className.split(' ').filter(c => c && !c.match(/^(active|hover|focus)/));
555
+ if (classes.length > 0) {
556
+ return `${element.tagName.toLowerCase()}.${classes[0]}`;
557
+ }
558
+ }
559
+ // Fall back to nth-child path
560
+ const path = [];
561
+ let current = element;
562
+ while (current && current !== document.body) {
563
+ let selector = current.tagName.toLowerCase();
564
+ if (current.parentElement) {
565
+ const siblings = Array.from(current.parentElement.children);
566
+ const sameTagSiblings = siblings.filter(s => s.tagName === current.tagName);
567
+ if (sameTagSiblings.length > 1) {
568
+ const index = sameTagSiblings.indexOf(current) + 1;
569
+ selector += `:nth-child(${index})`;
570
+ }
571
+ }
572
+ path.unshift(selector);
573
+ current = current.parentElement;
574
+ // Limit path depth to avoid overly long selectors
575
+ if (path.length >= 5)
576
+ break;
577
+ }
578
+ return path.join(' > ');
579
+ }
319
580
  /**
320
581
  * Generate XPath for an element
321
582
  */
@@ -377,6 +638,9 @@ export class HeatmapTrackingManager {
377
638
  this.tracker.trackSystemEvent('_grain_heatmap_click', {
378
639
  page_url: clickData.pageUrl,
379
640
  xpath: clickData.xpath,
641
+ selector: clickData.selector,
642
+ rel_x: clickData.relX,
643
+ rel_y: clickData.relY,
380
644
  viewport_x: clickData.viewportX,
381
645
  viewport_y: clickData.viewportY,
382
646
  page_x: clickData.pageX,
@@ -384,6 +648,7 @@ export class HeatmapTrackingManager {
384
648
  element_tag: clickData.elementTag,
385
649
  element_text: clickData.elementText,
386
650
  timestamp: clickData.timestamp,
651
+ device_type: clickData.deviceType,
387
652
  });
388
653
  }
389
654
  this.pendingClicks = [];
@@ -400,6 +665,7 @@ export class HeatmapTrackingManager {
400
665
  exit_timestamp: scrollData.exitTimestamp,
401
666
  page_height: scrollData.pageHeight,
402
667
  viewport_height: scrollData.viewportHeight,
668
+ device_type: scrollData.deviceType,
403
669
  });
404
670
  }
405
671
  this.pendingScrolls = [];
@@ -422,6 +688,9 @@ export class HeatmapTrackingManager {
422
688
  this.tracker.trackSystemEvent('_grain_heatmap_click', {
423
689
  page_url: clickData.pageUrl,
424
690
  xpath: clickData.xpath,
691
+ selector: clickData.selector,
692
+ rel_x: clickData.relX,
693
+ rel_y: clickData.relY,
425
694
  viewport_x: clickData.viewportX,
426
695
  viewport_y: clickData.viewportY,
427
696
  page_x: clickData.pageX,
@@ -429,6 +698,7 @@ export class HeatmapTrackingManager {
429
698
  element_tag: clickData.elementTag,
430
699
  element_text: clickData.elementText,
431
700
  timestamp: clickData.timestamp,
701
+ device_type: clickData.deviceType,
432
702
  }, { flush: true });
433
703
  }
434
704
  this.pendingClicks = [];
@@ -445,6 +715,7 @@ export class HeatmapTrackingManager {
445
715
  exit_timestamp: scrollData.exitTimestamp,
446
716
  page_height: scrollData.pageHeight,
447
717
  viewport_height: scrollData.viewportHeight,
718
+ device_type: scrollData.deviceType,
448
719
  }, { flush: true });
449
720
  }
450
721
  this.pendingScrolls = [];