@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/README.md +527 -527
- package/package.json +1 -1
- package/src/lib/constants.d.ts +2 -0
- package/src/lib/constants.js +2 -0
- package/src/lib/constants.js.map +1 -1
- package/src/lib/event-tracker.d.ts +2 -0
- package/src/lib/event-tracker.js +57 -8
- package/src/lib/event-tracker.js.map +1 -1
- package/src/lib/heatmap-tracker.d.ts +38 -0
- package/src/lib/heatmap-tracker.js +175 -0
- package/src/lib/heatmap-tracker.js.map +1 -0
- package/src/lib/session-tracker.d.ts +37 -0
- package/src/lib/session-tracker.js +98 -0
- package/src/lib/session-tracker.js.map +1 -0
- package/src/lib/types.d.ts +41 -0
- package/src/lib/webSocket-client.d.ts +14 -1
- package/src/lib/webSocket-client.js +47 -6
- package/src/lib/webSocket-client.js.map +1 -1
|
@@ -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
|
* ----------------
|
|
@@ -18,6 +18,7 @@ export declare class WebSocketClient {
|
|
|
18
18
|
* Initialized in `connectAnalyticsStomp()`.
|
|
19
19
|
*/
|
|
20
20
|
private analyticsClient;
|
|
21
|
+
private cfg;
|
|
21
22
|
/**
|
|
22
23
|
* Buffer containing analytics events produced before the socket
|
|
23
24
|
* becomes connected. They are automatically flushed on connection.
|
|
@@ -60,6 +61,18 @@ export declare class WebSocketClient {
|
|
|
60
61
|
* @param payload The analytics event to send.
|
|
61
62
|
*/
|
|
62
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;
|
|
63
76
|
/**
|
|
64
77
|
* Gracefully shuts down the STOMP client and updates connection status.
|
|
65
78
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Client } from '@stomp/stompjs';
|
|
2
2
|
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { ANALYTICS_QUEUE } from './constants';
|
|
3
|
+
import { ANALYTICS_QUEUE, HEATMAP_QUEUE, SESSION_RECORDING_QUEUE } from './constants';
|
|
4
4
|
/**
|
|
5
5
|
* WebSocketClient
|
|
6
6
|
* ----------------
|
|
@@ -21,6 +21,7 @@ export class WebSocketClient {
|
|
|
21
21
|
* Initialized in `connectAnalyticsStomp()`.
|
|
22
22
|
*/
|
|
23
23
|
this.analyticsClient = null;
|
|
24
|
+
this.cfg = null;
|
|
24
25
|
/**
|
|
25
26
|
* Buffer containing analytics events produced before the socket
|
|
26
27
|
* becomes connected. They are automatically flushed on connection.
|
|
@@ -43,7 +44,6 @@ export class WebSocketClient {
|
|
|
43
44
|
* @returns A configured but not yet activated STOMP `Client` instance.
|
|
44
45
|
*/
|
|
45
46
|
createStompClient(cfg) {
|
|
46
|
-
console.log('[Nommos Tracker] Rabbit Configs... ', cfg);
|
|
47
47
|
const client = new Client({
|
|
48
48
|
brokerURL: cfg.rabbitUrl ?? '',
|
|
49
49
|
connectHeaders: {
|
|
@@ -74,9 +74,12 @@ export class WebSocketClient {
|
|
|
74
74
|
* @param cfg Configuration including URL, credentials, mode etc.
|
|
75
75
|
*/
|
|
76
76
|
connectAnalyticsStomp(cfg) {
|
|
77
|
+
this.cfg = cfg;
|
|
77
78
|
this.analyticsClient = this.createStompClient(cfg);
|
|
78
79
|
this.analyticsClient.onConnect = () => {
|
|
79
|
-
|
|
80
|
+
if (this.cfg?.mode === 'dev') {
|
|
81
|
+
console.log('[Nommos Tracker] Connected');
|
|
82
|
+
}
|
|
80
83
|
this.stompAnalyticsConnected.next(true);
|
|
81
84
|
// flush pending events
|
|
82
85
|
for (const m of this.pendingEvents) {
|
|
@@ -85,9 +88,13 @@ export class WebSocketClient {
|
|
|
85
88
|
this.pendingEvents = [];
|
|
86
89
|
};
|
|
87
90
|
this.analyticsClient.onStompError = (frame) => {
|
|
88
|
-
|
|
91
|
+
if (this.cfg?.mode === 'dev') {
|
|
92
|
+
console.error('[Nommos Tracker] Broker error:', frame.headers['message']);
|
|
93
|
+
}
|
|
89
94
|
};
|
|
90
|
-
|
|
95
|
+
if (this.cfg?.mode === 'dev') {
|
|
96
|
+
console.log('[Nommos Tracker] Activating STOMP client...');
|
|
97
|
+
}
|
|
91
98
|
this.analyticsClient.activate();
|
|
92
99
|
}
|
|
93
100
|
/**
|
|
@@ -109,6 +116,38 @@ export class WebSocketClient {
|
|
|
109
116
|
body: JSON.stringify(payload),
|
|
110
117
|
});
|
|
111
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Publishes an aggregated heatmap payload to the user-heatmap queue.
|
|
121
|
+
*
|
|
122
|
+
* @param payload The heatmap data to send.
|
|
123
|
+
*/
|
|
124
|
+
publishHeatmapMessage(payload) {
|
|
125
|
+
if (!this.analyticsClient?.connected || this.analyticsClient == null) {
|
|
126
|
+
// We don't buffer heatmap data for now to avoid memory bloat,
|
|
127
|
+
// as they are aggregated and sent in batches anyway.
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
this.analyticsClient.publish({
|
|
131
|
+
destination: HEATMAP_QUEUE,
|
|
132
|
+
headers: { 'content-type': 'application/json' },
|
|
133
|
+
body: JSON.stringify(payload),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Publishes a session recording payload to the user.session.recording queue.
|
|
138
|
+
*
|
|
139
|
+
* @param payload The session recording data to send.
|
|
140
|
+
*/
|
|
141
|
+
publishSessionRecordingMessage(payload) {
|
|
142
|
+
if (!this.analyticsClient?.connected || this.analyticsClient == null) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
this.analyticsClient.publish({
|
|
146
|
+
destination: SESSION_RECORDING_QUEUE,
|
|
147
|
+
headers: { 'content-type': 'application/json' },
|
|
148
|
+
body: JSON.stringify(payload),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
112
151
|
/**
|
|
113
152
|
* Gracefully shuts down the STOMP client and updates connection status.
|
|
114
153
|
*
|
|
@@ -118,7 +157,9 @@ export class WebSocketClient {
|
|
|
118
157
|
if (this.analyticsClient) {
|
|
119
158
|
this.analyticsClient.deactivate().then(() => {
|
|
120
159
|
this.stompAnalyticsConnected.next(false);
|
|
121
|
-
|
|
160
|
+
if (this.cfg?.mode === 'dev') {
|
|
161
|
+
console.log('[Nommos Tracker] Disconnected');
|
|
162
|
+
}
|
|
122
163
|
});
|
|
123
164
|
}
|
|
124
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webSocket-client.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/webSocket-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"webSocket-client.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/webSocket-client.ts"],"names":[],"mappings":"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"}
|