Merge pull request #631 from Safelite/feature/richardson/SSR-1104.3
Cookie and Id updates
This commit is contained in:
commit
2869f05c42
5 changed files with 133 additions and 29 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
import applicationConfig from '@/constants/application-config.js';
|
import applicationConfig from '@/constants/application-config.js';
|
||||||
|
import { convertToSeconds } from '@/helpers/date-helper.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @module cookieNames
|
* @module cookieNames
|
||||||
|
|
@ -8,6 +9,8 @@ import applicationConfig from '@/constants/application-config.js';
|
||||||
*/
|
*/
|
||||||
const cookieNames = Object.freeze({
|
const cookieNames = Object.freeze({
|
||||||
ISS_SESSION_INFO: `ISSSessionInfo-${applicationConfig.CURRENT_ENVIRONMENT}`,
|
ISS_SESSION_INFO: `ISSSessionInfo-${applicationConfig.CURRENT_ENVIRONMENT}`,
|
||||||
|
ISS_SESSION_KEY: `ISSSessionKey-${applicationConfig.CURRENT_ENVIRONMENT}`,
|
||||||
|
ISS_USER_ID: `ISSUserId-${applicationConfig.CURRENT_ENVIRONMENT}`,
|
||||||
|
|
||||||
// Existing Safelite.com cookies
|
// Existing Safelite.com cookies
|
||||||
DXDEV: 'dxdev',
|
DXDEV: 'dxdev',
|
||||||
|
|
@ -15,4 +18,11 @@ const cookieNames = Object.freeze({
|
||||||
SESSION_KEY: 'skey'
|
SESSION_KEY: 'skey'
|
||||||
});
|
});
|
||||||
|
|
||||||
export default cookieNames;
|
const cookieExpirations = Object.freeze({
|
||||||
|
SESSION_ID: convertToSeconds({ minutes: 30 }),
|
||||||
|
DXDEV: convertToSeconds({ years: 1 }),
|
||||||
|
ISS_USER_ID: convertToSeconds({ weeks: 1 }),
|
||||||
|
ISS_SESSION_KEY: convertToSeconds({ minutes: 30 })
|
||||||
|
});
|
||||||
|
|
||||||
|
export { cookieNames, cookieExpirations };
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import cookieNames from '@/constants/cookie-names';
|
import { cookieNames, cookieExpirations } from '@/constants/cookie-names';
|
||||||
import applicationConfig from '@/constants/application-config';
|
import applicationConfig from '@/constants/application-config';
|
||||||
import { useMainStore } from '@/store';
|
import { useMainStore } from '@/store';
|
||||||
|
|
||||||
|
|
@ -206,3 +206,85 @@ export function setCookieProperties(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isCookieSet(name) {
|
||||||
|
const val = getCookieValueByName(name);
|
||||||
|
|
||||||
|
return !!val;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function regenerateDeviceId() {
|
||||||
|
if (!isCookieSet(cookieNames.DXDEV)) {
|
||||||
|
setCookieProperties(
|
||||||
|
{
|
||||||
|
[cookieNames.DXDEV]: `did=${crypto.randomUUID()}`
|
||||||
|
},
|
||||||
|
{ maxAge: cookieExpirations.DXDEV }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function regenerateUserId() {
|
||||||
|
if (!isCookieSet(cookieNames.ISS_USER_ID)) {
|
||||||
|
setCookieProperties(
|
||||||
|
{
|
||||||
|
[cookieNames.ISS_USER_ID]: crypto.randomUUID()
|
||||||
|
},
|
||||||
|
{ maxAge: cookieExpirations.ISS_USER_ID }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getUserIdValue() {
|
||||||
|
const cookieValue = getCookieValueByName(cookieNames.ISS_USER_ID);
|
||||||
|
|
||||||
|
if (cookieValue) {
|
||||||
|
return cookieValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return '00000000-0000-0000-0000-000000000000';
|
||||||
|
}
|
||||||
|
|
||||||
|
export function areAllSessionCookiesSet() {
|
||||||
|
return (
|
||||||
|
isCookieSet(cookieNames.SESSION_ID)
|
||||||
|
&& isCookieSet(cookieNames.DXDEV)
|
||||||
|
&& isCookieSet(cookieNames.ISS_SESSION_KEY)
|
||||||
|
&& isCookieSet(cookieNames.ISS_USER_ID)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function refreshCookieExpiration(name, expirationTime) {
|
||||||
|
if (isCookieSet(name)) {
|
||||||
|
createOrUpdateCookie(name, getCookieValueByName(name), { maxAge: expirationTime });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function refreshSessionExpiration() {
|
||||||
|
refreshCookieExpiration(cookieNames.SESSION_ID, cookieExpirations.SESSION_ID);
|
||||||
|
refreshCookieExpiration(cookieNames.DXDEV, cookieExpirations.DXDEV);
|
||||||
|
refreshCookieExpiration(cookieNames.ISS_USER_ID, cookieExpirations.ISS_USER_ID);
|
||||||
|
refreshCookieExpiration(cookieNames.ISS_SESSION_KEY, cookieExpirations.ISS_SESSION_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setSessionIdIfUnset(value) {
|
||||||
|
if (!isCookieSet(cookieNames.SESSION_ID)) {
|
||||||
|
setCookieProperties(
|
||||||
|
{
|
||||||
|
[cookieNames.SESSION_ID]: value
|
||||||
|
},
|
||||||
|
{ maxAge: cookieExpirations.SESSION_ID }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setSessionKeyIfUnset(value) {
|
||||||
|
if (!isCookieSet(cookieNames.ISS_SESSION_KEY)) {
|
||||||
|
setCookieProperties(
|
||||||
|
{
|
||||||
|
[cookieNames.ISS_SESSION_KEY]: value
|
||||||
|
},
|
||||||
|
{ maxAge: cookieExpirations.ISS_SESSION_KEY }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -173,3 +173,15 @@ export function shortTimeString(date) {
|
||||||
// Return undefined if the input is not a valid date object
|
// Return undefined if the input is not a valid date object
|
||||||
? date.toLocaleTimeString('en-us', { hour: 'numeric', minute: 'numeric', hour12: true }) : undefined;
|
? date.toLocaleTimeString('en-us', { hour: 'numeric', minute: 'numeric', hour12: true }) : undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function convertToSeconds({ years, months, weeks, days, hours, minutes, seconds }) {
|
||||||
|
let total = seconds ?? 0;
|
||||||
|
total += (minutes ?? 0) * 60;
|
||||||
|
total += (hours ?? 0) * 60 * 60;
|
||||||
|
total += (days ?? 0) * 24 * 60 * 60;
|
||||||
|
total += (weeks ?? 0) * 7 * 24 * 60 * 60;
|
||||||
|
total += (months ?? 0) * 30 * 24 * 60 * 60;
|
||||||
|
total += (years ?? 0) * 365 * 24 * 60 * 60;
|
||||||
|
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import { createTestingPinia } from '@pinia/testing';
|
||||||
import navigationScenarios from '@/router/router-constants/navigation-scenarios.js';
|
import navigationScenarios from '@/router/router-constants/navigation-scenarios.js';
|
||||||
import vehicleCategories from '@/constants/vehicle-categories.js';
|
import vehicleCategories from '@/constants/vehicle-categories.js';
|
||||||
import issPageValues from '@/router/router-constants/issPage-values';
|
import issPageValues from '@/router/router-constants/issPage-values';
|
||||||
import cookieNames from '@/constants/cookie-names';
|
import { cookieNames } from '@/constants/cookie-names';
|
||||||
import { Form } from 'vee-validate';
|
import { Form } from 'vee-validate';
|
||||||
import baseMixin from '@/mixins/base-mixin';
|
import baseMixin from '@/mixins/base-mixin';
|
||||||
import {
|
import {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,16 @@
|
||||||
|
/* eslint-disable import/no-cycle */
|
||||||
import {
|
import {
|
||||||
setCookieProperties,
|
areAllSessionCookiesSet,
|
||||||
getDeviceIdValue,
|
getDeviceIdValue,
|
||||||
getSessionIdValue,
|
getSessionIdValue,
|
||||||
getSessionKeyValue
|
getSessionKeyValue,
|
||||||
|
getUserIdValue,
|
||||||
|
regenerateUserId,
|
||||||
|
regenerateDeviceId,
|
||||||
|
setSessionIdIfUnset,
|
||||||
|
setSessionKeyIfUnset
|
||||||
} from '@/helpers/cookie-helper';
|
} from '@/helpers/cookie-helper';
|
||||||
|
import applicationConfig from '@/constants/application-config';
|
||||||
import queryStrings from '@/constants/query-strings';
|
import queryStrings from '@/constants/query-strings';
|
||||||
import { experimentSettings } from '@/constants/experiments';
|
import { experimentSettings } from '@/constants/experiments';
|
||||||
import {
|
import {
|
||||||
|
|
@ -14,7 +21,6 @@ import {
|
||||||
GaEvents,
|
GaEvents,
|
||||||
ValueToLogTypes
|
ValueToLogTypes
|
||||||
} from '@/constants/analytics';
|
} from '@/constants/analytics';
|
||||||
import cookieNames from '@/constants/cookie-names';
|
|
||||||
import { useMainStore } from '@/store';
|
import { useMainStore } from '@/store';
|
||||||
|
|
||||||
function pushToDataLayerIfDefined(data) {
|
function pushToDataLayerIfDefined(data) {
|
||||||
|
|
@ -151,42 +157,36 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
async initSession() {
|
async initSession() {
|
||||||
const sid = getSessionIdValue();
|
regenerateDeviceId();
|
||||||
const skey = getSessionKeyValue();
|
regenerateUserId();
|
||||||
|
|
||||||
|
const deviceId = getDeviceIdValue(); // cookieNames.DXDEV
|
||||||
|
const userId = getUserIdValue(); // cookieNames.ISS_USER_ID
|
||||||
|
const sid = getSessionIdValue(); // cookieNames.SESSION_ID
|
||||||
|
// const skey = getSessionKeyValue();
|
||||||
|
const referrer = applicationConfig.CURRENT_ENVIRONMENT !== 'Localhost' ? document.referrer : null;
|
||||||
const payload = {
|
const payload = {
|
||||||
userId: getDeviceIdValue(),
|
deviceId,
|
||||||
|
referrer,
|
||||||
sessionId: sid,
|
sessionId: sid,
|
||||||
userAgent: navigator.userAgent,
|
userId,
|
||||||
referrer: document.referrer
|
userAgent: navigator.userAgent
|
||||||
};
|
};
|
||||||
|
|
||||||
const response = await useMainStore().initializeSession(payload);
|
const response = await useMainStore().initializeSession(payload);
|
||||||
|
|
||||||
if (response?.data) {
|
if (response?.data) {
|
||||||
if (response?.data.sessionKey && skey === 0) {
|
if (response?.data.sessionKey) {
|
||||||
setCookieProperties(
|
setSessionKeyIfUnset(response.data.sessionKey);
|
||||||
{ [cookieNames.SESSION_KEY]: response?.data.sessionKey },
|
|
||||||
{
|
|
||||||
useDefaultFunnelCookieAttributes: false
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
if (response?.data.sessionId && sid === '00000000-0000-0000-0000-000000000000') {
|
if (response?.data.sessionId) {
|
||||||
setCookieProperties(
|
setSessionIdIfUnset(response.data.sessionId);
|
||||||
{ [cookieNames.SESSION_ID]: response?.data.sessionId },
|
|
||||||
{
|
|
||||||
maxAge: 60 * 30 // 30 minutes
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
noSession() {
|
noSession() {
|
||||||
return (
|
return !areAllSessionCookiesSet();
|
||||||
getSessionKeyValue() === 0
|
|
||||||
|| getSessionIdValue() === '00000000-0000-0000-0000-000000000000'
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue