@cloudcare/browser-core 3.2.4 → 3.2.7

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.
Files changed (67) hide show
  1. package/cjs/browser/cookie.js +14 -9
  2. package/cjs/browser/cookie.js.map +1 -1
  3. package/cjs/configuration/configuration.js +3 -24
  4. package/cjs/configuration/configuration.js.map +1 -1
  5. package/cjs/index.js +90 -41
  6. package/cjs/index.js.map +1 -1
  7. package/cjs/init.js +0 -19
  8. package/cjs/init.js.map +1 -1
  9. package/cjs/session/sessionConstants.js +3 -1
  10. package/cjs/session/sessionConstants.js.map +1 -1
  11. package/cjs/session/sessionInCookie.js +59 -0
  12. package/cjs/session/sessionInCookie.js.map +1 -0
  13. package/cjs/session/sessionInLocalStorage.js +44 -0
  14. package/cjs/session/sessionInLocalStorage.js.map +1 -0
  15. package/cjs/session/sessionManagement.js +38 -31
  16. package/cjs/session/sessionManagement.js.map +1 -1
  17. package/cjs/session/sessionState.js +73 -0
  18. package/cjs/session/sessionState.js.map +1 -0
  19. package/cjs/session/sessionStore.js +113 -90
  20. package/cjs/session/sessionStore.js.map +1 -1
  21. package/cjs/session/sessionStoreOperations.js +117 -0
  22. package/cjs/session/sessionStoreOperations.js.map +1 -0
  23. package/esm/browser/cookie.js +15 -8
  24. package/esm/browser/cookie.js.map +1 -1
  25. package/esm/configuration/configuration.js +3 -23
  26. package/esm/configuration/configuration.js.map +1 -1
  27. package/esm/index.js +3 -4
  28. package/esm/index.js.map +1 -1
  29. package/esm/init.js +0 -19
  30. package/esm/init.js.map +1 -1
  31. package/esm/session/sessionConstants.js +1 -0
  32. package/esm/session/sessionConstants.js.map +1 -1
  33. package/esm/session/sessionInCookie.js +51 -0
  34. package/esm/session/sessionInCookie.js.map +1 -0
  35. package/esm/session/sessionInLocalStorage.js +37 -0
  36. package/esm/session/sessionInLocalStorage.js.map +1 -0
  37. package/esm/session/sessionManagement.js +35 -28
  38. package/esm/session/sessionManagement.js.map +1 -1
  39. package/esm/session/sessionState.js +59 -0
  40. package/esm/session/sessionState.js.map +1 -0
  41. package/esm/session/sessionStore.js +113 -90
  42. package/esm/session/sessionStore.js.map +1 -1
  43. package/esm/session/sessionStoreOperations.js +108 -0
  44. package/esm/session/sessionStoreOperations.js.map +1 -0
  45. package/package.json +2 -2
  46. package/src/browser/cookie.js +23 -11
  47. package/src/configuration/configuration.js +8 -32
  48. package/src/index.js +9 -4
  49. package/src/init.js +0 -19
  50. package/src/session/sessionConstants.js +1 -0
  51. package/src/session/sessionInCookie.js +87 -0
  52. package/src/session/sessionInLocalStorage.js +45 -0
  53. package/src/session/sessionManagement.js +48 -36
  54. package/src/session/sessionState.js +72 -0
  55. package/src/session/sessionStore.js +163 -108
  56. package/src/session/sessionStoreOperations.js +134 -0
  57. package/types/index.d.ts +4 -0
  58. package/cjs/session/sessionCookieStore.js +0 -156
  59. package/cjs/session/sessionCookieStore.js.map +0 -1
  60. package/cjs/synthetics/usr.js +0 -26
  61. package/cjs/synthetics/usr.js.map +0 -1
  62. package/esm/session/sessionCookieStore.js +0 -142
  63. package/esm/session/sessionCookieStore.js.map +0 -1
  64. package/esm/synthetics/usr.js +0 -17
  65. package/esm/synthetics/usr.js.map +0 -1
  66. package/src/session/sessionCookieStore.js +0 -169
  67. package/src/synthetics/usr.js +0 -18
@@ -4,152 +4,175 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.STORAGE_POLL_DELAY = void 0;
7
+ exports.selectSessionStoreStrategyType = selectSessionStoreStrategyType;
7
8
  exports.startSessionStore = startSessionStore;
8
- var _cookie = require("../browser/cookie");
9
+ var _timer = require("../helper/timer");
9
10
  var _observable = require("../helper/observable");
10
11
  var _tools = require("../helper/tools");
11
- var _sessionConstants = require("./sessionConstants");
12
- var _sessionCookieStore = require("./sessionCookieStore");
13
- var _timer = require("../helper/timer");
12
+ var _sessionInCookie = require("./sessionInCookie");
13
+ var _sessionState = require("./sessionState");
14
+ var _sessionInLocalStorage = require("./sessionInLocalStorage");
15
+ var _sessionStoreOperations = require("./sessionStoreOperations");
16
+ /**
17
+ * Every second, the storage will be polled to check for any change that can occur
18
+ * to the session state in another browser tab, or another window.
19
+ * This value has been determined from our previous cookie-only implementation.
20
+ */
14
21
  var STORAGE_POLL_DELAY = _tools.ONE_SECOND;
22
+
23
+ /**
24
+ * Checks if cookies are available as the preferred storage
25
+ * Else, checks if LocalStorage is allowed and available
26
+ */
27
+ exports.STORAGE_POLL_DELAY = STORAGE_POLL_DELAY;
28
+ function selectSessionStoreStrategyType(initConfiguration) {
29
+ var sessionStoreStrategyType = (0, _sessionInCookie.selectCookieStrategy)(initConfiguration);
30
+ if (!sessionStoreStrategyType && initConfiguration.allowFallbackToLocalStorage) {
31
+ sessionStoreStrategyType = (0, _sessionInLocalStorage.selectLocalStorageStrategy)();
32
+ }
33
+ return sessionStoreStrategyType;
34
+ }
35
+
15
36
  /**
16
37
  * Different session concepts:
17
38
  * - tracked, the session has an id and is updated along the user navigation
18
39
  * - not tracked, the session does not have an id but it is updated along the user navigation
19
40
  * - inactive, no session in store or session expired, waiting for a renew session
20
41
  */
