{"version":3,"file":"static/js/7431.d86bc67f.chunk.js","mappings":"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","sources":["webpack:///./src/auth/authorization.hook.ts","webpack:///./src/auth/useRefreshAccessToken.ts","webpack:///./src/auth/user-info.hooks.ts","webpack:///./src/config/build-config/BuildConfigProvider.tsx","webpack:///./src/config/build-config/build-config-context.ts","webpack:///./src/config/build-config/useBuildConfig.ts","webpack:///./src/config/site-config/SiteConfigProvider.tsx","webpack:///./src/config/site-config/site-config-context.ts","webpack:///./src/config/site-config/useFullStoryConfig.ts","webpack:///./src/config/site-config/useSiteConfig.ts","webpack:///./src/config/usePageTitle.ts","webpack:///./src/config/xvantage-iframe/useIM360Origin.ts","webpack:///./src/config/xvantage-iframe/useInX4AFrame.ts","webpack:///./src/config/xvantage-iframe/usePostToX4A.ts","webpack:///./src/config/xvantage-iframe/utils.ts","webpack:///./src/query/api-hooks.ts","webpack:///./src/query/encode-decode-util.ts","webpack:///./src/query/query-consts.ts","webpack:///./src/query/useApiBase.ts","webpack:///./src/query/useApiHeaders.ts","webpack:///./src/query/utils.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { AuthState } from '@okta/okta-auth-js';\nimport jwt_decode from 'jwt-decode';\n\nfunction getAuthState() {\n return ((window as any).ImAuthState as AuthState | null) || null;\n}\n\nfunction getToken() {\n const authState = getAuthState();\n return authState?.accessToken;\n}\n\n/** The header `authorization` (Bearer token) for api requests. */\nexport function getAuthorizationHeader() {\n const token = getToken();\n return token ? `${token.tokenType} ${token.accessToken}` : undefined;\n}\n\n// The content of the Token\nexport function useDecodedToken() {\n const token = getToken();\n return useMemo(() => {\n const accessToken = token?.accessToken;\n if (accessToken) {\n return jwt_decode(accessToken) as TokenContent;\n }\n }, [token]);\n}\n\nexport function useRoles() {\n const decodedToken = useDecodedToken();\n return decodedToken?.role;\n}\n\nexport type Segments = {\n resellerPersonalization: string[];\n userAdbutler: string[];\n userPersonalization: string[];\n};\n\nexport type TokenContent = {\n acr: string;\n appName: string;\n aud: string;\n azureAd: string;\n cid: string;\n email: string;\n environment: string;\n exp: number;\n firstName: string;\n iat: number;\n imoProfile: {\n displayUserName: string;\n distributionChannel: string;\n division: string;\n emailAddress: string;\n firstName: string;\n impersonationMode: false;\n lastName: string;\n originalResellerId: string;\n originalUserName: string;\n resellerId: string;\n salesOrganization: string;\n userId: string;\n userName: string;\n userType: string; // 10\"\n };\n iss: string;\n jti: string;\n lastName: string;\n login: string;\n resellerId: string;\n resellerProspect?: boolean;\n role: string[];\n scp: string[];\n segments: Segments;\n senderId: string;\n siteCode: string;\n sub: string;\n uid: string;\n userId: string;\n ver: number;\n whiteListedFeatures: string[];\n};\n","import { useLocation, useNavigate } from 'react-router-dom';\nimport { useOktaAuth } from '@okta/okta-react';\n\nexport function useRefreshAccessToken(writeLogToConsole = false) {\n const { authState, oktaAuth } = useOktaAuth();\n const location = useLocation();\n const navigate = useNavigate();\n return () => {\n if (authState?.isAuthenticated) {\n const tokenTimestamp = Date.now();\n const timestamp = sessionStorage.getItem('tokenTimestamp');\n const savedTokenTimestamp = timestamp ? +timestamp : 0;\n const tokenRefreshNeeded = tokenTimestamp - savedTokenTimestamp > 5000;\n if (tokenRefreshNeeded) {\n sessionStorage.setItem('tokenTimestamp', tokenTimestamp.toString());\n if (writeLogToConsole)\n // eslint-disable-next-line no-console\n console.log('access token refresh is kicking in...');\n return oktaAuth.token.renewTokens().then(\n (tokens) => {\n return new Promise((resolve) => {\n oktaAuth.tokenManager.setTokens(tokens, () => resolve(true));\n if (writeLogToConsole)\n // eslint-disable-next-line no-console\n console.log(\n 'tokens have been refreshed through refresh_token grand type'\n );\n });\n },\n (err) => {\n if (writeLogToConsole)\n // eslint-disable-next-line no-console\n console.log(\n err,\n 'failed to refresh access token through refresh_token grand type, trying authorization_code now...'\n );\n return oktaAuth.token.getWithoutPrompt().then(\n (tokenResponse) => {\n return new Promise((resolve) => {\n const tokens = tokenResponse.tokens;\n oktaAuth.tokenManager.setTokens(tokens, () => resolve(true));\n if (writeLogToConsole)\n // eslint-disable-next-line no-console\n console.log(\n 'tokens have been refreshed through authorization_code grand type'\n );\n });\n },\n (err) => {\n if (writeLogToConsole) {\n // eslint-disable-next-line no-console\n console.log(\n err,\n 'failed to refresh access token through authorization_code grand type'\n );\n // eslint-disable-next-line no-console\n console.log('logging out from the application...');\n }\n oktaAuth.tokenManager.clear();\n if (authState) {\n authState.isAuthenticated = false;\n }\n navigate('/login', { state: { from: location } });\n return false;\n }\n );\n }\n );\n } else {\n if (writeLogToConsole)\n // eslint-disable-next-line no-console\n console.log(\n \"access token refresh is happening in a parallel process, let's just wait here...\"\n );\n return new Promise((resolve) => {\n setTimeout(() => resolve(true), 3000);\n });\n }\n } else {\n // eslint-disable-next-line no-console\n if (writeLogToConsole) console.log('user is not logged in');\n navigate('/login', { state: { from: location } });\n return Promise.resolve(false);\n }\n };\n}\n","import { useOktaAuth } from '@okta/okta-react';\nimport { useDecodedToken } from './authorization.hook';\n\ntype UserInfo = {\n email: string;\n family_name: string;\n given_name: string;\n name: string;\n preferred_username: string;\n};\n\nexport function useUserInfo() {\n const decodedToken = useDecodedToken();\n if (decodedToken) {\n return {\n email: decodedToken.email,\n family_name: decodedToken.lastName,\n given_name: decodedToken.firstName,\n name: `${decodedToken.firstName} ${decodedToken.lastName}`,\n preferred_username: decodedToken.login,\n } as UserInfo;\n }\n}\n\nexport function useIsAuthenticated() {\n const oktaContext = useOktaAuth();\n return oktaContext?.authState?.isAuthenticated === true;\n}\n\nexport function useIsTokenExpired() {\n const tokenExpiry = useDecodedToken()?.exp;\n return (\n tokenExpiry !== undefined &&\n tokenExpiry !== 0 &&\n tokenExpiry < Math.round(Date.now() / 1000)\n );\n}\n\nexport async function fetchIpAdrress(): Promise {\n const response = await fetch('/Site/ExternalHost/GetClientIp', {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n });\n if (response.ok) {\n const data = await response.json();\n return data['ClientIp'];\n }\n return '';\n}\n","import React, { ReactNode, useMemo } from 'react';\nimport { MFOutlet } from '@im/ui-lib/mf-utils';\nimport {\n EnvVars,\n buildConfigContext,\n createBuildConfig,\n} from './build-config-context';\n\ntype Props = {\n children: ReactNode;\n envVars: EnvVars;\n mfOutlets: MFOutlet[];\n};\n\nexport function BuildConfigProvider(props: Props) {\n const { children, envVars = {}, mfOutlets } = props;\n\n const buildConfig = useMemo(() => {\n return createBuildConfig(envVars, mfOutlets);\n }, [envVars, mfOutlets]);\n\n const { Provider } = buildConfigContext;\n return {children};\n}\n","import { createContext } from 'react';\nimport { MFOutlet } from '@im/ui-lib/mf-utils';\n\nexport type EnvVars = { [k: string]: string };\n\nconst CEP_PREFIX = 'CEP__';\nconst INGRAM_PREFIX = 'INGRAM__';\n\ntype BuildEnvironment =\n | 'development'\n | 'production'\n | 'productionbeta'\n | 'productionbetax'\n | 'staging'\n | 'staging2'\n | 'stagingx'\n | 'test';\nconst buildEnvironments = [\n 'development',\n 'production',\n 'productionbeta',\n 'productionbetax',\n 'staging',\n 'staging2',\n 'stagingx',\n 'test',\n];\n\ntype RequiredKey = 'API_BASE';\ntype OptionalKey = 'DEV_PROXY_HOSTNAME' | 'API_GCP_BASE' | 'API_EU_GCP_BASE';\nconst requiredKeys = ['API_BASE'];\n\ntype RawBuildConfig = {\n buildEnvironment: BuildEnvironment;\n} & { [rk in RequiredKey]: string } & Partial<{\n [ok in OptionalKey]: string;\n }> & { [k: string]: string };\n\nexport type BuildConfig = {\n /** @deprecated */\n mfOutlets: MFOutlet[];\n vars: Readonly;\n};\n\nexport const buildConfigContext = createContext(\n undefined\n);\n\nexport function createBuildConfig(\n envVars: EnvVars,\n mfOutlets: MFOutlet[]\n): BuildConfig {\n const config: Partial = {};\n\n Object.entries(envVars).forEach(([key, value]) => {\n if (key.startsWith(CEP_PREFIX)) {\n config[key.substring(CEP_PREFIX.length)] = value;\n } else if (key.startsWith(INGRAM_PREFIX)) {\n config[key.substring(INGRAM_PREFIX.length)] = value;\n } else if (key === 'NODE_ENV') {\n config.buildEnvironment = value as BuildEnvironment;\n }\n });\n\n // Validate\n const buildEnvironment = config.buildEnvironment || '';\n if (!buildEnvironments.includes(buildEnvironment)) {\n throw new Error(\n `[BuildConfig] invalid NODE_ENV=${buildEnvironment}; Must be one of: ${JSON.stringify(\n buildEnvironments\n )}.`\n );\n }\n\n requiredKeys.forEach((key) => {\n if (!config[key]) {\n throw new Error(`[BuildConfig] ${key} not set.`);\n }\n });\n\n return {\n mfOutlets,\n // Freeze to prevent modifications.\n vars: Object.freeze(config as RawBuildConfig),\n };\n}\n","import { useContext } from 'react';\nimport { buildConfigContext } from './build-config-context';\n\nexport function useBuildConfig() {\n const buildConfig = useContext(buildConfigContext);\n if (!buildConfig) {\n throw new Error(\n 'buildConfigContext value is undefined. Make sure you use the BuildConfigProvider before using the context.'\n );\n }\n return buildConfig;\n}\n\nexport function useBuildVars() {\n return useBuildConfig().vars;\n}\n\n/** @deprecated */\nexport function useMfOutlets() {\n return useBuildConfig().mfOutlets;\n}\n","import React, { ReactNode, useEffect, useState } from 'react';\nimport wretch from 'wretch';\nimport { useBuildVars } from '../build-config';\nimport { SiteConfig, siteConfigContext } from './site-config-context';\nimport { getSameOriginApiBasePath } from '../../query/utils';\nimport { disableSameOriginRequests } from '../../query/query-consts';\n\nconst apiWretcher = wretch(undefined).options({\n // https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials\n // credentials: 'include',\n credentials: 'same-origin', // Default\n\n headers: {\n accept: 'application/json',\n 'content-type': 'application/json',\n },\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Request/mode\n mode: 'cors',\n});\n\ntype Props = {\n children: ReactNode;\n};\n\nexport function SiteConfigProvider(props: Props) {\n const { children } = props;\n\n const buildVars = useBuildVars();\n\n // TODO: Same-origin Config API cannot be enabled per country as config call contains siteCode.\n // This logic should be removed once once same-origin APIs is rollouted to ALL countries.\n const shouldUseSameOriginApis =\n buildVars.buildEnvironment !== 'production' &&\n buildVars.buildEnvironment !== 'productionbeta' &&\n buildVars.buildEnvironment !== 'development' &&\n localStorage.getItem(disableSameOriginRequests) !== 'true';\n\n const [value, setValue] = useState(undefined);\n\n useEffect(() => {\n let active = true;\n\n /**\n * Config API response is being cached. The 'ver' query param would be used to invalidate cache if necessary\n */\n const queryParams: { [key: string]: string | undefined } = {\n ver: buildVars['CONFIG_API_VERSION'],\n };\n\n (async () => {\n let wretcher = apiWretcher.url(\n `${\n shouldUseSameOriginApis\n ? getSameOriginApiBasePath()\n : buildVars.API_BASE\n }/imonline-k8s-cep/cwc/config/v1/config`\n );\n // TODO: When same-origin APIs is rolled out to all countries on prod, the above wretcher definition\n // can be replaced with the below code to enable it for all envs, all countries.\n // let wretcher = apiWretcher.url(\n // `${getSameOriginApiBasePath()/imonline-k8s-cep/cwc/config/v1/config`\n // );\n\n if (globalThis.location.origin.indexOf('://local') > -1) {\n /**\n * Note: hostname query param is always needed when running locally.\n * Even when running stage and production builds locally in express or ngnix.\n */\n queryParams['hostname'] = buildVars.DEV_PROXY_HOSTNAME;\n }\n\n wretcher = wretcher.query(queryParams);\n\n const siteConfig = await wretcher.get().json();\n\n if (active) {\n setValue(siteConfig);\n }\n })();\n\n return () => {\n active = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [buildVars, setValue]);\n\n if (!value) {\n return null;\n }\n\n const { Provider } = siteConfigContext;\n return {children};\n}\n","import { createContext } from 'react';\n\nexport type SiteConfig = {\n /** OKTA issuer */\n authServer: string;\n\n /** OKTA clientId */\n clientId: string;\n\n /** Default locale like: \"en-CA\".\n * Defaults to first locale in `Accept-Language` header that exists in `supportedLocales`.\n * If not found; (`Accept-Language` header missing or no locale in header exist in `supportedLocales`)\n * then returns the first locale in `supportedLocales`.\n */\n defaultLocale: string;\n\n /** Server environment like: \"stage1\" */\n environment: string;\n\n /** fullstory enabled like: true or false */\n fullStoryEnabled: boolean;\n\n //** redirect to IDP web site to login */\n idpLogin: boolean;\n\n /** authorization code flow vs interaction code flow */\n interactionCodeFlow: boolean;\n\n /** Site code like: \"ca\" */\n siteCode: string;\n\n /** Supported locales like: [\"en-CA\",\"fr-CA\"] */\n supportedLocales: string[];\n};\n\nexport const siteConfigContext = createContext(\n undefined\n);\n","import { useSiteConfig } from './useSiteConfig';\nimport { init as fullStoryInit } from '@fullstory/browser';\nimport { useEffect } from 'react';\n\nexport function useFullStory() {\n const siteConfig = useSiteConfig();\n useEffect(() => {\n if (siteConfig.fullStoryEnabled) {\n fullStoryInit({\n debug: false, //Enables FullStory debug messages\n host: 'fullstory.com', //Host name path of fullstory\n namespace: 'FS', //Sets the global identifier for FullStory when conflicts with FS arise\n orgId: 'P9XEH', //Sets your FullStory Org Id\n recordCrossDomainIFrames: true, //Capture Cross Domain IFrame conetnt\n recordOnlyThisIFrame: true, //Tells FullStory that the IFrame is the \"root\" of the recording and should be its own session\n script: 'edge.fullstory.com/s/fs.js', //script path\n });\n }\n }, [siteConfig]);\n}\n","import { useContext } from 'react';\nimport { siteConfigContext } from './site-config-context';\n\nexport function useSiteConfig() {\n const siteConfig = useContext(siteConfigContext);\n if (!siteConfig) {\n throw new Error(\n 'siteConfigContext value is undefined. Make sure you use the SiteConfigProvider before using the context.'\n );\n }\n return siteConfig;\n}\n","import { useEffect, useState } from 'react';\n\nconst DEFAULT_PAGE_TITLE = 'Xvantage';\n\n/** updatePageTitle: Sets page title for the consuming View component as the input string.\n * For setting page title on iFramed pages, see:\n * https://imonline.atlassian.net/wiki/spaces/DigitalT/pages/3070820435/X4C+Page+Titles#iFramed-Pages */\nexport function usePageTitle() {\n const [pageTitle, setPageTitle] = useState(DEFAULT_PAGE_TITLE);\n\n const updatePageTitle = (newPageTitle: string) => {\n if (newPageTitle && pageTitle !== newPageTitle) {\n setPageTitle(newPageTitle);\n }\n };\n\n useEffect(() => {\n document.title = pageTitle;\n return () => {\n document.title = DEFAULT_PAGE_TITLE;\n };\n }, [pageTitle]);\n\n return { pageTitle, updatePageTitle };\n}\n","import { useMemo } from 'react';\nimport { useBuildVars } from '../build-config';\nimport { useSearchParams } from 'react-router-dom';\n\nexport enum IM360Regions {\n AMER = 'AMER',\n ANZ = 'ANZ',\n APAC = 'APAC',\n EMEA = 'EMEA',\n}\n\nconst useIM360Origin = () => {\n const {\n IM360_ORIGIN_AMER,\n IM360_ORIGIN_ANZ,\n IM360_ORIGIN_APAC,\n IM360_ORIGIN_EMEA,\n } = useBuildVars();\n\n const [queryParams] = useSearchParams();\n const im360Region = queryParams.get('region');\n\n const IM360_ORIGIN = useMemo(() => {\n switch (im360Region) {\n case IM360Regions.AMER:\n return IM360_ORIGIN_AMER;\n case IM360Regions.EMEA:\n return IM360_ORIGIN_EMEA;\n case IM360Regions.APAC:\n return IM360_ORIGIN_APAC;\n case IM360Regions.ANZ:\n return IM360_ORIGIN_ANZ;\n default:\n return IM360_ORIGIN_EMEA;\n }\n }, [\n im360Region,\n IM360_ORIGIN_AMER,\n IM360_ORIGIN_EMEA,\n IM360_ORIGIN_APAC,\n IM360_ORIGIN_ANZ,\n ]);\n\n return IM360_ORIGIN;\n};\n\nexport default useIM360Origin;\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { useNavigate } from 'react-router';\nimport { useLocalizationContext } from '@im/react-localization';\n\nimport { usePostToX4A } from './usePostToX4A';\nimport { useIsAuthenticated } from '../../auth/user-info.hooks';\nimport { useDecodedToken } from '../../auth/authorization.hook';\nimport { FRAME_ID, isValidOrigin } from './utils';\nimport useIM360Origin from './useIM360Origin';\n\nconst FRAME_STYLE_ID = 'x4a-frame-style';\n\ntype ObjectMap = {\n [key: string]: any;\n};\n\n/** Use Xvantage frame: Identify if X4C is currently loaded in an X4A iframe\n * and handles configurations received from the parent application. */\nexport function useInX4AFrame() {\n const isAuthenticated = useIsAuthenticated();\n const decodedToken = useDecodedToken();\n const context = useLocalizationContext();\n const navigate = useNavigate();\n const { postMessageToX4A } = usePostToX4A();\n\n const isFrame = window.self !== window.top;\n const ancestors = window.location.ancestorOrigins;\n const IM360_Origin = useIM360Origin();\n\n const [isInIM360Frame] = useState(\n isFrame && ancestors.contains(IM360_Origin)\n );\n\n const [isInX4AFrame, setIsInX4AFrame] = useState(isFrame);\n\n const listeningForPostMsg = useRef(false);\n const x4cMounted = useRef(false);\n\n const [hideFooter, setHideFooter] = useState(isFrame);\n const [hideHeader, setHideHeader] = useState(isFrame);\n const [hideSideNav, setHideSideNav] = useState(isFrame);\n const [searchParams, setSearchParams] = useState({});\n\n const [selectedLocale, setSelectedLocale] = useState('');\n\n const onPostMsgReceived = (event: MessageEvent) => {\n //Messages from invalid origins should not be processed!\n if (!isValidOrigin(event.origin)) return;\n //Xv frame post messages should always contain xv-frame frameId\n if (!event || event.data?.frameId !== FRAME_ID) return;\n const {\n action,\n hideFooter,\n hideHeader,\n hideSideNav,\n locale,\n searchParams,\n styles,\n } = event.data;\n\n if (!listeningForPostMsg.current && action === 'post-msg-ping') {\n postMessageToX4A('post-msg-ready', { origin: window.location.origin });\n listeningForPostMsg.current = true;\n }\n\n if (action === 'update-config') {\n setHideFooter(hideFooter ?? true);\n setHideHeader(hideHeader ?? true);\n setHideSideNav(hideSideNav ?? true);\n\n if (searchParams && Object.keys(searchParams)?.length > 0) {\n setSearchParams(searchParams);\n }\n\n setIsInX4AFrame(true);\n\n if (locale) {\n if (!context.supportedLocales.includes(locale)) {\n console.warn(\n `Locale \"${locale}\" received from X4A frame config is not supported. Language not set. Supported locales: ${context.supportedLocales.toString()}`\n );\n } else {\n setSelectedLocale(locale);\n }\n }\n\n if (styles) {\n const styleEle = document.getElementById(FRAME_STYLE_ID);\n if (!styleEle) {\n const ele = document.createElement('style');\n ele.id = FRAME_STYLE_ID;\n document.head.append(ele);\n }\n if (styleEle && styles !== styleEle.textContent)\n styleEle.textContent = styles;\n }\n }\n\n if (action === 'navigate-x4c-to') {\n if (event.data?.route) {\n navigate(event.data?.route);\n return;\n }\n }\n };\n\n useEffect(() => {\n if (isAuthenticated && isInX4AFrame && !x4cMounted.current) {\n //Inform parent that X4C has mounted\n postMessageToX4A('x4c-mounted', {\n origin: window.location.origin,\n x4cUser: decodedToken?.imoProfile.userName,\n });\n x4cMounted.current = true;\n\n //Listener receives post messages from X4A\n window.addEventListener('message', onPostMsgReceived);\n return () => window.removeEventListener('message', onPostMsgReceived);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isAuthenticated]);\n\n useEffect(() => {\n const currLocale = context.locale;\n if (selectedLocale && currLocale !== selectedLocale) {\n context.setLocale(selectedLocale);\n }\n }, [context, selectedLocale]);\n\n return useMemo(() => {\n return {\n isInIM360Frame,\n isInX4AFrame,\n xvFrameConfig: {\n hideFooter,\n hideHeader,\n hideSideNav,\n searchParams,\n },\n };\n }, [\n hideFooter,\n hideHeader,\n hideSideNav,\n isInIM360Frame,\n isInX4AFrame,\n searchParams,\n ]);\n}\n","import { useBuildVars } from '../build-config';\nimport useIM360Origin from './useIM360Origin';\nimport { FRAME_ID } from './utils';\n\nexport function usePostToX4A() {\n const { X4A_ORIGIN } = useBuildVars();\n const IM360_ORIGIN = useIM360Origin();\n const postMessageToX4A = (\n action: string,\n payload?: { [key: string]: any },\n isIM360 = false\n ) => {\n window.parent.postMessage(\n {\n action,\n frameId: FRAME_ID,\n ...payload,\n },\n isIM360 ? IM360_ORIGIN : X4A_ORIGIN\n );\n };\n /** Updates the reseller context in X4A by calling impersonation API with the specified BCN. */\n const updateImpersonatedReseller = (resellerId: string) => {\n postMessageToX4A('impersonate-reseller', { resellerId });\n };\n\n /** Ends impersonation of the current reseller in X4A. */\n const disableImpersonation = () => {\n postMessageToX4A('disable-impersonation');\n };\n\n /** Re-renders the X4C iframe with the newly specified path. */\n const updateX4CFramePath = (newPath: string, isInIM360Frame = false) => {\n postMessageToX4A('update-frame-path', { newPath }, isInIM360Frame);\n };\n\n /** Navigates X4C app to the specified route or route. Open in new tab is false by default. */\n const navigateToInX4A = (navOptions: {\n countryCode?: string;\n openInNewTab?: boolean;\n url?: string;\n x4aRoute?: string;\n }) => {\n postMessageToX4A('navigate-x4a-to', { navOptions });\n };\n\n return {\n disableImpersonation,\n navigateToInX4A,\n postMessageToX4A,\n updateImpersonatedReseller,\n updateX4CFramePath,\n };\n}\n","export const FRAME_ID = 'xv-frame';\n\n/** Returns true if the given string matches the https://subdomain.ingrammicro.com structure.\n * Subdomains and port number are optional, otherwise the string must match exactly. */\nexport function isValidOrigin(origin: string) {\n const originRegEx =\n /^(https:\\/\\/)([A-Za-z0-9-]*\\.){0,1}(ingrammicro\\.com){1}(:{1}[0-9]{0,8}){0,1}$/;\n return originRegEx.test(origin);\n}\n","/* eslint-disable max-lines */\nimport wretch from 'wretch';\nimport { useQuery, queryOptions, UseQueryOptions } from '@tanstack/react-query';\n\nimport { useIsAuthenticated, useIsTokenExpired } from '../auth/user-info.hooks';\nimport { useRefreshAccessToken } from '../auth/useRefreshAccessToken';\nimport { useApiHeaders, ExtraHeaders } from './useApiHeaders';\nimport { useApiBase } from './useApiBase';\n\ntype ObjectMap = {\n [key: string]: any;\n};\n\ntype ExtraQueryOptions = {\n isEncodedParams?: boolean;\n isLogoutApi?: boolean;\n};\n\nconst apiWretcher = wretch(undefined).options({\n credentials: 'same-origin',\n mode: 'cors',\n});\n\nexport function useApiQuery(\n route: string,\n params?: ObjectMap,\n useQueryOptions?: Partial>,\n extraHeaders?: ExtraHeaders,\n extraQueryOptions?: ExtraQueryOptions\n) {\n const isAuthenticated = useIsAuthenticated();\n const isTokenExpired = useIsTokenExpired();\n const apiGet = useApiGet(extraQueryOptions);\n\n // Wait for authorization\n const enabled =\n ((!isTokenExpired && isAuthenticated) ||\n !!extraQueryOptions?.isLogoutApi) &&\n (useQueryOptions?.enabled || useQueryOptions?.enabled === undefined);\n\n const contentOptions = () => {\n return queryOptions({\n enabled,\n queryFn: () => apiGet(route, params, extraHeaders),\n queryKey: [route, params, extraHeaders],\n retry: 0,\n });\n };\n\n return useQuery({ ...useQueryOptions, ...contentOptions() });\n}\n\nexport function useApiGet(\n extraQueryOptions?: ExtraQueryOptions\n) {\n const isLogoutQuery = !!extraQueryOptions?.isLogoutApi;\n const isEncodedParams =\n extraQueryOptions?.isEncodedParams &&\n localStorage.getItem('useUrlEncoding') === 'true';\n const getBaseUrl = useApiBase();\n const getApiHeaders = useApiHeaders(isLogoutQuery, isEncodedParams);\n const refreshAccessToken = useRefreshAccessToken();\n\n return function (\n route: string,\n params?: ObjectMap,\n extraHeaders?: ExtraHeaders\n ) {\n const apiHeaders = getApiHeaders(extraHeaders);\n const apiBase = getBaseUrl(route);\n const url = `${apiBase}${route}`;\n\n let apiCall = apiWretcher.url(url);\n if (params) {\n apiCall = apiCall.query(params);\n }\n return apiCall\n .headers(apiHeaders)\n .get()\n .json()\n .catch((error) => {\n if (error?.response?.status === 401 && !isLogoutQuery) {\n return refreshAccessToken().then((success) => {\n if (success) {\n //repeating API call\n return apiCall\n .headers(getApiHeaders(extraHeaders))\n .get()\n .json()\n .catch((err) => {\n throw err;\n });\n } else {\n throw error;\n }\n });\n } else {\n throw error;\n }\n });\n };\n}\n\nexport function useApiPost( //FIXME\n extraQueryOptions?: ExtraQueryOptions\n) {\n const isLogoutQuery = !!extraQueryOptions?.isLogoutApi;\n // const isEncodedParams =\n // extraQueryOptions?.isEncodedParams &&\n // localStorage.getItem('useUrlEncoding') === 'true';\n const getBaseUrl = useApiBase();\n const getApiHeaders = useApiHeaders(isLogoutQuery);\n const refreshAccessToken = useRefreshAccessToken();\n\n return function (\n route: string,\n body: ObjectMap,\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 .body(JSON.stringify(body))\n .post()\n .json()\n .catch((error) => {\n if (error?.response?.status === 401 && !isLogoutQuery) {\n return refreshAccessToken().then((success) => {\n if (success) {\n //repeating API call\n return apiCall\n .headers(getApiHeaders(extraHeaders))\n .body(JSON.stringify(body))\n .post()\n .json()\n .catch((err) => {\n throw err;\n });\n } else {\n throw error;\n }\n });\n } else {\n throw error;\n }\n });\n };\n}\n\nexport function useApiPostFormData(\n extraQueryOptions?: ExtraQueryOptions\n) {\n const isLogoutQuery = !!extraQueryOptions?.isLogoutApi;\n const getBaseUrl = useApiBase();\n const getApiHeaders = useApiHeaders(isLogoutQuery);\n const refreshAccessToken = useRefreshAccessToken();\n\n return function (\n route: string,\n formData: ObjectMap,\n params?: ObjectMap,\n extraHeaders?: ExtraHeaders\n ) {\n const apiheaders = getApiHeaders(extraHeaders);\n delete apiheaders['content-type']; //The browser has to infer the content-type automatically for multipart requests.\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(apiheaders)\n .formData(formData)\n .post()\n .json()\n .catch((error) => {\n if (error?.response?.status === 401 && !isLogoutQuery) {\n return refreshAccessToken().then((success) => {\n if (success) {\n //repeating API call\n return apiCall\n .headers(getApiHeaders(extraHeaders))\n .formData(formData)\n .post()\n .json()\n .catch((err) => {\n throw err;\n });\n } else {\n throw error;\n }\n });\n } else {\n throw error;\n }\n });\n };\n}\n\nexport function useApiPatch() {\n const getBaseUrl = useApiBase();\n const getApiHeaders = useApiHeaders();\n const refreshAccessToken = useRefreshAccessToken();\n\n return function (\n route: string,\n body: ObjectMap,\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 .body(JSON.stringify(body))\n .patch()\n .json()\n .catch((error) => {\n if (error?.response?.status === 401) {\n return refreshAccessToken().then((success) => {\n if (success) {\n //repeating API call\n return apiCall\n .headers(getApiHeaders(extraHeaders))\n .body(JSON.stringify(body))\n .patch()\n .json()\n .catch((err) => {\n throw err;\n });\n } else {\n throw error;\n }\n });\n } else {\n throw error;\n }\n });\n };\n}\n\nexport function useApiDelete() {\n const getBaseUrl = useApiBase();\n const getApiHeaders = useApiHeaders();\n const refreshAccessToken = useRefreshAccessToken();\n\n return function (\n route: string,\n body?: ObjectMap,\n params?: ObjectMap,\n extraHeaders?: ExtraHeaders\n ) {\n const url = `${getBaseUrl(route)}${route}`;\n\n let apiCall = apiWretcher.url(url);\n if (body) {\n apiCall = apiCall.body(JSON.stringify(body));\n }\n if (params) {\n apiCall = apiCall.query(params);\n }\n return apiCall\n .headers(getApiHeaders(extraHeaders))\n .delete()\n .json()\n .catch((error) => {\n if (error?.response?.status === 401) {\n return refreshAccessToken().then((success) => {\n if (success) {\n //repeating API call\n return apiCall\n .headers(getApiHeaders(extraHeaders))\n .delete()\n .json()\n .catch((err) => {\n throw err;\n });\n } else {\n throw error;\n }\n });\n } else {\n throw error;\n }\n });\n };\n}\n\nexport function useApiPut(\n extraQueryOptions?: ExtraQueryOptions\n) {\n // const isEncodedParams =\n // extraQueryOptions?.isEncodedParams &&\n // localStorage.getItem('useUrlEncoding') === 'true';\n const getBaseUrl = useApiBase();\n const getApiHeaders = useApiHeaders();\n const refreshAccessToken = useRefreshAccessToken();\n\n return function (\n route: string,\n body: ObjectMap,\n params?: ObjectMap,\n extraHeaders?: ExtraHeaders\n ) {\n const url = `${getBaseUrl(route)}${route}`;\n\n let apiCall = apiWretcher.url(url);\n if (body) {\n apiCall = apiCall.body(JSON.stringify(body));\n }\n if (params) {\n apiCall = apiCall.query(params);\n }\n return apiCall\n .headers(getApiHeaders(extraHeaders))\n .body(JSON.stringify(body))\n .put()\n .json()\n .catch((error) => {\n if (error?.response?.status === 401) {\n return refreshAccessToken().then((success) => {\n if (success) {\n //repeating API call\n return apiCall\n .headers(getApiHeaders(extraHeaders))\n .body(JSON.stringify(body))\n .put()\n .json()\n .catch((err) => {\n throw err;\n });\n } else {\n throw error;\n }\n });\n } else {\n throw error;\n }\n });\n };\n}\n\n/**\n * WARNING: USE react-query `useMutation` for true POST apis that MUTATE data.\n *\n * This `useApiPostQuery` is only for apis that retrieve data and\n * DO NOT MUTATE data.\n * These apis should have been implemented with GET method\n * but currently use POST method instead.\n */\n// eslint-disable-next-line max-params\nexport function useApiPostQuery(\n route: string,\n body: ObjectMap,\n params?: ObjectMap,\n useQueryOptions?: Partial>,\n extraHeaders?: ExtraHeaders,\n extraQueryOptions?: ExtraQueryOptions\n) {\n const isAuthenticated = useIsAuthenticated();\n const apiPost = useApiPost(extraQueryOptions);\n\n // Wait for authorization\n const enabled =\n (isAuthenticated || !!extraQueryOptions?.isLogoutApi) &&\n (useQueryOptions?.enabled || useQueryOptions?.enabled === undefined);\n\n const contentOptions = () => {\n return queryOptions({\n enabled,\n queryFn: () => apiPost(route, body, params, extraHeaders),\n queryKey: [route, body, params, extraHeaders],\n retry: 0,\n });\n };\n\n return useQuery(contentOptions());\n}\n","// eslint-disable-next-line import/no-nodejs-modules\nimport { Buffer } from 'buffer';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { parse, ParsedQs, stringify } from 'qs';\n\ntype ObjectMap = {\n [key: string]: string;\n};\n\nexport function encodeParam(param: string): string {\n const useUrlEncoding = localStorage.getItem('useUrlEncoding') === 'true';\n if (useUrlEncoding) {\n return param || param != null\n ? Buffer.from(encodeURIComponent(param.toString()), 'utf8').toString(\n 'base64'\n )\n : '';\n } else return param;\n}\n\nexport function decodeParam(param: string): string {\n const useUrlEncoding = localStorage.getItem('useUrlEncoding') === 'true';\n if (!useUrlEncoding) return param;\n\n if (!param) return '';\n\n try {\n const base64Decoded = Buffer.from(param, 'base64').toString('utf8');\n return decodeURIComponent(base64Decoded);\n } catch (error) {\n console.warn('Failed to decode parameter:', error);\n return param;\n }\n}\n\nfunction encodeParams(params: ParsedQs): ObjectMap {\n const encodedParams: ObjectMap = {};\n Object.keys(params).forEach((prop: string) => {\n encodedParams[prop] = encodeParam(params[prop] as string);\n });\n return encodedParams;\n}\n\nfunction decodeParams(params: ParsedQs): ObjectMap {\n const decodedParams: ObjectMap = {};\n if (params) {\n Object.keys(params).forEach((prop: string) => {\n decodedParams[prop] = decodeParam(params[prop] as string);\n });\n }\n return decodedParams;\n}\n\nexport function encodeDecodeUrl(url: string, decode = false): string {\n if (url.indexOf('?') === -1) {\n url = `?${url}`;\n }\n const [route, params] = url.split('?');\n const parsedParams = parse(params);\n const resultParams = decode\n ? decodeParams(parsedParams)\n : encodeParams(parsedParams);\n const resultUrl = `${route}?${stringify(resultParams)}`;\n return resultUrl;\n}\n","export const disableSameOriginRequests = 'disableSameOriginRequests';\n","import { useBuildVars, useSiteConfig } from '../config';\nimport GCP_US_ROUTES_CONFIG from './gcp-routes.json';\nimport GCP_EU_ROUTES_CONFIG from './gcp-routes-eu.json';\nimport { getSameOriginApiBasePath, useSameOriginApis } from './utils';\n\nexport function useApiBase() {\n const buildVars = useBuildVars();\n const siteConfig = useSiteConfig();\n const shouldUseSameOriginApis = useSameOriginApis();\n\n const GCPHost = buildVars.API_GCP_BASE;\n const EUGCPHost = buildVars.API_EU_GCP_BASE;\n const gcp_routes: string[] = getRoutes(\n GCP_US_ROUTES_CONFIG,\n buildVars.buildEnvironment,\n siteConfig.siteCode\n );\n const gcp_eu_routes: string[] = getRoutes(\n GCP_EU_ROUTES_CONFIG,\n buildVars.buildEnvironment,\n siteConfig.siteCode\n );\n\n return (route: string) => {\n if (route?.toLowerCase().startsWith('http')) {\n return '';\n }\n if (shouldUseSameOriginApis()) {\n return getSameOriginApiBasePath();\n }\n\n let apiBase = buildVars.API_BASE;\n if (GCPHost || EUGCPHost) {\n const isGCP =\n typeof buildVars.API_GCP_BASE === 'string' &&\n gcp_routes.some((path) => {\n return route.includes(path);\n });\n const isEUGCP =\n typeof buildVars['API_EU_GCP_BASE'] === 'string' &&\n gcp_eu_routes.some((path) => {\n return route.includes(path);\n });\n if (isEUGCP) {\n apiBase = buildVars['API_EU_GCP_BASE'];\n } else if (isGCP) {\n apiBase = buildVars.API_GCP_BASE;\n }\n }\n\n return apiBase;\n };\n}\n\ntype RouteConfig = {\n countries: string[];\n environment: string;\n routes: string[];\n};\n\nfunction getRoutes(\n routesConfig: RouteConfig[],\n buildEnvironment: string,\n siteCode: string\n) {\n return (\n routesConfig\n .filter(\n (r) =>\n (r.environment === '*' || r.environment === buildEnvironment) &&\n (r.countries.includes('*') || r.countries.includes(siteCode))\n )\n .flatMap((r) => r.routes) || []\n );\n}\n","import { v4 as uuidV4 } from 'uuid';\nimport { useBuildVars, useSiteConfig } from '../config';\nimport {\n getAuthorizationHeader,\n useDecodedToken,\n} from '../auth/authorization.hook';\nimport { useLocalizationContext } from '@im/react-localization';\n\nexport type ExtraHeaders = Partial<{\n [headerName: string]: string;\n}>;\n\nconst win = window as any;\nconst temp_session_Id = uuidV4(); // used if datadog session id is not available\n\nexport function useApiHeaders(\n isLoggedOutMode = false,\n isEncodedParams = false\n) {\n const siteConfig = useSiteConfig();\n const buildConfig = useBuildVars();\n const decodedToken = useDecodedToken();\n const l10nContext = useLocalizationContext();\n\n return (extraHeaders?: ExtraHeaders) => {\n const authorization = getAuthorizationHeader();\n const correlationId = uuidV4();\n const { locale } = l10nContext;\n const [, countryCode] = locale.split('-');\n const { environment, siteCode } = siteConfig;\n\n const resellerId = decodedToken?.resellerId || '';\n const userId = decodedToken?.userId || '';\n const dd_session_id =\n win.DD_RUM?.getInternalContext()?.session_id || temp_session_Id;\n\n const headers = {\n // New APIs Headers\n 'IM-AcceptLanguage': locale, // en-US [deprecated-soon]\n 'IM-CorrelationID': correlationId,\n 'IM-CountryCode': countryCode, // US\n 'IM-CustomerNumber': resellerId,\n 'IM-DDSessionId': dd_session_id, // session_id used for throttling rate limit for no-auth\n 'IM-Environment': environment, // [deprecated-soon]\n 'IM-MicroFrontendID': 'cep_app',\n 'IM-ResellerID': resellerId,\n 'IM-SenderID': 'IMCEP',\n 'IM-SiteCode': siteCode,\n 'IM-UserID': userId,\n\n accept: 'application/json',\n 'accept-language': locale, // en-US\n authorization,\n 'content-type': 'application/json',\n\n // Old APIs Headers\n correlationId,\n countryCode, // US\n customerNumber: resellerId,\n distributionChannel: decodedToken?.imoProfile.distributionChannel,\n division: decodedToken?.imoProfile.division,\n isoCountryCode: countryCode, // US\n ...extraHeaders,\n } as { [headerName: string]: string };\n\n if (isLoggedOutMode) {\n headers['IM-ApiKey'] = buildConfig['API_KEY'];\n }\n if (isEncodedParams) {\n headers['Decodeurl'] = 'true';\n }\n return headers;\n };\n}\n","/* eslint-disable no-console */\nimport { useCallback } from 'react';\nimport { useBuildVars } from '../config/build-config';\nimport { disableSameOriginRequests } from './query-consts';\n// import { useSiteConfig } from '../config/site-config/useSiteConfig';\n\nconst win = window as any;\n\nwin.toggleSameOriginApis = () => {\n const isDisabled = localStorage.getItem(disableSameOriginRequests);\n const newVal = isDisabled === 'true' ? 'false' : 'true';\n localStorage.setItem(disableSameOriginRequests, newVal);\n console.log(\n `[cross origin requests] ${\n newVal === 'true' ? 'enabled' : 'disabled'\n } - refresh page to see changes`\n );\n};\n\nexport const getSameOriginApiBasePath = () => {\n return `/api`;\n};\n\n// Controls whether to use same origin APIs or not. NOTE: Config API call is\n// out of scope of QueryClient and handled separately in SiteConfigProvider.tsx.\nexport const useSameOriginApis = () => {\n const buildVars = useBuildVars();\n // const { siteCode } = useSiteConfig();\n\n const shouldUseSameOriginApis = useCallback(() => {\n if (buildVars.buildEnvironment === 'development') return false;\n if (localStorage.getItem(disableSameOriginRequests) === 'true')\n return false;\n // if (siteCode === 'us') return true;\n return (\n buildVars.buildEnvironment !== 'production' &&\n buildVars.buildEnvironment !== 'productionbeta' &&\n localStorage.getItem(disableSameOriginRequests) !== 'true'\n );\n }, [buildVars.buildEnvironment]);\n\n return shouldUseSameOriginApis;\n};\n"],"names":["getToken","authState","window","ImAuthState","accessToken","getAuthorizationHeader","token","tokenType","undefined","useDecodedToken","useMemo","jwt_decode","useRoles","decodedToken","role","useRefreshAccessToken","writeLogToConsole","oktaAuth","useOktaAuth","location","useLocation","navigate","useNavigate","isAuthenticated","tokenTimestamp","Date","now","timestamp","sessionStorage","getItem","setItem","toString","console","log","renewTokens","then","tokens","Promise","resolve","tokenManager","setTokens","err","getWithoutPrompt","tokenResponse","clear","state","from","setTimeout","useUserInfo","email","family_name","lastName","given_name","firstName","name","preferred_username","login","useIsAuthenticated","oktaContext","useIsTokenExpired","tokenExpiry","exp","Math","round","async","fetchIpAdrress","response","fetch","headers","Accept","method","ok","json","BuildConfigProvider","props","children","envVars","mfOutlets","buildConfig","createBuildConfig","Provider","buildConfigContext","React","value","CEP_PREFIX","INGRAM_PREFIX","buildEnvironments","requiredKeys","createContext","config","Object","entries","forEach","key","startsWith","substring","length","buildEnvironment","includes","Error","JSON","stringify","vars","freeze","useBuildConfig","useContext","useBuildVars","useMfOutlets","apiWretcher","wretch","options","credentials","accept","mode","SiteConfigProvider","buildVars","shouldUseSameOriginApis","localStorage","disableSameOriginRequests","setValue","useState","useEffect","active","queryParams","ver","wretcher","url","getSameOriginApiBasePath","API_BASE","globalThis","origin","indexOf","DEV_PROXY_HOSTNAME","query","siteConfig","get","siteConfigContext","useFullStory","useSiteConfig","fullStoryEnabled","fullStoryInit","debug","host","namespace","orgId","recordCrossDomainIFrames","recordOnlyThisIFrame","script","DEFAULT_PAGE_TITLE","usePageTitle","pageTitle","setPageTitle","document","title","updatePageTitle","newPageTitle","IM360Regions","useIM360Origin","IM360_ORIGIN_AMER","IM360_ORIGIN_ANZ","IM360_ORIGIN_APAC","IM360_ORIGIN_EMEA","useSearchParams","im360Region","AMER","EMEA","APAC","ANZ","FRAME_STYLE_ID","useInX4AFrame","context","useLocalizationContext","postMessageToX4A","usePostToX4A","isFrame","self","top","ancestors","ancestorOrigins","IM360_Origin","isInIM360Frame","contains","isInX4AFrame","setIsInX4AFrame","listeningForPostMsg","useRef","x4cMounted","hideFooter","setHideFooter","hideHeader","setHideHeader","hideSideNav","setHideSideNav","searchParams","setSearchParams","selectedLocale","setSelectedLocale","onPostMsgReceived","event","isValidOrigin","data","frameId","FRAME_ID","action","locale","styles","current","keys","supportedLocales","warn","styleEle","getElementById","ele","createElement","id","head","append","textContent","route","x4cUser","imoProfile","userName","addEventListener","removeEventListener","currLocale","setLocale","xvFrameConfig","X4A_ORIGIN","IM360_ORIGIN","payload","isIM360","parent","postMessage","disableImpersonation","navigateToInX4A","navOptions","updateImpersonatedReseller","resellerId","updateX4CFramePath","newPath","test","useApiQuery","params","useQueryOptions","extraHeaders","extraQueryOptions","isTokenExpired","apiGet","useApiGet","enabled","isLogoutApi","useQuery","queryOptions","queryFn","queryKey","retry","isLogoutQuery","isEncodedParams","getBaseUrl","useApiBase","getApiHeaders","useApiHeaders","refreshAccessToken","apiHeaders","apiCall","catch","error","status","success","useApiPost","body","post","useApiPostFormData","formData","apiheaders","useApiPatch","patch","useApiDelete","delete","useApiPut","put","useApiPostQuery","apiPost","encodeParam","param","Buffer","encodeURIComponent","decodeParam","base64Decoded","decodeURIComponent","encodeDecodeUrl","decode","split","parsedParams","parse","resultParams","decodedParams","prop","decodeParams","encodedParams","encodeParams","useSameOriginApis","GCPHost","API_GCP_BASE","EUGCPHost","API_EU_GCP_BASE","gcp_routes","getRoutes","GCP_US_ROUTES_CONFIG","siteCode","gcp_eu_routes","GCP_EU_ROUTES_CONFIG","toLowerCase","apiBase","isGCP","some","path","routesConfig","filter","r","environment","countries","flatMap","routes","win","temp_session_Id","uuidV4","isLoggedOutMode","l10nContext","authorization","correlationId","countryCode","userId","DD_RUM","getInternalContext","session_id","customerNumber","distributionChannel","division","isoCountryCode","toggleSameOriginApis","newVal","useCallback"],"sourceRoot":""}