{"version":3,"file":"static/js/1644.a7b50c57.chunk.js","mappings":"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BACA,wCACA,oCACA,oCACA,gCACA,mCACA,qBACA,iCACA,kCACA,wBACA,8BACA,4BACA,8BACA,8BACA,0CACA,8BACA,8BACA,kCACA,+BACA,4CACA,4CACA,iCACA,8BACA,yCACA,qCACA,8BAGWO,EAAqB,CAChC,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,UACA,UACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,Q,sDClHK,MAAMsE,EAA4B,sBAElC,SAASzB,EACd0B,EACAC,EACA/F,EACAgG,EACAC,GAEA,IAAIC,EAAkBjC,SAASC,cAC7B,0BACC7P,MACH,IAAK6R,EACH,OAEFA,EAAkBA,EAAgBnR,OAAOL,cAEzC,MAAMyR,EAAsBC,IAC5B,IAAIC,EAAqBF,EAAoBG,MAC1C9Q,GAAMA,EAAE4K,WAAa8F,IAExB,GAAIG,EACEP,GAAYO,EAAmBE,MAAQ,IACzCF,EAAmBG,WAAY,IAAI1b,MAAO2b,UAC1CJ,EAAmBE,aAEhB,CACL,IAAKT,EACH,OAEFO,EAAqB,CACnBE,MAAO,EACPG,YAAY,EACZF,WAAW,IAAI1b,MAAO2b,UACtBrG,SAAU8F,GAEZC,EAAoBQ,KAAKN,EAC3B,CAEA,MAAME,EAAQF,EAAmBE,MAE3BK,EAAY3C,SAASC,cAA8B,mBACzD,IAAI2C,EAAK5C,SAASC,cAAkC,qBAC/C2C,IACHA,EAAK5C,SAASwB,cAAc,MAC5BoB,EAAG9B,UAAU+B,IAAI,eACjBD,EAAGnC,aAAa,KAAM,oBACtBmC,EAAGnC,aAAa,QAAS,kBACzBkC,GAAWG,aAAaF,EAAID,EAAU9V,SAAS,KAEjD+V,EAAGvC,UAAY0B,EACZzb,QAAQ,QAASyc,OAAOT,IACxBhc,QAAQ,QAAS,KAEpB,MA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","sources":["webpack:///./src/auth/Login.tsx","webpack:///./src/auth/LoginButton.tsx","webpack:///./src/auth/LoginCallbackView.tsx","webpack:///./src/auth/LoginView.tsx","webpack:///./src/auth/LogoutView.tsx","webpack:///./src/auth/PermissionGate.tsx","webpack:///./src/auth/ProfileView.tsx","webpack:///./src/auth/RedirectToIdp.tsx","webpack:///./src/auth/RequireAuth.tsx","webpack:///./src/auth/RequireStepUpAuth.tsx","webpack:///./src/auth/TermsAndConditions.tsx","webpack:///./src/auth/WelcomeVideo.tsx","webpack:///./src/auth/auth-context/AuthProvider.tsx","webpack:///./src/auth/auth-context/OktaHelper.tsx","webpack:///./src/auth/auth-context/auth-context.ts","webpack:///./src/auth/auth-context/useAuthConfig.ts","webpack:///./src/auth/okta-widget-customizations/FailedLoginDialog.tsx","webpack:///./src/auth/okta-widget-customizations/LoginWidget.tsx","webpack:///./src/auth/okta-widget-customizations/MfaWarningMessage.tsx","webpack:///./src/auth/okta-widget-customizations/extras.ts","webpack:///./src/auth/okta-widget-customizations/failed-login-attempts.ts","webpack:///./src/auth/okta-widget-customizations/failed-login-dialog.hooks.ts","webpack:///./src/auth/use-resellerProfile.ts","webpack:///./src/auth/use-reusable-contents.ts","webpack:///./src/auth/useAutoSignIn.tsx","webpack:///./src/auth/useCopyrightLinks.ts","webpack:///./src/auth/useHasPermission.ts","webpack:///./src/auth/useHasRole.ts","webpack:///./src/auth/useIsFeatureWhitelisted.ts","webpack:///./src/auth/useIsImpersonationMode.ts","webpack:///./src/auth/useRedirectToLogin.ts","webpack:///./src/auth/useWelcomeVideoURL.ts","webpack:///./src/auth/utils.ts","webpack:///./src/content/campaign-context/CampaignProvider.tsx","webpack:///./src/content/campaign-context/useCampaignConfig.ts","webpack:///./src/content/cms-featureFlag-context/CmsFeatureFlagProvider.tsx","webpack:///./src/content/cms-featureFlag-context/useCmsFeatureFlagConfig.ts","webpack:///./src/content/cookies-consent/CookiesConsent.tsx","webpack:///./src/content/helmet/metaTags.tsx","webpack:///./src/feature-flag/FeatureFlagProvider.tsx","webpack:///./src/feature-flag/useFeatureFlag.ts","webpack:///./src/feature-flag/useFeatureFlagConfig.ts","webpack:///./src/provider/dd-custom-actions/PageLoadMetrics/PageLoadMetricsProvider.tsx","webpack:///./src/provider/dd-custom-actions/PageLoadTimeProvider.tsx"],"sourcesContent":["import React from 'react';\nimport { LoginView } from './LoginView';\nimport { RedirectToIdp } from './RedirectToIdp';\nimport { useSiteConfig } from '../config';\n\nexport function Login() {\n const siteConfig = useSiteConfig();\n if (siteConfig.idpLogin) {\n return <RedirectToIdp />;\n } else {\n return <LoginView />;\n }\n}\n","import React from 'react';\nimport Button from '@mui/material/Button';\nimport { useNavigate } from 'react-router-dom';\nimport { useOktaAuth } from '@okta/okta-react';\n\nexport function LoginButton() {\n const navigate = useNavigate();\n const oktaContext = useOktaAuth();\n if (!oktaContext) return null;\n\n const isAuthenticated = oktaContext.authState?.isAuthenticated;\n\n const onClick = () => {\n if (isAuthenticated) {\n signOut();\n } else {\n navigate('/login');\n }\n };\n\n const signOut = async () => {\n const postLogoutRedirectUri = `${globalThis.location.origin}/cep`;\n\n try {\n await oktaContext.oktaAuth.signOut({ postLogoutRedirectUri });\n } catch (err) {\n console.error('logout', err);\n throw err;\n }\n };\n\n return (\n <Button onClick={onClick} size=\"small\" variant=\"text\">\n {isAuthenticated ? 'Logout' : 'Login'}\n </Button>\n );\n}\n","import { LoginCallback, useOktaAuth } from '@okta/okta-react';\nimport React, { useEffect, useState } from 'react';\nimport { Navigate } from 'react-router';\n\nexport function LoginCallbackView() {\n const [originalUri, setOriginalUri] = useState<string>('/');\n const oktaContext = useOktaAuth();\n const { authState, oktaAuth } = oktaContext;\n useEffect(() => {\n const uri = oktaAuth.getOriginalUri();\n if (uri) {\n setOriginalUri(uri);\n }\n }, [oktaAuth]);\n\n if (authState?.isAuthenticated) {\n return <Navigate replace to={originalUri} />;\n }\n return <LoginCallback />;\n}\n","/*eslint import/no-cycle: [2, { maxDepth: 1 }]*/\nimport React from 'react';\nimport { usePageTitle } from '../config';\nimport { styled } from '@mui/material/styles';\nimport '../../node_modules/@okta/okta-signin-widget/dist/css/okta-sign-in.min.css';\nimport { useLocalizationContext, useTranslate } from '@im/react-localization';\nimport { IngramLogoWithRX4CLoginHeader } from '@im/ui-lib/icons/IngramLogoWithRX4CLoginHeader';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\nimport { CulturePicker } from '@im/ui-lib/CulturePicker/CulturePicker';\nimport { LoginWidget } from './okta-widget-customizations/LoginWidget';\nimport { PageLoadTimeProvider } from '../provider/dd-custom-actions';\n\nexport const LoginView = () => {\n const translateStr = useTranslate();\n const copyrightContent = translateStr('OktaWidget.Copyright');\n const whatYearIsItNow = new Date().getFullYear().toString();\n const { updatePageTitle } = usePageTitle();\n const l10nContext = useLocalizationContext();\n const { locale } = l10nContext;\n const [, countryCode] = locale.split('-');\n\n const contactUsURLs = {\n BE: `/cep/app/cms/en-be/general/contact-us`,\n NL: `/cep/app/cms/nl-nl/general/contact-us`,\n };\n\n const isCountryCode = (code: string): code is keyof typeof contactUsURLs => {\n return code in contactUsURLs;\n };\n\n const openContactUsNewTab = (countryCode: string) => {\n if (isCountryCode(countryCode)) {\n (window as any).open(contactUsURLs[countryCode], '_blank');\n } else {\n console.error(\n 'Invalid country code or missing URL for the provided country code.'\n );\n }\n };\n\n updatePageTitle(translateStr('Title.Login'));\n return (\n <PageLoadTimeProvider>\n <Root>\n <Stack\n direction={{ sm: 'row', xs: 'column' }}\n justifyContent={{ sm: 'space-between', xs: 'start' }}\n sx={{\n backgroundImage: `url('/cep/assets/img/login/login-header.webp')`,\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n height: 446,\n }}\n >\n <Box padding={{ sm: 4, xs: '2rem 0 0 2rem' }}>\n <IngramLogoWithRX4CLoginHeader />\n </Box>\n <Box padding={{ sm: 4, xs: '1rem 0 0 1rem' }}>\n <CulturePicker />\n </Box>\n </Stack>\n <Box\n sx={{\n backgroundImage: `url('/cep/assets/img/login/login-body.webp')`,\n backgroundPositionX: 'calc(50% + 230px)',\n backgroundPositionY: 88,\n backgroundRepeat: 'no-repeat',\n bgcolor: (theme) => theme.palette.grey[100],\n minHeight: 514,\n }}\n >\n <LoginWidget />\n </Box>\n <Box\n sx={{\n alignContent: 'center',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'center',\n }}\n >\n <Typography\n align=\"center\"\n color={(theme) => theme.palette.text.secondary}\n padding={3}\n variant=\"body2\"\n >\n {copyrightContent.replace(/\\{\\{year\\}\\}/gi, whatYearIsItNow)}\n </Typography>\n {countryCode &&\n (countryCode.toUpperCase() === 'BE' ||\n countryCode.toUpperCase() === 'NL') && (\n <Button\n onClick={() => openContactUsNewTab(countryCode)}\n size=\"medium\"\n sx={{\n borderColor: '#C4C4C4 !important',\n fontSize: '14px',\n marginTop: 2,\n }}\n variant=\"outlined\"\n >\n {translateStr('Login.Contact_us')}\n </Button>\n )}\n </Box>\n {window.isOneTrustEnabled && (\n <style>{`#onetrust-banner-sdk.otFlat {left:28px !important}`}</style>\n )}\n </Root>\n </PageLoadTimeProvider>\n );\n};\n\nconst Root = styled('div')(({ theme }) => ({\n '#okta-sign-in .auth-header': {\n padding: '80px 90px 75px',\n },\n '#okta-sign-in .beacon-container': {\n bottom: 30,\n },\n '#okta-sign-in.auth-container': {\n '.mfa-google-auth,.mfa-google-auth-30': {\n backgroundImage:\n 'url(/cep/assets/okta-signin-widget/img/icons/mfa/google-ms-authenticators_sm.png)',\n backgroundSize: 'contain',\n },\n },\n '#okta-sign-in.auth-container.main-container': {\n '.auth-content': {\n padding: 'unset',\n },\n '.button-primary': {\n background: theme.palette.primary.main,\n borderColor: theme.palette.primary.main,\n borderRadius: 6,\n color: theme.palette.common.white,\n fontSize: 18,\n height: 56,\n },\n '.link': {\n color: theme.palette.text.primary,\n fontSize: 14,\n },\n '.o-form .infobox': {\n color: theme.palette.text.secondary,\n },\n '.o-form .input-fix': {\n border: 'unset',\n height: 52,\n input: {\n '&:-webkit-autofill': {\n WebkitBoxShadow: `0 0 0 25px ${theme.palette.common.white} inset`,\n WebkitTextFillColor: theme.palette.text.primary,\n borderRadius: 6,\n },\n '&::selection': {\n //backgroundColor: theme.palette.common.black,\n },\n border: `1px solid ${theme.palette.text.secondary}`,\n borderRadius: 6,\n },\n },\n '.o-form-explain': {\n color: 'unset',\n textAlign: 'left',\n },\n '.o-form-fieldset': {\n '&:first-of-type': {\n marginBottom: 40,\n },\n },\n '.o-form-head': {\n color: theme.palette.text.primary,\n fontSize: 16,\n fontWeight: 400,\n lineHeight: '18.75px',\n textAlign: 'left',\n },\n '.okta-form-input-field': {\n backgroundColor: 'unset',\n boxShadow: 'unset',\n },\n '.okta-form-label': {\n backgroundColor: theme.palette.grey[100],\n fontWeight: 400,\n left: 16,\n padding: '0 4px',\n position: 'relative',\n top: 10,\n width: 'auto',\n zIndex: 1,\n },\n '.okta-sign-in-header.auth-header': {\n '.beacon-container.beacon-small': {\n display: 'none',\n },\n borderBottom: 'unset',\n },\n '@media screen and (min-width: 950px)': {\n left: -220,\n },\n backgroundColor: 'transparent',\n borderColor: 'transparent',\n boxShadow: 'none',\n color: theme.palette.text.primary,\n fontFamily: 'Roboto',\n input: {\n backgroundColor: theme.palette.common.white,\n color: theme.palette.text.primary,\n fontFamily: 'unset',\n },\n margin: 'auto',\n overflow: 'unset',\n width: 412,\n },\n '#okta-sign-in.no-beacon .auth-header': {\n paddingBottom: 'unset',\n },\n}));\n","import React, { useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { CenterLoader } from '@im/ui-lib/CenterLoader';\n\nimport { useOktaAuth } from '@okta/okta-react';\nimport { useSiteConfig } from '../config';\n\nconst ORIGIN = globalThis.location.origin;\n\nexport const LogoutView = () => {\n const oktaContext = useOktaAuth();\n const navigate = useNavigate();\n const siteConfig = useSiteConfig();\n const logoutRedirectUri = siteConfig.idpLogin ? '/cep' : '/cep/app/login';\n\n useEffect(() => {\n const oktaAuth = oktaContext?.oktaAuth;\n const postLogoutRedirectUri = `${ORIGIN}${logoutRedirectUri}`;\n\n if (oktaAuth) {\n localStorage.removeItem('OktaSession');\n localStorage.removeItem('AccessToken');\n localStorage.removeItem('WarehouseStore');\n sessionStorage.removeItem('trendingProductsFilters');\n localStorage.removeItem('visitedQuickInsightPages');\n sessionStorage.removeItem('ignoreCCRedirect');\n localStorage.removeItem('getContact');\n oktaAuth\n .signOut({ postLogoutRedirectUri })\n .then(() => {\n oktaAuth.tokenManager.clear();\n })\n .catch((err) => {\n console.error('Sign out error:', err);\n });\n } else {\n window.location.href = postLogoutRedirectUri;\n }\n }, [navigate, oktaContext, logoutRedirectUri]);\n\n return <CenterLoader />;\n};\n","import React, { ReactNode } from 'react';\nimport { useTranslate } from '@im/react-localization';\nimport { useHasPermission } from './useHasPermission';\n\ntype Props = {\n children: ReactNode;\n fallback?: NonNullable<ReactNode> | null;\n roles: string[];\n};\n\n/** Renders `children` when User has at least 1 role in the `roles` prop.\n *\n * For AND logic one entry in the `roles` props can be a list of roles separated\n * by \"&\" character. Whitespace will be ignored.\n *\n * E.g. User must have role1 OR (role2 AND role3)\n * ```\n * roles = ['role1', 'role2 & role3']\n * ```\n */\nexport function PermissionGate(props: Props) {\n const { children, fallback, roles } = props;\n\n const translate = useTranslate();\n const hasPermission = useHasPermission();\n\n if (hasPermission(roles)) {\n return <>{children}</>;\n }\n\n if (fallback) {\n return <>{fallback}</>;\n }\n\n return <h2>{translate('Common.UnAuthorized')}</h2>;\n}\n","import React from 'react';\nimport { useDecodedToken } from './authorization.hook';\n\nimport { View } from '@im/ui-lib/View';\nimport { RequireAuth } from './RequireAuth';\n\nconst ProfileViewComp = () => {\n const decodedToken = useDecodedToken();\n\n if (!decodedToken) {\n return (\n <div>\n <p>Fetching user profile...</p>\n </div>\n );\n }\n\n return (\n <View>\n <div>\n <h1>My User Profile (Access Token Claims)</h1>\n <p>\n Below is the information from your access token which was obtained\n during{' '}\n <a href=\"https://developer.okta.com/docs/guides/implement-auth-code-pkce\">\n PKCE Flow\n </a>{' '}\n and is now stored in local storage.\n </p>\n <p>\n This View is protected with the <code><RequireAuth></code>{' '}\n component, which will ensure that this View cannot be accessed until\n you have authenticated.\n </p>\n <table>\n <thead>\n <tr>\n <td>\n <b>Claim</b>\n </td>\n <td>\n <b>Value</b>\n </td>\n </tr>\n </thead>\n <tbody>\n {Object.entries(decodedToken).map((claimEntry) => {\n const claimName = claimEntry[0];\n const claimValue = claimEntry[1];\n const claimId = `claim-${claimName}`;\n return (\n <tr key={claimName}>\n <td>{claimName}</td>\n <td id={claimId}>\n {typeof claimValue === 'object' ? (\n <pre>{JSON.stringify(claimValue, undefined, 2)}</pre>\n ) : (\n claimValue.toString()\n )}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </View>\n );\n};\n\nexport const ProfileView = () => <RequireAuth children={<ProfileViewComp />} />;\n","import { useLocalizationContext } from '@im/react-localization';\nimport { useOktaAuth } from '@okta/okta-react';\nimport React, { useEffect } from 'react';\nimport { useLocation } from 'react-router';\nimport { useDeleteRedundantSession } from './useAutoSignIn';\n\nexport function RedirectToIdp() {\n const oktaContext = useOktaAuth();\n const { oktaAuth } = oktaContext;\n const location = useLocation();\n const { locale } = useLocalizationContext();\n const historyState = location.state as { from: Location };\n const deleteRedundantSession = useDeleteRedundantSession();\n let originalUri = '/';\n if (historyState) {\n const { pathname, search } = historyState.from;\n originalUri = pathname + search;\n }\n\n useEffect(() => {\n deleteRedundantSession().then(() => {\n oktaAuth.setOriginalUri(originalUri);\n oktaAuth.signInWithRedirect({\n extraParams: {\n locale: locale,\n },\n });\n });\n }, [deleteRedundantSession, locale, oktaAuth, originalUri]);\n\n return <></>;\n}\n","import React from 'react';\nimport { Navigate, useLocation } from 'react-router-dom';\nimport { useOktaAuth } from '@okta/okta-react';\n\nexport function RequireAuth({ children }: Readonly<{ children: JSX.Element }>) {\n const oktaContext = useOktaAuth();\n const location = useLocation();\n\n const authState = oktaContext?.authState;\n\n if (!authState?.isAuthenticated) {\n // Redirect them to the /login page, but save the current location they were\n // trying to go to when they were redirected. This allows us to send them\n // along to that page after they login, which is a nicer user experience\n // than dropping them off on the home page.\n return <Navigate state={{ from: location }} to=\"/login\" />;\n }\n\n return children;\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Navigate, useLocation } from 'react-router-dom';\nimport { useOktaAuth } from '@okta/okta-react';\nimport { useDecodedToken } from './authorization.hook';\nimport { View } from '@im/ui-lib/View';\nimport { useSiteConfig } from '../config';\nimport { useLocalizationContext } from '@im/react-localization';\nimport { useFeatureFlag } from '../feature-flag';\n\ntype Props = {\n children: JSX.Element;\n env?: string;\n siteCode?: string;\n};\n\nconst acrValue = 'urn:okta:loa:2fa:any';\n\nconst boKeyEnabled = 'Step-Up_Auth_Enabled';\nconst boKeyWhitelist = 'Step-Up_Auth_Reseller_Whitelist';\nconst boKeyBlacklist = 'Step-Up_Auth_Reseller_Blacklist';\n\nexport function RequireStepUpAuth(props: Readonly<Props>) {\n const { children } = props;\n const siteCodes = props.siteCode?.split(',');\n const environments = props.env?.split(',');\n const { environment, siteCode } = useSiteConfig();\n const oktaContext = useOktaAuth();\n const authState = oktaContext?.authState;\n const oktaAuth = oktaContext?.oktaAuth;\n const location = useLocation();\n const token = useDecodedToken();\n const [isStepUpRequired, setStepUpRequired] = useState<boolean | null>(null);\n const { locale } = useLocalizationContext();\n\n const isRequired =\n (!siteCodes || siteCodes?.includes(siteCode)) &&\n (!environments || environments?.includes(environment));\n\n const boKeys = useFeatureFlag([boKeyEnabled, boKeyWhitelist, boKeyBlacklist]);\n const [boKeyIsReady, setBoKeyIsReady] = useState<boolean>(false);\n const boKeyValueRef = useRef(boKeys.value);\n\n useEffect(() => {\n if (boKeys.isReady) {\n boKeyValueRef.current = boKeys.value;\n setBoKeyIsReady(true);\n }\n }, [boKeys]);\n\n useEffect(() => {\n if (authState?.isAuthenticated && boKeyIsReady) {\n const boKeyValues = boKeyValueRef.current;\n const enabled = boKeyValues[boKeyEnabled]?.toLowerCase() === 'true';\n const resellerWhitelist = convertToArray(boKeyValues[boKeyWhitelist]);\n const resellerBlacklist = convertToArray(boKeyValues[boKeyBlacklist]);\n const resellerId = token?.resellerId.toLowerCase().trim();\n const isEnabled =\n enabled &&\n resellerId &&\n (resellerWhitelist.includes('*') ||\n resellerWhitelist.includes(resellerId)) &&\n !resellerBlacklist.includes(resellerId);\n\n if (token?.acr === acrValue || !isRequired || !isEnabled) {\n setStepUpRequired(false);\n } else {\n oktaAuth.token\n .getWithPopup({\n extraParams: {\n acr_values: acrValue,\n locale: locale,\n },\n })\n .then((tokenResponse) => {\n const tokens = tokenResponse.tokens;\n oktaAuth.tokenManager.setTokens(tokens);\n })\n .catch((err) => {\n console.error('authorize call retuned an error: ', err);\n setStepUpRequired(true);\n });\n }\n }\n }, [\n authState,\n boKeyIsReady,\n isRequired,\n locale,\n oktaAuth,\n setStepUpRequired,\n token,\n ]);\n\n if (!authState?.isAuthenticated) {\n return <Navigate state={{ from: location }} to=\"/login\" />;\n }\n\n if (isStepUpRequired) {\n return (\n <View>\n <div>\n <p>Step-up authentication is required!</p>\n </div>\n </View>\n );\n } else if (isStepUpRequired === false) {\n return children;\n }\n\n return (\n <View>\n <div>\n <p>Pending step-up authentication...</p>\n </div>\n </View>\n );\n}\n\nconst convertToArray = (str: string) => {\n if (!str) {\n return [];\n }\n return str\n .split(/[,;]+/)\n .map((x) => x.toLowerCase().trim())\n .filter((x) => x);\n};\n","/* eslint-disable import/max-dependencies */\nimport React, { useEffect, useState } from 'react';\nimport { useNavigate } from 'react-router';\nimport { useLocation } from 'react-router-dom';\nimport { usePageTitle } from '../config';\n/* eslint-disable import/no-extraneous-dependencies*/\nimport Cookies from 'js-cookie';\nimport { styled } from '@mui/material/styles';\nimport Button from '@mui/material/Button';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport { Footer } from '@im/ui-lib/Footer';\nimport { IngramLogo } from '@im/ui-lib/icons/IngramLogo';\nimport { CulturePicker } from '@im/ui-lib/CulturePicker/CulturePicker';\nimport { useReusableContents } from './use-reusable-contents';\nimport { useApiQuery, useApiPatch } from '../query';\nimport htmlparse from 'html-react-parser';\nimport { CenterLoader } from '@im/ui-lib/CenterLoader';\nimport {\n useLocalization,\n useLocalizationContext,\n useTranslate,\n} from '@im/react-localization';\nimport { fetchIpAdrress } from './user-info.hooks';\nimport { useFeatureFlag } from '../feature-flag';\nimport { useOktaAuth } from '@okta/okta-react';\nimport { PageLoadTimeProvider } from '../provider/dd-custom-actions';\nimport { useCopyrightLinks } from './useCopyrightLinks';\n\nexport const TermsAndConditions = () => {\n const navigate = useNavigate();\n const location = useLocation();\n const oktaContext = useOktaAuth();\n const { formatDate } = useLocalization();\n const translate = useTranslate();\n const { locale } = useLocalizationContext();\n const apiPatch = useApiPatch();\n const copyRightLinks = useCopyrightLinks();\n const profileData = useProfileData();\n const termsData = useReusableContents('Terms and conditions');\n const [checked, setChecked] = useState(false);\n const [isNewUser, setIsNewUser] = useState(false);\n const { isReady, value: BO_Keys } = useFeatureFlag(['Enable_User_IP_Update']);\n const [disableAction, setDisableAction] = useState(false);\n\n const { updatePageTitle } = usePageTitle();\n updatePageTitle(translate('Title.TnC'));\n\n useEffect(() => {\n termsData.refetch();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [locale]);\n\n const url = isNewUser ? '/welcome-video' : '/my/dashboard';\n\n useEffect(() => {\n if (\n termsData.status === 'error' ||\n termsData.data?.reusableContents.length === 0\n ) {\n // eslint-disable-next-line no-console\n console.log('[TnC] data is missing');\n navigate(url);\n } else if (profileData.status === 'error') {\n // eslint-disable-next-line no-console\n console.log('[User-Profile] data is missing');\n navigate(url);\n } else if (\n profileData.status === 'success' &&\n termsData.status === 'success'\n ) {\n if (profileData.data.dateLastTermsConditionsAcceptance) {\n if (\n termsData.data.reusableContents.length > 0 &&\n termsData.data.reusableContents[0].documentModifiedWhen\n ) {\n const acceptanceDate = new Date(\n profileData.data.dateLastTermsConditionsAcceptance\n );\n const modifiedDate = new Date(\n termsData.data.reusableContents[0].documentModifiedWhen\n );\n if (acceptanceDate > modifiedDate) {\n navigate(url);\n }\n }\n } else {\n setIsNewUser(true);\n }\n }\n }, [termsData, profileData, navigate, url]);\n\n const handleChange = (e: any) => {\n setChecked(e.target.checked);\n };\n const handleAccept = async () => {\n let clientIp = '';\n setDisableAction(true);\n if (isReady && BO_Keys['Enable_User_IP_Update'] === 'true') {\n clientIp = await fetchIpAdrress();\n }\n apiPatch(`/account-management/v1/users/terms_conditions_acceptance`, {\n clientIp,\n })\n .then((res) => {\n if (res) {\n const state = location.state as {\n isCepWhitelisted: boolean;\n };\n setDisableAction(false);\n if (state && !state.isCepWhitelisted) {\n Cookies.remove('IMOnline_CEP');\n window.location.href = `${window.location.origin}/site/login/idplogin`;\n } else {\n profileData.refetch();\n navigate(url);\n }\n }\n })\n .catch((err) => {\n setDisableAction(false);\n console.error(err);\n });\n };\n\n const handleDecline = async () => {\n const postLogoutRedirectUri = `${globalThis.location.origin}/cep`;\n try {\n localStorage.removeItem('okta-token-storage');\n navigate('/logout');\n await oktaContext.oktaAuth.signOut({ postLogoutRedirectUri });\n } catch (err) {\n console.error('logout', err);\n throw err;\n }\n };\n\n return termsData.status !== 'success' ? (\n <CenterLoader />\n ) : (\n <PageLoadTimeProvider>\n <ScreenContainer>\n <HeaderContainer>\n <IngramLogo />\n <CulturePicker />\n </HeaderContainer>\n <MainContainer>\n <Title>{translate('TnC.HeaderTitle')}</Title>\n <Text>{translate('TnC.HeaderText')}</Text>\n {termsData.data?.reusableContents?.length > 0 && (\n <BoldText>\n {translate('TnC.SalesTermsAndConditions')}{' '}\n <span style={{ fontSize: '12px' }}>\n {'('}\n {translate('TnC.LastUpdated')}\n {` ${formatDate(\n new Date(\n termsData.data?.reusableContents[0]?.documentModifiedWhen\n ),\n 'medium'\n )})`}\n </span>\n </BoldText>\n )}\n {termsData.data?.reusableContents?.length > 0 && (\n <TextContainer id=\"content\">\n {htmlparse(termsData.data?.reusableContents[0]?.content)}\n </TextContainer>\n )}\n {termsData.data?.reusableContents?.length === 0 && (\n <AlertText>{translate('TnC.ContentMissingMessage')}</AlertText>\n )}\n </MainContainer>\n <BottomContainer>\n <FormControlLabel\n control={<Checkbox checked={checked} onChange={handleChange} />}\n label={translate('TnC.ConfirmText')}\n />\n <ButtonContainer>\n <Button\n onClick={() => handleDecline()}\n sx={{ marginLeft: 'auto' }}\n variant=\"outlined\"\n >\n {translate('TnC.Decline')}\n </Button>\n <Button\n disabled={!checked || !isReady || disableAction}\n onClick={() => handleAccept()}\n sx={{ marginLeft: '24px' }}\n variant=\"contained\"\n >\n {translate('TnC.Accept')}\n </Button>\n </ButtonContainer>\n </BottomContainer>\n <FooterContainer>\n <Footer copyRightLinks={copyRightLinks} />\n </FooterContainer>\n </ScreenContainer>\n </PageLoadTimeProvider>\n );\n};\n\ntype TCAcceptanceDateTO = {\n dateLastTermsConditionsAcceptance: string | null;\n};\n\nfunction useProfileData() {\n return useApiQuery<TCAcceptanceDateTO>(`/account-management/v1/users/me`);\n}\n\nconst ScreenContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n}));\n\nconst HeaderContainer = styled('div')(({ theme }) => ({\n alignItems: 'center',\n borderBottom: `1px solid ${theme.palette.divider}`,\n display: 'flex',\n justifyContent: 'space-between',\n padding: theme.spacing(4, 4),\n}));\n\nconst MainContainer = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n marginLeft: 88,\n marginRight: 88,\n marginTop: 36,\n}));\n\nconst Title = styled(Typography)(({ theme }) => ({\n fontSize: 24,\n fontWeight: 400,\n marginBottom: 8,\n}));\n\nconst Text = styled(Typography)(({ theme }) => ({\n fontSize: 16,\n fontWeight: 400,\n marginBottom: 45,\n}));\n\nconst BoldText = styled(Typography)(({ theme }) => ({\n fontSize: 16,\n fontWeight: 600,\n marginBottom: 24,\n}));\n\nconst TextContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n // height: '100%',\n height: '400px',\n marginRight: '40px',\n overflow: 'auto',\n paddingRight: '30px',\n}));\n\nconst BottomContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n marginLeft: '88px',\n marginRight: '128px',\n marginTop: 'auto',\n paddingBottom: '40px',\n paddingTop: '45px',\n}));\n\nconst ButtonContainer = styled(Box)(({ theme }) => ({\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'row',\n}));\n\nconst FooterContainer = styled('div')(({ theme }) => ({\n marginLeft: 56,\n marginRight: 56,\n marginTop: 'auto',\n}));\n\nconst AlertText = styled(Typography)(({ theme }) => ({\n fontSize: 24,\n fontWeight: 400,\n marginBottom: 8,\n textAlign: 'center',\n}));\n","import React, { useEffect, useState } from 'react';\nimport { useNavigate } from 'react-router';\nimport { usePageTitle } from '../config';\nimport Button from '@mui/material/Button';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport CardMedia from '@mui/material/CardMedia';\nimport { styled } from '@mui/material/styles';\nimport { Footer } from '@im/ui-lib/Footer';\nimport { IngramLogo } from '@im/ui-lib/icons/IngramLogo';\nimport { useUserInfo } from './user-info.hooks';\nimport { CulturePicker } from '@im/ui-lib/CulturePicker/CulturePicker';\nimport { useTranslate } from '@im/react-localization';\nimport { CookiesConsent } from '../content';\nimport { PageLoadTimeProvider } from '../provider/dd-custom-actions';\nimport { useWelcomeVideoURL } from './useWelcomeVideoURL';\nimport { useCopyrightLinks } from './useCopyrightLinks';\n\nexport const WelcomeVideo = () => {\n const navigate = useNavigate();\n const userInfo = useUserInfo();\n const copyRightLinks = useCopyrightLinks();\n const { data: dynamicContent, isLoading } = useWelcomeVideoURL();\n\n const translate = useTranslate();\n const { updatePageTitle } = usePageTitle();\n updatePageTitle(translate('Title.Welcome'));\n const [onetrustEnabled, setOnetrustEnabled] = useState(true);\n const [onetrustUpdated, setOnetrustUpdated] = useState(0);\n\n useEffect(() => {\n const win = window as any;\n const isConsented = win?.OnetrustActiveGroups\n ? ['C0002', 'C0003', 'C0004'].every((x) =>\n win.OnetrustActiveGroups.includes(x)\n )\n : false;\n setOnetrustEnabled(!!win?.isOneTrustEnabled && isConsented);\n }, [onetrustUpdated]);\n\n useEffect(() => {\n const eventFunction = () => {\n setOnetrustUpdated((x) => x + 1);\n };\n window.addEventListener('bannerLoaded', eventFunction);\n return () => {\n window.removeEventListener('bannerLoaded', eventFunction);\n };\n }, []);\n\n return (\n <PageLoadTimeProvider>\n <ScreenContainer>\n <HeaderContainer>\n <IngramLogo />\n <CulturePicker />\n </HeaderContainer>\n <MainContainer>\n <PlayerContainer>\n {onetrustEnabled ? (\n !isLoading &&\n (dynamicContent && dynamicContent.videos?.length > 0 ? (\n <CardMedia\n component=\"iframe\"\n height=\"482\"\n image={\n dynamicContent.videos[0].videoType === 'File'\n ? dynamicContent.videos[0].videoFile\n : dynamicContent.videos[0].embedCode\n }\n />\n ) : (\n <CardMedia\n component=\"iframe\"\n height=\"482\"\n image=\"https://www.youtube.com/embed/4CuBIiXiwtk\"\n />\n ))\n ) : (\n <CookiesConsent height=\"479px\"></CookiesConsent>\n )}\n </PlayerContainer>\n <RightContainer>\n <TextContainer>\n <WelcomeText>\n {translate('WelcomeVideo.Welcome')}, {`${userInfo?.given_name}`}\n !\n </WelcomeText>\n <Text>{translate('WelcomeVideo.DigitalTwin')}</Text>\n <Text>{translate('WelcomeVideo.Description')}</Text>\n <Text>{translate('WelcomeVideo.PrivacyPolicy')}</Text>\n </TextContainer>\n <StyledButton\n data-testid=\"LetsBegin\"\n onClick={() => navigate('/my/dashboard')}\n variant=\"contained\"\n >\n {translate('WelcomeVideo.Begin')}\n </StyledButton>\n </RightContainer>\n </MainContainer>\n <FooterContainer>\n <Footer copyRightLinks={copyRightLinks} />\n </FooterContainer>\n </ScreenContainer>\n </PageLoadTimeProvider>\n );\n};\n\nconst ScreenContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n}));\n\nconst HeaderContainer = styled('div')(({ theme }) => ({\n alignItems: 'center',\n borderBottom: `1px solid ${theme.palette.divider}`,\n display: 'flex',\n justifyContent: 'space-between',\n padding: theme.spacing(4, 4),\n}));\n\nconst MainContainer = styled('div')(({ theme }) => ({\n display: 'flex',\n marginLeft: 88,\n marginRight: 88,\n marginTop: 36,\n}));\n\nconst PlayerContainer = styled('div')(({ theme }) => ({\n borderRadius: 6,\n flex: 1,\n height: 482,\n width: 856,\n}));\n\nconst RightContainer = styled('div')(({ theme }) => ({\n flex: 1,\n marginLeft: 32,\n}));\n\nconst TextContainer = styled('div')(({ theme }) => ({}));\n\nconst WelcomeText = styled(Typography)(({ theme }) => ({\n fontSize: 24,\n fontWeight: 600,\n}));\n\nconst Text = styled(Typography)(({ theme }) => ({\n fontSize: 16,\n fontWeight: 400,\n marginTop: 24,\n}));\n\nconst StyledButton = styled(Button)(({ theme }) => ({\n marginTop: 40,\n}));\n\nconst FooterContainer = styled('div')(({ theme }) => ({\n marginTop: 'auto',\n}));\n","import React, { ReactNode, useEffect, useMemo, useState } from 'react';\nimport { OktaAuth, OktaAuthOptions, StorageOptions } from '@okta/okta-auth-js';\nimport { Security } from '@okta/okta-react';\nimport { SiteConfig, useInX4AFrame, useSiteConfig } from '../../config';\nimport { AuthConfig, authConfigContext } from './auth-context';\nimport { OktaHelper } from './OktaHelper';\n\n// No Op; The LoginView redirects to the original path!\nconst restoreOriginalUri = async () => undefined;\n\ntype Props = {\n children: ReactNode;\n};\n\nexport function AuthProvider(props: Props) {\n const { children } = props;\n const siteConfig = useSiteConfig();\n const { isInX4AFrame } = useInX4AFrame();\n const [authConfig, setAuthConfig] = useState<AuthConfig | undefined>(\n undefined\n );\n\n useEffect(() => {\n if (siteConfig) {\n setAuthConfig(createAuthConfig(siteConfig, isInX4AFrame));\n }\n }, [siteConfig, isInX4AFrame]);\n\n const oktaAuth = useMemo(() => {\n if (authConfig) {\n const options: OktaAuthOptions = authConfig;\n return new OktaAuth(options);\n }\n }, [authConfig]);\n\n if (!authConfig || !oktaAuth) {\n return null;\n }\n\n const { Provider } = authConfigContext;\n return (\n <Provider value={authConfig}>\n <Security oktaAuth={oktaAuth} restoreOriginalUri={restoreOriginalUri}>\n <OktaHelper>{children}</OktaHelper>\n </Security>\n </Provider>\n );\n}\n\nfunction createAuthConfig(\n siteConfig: SiteConfig,\n isInFrame: boolean\n): AuthConfig {\n const token: StorageOptions = {\n storageType: isInFrame ? 'sessionStorage' : 'localStorage',\n //storageType: 'sessionStorage',\n };\n\n return {\n clientId: siteConfig.clientId,\n disableHttpsCheck: false,\n ignoreLifetime: true,\n interactionCodeFlow: siteConfig.interactionCodeFlow,\n issuer: siteConfig.authServer,\n maxClockSkew: 21780, //6 hours 5 minutes\n pkce: true,\n redirectUri: `${window.location.origin}/cep/app/login/callback`,\n scopes: ['openid', 'profile', 'email', 'offline_access'],\n services: {\n autoRemove: false,\n autoRenew: false,\n syncStorage: true,\n },\n storageManager: {\n token,\n },\n tokenManager: {\n autoRemove: false,\n autoRenew: false,\n expireEarlySeconds: 240, //doesn't work\n },\n };\n}\n","import React, { ReactNode, useEffect } from 'react';\nimport { useOktaAuth } from '@okta/okta-react';\nimport { AuthState } from '@okta/okta-auth-js';\nimport { useRefreshAccessToken } from '../useRefreshAccessToken';\n\ntype Props = {\n children: ReactNode;\n};\n\nexport function OktaHelper(props: Props) {\n const { children } = props;\n const { authState, oktaAuth } = useOktaAuth();\n const refreshAccessToken = useRefreshAccessToken();\n\n // This useEffect hook was initially written by Andrea in modified local copy of Security component.\n // Since we are using standard unmodified okta-react now, moving this hook here.\n useEffect(() => {\n if (!oktaAuth) {\n return;\n }\n const onAuthStateChange = (authState: AuthState) => {\n (window as any).ImAuthState = authState;\n };\n oktaAuth.authStateManager.subscribe(onAuthStateChange);\n\n // Trigger an initial change event to make sure authState is latest\n oktaAuth.start();\n\n return () => {\n oktaAuth.authStateManager.unsubscribe(onAuthStateChange);\n oktaAuth.stop();\n };\n }, [oktaAuth]);\n\n useEffect(() => {\n if (!oktaAuth || !authState) {\n return;\n }\n\n const onTokenRefresh = () => {\n refreshAccessToken();\n };\n oktaAuth.tokenManager.on('expired', onTokenRefresh);\n\n return () => {\n oktaAuth.tokenManager.off('expired', onTokenRefresh);\n };\n }, [oktaAuth, authState, refreshAccessToken]);\n\n return <>{children}</>;\n}\n","import {\n ServiceManagerOptions,\n StorageManagerOptions,\n TokenManagerOptions,\n} from '@okta/okta-auth-js';\nimport { createContext } from 'react';\n\nexport type AuthConfig = {\n clientId: string;\n disableHttpsCheck: boolean;\n ignoreLifetime: boolean;\n interactionCodeFlow: boolean;\n issuer: string;\n maxClockSkew: number;\n pkce: boolean;\n redirectUri: string;\n scopes: string[];\n services: ServiceManagerOptions;\n storageManager: StorageManagerOptions;\n tokenManager: TokenManagerOptions;\n};\n\nexport const authConfigContext = createContext<AuthConfig | undefined>(\n undefined\n);\n","import { useContext } from 'react';\nimport { authConfigContext } from './auth-context';\n\nexport function useAuthConfig() {\n const authConfig = useContext(authConfigContext);\n if (!authConfig) {\n throw new Error(\n 'authConfigContext value is undefined. Make sure you use the AuthProvider before using the context.'\n );\n }\n return authConfig;\n}\n","import React from 'react';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { useFailedLoginDialogOpenState } from './failed-login-dialog.hooks';\nimport { useLocalization } from '@im/react-localization';\n\nexport function FailedLoginDialog() {\n const [open, setOpen] = useFailedLoginDialogOpenState();\n const { translate } = useLocalization();\n\n return (\n <Dialog\n aria-labelledby=\"failed-login-dialog-title\"\n onClose={() => {\n setOpen(false);\n }}\n open={open}\n >\n <DialogTitle>\n <img alt=\"\" src=\"/cep/assets/img/logo-ingram-blue.png\" width={200} />\n <IconButton\n aria-label=\"close\"\n onClick={() => {\n setOpen(false);\n }}\n sx={{\n position: 'absolute',\n right: (theme) => theme.spacing(1),\n top: (theme) => theme.spacing(1),\n }}\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers>\n <p>{translate('OktaWidget.FailedLoginRedirect', { 0: '3' })}</p>\n </DialogContent>\n </Dialog>\n );\n}\n","/* eslint-disable max-lines */\n\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Navigate,\n Path,\n To,\n useLocation,\n useNavigate,\n useSearchParams,\n} from 'react-router-dom';\nimport { useSiteConfig } from '../../config';\nimport {\n Vocabulary,\n Creds,\n Props,\n customTranslationKeys,\n supportedLanguages,\n} from './extras';\nimport OktaSignInWidget from '@okta/okta-signin-widget';\nimport { useOktaAuth } from '@okta/okta-react';\nimport { useAuthConfig } from '../auth-context';\nimport { useLocalizationContext, useTranslate } from '@im/react-localization';\nimport {\n clearFailedLoginAttempt,\n displayFailedLoginAttempts,\n getUsernameFromLastFailedLoginAttempt,\n} from './failed-login-attempts';\nimport { displayMfaWarning } from './MfaWarningMessage';\nimport { extractQueryParam } from '../utils';\nimport { FailedLoginDialog } from './FailedLoginDialog';\nimport { useSetFailedLoginDialogOpen } from './failed-login-dialog.hooks';\nimport { useAutoSignIn } from '../useAutoSignIn';\nimport { useDecodedToken } from '../authorization.hook';\n\ndeclare global {\n interface Window {\n OOo: any;\n isOneTrustEnabled: boolean;\n }\n}\n\nlet widget: OktaSignInWidget | undefined;\nconst resellerProspectPath = '/reselleronboarding/resellerdetails';\nconst DASHBOARD_PATH = '/my/dashboard';\nconst HOMEPAGE_PATH = '/home';\n\nexport const LoginWidget = (props: Props) => {\n const {\n originalPath: previousPath = '/',\n primaryAuthTitle,\n throwErrors = true,\n } = props;\n const decodedToken = useDecodedToken();\n const translate = useTranslate();\n const resellerProspectUser = decodedToken?.resellerProspect || false;\n const authConfig = useAuthConfig();\n const setFailedLoginDialogOpen = useSetFailedLoginDialogOpen();\n const location = useLocation();\n const navigate = useNavigate();\n const historyState = location.state as { from: Location };\n const { siteCode } = useSiteConfig();\n let originalPath: To = previousPath;\n let originalUsernameParam: undefined | string;\n if (\n historyState?.from?.pathname &&\n !historyState.from.pathname.toLowerCase().includes('/my/checkout')\n ) {\n const { hash, pathname, search } = historyState.from;\n originalPath = { hash, pathname, search };\n\n //Extract username from query params to prepopulate login form\n const [username, updatedSearch] = extractQueryParam(\n originalPath.search,\n 'username'\n );\n originalUsernameParam = username;\n originalPath.search = updatedSearch;\n }\n\n const { locale, localizationService } = useLocalizationContext();\n const [searchParams] = useSearchParams();\n const widgetRef = useRef<any>();\n const [vocabulary, setVocabulary] = useState<Vocabulary | undefined>();\n const { authState, oktaAuth } = useOktaAuth();\n const autoSignIn = useAutoSignIn();\n\n useEffect(() => {\n if (!authState || authState.isAuthenticated) {\n return;\n }\n autoSignIn();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n let isActive = true;\n localizationService\n .translate(customTranslationKeys)\n .then((res: Vocabulary) => {\n if (isActive) {\n setVocabulary(res);\n }\n });\n return () => {\n isActive = false;\n };\n }, [locale, localizationService]);\n\n const signInWidgetConfig = useMemo(() => {\n if (!vocabulary) {\n return;\n }\n\n const { clientId, interactionCodeFlow, issuer, redirectUri } = authConfig;\n\n let transformedUsername: string;\n const i18n: any = {};\n i18n[locale] = {\n 'error.auth.lockedOut': vocabulary['OktaWidget.LockedOut'],\n 'error.unsupported.response':\n vocabulary['OktaWidget.UnsupportedResponse'],\n 'errors.E0000004': vocabulary['OktaWidget.BadUsernamePassword'],\n 'oform.errorbanner.title':\n vocabulary['OktaWidget.AuthFailedContactWebSupport'],\n 'primaryauth.submit': vocabulary['OktaWidget.PrimaryAuthSubmit'],\n 'primaryauth.title':\n primaryAuthTitle || vocabulary['OktaWidget.PrimaryAuthTitle'],\n };\n\n if (siteCode && siteCode?.toLowerCase() === 'fr') {\n i18n[locale]['password.oldPassword.tooltip'] =\n vocabulary['OktaWidget.OldPasswordTooltip'];\n i18n[locale]['password.oldPassword.placeholder'] =\n vocabulary['OktaWidget.OldPasswordPlaceholder'];\n }\n\n if (siteCode && siteCode?.toLowerCase() === 'gb') {\n i18n[locale]['password.oldPassword.placeholder'] =\n vocabulary['OktaWidget.OldPasswordPlaceholder'];\n i18n[locale]['password.oldPassword.tooltip'] =\n vocabulary['OktaWidget.OldPasswordTooltip'];\n i18n[locale]['primaryauth.username.placeholder'] =\n vocabulary['OktaWidget.UsernamePlaceholder'];\n i18n[locale]['primaryauth.password.placeholder'] =\n vocabulary['OktaWidget.PasswordPlaceholder'];\n i18n[locale]['forgotpassword'] = vocabulary['OktaWidget.forgotpassword'];\n i18n[locale]['password.confirmPassword.placeholder'] =\n vocabulary['OktaWidget.confirmPasswordPlaceholder'];\n i18n[locale]['password.confirmPassword.tooltip'] =\n vocabulary['OktaWidget.confirmPasswordTooltip'];\n i18n[locale]['password.newPassword.placeholder'] =\n vocabulary['OktaWidget.newPasswordPlaceholder'];\n i18n[locale]['password.newPassword.tooltip'] =\n vocabulary['OktaWidget.newPasswordTooltip'];\n i18n[locale]['password.expired.submit'] =\n vocabulary['OktaWidget.passwordExpiredSubmit'];\n i18n[locale]['signout'] = vocabulary['OktaWidget.Signout'];\n i18n[locale]['password.expired.title.generic'] =\n vocabulary['OktaWidget.ExpiredTitleGeneric'];\n i18n[locale]['model.validation.field.blank'] =\n vocabulary['OktaWidget.ValidationFieldBlank'];\n i18n[locale]['password.error.match'] =\n vocabulary['OktaWidget.ErrorMatch'];\n i18n[locale]['oform.errorbanner.title'] =\n vocabulary['OktaWidget.ErrorbannerTitle'];\n i18n[locale]['error.expired.session'] =\n vocabulary['OktaWidget.ExpiredSession'];\n i18n[locale]['error.username.required'] =\n vocabulary['OktaWidget.UsernameRequired'];\n i18n[locale]['error.password.required'] =\n vocabulary['OktaWidget.PasswordRequired'];\n i18n[locale]['password.complexity.requirements.header'] =\n vocabulary['OktaWidget.ComplexityRequirementsHeader'];\n i18n[locale]['password.complexity.number'] =\n vocabulary['OktaWidget.ComplexityNumber'];\n i18n[locale]['password.complexity.symbol'] =\n vocabulary['OktaWidget.ComplexitySymbol'];\n i18n[locale]['password.complexity.no_username'] =\n vocabulary['OktaWidget.ComplexityNoUsername'];\n i18n[locale]['password.complexity.history'] =\n vocabulary['OktaWidget.ComplexityHistory'];\n i18n[locale]['password.complexity.lowercase'] =\n vocabulary['OktaWidget.ComplexityLowercaseDescription'];\n i18n[locale]['password.complexity.uppercase.description'] =\n vocabulary['OktaWidget.ComplexityUppercaseDescription'];\n i18n[locale]['password.complexity.uppercase'] =\n vocabulary['OktaWidget.ComplexityUppercase'];\n i18n[locale]['password.complexity.length'] =\n vocabulary['OktaWidget.ComplexityLength'];\n i18n[locale]['password.complexity.length.description'] =\n vocabulary['OktaWidget.ComplexityLengthDescription'];\n i18n[locale][\n 'password.complexity.requirements'\n ] = `${vocabulary['OktaWidget.ComplexityRequirementsHeader']} {0}`;\n }\n\n if (siteCode === 'mx' && locale === 'es-MX') {\n i18n[locale]['rememberDevice.timebased'] =\n vocabulary['OktaWidget.RememberDeviceTimebased'];\n }\n\n const config = {\n assets: {\n baseUrl: '/cep/assets/okta-signin-widget',\n languages: supportedLanguages,\n },\n authClient: oktaAuth,\n authParams: {\n // To avoid redirect do not set \"pkce\" or \"display\" here. OKTA-335945\n //issuer,\n //scopes,\n },\n /**\n * Note: when using the Sign-In Widget for an OIDC flow, it still\n * needs to be configured with the base URL for your Okta Org. Here\n * we derive it from the given issuer for convenience.\n */\n baseUrl: issuer.split('/oauth2')[0],\n clientId,\n\n features: {\n rememberMe: false,\n showPasswordToggleOnSignInPage: true,\n },\n\n helpLinks: {\n forgotPassword: `/cep/app/frame-public?url=${encodeURIComponent(\n '/Site/Password/Forgot'\n )}`,\n },\n i18n: i18n,\n language: locale,\n processCreds: (creds: Creds, callback: () => void) => {\n const { username } = creds;\n const transformUsernamePromiose = fetch(\n '/Site/Sso/TransformUserNameString',\n {\n body: username,\n method: 'POST',\n }\n )\n .then((response) => response.text())\n .then((data) => {\n transformedUsername = data;\n return transformedUsername;\n })\n .catch((error) => {\n console.error('username transform error: ', error);\n transformedUsername = username;\n return transformedUsername;\n });\n\n const closeSessionPromise = oktaAuth.session\n .exists()\n .then((sessionExists) => {\n if (sessionExists) {\n return oktaAuth.session.close();\n }\n });\n\n Promise.all([transformUsernamePromiose, closeSessionPromise])\n .then(() => {\n callback();\n })\n .catch(() => {\n callback();\n });\n },\n redirectUri,\n\n transformUsername: (username: string, _operation: string) => {\n return transformedUsername && transformedUsername.startsWith(username)\n ? transformedUsername\n : username;\n },\n useClassicEngine: !interactionCodeFlow,\n useInteractionCodeFlow: interactionCodeFlow, // Set to true, if your org is OIE enabled\n username:\n (searchParams.get('username') ??\n getUsernameFromLastFailedLoginAttempt()) ||\n originalUsernameParam,\n };\n\n return config;\n }, [\n authConfig,\n locale,\n oktaAuth,\n originalUsernameParam,\n primaryAuthTitle,\n searchParams,\n siteCode,\n vocabulary,\n ]);\n\n useEffect(() => {\n if (!signInWidgetConfig || !vocabulary) {\n return;\n }\n\n widget = new OktaSignInWidget(signInWidgetConfig);\n widget.renderEl(\n { el: widgetRef.current },\n (res) => {\n clearFailedLoginAttempt();\n oktaAuth?.handleLoginRedirect(res.tokens);\n },\n (err) => {\n console.error('widget err', err);\n if (throwErrors) {\n throw err;\n }\n }\n );\n\n widget.on('afterError', (_context, error) => {\n //for some unknown reason authfactor.challenge.soft_token.invalid_passcode\n //always shows up in English and coudn't be overridden in i18n object\n //applying this javascript workaround, support ticket has been sent to Okta\n if (error?.xhr?.responseJSON?.errorCode === 'E0000068') {\n const p = document.querySelector('.okta-form-infobox-error p');\n if (p) {\n p.textContent = vocabulary['OktaWidget.InvalidPasscode'];\n }\n }\n\n if (error?.xhr?.responseJSON?.errorCode === 'E0000004') {\n displayFailedLoginAttempts(\n true,\n false,\n setFailedLoginDialogOpen,\n vocabulary['OktaWidget.FailedLoginAttempts'],\n vocabulary['OktaWidget.FailedLoginWarning']\n );\n } else if (error?.xhr?.responseJSON?.errorCode === 'E0000119') {\n displayFailedLoginAttempts(\n true,\n true,\n setFailedLoginDialogOpen,\n vocabulary['OktaWidget.FailedLoginAttempts'],\n vocabulary['OktaWidget.FailedLoginWarning']\n );\n }\n\n const p = document.querySelector<HTMLParagraphElement>(\n '.okta-form-infobox-error.infobox.infobox-error p'\n );\n if (p) {\n p.innerHTML = p.innerText;\n }\n });\n\n widget.on('afterRender', (_context) => {\n displayMfaWarning({ context: _context, siteCode, translate });\n\n const ul = document.querySelector('ul#help-links-container');\n ul?.setAttribute('style', 'display: block');\n\n const a = document.querySelector('a.link.help.js-help');\n a?.setAttribute('style', 'display: none');\n\n const li = document.querySelector('a.link.js-help-link')?.parentElement;\n li?.setAttribute('style', 'display: none');\n\n // workaround to naviage to forgot password page using React Router\n const forgotPasswordLink = document.querySelector<HTMLAnchorElement>(\n 'a.link.js-forgot-password'\n );\n\n forgotPasswordLink?.classList.remove('js-forgot-password');\n forgotPasswordLink?.addEventListener('click', (event: any) => {\n event.preventDefault();\n navigate(`/account/forgotpassword`);\n });\n\n if (_context.controller === 'primary-auth') {\n displayFailedLoginAttempts(\n false,\n false,\n setFailedLoginDialogOpen,\n vocabulary['OktaWidget.FailedLoginAttempts'],\n vocabulary['OktaWidget.FailedLoginWarning']\n );\n }\n });\n // Return clean-up function\n return () => {\n if (widget) {\n widget.off();\n widget.remove();\n widget = undefined;\n }\n };\n }, [\n signInWidgetConfig,\n oktaAuth,\n setFailedLoginDialogOpen,\n vocabulary,\n navigate,\n siteCode,\n throwErrors,\n translate,\n ]);\n\n if (authState?.isAuthenticated) {\n // No need to show the login form if already authenticated\n if (originalPath?.search?.toString()?.includes('Password')) {\n originalPath.search = '/';\n } else if (Object.values(originalPath)[1]?.includes('password')) {\n originalPath = '/';\n }\n if ((originalPath as Path)?.pathname === HOMEPAGE_PATH) {\n originalPath = DASHBOARD_PATH;\n }\n return (\n <Navigate\n replace\n to={resellerProspectUser ? resellerProspectPath : originalPath}\n />\n );\n }\n\n return (\n <>\n <div ref={widgetRef} />\n <FailedLoginDialog />\n </>\n );\n};\n","// mfaWarning.ts\ninterface DisplayMfaWarningOptions {\n context: { controller: string };\n siteCode: string;\n translate: (key: string) => string;\n}\n\nexport function displayMfaWarning({\n context,\n siteCode,\n translate,\n}: DisplayMfaWarningOptions) {\n const mfaWarningMessage = translate(\n `OktaWidget.MfaRequiredMessage_${siteCode}`\n );\n\n // Target the header element\n const headerElement = document.querySelector(\n '.okta-sign-in-header.auth-header'\n ) as HTMLElement;\n\n // Remove any existing MFA warning\n const existingMfaWarning = headerElement?.querySelector('.mfa-warning');\n if (existingMfaWarning) {\n existingMfaWarning.remove();\n }\n\n // 2FA warning text\n if (\n mfaWarningMessage &&\n mfaWarningMessage !== `OktaWidget.MfaRequiredMessage_${siteCode}` &&\n context.controller === 'primary-auth'\n ) {\n const mfaWarning = document.createElement('div');\n mfaWarning.textContent = mfaWarningMessage;\n mfaWarning.style.color = 'brown';\n mfaWarning.style.margin = '0';\n mfaWarning.style.display = 'contents';\n mfaWarning.style.fontSize = '16px';\n mfaWarning.style.fontWeight = 'bold';\n mfaWarning.className = 'mfa-warning';\n\n if (headerElement) {\n headerElement.style.paddingLeft = '0';\n headerElement.style.paddingRight = '0';\n headerElement.prepend(mfaWarning);\n }\n }\n}\n","export type Vocabulary = { [k: string]: string };\n\nexport type Creds = {\n password: string;\n username: string;\n};\n\nexport type Props = {\n /**\n * Alternative to location state for manual redirect\n */\n originalPath?: string;\n /**\n * Overrides the primary auth title if provided.\n */\n primaryAuthTitle?: string;\n /**\n * Default is `true`. Set to `false` if you do not want errors to be thrown explicitly\n */\n throwErrors?: boolean;\n};\n\nexport const customTranslationKeys = [\n 'OktaWidget.PrimaryAuthTitle',\n 'OktaWidget.FailedLoginAttempts',\n 'OktaWidget.FailedLoginWarning',\n 'OktaWidget.BadUsernamePassword',\n 'OktaWidget.LockedOut',\n 'OktaWidget.PrimaryAuthSubmit',\n 'OktaWidget.OldPasswordPlaceholder',\n 'OktaWidget.OldPasswordTooltip',\n 'OktaWidget.UsernamePlaceholder',\n 'OktaWidget.PasswordPlaceholder',\n 'OktaWidget.forgotpassword',\n 'OktaWidget.confirmPasswordPlaceholder',\n 'OktaWidget.confirmPasswordTooltip',\n 'OktaWidget.newPasswordPlaceholder',\n 'OktaWidget.newPasswordTooltip',\n 'OktaWidget.passwordExpiredSubmit',\n 'OktaWidget.Signout',\n 'OktaWidget.ExpiredTitleGeneric',\n 'OktaWidget.ValidationFieldBlank',\n 'OktaWidget.ErrorMatch',\n 'OktaWidget.ErrorbannerTitle',\n 'OktaWidget.ExpiredSession',\n 'OktaWidget.UsernameRequired',\n 'OktaWidget.PasswordRequired',\n 'OktaWidget.ComplexityRequirementsHeader',\n 'OktaWidget.ComplexityNumber',\n 'OktaWidget.ComplexitySymbol',\n 'OktaWidget.ComplexityNoUsername',\n 'OktaWidget.ComplexityHistory',\n 'OktaWidget.ComplexityLowercaseDescription',\n 'OktaWidget.ComplexityUppercaseDescription',\n 'OktaWidget.ComplexityUppercase',\n 'OktaWidget.ComplexityLength',\n 'OktaWidget.ComplexityLengthDescription',\n 'OktaWidget.RememberDeviceTimebased',\n 'OktaWidget.InvalidPasscode',\n];\n\nexport const supportedLanguages = [\n 'en-US',\n 'es-US',\n 'en-CA',\n 'fr-CA',\n 'es-MX',\n 'en-MX',\n 'pt-BR',\n 'en-BR',\n 'es-CO',\n 'en-CO',\n 'es-PE',\n 'en-PE',\n 'es-CL',\n 'en-CL',\n 'es-USME',\n 'en-USME',\n 'es-ES',\n 'en-ES',\n 'de-AT',\n 'en-AT',\n 'de-DE',\n 'en-DE',\n 'fr-FR',\n 'en-FR',\n 'sv-SE',\n 'en-SE',\n 'it-IT',\n 'en-IT',\n 'en-GB',\n 'en-UK',\n 'pt-PT',\n 'en-PT',\n 'en-BE',\n 'fr-BE',\n 'nl-BE',\n 'nl-NL',\n 'en-NL',\n 'de-CH',\n 'fr-CH',\n 'it-CH',\n 'en-CH',\n 'hu-HU',\n 'en-HU',\n 'fi-FI',\n 'en-FI',\n 'da-DK',\n 'en-DK',\n 'en-SG',\n 'en-NZ',\n 'en-AU',\n 'en-MY',\n 'en-HK',\n 'hi-IN',\n 'en-IN',\n 'id-ID',\n 'en-ID',\n 'zh-CN',\n 'en-CN',\n 'th-TH',\n 'en-TH',\n];\n","type FailedLoginAttemp = {\n count: number;\n redirected: boolean;\n timestamp: number;\n username: string;\n};\n\nexport const FAILED_LOGIN_ATTEMPTS_KEY = 'FailedLoginAttempts';\n\nexport function displayFailedLoginAttempts(\n increase: boolean,\n locked: boolean,\n setFailedLoginDialogOpen: (o: boolean) => void,\n failedLoginAttemptsLabel: string,\n failedLoginWarning: string\n): void {\n let currentUsername = document.querySelector<HTMLInputElement>(\n '#okta-signin-username'\n )?.value;\n if (!currentUsername) {\n return;\n }\n currentUsername = currentUsername.trim().toLowerCase();\n\n const failedLoginAttempts = getFailedLoginAttemps();\n let failedLoginAttempt = failedLoginAttempts.find(\n (x) => x.username === currentUsername\n );\n if (failedLoginAttempt) {\n if (increase && failedLoginAttempt.count < 5) {\n failedLoginAttempt.timestamp = new Date().getTime();\n failedLoginAttempt.count++;\n }\n } else {\n if (!increase) {\n return;\n }\n failedLoginAttempt = {\n count: 1,\n redirected: false,\n timestamp: new Date().getTime(),\n username: currentUsername,\n };\n failedLoginAttempts.push(failedLoginAttempt);\n }\n\n const count = failedLoginAttempt.count;\n\n const parentDiv = document.querySelector<HTMLDivElement>('.o-form-content');\n let h2 = document.querySelector<HTMLHeadingElement>('#loginFailedCount');\n if (!h2) {\n h2 = document.createElement('h2');\n h2.classList.add('o-form-head');\n h2.setAttribute('id', 'loginFailedCount');\n h2.setAttribute('style', 'color: #e34843');\n parentDiv?.insertBefore(h2, parentDiv.children[0]);\n }\n h2.innerText = failedLoginAttemptsLabel\n .replace('{{0}}', String(count))\n .replace('{{1}}', '5');\n\n const parentDiv2 = document.querySelector<HTMLDivElement>(\n '.o-form-fieldset-container'\n );\n let div = document.querySelector<HTMLDivElement>('#loginFailedWarning');\n if (!div) {\n div = document.createElement('div');\n div.setAttribute('id', 'loginFailedWarning');\n div.setAttribute('style', 'color: #e34843; margin-top: -20px');\n parentDiv2?.appendChild(div);\n }\n const btnSignIn = document.querySelector<HTMLButtonElement>(\n '#okta-signin-submit'\n );\n if (btnSignIn) {\n btnSignIn.disabled = false;\n }\n\n if (currentUsername === 'sale99') {\n //TO DO: implement sale99 use case later\n } else if (count === 3 && !failedLoginAttempt.redirected) {\n setFailedLoginDialogOpen(true);\n failedLoginAttempt.redirected = true;\n setTimeout(function () {\n setFailedLoginDialogOpen(false);\n document\n .querySelector<HTMLAnchorElement>('a[data-se=\"forgot-password\"]')\n ?.click();\n }, 5000);\n }\n\n if (count >= 2 && !locked) {\n div.innerHTML = failedLoginWarning.replace('{{0}}', String(count));\n } else {\n div.innerHTML = '';\n }\n\n if (locked || currentUsername === 'sale99') {\n hideForgotPasswordLink(true);\n } else {\n hideForgotPasswordLink(false);\n }\n\n const failedLoginAttemptsJson = JSON.stringify(failedLoginAttempts);\n localStorage.setItem(FAILED_LOGIN_ATTEMPTS_KEY, failedLoginAttemptsJson);\n}\n\nexport function getUsernameFromLastFailedLoginAttempt(): string {\n const failedLoginAttempts = getFailedLoginAttemps();\n if (failedLoginAttempts.length > 0) {\n const lastLoginAttempt = failedLoginAttempts.reduce((prev, current) => {\n return prev.timestamp > current.timestamp ? prev : current;\n });\n return lastLoginAttempt.username;\n }\n return '';\n}\n\nexport function clearFailedLoginAttempt() {\n document.querySelector<HTMLHeadingElement>('#loginFailedCount')?.remove();\n document.querySelector<HTMLDivElement>('#loginFailedWarning')?.remove();\n localStorage.removeItem(FAILED_LOGIN_ATTEMPTS_KEY);\n}\n\nexport const getFailedLoginAttemps = () => {\n let failedLoginAttempts: FailedLoginAttemp[] = [];\n const failedLoginAttemptsJson = localStorage.getItem(\n FAILED_LOGIN_ATTEMPTS_KEY\n );\n if (failedLoginAttemptsJson) {\n try {\n failedLoginAttempts = JSON.parse(failedLoginAttemptsJson);\n failedLoginAttempts = failedLoginAttempts.filter(\n (x) => new Date().getTime() - x.timestamp < 1200000\n );\n } catch (err) {\n localStorage.removeItem(FAILED_LOGIN_ATTEMPTS_KEY);\n }\n }\n return failedLoginAttempts;\n};\n\nconst hideForgotPasswordLink = (e: boolean) => {\n document\n .querySelector('a[data-se=\"forgot-password\"]')\n ?.parentElement?.setAttribute(\n 'style',\n e ? 'display: none' : 'display: block'\n );\n};\n","import { atom, useRecoilState, useSetRecoilState } from 'recoil';\n\nconst failedLoginDialogOpenAtom = atom({\n default: false,\n key: 'failedLoginDialogOpenAtom',\n});\n\nexport function useFailedLoginDialogOpenState() {\n return useRecoilState(failedLoginDialogOpenAtom);\n}\n\nexport function useSetFailedLoginDialogOpen() {\n return useSetRecoilState(failedLoginDialogOpenAtom);\n}\n","import { useApiQuery } from '../query';\n\nexport function useResellerProfile(enabled = false) {\n return useApiQuery(\n '/account-management/v1/resellers/reseller-profile',\n undefined,\n { enabled, refetchOnWindowFocus: false }\n );\n}\n","import wretch from 'wretch';\nimport { useQuery, UseQueryOptions } from '@tanstack/react-query';\nimport { useIsAuthenticated } from './user-info.hooks';\nimport { useRedirectToLogin } from './useRedirectToLogin';\nimport { useApiBase, useApiHeaders } from '../query';\n\nexport function useReusableContents(strTitle: string) {\n const params: ReusableContentRequest = {\n title: strTitle,\n };\n return useApiQuery<ReusableContents>('/cms/v1/reusable-contents', params);\n}\nexport type ReusableContentsList = {\n comments: string;\n content: string;\n documentModifiedWhen: string;\n title: string;\n};\nexport type ReusableContents = {\n reusableContents: ReusableContentsList[];\n};\nexport type ReusableContentRequest = {\n title: string;\n};\n\ntype ObjectMap = {\n [key: string]: any;\n};\n\ntype ExtraHeaders = Partial<{\n [headerName: string]: string;\n}>;\n\nexport function useApiQuery<TO = ObjectMap>(\n route: string,\n params?: ObjectMap,\n useQueryOptions?: UseQueryOptions<TO>,\n extraHeaders?: ExtraHeaders\n) {\n const isAuthenticated = useIsAuthenticated();\n const apiGet = useApiGet<TO>();\n\n // Wait for authorization\n const enabled =\n isAuthenticated &&\n (useQueryOptions?.enabled || useQueryOptions?.enabled === undefined);\n\n return useQuery<TO>({\n enabled: enabled,\n queryFn: () => apiGet(route, params, extraHeaders),\n queryKey: [route, params, extraHeaders],\n retry: 0,\n });\n}\n\nconst apiWretcher = wretch(undefined, { cache: 'no-store' }).options({\n credentials: 'same-origin',\n mode: 'cors',\n});\n\nfunction useApiGet<TO = ObjectMap>() {\n const getBaseUrl = useApiBase();\n const getApiHeaders = useApiHeaders();\n const redirectToLogin = useRedirectToLogin();\n\n return function (\n route: string,\n params?: ObjectMap,\n extraHeaders?: ExtraHeaders\n ) {\n const url = `${getBaseUrl(route)}${route}`;\n\n let apiCall = apiWretcher.url(url);\n if (params) {\n apiCall = apiCall.query(params);\n }\n return apiCall\n .headers(getApiHeaders(extraHeaders))\n .get()\n .unauthorized((err) => {\n redirectToLogin();\n throw err;\n })\n .json<TO>()\n .catch((error) => {\n console.error(error);\n throw error;\n });\n };\n}\n","import { useOktaAuth } from '@okta/okta-react';\nimport { useAuthConfig } from './auth-context';\n\nexport function useAutoSignIn() {\n const { oktaAuth } = useOktaAuth();\n const hasAccessToApp = useHasAccessToApp();\n return async () => {\n const sessionExists = await oktaAuth.session?.exists();\n if (!sessionExists) {\n return;\n }\n const hasAccess = await hasAccessToApp();\n if (!hasAccess) {\n return;\n }\n oktaAuth.tokenManager.clear();\n const tokenResponse = await oktaAuth.token.getWithoutPrompt();\n await oktaAuth.handleLoginRedirect(tokenResponse.tokens);\n };\n}\n\nexport function useDeleteRedundantSession() {\n const { oktaAuth } = useOktaAuth();\n const hasAccessToApp = useHasAccessToApp();\n return async () => {\n const sessionExists = await oktaAuth.session?.exists();\n if (!sessionExists) {\n return false;\n }\n const hasAccess = await hasAccessToApp();\n // if current okta session has access to the app, then we don't want to delete it\n if (hasAccess) {\n return false;\n }\n const sessionClosed = await oktaAuth.session.close();\n return !!sessionClosed;\n };\n}\n\nexport const useHasAccessToApp = () => {\n const { clientId, issuer } = useAuthConfig();\n return async () => {\n const baseUrl: string = issuer?.split('/oauth2')[0];\n if (!clientId || !baseUrl) {\n return false;\n }\n try {\n const response = await fetch(`${baseUrl}/api/v1/users/me/appLinks`, {\n credentials: 'include',\n method: 'GET',\n mode: 'cors',\n });\n const apps = await response.json();\n const app = apps.find((a: any) => a.appInstanceId === clientId);\n return !!app;\n } catch {\n return false;\n }\n };\n};\n","import { CopyRightTO } from '@im/ui-lib/types';\nimport { useApiQuery } from '../query';\n\ntype GetCopyRightsResponseTO = {\n items: CopyRightTO[];\n};\n\nexport function useCopyrightLinks() {\n const query = useApiQuery<GetCopyRightsResponseTO>(\n '/cms/v1/quick-links?type=FooterCopyright'\n );\n return query.data?.items;\n}\n","import { useRoles } from './authorization.hook';\n\n/** Returns `true` if User has at least 1 of given `requiredRoles`.\n *\n * For AND logic a single entry in requiredRoles must be list of roles separated\n * by \"&\" character. Whitespace will be ignored.\n *\n * E.g. User must have `role1` OR (`role2` AND `role3`)\n * ```\n * roles = ['role1', 'role2 & role3']\n * ```\n */\nexport function useHasPermission() {\n const tokenRoles = useRoles();\n\n return (requiredRoles: string[]) => {\n for (const role of requiredRoles) {\n if (role.split('&').every((r) => tokenRoles?.includes(r.trim()))) {\n return true;\n }\n }\n return false;\n };\n}\n","import { useMemo } from 'react';\nimport { useRoles } from './authorization.hook';\n\n/** Returns `true` if User has one of given `requiredRoles`.\n *\n * E.g. User must have `role1` OR `role2`\n * ```\n * roles = ['role1', 'role2']\n * ```\n */\n\ntype UserRole = 'Admin' | 'Support' | 'Purchase' | 'Basic';\n\nexport function useHasRole() {\n const permissions = useRoles();\n const userRole = useMemo(() => {\n if (permissions?.includes('ResellerAdmin')) return 'Admin';\n else if (permissions?.includes('PlaceOrders')) return 'Purchase';\n else if (permissions?.includes('ViewOrderStatus')) return 'Support';\n else return 'Basic';\n }, [permissions]);\n\n return (requiredRoles: UserRole[]) => {\n return requiredRoles.includes(userRole);\n };\n}\n","import { useCallback } from 'react';\nimport { useDecodedToken } from './authorization.hook';\nimport { useIsAuthenticated } from './user-info.hooks';\n\n/** Returns `true` if User has permision for a particular feature.\n */\n\ntype Feature = 'Everest' | 'CMP' | 'TS_UNITE';\n\nexport function useIsFeatureWhitelisted() {\n const isAuthenticated = useIsAuthenticated();\n const decodedToken = useDecodedToken();\n\n return useCallback(\n (feature: Feature | Feature[]) => {\n if (isAuthenticated && decodedToken?.whiteListedFeatures) {\n if (typeof feature === 'string')\n return decodedToken.whiteListedFeatures.includes(feature);\n else\n return feature.some((f) =>\n decodedToken.whiteListedFeatures.includes(f.toString())\n );\n }\n return false;\n },\n [decodedToken, isAuthenticated]\n );\n}\n","import { useDecodedToken } from './authorization.hook';\n\n/** Returns true when one X4C user is impersonating a resellerId.\n * Used currently only for X4A integration.\n */\nexport function useIsImpersonationMode() {\n const decodedToken = useDecodedToken();\n\n if (\n !decodedToken ||\n !decodedToken?.imoProfile ||\n typeof decodedToken.imoProfile.impersonationMode !== 'boolean'\n ) {\n return false;\n }\n\n return decodedToken.imoProfile.impersonationMode;\n}\n","import { useLocation, useNavigate } from 'react-router-dom';\n\n// you probably don't want to call this hook upon 401 Unauthorized\n// otherwise you will end up in an infinite loop\nexport function useRedirectToLogin() {\n const location = useLocation();\n const navigate = useNavigate();\n\n return () => {\n navigate('/login', { state: { from: location } });\n };\n}\n","import { useLocalizationContext } from '@im/react-localization';\nimport { useApiQuery } from '../query';\n\nexport type VideoMapper = {\n videos: Video[];\n};\nexport type Video = {\n embedCode: string;\n videoFile: string;\n videoType: string;\n};\n\nexport function useWelcomeVideoURL() {\n const { locale } = useLocalizationContext();\n const query = useApiQuery<VideoMapper>(\n `/cms/v1/videos?PageName=Welcome&Zone=Top&typelang=${locale}`\n );\n return query;\n}\n","export function extractQueryParam(\n search: string | undefined,\n targetParam: string\n) {\n if (search === undefined || search === '') return [undefined, undefined];\n\n search = decodeURIComponent(search);\n const params = new URLSearchParams(search);\n let param;\n if (params.has(targetParam)) {\n param = params.get(targetParam) || undefined;\n params.delete(targetParam);\n }\n\n const modifiedParams = params.toString();\n return [param, modifiedParams ? `?${modifiedParams}` : undefined];\n}\n","import React, { ReactNode } from 'react';\nimport { campaignContext, useCampaignConfig } from './useCampaignConfig';\n\ntype Props = {\n children: ReactNode;\n};\n\nexport function CampaignProvider(props: Props) {\n const { children } = props;\n const campaignData = useCampaignConfig();\n const { Provider } = campaignContext;\n return <Provider value={campaignData}>{children}</Provider>;\n}\n","import { createContext, useContext, useMemo } from 'react';\nimport { useApiQuery } from '../../query';\nimport {\n getLsObject,\n removeLsObject,\n} from '@im/ui-lib/utils/local-storage.utils';\n\n/** Query for campaign validation*/\nexport function useCampaignConfig() {\n const campaginId = useMemo(() => {\n return getLsObject('cms_c_id', '')[0];\n }, []);\n const campaginType = useMemo(() => {\n return getLsObject('cms_c_id', '')[1];\n }, []);\n const { data, isError, isLoading } = useApiQuery<CampaignConfigResponse>(\n `/cms.webapi.digitalmarketing/cms/v1/campaigns/${campaginId}/${campaginType}`,\n undefined,\n {\n enabled: !!campaginId,\n gcTime: Infinity,\n staleTime: Infinity,\n }\n );\n return useMemo(() => {\n const isConfigValid = !!campaginId && !isLoading && !isError;\n if (isConfigValid && data?.isvalid === 'false') {\n removeLsObject('cms_c_id');\n }\n return {\n campaignId: campaginId,\n isEnabled: isConfigValid && data?.isvalid === 'true',\n } as ICampaignConfigContext;\n }, [campaginId, data, isError, isLoading]);\n}\n\n/** context for campaign configuration for users */\nexport const campaignContext = createContext<ICampaignConfigContext>({\n campaignId: '',\n isEnabled: false,\n});\n\n/** Access logoutContextData.\n */\nexport function useCampaignContext() {\n const defaultVal: ICampaignConfigContext = {\n campaignId: '',\n isEnabled: false,\n };\n const context = useContext(campaignContext);\n return context ?? defaultVal;\n}\n\nexport interface ICampaignConfigContext {\n campaignId: string;\n isEnabled: boolean;\n}\n\nexport interface CampaignConfigResponse {\n campaigns: Campaign[];\n isvalid: string;\n status: string;\n}\n\nexport interface Campaign {\n campaignid?: string;\n enddate?: string;\n groupvendor?: string;\n startdate?: string;\n url_expiry_date?: string;\n}\n","import React, { ReactNode } from 'react';\nimport {\n cmsFeatureFlagContext,\n useCmsFeatureFlagConfig,\n} from './useCmsFeatureFlagConfig';\n\ntype Props = {\n children: ReactNode;\n};\n\nexport function CmsFeatureFlagProvider(props: Props) {\n const { children } = props;\n const featureFlagConfig = useCmsFeatureFlagConfig();\n const { Provider } = cmsFeatureFlagContext;\n return <Provider value={featureFlagConfig}>{children}</Provider>;\n}\n","import { createContext, useContext, useMemo } from 'react';\nimport { useFeatureFlag } from '../../feature-flag';\n\nexport function useCmsFeatureFlagConfig() {\n const { isReady: isFlagLoaded, value } = useFeatureFlag(\n cmsFeatureFlags as Mutable<typeof cmsFeatureFlags>\n );\n return useMemo(() => {\n return {\n data: value,\n isReady: isFlagLoaded,\n } as ICmsFeatureFlagContext;\n }, [value, isFlagLoaded]);\n}\n\n/** context for cms feature Flag */\nexport const cmsFeatureFlagContext = createContext<ICmsFeatureFlagContext>({\n data: {},\n isReady: false,\n});\n\n/** `Hook` to access CmsFeatureFlagContext data */\nexport function useCmsFeatureFlagContext(contextData?: ICmsFeatureFlagContext) {\n const context = useContext(cmsFeatureFlagContext);\n return context ?? { data: {}, isReady: false };\n}\n\nexport type ICmsFeatureFlagContext = {\n data: ObjectMap;\n isReady: boolean;\n};\n\nexport const cmsFeatureFlags = [\n 'X4C_EnableResourceBookmark',\n 'X4C_EnableResourceRating',\n 'X4C_ResourceRelatedContent',\n 'X4C_EnableContentCount',\n 'X4C_Enable_CloudToTS',\n 'EnableSolutionX4CIntegration',\n 'X4C_EnableCventLanding',\n 'X4c_Enable_ThreeUseCases',\n 'X4c_Enable_OpportunityQuotes',\n 'X4C_IsGrowthIncentiveRedeemRewards_enabled',\n 'X4c_Enable_GrowthOpportunity',\n 'X4C_Enable_TSToCloud',\n 'BI_TopVendors',\n 'X4C_Enable_ResellerBusiness',\n 'X4C_Ultra_Assessment_EmailNotification',\n 'X4C_EnableMarketO',\n] as const;\n\ntype ObjectMap = {\n [key: string]: string;\n};\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n","import Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Stack from '@mui/material/Stack';\nimport React from 'react';\nimport { SxProps, Theme } from '@mui/material/styles';\nimport { useTranslate } from '@im/react-localization';\n\ntype CoookiesContentProps = {\n height?: string | number;\n sx?: SxProps<Theme>;\n width?: string | number;\n};\n\nexport function CookiesConsent(props: CoookiesContentProps) {\n const { height, sx, width } = props;\n const translate = useTranslate();\n const handleClickOpen = () => {\n (window as any)?.OneTrust.ToggleInfoDisplay();\n };\n return (\n <Box\n sx={{\n backgroundColor: '#F8F8F8',\n display: 'grid',\n height: height,\n justifyContent: 'center',\n width: width,\n ...sx,\n }}\n >\n <Stack\n sx={{\n alignItems: 'center',\n alignSelf: 'center',\n color: '#6B6B6B',\n fontFamily: 'Roboto',\n lineHeight: '22px',\n width: '232px',\n }}\n >\n <Box sx={{ height: '70px' }}>\n <Button\n sx={{\n alignItems: 'center',\n background: '#D92D20',\n borderRadius: '32px',\n boxShadow: '0px 1px 2px 0px rgba(18, 25, 38, 0.05)',\n display: 'inline-flex',\n gap: '8px',\n height: '56px',\n justifyContent: 'center',\n minWidth: '56px',\n padding: '16px',\n pointerEvents: 'none',\n }}\n >\n <svg\n fill=\"none\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M20.49 22.0025H4.04004C2.95004 22.0025 2.35004 22.0025 1.82004 21.6225C1.36004 21.2925 1.07004 20.7725 1.01004 20.2125C0.940036 19.5625 1.24004 19.0425 1.79004 18.1025L10.01 3.8925L10.88 4.3925L10.02 3.8925C10.56 2.9525 10.86 2.4325 11.46 2.1725C11.98 1.9425 12.57 1.9425 13.08 2.1725C13.67 2.4325 13.97 2.9525 14.52 3.8925L22.75 18.1025C23.3 19.0525 23.6 19.5625 23.53 20.2125C23.47 20.7725 23.18 21.2925 22.72 21.6225C22.19 22.0025 21.59 22.0025 20.5 22.0025H20.49ZM3.04004 19.9825C3.25004 20.0025 3.65004 20.0025 4.04004 20.0025H20.49C20.88 20.0025 21.28 20.0025 21.49 19.9825C21.4 19.7925 21.21 19.4425 21.01 19.1125L12.78 4.9025C12.58 4.5625 12.38 4.2225 12.26 4.0525C12.14 4.2225 11.94 4.5625 11.74 4.9025L3.52004 19.1025C3.32004 19.4425 3.12004 19.7925 3.04004 19.9825ZM12.28 18.5025C11.73 18.5025 11.28 18.0525 11.28 17.5025C11.28 16.9525 11.72 16.5025 12.28 16.5025C12.83 16.5025 13.28 16.9525 13.28 17.5025C13.28 18.0525 12.83 18.5025 12.28 18.5025ZM12.28 14.5025C11.73 14.5025 11.28 14.0525 11.28 13.5025V9.5025C11.28 8.9525 11.73 8.5025 12.28 8.5025C12.83 8.5025 13.28 8.9525 13.28 9.5025V13.5025C13.28 14.0525 12.83 14.5025 12.28 14.5025Z\"\n fill=\"white\"\n />\n </svg>\n </Button>\n </Box>\n <Stack direction=\"row\" sx={{ height: '32px' }}>\n <Box\n sx={{\n color: '#6B6B6B !important',\n display: 'inline',\n fontSize: '16px',\n fontWeight: '400',\n\n lineHeight: '22px',\n }}\n >\n {translate('Cms.ConsentMsg')}{' '}\n <Typography\n onClick={handleClickOpen}\n sx={{\n color: '#6B6B6B !important',\n cursor: 'pointer',\n display: 'inline',\n fontSize: '16px',\n fontWeight: '400',\n lineHeight: '22px',\n textDecorationLine: 'underline',\n }}\n >\n {translate('Cms.ConsentClick')}\n {''}\n </Typography>{' '}\n {translate('Cms.cookieConsentMsg')}\n </Box>\n </Stack>\n </Stack>\n </Box>\n );\n}\n","import React from 'react';\nimport { Helmet } from 'react-helmet-async';\nimport { useLocalizationContext } from '@im/react-localization';\n\ntype Props = {\n description: string;\n image: string;\n pageurl?: string;\n title: string;\n};\n\nexport const MetaDatataConfig = ({\n description,\n image,\n pageurl,\n title,\n}: Props) => {\n const locale = useLocalizationContext();\n const pageUrl = pageurl ?? window.location.href;\n const culture = locale.locale.toString().split('-').join('_');\n let PageTitle = 'Xvantage';\n if (title) {\n PageTitle = `${title} | Xvantage`;\n }\n return (\n <Helmet>\n <title>{PageTitle} </title>\n <link href={pageUrl} rel=\"canonical\"></link>\n <meta content={description} name=\"description\" />\n <meta content={locale.locale} name=\"Language\" />\n <meta content={locale.locale} name=\"Content-Language\" />\n <meta content=\"Xvantage\" name=\"application-name\" />\n <meta content={PageTitle} property=\"og:title\" />\n <meta content=\"Xvantage\" property=\"og:site_name\" />\n <meta content={pageUrl} property=\"og:url\" />\n <meta content={description} property=\"og:description\" />\n <meta content={image} property=\"og:image\" />\n <meta content={culture} property=\"og:locale\"></meta>\n </Helmet>\n );\n};\n","import React, { ReactNode, SetStateAction, useState } from 'react';\nimport { ObjectMap, featureFlagContext } from './useFeatureFlagConfig';\n\ntype Props = {\n children: ReactNode;\n};\nexport function FeatureFlagProvider(props: Readonly<Props>) {\n const { children } = props;\n const [featureFlagCache, setFeatureFlagCache] = useState<ObjectMap>({});\n\n const updateFeatureFlagCache = (newData: ObjectMap) => {\n setFeatureFlagCache((prevData: SetStateAction<ObjectMap>) => ({\n ...prevData,\n ...newData,\n }));\n };\n\n const { Provider } = featureFlagContext;\n return (\n <Provider value={{ featureFlagCache, updateFeatureFlagCache }}>\n {children}\n </Provider>\n );\n}\n","import { useEffect } from 'react';\nimport { useApiQuery } from '../query';\nimport { ObjectMap, useFeatureFlagContext } from './useFeatureFlagConfig';\nimport { useIsTokenExpired } from '../auth/user-info.hooks';\n\nexport function useFeatureFlag(\n params: string | string[],\n isEnabled = true\n): any {\n const isMultiFlagRequest = typeof params === 'object';\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const featureFlagValues: { [key: string]: string | undefined } = {};\n const url = `/shared/v1/feature-flags${\n isMultiFlagRequest ? `?keys=${params}` : `/${params}`\n }`;\n const { featureFlagCache, updateFeatureFlagCache } = useFeatureFlagContext();\n\n const doesFeatureFlagExist = (key?: string | string[]) => {\n let isFlagInCache = false;\n if (typeof key === 'string') {\n isFlagInCache = Object.keys(featureFlagCache).includes(key);\n } else if (Array.isArray(key)) {\n isFlagInCache = key.every((x) =>\n Object.keys(featureFlagCache).includes(x)\n );\n }\n return isFlagInCache;\n };\n const isTokenExpired = useIsTokenExpired();\n const query = useApiQuery<ObjectMap>(url, undefined, {\n enabled: isEnabled && !doesFeatureFlagExist(params) && !isTokenExpired,\n });\n\n const isReady =\n doesFeatureFlagExist(params) ||\n query?.status === 'error' ||\n query?.status === 'success';\n\n if (doesFeatureFlagExist(params) && isReady) {\n if (Array.isArray(params)) {\n for (const key in params) {\n featureFlagValues[params[key]] = featureFlagCache[params[key]];\n }\n } else {\n featureFlagValues[params] = featureFlagCache[params];\n }\n } else if (query?.data && isReady) {\n for (const key in query.data) {\n featureFlagValues[key] = query.data[key];\n }\n setDefaultForNonExistingKey();\n }\n\n useEffect(() => {\n if (isReady) {\n const newKeys = Object.keys(featureFlagValues).filter(\n (x) => Object.keys(featureFlagCache).includes(x) === false\n );\n\n if (newKeys.length > 0) {\n const newFeatureFlags: ObjectMap = Object.fromEntries(\n Object.entries(featureFlagValues).filter(([key]) =>\n newKeys.includes(key)\n )\n );\n updateFeatureFlagCache(newFeatureFlags);\n }\n }\n }, [featureFlagCache, featureFlagValues, isReady, updateFeatureFlagCache]);\n\n return {\n isReady,\n refetch: query.refetch,\n value: isMultiFlagRequest ? featureFlagValues : featureFlagValues[params],\n };\n\n function setDefaultForNonExistingKey() {\n if (Array.isArray(params)) {\n for (const param in params) {\n if (!Object.keys(featureFlagValues).includes(params[param])) {\n featureFlagValues[params[param]] = undefined;\n }\n }\n } else if (\n !isMultiFlagRequest &&\n !Object.keys(featureFlagValues).includes(params)\n ) {\n featureFlagValues[params] = undefined;\n }\n }\n}\n","import { createContext, useContext } from 'react';\n\nexport type ObjectMap = {\n [key: string]: string | undefined;\n};\n\n/** context for feature Flag */\nexport const featureFlagContext = createContext<\n IFeatureFlagContext | undefined\n>(undefined);\n\n/** Hook to access 'featureFlagContext' Data.\n */\nexport function useFeatureFlagContext() {\n const context = useContext(featureFlagContext);\n if (!context) {\n throw new Error(\n 'featureFlagContext value is undefined. Make sure you use the FeatureFlagProvider before using the context.'\n );\n }\n return context;\n}\n\nexport type IFeatureFlagContext = {\n featureFlagCache: ObjectMap;\n updateFeatureFlagCache: (newData: ObjectMap) => void;\n};\n","/* eslint-disable sort-keys */\nimport React, {\n createContext,\n useCallback,\n useRef,\n useEffect,\n useState,\n useContext,\n} from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { datadogRum } from '@datadog/browser-rum';\n\nexport type RouteTimerObj = {\n id: string;\n pageLoadStartTime: number;\n pathname: string;\n stopDuration?: (vital: RouteTimerObj) => void;\n type: 'initial' | 'route_change';\n};\n\ntype PageLoadMetricsContextType = {\n routeTimer?: RouteTimerObj;\n};\n\nconst pageLoadMetricsContext = createContext<\n PageLoadMetricsContextType | undefined\n>(undefined);\npageLoadMetricsContext.displayName = 'PageLoadMetricsContext';\n\nexport function usePageLoadMetricsContext() {\n const pageLoadMetrics = useContext(pageLoadMetricsContext);\n if (!pageLoadMetrics) {\n throw new Error(\n 'pageLoadMetricsContext value is undefined. Make sure you use the PageLoadMetricsProvider before using the context.'\n );\n }\n return pageLoadMetrics;\n}\n\nexport type PageLoadMetricsProviderProps = {\n children?: React.ReactNode;\n};\n\nexport function PageLoadMetricsProvider(\n props: Readonly<PageLoadMetricsProviderProps>\n) {\n const { pathname } = useLocation();\n\n const [routeTimer, setRouteTimer] = useState<RouteTimerObj | undefined>();\n\n const visitedPathnames = useRef<{ [pathname: string]: boolean }>({});\n const stoppedTimers = useRef<{ [id: string]: boolean }>({});\n const switchedTabTracker = useRef<{ [id: string]: boolean }>({});\n\n const getCurrentRouteTimerId = useCallback(\n () => routeTimer?.id,\n [routeTimer?.id]\n );\n const getSwitchedTabsStatus = useCallback(\n (id: string) => switchedTabTracker.current[id],\n []\n );\n\n useEffect(() => {\n const startTime = performance.now();\n const isVisited = visitedPathnames.current[pathname];\n const reference = datadogRum.startDurationVital('IngramPageLoadVital', {\n context: {\n type: isVisited ? 'route_change' : 'initial',\n switchedTabs: false,\n },\n });\n const id = crypto.randomUUID();\n\n if (routeTimer?.pathname !== pathname) {\n setRouteTimer({\n id,\n pageLoadStartTime: startTime,\n pathname,\n type: isVisited ? 'route_change' : 'initial',\n stopDuration: (vital) => {\n try {\n if (stoppedTimers.current[id]) return;\n\n stoppedTimers.current[id] = true;\n datadogRum.stopDurationVital(reference, {\n context: {\n switchedTabs: getSwitchedTabsStatus(vital.id),\n },\n });\n } catch (error) {\n console.error('Error posting to Datadog:', error);\n }\n },\n });\n }\n\n visitedPathnames.current[pathname] = true;\n stoppedTimers.current[id] = false;\n }, [getSwitchedTabsStatus, pathname, routeTimer?.pathname]);\n\n useEffect(() => {\n const handleTabChange = () => {\n const timerId = getCurrentRouteTimerId();\n if (document.visibilityState === 'hidden' && timerId) {\n switchedTabTracker.current[timerId] = true;\n }\n };\n\n window.addEventListener('visibilitychange', handleTabChange);\n return () => {\n window.removeEventListener('visibilitychange', handleTabChange);\n };\n }, [getCurrentRouteTimerId]);\n\n const { Provider } = pageLoadMetricsContext;\n\n return (\n <Provider\n value={{\n routeTimer,\n }}\n >\n {props.children}\n </Provider>\n );\n}\n","import React, {\n Dispatch,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { datadogRum } from '@datadog/browser-rum';\nimport { usePageLoadMetricsContext } from './PageLoadMetrics';\n\nexport type PageLoadStart = {\n startTime: number;\n};\n\nexport type PageLoadEnd = {\n endTime: number;\n};\n\ntype PageLoadContextType = {\n pageLoadEnd: PageLoadEnd;\n pageLoadStart: PageLoadStart;\n setPageLoadEnd: Dispatch<React.SetStateAction<PageLoadEnd>>;\n setPageLoadStart: Dispatch<React.SetStateAction<PageLoadStart>>;\n};\n\nconst PageLoadTimeContext = createContext<PageLoadContextType>(\n {} as PageLoadContextType\n);\nPageLoadTimeContext.displayName = 'PageLoadTimeContext';\n\nfunction PageLoadEndTimeMarker() {\n const { setPageLoadEnd } = useContext(PageLoadTimeContext);\n\n useEffect(() => {\n setPageLoadEnd((currentPageLoadEnd) => ({\n ...currentPageLoadEnd,\n endTime: performance.now(),\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return <></>;\n}\n\nexport type PageLoadTimeProviderProps = {\n children?: React.ReactNode;\n initialEndTime?: PageLoadEnd;\n initialStartTime?: PageLoadStart;\n};\n\nexport function PageLoadTimeProvider(\n props: Readonly<PageLoadTimeProviderProps>\n) {\n const [pageLoadStart, setPageLoadStart] = useState<PageLoadStart>(\n props.initialStartTime || {\n startTime: performance.now(),\n }\n );\n\n const [pageLoadEnd, setPageLoadEnd] = useState<PageLoadEnd>(\n props.initialEndTime || {\n endTime: 0,\n }\n );\n\n const { routeTimer } = usePageLoadMetricsContext();\n const location = useLocation();\n\n useEffect(() => {\n if (\n pageLoadEnd.endTime &&\n routeTimer?.stopDuration &&\n location.pathname === routeTimer.pathname\n ) {\n routeTimer.stopDuration(routeTimer);\n }\n }, [location.pathname, pageLoadEnd.endTime, routeTimer]);\n\n useEffect(() => {\n if (pageLoadEnd.endTime) {\n try {\n datadogRum.addAction('IngramPageLoadTime', {\n endTime: pageLoadEnd.endTime,\n loadTime: pageLoadEnd.endTime - pageLoadStart.startTime,\n route: window.location.pathname,\n startTime: pageLoadStart.startTime,\n });\n } catch (error) {\n console.error('Error posting to Datadog:', error);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pageLoadEnd.endTime]);\n\n const providerValue = useMemo(\n () => ({\n pageLoadEnd,\n pageLoadStart,\n setPageLoadEnd,\n setPageLoadStart,\n }),\n [pageLoadStart, pageLoadEnd]\n );\n\n return (\n <PageLoadTimeContext.Provider value={providerValue}>\n {props.children}\n <PageLoadEndTimeMarker />\n </PageLoadTimeContext.Provider>\n );\n}\n\nexport default PageLoadTimeContext;\n"],"names":["Login","useSiteConfig","idpLogin","React","RedirectToIdp","LoginView","LoginButton","navigate","useNavigate","oktaContext","useOktaAuth","isAuthenticated","authState","Button","onClick","async","postLogoutRedirectUri","globalThis","location","origin","oktaAuth","signOut","err","console","error","size","variant","LoginCallbackView","originalUri","setOriginalUri","useState","useEffect","uri","getOriginalUri","Navigate","replace","to","LoginCallback","translateStr","useTranslate","copyrightContent","whatYearIsItNow","Date","getFullYear","toString","updatePageTitle","usePageTitle","l10nContext","useLocalizationContext","locale","countryCode","split","contactUsURLs","BE","NL","PageLoadTimeProvider","Root","Stack","direction","sm","xs","justifyContent","sx","backgroundImage","backgroundPosition","backgroundRepeat","height","Box","padding","IngramLogoWithRX4CLoginHeader","CulturePicker","backgroundPositionX","backgroundPositionY","bgcolor","theme","palette","grey","minHeight","LoginWidget","alignContent","display","flexDirection","Typography","align","color","text","secondary","toUpperCase","window","open","openContactUsNewTab","borderColor","fontSize","marginTop","isOneTrustEnabled","styled","bottom","backgroundSize","background","primary","main","borderRadius","common","white","border","input","WebkitBoxShadow","WebkitTextFillColor","textAlign","marginBottom","fontWeight","lineHeight","backgroundColor","boxShadow","left","position","top","width","zIndex","borderBottom","fontFamily","margin","overflow","paddingBottom","ORIGIN","LogoutView","logoutRedirectUri","localStorage","removeItem","sessionStorage","then","tokenManager","clear","catch","href","CenterLoader","PermissionGate","props","children","fallback","roles","translate","useHasPermission","hasPermission","ProfileViewComp","decodedToken","useDecodedToken","View","Object","entries","map","claimEntry","claimName","claimValue","claimId","key","id","JSON","stringify","undefined","ProfileView","RequireAuth","useLocation","historyState","state","deleteRedundantSession","useDeleteRedundantSession","pathname","search","from","signInWithRedirect","extraParams","acrValue","boKeyEnabled","boKeyWhitelist","boKeyBlacklist","RequireStepUpAuth","siteCodes","siteCode","environments","env","environment","token","isStepUpRequired","setStepUpRequired","isRequired","includes","boKeys","useFeatureFlag","boKeyIsReady","setBoKeyIsReady","boKeyValueRef","useRef","value","isReady","current","boKeyValues","enabled","toLowerCase","resellerWhitelist","convertToArray","resellerBlacklist","resellerId","trim","isEnabled","acr","getWithPopup","acr_values","tokenResponse","tokens","setTokens","str","x","filter","TermsAndConditions","formatDate","useLocalization","apiPatch","useApiPatch","copyRightLinks","useCopyrightLinks","profileData","useApiQuery","termsData","useReusableContents","checked","setChecked","isNewUser","setIsNewUser","BO_Keys","disableAction","setDisableAction","refetch","url","status","data","reusableContents","length","log","dateLastTermsConditionsAcceptance","documentModifiedWhen","ScreenContainer","HeaderContainer","IngramLogo","MainContainer","Title","Text","BoldText","style","TextContainer","htmlparse","content","AlertText","BottomContainer","FormControlLabel","control","Checkbox","onChange","e","target","label","ButtonContainer","handleDecline","marginLeft","disabled","clientIp","fetchIpAdrress","res","isCepWhitelisted","Cookies","remove","handleAccept","FooterContainer","Footer","alignItems","divider","spacing","marginRight","paddingRight","paddingTop","WelcomeVideo","userInfo","useUserInfo","dynamicContent","isLoading","useWelcomeVideoURL","onetrustEnabled","setOnetrustEnabled","onetrustUpdated","setOnetrustUpdated","win","isConsented","OnetrustActiveGroups","every","eventFunction","addEventListener","removeEventListener","PlayerContainer","videos","CardMedia","component","image","videoType","videoFile","embedCode","CookiesConsent","RightContainer","WelcomeText","given_name","StyledButton","flex","restoreOriginalUri","AuthProvider","siteConfig","isInX4AFrame","useInX4AFrame","authConfig","setAuthConfig","isInFrame","storageType","clientId","disableHttpsCheck","ignoreLifetime","interactionCodeFlow","issuer","authServer","maxClockSkew","pkce","redirectUri","scopes","services","autoRemove","autoRenew","syncStorage","storageManager","expireEarlySeconds","createAuthConfig","useMemo","options","OktaAuth","Provider","authConfigContext","Security","OktaHelper","refreshAccessToken","useRefreshAccessToken","onAuthStateChange","ImAuthState","authStateManager","subscribe","start","unsubscribe","stop","onTokenRefresh","on","off","createContext","useAuthConfig","useContext","Error","FailedLoginDialog","setOpen","useFailedLoginDialogOpenState","Dialog","onClose","DialogTitle","alt","src","IconButton","right","CloseIcon","DialogContent","dividers","widget","originalPath","previousPath","primaryAuthTitle","throwErrors","resellerProspectUser","resellerProspect","setFailedLoginDialogOpen","useSetFailedLoginDialogOpen","originalUsernameParam","hash","username","updatedSearch","extractQueryParam","localizationService","searchParams","useSearchParams","widgetRef","vocabulary","setVocabulary","autoSignIn","useAutoSignIn","isActive","customTranslationKeys","signInWidgetConfig","transformedUsername","i18n","assets","baseUrl","languages","supportedLanguages","authClient","authParams","features","rememberMe","showPasswordToggleOnSignInPage","helpLinks","forgotPassword","encodeURIComponent","language","processCreds","creds","callback","transformUsernamePromiose","fetch","body","method","response","closeSessionPromise","session","exists","sessionExists","close","Promise","all","transformUsername","_operation","startsWith","useClassicEngine","useInteractionCodeFlow","get","getUsernameFromLastFailedLoginAttempt","OktaSignInWidget","renderEl","el","clearFailedLoginAttempt","handleLoginRedirect","_context","xhr","responseJSON","errorCode","p","document","querySelector","textContent","displayFailedLoginAttempts","innerHTML","innerText","displayMfaWarning","context","ul","setAttribute","a","li","parentElement","forgotPasswordLink","classList","event","preventDefault","controller","values","ref","mfaWarningMessage","headerElement","existingMfaWarning","mfaWarning","createElement","className","paddingLeft","prepend","FAILED_LOGIN_ATTEMPTS_KEY","increase","locked","failedLoginAttemptsLabel","failedLoginWarning","currentUsername","failedLoginAttempts","getFailedLoginAttemps","failedLoginAttempt","find","count","timestamp","getTime","redirected","push","parentDiv","h2","add","insertBefore","String","parentDiv2","div","appendChild","btnSignIn","setTimeout","click","hideForgotPasswordLink","failedLoginAttemptsJson","setItem","reduce","prev","getItem","parse","failedLoginDialogOpenAtom","atom","default","useRecoilState","useSetRecoilState","useResellerProfile","refetchOnWindowFocus","strTitle","route","params","useQueryOptions","extraHeaders","useIsAuthenticated","apiGet","getBaseUrl","useApiBase","getApiHeaders","useApiHeaders","redirectToLogin","useRedirectToLogin","apiCall","apiWretcher","query","headers","unauthorized","json","useApiGet","useQuery","queryFn","queryKey","retry","title","wretch","cache","credentials","mode","hasAccessToApp","useHasAccessToApp","getWithoutPrompt","appInstanceId","items","tokenRoles","useRoles","requiredRoles","role","r","useHasRole","permissions","userRole","useIsFeatureWhitelisted","useCallback","feature","whiteListedFeatures","some","f","useIsImpersonationMode","imoProfile","impersonationMode","targetParam","decodeURIComponent","URLSearchParams","param","has","delete","modifiedParams","CampaignProvider","campaignData","useCampaignConfig","campaignContext","campaginId","getLsObject","campaginType","isError","gcTime","Infinity","staleTime","isConfigValid","isvalid","removeLsObject","campaignId","useCampaignContext","CmsFeatureFlagProvider","featureFlagConfig","useCmsFeatureFlagConfig","cmsFeatureFlagContext","isFlagLoaded","cmsFeatureFlags","useCmsFeatureFlagContext","contextData","alignSelf","gap","minWidth","pointerEvents","fill","viewBox","xmlns","d","handleClickOpen","OneTrust","ToggleInfoDisplay","cursor","textDecorationLine","MetaDatataConfig","description","pageurl","pageUrl","culture","join","PageTitle","Helmet","rel","name","property","FeatureFlagProvider","featureFlagCache","setFeatureFlagCache","featureFlagContext","updateFeatureFlagCache","newData","prevData","isMultiFlagRequest","featureFlagValues","useFeatureFlagContext","doesFeatureFlagExist","isFlagInCache","keys","Array","isArray","isTokenExpired","useIsTokenExpired","setDefaultForNonExistingKey","newKeys","newFeatureFlags","fromEntries","pageLoadMetricsContext","usePageLoadMetricsContext","pageLoadMetrics","PageLoadMetricsProvider","routeTimer","setRouteTimer","visitedPathnames","stoppedTimers","switchedTabTracker","getCurrentRouteTimerId","getSwitchedTabsStatus","startTime","performance","now","isVisited","reference","datadogRum","startDurationVital","type","switchedTabs","crypto","randomUUID","pageLoadStartTime","stopDuration","vital","stopDurationVital","handleTabChange","timerId","visibilityState","displayName","PageLoadTimeContext","PageLoadEndTimeMarker","setPageLoadEnd","currentPageLoadEnd","endTime","pageLoadStart","setPageLoadStart","initialStartTime","pageLoadEnd","initialEndTime","addAction","loadTime","providerValue"],"sourceRoot":""}