@nommos/core 0.0.14 → 0.0.18

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nommos/core",
3
- "version": "0.0.14",
3
+ "version": "0.0.18",
4
4
  "type": "module",
5
5
  "main": "./src/index.js",
6
6
  "module": "./src/index.js",
@@ -9,7 +9,8 @@
9
9
  "tslib": "^2.3.0",
10
10
  "@stomp/stompjs": "^7.2.1",
11
11
  "rxjs": "~7.8.0",
12
- "uuid": "^13.0.0"
12
+ "uuid": "^13.0.0",
13
+ "rrweb": "^2.0.0-alpha.4"
13
14
  },
14
15
  "engines": {
15
16
  "node": ">=14 <23"
@@ -9,5 +9,7 @@ export declare const BROWSER_KEY = "anon:device_id";
9
9
  export declare const CONFIG_CACHE_KEY = "nommos:config:cache";
10
10
  export declare const ONE_DAY_MS: number;
11
11
  export declare const ANALYTICS_QUEUE = "/queue/user.activity";
12
+ export declare const HEATMAP_QUEUE = "/queue/user-heatmap";
13
+ export declare const SESSION_RECORDING_QUEUE = "/queue/user.session.recording";
12
14
  export declare const BROWSER_DEFS: UaDef[];
13
15
  export declare const OS_DEFS: UaDef[];
@@ -8,6 +8,8 @@ export const BROWSER_KEY = 'anon:device_id';
8
8
  export const CONFIG_CACHE_KEY = 'nommos:config:cache';
9
9
  export const ONE_DAY_MS = 24 * 60 * 60 * 1000;
10
10
  export const ANALYTICS_QUEUE = '/queue/user.activity';
11
+ export const HEATMAP_QUEUE = '/queue/user-heatmap';
12
+ export const SESSION_RECORDING_QUEUE = '/queue/user.session.recording';
11
13
  export const BROWSER_DEFS = [
12
14
  [/Edg\/([\d.]+)/, 'Edge'],
13
15
  [/OPR\/([\d.]+)/, 'Opera'],
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/constants.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export declare class EventTracker {
9
9
  private webSocketConnectedSubscription;
10
10
  private readonly analyticsEvents;
11
11
  analyticsEvents$: import("rxjs").Observable<AnalyticsEvent>;
12
+ private heatmapTracker;
13
+ private sessionTracker;
12
14
  /**
13
15
  * Internal state map used to track SELECT/UNSELECT status of toggleable actions.
14
16
  */
@@ -2,8 +2,10 @@ import { forkJoin, from, of, Subject } from 'rxjs';
2
2
  import { catchError, map, switchMap } from 'rxjs/operators';
3
3
  import { WebSocketClient } from './webSocket-client';
4
4
  import { DataAttribution } from './data-attribution';
5
- import { ANALYTICS_ACTION_STATE } from './enums';
6
- import { userAgentInfo } from './utils';
5
+ import { HeatmapTracker } from './heatmap-tracker';
6
+ import { SessionTracker } from './session-tracker';
7
+ import { ANALYTICS_ACTION, ANALYTICS_ACTION_STATE } from './enums';
8
+ import { getQueryParams, userAgentInfo } from './utils';
7
9
  import { CONFIG_ENDPOINT, CONFIG_CACHE_KEY, ONE_DAY_MS } from './constants';
8
10
  export class EventTracker {
9
11
  /**
@@ -17,6 +19,8 @@ export class EventTracker {
17
19
  this.webSocketConnectedSubscription = null;
18
20
  this.analyticsEvents = new Subject();
19
21
  this.analyticsEvents$ = this.analyticsEvents.asObservable();
22
+ this.heatmapTracker = null;
23
+ this.sessionTracker = null;
20
24
  /**
21
25
  * Internal state map used to track SELECT/UNSELECT status of toggleable actions.
22
26
  */
@@ -87,6 +91,25 @@ export class EventTracker {
87
91
  else if (state === ANALYTICS_ACTION_STATE.UNSELECT) {
88
92
  this.setActionSelectState(action, false);
89
93
  }
94
+ if (action === ANALYTICS_ACTION.VISIT) {
95
+ try {
96
+ const urlToParse = currentUrl && currentUrl.includes('?')
97
+ ? currentUrl
98
+ : typeof window !== 'undefined'
99
+ ? window.location.href
100
+ : currentUrl;
101
+ if (urlToParse) {
102
+ const params = getQueryParams(urlToParse);
103
+ const adId = params['utm_content'];
104
+ if (adId) {
105
+ data = { ...data, ad_id: adId };
106
+ }
107
+ }
108
+ }
109
+ catch (e) {
110
+ // silence parsing errors
111
+ }
112
+ }
90
113
  const { channel, os, browser } = userAgentInfo(navigator.userAgent || '');
91
114
  const eventTracked = {
92
115
  ip: this.da.userIp,
@@ -120,6 +143,18 @@ export class EventTracker {
120
143
  if (!this.cfg.enableTracking) {
121
144
  return;
122
145
  }
146
+ // Initialize heatmap tracker (zero-config) if not already initialized
147
+ if (!this.heatmapTracker) {
148
+ const { channel } = userAgentInfo(navigator.userAgent || '');
149
+ this.heatmapTracker = new HeatmapTracker(this.ws, this.cfg, this.da.browserId, channel);
150
+ this.heatmapTracker.start();
151
+ }
152
+ // Initialize session recording (rrweb) if enabled
153
+ if (!this.sessionTracker) {
154
+ const { channel } = userAgentInfo(navigator.userAgent || '');
155
+ this.sessionTracker = new SessionTracker(this.ws, this.cfg, this.da.browserId, channel);
156
+ this.sessionTracker.start();
157
+ }
123
158
  for (const e of this.ws.pendingEvents) {
124
159
  e.ip = this.da.userIp;
125
160
  e.brand_id = this.cfg.brand_id;
@@ -219,6 +254,8 @@ export class EventTracker {
219
254
  this.ipSubscription?.unsubscribe();
220
255
  this.eventSubscription?.unsubscribe();
221
256
  this.webSocketConnectedSubscription?.unsubscribe();
257
+ this.heatmapTracker?.stop();
258
+ this.sessionTracker?.stop();
222
259
  }
223
260
  }
224
261
  //# sourceMappingURL=event-tracker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-tracker.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/event-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-tracker.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/event-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { FullConfig } from './types';
2
+ import { WebSocketClient } from './webSocket-client';
3
+ export declare class HeatmapTracker {
4
+ private readonly ws;
5
+ private readonly cfg;
6
+ private readonly browserId;
7
+ private readonly channel;
8
+ private clicks;
9
+ private movement;
10
+ private scrollBands;
11
+ private eventCount;
12
+ private lastMoveTime;
13
+ private lastX;
14
+ private lastY;
15
+ private moveEventCounter;
16
+ private timer;
17
+ private maxScroll;
18
+ private reachedBands;
19
+ constructor(ws: WebSocketClient, cfg: FullConfig, browserId: string, channel: number);
20
+ /**
21
+ * Starts global event listeners for heatmap collection.
22
+ */
23
+ start(): void;
24
+ /**
25
+ * Stops listeners and flushes remaining data.
26
+ */
27
+ stop(): void;
28
+ private handleClick;
29
+ private handleMouseMove;
30
+ private handleScroll;
31
+ private handleVisibilityChange;
32
+ private recordPoint;
33
+ private incrementAndCheck;
34
+ private resetTimer;
35
+ private flush;
36
+ private mapToPoints;
37
+ private mapToScroll;
38
+ }
@@ -0,0 +1,175 @@
1
+ export class HeatmapTracker {
2
+ constructor(ws, cfg, browserId, channel) {
3
+ this.ws = ws;
4
+ this.cfg = cfg;
5
+ this.browserId = browserId;
6
+ this.channel = channel;
7
+ this.clicks = new Map();
8
+ this.movement = new Map();
9
+ this.scrollBands = new Map();
10
+ this.eventCount = 0;
11
+ this.lastMoveTime = 0;
12
+ this.lastX = -1;
13
+ this.lastY = -1;
14
+ this.moveEventCounter = 0;
15
+ this.timer = null;
16
+ this.maxScroll = 0;
17
+ this.reachedBands = new Set();
18
+ }
19
+ /**
20
+ * Starts global event listeners for heatmap collection.
21
+ */
22
+ start() {
23
+ if (typeof window === 'undefined')
24
+ return;
25
+ if (this.cfg.mode === 'dev') {
26
+ console.log('[Nommos Tracker] Heatmap Metrics Collection Started');
27
+ }
28
+ document.addEventListener('click', this.handleClick.bind(this), {
29
+ capture: true,
30
+ passive: true,
31
+ });
32
+ document.addEventListener('mousemove', this.handleMouseMove.bind(this), {
33
+ capture: true,
34
+ passive: true,
35
+ });
36
+ window.addEventListener('scroll', this.handleScroll.bind(this), {
37
+ capture: true,
38
+ passive: true,
39
+ });
40
+ window.addEventListener('visibilitychange', this.handleVisibilityChange.bind(this));
41
+ window.addEventListener('beforeunload', () => this.flush());
42
+ this.resetTimer();
43
+ }
44
+ /**
45
+ * Stops listeners and flushes remaining data.
46
+ */
47
+ stop() {
48
+ if (typeof window === 'undefined')
49
+ return;
50
+ document.removeEventListener('click', this.handleClick.bind(this), { capture: true });
51
+ document.removeEventListener('mousemove', this.handleMouseMove.bind(this), { capture: true });
52
+ window.removeEventListener('scroll', this.handleScroll.bind(this));
53
+ window.removeEventListener('visibilitychange', this.handleVisibilityChange.bind(this));
54
+ if (this.timer) {
55
+ clearTimeout(this.timer);
56
+ }
57
+ this.flush();
58
+ }
59
+ handleClick(e) {
60
+ this.recordPoint(this.clicks, e.pageX, e.pageY);
61
+ this.incrementAndCheck();
62
+ }
63
+ handleMouseMove(e) {
64
+ const now = Date.now();
65
+ // 1. Throttling: 100ms
66
+ if (now - this.lastMoveTime < 100)
67
+ return;
68
+ this.lastMoveTime = now;
69
+ // 2. Sampling: 1 in 3
70
+ this.moveEventCounter++;
71
+ if (this.moveEventCounter % 3 !== 0)
72
+ return;
73
+ // 3. Distance filter: > 5px
74
+ const dx = Math.abs(e.pageX - this.lastX);
75
+ const dy = Math.abs(e.pageY - this.lastY);
76
+ if (dx < 5 && dy < 5)
77
+ return;
78
+ this.lastX = e.pageX;
79
+ this.lastY = e.pageY;
80
+ this.recordPoint(this.movement, e.pageX, e.pageY);
81
+ this.incrementAndCheck();
82
+ }
83
+ handleScroll() {
84
+ const scrollY = window.scrollY || window.pageYOffset;
85
+ const totalHeight = document.documentElement.scrollHeight - window.innerHeight;
86
+ if (totalHeight <= 0)
87
+ return;
88
+ const percent = Math.min(100, Math.max(0, (scrollY / totalHeight) * 100));
89
+ // Snap to 0, 25, 50, 75, 100
90
+ const band = Math.round(percent / 25) * 25;
91
+ if (band > this.maxScroll) {
92
+ this.maxScroll = band;
93
+ if (!this.reachedBands.has(band)) {
94
+ this.reachedBands.add(band);
95
+ const currentCount = this.scrollBands.get(band) || 0;
96
+ this.scrollBands.set(band, currentCount + 1);
97
+ this.incrementAndCheck();
98
+ }
99
+ }
100
+ }
101
+ handleVisibilityChange() {
102
+ if (document.visibilityState === 'hidden') {
103
+ this.flush();
104
+ }
105
+ }
106
+ recordPoint(map, rawX, rawY) {
107
+ // Grid bucket: 10px
108
+ const x = Math.round(rawX / 10) * 10;
109
+ const y = Math.round(rawY / 10) * 10;
110
+ const key = `${x},${y}`;
111
+ map.set(key, (map.get(key) || 0) + 1);
112
+ }
113
+ incrementAndCheck() {
114
+ this.eventCount++;
115
+ const threshold = this.cfg.heatmapThreshold || 50;
116
+ if (this.eventCount >= threshold) {
117
+ this.flush();
118
+ }
119
+ }
120
+ resetTimer() {
121
+ if (this.timer)
122
+ clearTimeout(this.timer);
123
+ const interval = this.cfg.heatmapInterval || 10000;
124
+ this.timer = setTimeout(() => this.flush(), interval);
125
+ }
126
+ flush() {
127
+ if (this.eventCount === 0) {
128
+ this.resetTimer();
129
+ return;
130
+ }
131
+ const payload = {
132
+ brandId: this.cfg.brand_id || '',
133
+ bid: this.browserId,
134
+ channel: this.channel,
135
+ page: window.location.pathname,
136
+ fullUrl: window.location.href,
137
+ timestamp: Date.now(),
138
+ screen: {
139
+ width: window.innerWidth,
140
+ height: window.innerHeight,
141
+ },
142
+ heatmaps: {
143
+ clicks: this.mapToPoints(this.clicks),
144
+ movement: this.mapToPoints(this.movement),
145
+ scroll: this.mapToScroll(this.scrollBands),
146
+ },
147
+ };
148
+ if (this.cfg.mode === 'dev') {
149
+ console.log('[Nommos Tracker] Sending Heatmap Batch:', payload);
150
+ }
151
+ this.ws.publishHeatmapMessage(payload);
152
+ // Reset buckets
153
+ this.clicks.clear();
154
+ this.movement.clear();
155
+ this.scrollBands.clear();
156
+ this.eventCount = 0;
157
+ this.resetTimer();
158
+ }
159
+ mapToPoints(map) {
160
+ const points = [];
161
+ map.forEach((value, key) => {
162
+ const [x, y] = key.split(',').map(Number);
163
+ points.push({ x, y, value });
164
+ });
165
+ return points;
166
+ }
167
+ mapToScroll(map) {
168
+ const bands = [];
169
+ map.forEach((value, depth) => {
170
+ bands.push({ depth, value });
171
+ });
172
+ return bands;
173
+ }
174
+ }
175
+ //# sourceMappingURL=heatmap-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heatmap-tracker.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/heatmap-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { FullConfig } from './types';
2
+ import { WebSocketClient } from './webSocket-client';
3
+ /**
4
+ * SessionTracker
5
+ * --------------
6
+ * Captures full user session recordings using rrweb and streams them
7
+ * to RabbitMQ via the established WebSocket connection.
8
+ *
9
+ * Features:
10
+ * - Automatic DOM snapshot and incremental change recording
11
+ * - Event buffering (flushes every 100 events or 30 seconds)
12
+ * - Privacy protection (masks all inputs by default)
13
+ * - Environment-safe (no-op on server-side)
14
+ */
15
+ export declare class SessionTracker {
16
+ private readonly ws;
17
+ private readonly cfg;
18
+ private readonly bid;
19
+ private readonly channel;
20
+ private events;
21
+ private stopFn;
22
+ private timer;
23
+ constructor(ws: WebSocketClient, cfg: FullConfig, bid: string, channel: number);
24
+ /**
25
+ * Initializes rrweb recording. Loads rrweb dynamically to support
26
+ * environments like Next.js/SSR and avoid bundling overhead if not used.
27
+ */
28
+ start(): Promise<void>;
29
+ /**
30
+ * Stops recording and flushes any pending events.
31
+ */
32
+ stop(): void;
33
+ /**
34
+ * Packages buffered events into a payload and publishes to the broker.
35
+ */
36
+ private flush;
37
+ }
@@ -0,0 +1,98 @@
1
+ /**
2
+ * SessionTracker
3
+ * --------------
4
+ * Captures full user session recordings using rrweb and streams them
5
+ * to RabbitMQ via the established WebSocket connection.
6
+ *
7
+ * Features:
8
+ * - Automatic DOM snapshot and incremental change recording
9
+ * - Event buffering (flushes every 100 events or 30 seconds)
10
+ * - Privacy protection (masks all inputs by default)
11
+ * - Environment-safe (no-op on server-side)
12
+ */
13
+ export class SessionTracker {
14
+ constructor(ws, cfg, bid, channel) {
15
+ this.ws = ws;
16
+ this.cfg = cfg;
17
+ this.bid = bid;
18
+ this.channel = channel;
19
+ this.events = [];
20
+ this.stopFn = null;
21
+ this.timer = null;
22
+ }
23
+ /**
24
+ * Initializes rrweb recording. Loads rrweb dynamically to support
25
+ * environments like Next.js/SSR and avoid bundling overhead if not used.
26
+ */
27
+ async start() {
28
+ if (typeof window === 'undefined')
29
+ return;
30
+ try {
31
+ // Dynamic import to avoid SSR issues and keep core bundle small
32
+ const rrweb = await import('rrweb');
33
+ // Initialize recording
34
+ this.stopFn = rrweb.record({
35
+ emit: (event) => {
36
+ this.events.push(event);
37
+ if (this.events.length >= 100) {
38
+ this.flush();
39
+ }
40
+ },
41
+ maskAllInputs: true,
42
+ }) || null;
43
+ // Periodic flush for long-running sessions with few interaction events
44
+ this.timer = setInterval(() => this.flush(), 30000);
45
+ // Ensure final flush on tab close
46
+ window.addEventListener('beforeunload', () => this.flush());
47
+ if (this.cfg.mode === 'dev') {
48
+ console.log('[Nommos Tracker] Session Recording Started');
49
+ }
50
+ }
51
+ catch (err) {
52
+ if (this.cfg.mode === 'dev') {
53
+ console.error('[Nommos Tracker] Failed to load rrweb', err);
54
+ }
55
+ }
56
+ }
57
+ /**
58
+ * Stops recording and flushes any pending events.
59
+ */
60
+ stop() {
61
+ if (this.stopFn) {
62
+ this.stopFn();
63
+ this.stopFn = null;
64
+ }
65
+ if (this.timer) {
66
+ clearInterval(this.timer);
67
+ this.timer = null;
68
+ }
69
+ this.flush();
70
+ }
71
+ /**
72
+ * Packages buffered events into a payload and publishes to the broker.
73
+ */
74
+ flush() {
75
+ if (this.events.length === 0)
76
+ return;
77
+ const payload = {
78
+ brandId: this.cfg.brand_id || '',
79
+ bid: this.bid,
80
+ channel: this.channel,
81
+ page: window.location.pathname,
82
+ fullUrl: window.location.href,
83
+ timestamp: Date.now(),
84
+ screen: {
85
+ width: window.innerWidth,
86
+ height: window.innerHeight,
87
+ },
88
+ events: [...this.events],
89
+ };
90
+ if (this.cfg.mode === 'dev') {
91
+ console.log('[Nommos Tracker] Sending Session Recording Batch:', payload.events.length, 'events');
92
+ }
93
+ this.ws.publishSessionRecordingMessage(payload);
94
+ // Clear buffer
95
+ this.events = [];
96
+ }
97
+ }
98
+ //# sourceMappingURL=session-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-tracker.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/session-tracker.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,8 @@ export interface FullConfig extends ConnectionConfig {
12
12
  appId?: string;
13
13
  reconnectDelay?: number;
14
14
  enableTracking?: boolean;
15
+ heatmapInterval?: number;
16
+ heatmapThreshold?: number;
15
17
  }
16
18
  export interface UrlTrackingKey {
17
19
  source: string;
@@ -32,6 +34,45 @@ export interface AnalyticsEvent {
32
34
  data?: Record<string, unknown>;
33
35
  meta?: Record<string, unknown>;
34
36
  }
37
+ export interface HeatmapPoint {
38
+ x: number;
39
+ y: number;
40
+ value: number;
41
+ }
42
+ export interface ScrollBand {
43
+ depth: number;
44
+ value: number;
45
+ }
46
+ export interface HeatmapPayload {
47
+ brandId: string | number;
48
+ bid: string;
49
+ channel: number;
50
+ page: string;
51
+ fullUrl: string;
52
+ timestamp: number;
53
+ screen: {
54
+ width: number;
55
+ height: number;
56
+ };
57
+ heatmaps: {
58
+ clicks: HeatmapPoint[];
59
+ movement: HeatmapPoint[];
60
+ scroll: ScrollBand[];
61
+ };
62
+ }
63
+ export interface SessionRecordingPayload {
64
+ brandId: string | number;
65
+ bid: string;
66
+ channel: number;
67
+ page: string;
68
+ fullUrl: string;
69
+ timestamp: number;
70
+ screen: {
71
+ width: number;
72
+ height: number;
73
+ };
74
+ events: any[];
75
+ }
35
76
  export interface TTLStringArray {
36
77
  v: string[];
37
78
  e: number;
@@ -1,4 +1,4 @@
1
- import { AnalyticsEvent, FullConfig } from './types';
1
+ import { AnalyticsEvent, FullConfig, HeatmapPayload, SessionRecordingPayload } from './types';
2
2
  /**
3
3
  * WebSocketClient
4
4
  * ----------------
@@ -61,6 +61,18 @@ export declare class WebSocketClient {
61
61
  * @param payload The analytics event to send.
62
62
  */
63
63
  publishAnalyticsMessage(payload: AnalyticsEvent): void;
64
+ /**
65
+ * Publishes an aggregated heatmap payload to the user-heatmap queue.
66
+ *
67
+ * @param payload The heatmap data to send.
68
+ */
69
+ publishHeatmapMessage(payload: HeatmapPayload): void;
70
+ /**
71
+ * Publishes a session recording payload to the user.session.recording queue.
72
+ *
73
+ * @param payload The session recording data to send.
74
+ */
75
+ publishSessionRecordingMessage(payload: SessionRecordingPayload): void;
64
76
  /**
65
77
  * Gracefully shuts down the STOMP client and updates connection status.
66
78
  *