21
- exports.STORAGE_POLL_DELAY = STORAGE_POLL_DELAY;
22
- function startSessionStore(options, productKey, computeSessionState) {
42
+ function startSessionStore(sessionStoreStrategyType, productKey, computeSessionState) {
23
43
  var renewObservable = new _observable.Observable();
24
44
  var expireObservable = new _observable.Observable();
45
+ var sessionStateUpdateObservable = new _observable.Observable();
46
+ var sessionStoreStrategy = sessionStoreStrategyType.type === 'Cookie' ? (0, _sessionInCookie.initCookieStrategy)(sessionStoreStrategyType.cookieOptions) : (0, _sessionInLocalStorage.initLocalStorageStrategy)();
47
+ var expireSession = sessionStoreStrategy.expireSession;
25
48
  var watchSessionTimeoutId = (0, _timer.setInterval)(watchSession, STORAGE_POLL_DELAY);
26
- var sessionCache = retrieveActiveSession();
27
- var _throttleExpandOrRenewSession = (0, _tools.throttle)(function () {
28
- var isTracked;
29
- (0, _sessionCookieStore.withCookieLockAccess)({
30
- options: options,
31
- process: function process(cookieSession) {
32
- var synchronizedSession = synchronizeSession(cookieSession);
33
- isTracked = expandOrRenewCookie(synchronizedSession);
34
- return synchronizedSession;
35
- },
36
- after: function after(cookieSession) {
37
- if (isTracked && !hasSessionInCache()) {
38
- renewSession(cookieSession);
49
+ var sessionCache;
50
+ startSession();
51
+ var _throttle = (0, _tools.throttle)(function () {
52
+ (0, _sessionStoreOperations.processSessionStoreOperations)({
53
+ process: function process(sessionState) {
54
+ if ((0, _sessionState.isSessionInNotStartedState)(sessionState)) {
55
+ return;
56
+ }
57
+ var synchronizedSession = synchronizeSession(sessionState);
58
+ expandOrRenewSessionState(synchronizedSession);
59
+ return synchronizedSession;
60
+ },
61
+ after: function after(sessionState) {
62
+ if ((0, _sessionState.isSessionStarted)(sessionState) && !hasSessionInCache()) {
63
+ renewSessionInCache(sessionState);
64
+ }
65
+ sessionCache = sessionState;
39
66
  }
40
- sessionCache = cookieSession;
41
- }
42
- });
43
- }, STORAGE_POLL_DELAY);
44
- var throttledExpandOrRenewSession = _throttleExpandOrRenewSession.throttled;
45
- var cancelExpandOrRenewSession = _throttleExpandOrRenewSession.cancel;
46
- // function expandOrRenewSession() {
47
- // var isTracked
48
- // withCookieLockAccess({
49
- // options: options,
50
- // process: function (cookieSession) {
51
- // var synchronizedSession = synchronizeSession(cookieSession)
52
- // isTracked = expandOrRenewCookie(synchronizedSession)
53
- // return synchronizedSession
54
- // },
55
- // after: function (cookieSession) {
56
- // if (isTracked && !hasSessionInCache()) {
57
- // renewSession(cookieSession)
58
- // }
59
- // sessionCache = cookieSession
60
- // }
61
- // })
62
- // }
63
-
67
+ }, sessionStoreStrategy);
68
+ }, STORAGE_POLL_DELAY),
69
+ throttledExpandOrRenewSession = _throttle.throttled,
70
+ cancelExpandOrRenewSession = _throttle.cancel;
64
71
  function expandSession() {
65
- (0, _sessionCookieStore.withCookieLockAccess)({
66
- options: options,
67
- process: function process(cookieSession) {
68
- return hasSessionInCache() ? synchronizeSession(cookieSession) : undefined;
72
+ (0, _sessionStoreOperations.processSessionStoreOperations)({
73
+ process: function process(sessionState) {
74
+ return hasSessionInCache() ? synchronizeSession(sessionState) : undefined;
69
75
  }
70
- });
76
+ }, sessionStoreStrategy);
71
77
  }
72
78
 
73
79
  /**
74
80
  * allows two behaviors:
75
- * - if the session is active, synchronize the session cache without updating the session cookie
76
- * - if the session is not active, clear the session cookie and expire the session cache
81
+ * - if the session is active, synchronize the session cache without updating the session store
82
+ * - if the session is not active, clear the session store and expire the session cache
77
83
  */
78
84
  function watchSession() {
79
- (0, _sessionCookieStore.withCookieLockAccess)({
80
- options: options,
81
- process: function process(cookieSession) {
82
- return !isActiveSession(cookieSession) ? {} : undefined;
85
+ (0, _sessionStoreOperations.processSessionStoreOperations)({
86
+ process: function process(sessionState) {
87
+ return (0, _sessionState.isSessionInExpiredState)(sessionState) ? (0, _sessionState.getExpiredSessionState)() : undefined;
83
88
  },
84
89
  after: synchronizeSession
85
- });
90
+ }, sessionStoreStrategy);
86
91
  }
87
- function synchronizeSession(cookieSession) {
88
- if (!isActiveSession(cookieSession)) {
89
- cookieSession = {};
92
+ function synchronizeSession(sessionState) {
93
+ if ((0, _sessionState.isSessionInExpiredState)(sessionState)) {
94
+ sessionState = (0, _sessionState.getExpiredSessionState)();
90
95
  }
91
96
  if (hasSessionInCache()) {
92
- if (isSessionInCacheOutdated(cookieSession)) {
97
+ if (isSessionInCacheOutdated(sessionState)) {
93
98
  expireSessionInCache();
94
99
  } else {
95
- sessionCache = cookieSession;
100
+ sessionStateUpdateObservable.notify({
101
+ previousState: sessionCache,
102
+ newState: sessionState
103
+ });
104
+ sessionCache = sessionState;
96
105
  }
97
106
  }
98
- return cookieSession;
107
+ return sessionState;
99
108
  }
100
- function expandOrRenewCookie(cookieSession) {
101
- var sessionState = computeSessionState(cookieSession[productKey]);
102
- var trackingType = sessionState.trackingType;
103
- var isTracked = sessionState.isTracked;
104
- cookieSession[productKey] = trackingType;
105
- if (isTracked && !cookieSession.id) {
106
- cookieSession.id = (0, _tools.UUID)();
107
- cookieSession.created = String((0, _tools.dateNow)());
109
+ function startSession() {
110
+ (0, _sessionStoreOperations.processSessionStoreOperations)({
111
+ process: function process(sessionState) {
112
+ if ((0, _sessionState.isSessionInNotStartedState)(sessionState)) {
113
+ return (0, _sessionState.getExpiredSessionState)();
114
+ }
115
+ },
116
+ after: function after(sessionState) {
117
+ sessionCache = sessionState;
118
+ }
119
+ }, sessionStoreStrategy);
120
+ }
121
+ function expandOrRenewSessionState(sessionState) {
122
+ if ((0, _sessionState.isSessionInNotStartedState)(sessionState)) {
123
+ return false;
124
+ }
125
+ var _computeSessionState = computeSessionState(sessionState[productKey]),
126
+ trackingType = _computeSessionState.trackingType,
127
+ isTracked = _computeSessionState.isTracked;
128
+ sessionState[productKey] = trackingType;
129
+ delete sessionState.isExpired;
130
+ if (isTracked && !sessionState.id) {
131
+ sessionState.id = (0, _tools.UUID)();
132
+ sessionState.created = String((0, _tools.dateNow)());
108
133
  }
109
- return isTracked;
110
134
  }
111
135
  function hasSessionInCache() {
112
136
  return sessionCache[productKey] !== undefined;
113
137
  }
114
- function isSessionInCacheOutdated(cookieSession) {
115
- return sessionCache.id !== cookieSession.id || sessionCache[productKey] !== cookieSession[productKey];
138
+ function isSessionInCacheOutdated(sessionState) {
139
+ return sessionCache.id !== sessionState.id || sessionCache[productKey] !== sessionState[productKey];
116
140
  }
117
141
  function expireSessionInCache() {
118
- sessionCache = {};
142
+ sessionCache = (0, _sessionState.getExpiredSessionState)();
119
143
  expireObservable.notify();
120
144
  }
121
- function renewSession(cookieSession) {
122
- sessionCache = cookieSession;
145
+ function renewSessionInCache(sessionState) {
146
+ sessionCache = sessionState;
123
147
  renewObservable.notify();
124
148
  }
125
- function retrieveActiveSession() {
126
- var session = (0, _sessionCookieStore.retrieveSession)();
127
- if (isActiveSession(session)) {
128
- return session;
129
- }
130
- return {};
131
- }
132
- function isActiveSession(session) {
133
- // created and expire can be undefined for versions which was not storing them
134
- // these checks could be removed when older versions will not be available/live anymore
135
- return (session.created === undefined || (0, _tools.dateNow)() - Number(session.created) < _sessionConstants.SESSION_TIME_OUT_DELAY) && (session.expire === undefined || (0, _tools.dateNow)() < Number(session.expire));
149
+ function updateSessionState(partialSessionState) {
150
+ (0, _sessionStoreOperations.processSessionStoreOperations)({
151
+ process: function process(sessionState) {
152
+ return (0, _tools.assign)({}, sessionState, partialSessionState);
153
+ },
154
+ after: synchronizeSession
155
+ }, sessionStoreStrategy);
136
156
  }
137
157
  return {
138
158
  expandOrRenewSession: throttledExpandOrRenewSession,
139
159
  expandSession: expandSession,
140
160
  getSession: function getSession() {
141
- return sessionCache;
161
+ return sessionCache || {};
142
162
  },
143
163
  renewObservable: renewObservable,
144
164
  expireObservable: expireObservable,
165
+ sessionStateUpdateObservable: sessionStateUpdateObservable,
166
+ restartSession: startSession,
145
167
  expire: function expire() {
146
168
  cancelExpandOrRenewSession();
147
- (0, _sessionCookieStore.clearSession)(options);
148
- synchronizeSession({});
169
+ expireSession();
170
+ synchronizeSession((0, _sessionState.getExpiredSessionState)());
149
171
  },
150
172
  stop: function stop() {
151
173
  (0, _timer.clearInterval)(watchSessionTimeoutId);
152
- }
174
+ },
175
+ updateSessionState: updateSessionState
153
176
  };
154
177
  }
155
178
  //# sourceMappingURL=sessionStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessionStore.js","names":["_cookie","require","_observable","_tools","_sessionConstants","_sessionCookieStore","_timer","STORAGE_POLL_DELAY","ONE_SECOND","exports","startSessionStore","options","productKey","computeSessionState","renewObservable","Observable","expireObservable","watchSessionTimeoutId","setInterval","watchSession","sessionCache","retrieveActiveSession","_throttleExpandOrRenewSession","throttle","isTracked","withCookieLockAccess","process","cookieSession","synchronizedSession","synchronizeSession","expandOrRenewCookie","after","hasSessionInCache","renewSession","throttledExpandOrRenewSession","throttled","cancelExpandOrRenewSession","cancel","expandSession","undefined","isActiveSession","isSessionInCacheOutdated","expireSessionInCache","sessionState","trackingType","id","UUID","created","String","dateNow","notify","session","retrieveSession","Number","SESSION_TIME_OUT_DELAY","expire","expandOrRenewSession","getSession","clearSession","stop","clearInterval"],"sources":["../../src/session/sessionStore.js"],"sourcesContent":["import { COOKIE_ACCESS_DELAY } from '../browser/cookie'\nimport { Observable } from '../helper/observable'\nimport { dateNow, UUID, throttle, ONE_SECOND } from '../helper/tools'\nimport { SESSION_TIME_OUT_DELAY } from './sessionConstants'\nimport {\n retrieveSession,\n withCookieLockAccess,\n clearSession\n} from './sessionCookieStore'\nimport { clearInterval, setInterval } from '../helper/timer'\n\nexport var STORAGE_POLL_DELAY = ONE_SECOND\n/**\n * Different session concepts:\n * - tracked, the session has an id and is updated along the user navigation\n * - not tracked, the session does not have an id but it is updated along the user navigation\n * - inactive, no session in store or session expired, waiting for a renew session\n */\nexport function startSessionStore(options, productKey, computeSessionState) {\n var renewObservable = new Observable()\n var expireObservable = new Observable()\n\n var watchSessionTimeoutId = setInterval(watchSession, STORAGE_POLL_DELAY)\n var sessionCache = retrieveActiveSession()\n var _throttleExpandOrRenewSession = throttle(function () {\n var isTracked\n withCookieLockAccess({\n options: options,\n process: function (cookieSession) {\n var synchronizedSession = synchronizeSession(cookieSession)\n isTracked = expandOrRenewCookie(synchronizedSession)\n return synchronizedSession\n },\n after: function (cookieSession) {\n if (isTracked && !hasSessionInCache()) {\n renewSession(cookieSession)\n }\n sessionCache = cookieSession\n }\n })\n }, STORAGE_POLL_DELAY)\n var throttledExpandOrRenewSession = _throttleExpandOrRenewSession.throttled\n var cancelExpandOrRenewSession = _throttleExpandOrRenewSession.cancel\n // function expandOrRenewSession() {\n // var isTracked\n // withCookieLockAccess({\n // options: options,\n // process: function (cookieSession) {\n // var synchronizedSession = synchronizeSession(cookieSession)\n // isTracked = expandOrRenewCookie(synchronizedSession)\n // return synchronizedSession\n // },\n // after: function (cookieSession) {\n // if (isTracked && !hasSessionInCache()) {\n // renewSession(cookieSession)\n // }\n // sessionCache = cookieSession\n // }\n // })\n // }\n\n function expandSession() {\n withCookieLockAccess({\n options: options,\n process: function (cookieSession) {\n return hasSessionInCache()\n ? synchronizeSession(cookieSession)\n : undefined\n }\n })\n }\n\n /**\n * allows two behaviors:\n * - if the session is active, synchronize the session cache without updating the session cookie\n * - if the session is not active, clear the session cookie and expire the session cache\n */\n function watchSession() {\n withCookieLockAccess({\n options: options,\n process: function (cookieSession) {\n return !isActiveSession(cookieSession) ? {} : undefined\n },\n after: synchronizeSession\n })\n }\n\n function synchronizeSession(cookieSession) {\n if (!isActiveSession(cookieSession)) {\n cookieSession = {}\n }\n if (hasSessionInCache()) {\n if (isSessionInCacheOutdated(cookieSession)) {\n expireSessionInCache()\n } else {\n sessionCache = cookieSession\n }\n }\n return cookieSession\n }\n\n function expandOrRenewCookie(cookieSession) {\n var sessionState = computeSessionState(cookieSession[productKey])\n var trackingType = sessionState.trackingType\n var isTracked = sessionState.isTracked\n cookieSession[productKey] = trackingType\n if (isTracked && !cookieSession.id) {\n cookieSession.id = UUID()\n cookieSession.created = String(dateNow())\n }\n return isTracked\n }\n\n function hasSessionInCache() {\n return sessionCache[productKey] !== undefined\n }\n\n function isSessionInCacheOutdated(cookieSession) {\n return (\n sessionCache.id !== cookieSession.id ||\n sessionCache[productKey] !== cookieSession[productKey]\n )\n }\n\n function expireSessionInCache() {\n sessionCache = {}\n expireObservable.notify()\n }\n\n function renewSession(cookieSession) {\n sessionCache = cookieSession\n renewObservable.notify()\n }\n\n function retrieveActiveSession() {\n var session = retrieveSession()\n if (isActiveSession(session)) {\n return session\n }\n return {}\n }\n\n function isActiveSession(session) {\n // created and expire can be undefined for versions which was not storing them\n // these checks could be removed when older versions will not be available/live anymore\n return (\n (session.created === undefined ||\n dateNow() - Number(session.created) < SESSION_TIME_OUT_DELAY) &&\n (session.expire === undefined || dateNow() < Number(session.expire))\n )\n }\n\n return {\n expandOrRenewSession: throttledExpandOrRenewSession,\n expandSession: expandSession,\n getSession: function () {\n return sessionCache\n },\n renewObservable: renewObservable,\n expireObservable: expireObservable,\n expire: function () {\n cancelExpandOrRenewSession()\n clearSession(options)\n synchronizeSession({})\n },\n stop: function () {\n clearInterval(watchSessionTimeoutId)\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"sessionStore.js","names":["_timer","require","_observable","_tools","_sessionInCookie","_sessionState","_sessionInLocalStorage","_sessionStoreOperations","STORAGE_POLL_DELAY","ONE_SECOND","exports","selectSessionStoreStrategyType","initConfiguration","sessionStoreStrategyType","selectCookieStrategy","allowFallbackToLocalStorage","selectLocalStorageStrategy","startSessionStore","productKey","computeSessionState","renewObservable","Observable","expireObservable","sessionStateUpdateObservable","sessionStoreStrategy","type","initCookieStrategy","cookieOptions","initLocalStorageStrategy","expireSession","watchSessionTimeoutId","setInterval","watchSession","sessionCache","startSession","_throttle","throttle","processSessionStoreOperations","process","sessionState","isSessionInNotStartedState","synchronizedSession","synchronizeSession","expandOrRenewSessionState","after","isSessionStarted","hasSessionInCache","renewSessionInCache","throttledExpandOrRenewSession","throttled","cancelExpandOrRenewSession","cancel","expandSession","undefined","isSessionInExpiredState","getExpiredSessionState","isSessionInCacheOutdated","expireSessionInCache","notify","previousState","newState","_computeSessionState","trackingType","isTracked","isExpired","id","UUID","created","String","dateNow","updateSessionState","partialSessionState","assign","expandOrRenewSession","getSession","restartSession","expire","stop","clearInterval"],"sources":["../../src/session/sessionStore.js"],"sourcesContent":["import { clearInterval, setInterval } from '../helper/timer'\nimport { Observable } from '../helper/observable'\nimport { ONE_SECOND, dateNow, throttle, UUID, assign } from '../helper/tools'\nimport { selectCookieStrategy, initCookieStrategy } from './sessionInCookie'\nimport {\n getExpiredSessionState,\n isSessionInExpiredState,\n isSessionInNotStartedState,\n isSessionStarted\n} from './sessionState'\nimport {\n initLocalStorageStrategy,\n selectLocalStorageStrategy\n} from './sessionInLocalStorage'\nimport { processSessionStoreOperations } from './sessionStoreOperations'\n\n/**\n * Every second, the storage will be polled to check for any change that can occur\n * to the session state in another browser tab, or another window.\n * This value has been determined from our previous cookie-only implementation.\n */\nexport const STORAGE_POLL_DELAY = ONE_SECOND\n\n/**\n * Checks if cookies are available as the preferred storage\n * Else, checks if LocalStorage is allowed and available\n */\nexport function selectSessionStoreStrategyType(initConfiguration) {\n let sessionStoreStrategyType = selectCookieStrategy(initConfiguration)\n if (\n !sessionStoreStrategyType &&\n initConfiguration.allowFallbackToLocalStorage\n ) {\n sessionStoreStrategyType = selectLocalStorageStrategy()\n }\n return sessionStoreStrategyType\n}\n\n/**\n * Different session concepts:\n * - tracked, the session has an id and is updated along the user navigation\n * - not tracked, the session does not have an id but it is updated along the user navigation\n * - inactive, no session in store or session expired, waiting for a renew session\n */\nexport function startSessionStore(\n sessionStoreStrategyType,\n productKey,\n computeSessionState\n) {\n const renewObservable = new Observable()\n const expireObservable = new Observable()\n const sessionStateUpdateObservable = new Observable()\n const sessionStoreStrategy =\n sessionStoreStrategyType.type === 'Cookie'\n ? initCookieStrategy(sessionStoreStrategyType.cookieOptions)\n : initLocalStorageStrategy()\n const { expireSession } = sessionStoreStrategy\n\n const watchSessionTimeoutId = setInterval(watchSession, STORAGE_POLL_DELAY)\n let sessionCache\n\n startSession()\n\n const {\n throttled: throttledExpandOrRenewSession,\n cancel: cancelExpandOrRenewSession\n } = throttle(function () {\n processSessionStoreOperations(\n {\n process: function (sessionState) {\n if (isSessionInNotStartedState(sessionState)) {\n return\n }\n\n const synchronizedSession = synchronizeSession(sessionState)\n expandOrRenewSessionState(synchronizedSession)\n return synchronizedSession\n },\n after: function (sessionState) {\n if (isSessionStarted(sessionState) && !hasSessionInCache()) {\n renewSessionInCache(sessionState)\n }\n sessionCache = sessionState\n }\n },\n sessionStoreStrategy\n )\n }, STORAGE_POLL_DELAY)\n\n function expandSession() {\n processSessionStoreOperations(\n {\n process: function (sessionState) {\n return hasSessionInCache()\n ? synchronizeSession(sessionState)\n : undefined\n }\n },\n sessionStoreStrategy\n )\n }\n\n /**\n * allows two behaviors:\n * - if the session is active, synchronize the session cache without updating the session store\n * - if the session is not active, clear the session store and expire the session cache\n */\n function watchSession() {\n processSessionStoreOperations(\n {\n process: function (sessionState) {\n return isSessionInExpiredState(sessionState)\n ? getExpiredSessionState()\n : undefined\n },\n after: synchronizeSession\n },\n sessionStoreStrategy\n )\n }\n\n function synchronizeSession(sessionState) {\n if (isSessionInExpiredState(sessionState)) {\n sessionState = getExpiredSessionState()\n }\n if (hasSessionInCache()) {\n if (isSessionInCacheOutdated(sessionState)) {\n expireSessionInCache()\n } else {\n sessionStateUpdateObservable.notify({\n previousState: sessionCache,\n newState: sessionState\n })\n sessionCache = sessionState\n }\n }\n return sessionState\n }\n\n function startSession() {\n processSessionStoreOperations(\n {\n process: function (sessionState) {\n if (isSessionInNotStartedState(sessionState)) {\n return getExpiredSessionState()\n }\n },\n after: function (sessionState) {\n sessionCache = sessionState\n }\n },\n sessionStoreStrategy\n )\n }\n\n function expandOrRenewSessionState(sessionState) {\n if (isSessionInNotStartedState(sessionState)) {\n return false\n }\n\n const { trackingType, isTracked } = computeSessionState(\n sessionState[productKey]\n )\n sessionState[productKey] = trackingType\n delete sessionState.isExpired\n if (isTracked && !sessionState.id) {\n sessionState.id = UUID()\n sessionState.created = String(dateNow())\n }\n }\n\n function hasSessionInCache() {\n return sessionCache[productKey] !== undefined\n }\n\n function isSessionInCacheOutdated(sessionState) {\n return (\n sessionCache.id !== sessionState.id ||\n sessionCache[productKey] !== sessionState[productKey]\n )\n }\n\n function expireSessionInCache() {\n sessionCache = getExpiredSessionState()\n expireObservable.notify()\n }\n\n function renewSessionInCache(sessionState) {\n sessionCache = sessionState\n renewObservable.notify()\n }\n\n function updateSessionState(partialSessionState) {\n processSessionStoreOperations(\n {\n process: function (sessionState) {\n return assign({}, sessionState, partialSessionState)\n },\n after: synchronizeSession\n },\n sessionStoreStrategy\n )\n }\n\n return {\n expandOrRenewSession: throttledExpandOrRenewSession,\n expandSession,\n getSession: function () {\n return sessionCache || {}\n },\n renewObservable,\n expireObservable,\n sessionStateUpdateObservable,\n restartSession: startSession,\n expire: function () {\n cancelExpandOrRenewSession()\n expireSession()\n synchronizeSession(getExpiredSessionState())\n },\n stop: function () {\n clearInterval(watchSessionTimeoutId)\n },\n updateSessionState\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LOCK_RETRY_DELAY = exports.LOCK_MAX_TRIES = void 0;
7
+ exports.processSessionStoreOperations = processSessionStoreOperations;
8
+ var _timer = require("../helper/timer");
9
+ var _tools = require("../helper/tools");
10
+ var _sessionState = require("./sessionState");
11
+ var LOCK_RETRY_DELAY = 10;
12
+ exports.LOCK_RETRY_DELAY = LOCK_RETRY_DELAY;
13
+ var LOCK_MAX_TRIES = 100;
14
+ exports.LOCK_MAX_TRIES = LOCK_MAX_TRIES;
15
+ var bufferedOperations = [];
16
+ var ongoingOperations;
17
+ function processSessionStoreOperations(operations, sessionStoreStrategy) {
18
+ var numberOfRetries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
19
+ var isLockEnabled = sessionStoreStrategy.isLockEnabled,
20
+ persistSession = sessionStoreStrategy.persistSession,
21
+ expireSession = sessionStoreStrategy.expireSession;
22
+ var persistWithLock = function persistWithLock(session) {
23
+ return persistSession((0, _tools.assign)({}, session, {
24
+ lock: currentLock
25
+ }));
26
+ };
27
+ var retrieveStore = function retrieveStore() {
28
+ var session = sessionStoreStrategy.retrieveSession();
29
+ var lock = session.lock;
30
+ if (session.lock) {
31
+ delete session.lock;
32
+ }
33
+ return {
34
+ session: session,
35
+ lock: lock
36
+ };
37
+ };
38
+ if (!ongoingOperations) {
39
+ ongoingOperations = operations;
40
+ }
41
+ if (operations !== ongoingOperations) {
42
+ bufferedOperations.push(operations);
43
+ return;
44
+ }
45
+ if (isLockEnabled && numberOfRetries >= LOCK_MAX_TRIES) {
46
+ next(sessionStoreStrategy);
47
+ return;
48
+ }
49
+ var currentLock;
50
+ var currentStore = retrieveStore();
51
+ if (isLockEnabled) {
52
+ // if someone has lock, retry later
53
+ if (currentStore.lock && !(0, _sessionState.isSessionInNotStartedState)(currentStore.session)) {
54
+ retryLater(operations, sessionStoreStrategy, numberOfRetries);
55
+ return;
56
+ }
57
+ // acquire lock
58
+ currentLock = (0, _tools.UUID)();
59
+ persistWithLock(currentStore.session);
60
+ // if lock is not acquired, retry later
61
+ currentStore = retrieveStore();
62
+ if (currentStore.lock !== currentLock && !(0, _sessionState.isSessionInNotStartedState)(currentStore.session)) {
63
+ retryLater(operations, sessionStoreStrategy, numberOfRetries);
64
+ return;
65
+ }
66
+ }
67
+ var processedSession = operations.process(currentStore.session);
68
+ if (isLockEnabled) {
69
+ // if lock corrupted after process, retry later
70
+ currentStore = retrieveStore();
71
+ if (currentStore.lock !== currentLock && !(0, _sessionState.isSessionInNotStartedState)(currentStore.session)) {
72
+ retryLater(operations, sessionStoreStrategy, numberOfRetries);
73
+ return;
74
+ }
75
+ }
76
+ if (processedSession) {
77
+ if ((0, _sessionState.isSessionInExpiredState)(processedSession)) {
78
+ expireSession();
79
+ } else {
80
+ (0, _sessionState.expandSessionState)(processedSession);
81
+ isLockEnabled ? persistWithLock(processedSession) : persistSession(processedSession);
82
+ }
83
+ }
84
+ if (isLockEnabled) {
85
+ // correctly handle lock around expiration would require to handle this case properly at several levels
86
+ // since we don't have evidence of lock issues around expiration, let's just not do the corruption check for it
87
+ if (!(processedSession && (0, _sessionState.isSessionInExpiredState)(processedSession))) {
88
+ // if lock corrupted after persist, retry later
89
+ currentStore = retrieveStore();
90
+ if (currentStore.lock !== currentLock && !(0, _sessionState.isSessionInNotStartedState)(currentStore.session)) {
91
+ retryLater(operations, sessionStoreStrategy, numberOfRetries);
92
+ return;
93
+ }
94
+ persistSession(currentStore.session);
95
+ processedSession = currentStore.session;
96
+ }
97
+ }
98
+ // call after even if session is not persisted in order to perform operations on
99
+ // up-to-date session state value => the value could have been modified by another tab
100
+ if (operations.after) {
101
+ operations.after(processedSession || currentStore.session);
102
+ }
103
+ next(sessionStoreStrategy);
104
+ }
105
+ function retryLater(operations, sessionStore, currentNumberOfRetries) {
106
+ (0, _timer.setTimeout)(function () {
107
+ processSessionStoreOperations(operations, sessionStore, currentNumberOfRetries + 1);
108
+ }, LOCK_RETRY_DELAY);
109
+ }
110
+ function next(sessionStore) {
111
+ ongoingOperations = undefined;
112
+ var nextOperations = bufferedOperations.shift();
113
+ if (nextOperations) {
114
+ processSessionStoreOperations(nextOperations, sessionStore);
115
+ }
116
+ }
117
+ //# sourceMappingURL=sessionStoreOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionStoreOperations.js","names":["_timer","require","_tools","_sessionState","LOCK_RETRY_DELAY","exports","LOCK_MAX_TRIES","bufferedOperations","ongoingOperations","processSessionStoreOperations","operations","sessionStoreStrategy","numberOfRetries","arguments","length","undefined","isLockEnabled","persistSession","expireSession","persistWithLock","session","assign","lock","currentLock","retrieveStore","retrieveSession","push","next","currentStore","isSessionInNotStartedState","retryLater","UUID","processedSession","process","isSessionInExpiredState","expandSessionState","after","sessionStore","currentNumberOfRetries","setTimeout","nextOperations","shift"],"sources":["../../src/session/sessionStoreOperations.js"],"sourcesContent":["import { setTimeout } from '../helper/timer'\nimport { UUID, assign } from '../helper/tools'\nimport {\n expandSessionState,\n isSessionInExpiredState,\n isSessionInNotStartedState\n} from './sessionState'\n\nexport const LOCK_RETRY_DELAY = 10\nexport const LOCK_MAX_TRIES = 100\nconst bufferedOperations = []\nlet ongoingOperations\n\nexport function processSessionStoreOperations(\n operations,\n sessionStoreStrategy,\n numberOfRetries = 0\n) {\n const { isLockEnabled, persistSession, expireSession } = sessionStoreStrategy\n const persistWithLock = function (session) {\n return persistSession(assign({}, session, { lock: currentLock }))\n }\n const retrieveStore = function () {\n const session = sessionStoreStrategy.retrieveSession()\n const lock = session.lock\n if (session.lock) {\n delete session.lock\n }\n\n return {\n session,\n lock\n }\n }\n\n if (!ongoingOperations) {\n ongoingOperations = operations\n }\n if (operations !== ongoingOperations) {\n bufferedOperations.push(operations)\n return\n }\n if (isLockEnabled && numberOfRetries >= LOCK_MAX_TRIES) {\n next(sessionStoreStrategy)\n return\n }\n let currentLock\n let currentStore = retrieveStore()\n if (isLockEnabled) {\n // if someone has lock, retry later\n if (\n currentStore.lock &&\n !isSessionInNotStartedState(currentStore.session)\n ) {\n retryLater(operations, sessionStoreStrategy, numberOfRetries)\n return\n }\n // acquire lock\n currentLock = UUID()\n persistWithLock(currentStore.session)\n // if lock is not acquired, retry later\n currentStore = retrieveStore()\n if (\n currentStore.lock !== currentLock &&\n !isSessionInNotStartedState(currentStore.session)\n ) {\n retryLater(operations, sessionStoreStrategy, numberOfRetries)\n return\n }\n }\n let processedSession = operations.process(currentStore.session)\n if (isLockEnabled) {\n // if lock corrupted after process, retry later\n currentStore = retrieveStore()\n if (\n currentStore.lock !== currentLock &&\n !isSessionInNotStartedState(currentStore.session)\n ) {\n retryLater(operations, sessionStoreStrategy, numberOfRetries)\n return\n }\n }\n if (processedSession) {\n if (isSessionInExpiredState(processedSession)) {\n expireSession()\n } else {\n expandSessionState(processedSession)\n isLockEnabled\n ? persistWithLock(processedSession)\n : persistSession(processedSession)\n }\n }\n if (isLockEnabled) {\n // correctly handle lock around expiration would require to handle this case properly at several levels\n // since we don't have evidence of lock issues around expiration, let's just not do the corruption check for it\n if (!(processedSession && isSessionInExpiredState(processedSession))) {\n // if lock corrupted after persist, retry later\n currentStore = retrieveStore()\n if (\n currentStore.lock !== currentLock &&\n !isSessionInNotStartedState(currentStore.session)\n ) {\n retryLater(operations, sessionStoreStrategy, numberOfRetries)\n return\n }\n persistSession(currentStore.session)\n processedSession = currentStore.session\n }\n }\n // call after even if session is not persisted in order to perform operations on\n // up-to-date session state value => the value could have been modified by another tab\n if (operations.after) {\n operations.after(processedSession || currentStore.session)\n }\n next(sessionStoreStrategy)\n}\n\nfunction retryLater(operations, sessionStore, currentNumberOfRetries) {\n setTimeout(function () {\n processSessionStoreOperations(\n operations,\n sessionStore,\n currentNumberOfRetries + 1\n )\n }, LOCK_RETRY_DELAY)\n}\n\nfunction next(sessionStore) {\n ongoingOperations = undefined\n const nextOperations = bufferedOperations.shift()\n if (nextOperations) {\n processSessionStoreOperations(nextOperations, sessionStore)\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,aAAA,GAAAF,OAAA;AAMO,IAAMG,gBAAgB,GAAG,EAAE;AAAAC,OAAA,CAAAD,gBAAA,GAAAA,gBAAA;AAC3B,IAAME,cAAc,GAAG,GAAG;AAAAD,OAAA,CAAAC,cAAA,GAAAA,cAAA;AACjC,IAAMC,kBAAkB,GAAG,EAAE;AAC7B,IAAIC,iBAAiB;AAEd,SAASC,6BAA6BA,CAC3CC,UAAU,EACVC,oBAAoB,EAEpB;EAAA,IADAC,eAAe,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;EAEnB,IAAQG,aAAa,GAAoCL,oBAAoB,CAArEK,aAAa;IAAEC,cAAc,GAAoBN,oBAAoB,CAAtDM,cAAc;IAAEC,aAAa,GAAKP,oBAAoB,CAAtCO,aAAa;EACpD,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAaC,OAAO,EAAE;IACzC,OAAOH,cAAc,CAAC,IAAAI,aAAM,EAAC,CAAC,CAAC,EAAED,OAAO,EAAE;MAAEE,IAAI,EAAEC;IAAY,CAAC,CAAC,CAAC;EACnE,CAAC;EACD,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAA,EAAe;IAChC,IAAMJ,OAAO,GAAGT,oBAAoB,CAACc,eAAe,CAAC,CAAC;IACtD,IAAMH,IAAI,GAAGF,OAAO,CAACE,IAAI;IACzB,IAAIF,OAAO,CAACE,IAAI,EAAE;MAChB,OAAOF,OAAO,CAACE,IAAI;IACrB;IAEA,OAAO;MACLF,OAAO,EAAPA,OAAO;MACPE,IAAI,EAAJA;IACF,CAAC;EACH,CAAC;EAED,IAAI,CAACd,iBAAiB,EAAE;IACtBA,iBAAiB,GAAGE,UAAU;EAChC;EACA,IAAIA,UAAU,KAAKF,iBAAiB,EAAE;IACpCD,kBAAkB,CAACmB,IAAI,CAAChB,UAAU,CAAC;IACnC;EACF;EACA,IAAIM,aAAa,IAAIJ,eAAe,IAAIN,cAAc,EAAE;IACtDqB,IAAI,CAAChB,oBAAoB,CAAC;IAC1B;EACF;EACA,IAAIY,WAAW;EACf,IAAIK,YAAY,GAAGJ,aAAa,CAAC,CAAC;EAClC,IAAIR,aAAa,EAAE;IACjB;IACA,IACEY,YAAY,CAACN,IAAI,IACjB,CAAC,IAAAO,wCAA0B,EAACD,YAAY,CAACR,OAAO,CAAC,EACjD;MACAU,UAAU,CAACpB,UAAU,EAAEC,oBAAoB,EAAEC,eAAe,CAAC;MAC7D;IACF;IACA;IACAW,WAAW,GAAG,IAAAQ,WAAI,EAAC,CAAC;IACpBZ,eAAe,CAACS,YAAY,CAACR,OAAO,CAAC;IACrC;IACAQ,YAAY,GAAGJ,aAAa,CAAC,CAAC;IAC9B,IACEI,YAAY,CAACN,IAAI,KAAKC,WAAW,IACjC,CAAC,IAAAM,wCAA0B,EAACD,YAAY,CAACR,OAAO,CAAC,EACjD;MACAU,UAAU,CAACpB,UAAU,EAAEC,oBAAoB,EAAEC,eAAe,CAAC;MAC7D;IACF;EACF;EACA,IAAIoB,gBAAgB,GAAGtB,UAAU,CAACuB,OAAO,CAACL,YAAY,CAACR,OAAO,CAAC;EAC/D,IAAIJ,aAAa,EAAE;IACjB;IACAY,YAAY,GAAGJ,aAAa,CAAC,CAAC;IAC9B,IACEI,YAAY,CAACN,IAAI,KAAKC,WAAW,IACjC,CAAC,IAAAM,wCAA0B,EAACD,YAAY,CAACR,OAAO,CAAC,EACjD;MACAU,UAAU,CAACpB,UAAU,EAAEC,oBAAoB,EAAEC,eAAe,CAAC;MAC7D;IACF;EACF;EACA,IAAIoB,gBAAgB,EAAE;IACpB,IAAI,IAAAE,qCAAuB,EAACF,gBAAgB,CAAC,EAAE;MAC7Cd,aAAa,CAAC,CAAC;IACjB,CAAC,MAAM;MACL,IAAAiB,gCAAkB,EAACH,gBAAgB,CAAC;MACpChB,aAAa,GACTG,eAAe,CAACa,gBAAgB,CAAC,GACjCf,cAAc,CAACe,gBAAgB,CAAC;IACtC;EACF;EACA,IAAIhB,aAAa,EAAE;IACjB;IACA;IACA,IAAI,EAAEgB,gBAAgB,IAAI,IAAAE,qCAAuB,EAACF,gBAAgB,CAAC,CAAC,EAAE;MACpE;MACAJ,YAAY,GAAGJ,aAAa,CAAC,CAAC;MAC9B,IACEI,YAAY,CAACN,IAAI,KAAKC,WAAW,IACjC,CAAC,IAAAM,wCAA0B,EAACD,YAAY,CAACR,OAAO,CAAC,EACjD;QACAU,UAAU,CAACpB,UAAU,EAAEC,oBAAoB,EAAEC,eAAe,CAAC;QAC7D;MACF;MACAK,cAAc,CAACW,YAAY,CAACR,OAAO,CAAC;MACpCY,gBAAgB,GAAGJ,YAAY,CAACR,OAAO;IACzC;EACF;EACA;EACA;EACA,IAAIV,UAAU,CAAC0B,KAAK,EAAE;IACpB1B,UAAU,CAAC0B,KAAK,CAACJ,gBAAgB,IAAIJ,YAAY,CAACR,OAAO,CAAC;EAC5D;EACAO,IAAI,CAAChB,oBAAoB,CAAC;AAC5B;AAEA,SAASmB,UAAUA,CAACpB,UAAU,EAAE2B,YAAY,EAAEC,sBAAsB,EAAE;EACpE,IAAAC,iBAAU,EAAC,YAAY;IACrB9B,6BAA6B,CAC3BC,UAAU,EACV2B,YAAY,EACZC,sBAAsB,GAAG,CAC3B,CAAC;EACH,CAAC,EAAElC,gBAAgB,CAAC;AACtB;AAEA,SAASuB,IAAIA,CAACU,YAAY,EAAE;EAC1B7B,iBAAiB,GAAGO,SAAS;EAC7B,IAAMyB,cAAc,GAAGjC,kBAAkB,CAACkC,KAAK,CAAC,CAAC;EACjD,IAAID,cAAc,EAAE;IAClB/B,6BAA6B,CAAC+B,cAAc,EAAEH,YAAY,CAAC;EAC7D;AACF","ignoreList":[]}
@@ -1,5 +1,7 @@
1
- import { findCommaSeparatedValue, UUID, ONE_SECOND, findCommaSeparatedValues } from '../helper/tools';
2
- export var COOKIE_ACCESS_DELAY = ONE_SECOND;
1
+ import { findCommaSeparatedValue, UUID, ONE_SECOND, ONE_MINUTE, findCommaSeparatedValues } from '../helper/tools';
2
+ function getCookieName(name, options) {
3
+ return "".concat(name, "_").concat(options && options.crossSite ? 'cs1' : 'cs0', "_").concat(options && options.domain ? 'd1' : 'd0', "_").concat(options && options.secure ? 'sec1' : 'sec0', "_").concat(options && options.partitioned ? 'part1' : 'part0');
4
+ }
3
5
  export function setCookie(name, value, expireDelay, options) {
4
6
  var date = new Date();
5
7
  date.setTime(date.getTime() + expireDelay);
@@ -8,10 +10,10 @@ export function setCookie(name, value, expireDelay, options) {
8
10
  var domain = options && options.domain ? ';domain=' + options.domain : '';
9
11
  var secure = options && options.secure ? ';secure' : '';
10
12
  var partitioned = options && options.partitioned ? ';partitioned' : '';
11
- document.cookie = name + '=' + value + ';' + expires + ';path=/;samesite=' + sameSite + domain + secure + partitioned;
13
+ document.cookie = getCookieName(name, options) + '=' + value + ';' + expires + ';path=/;samesite=' + sameSite + domain + secure + partitioned;
12
14
  }
13
- export function getCookie(name) {
14
- return findCommaSeparatedValue(document.cookie, name);
15
+ export function getCookie(name, options) {
16
+ return findCommaSeparatedValue(document.cookie, getCookieName(name, options));
15
17
  }
16
18
  var initCookieParsed;
17
19
  /**
@@ -39,8 +41,10 @@ export function areCookiesAuthorized(options) {
39
41
  // the test cookie lifetime
40
42
  var testCookieName = "gc_cookie_test_".concat(UUID());
41
43
  var testCookieValue = 'test';
42
- setCookie(testCookieName, testCookieValue, ONE_SECOND, options);
43
- return getCookie(testCookieName) === testCookieValue;
44
+ setCookie(testCookieName, testCookieValue, ONE_MINUTE, options);
45
+ var isCookieCorrectlySet = getCookie(testCookieName, options) === testCookieValue;
46
+ deleteCookie(testCookieName, options);
47
+ return isCookieCorrectlySet;
44
48
  } catch (error) {
45
49
  return false;
46
50
  }
@@ -61,11 +65,14 @@ export function getCurrentSite() {
61
65
  var domainLevels = window.location.hostname.split('.');
62
66
  var candidateDomain = domainLevels.pop();
63
67
  while (domainLevels.length && !getCookie(testCookieName)) {
64
- candidateDomain = domainLevels.pop() + '.' + candidateDomain;
68
+ candidateDomain = "".concat(domainLevels.pop(), ".").concat(candidateDomain);
65
69
  setCookie(testCookieName, testCookieValue, ONE_SECOND, {
66
70
  domain: candidateDomain
67
71
  });
68
72
  }
73
+ deleteCookie(testCookieName, {
74
+ domain: candidateDomain
75
+ });
69
76
  getCurrentSiteCache = candidateDomain;
70
77
  }
71
78
  return getCurrentSiteCache;
@@ -1 +1 @@
1
- {"version":3,"file":"cookie.js","names":["findCommaSeparatedValue","UUID","ONE_SECOND","findCommaSeparatedValues","COOKIE_ACCESS_DELAY","setCookie","name","value","expireDelay","options","date","Date","setTime","getTime","expires","toUTCString","sameSite","crossSite","domain","secure","partitioned","document","cookie","getCookie","initCookieParsed","getInitCookie","get","resetInitCookies","undefined","deleteCookie","areCookiesAuthorized","testCookieName","concat","testCookieValue","error","getCurrentSiteCache","getCurrentSite","domainLevels","window","location","hostname","split","candidateDomain","pop","length"],"sources":["../../src/browser/cookie.js"],"sourcesContent":["import {\n findCommaSeparatedValue,\n UUID,\n ONE_SECOND,\n findCommaSeparatedValues\n} from '../helper/tools'\nexport var COOKIE_ACCESS_DELAY = ONE_SECOND\n\nexport function setCookie(name, value, expireDelay, options) {\n var date = new Date()\n date.setTime(date.getTime() + expireDelay)\n var expires = 'expires=' + date.toUTCString()\n var sameSite = options && options.crossSite ? 'none' : 'strict'\n var domain = options && options.domain ? ';domain=' + options.domain : ''\n var secure = options && options.secure ? ';secure' : ''\n var partitioned = options && options.partitioned ? ';partitioned' : ''\n document.cookie =\n name +\n '=' +\n value +\n ';' +\n expires +\n ';path=/;samesite=' +\n sameSite +\n domain +\n secure +\n partitioned\n}\n\nexport function getCookie(name) {\n return findCommaSeparatedValue(document.cookie, name)\n}\nvar initCookieParsed\n/**\n * Returns a cached value of the cookie. Use this during SDK initialization (and whenever possible)\n * to avoid accessing document.cookie multiple times.\n */\nexport function getInitCookie(name) {\n if (!initCookieParsed) {\n initCookieParsed = findCommaSeparatedValues(document.cookie)\n }\n return initCookieParsed.get(name)\n}\n\nexport function resetInitCookies() {\n initCookieParsed = undefined\n}\nexport function deleteCookie(name, options) {\n setCookie(name, '', 0, options)\n}\n\nexport function areCookiesAuthorized(options) {\n if (document.cookie === undefined || document.cookie === null) {\n return false\n }\n try {\n // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during\n // the test cookie lifetime\n var testCookieName = `gc_cookie_test_${UUID()}`\n var testCookieValue = 'test'\n setCookie(testCookieName, testCookieValue, ONE_SECOND, options)\n return getCookie(testCookieName) === testCookieValue\n } catch (error) {\n return false\n }\n}\n\n/**\n * No API to retrieve it, number of levels for subdomain and suffix are unknown\n * strategy: find the minimal domain on which cookies are allowed to be set\n * https://web.dev/same-site-same-origin/#site\n */\nvar getCurrentSiteCache\nexport function getCurrentSite() {\n if (getCurrentSiteCache === undefined) {\n // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during\n // the test cookie lifetime\n var testCookieName = `gc_site_test_${UUID()}`\n var testCookieValue = 'test'\n\n var domainLevels = window.location.hostname.split('.')\n var candidateDomain = domainLevels.pop()\n while (domainLevels.length && !getCookie(testCookieName)) {\n candidateDomain = domainLevels.pop() + '.' + candidateDomain\n setCookie(testCookieName, testCookieValue, ONE_SECOND, {\n domain: candidateDomain\n })\n }\n getCurrentSiteCache = candidateDomain\n }\n return getCurrentSiteCache\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"cookie.js","names":["findCommaSeparatedValue","UUID","ONE_SECOND","ONE_MINUTE","findCommaSeparatedValues","getCookieName","name","options","concat","crossSite","domain","secure","partitioned","setCookie","value","expireDelay","date","Date","setTime","getTime","expires","toUTCString","sameSite","document","cookie","getCookie","initCookieParsed","getInitCookie","get","resetInitCookies","undefined","deleteCookie","areCookiesAuthorized","testCookieName","testCookieValue","isCookieCorrectlySet","error","getCurrentSiteCache","getCurrentSite","domainLevels","window","location","hostname","split","candidateDomain","pop","length"],"sources":["../../src/browser/cookie.js"],"sourcesContent":["import {\n findCommaSeparatedValue,\n UUID,\n ONE_SECOND,\n ONE_MINUTE,\n findCommaSeparatedValues\n} from '../helper/tools'\n\nfunction getCookieName(name, options) {\n return `${name}_${options && options.crossSite ? 'cs1' : 'cs0'}_${\n options && options.domain ? 'd1' : 'd0'\n }_${options && options.secure ? 'sec1' : 'sec0'}_${\n options && options.partitioned ? 'part1' : 'part0'\n }`\n}\nexport function setCookie(name, value, expireDelay, options) {\n var date = new Date()\n date.setTime(date.getTime() + expireDelay)\n var expires = 'expires=' + date.toUTCString()\n var sameSite = options && options.crossSite ? 'none' : 'strict'\n var domain = options && options.domain ? ';domain=' + options.domain : ''\n var secure = options && options.secure ? ';secure' : ''\n var partitioned = options && options.partitioned ? ';partitioned' : ''\n\n document.cookie =\n getCookieName(name, options) +\n '=' +\n value +\n ';' +\n expires +\n ';path=/;samesite=' +\n sameSite +\n domain +\n secure +\n partitioned\n}\n\nexport function getCookie(name, options) {\n return findCommaSeparatedValue(document.cookie, getCookieName(name, options))\n}\nvar initCookieParsed\n/**\n * Returns a cached value of the cookie. Use this during SDK initialization (and whenever possible)\n * to avoid accessing document.cookie multiple times.\n */\nexport function getInitCookie(name) {\n if (!initCookieParsed) {\n initCookieParsed = findCommaSeparatedValues(document.cookie)\n }\n return initCookieParsed.get(name)\n}\n\nexport function resetInitCookies() {\n initCookieParsed = undefined\n}\nexport function deleteCookie(name, options) {\n setCookie(name, '', 0, options)\n}\n\nexport function areCookiesAuthorized(options) {\n if (document.cookie === undefined || document.cookie === null) {\n return false\n }\n try {\n // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during\n // the test cookie lifetime\n var testCookieName = `gc_cookie_test_${UUID()}`\n var testCookieValue = 'test'\n setCookie(testCookieName, testCookieValue, ONE_MINUTE, options)\n const isCookieCorrectlySet =\n getCookie(testCookieName, options) === testCookieValue\n deleteCookie(testCookieName, options)\n return isCookieCorrectlySet\n } catch (error) {\n return false\n }\n}\n\n/**\n * No API to retrieve it, number of levels for subdomain and suffix are unknown\n * strategy: find the minimal domain on which cookies are allowed to be set\n * https://web.dev/same-site-same-origin/#site\n */\nvar getCurrentSiteCache\nexport function getCurrentSite() {\n if (getCurrentSiteCache === undefined) {\n // Use a unique cookie name to avoid issues when the SDK is initialized multiple times during\n // the test cookie lifetime\n const testCookieName = `gc_site_test_${UUID()}`\n const testCookieValue = 'test'\n\n const domainLevels = window.location.hostname.split('.')\n let candidateDomain = domainLevels.pop()\n while (domainLevels.length && !getCookie(testCookieName)) {\n candidateDomain = `${domainLevels.pop()}.${candidateDomain}`\n setCookie(testCookieName, testCookieValue, ONE_SECOND, {\n domain: candidateDomain\n })\n }\n deleteCookie(testCookieName, { domain: candidateDomain })\n getCurrentSiteCache = candidateDomain\n }\n return getCurrentSiteCache\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,9 +1,9 @@
1
- import { getCurrentSite } from '../browser/cookie';
2
1
  import { catchUserErrors } from '../helper/catchUserErrors';
3
2
  import { display } from '../helper/display';
4
3
  import { assign, isPercentage, ONE_SECOND, isNullUndefinedDefaultValue } from '../helper/tools';
5
4
  import { ONE_KIBI_BYTE } from '../helper/byteUtils';
6
5
  import { computeTransportConfiguration } from './transportConfiguration';
6
+ import { selectSessionStoreStrategyType } from '../session/sessionStore';
7
7
  export var DefaultPrivacyLevel = {
8
8
  ALLOW: 'allow',
9
9
  MASK: 'mask',
@@ -22,10 +22,10 @@ export function validateAndBuildConfiguration(initConfiguration) {
22
22
  display.error('Telemetry Sample Rate should be a number between 0 and 100');
23
23
  return;
24
24
  }
25
- var sessionSampleRate = initConfiguration.sessionSampleRate || initConfiguration.sampleRate;
25
+ var sessionSampleRate = isNullUndefinedDefaultValue(initConfiguration.sessionSampleRate, initConfiguration.sampleRate);
26
26
  return assign({
27
27
  beforeSend: initConfiguration.beforeSend && catchUserErrors(initConfiguration.beforeSend, 'beforeSend threw an error:'),
28
- cookieOptions: buildCookieOptions(initConfiguration),
28
+ sessionStoreStrategyType: selectSessionStoreStrategyType(initConfiguration),
29
29
  sessionSampleRate: isNullUndefinedDefaultValue(sessionSampleRate, 100),
30
30
  service: initConfiguration.service,
31
31
  version: initConfiguration.version,
@@ -74,24 +74,4 @@ export function validatePostRequestRequireParamsConfiguration(initConfiguration)
74
74
  }
75
75
  return true;
76
76
  }
77
- export function buildCookieOptions(initConfiguration) {
78
- var cookieOptions = {};
79
-
80
- // cookieOptions.secure = mustUseSecureCookie(initConfiguration)
81
- // cookieOptions.crossSite = !!initConfiguration.useCrossSiteSessionCookie
82
- cookieOptions.secure = !!initConfiguration.useSecureSessionCookie || !!initConfiguration.usePartitionedCrossSiteSessionCookie || !!initConfiguration.useCrossSiteSessionCookie;
83
- cookieOptions.crossSite = !!initConfiguration.usePartitionedCrossSiteSessionCookie || !!initConfiguration.useCrossSiteSessionCookie;
84
- cookieOptions.partitioned = !!initConfiguration.usePartitionedCrossSiteSessionCookie;
85
- if (initConfiguration.trackSessionAcrossSubdomains) {
86
- cookieOptions.domain = getCurrentSite();
87
- }
88
- return cookieOptions;
89
- }
90
-
91
- // function mustUseSecureCookie(initConfiguration) {
92
- // return (
93
- // !!initConfiguration.useSecureSessionCookie ||
94
- // !!initConfiguration.useCrossSiteSessionCookie
95
- // )
96
- // }
97
77
  //# sourceMappingURL=configuration.js.map