@grainql/analytics-web 2.5.4 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/activity.js +1 -1
- package/dist/attention-quality.d.ts +128 -0
- package/dist/attention-quality.d.ts.map +1 -0
- package/dist/attention-quality.js +246 -0
- package/dist/cjs/activity.js +1 -1
- package/dist/cjs/activity.js.map +1 -1
- package/dist/cjs/attention-quality.d.ts +128 -0
- package/dist/cjs/attention-quality.d.ts.map +1 -0
- package/dist/cjs/attention-quality.js +246 -0
- package/dist/cjs/attention-quality.js.map +1 -0
- package/dist/cjs/consent.js +4 -4
- package/dist/cjs/consent.js.map +1 -1
- package/dist/cjs/heartbeat.d.ts.map +1 -1
- package/dist/cjs/heartbeat.js +0 -6
- package/dist/cjs/heartbeat.js.map +1 -1
- package/dist/cjs/heatmap-tracking.d.ts +93 -0
- package/dist/cjs/heatmap-tracking.d.ts.map +1 -0
- package/dist/cjs/heatmap-tracking.js +499 -0
- package/dist/cjs/heatmap-tracking.js.map +1 -0
- package/dist/cjs/index.d.ts +11 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interaction-tracking.d.ts.map +1 -1
- package/dist/cjs/interaction-tracking.js +9 -18
- package/dist/cjs/interaction-tracking.js.map +1 -1
- package/dist/cjs/page-tracking.d.ts.map +1 -1
- package/dist/cjs/page-tracking.js +0 -9
- package/dist/cjs/page-tracking.js.map +1 -1
- package/dist/cjs/section-tracking.d.ts +3 -0
- package/dist/cjs/section-tracking.d.ts.map +1 -1
- package/dist/cjs/section-tracking.js +30 -7
- package/dist/cjs/section-tracking.js.map +1 -1
- package/dist/cjs/types/auto-tracking.d.ts +3 -0
- package/dist/cjs/types/auto-tracking.d.ts.map +1 -1
- package/dist/cjs/types/heatmap-tracking.d.ts +44 -0
- package/dist/cjs/types/heatmap-tracking.d.ts.map +1 -0
- package/dist/cjs/types/heatmap-tracking.js +6 -0
- package/dist/cjs/types/heatmap-tracking.js.map +1 -0
- package/dist/consent.js +4 -4
- package/dist/esm/activity.js +1 -1
- package/dist/esm/activity.js.map +1 -1
- package/dist/esm/attention-quality.d.ts +128 -0
- package/dist/esm/attention-quality.d.ts.map +1 -0
- package/dist/esm/attention-quality.js +242 -0
- package/dist/esm/attention-quality.js.map +1 -0
- package/dist/esm/consent.js +4 -4
- package/dist/esm/consent.js.map +1 -1
- package/dist/esm/heartbeat.d.ts.map +1 -1
- package/dist/esm/heartbeat.js +0 -6
- package/dist/esm/heartbeat.js.map +1 -1
- package/dist/esm/heatmap-tracking.d.ts +93 -0
- package/dist/esm/heatmap-tracking.d.ts.map +1 -0
- package/dist/esm/heatmap-tracking.js +495 -0
- package/dist/esm/heatmap-tracking.js.map +1 -0
- package/dist/esm/index.d.ts +11 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interaction-tracking.d.ts.map +1 -1
- package/dist/esm/interaction-tracking.js +9 -18
- package/dist/esm/interaction-tracking.js.map +1 -1
- package/dist/esm/page-tracking.d.ts.map +1 -1
- package/dist/esm/page-tracking.js +0 -9
- package/dist/esm/page-tracking.js.map +1 -1
- package/dist/esm/section-tracking.d.ts +3 -0
- package/dist/esm/section-tracking.d.ts.map +1 -1
- package/dist/esm/section-tracking.js +30 -7
- package/dist/esm/section-tracking.js.map +1 -1
- package/dist/esm/types/auto-tracking.d.ts +3 -0
- package/dist/esm/types/auto-tracking.d.ts.map +1 -1
- package/dist/esm/types/heatmap-tracking.d.ts +44 -0
- package/dist/esm/types/heatmap-tracking.d.ts.map +1 -0
- package/dist/esm/types/heatmap-tracking.js +5 -0
- package/dist/esm/types/heatmap-tracking.js.map +1 -0
- package/dist/heartbeat.d.ts.map +1 -1
- package/dist/heartbeat.js +0 -6
- package/dist/heatmap-tracking.d.ts +93 -0
- package/dist/heatmap-tracking.d.ts.map +1 -0
- package/dist/heatmap-tracking.js +499 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.global.dev.js +801 -80
- package/dist/index.global.dev.js.map +4 -4
- package/dist/index.global.js +2 -2
- package/dist/index.global.js.map +4 -4
- package/dist/index.js +70 -38
- package/dist/index.mjs +70 -38
- package/dist/interaction-tracking.d.ts.map +1 -1
- package/dist/interaction-tracking.js +9 -18
- package/dist/page-tracking.d.ts.map +1 -1
- package/dist/page-tracking.js +0 -9
- package/dist/section-tracking.d.ts +3 -0
- package/dist/section-tracking.d.ts.map +1 -1
- package/dist/section-tracking.js +30 -7
- package/dist/types/auto-tracking.d.ts +3 -0
- package/dist/types/auto-tracking.d.ts.map +1 -1
- package/dist/types/heatmap-tracking.d.ts +44 -0
- package/dist/types/heatmap-tracking.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Attention Quality Manager for Grain Analytics
|
|
4
|
+
* Enforces policies to ensure tracked data represents genuine user attention
|
|
5
|
+
*
|
|
6
|
+
* Policies:
|
|
7
|
+
* 1. Page Visibility: Stop tracking when tab is hidden/backgrounded
|
|
8
|
+
* 2. User Activity: Stop tracking when user is idle (no mouse/keyboard/touch)
|
|
9
|
+
* 3. Section Duration Cap: Max attention per section before requiring transition
|
|
10
|
+
* 4. Scroll Distance: Minimum scroll distance to count as meaningful engagement
|
|
11
|
+
*
|
|
12
|
+
* See: ATTENTION_QUALITY_POLICY.md for detailed policy documentation
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.AttentionQualityManager = void 0;
|
|
16
|
+
const DEFAULT_OPTIONS = {
|
|
17
|
+
maxSectionDuration: 9000, // 9 seconds
|
|
18
|
+
minScrollDistance: 100, // 100 pixels
|
|
19
|
+
idleThreshold: 30000, // 30 seconds
|
|
20
|
+
};
|
|
21
|
+
class AttentionQualityManager {
|
|
22
|
+
constructor(activityDetector, options = {}) {
|
|
23
|
+
this.isDestroyed = false;
|
|
24
|
+
// Page visibility tracking
|
|
25
|
+
this.isPageVisible = true;
|
|
26
|
+
this.visibilityChangeHandler = null;
|
|
27
|
+
// Section attention state
|
|
28
|
+
this.sectionStates = new Map();
|
|
29
|
+
// Policies applied reasons (for debugging/traceability)
|
|
30
|
+
this.lastFilterReason = null;
|
|
31
|
+
this.activityDetector = activityDetector;
|
|
32
|
+
this.options = {
|
|
33
|
+
...DEFAULT_OPTIONS,
|
|
34
|
+
...options,
|
|
35
|
+
debug: options.debug ?? false,
|
|
36
|
+
};
|
|
37
|
+
this.setupPageVisibilityTracking();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Setup page visibility tracking
|
|
41
|
+
*/
|
|
42
|
+
setupPageVisibilityTracking() {
|
|
43
|
+
if (typeof document === 'undefined')
|
|
44
|
+
return;
|
|
45
|
+
this.isPageVisible = document.visibilityState === 'visible';
|
|
46
|
+
this.visibilityChangeHandler = () => {
|
|
47
|
+
const wasVisible = this.isPageVisible;
|
|
48
|
+
this.isPageVisible = document.visibilityState === 'visible';
|
|
49
|
+
if (!this.isPageVisible && wasVisible) {
|
|
50
|
+
this.log('Page hidden - tracking paused');
|
|
51
|
+
}
|
|
52
|
+
else if (this.isPageVisible && !wasVisible) {
|
|
53
|
+
this.log('Page visible - tracking resumed');
|
|
54
|
+
// Reset all section states when page becomes visible again
|
|
55
|
+
this.resetAllSections();
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
document.addEventListener('visibilitychange', this.visibilityChangeHandler);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if tracking should be allowed (global check)
|
|
62
|
+
* Returns true if tracking is allowed, false if it should be paused
|
|
63
|
+
*/
|
|
64
|
+
shouldTrack() {
|
|
65
|
+
// Policy 1: Page Visibility
|
|
66
|
+
if (!this.isPageVisible) {
|
|
67
|
+
this.lastFilterReason = 'page_hidden';
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
// Policy 2: User Activity
|
|
71
|
+
if (!this.activityDetector.isActive(this.options.idleThreshold)) {
|
|
72
|
+
this.lastFilterReason = 'user_idle';
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
this.lastFilterReason = null;
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if section view tracking should be allowed for a specific section
|
|
80
|
+
* @param sectionName - Section identifier
|
|
81
|
+
* @param currentScrollY - Current scroll position
|
|
82
|
+
* @returns Object with shouldTrack boolean and optional reason
|
|
83
|
+
*/
|
|
84
|
+
shouldTrackSection(sectionName, currentScrollY) {
|
|
85
|
+
// First check global tracking state
|
|
86
|
+
if (!this.shouldTrack()) {
|
|
87
|
+
return {
|
|
88
|
+
shouldTrack: false,
|
|
89
|
+
reason: this.lastFilterReason || 'global_policy',
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// Get or create section state
|
|
93
|
+
let state = this.sectionStates.get(sectionName);
|
|
94
|
+
if (!state) {
|
|
95
|
+
state = {
|
|
96
|
+
sectionName,
|
|
97
|
+
currentDuration: 0,
|
|
98
|
+
lastScrollPosition: currentScrollY,
|
|
99
|
+
lastResetTime: Date.now(),
|
|
100
|
+
};
|
|
101
|
+
this.sectionStates.set(sectionName, state);
|
|
102
|
+
}
|
|
103
|
+
// Policy 4: Scroll Distance - Check if user has scrolled enough to reset attention
|
|
104
|
+
const scrollDistance = Math.abs(currentScrollY - state.lastScrollPosition);
|
|
105
|
+
const hasScrolledEnough = scrollDistance >= this.options.minScrollDistance;
|
|
106
|
+
if (hasScrolledEnough) {
|
|
107
|
+
// Reset attention timer due to meaningful scroll
|
|
108
|
+
this.log(`Section "${sectionName}": Attention reset due to ${Math.round(scrollDistance)}px scroll`);
|
|
109
|
+
state.currentDuration = 0;
|
|
110
|
+
state.lastScrollPosition = currentScrollY;
|
|
111
|
+
state.lastResetTime = Date.now();
|
|
112
|
+
return {
|
|
113
|
+
shouldTrack: true,
|
|
114
|
+
resetAttention: true,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
// Policy 3: Section Duration Cap
|
|
118
|
+
if (state.currentDuration >= this.options.maxSectionDuration) {
|
|
119
|
+
return {
|
|
120
|
+
shouldTrack: false,
|
|
121
|
+
reason: 'max_duration_reached',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
shouldTrack: true,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Update section duration (call this when tracking a section view event)
|
|
130
|
+
* @param sectionName - Section identifier
|
|
131
|
+
* @param durationMs - Duration to add to current attention block
|
|
132
|
+
*/
|
|
133
|
+
updateSectionDuration(sectionName, durationMs) {
|
|
134
|
+
const state = this.sectionStates.get(sectionName);
|
|
135
|
+
if (state) {
|
|
136
|
+
state.currentDuration += durationMs;
|
|
137
|
+
if (state.currentDuration >= this.options.maxSectionDuration) {
|
|
138
|
+
this.log(`Section "${sectionName}": Max duration cap reached (${state.currentDuration}ms)`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Reset attention for a specific section (call when user navigates to different section)
|
|
144
|
+
* @param sectionName - Section identifier
|
|
145
|
+
*/
|
|
146
|
+
resetSection(sectionName) {
|
|
147
|
+
const state = this.sectionStates.get(sectionName);
|
|
148
|
+
if (state) {
|
|
149
|
+
this.log(`Section "${sectionName}": Attention reset (section exit)`);
|
|
150
|
+
state.currentDuration = 0;
|
|
151
|
+
state.lastResetTime = Date.now();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Reset all section attention states
|
|
156
|
+
*/
|
|
157
|
+
resetAllSections() {
|
|
158
|
+
this.log('Resetting all section attention states');
|
|
159
|
+
for (const state of this.sectionStates.values()) {
|
|
160
|
+
state.currentDuration = 0;
|
|
161
|
+
state.lastResetTime = Date.now();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get current attention state for a section (for debugging/monitoring)
|
|
166
|
+
*/
|
|
167
|
+
getSectionState(sectionName) {
|
|
168
|
+
return this.sectionStates.get(sectionName);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get reason why last tracking attempt was filtered
|
|
172
|
+
*/
|
|
173
|
+
getLastFilterReason() {
|
|
174
|
+
return this.lastFilterReason;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Check if scroll tracking should be allowed
|
|
178
|
+
* Similar to shouldTrack() but also checks scroll-specific conditions
|
|
179
|
+
*/
|
|
180
|
+
shouldTrackScroll(previousScrollY, currentScrollY) {
|
|
181
|
+
// First check global tracking state
|
|
182
|
+
if (!this.shouldTrack()) {
|
|
183
|
+
return {
|
|
184
|
+
shouldTrack: false,
|
|
185
|
+
reason: this.lastFilterReason || 'global_policy',
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
// Check if scroll is meaningful
|
|
189
|
+
const scrollDistance = Math.abs(currentScrollY - previousScrollY);
|
|
190
|
+
if (scrollDistance < 10) { // Minimum 10px to count as scroll
|
|
191
|
+
return {
|
|
192
|
+
shouldTrack: false,
|
|
193
|
+
reason: 'scroll_too_small',
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
shouldTrack: true,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get all active policies as object (for monitoring/debugging)
|
|
202
|
+
*/
|
|
203
|
+
getPolicies() {
|
|
204
|
+
return {
|
|
205
|
+
maxSectionDuration: this.options.maxSectionDuration,
|
|
206
|
+
minScrollDistance: this.options.minScrollDistance,
|
|
207
|
+
idleThreshold: this.options.idleThreshold,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Get current tracking state (for monitoring/debugging)
|
|
212
|
+
*/
|
|
213
|
+
getTrackingState() {
|
|
214
|
+
return {
|
|
215
|
+
isPageVisible: this.isPageVisible,
|
|
216
|
+
isUserActive: this.activityDetector.isActive(this.options.idleThreshold),
|
|
217
|
+
timeSinceLastActivity: this.activityDetector.getTimeSinceLastActivity(),
|
|
218
|
+
activeSections: this.sectionStates.size,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Log debug messages
|
|
223
|
+
*/
|
|
224
|
+
log(...args) {
|
|
225
|
+
if (this.options.debug) {
|
|
226
|
+
console.log('[AttentionQuality]', ...args);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Destroy and cleanup
|
|
231
|
+
*/
|
|
232
|
+
destroy() {
|
|
233
|
+
if (this.isDestroyed)
|
|
234
|
+
return;
|
|
235
|
+
this.isDestroyed = true;
|
|
236
|
+
// Remove visibility change listener
|
|
237
|
+
if (this.visibilityChangeHandler && typeof document !== 'undefined') {
|
|
238
|
+
document.removeEventListener('visibilitychange', this.visibilityChangeHandler);
|
|
239
|
+
this.visibilityChangeHandler = null;
|
|
240
|
+
}
|
|
241
|
+
// Clear section states
|
|
242
|
+
this.sectionStates.clear();
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
exports.AttentionQualityManager = AttentionQualityManager;
|
|
246
|
+
//# sourceMappingURL=attention-quality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attention-quality.js","sourceRoot":"","sources":["../../src/attention-quality.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/consent.js
CHANGED
|
@@ -50,7 +50,7 @@ class ConsentManager {
|
|
|
50
50
|
// Note: In opt-in mode without stored consent, consentState remains null (no consent)
|
|
51
51
|
}
|
|
52
52
|
catch (error) {
|
|
53
|
-
|
|
53
|
+
// Silent failure - consent will be requested when needed
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
@@ -63,7 +63,7 @@ class ConsentManager {
|
|
|
63
63
|
localStorage.setItem(this.storageKey, JSON.stringify(this.consentState));
|
|
64
64
|
}
|
|
65
65
|
catch (error) {
|
|
66
|
-
|
|
66
|
+
// Silent failure - consent state won't persist
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
/**
|
|
@@ -173,7 +173,7 @@ class ConsentManager {
|
|
|
173
173
|
listener(this.consentState);
|
|
174
174
|
}
|
|
175
175
|
catch (error) {
|
|
176
|
-
|
|
176
|
+
// Silent failure - listener threw an error
|
|
177
177
|
}
|
|
178
178
|
});
|
|
179
179
|
}
|
|
@@ -188,7 +188,7 @@ class ConsentManager {
|
|
|
188
188
|
this.consentState = null;
|
|
189
189
|
}
|
|
190
190
|
catch (error) {
|
|
191
|
-
|
|
191
|
+
// Silent failure - consent state may not be fully cleared
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
194
|
}
|
package/dist/cjs/consent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/consent.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAWU,QAAA,0BAA0B,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AACtE,QAAA,eAAe,GAAG,OAAO,CAAC;AAEvC;;GAEG;AACH,MAAa,cAAc;IAMzB,YAAY,QAAgB,EAAE,cAA2B,SAAS;QAL1D,iBAAY,GAAwB,IAAI,CAAC;QAGzC,cAAS,GAAyC,EAAE,CAAC;QAG3D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,iBAAiB,QAAQ,EAAE,CAAC;QAC9C,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;;;;;OAMG;IACK,gBAAgB;QACtB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrD,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAClC,IAAI,CAAC,YAAY,GAAG;oBAClB,GAAG,MAAM;oBACT,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;iBACtC,CAAC;YACJ,CAAC;iBAAM,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;gBAC7E,oDAAoD;gBACpD,IAAI,CAAC,YAAY,GAAG;oBAClB,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,kCAA0B;oBACtC,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,OAAO,EAAE,uBAAe;iBACzB,CAAC;gBACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,CAAC;YACD,sFAAsF;QACxF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,
|
|
1
|
+
{"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/consent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/E,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,kBAAkB,IAAI,MAAM,CAAC;IAC7B,qBAAqB,IAAI,MAAM,CAAC;IAChC,YAAY,IAAI,MAAM,CAAC;IACvB,cAAc,IAAI,MAAM,GAAG,IAAI,CAAC;IAChC,+BAA+B,IAAI,MAAM,CAAC;IAC1C,iCAAiC,IAAI,IAAI,CAAC;CAC3C;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,wBAAwB,CAAS;gBAGvC,OAAO,EAAE,gBAAgB,EACzB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,eAAe;IAezB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,OAAO,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/E,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,kBAAkB,IAAI,MAAM,CAAC;IAC7B,qBAAqB,IAAI,MAAM,CAAC;IAChC,YAAY,IAAI,MAAM,CAAC;IACvB,cAAc,IAAI,MAAM,GAAG,IAAI,CAAC;IAChC,+BAA+B,IAAI,MAAM,CAAC;IAC1C,iCAAiC,IAAI,IAAI,CAAC;CAC3C;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,wBAAwB,CAAS;gBAGvC,OAAO,EAAE,gBAAgB,EACzB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,eAAe;IAezB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACH,OAAO,IAAI,IAAI;CAUhB"}
|
package/dist/cjs/heartbeat.js
CHANGED
|
@@ -96,9 +96,6 @@ class HeartbeatManager {
|
|
|
96
96
|
// Track the heartbeat event
|
|
97
97
|
this.tracker.trackSystemEvent('_grain_heartbeat', properties);
|
|
98
98
|
this.lastHeartbeatTime = now;
|
|
99
|
-
if (this.config.debug) {
|
|
100
|
-
console.log('[Heartbeat] Sent heartbeat:', properties);
|
|
101
|
-
}
|
|
102
99
|
}
|
|
103
100
|
/**
|
|
104
101
|
* Destroy the heartbeat manager
|
|
@@ -111,9 +108,6 @@ class HeartbeatManager {
|
|
|
111
108
|
this.heartbeatTimer = null;
|
|
112
109
|
}
|
|
113
110
|
this.isDestroyed = true;
|
|
114
|
-
if (this.config.debug) {
|
|
115
|
-
console.log('[Heartbeat] Destroyed');
|
|
116
|
-
}
|
|
117
111
|
}
|
|
118
112
|
}
|
|
119
113
|
exports.HeartbeatManager = HeartbeatManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/heartbeat.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/heartbeat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heatmap Tracking Manager for Grain Analytics
|
|
3
|
+
* Tracks click interactions and scroll depth across all pages
|
|
4
|
+
*/
|
|
5
|
+
import type { HeatmapTrackingOptions } from './types/heatmap-tracking';
|
|
6
|
+
import type { ActivityDetector } from './activity';
|
|
7
|
+
export interface SendEventOptions {
|
|
8
|
+
flush?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface HeatmapTracker {
|
|
11
|
+
trackSystemEvent(eventName: string, properties?: Record<string, unknown>, options?: SendEventOptions): void | Promise<void>;
|
|
12
|
+
hasConsent(category: 'analytics' | 'marketing' | 'functional'): boolean;
|
|
13
|
+
getActivityDetector(): ActivityDetector;
|
|
14
|
+
log(...args: unknown[]): void;
|
|
15
|
+
}
|
|
16
|
+
export declare class HeatmapTrackingManager {
|
|
17
|
+
private tracker;
|
|
18
|
+
private options;
|
|
19
|
+
private isDestroyed;
|
|
20
|
+
private currentScrollState;
|
|
21
|
+
private pendingClicks;
|
|
22
|
+
private pendingScrolls;
|
|
23
|
+
private scrollDebounceTimer;
|
|
24
|
+
private batchTimer;
|
|
25
|
+
private scrollTrackingTimer;
|
|
26
|
+
private periodicScrollTimer;
|
|
27
|
+
private lastScrollPosition;
|
|
28
|
+
private lastScrollTime;
|
|
29
|
+
private readonly SPLIT_DURATION;
|
|
30
|
+
private attentionQuality;
|
|
31
|
+
constructor(tracker: HeatmapTracker, options?: Partial<HeatmapTrackingOptions>);
|
|
32
|
+
/**
|
|
33
|
+
* Initialize heatmap tracking
|
|
34
|
+
*/
|
|
35
|
+
private initialize;
|
|
36
|
+
/**
|
|
37
|
+
* Setup click event tracking
|
|
38
|
+
*/
|
|
39
|
+
private setupClickTracking;
|
|
40
|
+
/**
|
|
41
|
+
* Setup scroll event tracking
|
|
42
|
+
*/
|
|
43
|
+
private setupScrollTracking;
|
|
44
|
+
/**
|
|
45
|
+
* Start periodic scroll state tracking
|
|
46
|
+
*/
|
|
47
|
+
private startScrollTracking;
|
|
48
|
+
/**
|
|
49
|
+
* Start periodic scroll tracking (sends events every 3 seconds)
|
|
50
|
+
*/
|
|
51
|
+
private startPeriodicScrollTracking;
|
|
52
|
+
/**
|
|
53
|
+
* Setup page unload handler to beacon remaining data
|
|
54
|
+
*/
|
|
55
|
+
private setupUnloadHandler;
|
|
56
|
+
/**
|
|
57
|
+
* Handle click event
|
|
58
|
+
*/
|
|
59
|
+
private handleClick;
|
|
60
|
+
/**
|
|
61
|
+
* Handle scroll event
|
|
62
|
+
*/
|
|
63
|
+
private handleScroll;
|
|
64
|
+
/**
|
|
65
|
+
* Update current scroll state
|
|
66
|
+
*/
|
|
67
|
+
private updateScrollState;
|
|
68
|
+
/**
|
|
69
|
+
* Generate XPath for an element
|
|
70
|
+
*/
|
|
71
|
+
private generateXPath;
|
|
72
|
+
/**
|
|
73
|
+
* Consider flushing batched events
|
|
74
|
+
*/
|
|
75
|
+
private considerBatchFlush;
|
|
76
|
+
/**
|
|
77
|
+
* Flush pending events
|
|
78
|
+
*/
|
|
79
|
+
private flushPendingEvents;
|
|
80
|
+
/**
|
|
81
|
+
* Flush pending events with beacon (for page unload)
|
|
82
|
+
*/
|
|
83
|
+
private flushPendingEventsWithBeacon;
|
|
84
|
+
/**
|
|
85
|
+
* Log debug message
|
|
86
|
+
*/
|
|
87
|
+
private log;
|
|
88
|
+
/**
|
|
89
|
+
* Destroy the tracking manager
|
|
90
|
+
*/
|
|
91
|
+
destroy(): void;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=heatmap-tracking.d.ts.map
|
|
@@ -0,0 +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;AAEnD,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;IAa1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAwEnC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAwDnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiCrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqD1B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA6CpC;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,IAAI,IAAI;CA8BhB"}
|