@armco/analytics 0.2.7 → 0.2.8

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 (3) hide show
  1. package/package.json +1 -1
  2. package/session.d.ts +1 -0
  3. package/session.js +43 -18
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@armco/analytics",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "description": "Browser Based Analytics interceptor for configured events",
5
5
  "main": "index.js",
6
6
  "type": "module",
package/session.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export declare function startSession(): string;
2
2
  export declare function getSessionId(): string;
3
+ export declare function extendSession(): void;
3
4
  export declare function terminateSession(): void;
package/session.js CHANGED
@@ -8,44 +8,69 @@ function generateSessionId() {
8
8
  }
9
9
  export function startSession() {
10
10
  const sessionId = generateSessionId();
11
+ const expirationDate = new Date();
12
+ let tabId = sessionStorage.getItem('tabId');
13
+ if (!tabId) {
14
+ const timestamp = expirationDate.getTime();
15
+ tabId = `${uuidv4()}-${timestamp}`;
16
+ sessionStorage.setItem('tabId', tabId);
17
+ }
18
+ const cookieName = `${SESSION_COOKIE_NAME}-${tabId}`;
19
+ refreshSessionId(sessionId, cookieName);
20
+ return sessionId;
21
+ }
22
+ function refreshSessionId(sessionId, cookieName) {
11
23
  const expirationDate = new Date();
12
24
  expirationDate.setMinutes(expirationDate.getMinutes() + SESSION_EXPIRATION_TIME);
13
25
  try {
14
- Cookies.set(SESSION_COOKIE_NAME, sessionId, { expires: expirationDate });
26
+ Cookies.set(cookieName, sessionId, { expires: expirationDate });
15
27
  }
16
28
  catch (error) {
17
- localStorage.setItem(SESSION_COOKIE_NAME, sessionId);
18
- localStorageTimeout = setTimeout(() => localStorage.removeItem(SESSION_COOKIE_NAME), SESSION_EXPIRATION_TIME * 1000);
29
+ clearTimeout(localStorageTimeout);
30
+ localStorageTimeout = setTimeout(() => localStorage.removeItem(cookieName), SESSION_EXPIRATION_TIME * 1000);
19
31
  }
20
- return sessionId;
21
32
  }
22
33
  export function getSessionId() {
23
34
  let sessionId;
24
- sessionId = Cookies.get(SESSION_COOKIE_NAME);
35
+ const tabId = sessionStorage.getItem('tabId');
36
+ if (!tabId) {
37
+ return startSession();
38
+ }
39
+ const cookieName = `${SESSION_COOKIE_NAME}-${tabId}`;
40
+ sessionId = Cookies.get(cookieName);
25
41
  if (!sessionId) {
26
- sessionId = localStorage.getItem(SESSION_COOKIE_NAME);
42
+ sessionId = localStorage.getItem(cookieName);
27
43
  }
28
44
  if (!sessionId) {
29
45
  return startSession();
30
46
  }
47
+ refreshSessionId(sessionId, cookieName);
48
+ return sessionId;
49
+ }
50
+ export function extendSession() {
51
+ const tabId = sessionStorage.getItem('tabId');
52
+ if (!tabId) {
53
+ return;
54
+ }
55
+ const cookieName = `${SESSION_COOKIE_NAME}-${tabId}`;
56
+ let sessionId = Cookies.get(cookieName);
57
+ if (!sessionId) {
58
+ sessionId = localStorage.getItem(cookieName);
59
+ }
31
60
  if (sessionId) {
32
- const expirationDate = new Date();
33
- expirationDate.setMinutes(expirationDate.getMinutes() + SESSION_EXPIRATION_TIME);
34
- try {
35
- Cookies.set(SESSION_COOKIE_NAME, sessionId, { expires: expirationDate });
36
- }
37
- catch (error) {
38
- clearTimeout(localStorageTimeout);
39
- localStorageTimeout = setTimeout(() => localStorage.removeItem(SESSION_COOKIE_NAME), SESSION_EXPIRATION_TIME * 1000);
40
- }
61
+ refreshSessionId(sessionId, cookieName);
41
62
  }
42
- return sessionId;
43
63
  }
44
64
  export function terminateSession() {
65
+ const tabId = sessionStorage.getItem('tabId');
66
+ if (!tabId) {
67
+ return;
68
+ }
69
+ const cookieName = `${SESSION_COOKIE_NAME}-${tabId}`;
45
70
  if (typeof window !== 'undefined' && window.Cookies) {
46
- Cookies.remove(SESSION_COOKIE_NAME);
71
+ Cookies.remove(cookieName);
47
72
  }
48
73
  else {
49
- localStorage.removeItem(SESSION_COOKIE_NAME);
74
+ localStorage.removeItem(cookieName);
50
75
  }
51
76
  }