@mparticle/web-sdk 2.51.0 → 2.53.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 +1 -1
- package/dist/mparticle.common.js +51 -22
- package/dist/mparticle.esm.js +51 -22
- package/dist/mparticle.js +338 -114
- package/package.json +1 -1
- package/src/batchUploader.ts +3 -3
- package/src/cookieConsentManager.ts +64 -0
- package/src/cookieSyncManager.ts +22 -2
- package/src/identity.interfaces.ts +5 -2
- package/src/identity.js +3 -1
- package/src/identityApiClient.ts +11 -12
- package/src/logger.ts +66 -0
- package/src/mp-instance.ts +8 -1
- package/src/mparticle-instance-manager.ts +2 -2
- package/src/roktManager.ts +97 -7
- package/src/sdkRuntimeModels.ts +9 -1
- package/src/sessionManager.ts +45 -40
- package/src/store.ts +1 -0
- package/src/stub/mparticle.stub.js +1 -0
- package/src/utils.ts +13 -3
- package/src/logger.js +0 -61
package/src/sessionManager.ts
CHANGED
|
@@ -33,31 +33,24 @@ export default function SessionManager(
|
|
|
33
33
|
|
|
34
34
|
this.initialize = function (): void {
|
|
35
35
|
if (mpInstance._Store.sessionId) {
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (
|
|
40
|
-
new Date() >
|
|
41
|
-
new Date(
|
|
42
|
-
mpInstance._Store.dateLastEventSent.getTime() +
|
|
43
|
-
sessionTimeoutInMilliseconds
|
|
44
|
-
)
|
|
45
|
-
) {
|
|
36
|
+
const { dateLastEventSent, SDKConfig } = mpInstance._Store;
|
|
37
|
+
const { sessionTimeout } = SDKConfig;
|
|
38
|
+
|
|
39
|
+
if (hasSessionTimedOut(dateLastEventSent?.getTime(), sessionTimeout)) {
|
|
46
40
|
self.endSession();
|
|
47
41
|
self.startNewSession();
|
|
48
42
|
} else {
|
|
49
43
|
// https://go.mparticle.com/work/SQDSDKS-6045
|
|
50
44
|
// https://go.mparticle.com/work/SQDSDKS-6323
|
|
51
45
|
const currentUser = mpInstance.Identity.getCurrentUser();
|
|
52
|
-
const sdkIdentityRequest =
|
|
53
|
-
mpInstance._Store.SDKConfig.identifyRequest;
|
|
46
|
+
const sdkIdentityRequest = SDKConfig.identifyRequest;
|
|
54
47
|
|
|
55
48
|
if (
|
|
56
49
|
hasIdentityRequestChanged(currentUser, sdkIdentityRequest)
|
|
57
50
|
) {
|
|
58
51
|
mpInstance.Identity.identify(
|
|
59
|
-
|
|
60
|
-
|
|
52
|
+
sdkIdentityRequest,
|
|
53
|
+
SDKConfig.identityCallback
|
|
61
54
|
);
|
|
62
55
|
mpInstance._Store.identifyCalled = true;
|
|
63
56
|
mpInstance._Store.SDKConfig.identityCallback = null;
|
|
@@ -134,12 +127,7 @@ export default function SessionManager(
|
|
|
134
127
|
);
|
|
135
128
|
|
|
136
129
|
if (override) {
|
|
137
|
-
|
|
138
|
-
messageType: Types.MessageType.SessionEnd,
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
mpInstance._Store.nullifySession();
|
|
142
|
-
mpInstance._timeOnSiteTimer?.resetTimer();
|
|
130
|
+
performSessionEnd();
|
|
143
131
|
return;
|
|
144
132
|
}
|
|
145
133
|
|
|
@@ -152,13 +140,9 @@ export default function SessionManager(
|
|
|
152
140
|
Messages.InformationMessages.AbandonEndSession
|
|
153
141
|
);
|
|
154
142
|
mpInstance._timeOnSiteTimer?.resetTimer();
|
|
155
|
-
|
|
156
143
|
return;
|
|
157
144
|
}
|
|
158
145
|
|
|
159
|
-
let sessionTimeoutInMilliseconds: number;
|
|
160
|
-
let timeSinceLastEventSent: number;
|
|
161
|
-
|
|
162
146
|
const cookies: IPersistenceMinified =
|
|
163
147
|
mpInstance._Persistence.getPersistence();
|
|
164
148
|
|
|
@@ -167,7 +151,6 @@ export default function SessionManager(
|
|
|
167
151
|
Messages.InformationMessages.NoSessionToEnd
|
|
168
152
|
);
|
|
169
153
|
mpInstance._timeOnSiteTimer?.resetTimer();
|
|
170
|
-
|
|
171
154
|
return;
|
|
172
155
|
}
|
|
173
156
|
|
|
@@ -177,24 +160,15 @@ export default function SessionManager(
|
|
|
177
160
|
}
|
|
178
161
|
|
|
179
162
|
if (cookies?.gs?.les) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if (timeSinceLastEventSent < sessionTimeoutInMilliseconds) {
|
|
186
|
-
self.setSessionTimer();
|
|
163
|
+
const sessionTimeout = mpInstance._Store.SDKConfig.sessionTimeout;
|
|
164
|
+
|
|
165
|
+
if (hasSessionTimedOut(cookies.gs.les, sessionTimeout)) {
|
|
166
|
+
performSessionEnd();
|
|
187
167
|
} else {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
mpInstance._Store.sessionStartDate = null;
|
|
193
|
-
mpInstance._Store.nullifySession();
|
|
168
|
+
self.setSessionTimer();
|
|
169
|
+
mpInstance._timeOnSiteTimer?.resetTimer();
|
|
194
170
|
}
|
|
195
171
|
}
|
|
196
|
-
|
|
197
|
-
mpInstance._timeOnSiteTimer?.resetTimer();
|
|
198
172
|
};
|
|
199
173
|
|
|
200
174
|
this.setSessionTimer = function (): void {
|
|
@@ -234,4 +208,35 @@ export default function SessionManager(
|
|
|
234
208
|
}
|
|
235
209
|
}
|
|
236
210
|
};
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Checks if the session has expired based on the last event timestamp
|
|
214
|
+
* @param lastEventTimestamp - Unix timestamp in milliseconds of the last event
|
|
215
|
+
* @param sessionTimeout - Session timeout in minutes
|
|
216
|
+
* @returns true if the session has expired, false otherwise
|
|
217
|
+
*/
|
|
218
|
+
function hasSessionTimedOut(lastEventTimestamp: number, sessionTimeout: number): boolean {
|
|
219
|
+
if (!lastEventTimestamp || !sessionTimeout || sessionTimeout <= 0) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const sessionTimeoutInMilliseconds: number = sessionTimeout * 60000;
|
|
224
|
+
const timeSinceLastEvent: number = Date.now() - lastEventTimestamp;
|
|
225
|
+
|
|
226
|
+
return timeSinceLastEvent >= sessionTimeoutInMilliseconds;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Performs session end operations:
|
|
231
|
+
* - Logs a SessionEnd event
|
|
232
|
+
* - Nullifies the session ID and related data
|
|
233
|
+
* - Resets the time-on-site timer
|
|
234
|
+
*/
|
|
235
|
+
function performSessionEnd(): void {
|
|
236
|
+
mpInstance._Events.logEvent({
|
|
237
|
+
messageType: Types.MessageType.SessionEnd,
|
|
238
|
+
});
|
|
239
|
+
mpInstance._Store.nullifySession();
|
|
240
|
+
mpInstance._timeOnSiteTimer?.resetTimer();
|
|
241
|
+
}
|
|
237
242
|
}
|
package/src/store.ts
CHANGED
|
@@ -683,6 +683,7 @@ export default function Store(
|
|
|
683
683
|
this.nullifySession = (): void => {
|
|
684
684
|
this.sessionId = null;
|
|
685
685
|
this.dateLastEventSent = null;
|
|
686
|
+
this.sessionStartDate = null;
|
|
686
687
|
this.sessionAttributes = {};
|
|
687
688
|
this.localSessionAttributes = {};
|
|
688
689
|
mpInstance._Persistence.update();
|
package/src/utils.ts
CHANGED
|
@@ -206,18 +206,28 @@ const replaceAmpWithAmpersand = (value: string): string => value.replace(/&/
|
|
|
206
206
|
const createCookieSyncUrl = (
|
|
207
207
|
mpid: MPID,
|
|
208
208
|
pixelUrl: string,
|
|
209
|
-
redirectUrl?: string
|
|
209
|
+
redirectUrl?: string,
|
|
210
|
+
domain?: string
|
|
210
211
|
): string => {
|
|
211
212
|
const modifiedPixelUrl = replaceAmpWithAmpersand(pixelUrl);
|
|
212
213
|
const modifiedDirectUrl = redirectUrl
|
|
213
214
|
? replaceAmpWithAmpersand(redirectUrl)
|
|
214
215
|
: null;
|
|
215
216
|
|
|
216
|
-
|
|
217
|
+
let url = replaceMPID(modifiedPixelUrl, mpid);
|
|
218
|
+
|
|
217
219
|
const redirect = modifiedDirectUrl
|
|
218
220
|
? replaceMPID(modifiedDirectUrl, mpid)
|
|
219
221
|
: '';
|
|
220
|
-
|
|
222
|
+
|
|
223
|
+
let fullUrl = url + encodeURIComponent(redirect);
|
|
224
|
+
|
|
225
|
+
if (domain) {
|
|
226
|
+
const separator = fullUrl.includes('?') ? '&' : '?';
|
|
227
|
+
fullUrl += `${separator}domain=${domain}`;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return fullUrl;
|
|
221
231
|
};
|
|
222
232
|
|
|
223
233
|
// FIXME: REFACTOR for V3
|
package/src/logger.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
function Logger(config) {
|
|
2
|
-
var self = this;
|
|
3
|
-
var logLevel = config.logLevel || 'warning';
|
|
4
|
-
if (config.hasOwnProperty('logger')) {
|
|
5
|
-
this.logger = config.logger;
|
|
6
|
-
} else {
|
|
7
|
-
this.logger = new ConsoleLogger();
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
this.verbose = function(msg) {
|
|
11
|
-
if (logLevel !== 'none') {
|
|
12
|
-
if (self.logger.verbose && logLevel === 'verbose') {
|
|
13
|
-
self.logger.verbose(msg);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
this.warning = function(msg) {
|
|
19
|
-
if (logLevel !== 'none') {
|
|
20
|
-
if (
|
|
21
|
-
self.logger.warning &&
|
|
22
|
-
(logLevel === 'verbose' || logLevel === 'warning')
|
|
23
|
-
) {
|
|
24
|
-
self.logger.warning(msg);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
this.error = function(msg) {
|
|
30
|
-
if (logLevel !== 'none') {
|
|
31
|
-
if (self.logger.error) {
|
|
32
|
-
self.logger.error(msg);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
this.setLogLevel = function(newLogLevel) {
|
|
38
|
-
logLevel = newLogLevel;
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function ConsoleLogger() {
|
|
43
|
-
this.verbose = function(msg) {
|
|
44
|
-
if (console && console.info) {
|
|
45
|
-
console.info(msg);
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
this.error = function(msg) {
|
|
50
|
-
if (console && console.error) {
|
|
51
|
-
console.error(msg);
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
this.warning = function(msg) {
|
|
55
|
-
if (console && console.warn) {
|
|
56
|
-
console.warn(msg);
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export default Logger;
|