From 88e6a616f422d5733023b4e251575236706eb82b Mon Sep 17 00:00:00 2001 From: CarlNation Date: Thu, 23 Apr 2026 15:22:52 -0400 Subject: [PATCH] CASH-1545 check session expiration with JS interval CASH-1545 check session expiration with JS interval so that we can redirect to the return-user page without requiring the user to click forward button --- environment-variables.js | 1 + src/App.vue | 22 ++++++++++++++++++++++ src/constants/application-config.js | 2 ++ src/router/constants/auto-route-table.js | 1 - 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/environment-variables.js b/environment-variables.js index 17c797cfd..c99f90a28 100644 --- a/environment-variables.js +++ b/environment-variables.js @@ -15,6 +15,7 @@ const environmentVariables = { ['__VUE_APP_SOLARWINDS_MONITORING_SCRIPT__']: "", ['__VUE_APP_ADYEN_ENVIRONMENT__']: "test", ['__VUE_APP_ADYEN_CLIENT_KEY__']: "test_WYGT4F5ZT5BRRL5MPWHK6QLYOIXZXROD", + ['__VUE_APP_SESSION_EXPIRATION_INTERVAL_CHECK_MILLISECONDS__']: 10000, }; const keysOnly = Object.keys(environmentVariables); diff --git a/src/App.vue b/src/App.vue index 2b9bc5a33..36c4b58a3 100644 --- a/src/App.vue +++ b/src/App.vue @@ -18,6 +18,8 @@ import { showFmgLoadingModal } from "@/helpers/loading-modal-helper"; import funnelFooter from "@/fmg-components/funnel-footer/funnel-footer.vue"; import salesforceWebchat from "./digital-components/salesforce-webchat/salesforce-webchat.vue"; import sierraWebchat from "./digital-components/sierra-webchat/sierra-webchat.vue"; +import analyticsMixin from "@/mixins/analytics-mixin"; +import { applicationConfig } from "@/constants/application-config"; export default { name: "app", @@ -25,8 +27,18 @@ export default { const { globalNonpersistedState } = showFmgLoadingModal(); return { globalNonpersistedState }; }, + data() { + return { + sessionCheckInterval: null, + }; + }, methods: { handleAnyComponentFocus: handleAnyComponentFocus, + checkSessionAndRedirect() { + if (analyticsMixin.methods.sessionExpired()) { + this.$router.sendToReturnUser(); + } + }, }, computed: { shouldShowLoader() { @@ -44,6 +56,16 @@ export default { }, mounted() { showFmgLoadingModal(true); + // Check session expiration and redirect if expired + this.sessionCheckInterval = setInterval( + this.checkSessionAndRedirect, + applicationConfig.SESSION_EXPIRATION_INTERVAL_CHECK_MILLISECONDS + ); + }, + beforeUnmount() { + if (this.sessionCheckInterval) { + clearInterval(this.sessionCheckInterval); + } }, }; diff --git a/src/constants/application-config.js b/src/constants/application-config.js index 91873d455..c64ae0db6 100644 --- a/src/constants/application-config.js +++ b/src/constants/application-config.js @@ -31,6 +31,8 @@ const applicationConfig = { AFFILIATE_COOKIE_CONTAINING_NAME: "_Track", COOKIE_NAME_LENGTH_MAX_LIMIT: 44, SESSION_TIMEOUT_MINUTES: process.env.__VUE_APP_SESSION_TIMEOUT_MINUTES__, + SESSION_EXPIRATION_INTERVAL_CHECK_MILLISECONDS: + process.env.__VUE_APP_SESSION_EXPIRATION_INTERVAL_CHECK_MILLISECONDS__, RETURN_USER_PAGE: "/fmg/return-user", ADYEN_CLIENT_KEY: process.env.__VUE_APP_ADYEN_CLIENT_KEY__, ADYEN_ENVIRONMENT: process.env.__VUE_APP_ADYEN_ENVIRONMENT__, diff --git a/src/router/constants/auto-route-table.js b/src/router/constants/auto-route-table.js index 0bf3503b9..ea1dd69e0 100644 --- a/src/router/constants/auto-route-table.js +++ b/src/router/constants/auto-route-table.js @@ -6,7 +6,6 @@ export const autoRouteTable = [ routeData.MOLDING_QUESTIONS, routeData.VEHICLE_PARTS, routeData.PART_QUESTIONS, - routeData.VIN_LOOKUP, routeData.ESTIMATE, routeData.VEHICLE_DAMAGE, routeData.VEHICLE,