@nommos/core 0.0.12 → 0.0.14
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 +3 -2
- package/src/index.js +7 -10
- package/src/index.js.map +1 -1
- package/src/lib/constants.js +12 -15
- package/src/lib/constants.js.map +1 -1
- package/src/lib/data-attribution.js +48 -53
- package/src/lib/data-attribution.js.map +1 -1
- package/src/lib/enums.js +6 -9
- package/src/lib/enums.js.map +1 -1
- package/src/lib/event-tracker.js +73 -52
- package/src/lib/event-tracker.js.map +1 -1
- package/src/lib/types.js +1 -2
- package/src/lib/utils.js +6 -12
- package/src/lib/utils.js.map +1 -1
- package/src/lib/webSocket-client.d.ts +1 -0
- package/src/lib/webSocket-client.js +26 -23
- package/src/lib/webSocket-client.js.map +1 -1
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
tslib_1.__exportStar(require("./lib/data-attribution"), exports);
|
|
9
|
-
tslib_1.__exportStar(require("./lib/webSocket-client"), exports);
|
|
10
|
-
tslib_1.__exportStar(require("./lib/event-tracker"), exports);
|
|
1
|
+
export * from './lib/enums';
|
|
2
|
+
export * from './lib/types';
|
|
3
|
+
export * from './lib/utils';
|
|
4
|
+
export * from './lib/constants';
|
|
5
|
+
export * from './lib/data-attribution';
|
|
6
|
+
export * from './lib/webSocket-client';
|
|
7
|
+
export * from './lib/event-tracker';
|
|
11
8
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../nommos/core/src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../nommos/core/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
|
package/src/lib/constants.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
exports.ONE_DAY_MS = 24 * 60 * 60 * 1000;
|
|
13
|
-
exports.ANALYTICS_QUEUE = '/queue/user.activity';
|
|
14
|
-
exports.BROWSER_DEFS = [
|
|
1
|
+
export const CONFIG_ENDPOINT = 'https://api.nommos.ai/api/tracking-module/config';
|
|
2
|
+
export const SOURCE_KEY = 'attr:source';
|
|
3
|
+
export const AFFILIATE_KEY = 'attr:affiliate';
|
|
4
|
+
export const PARRAINAGE_KEY = 'attr:parrainage';
|
|
5
|
+
export const AFFILIATE_HISTORY_KEY = 'attr:affiliate:history'; // { v: string[], e: number }
|
|
6
|
+
export const ONE_YEAR_MS = 365 * 24 * 60 * 60 * 1000;
|
|
7
|
+
export const BROWSER_KEY = 'anon:device_id';
|
|
8
|
+
export const CONFIG_CACHE_KEY = 'nommos:config:cache';
|
|
9
|
+
export const ONE_DAY_MS = 24 * 60 * 60 * 1000;
|
|
10
|
+
export const ANALYTICS_QUEUE = '/queue/user.activity';
|
|
11
|
+
export const BROWSER_DEFS = [
|
|
15
12
|
[/Edg\/([\d.]+)/, 'Edge'],
|
|
16
13
|
[/OPR\/([\d.]+)/, 'Opera'],
|
|
17
14
|
[/Chrome\/([\d.]+)/, 'Chrome'], // Edge/Opera are checked first, so this is safe
|
|
@@ -30,7 +27,7 @@ exports.BROWSER_DEFS = [
|
|
|
30
27
|
[/Puffin\/([\d.]+)/, 'Puffin'],
|
|
31
28
|
[/DuckDuckGo\/([\d.]+)/, 'DuckDuckGo'],
|
|
32
29
|
];
|
|
33
|
-
|
|
30
|
+
export const OS_DEFS = [
|
|
34
31
|
[/Windows NT ([\d.]+)/i, 'Windows'],
|
|
35
32
|
[/Android\s+([\d.]+)/i, 'Android'],
|
|
36
33
|
[/iPhone OS (\d+[_\d.]*)/i, 'iOS', (m) => m[1].replace(/_/g, '.')],
|
package/src/lib/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const utils_1 = require("./utils");
|
|
9
|
-
const uuid_1 = require("uuid");
|
|
10
|
-
class DataAttribution {
|
|
1
|
+
import { BehaviorSubject, from, of } from 'rxjs';
|
|
2
|
+
import { catchError, map, switchMap } from 'rxjs/operators';
|
|
3
|
+
import { AFFILIATE_HISTORY_KEY, AFFILIATE_KEY, BROWSER_KEY, ONE_YEAR_MS, PARRAINAGE_KEY, SOURCE_KEY, } from './constants';
|
|
4
|
+
import { SITE_SOURCE } from './enums';
|
|
5
|
+
import { getQueryParams, normString } from './utils';
|
|
6
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
7
|
+
export class DataAttribution {
|
|
11
8
|
constructor(urlTrackingKey) {
|
|
12
9
|
this.urlTrackingKey = urlTrackingKey;
|
|
13
10
|
this.latestAffiliateCandidate = null;
|
|
14
11
|
this.lastCapturedAffiliateIsNew = false;
|
|
15
12
|
this.currentUserIP = '';
|
|
16
|
-
this.loadedUserIp = new
|
|
13
|
+
this.loadedUserIp = new BehaviorSubject(false);
|
|
17
14
|
this.loadedUserIp$ = this.loadedUserIp.asObservable();
|
|
18
|
-
this.hasParrainOrAffiliate = new
|
|
15
|
+
this.hasParrainOrAffiliate = new BehaviorSubject(false);
|
|
19
16
|
this.hasParrainOrAffiliate$ = this.hasParrainOrAffiliate.asObservable();
|
|
20
|
-
this.stripUrlTrackedParams = new
|
|
17
|
+
this.stripUrlTrackedParams = new BehaviorSubject(false);
|
|
21
18
|
this.stripUrlTrackedParams$ = this.stripUrlTrackedParams.asObservable();
|
|
22
19
|
}
|
|
23
20
|
/**
|
|
@@ -41,10 +38,10 @@ class DataAttribution {
|
|
|
41
38
|
* Persistence: 1 year (via cookie), infinite via localStorage.
|
|
42
39
|
*/
|
|
43
40
|
get browserId() {
|
|
44
|
-
let v = localStorage.getItem(
|
|
41
|
+
let v = localStorage.getItem(BROWSER_KEY);
|
|
45
42
|
if (!v) {
|
|
46
|
-
v = (
|
|
47
|
-
localStorage.setItem(
|
|
43
|
+
v = uuidv4();
|
|
44
|
+
localStorage.setItem(BROWSER_KEY, v);
|
|
48
45
|
document.cookie = `device_id=${v}; path=/; max-age=${365 * 24 * 60 * 60}`;
|
|
49
46
|
}
|
|
50
47
|
return v;
|
|
@@ -63,26 +60,25 @@ class DataAttribution {
|
|
|
63
60
|
* Fetches for the current public address of the user (machine on which the application is used).
|
|
64
61
|
*/
|
|
65
62
|
fetchIp() {
|
|
66
|
-
return
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
this.currentUserIP = (_a = data === null || data === void 0 ? void 0 : data.ip) !== null && _a !== void 0 ? _a : '';
|
|
63
|
+
return from(fetch('https://api.ipify.org?format=json')).pipe(switchMap((res) => from(res.json())), // flatten inner promise
|
|
64
|
+
map((data) => {
|
|
65
|
+
this.currentUserIP = data?.ip ?? '';
|
|
70
66
|
}), // extract IP or ''
|
|
71
|
-
|
|
67
|
+
catchError(() => of()) // on any error, return ''
|
|
72
68
|
);
|
|
73
69
|
}
|
|
74
70
|
get source() {
|
|
75
|
-
const v = sessionStorage.getItem(
|
|
76
|
-
return v != null && v.length > 0 ? v :
|
|
71
|
+
const v = sessionStorage.getItem(SOURCE_KEY);
|
|
72
|
+
return v != null && v.length > 0 ? v : SITE_SOURCE.DIRECT;
|
|
77
73
|
}
|
|
78
74
|
/** Current affiliate from session; empty string if absent. */
|
|
79
75
|
get affiliate() {
|
|
80
|
-
const v = sessionStorage.getItem(
|
|
76
|
+
const v = sessionStorage.getItem(AFFILIATE_KEY);
|
|
81
77
|
return v != null && v.length > 0 ? v : null;
|
|
82
78
|
}
|
|
83
79
|
/** Current parrainage from session; empty string if absent. */
|
|
84
80
|
get parrainage() {
|
|
85
|
-
const v = sessionStorage.getItem(
|
|
81
|
+
const v = sessionStorage.getItem(PARRAINAGE_KEY);
|
|
86
82
|
return v != null && v.length > 0 ? v : null;
|
|
87
83
|
}
|
|
88
84
|
/**
|
|
@@ -95,31 +91,31 @@ class DataAttribution {
|
|
|
95
91
|
return this.lastCapturedAffiliateIsNew;
|
|
96
92
|
}
|
|
97
93
|
captureTrackingParamsFromCurrentUrl(stripFromUrl, currentUrl) {
|
|
98
|
-
const queryParams =
|
|
99
|
-
const source = queryParams
|
|
94
|
+
const queryParams = getQueryParams(currentUrl);
|
|
95
|
+
const source = queryParams?.[this.urlTrackingKey.source];
|
|
100
96
|
let shouldStrip = false;
|
|
101
97
|
// Capture source (session-scoped)
|
|
102
98
|
if (source !== undefined) {
|
|
103
|
-
sessionStorage.setItem(
|
|
99
|
+
sessionStorage.setItem(SOURCE_KEY, String(source).trim());
|
|
104
100
|
shouldStrip = true;
|
|
105
101
|
}
|
|
106
102
|
if (this.urlTrackingKey.parrainageKey || this.urlTrackingKey.affiliateKey) {
|
|
107
103
|
const parrainage = this.urlTrackingKey.parrainageKey
|
|
108
|
-
? queryParams
|
|
104
|
+
? queryParams?.[this.urlTrackingKey.parrainageKey]
|
|
109
105
|
: undefined; // parrainage code
|
|
110
106
|
const affiliate = this.urlTrackingKey.affiliateKey
|
|
111
|
-
? queryParams
|
|
107
|
+
? queryParams?.[this.urlTrackingKey.affiliateKey]
|
|
112
108
|
: undefined; // affiliate code
|
|
113
109
|
shouldStrip = affiliate !== undefined;
|
|
114
110
|
this.capturePartnerParams(parrainage, affiliate);
|
|
115
111
|
}
|
|
116
112
|
// Ensure default source
|
|
117
|
-
if (!sessionStorage.getItem(
|
|
118
|
-
sessionStorage.setItem(
|
|
113
|
+
if (!sessionStorage.getItem(SOURCE_KEY)) {
|
|
114
|
+
sessionStorage.setItem(SOURCE_KEY, SITE_SOURCE.DIRECT);
|
|
119
115
|
}
|
|
120
116
|
// Ensure affiliate key exists in session
|
|
121
|
-
if (!sessionStorage.getItem(
|
|
122
|
-
sessionStorage.setItem(
|
|
117
|
+
if (!sessionStorage.getItem(AFFILIATE_KEY)) {
|
|
118
|
+
sessionStorage.setItem(AFFILIATE_KEY, '');
|
|
123
119
|
}
|
|
124
120
|
// Optionally strip params we consumed
|
|
125
121
|
if (stripFromUrl && shouldStrip) {
|
|
@@ -134,7 +130,7 @@ class DataAttribution {
|
|
|
134
130
|
// Capture affiliate: keep current in session, and record to 1-year history
|
|
135
131
|
if (parrainage !== undefined) {
|
|
136
132
|
const rawParrainage = String(parrainage).trim();
|
|
137
|
-
sessionStorage.setItem(
|
|
133
|
+
sessionStorage.setItem(PARRAINAGE_KEY, rawParrainage);
|
|
138
134
|
}
|
|
139
135
|
}
|
|
140
136
|
if (this.urlTrackingKey.affiliateKey) {
|
|
@@ -142,8 +138,8 @@ class DataAttribution {
|
|
|
142
138
|
this.lastCapturedAffiliateIsNew = false;
|
|
143
139
|
if (affiliate !== undefined) {
|
|
144
140
|
const affiliateRef = String(affiliate).trim();
|
|
145
|
-
sessionStorage.setItem(
|
|
146
|
-
const lc =
|
|
141
|
+
sessionStorage.setItem(AFFILIATE_KEY, affiliateRef);
|
|
142
|
+
const lc = normString(affiliateRef);
|
|
147
143
|
if (lc.length > 0) {
|
|
148
144
|
const isInHistory = this.historyHas(lc);
|
|
149
145
|
this.latestAffiliateCandidate = lc;
|
|
@@ -162,53 +158,52 @@ class DataAttribution {
|
|
|
162
158
|
}
|
|
163
159
|
/* ---------- History (array with TTL in localStorage) ---------- */
|
|
164
160
|
getHistory() {
|
|
165
|
-
const raw = localStorage.getItem(
|
|
161
|
+
const raw = localStorage.getItem(AFFILIATE_HISTORY_KEY);
|
|
166
162
|
if (!raw)
|
|
167
163
|
return [];
|
|
168
164
|
try {
|
|
169
165
|
const parsed = JSON.parse(raw);
|
|
170
166
|
if (!parsed || typeof parsed.e !== 'number' || !Array.isArray(parsed.v)) {
|
|
171
|
-
localStorage.removeItem(
|
|
167
|
+
localStorage.removeItem(AFFILIATE_HISTORY_KEY);
|
|
172
168
|
return [];
|
|
173
169
|
}
|
|
174
170
|
if (Date.now() > parsed.e) {
|
|
175
|
-
localStorage.removeItem(
|
|
171
|
+
localStorage.removeItem(AFFILIATE_HISTORY_KEY);
|
|
176
172
|
return [];
|
|
177
173
|
}
|
|
178
174
|
// Ensure strings + lowercased normalization
|
|
179
|
-
return parsed.v.map((x) =>
|
|
175
|
+
return parsed.v.map((x) => normString(String(x)));
|
|
180
176
|
}
|
|
181
|
-
catch
|
|
182
|
-
localStorage.removeItem(
|
|
177
|
+
catch {
|
|
178
|
+
localStorage.removeItem(AFFILIATE_HISTORY_KEY);
|
|
183
179
|
return [];
|
|
184
180
|
}
|
|
185
181
|
}
|
|
186
182
|
setHistory(arr) {
|
|
187
|
-
const unique = Array.from(new Set(arr.map(
|
|
188
|
-
const payload = { v: unique, e: Date.now() +
|
|
189
|
-
localStorage.setItem(
|
|
183
|
+
const unique = Array.from(new Set(arr.map(normString)));
|
|
184
|
+
const payload = { v: unique, e: Date.now() + ONE_YEAR_MS };
|
|
185
|
+
localStorage.setItem(AFFILIATE_HISTORY_KEY, JSON.stringify(payload));
|
|
190
186
|
}
|
|
191
187
|
historyHas(codeLc) {
|
|
192
|
-
return this.getHistory().includes(
|
|
188
|
+
return this.getHistory().includes(normString(codeLc));
|
|
193
189
|
}
|
|
194
190
|
pushHistory(codeLc) {
|
|
195
191
|
const hist = this.getHistory();
|
|
196
|
-
if (!hist.includes(
|
|
197
|
-
hist.push(
|
|
192
|
+
if (!hist.includes(normString(codeLc))) {
|
|
193
|
+
hist.push(normString(codeLc));
|
|
198
194
|
}
|
|
199
195
|
// Always refresh TTL (rolling 1-year window)
|
|
200
196
|
this.setHistory(hist);
|
|
201
197
|
}
|
|
202
198
|
/** Explicit reset if needed SOURCE_KEY. */
|
|
203
199
|
clearSourceSession() {
|
|
204
|
-
sessionStorage.removeItem(
|
|
200
|
+
sessionStorage.removeItem(SOURCE_KEY);
|
|
205
201
|
}
|
|
206
202
|
clearAffiliateSession() {
|
|
207
|
-
sessionStorage.removeItem(
|
|
203
|
+
sessionStorage.removeItem(AFFILIATE_KEY);
|
|
208
204
|
}
|
|
209
205
|
clearAffiliateHistory() {
|
|
210
|
-
localStorage.removeItem(
|
|
206
|
+
localStorage.removeItem(AFFILIATE_HISTORY_KEY);
|
|
211
207
|
}
|
|
212
208
|
}
|
|
213
|
-
exports.DataAttribution = DataAttribution;
|
|
214
209
|
//# sourceMappingURL=data-attribution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-attribution.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/data-attribution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data-attribution.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/data-attribution.ts"],"names":[],"mappings":"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"}
|
package/src/lib/enums.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SITE_SOURCE = exports.ANALYTICS_ACTION_STATE = exports.ANALYTICS_ACTION = void 0;
|
|
4
1
|
/** Analytics Actions carried out by user to be tracked */
|
|
5
|
-
var ANALYTICS_ACTION;
|
|
2
|
+
export var ANALYTICS_ACTION;
|
|
6
3
|
(function (ANALYTICS_ACTION) {
|
|
7
4
|
ANALYTICS_ACTION["SIGNIN"] = "SIGNIN";
|
|
8
5
|
ANALYTICS_ACTION["REGISTRATION"] = "REGISTRATION";
|
|
@@ -13,9 +10,9 @@ var ANALYTICS_ACTION;
|
|
|
13
10
|
ANALYTICS_ACTION["DEPOSIT"] = "DEPOSIT";
|
|
14
11
|
ANALYTICS_ACTION["VISIT"] = "VISIT";
|
|
15
12
|
ANALYTICS_ACTION["COUPON"] = "COUPON";
|
|
16
|
-
})(ANALYTICS_ACTION || (
|
|
13
|
+
})(ANALYTICS_ACTION || (ANALYTICS_ACTION = {}));
|
|
17
14
|
/** States of analytics actions carried out by user */
|
|
18
|
-
var ANALYTICS_ACTION_STATE;
|
|
15
|
+
export var ANALYTICS_ACTION_STATE;
|
|
19
16
|
(function (ANALYTICS_ACTION_STATE) {
|
|
20
17
|
ANALYTICS_ACTION_STATE["SELECT"] = "SELECT";
|
|
21
18
|
ANALYTICS_ACTION_STATE["UNSELECT"] = "UN_SELECT";
|
|
@@ -23,9 +20,9 @@ var ANALYTICS_ACTION_STATE;
|
|
|
23
20
|
ANALYTICS_ACTION_STATE["SUCCESS"] = "SUCCESS";
|
|
24
21
|
ANALYTICS_ACTION_STATE["FAILURE"] = "FAILURE";
|
|
25
22
|
ANALYTICS_ACTION_STATE["INIT"] = "INIT";
|
|
26
|
-
})(ANALYTICS_ACTION_STATE || (
|
|
23
|
+
})(ANALYTICS_ACTION_STATE || (ANALYTICS_ACTION_STATE = {}));
|
|
27
24
|
/** Source from which the user originates to access the current site. */
|
|
28
|
-
var SITE_SOURCE;
|
|
25
|
+
export var SITE_SOURCE;
|
|
29
26
|
(function (SITE_SOURCE) {
|
|
30
27
|
SITE_SOURCE["FACEBOOK"] = "FACEBOOK";
|
|
31
28
|
SITE_SOURCE["INSTAGRAM"] = "INSTAGRAM";
|
|
@@ -33,5 +30,5 @@ var SITE_SOURCE;
|
|
|
33
30
|
SITE_SOURCE["TELEGRAM"] = "TELEGRAM";
|
|
34
31
|
SITE_SOURCE["DIRECT"] = "DIRECT";
|
|
35
32
|
SITE_SOURCE["SMS"] = "SMS";
|
|
36
|
-
})(SITE_SOURCE || (
|
|
33
|
+
})(SITE_SOURCE || (SITE_SOURCE = {}));
|
|
37
34
|
//# sourceMappingURL=enums.js.map
|
package/src/lib/enums.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/enums.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/enums.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,MAAM,CAAN,IAAY,gBAUX;AAVD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,iDAA6B,CAAA;IAC7B,+BAAW,CAAA;IACX,iCAAa,CAAA;IACb,6CAAyB,CAAA;IACzB,mCAAe,CAAA;IACf,uCAAmB,CAAA;IACnB,mCAAe,CAAA;IACf,qCAAiB,CAAA;AACnB,CAAC,EAVW,gBAAgB,KAAhB,gBAAgB,QAU3B;AAED,uDAAuD;AACvD,MAAM,CAAN,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,2CAAiB,CAAA;IACjB,gDAAsB,CAAA;IACtB,2CAAiB,CAAA;IACjB,6CAAmB,CAAA;IACnB,6CAAmB,CAAA;IACnB,uCAAa,CAAA;AACf,CAAC,EAPW,sBAAsB,KAAtB,sBAAsB,QAOjC;AAED,wEAAwE;AACxE,MAAM,CAAN,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,oCAAqB,CAAA;IACrB,sCAAuB,CAAA;IACvB,kCAAmB,CAAA;IACnB,oCAAqB,CAAA;IACrB,gCAAiB,CAAA;IACjB,0BAAW,CAAA;AACb,CAAC,EAPW,WAAW,KAAX,WAAW,QAOtB"}
|
package/src/lib/event-tracker.js
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const utils_1 = require("./utils");
|
|
10
|
-
const constants_1 = require("./constants");
|
|
11
|
-
class EventTracker {
|
|
1
|
+
import { forkJoin, from, of, Subject } from 'rxjs';
|
|
2
|
+
import { catchError, map, switchMap } from 'rxjs/operators';
|
|
3
|
+
import { WebSocketClient } from './webSocket-client';
|
|
4
|
+
import { DataAttribution } from './data-attribution';
|
|
5
|
+
import { ANALYTICS_ACTION_STATE } from './enums';
|
|
6
|
+
import { userAgentInfo } from './utils';
|
|
7
|
+
import { CONFIG_ENDPOINT, CONFIG_CACHE_KEY, ONE_DAY_MS } from './constants';
|
|
8
|
+
export class EventTracker {
|
|
12
9
|
/**
|
|
13
10
|
* Creates a new analytics tracker instance and initializes the attribution
|
|
14
11
|
* engine and WebSocket connection if tracking is enabled.
|
|
@@ -18,7 +15,7 @@ class EventTracker {
|
|
|
18
15
|
this.ipSubscription = null;
|
|
19
16
|
this.eventSubscription = null;
|
|
20
17
|
this.webSocketConnectedSubscription = null;
|
|
21
|
-
this.analyticsEvents = new
|
|
18
|
+
this.analyticsEvents = new Subject();
|
|
22
19
|
this.analyticsEvents$ = this.analyticsEvents.asObservable();
|
|
23
20
|
/**
|
|
24
21
|
* Internal state map used to track SELECT/UNSELECT status of toggleable actions.
|
|
@@ -34,9 +31,11 @@ class EventTracker {
|
|
|
34
31
|
DEPOSIT: false,
|
|
35
32
|
COUPON: false,
|
|
36
33
|
};
|
|
37
|
-
this.cfg =
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
this.cfg = {
|
|
35
|
+
...config,
|
|
36
|
+
};
|
|
37
|
+
this.ws = new WebSocketClient();
|
|
38
|
+
this.da = new DataAttribution(urlTrackingKey);
|
|
40
39
|
this.init(this.cfg);
|
|
41
40
|
}
|
|
42
41
|
/**
|
|
@@ -74,34 +73,49 @@ class EventTracker {
|
|
|
74
73
|
* @param userId - User identifier
|
|
75
74
|
* @param currentUrl - URL of the page where the action was carried out by the user
|
|
76
75
|
*/
|
|
77
|
-
trackEvent(action, state =
|
|
78
|
-
if (state ===
|
|
79
|
-
const newState = selected
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
trackEvent(action, state = ANALYTICS_ACTION_STATE.SELECT, data = null, toggle = true, selected = null, userId = '', currentUrl = '') {
|
|
77
|
+
if (state === ANALYTICS_ACTION_STATE.SELECT) {
|
|
78
|
+
const newState = selected ??
|
|
79
|
+
(toggle
|
|
80
|
+
? !this.getActionSelectState(action)
|
|
81
|
+
: this.getActionSelectState(action));
|
|
82
82
|
this.setActionSelectState(action, newState);
|
|
83
83
|
state = newState
|
|
84
|
-
?
|
|
85
|
-
:
|
|
84
|
+
? ANALYTICS_ACTION_STATE.SELECT
|
|
85
|
+
: ANALYTICS_ACTION_STATE.UNSELECT;
|
|
86
86
|
}
|
|
87
|
-
else if (state ===
|
|
87
|
+
else if (state === ANALYTICS_ACTION_STATE.UNSELECT) {
|
|
88
88
|
this.setActionSelectState(action, false);
|
|
89
89
|
}
|
|
90
|
-
const { channel, os, browser } =
|
|
91
|
-
const eventTracked =
|
|
92
|
-
|
|
90
|
+
const { channel, os, browser } = userAgentInfo(navigator.userAgent || '');
|
|
91
|
+
const eventTracked = {
|
|
92
|
+
ip: this.da.userIp,
|
|
93
|
+
channel,
|
|
94
|
+
timeStamp: Date.now(),
|
|
95
|
+
source: this.da.source,
|
|
96
|
+
action,
|
|
97
|
+
state,
|
|
98
|
+
uid: userId,
|
|
99
|
+
bid: this.da.browserId,
|
|
100
|
+
brand_id: this.cfg.brand_id,
|
|
101
|
+
meta: {
|
|
93
102
|
os,
|
|
94
103
|
browser,
|
|
95
104
|
page: currentUrl,
|
|
96
|
-
}
|
|
97
|
-
|
|
105
|
+
},
|
|
106
|
+
...(data && { data }),
|
|
107
|
+
...(this.da.affiliate && { affiliateCode: this.da.affiliate }),
|
|
108
|
+
};
|
|
109
|
+
if (this.cfg.mode === 'dev') {
|
|
110
|
+
console.log(eventTracked);
|
|
111
|
+
}
|
|
98
112
|
this.analyticsEvents.next(eventTracked);
|
|
99
113
|
}
|
|
100
114
|
init(cfg) {
|
|
101
115
|
if (cfg.token) {
|
|
102
116
|
const ipFetch$ = this.da.fetchIp();
|
|
103
117
|
const configFetch$ = this.fetchConfig(cfg.token);
|
|
104
|
-
this.ipSubscription =
|
|
118
|
+
this.ipSubscription = forkJoin([ipFetch$, configFetch$]).subscribe(() => {
|
|
105
119
|
this.da.setLoadedIP();
|
|
106
120
|
if (!this.cfg.enableTracking) {
|
|
107
121
|
return;
|
|
@@ -115,7 +129,9 @@ class EventTracker {
|
|
|
115
129
|
}
|
|
116
130
|
else if (cfg.token) {
|
|
117
131
|
// Only log error if we expected to get config via token but failed or got incomplete data
|
|
118
|
-
|
|
132
|
+
if (this.cfg.mode === 'dev') {
|
|
133
|
+
console.error('[Nommos Tracker] Missing connection configuration after bootstrap.');
|
|
134
|
+
}
|
|
119
135
|
}
|
|
120
136
|
if (this.ipSubscription) {
|
|
121
137
|
this.ipSubscription.unsubscribe();
|
|
@@ -126,7 +142,6 @@ class EventTracker {
|
|
|
126
142
|
});
|
|
127
143
|
this.webSocketConnectedSubscription =
|
|
128
144
|
this.ws.stompAnalyticsConnected$.subscribe((connected) => {
|
|
129
|
-
var _a;
|
|
130
145
|
if (connected) {
|
|
131
146
|
// Try to gracefully close on tab unload
|
|
132
147
|
window.addEventListener('beforeunload', () => {
|
|
@@ -134,37 +149,41 @@ class EventTracker {
|
|
|
134
149
|
this.ws.disconnect();
|
|
135
150
|
}
|
|
136
151
|
catch (error) {
|
|
137
|
-
|
|
152
|
+
if (this.cfg.mode === 'dev') {
|
|
153
|
+
console.error('[DME Analytics SDK] disconnect error:', error);
|
|
154
|
+
}
|
|
138
155
|
}
|
|
139
156
|
});
|
|
140
|
-
|
|
157
|
+
this.webSocketConnectedSubscription?.unsubscribe();
|
|
141
158
|
}
|
|
142
159
|
});
|
|
143
160
|
}
|
|
144
161
|
}
|
|
145
162
|
fetchConfig(token) {
|
|
146
163
|
// 1. Check Cache First
|
|
147
|
-
const cached = localStorage.getItem(`${
|
|
164
|
+
const cached = localStorage.getItem(`${CONFIG_CACHE_KEY}:${token}`);
|
|
148
165
|
if (cached) {
|
|
149
166
|
try {
|
|
150
167
|
const { timestamp, data } = JSON.parse(cached);
|
|
151
|
-
if (Date.now() - timestamp <
|
|
152
|
-
|
|
168
|
+
if (Date.now() - timestamp < ONE_DAY_MS) {
|
|
169
|
+
if (this.cfg.mode === 'dev') {
|
|
170
|
+
console.log('[Nommos Tracker] Using cached config');
|
|
171
|
+
}
|
|
153
172
|
this.applyConfig(data);
|
|
154
|
-
return
|
|
173
|
+
return of(null);
|
|
155
174
|
}
|
|
156
175
|
}
|
|
157
176
|
catch (e) {
|
|
158
|
-
localStorage.removeItem(`${
|
|
177
|
+
localStorage.removeItem(`${CONFIG_CACHE_KEY}:${token}`);
|
|
159
178
|
}
|
|
160
179
|
}
|
|
161
|
-
const url = `${
|
|
162
|
-
return
|
|
180
|
+
const url = `${CONFIG_ENDPOINT}/${token}`;
|
|
181
|
+
return from(fetch(url)).pipe(switchMap((res) => {
|
|
163
182
|
if (!res.ok) {
|
|
164
183
|
throw new Error(`Failed to fetch config: ${res.statusText}`);
|
|
165
184
|
}
|
|
166
|
-
return
|
|
167
|
-
}),
|
|
185
|
+
return from(res.json());
|
|
186
|
+
}), map((data) => {
|
|
168
187
|
this.applyConfig(data);
|
|
169
188
|
// 2. Save to Cache on Success
|
|
170
189
|
if (this.cfg.enableTracking !== false) {
|
|
@@ -172,11 +191,13 @@ class EventTracker {
|
|
|
172
191
|
timestamp: Date.now(),
|
|
173
192
|
data
|
|
174
193
|
};
|
|
175
|
-
localStorage.setItem(`${
|
|
194
|
+
localStorage.setItem(`${CONFIG_CACHE_KEY}:${token}`, JSON.stringify(cachePayload));
|
|
195
|
+
}
|
|
196
|
+
}), catchError((err) => {
|
|
197
|
+
if (this.cfg.mode === 'dev') {
|
|
198
|
+
console.error('[Nommos Tracker] Error fetching from the endpoint:', err);
|
|
176
199
|
}
|
|
177
|
-
|
|
178
|
-
console.error('[Nommos Tracker] Error fetching from the endpoint:', err);
|
|
179
|
-
return (0, rxjs_1.of)(null);
|
|
200
|
+
return of(null);
|
|
180
201
|
}));
|
|
181
202
|
}
|
|
182
203
|
applyConfig(data) {
|
|
@@ -184,7 +205,9 @@ class EventTracker {
|
|
|
184
205
|
return;
|
|
185
206
|
this.cfg.enableTracking = data.enabled !== false;
|
|
186
207
|
if (this.cfg.enableTracking === false) {
|
|
187
|
-
|
|
208
|
+
if (this.cfg.mode === 'dev') {
|
|
209
|
+
console.warn('[Nommos Tracker] the events tracking feature is disabled for your token.');
|
|
210
|
+
}
|
|
188
211
|
return;
|
|
189
212
|
}
|
|
190
213
|
this.cfg.rabbitUrl = data.rabbit_url;
|
|
@@ -193,11 +216,9 @@ class EventTracker {
|
|
|
193
216
|
this.cfg.brand_id = data.brand_id;
|
|
194
217
|
}
|
|
195
218
|
unsubscribe() {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
(_c = this.webSocketConnectedSubscription) === null || _c === void 0 ? void 0 : _c.unsubscribe();
|
|
219
|
+
this.ipSubscription?.unsubscribe();
|
|
220
|
+
this.eventSubscription?.unsubscribe();
|
|
221
|
+
this.webSocketConnectedSubscription?.unsubscribe();
|
|
200
222
|
}
|
|
201
223
|
}
|
|
202
|
-
exports.EventTracker = EventTracker;
|
|
203
224
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"event-tracker.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/event-tracker.ts"],"names":[],"mappings":"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"}
|
package/src/lib/types.js
CHANGED
package/src/lib/utils.js
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.userAgentInfo = exports.normString = void 0;
|
|
4
|
-
exports.getQueryParams = getQueryParams;
|
|
5
|
-
const constants_1 = require("./constants");
|
|
1
|
+
import { BROWSER_DEFS, OS_DEFS } from './constants';
|
|
6
2
|
/**
|
|
7
3
|
* Gets all the query parameters found on a given url
|
|
8
4
|
*
|
|
9
5
|
* @param url - the url from which we want to get the query parameters from
|
|
10
6
|
* @returns A record of query parameters' name and value
|
|
11
7
|
*/
|
|
12
|
-
function getQueryParams(url) {
|
|
8
|
+
export function getQueryParams(url) {
|
|
13
9
|
const params = {};
|
|
14
10
|
const urlObj = new URL(url);
|
|
15
11
|
urlObj.searchParams.forEach((value, key) => {
|
|
@@ -26,19 +22,17 @@ function getQueryParams(url) {
|
|
|
26
22
|
* @param s - string to convert
|
|
27
23
|
* @returns normalized string in lowerCase and no trailing space.
|
|
28
24
|
*/
|
|
29
|
-
const normString = (s) => s.trim().toLowerCase();
|
|
30
|
-
exports.normString = normString;
|
|
25
|
+
export const normString = (s) => s.trim().toLowerCase();
|
|
31
26
|
/**
|
|
32
27
|
* Extract the browser, the operating system and the channel (3 or 7) from the user agent of a device
|
|
33
28
|
* @param ua - User Agent of the device
|
|
34
29
|
* @returns An Object with the browser, operating system and the channel used by the user agent.
|
|
35
30
|
*/
|
|
36
|
-
const userAgentInfo = (ua) => ({
|
|
37
|
-
browser: detect(ua,
|
|
38
|
-
os: detect(ua,
|
|
31
|
+
export const userAgentInfo = (ua) => ({
|
|
32
|
+
browser: detect(ua, BROWSER_DEFS),
|
|
33
|
+
os: detect(ua, OS_DEFS),
|
|
39
34
|
channel: /Mobi|Android|iPhone|iPad|iPod|Windows Phone/i.test(ua) ? 3 : 7,
|
|
40
35
|
});
|
|
41
|
-
exports.userAgentInfo = userAgentInfo;
|
|
42
36
|
const detect = (ua, defs, fallback = 'Unknown') => {
|
|
43
37
|
for (const [re, name, map] of defs) {
|
|
44
38
|
const m = new RegExp(re).exec(ua);
|
package/src/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAIpD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAE5B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACzC,iCAAiC;QACjC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAEhE;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,EAAU,EACuC,EAAE,CAAC,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC;IACjC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,8CAA8C,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACzE,CAAC,CAAC;AACH,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,IAAa,EAAE,QAAQ,GAAG,SAAS,EAAU,EAAE;IACzE,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -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.
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const stompjs_1 = require("@stomp/stompjs");
|
|
5
|
-
const rxjs_1 = require("rxjs");
|
|
6
|
-
const constants_1 = require("./constants");
|
|
1
|
+
import { Client } from '@stomp/stompjs';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { ANALYTICS_QUEUE } from './constants';
|
|
7
4
|
/**
|
|
8
5
|
* WebSocketClient
|
|
9
6
|
* ----------------
|
|
@@ -17,19 +14,20 @@ const constants_1 = require("./constants");
|
|
|
17
14
|
* Intended to be used inside applications where analytics events must
|
|
18
15
|
* never be lost due to temporary connection issues.
|
|
19
16
|
*/
|
|
20
|
-
class WebSocketClient {
|
|
17
|
+
export class WebSocketClient {
|
|
21
18
|
constructor() {
|
|
22
19
|
/**
|
|
23
20
|
* The underlying STOMP client instance.
|
|
24
21
|
* Initialized in `connectAnalyticsStomp()`.
|
|
25
22
|
*/
|
|
26
23
|
this.analyticsClient = null;
|
|
24
|
+
this.cfg = null;
|
|
27
25
|
/**
|
|
28
26
|
* Buffer containing analytics events produced before the socket
|
|
29
27
|
* becomes connected. They are automatically flushed on connection.
|
|
30
28
|
*/
|
|
31
29
|
this.pendingEvents = [];
|
|
32
|
-
this.stompAnalyticsConnected = new
|
|
30
|
+
this.stompAnalyticsConnected = new BehaviorSubject(false);
|
|
33
31
|
/**
|
|
34
32
|
* Reactive connection state for consumers who want to listen for
|
|
35
33
|
* connection availability changes.
|
|
@@ -46,15 +44,13 @@ class WebSocketClient {
|
|
|
46
44
|
* @returns A configured but not yet activated STOMP `Client` instance.
|
|
47
45
|
*/
|
|
48
46
|
createStompClient(cfg) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const client = new stompjs_1.Client({
|
|
52
|
-
brokerURL: (_a = cfg.rabbitUrl) !== null && _a !== void 0 ? _a : '',
|
|
47
|
+
const client = new Client({
|
|
48
|
+
brokerURL: cfg.rabbitUrl ?? '',
|
|
53
49
|
connectHeaders: {
|
|
54
|
-
login:
|
|
55
|
-
passcode:
|
|
50
|
+
login: cfg.username ?? '',
|
|
51
|
+
passcode: cfg.password ?? '',
|
|
56
52
|
},
|
|
57
|
-
reconnectDelay:
|
|
53
|
+
reconnectDelay: cfg.reconnectDelay ?? 5000,
|
|
58
54
|
});
|
|
59
55
|
if (cfg.mode === 'dev') {
|
|
60
56
|
client.debug = (msg) => console.log('[Nommos Tracker]', msg);
|
|
@@ -78,9 +74,12 @@ class WebSocketClient {
|
|
|
78
74
|
* @param cfg Configuration including URL, credentials, mode etc.
|
|
79
75
|
*/
|
|
80
76
|
connectAnalyticsStomp(cfg) {
|
|
77
|
+
this.cfg = cfg;
|
|
81
78
|
this.analyticsClient = this.createStompClient(cfg);
|
|
82
79
|
this.analyticsClient.onConnect = () => {
|
|
83
|
-
|
|
80
|
+
if (this.cfg?.mode === 'dev') {
|
|
81
|
+
console.log('[Nommos Tracker] Connected');
|
|
82
|
+
}
|
|
84
83
|
this.stompAnalyticsConnected.next(true);
|
|
85
84
|
// flush pending events
|
|
86
85
|
for (const m of this.pendingEvents) {
|
|
@@ -89,9 +88,13 @@ class WebSocketClient {
|
|
|
89
88
|
this.pendingEvents = [];
|
|
90
89
|
};
|
|
91
90
|
this.analyticsClient.onStompError = (frame) => {
|
|
92
|
-
|
|
91
|
+
if (this.cfg?.mode === 'dev') {
|
|
92
|
+
console.error('[Nommos Tracker] Broker error:', frame.headers['message']);
|
|
93
|
+
}
|
|
93
94
|
};
|
|
94
|
-
|
|
95
|
+
if (this.cfg?.mode === 'dev') {
|
|
96
|
+
console.log('[Nommos Tracker] Activating STOMP client...');
|
|
97
|
+
}
|
|
95
98
|
this.analyticsClient.activate();
|
|
96
99
|
}
|
|
97
100
|
/**
|
|
@@ -103,13 +106,12 @@ class WebSocketClient {
|
|
|
103
106
|
* @param payload The analytics event to send.
|
|
104
107
|
*/
|
|
105
108
|
publishAnalyticsMessage(payload) {
|
|
106
|
-
|
|
107
|
-
if (!((_a = this.analyticsClient) === null || _a === void 0 ? void 0 : _a.connected) || this.analyticsClient == null) {
|
|
109
|
+
if (!this.analyticsClient?.connected || this.analyticsClient == null) {
|
|
108
110
|
this.pendingEvents.push(payload);
|
|
109
111
|
return;
|
|
110
112
|
}
|
|
111
113
|
this.analyticsClient.publish({
|
|
112
|
-
destination:
|
|
114
|
+
destination: ANALYTICS_QUEUE,
|
|
113
115
|
headers: { 'content-type': 'application/json' },
|
|
114
116
|
body: JSON.stringify(payload),
|
|
115
117
|
});
|
|
@@ -123,10 +125,11 @@ class WebSocketClient {
|
|
|
123
125
|
if (this.analyticsClient) {
|
|
124
126
|
this.analyticsClient.deactivate().then(() => {
|
|
125
127
|
this.stompAnalyticsConnected.next(false);
|
|
126
|
-
|
|
128
|
+
if (this.cfg?.mode === 'dev') {
|
|
129
|
+
console.log('[Nommos Tracker] Disconnected');
|
|
130
|
+
}
|
|
127
131
|
});
|
|
128
132
|
}
|
|
129
133
|
}
|
|
130
134
|
}
|
|
131
|
-
exports.WebSocketClient = WebSocketClient;
|
|
132
135
|
//# sourceMappingURL=webSocket-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webSocket-client.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/webSocket-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webSocket-client.js","sourceRoot":"","sources":["../../../../../nommos/core/src/lib/webSocket-client.ts"],"names":[],"mappings":"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"}
|