@nommos/core 0.0.13 → 0.0.17

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.13",
3
+ "version": "0.0.17",
4
4
  "type": "module",
5
5
  "main": "./src/index.js",
6
6
  "module": "./src/index.js",
@@ -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,
@@ -106,7 +129,9 @@ export class EventTracker {
106
129
  ...(data && { data }),
107
130
  ...(this.da.affiliate && { affiliateCode: this.da.affiliate }),
108
131
  };
109
- console.log(eventTracked);
132
+ if (this.cfg.mode === 'dev') {
133
+ console.log(eventTracked);
134
+ }
110
135
  this.analyticsEvents.next(eventTracked);
111
136
  }
112
137
  init(cfg) {
@@ -118,6 +143,18 @@ export class EventTracker {
118
143
  if (!this.cfg.enableTracking) {
119
144
  return;
120
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
+ }
121
158
  for (const e of this.ws.pendingEvents) {
122
159
  e.ip = this.da.userIp;
123
160
  e.brand_id = this.cfg.brand_id;
@@ -127,7 +164,9 @@ export class EventTracker {
127
164
  }
128
165
  else if (cfg.token) {
129
166
  // Only log error if we expected to get config via token but failed or got incomplete data
130
- console.error('[Nommos Tracker] Missing connection configuration after bootstrap.');
167
+ if (this.cfg.mode === 'dev') {
168
+ console.error('[Nommos Tracker] Missing connection configuration after bootstrap.');
169
+ }
131
170
  }
132
171
  if (this.ipSubscription) {
133
172
  this.ipSubscription.unsubscribe();
@@ -145,7 +184,9 @@ export class EventTracker {
145
184
  this.ws.disconnect();
146
185
  }
147
186
  catch (error) {
148
- console.error('[DME Analytics SDK] disconnect error:', error);
187
+ if (this.cfg.mode === 'dev') {
188
+ console.error('[DME Analytics SDK] disconnect error:', error);
189
+ }
149
190
  }
150
191
  });
151
192
  this.webSocketConnectedSubscription?.unsubscribe();
@@ -160,7 +201,9 @@ export class EventTracker {
160
201
  try {
161
202
  const { timestamp, data } = JSON.parse(cached);
162
203
  if (Date.now() - timestamp < ONE_DAY_MS) {
163
- console.log('[Nommos Tracker] Using cached config');
204
+ if (this.cfg.mode === 'dev') {
205
+ console.log('[Nommos Tracker] Using cached config');
206
+ }
164
207
  this.applyConfig(data);
165
208
  return of(null);
166
209
  }
@@ -186,7 +229,9 @@ export class EventTracker {
186
229
  localStorage.setItem(`${CONFIG_CACHE_KEY}:${token}`, JSON.stringify(cachePayload));
187
230
  }
188
231
  }), catchError((err) => {
189
- console.error('[Nommos Tracker] Error fetching from the endpoint:', err);
232
+ if (this.cfg.mode === 'dev') {
233
+ console.error('[Nommos Tracker] Error fetching from the endpoint:', err);
234
+ }
190
235
  return of(null);
191
236
  }));
192
237
  }
@@ -195,7 +240,9 @@ export class EventTracker {
195
240
  return;
196
241
  this.cfg.enableTracking = data.enabled !== false;
197
242
  if (this.cfg.enableTracking === false) {
198
- console.warn('[Nommos Tracker] the events tracking feature is disabled for your token.');
243
+ if (this.cfg.mode === 'dev') {
244
+ console.warn('[Nommos Tracker] the events tracking feature is disabled for your token.');
245
+ }
199
246
  return;
200
247
  }
201
248
  this.cfg.rabbitUrl = data.rabbit_url;
@@ -207,6 +254,8 @@ export class EventTracker {
207
254
  this.ipSubscription?.unsubscribe();
208
255
  this.eventSubscription?.unsubscribe();
209
256
  this.webSocketConnectedSubscription?.unsubscribe();
257
+ this.heatmapTracker?.stop();
258
+ this.sessionTracker?.stop();
210
259
  }
211
260
  }
212
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;