From 97233cc85dc020ba9d6da17fd2ac2a156f6dc2b1 Mon Sep 17 00:00:00 2001 From: deetz99 Date: Sun, 12 Jan 2025 19:47:20 -0800 Subject: [PATCH] switch to middleware --- strr-base-web/app/app.config.ts | 5 +- .../enable-sbc-web-messenger.global.ts | 59 ++++++++++++ .../app/plugins/sbc-web-messenger.client.ts | 94 ------------------- .../app/types/strr-base-app-config.d.ts | 10 +- strr-base-web/nuxt.config.ts | 9 +- 5 files changed, 77 insertions(+), 100 deletions(-) create mode 100644 strr-base-web/app/middleware/enable-sbc-web-messenger.global.ts delete mode 100644 strr-base-web/app/plugins/sbc-web-messenger.client.ts diff --git a/strr-base-web/app/app.config.ts b/strr-base-web/app/app.config.ts index 8dbeb5107..b6da62694 100644 --- a/strr-base-web/app/app.config.ts +++ b/strr-base-web/app/app.config.ts @@ -23,7 +23,10 @@ export default defineAppConfig({ }, sbcWebMsg: { enable: true, - allowedRoutes: undefined + allowedRoutes: undefined, + genesysUrl: 'https://apps.cac1.pure.cloud/genesys-bootstrap/genesys.min.js', + genesysEnvironmentKey: 'prod-cac1', + genesysDeploymentKey: '56973fe6-5b18-4395-bd10-707243b2f680' } }, ui: { diff --git a/strr-base-web/app/middleware/enable-sbc-web-messenger.global.ts b/strr-base-web/app/middleware/enable-sbc-web-messenger.global.ts new file mode 100644 index 000000000..518845dbd --- /dev/null +++ b/strr-base-web/app/middleware/enable-sbc-web-messenger.global.ts @@ -0,0 +1,59 @@ +export default defineNuxtRouteMiddleware(async (to) => { + const { ldClient, getStoredFlag } = useConnectLaunchdarklyStore() + await ldClient?.waitUntilReady() + const enableSbcWebMsg = getStoredFlag('enable-sbc-web-messenger') + const msgConfig = useAppConfig().strrBaseLayer.sbcWebMsg + + if (ldClient && enableSbcWebMsg && msgConfig.enable) { + const rtc = useRuntimeConfig().public + const genesysUrl = rtc.genesysUrl as string + const environmentKey = rtc.genesysEnvironmentKey as string + const deploymentKey = rtc.genesysDeploymentKey as string + + const initWebMsg = () => { + window._genesysJs = 'Genesys' + window.Genesys = window.Genesys || function (...args: any) { + (window.Genesys.q = window.Genesys.q || []).push(args) + } + window.Genesys.t = Date.now() + window.Genesys.c = { + environment: environmentKey, + deploymentId: deploymentKey + } + + const script = document.createElement('script') + script.async = true + script.src = genesysUrl + document.head.appendChild(script) + localStorage.removeItem('_actmu') + } + + const removeWebMsg = () => { + const script = document.querySelector(`script[src="${genesysUrl}"]`) + if (script) { + script.remove() + } + + // clean up // TODO: cleanup + delete window.Genesys + delete window._genesysJs + localStorage.removeItem('_actmu') + } + + const isRouteAllowed = (path: string): boolean => { + if (msgConfig.allowedRoutes === undefined) { + return true + } + return msgConfig.allowedRoutes.some(route => path.includes(route)) + } + + if (isRouteAllowed(to.path)) { + console.log('init') + initWebMsg() + } else { + // TODO: make this work + removeWebMsg() + console.log('remove') + } + } +}) diff --git a/strr-base-web/app/plugins/sbc-web-messenger.client.ts b/strr-base-web/app/plugins/sbc-web-messenger.client.ts deleted file mode 100644 index 91da1b7a7..000000000 --- a/strr-base-web/app/plugins/sbc-web-messenger.client.ts +++ /dev/null @@ -1,94 +0,0 @@ -// TODO: get ld flag working, organize plugin, comments, test, etc -export default defineNuxtPlugin(async () => { - const { ldClient, getStoredFlag } = useConnectLaunchdarklyStore() - await ldClient?.waitUntilReady() - const rtc = useRuntimeConfig().public - const msgConfig = useAppConfig().strrBaseLayer.sbcWebMsg - - const ldFlag = getStoredFlag('enable-sbc-web-messenger') - - const genesysUrl = rtc.genesysUrl - const environmentKey = rtc.genesysEnvironmentKey - const deploymentKey = rtc.genesysDeploymentKey - - if (!genesysUrl || !environmentKey || !deploymentKey) { - console.warn('SBC Web Messenger configuration is incomplete. SBC Web Messenger will not be initialized.') - return - } - - const initGenesys = () => { - // if (!msgConfig.enable || !ldFlag) { - // console.warn('SBC Web Messenger has been disabled.') - // return - // } - - // prevent duplicate - if (window._genesysJs) { - console.warn('SBC Web Messenger has already been initialized.') - return - } - - // check if exists already - const scriptExists = document.querySelector(`script[src="${genesysUrl}"]`) - if (scriptExists) { - console.warn('Genesys script already exists in the document.') - return - } - - window._genesysJs = 'Genesys' - window.Genesys = window.Genesys || function () { - (window.Genesys.q = window.Genesys.q || []).push(arguments) - } - window.Genesys.t = Date.now() - window.Genesys.c = { - environment: 'prod-cac1', - deploymentId: '1c8e851a-5bc8-4d50-bc7b-2f6365e04124' - } - const ys = document.createElement('script') - ys.async = true - ys.src = genesysUrl - // ys.charset = 'utf-8'; // Deprecated - ys.onload = () => { - console.info('SBC Web Messenger script loaded successfully.') - } - ys.onerror = (error) => { - console.error('Failed to load SBC Web Messenger script:', error) - } - document.head.appendChild(ys) - localStorage.removeItem('_actmu') - } - - const removeGenesys = () => { - const script = document.querySelector(`script[src="${genesysUrl}"]`) - if (script) { - script.remove() - } - - // clean up // TODO: cleanup - // delete window.Genesys - // delete window._genesysJs - localStorage.removeItem('_actmu') - } - - const router = useRouter() - - const allowedRoutes = useAppConfig().strrBaseLayer.sbcWebMsg.allowedRoutes - - const isRouteAllowed = (path: string): boolean => { - if (allowedRoutes === undefined) { - return true - } - return allowedRoutes.some(route => path.includes(route)) - } - - router.beforeEach((to, from, next) => { - console.log('route: ', to.path) - initGenesys() - // if (isRouteAllowed(to.path)) { - // initGenesys() - // } else { - // removeGenesys() - // } - next() - }) -}) diff --git a/strr-base-web/app/types/strr-base-app-config.d.ts b/strr-base-web/app/types/strr-base-app-config.d.ts index 5a0ee348e..043c098c5 100644 --- a/strr-base-web/app/types/strr-base-app-config.d.ts +++ b/strr-base-web/app/types/strr-base-app-config.d.ts @@ -18,7 +18,10 @@ declare module 'nuxt/schema' { }, sbcWebMsg: { enable: boolean, - allowedRoutes: string[] | undefined + allowedRoutes: string[] | undefined, + genesysUrl: string, + genesysEnvironmentKey: string, + genesysDeploymentKey: string } } } @@ -44,7 +47,10 @@ declare module 'nuxt/schema' { }, sbcWebMsg: { enable: boolean, - allowedRoutes: string[] | undefined + allowedRoutes: string[] | undefined, + genesysUrl: string, + genesysEnvironmentKey: string, + genesysDeploymentKey: string } } } diff --git a/strr-base-web/nuxt.config.ts b/strr-base-web/nuxt.config.ts index a2e5aecf8..b269c5491 100644 --- a/strr-base-web/nuxt.config.ts +++ b/strr-base-web/nuxt.config.ts @@ -91,9 +91,12 @@ export default defineNuxtConfig({ housingStrrUrl: process.env.NUXT_REGISTRY_HOME_URL, // TODO: update to NUXT_HOUSING_STRR_URL once we get the housing strr url set declineTosRedirectUrl: process.env.NUXT_DECLINE_TOS_REDIRECT_URL, bcGovStrrUrl: process.env.NUXT_BCGOV_STRR_URL, - genesysUrl: process.env.NUXT_GENESYS_URL, - genesysEnvironmentKey: process.env.NUXT_GENESYS_ENVIRONMENT_KEY, - genesysDeploymentKey: process.env.NUXT_GENESYS_DEPLOYMENT_KEY + genesysUrl: 'https://apps.cac1.pure.cloud/genesys-bootstrap/genesys.min.js', + genesysEnvironmentKey: 'prod-cac1', + genesysDeploymentKey: '1c8e851a-5bc8-4d50-bc7b-2f6365e04124' + // genesysUrl: process.env.NUXT_GENESYS_URL, + // genesysEnvironmentKey: process.env.NUXT_GENESYS_ENVIRONMENT_KEY || '', + // genesysDeploymentKey: process.env.NUXT_GENESYS_DEPLOYMENT_KEY || '' // set by layer - still required in .env // keycloakAuthUrl - NUXT_KEYCLOAK_AUTH_URL // keycloakClientId - NUXT_KEYCLOAK_CLIENTID