{"version":3,"file":"diContainer.79c9b39adac2728ad028.bundle.js","mappings":"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","sources":["webpack://elc-service-session-mgmt/./node_modules/@estee/elc-service/src/Api.ts","webpack://elc-service-session-mgmt/./src/api/SignInApiSdk.ts","webpack://elc-service-session-mgmt/./src/service-setup/ConfigStore.ts","webpack://elc-service-session-mgmt/./src/internal/use-cases/ClearAuthSessionUseCase.ts","webpack://elc-service-session-mgmt/./src/internal/constants/constants.ts","webpack://elc-service-session-mgmt/./src/internal/domain/entities/AuthSession.ts","webpack://elc-service-session-mgmt/./src/internal/use-cases/UpdateAuthSessionUseCase.ts","webpack://elc-service-session-mgmt/./src/service-setup/ServiceBusController.ts","webpack://elc-service-session-mgmt/./src/internal/repositories/AuthSessionRepository.ts","webpack://elc-service-session-mgmt/./src/internal/domain/entities/GuestUser.ts","webpack://elc-service-session-mgmt/./src/internal/repositories/GuestRepository.ts","webpack://elc-service-session-mgmt/./src/service-setup/diContainer.ts","webpack://elc-service-session-mgmt/./node_modules/base-64/base64.js"],"sourcesContent":["import { HeaderType, HeaderObject, root } from '@estee/elc-universal-utils';\nimport { ELCLogger, TriggerType } from '@estee/elc-logging';\n\nexport const AUTHORIZATION_HEADER_NAME = 'AuthorizationToken';\nexport const BUSINESS_UNIT_HEADER_NAME = 'Business-Unit';\n\nexport interface IError {\n status: number;\n}\nexport interface IDataMapperOperations {\n [key: string]: Function | undefined;\n request?(request: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [k: string]: any;\n }): {};\n response?(response: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [k: string]: any;\n }): {};\n}\nexport interface IDataMappings {\n [key: string]: IDataMapperOperations;\n}\nexport interface IResponse {\n data: T;\n reponseHeaders: Headers | {};\n}\nexport interface IPayload {\n url: string;\n body?: {};\n options?: {};\n headers?: {};\n returnAsPlainText?: boolean;\n}\nexport interface IGetPayload {\n url: string;\n options?: {};\n headers?: {};\n params?: {};\n}\nexport interface IRequestOptions {\n debounceInterval?: number;\n bypassCache?: boolean;\n}\nexport interface IHttpTransport {\n addGlobalHeaders(header: HeaderObject): void;\n removeGlobalHeader(headerName: string): void;\n delete(payload: string | IPayload): Promise>;\n post(payload: IPayload): Promise>;\n patch(payload: IPayload): Promise>;\n put(payload: IPayload): Promise>;\n get(payload: string | IGetPayload, IRequestOptions?: IRequestOptions): Promise>;\n}\nexport interface IDataMapper {\n // eslint-disable-next-line @typescript-eslint/ban-types\n mapRequest(name: string, request: Object): {};\n // eslint-disable-next-line @typescript-eslint/ban-types\n mapResponse(name: string, response: Object): {};\n dataMappings?: IDataMappings;\n}\n\nexport interface IConfig {\n cartId?: string;\n httpTransport: IHttpTransport;\n dataMapper?: IDataMapper;\n businessUnitId?: string;\n drupalDomain?: string;\n}\n\nexport class Api {\n protected bearerToken: string;\n protected httpTransport: IHttpTransport;\n protected businessUnitId: string | undefined;\n private logger: ELCLogger;\n\n constructor(configStore: IConfig, serviceName: string, serviceVersion: string) {\n this.httpTransport = configStore.httpTransport;\n this.businessUnitId = configStore.businessUnitId;\n this.logger = new ELCLogger({ serviceName, serviceVersion });\n }\n\n public addHeader(header: HeaderObject) {\n this.httpTransport.addGlobalHeaders(header);\n }\n\n public removeHeader(headerName: HeaderType) {\n this.httpTransport.removeGlobalHeader(headerName);\n }\n\n public setBearerToken(bearerToken: string) {\n if (bearerToken) {\n this.addHeader({\n [AUTHORIZATION_HEADER_NAME]: `${bearerToken}`\n });\n } else {\n this.removeHeader(AUTHORIZATION_HEADER_NAME);\n }\n }\n protected delete = async (payload: IPayload) => {\n let response: IResponse = { data: {} as T, reponseHeaders: {} };\n\n try {\n response = await this.httpTransport.delete(payload);\n } catch (e) {\n this.handleError(e, 'delete', payload);\n }\n\n return response;\n };\n\n protected get = async (\n payload: IGetPayload | string,\n { debounceInterval = 200, bypassCache = false }: IRequestOptions = {}\n ) => {\n let response: IResponse = { data: {} as T, reponseHeaders: {} };\n\n try {\n response = await this.httpTransport.get(payload, {\n debounceInterval,\n bypassCache\n });\n } catch (e) {\n this.handleError(e, 'get', payload);\n }\n\n return response;\n };\n\n protected patch = async (payload: IPayload) => {\n let response: IResponse = { data: {} as T, reponseHeaders: {} };\n\n try {\n response = await this.httpTransport.patch(payload);\n } catch (e) {\n this.handleError(e, 'patch', payload);\n }\n\n return response;\n };\n\n protected post = async (payload: IPayload) => {\n let response: IResponse = { data: {} as T, reponseHeaders: {} };\n try {\n response = await this.httpTransport.post(payload);\n } catch (e) {\n this.handleError(e, 'post', payload);\n }\n\n return response;\n };\n protected put = async (payload: IPayload) => {\n let response: IResponse = { data: {} as T, reponseHeaders: {} };\n\n try {\n response = await this.httpTransport.put(payload);\n } catch (e) {\n this.handleError(e, 'put', payload);\n }\n\n return response;\n };\n\n private handleError = (e: Error, requestType: string, originalPayload: IPayload | string) => {\n this.logger.error({\n triggerType: TriggerType.api,\n message: `${e}`,\n payload: {\n context: {\n subdomain: root.site && root.site.client && root.site.client.subdomain,\n originalPayload,\n requestType\n },\n error: e\n }\n });\n };\n}\n","import { Api, IConfig } from '@estee/elc-service';\nimport { IHttpTransport } from '@estee/elc-universal-utils';\nimport { ConfigStore } from '../service-setup/ConfigStore';\n\nexport interface ISignInResponse {\n token_type: string;\n access_token: string;\n expires_in: number;\n userId: string;\n userEmail: string;\n userRole: string;\n userCreationDate: string;\n}\n\nexport interface ISessionData {\n access_token: string | null;\n expires: number | null;\n spa_urls: string[] | null;\n user_id: string | null;\n}\n\ninterface IResult {\n code: number;\n data: ISessionData;\n message: string;\n}\n\nexport interface ISignInApiSdkConfig extends IConfig {\n baseUrl: string;\n configStore: ConfigStore;\n}\n\nconst { name, version } = __serviceInfo__;\n\nexport class SignInApiSdk extends Api {\n private readonly authApiUrl: string;\n private readonly baseUrl: string;\n private readonly sessionMgmtUrl: string;\n\n constructor(config: ISignInApiSdkConfig) {\n super(config, name, version);\n this.authApiUrl = 'stardust-account-proxy-v0/oauth';\n\n this.baseUrl = config.baseUrl;\n\n this.sessionMgmtUrl = `${this.baseUrl ?? ''}/stardust-account-session-mgt-v0`;\n }\n\n public get tokenUrl() {\n return `/${this.authApiUrl}/token`;\n }\n\n public guestTokenRequest = async (): Promise => {\n const response = await this.httpTransport.post({\n url: this.tokenUrl,\n body: {\n grant_type: 'client_credentials'\n }\n });\n\n return response.data;\n };\n\n public getLegacyGuestTokenIndependentFromApi = async (): Promise => {\n const url = new URL(this.tokenUrl, this.baseUrl);\n\n const request: RequestInit = {\n method: 'POST',\n body: JSON.stringify({\n grant_type: 'client_credentials'\n }),\n headers: (this.httpTransport as IHttpTransport).getStaticGlobalHeaders()\n };\n\n const response = await fetch(url.toString(), request);\n const responseJson = await response.json();\n\n return responseJson as ISignInResponse;\n };\n\n public getSession = async (): Promise> => {\n const response = await fetch(`${this.sessionMgmtUrl}/sessions/current`, {\n credentials: 'include'\n });\n\n if (!(response.status >= 200 && response.status < 300)) {\n throw response;\n }\n\n const sessionData = (await response.json()) as IResult;\n\n return sessionData;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public signIn = async (signInData: any): Promise => {\n const response = await this.httpTransport.post({\n url: this.tokenUrl,\n body: signInData\n });\n\n return response.data;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public signOut = async (signOutData: any) => {\n return this.httpTransport.post({\n url: `/${this.authApiUrl}/revoke`,\n body: signOutData\n });\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { observable, action } from 'mobx';\n\nexport class ConfigStore {\n @observable public config: any;\n @observable\n public breakpoints: Theme.IBreakpoints = {\n desktop: 768,\n largeScreen: 1024,\n extraLargeScreen: 1200\n };\n\n constructor(config: any) {\n this.updateConfig(config);\n }\n\n @action\n public updateConfig(config: any) {\n this.config = { ...config };\n }\n}\n","import { command, serviceCommands } from '@estee/elc-service-bus';\nimport { AuthSessionRepository } from '../repositories/AuthSessionRepository';\n\nexport class ClearAuthSessionUseCase {\n // eslint-disable-next-line @typescript-eslint/no-parameter-properties\n constructor(private readonly authSessionRepository: AuthSessionRepository) {}\n\n public execute = async () => {\n void command(serviceCommands.CLEAR_USER_DATA);\n\n this.authSessionRepository.clearSession();\n if (this.authSessionRepository.enableCareConfig) {\n this.authSessionRepository.clearCareSession();\n }\n\n await this.authSessionRepository.ensureAuthSession();\n if (this.authSessionRepository.enableCareConfig) {\n await this.authSessionRepository.ensureCareAuthSession();\n }\n };\n}\n","export const AUTHENTICATION_SOURCES = Object.freeze({\n SIGN_IN: 'sign-in',\n SIGN_UP: 'sign-up',\n FORGOT_PASSWORD: 'forgot-password',\n REFRESH_AUTH_TOKEN: 'refresh-auth-token',\n CARE: 'care'\n});\n\nexport const TOKEN_TYPE = Object.freeze({\n GUEST: 'guest',\n USER: 'user'\n});\n\nexport const GUEST_COOKIE_NAMES = Object.freeze({\n AUTH_TOKEN: 'elc-auth-token-guest',\n AUTH_TYPE: 'elc-auth-token-type-guest'\n});\n\nexport const COOKIES_NAMES = Object.freeze({\n AUTH_TOKEN: 'elc-auth-token',\n AUTH_TYPE: 'elc-auth-token-type',\n CARE_AUTH_TOKEN: 'elc-care-auth-token',\n CARE_AUTH_TYPE: 'elc-care-auth-token-type'\n});\n\nexport const FAIL_LOGIN_ATTEMPT = Object.freeze({\n BAD_CREDENTIALS: 'bad_credentials',\n CAPTCHA: 'bad_credentials_captcha',\n WARNING: 'bad_credentials_warning',\n FIRST_LOCK: 'locked_user_1st',\n SECOND_LOCK: 'locked_user_2nd'\n});\n\nexport const OPT_IN_SOURCE = Object.freeze({\n SIGN_IN: 'sign-in'\n});\n\nexport const CARE_SIGNIN_STATE_NAME = 'elc-care-signin-state';\nexport const CARE_SIGNIN_DATA_NAME = 'elc-care-signin-data';\nexport const CARE_GUEST_SIGNIN_STATE_NAME = 'elc-care-guest-signin-state';\n\nexport const AUTHORIZATION_HEADER_NAME = 'AuthorizationToken';\n\nexport const CARE_QUERY_PARAM_NAME_STRATEGY = 's';\nexport const CARE_STRATEGY_SIGN_IN = 'signin';\nexport const CARE_STRATEGY_SIGN_UP = 'signup';\nexport const CARE_STRATEGY_GUEST = 'guest';\nexport const CARE_STRATEGY_LOGO = 'logo';\nexport const CARE_STRATEGY_CANCEL = 'cancel';\n\nexport enum AuthMode {\n CARE = 'care'\n}\n\n/*\n This is a list of urls that will NEVER use the new Authorizer\n */\nexport const BLACKLISTED_AUTH_URLS = [\n '/stardust-prodcat-product-',\n '/stardust-buid-configurations-',\n '/stardust-fe-logging-'\n];\n","import { observable, action, computed } from 'mobx';\nimport { TOKEN_TYPE } from '../../constants/constants';\n\nexport interface IAuthSession {\n token: string;\n source?: string;\n email?: string;\n}\n\nexport class AuthSession {\n @observable public token: string | null;\n @observable public tokenType: string | null;\n @observable public authSourceData: IAuthSession;\n @observable public expiration: number | null;\n @observable public userId: string | null;\n\n constructor(\n token: string | null,\n tokenType: string | null,\n expiration: number | null,\n userId: string | null\n ) {\n this.token = token;\n this.tokenType = tokenType;\n this.expiration = expiration;\n this.userId = userId;\n }\n\n @computed\n public get isAuthenticated() {\n const { token, tokenType } = this;\n\n return !!(token && tokenType === TOKEN_TYPE.USER);\n }\n\n @computed\n public get isAuthSessionAvailable() {\n return (\n this.token &&\n (this.tokenType === TOKEN_TYPE.USER || this.tokenType === TOKEN_TYPE.GUEST)\n );\n }\n\n @action\n private updateToken(token: string | null) {\n this.token = token;\n }\n\n @action\n private updateTokenType(tokenType: string | null) {\n this.tokenType = tokenType;\n }\n\n @action\n private updateExpiration(expiration: number | null) {\n this.expiration = expiration;\n }\n\n @action\n private updateUserId(userId: string | null) {\n this.userId = userId;\n }\n\n @action\n public updateAuthSession(authSession: AuthSession) {\n this.updateTokenType(authSession.tokenType);\n this.updateToken(authSession.token);\n this.updateExpiration(authSession.expiration);\n this.updateUserId(authSession.userId);\n }\n\n @action\n public clearToken() {\n this.updateTokenType(null);\n this.updateToken(null);\n this.updateExpiration(null);\n this.updateUserId(null);\n }\n\n @action\n public setAuthSourceData(authSourceData: IAuthSession) {\n this.authSourceData = authSourceData;\n }\n}\n","import { AuthSession } from '../domain/entities/AuthSession';\nimport { diContainer } from '~setup/diContainer';\nimport serviceNames from '~setup/SessionManagementService';\nimport { AUTHENTICATION_SOURCES, TOKEN_TYPE } from '../constants/constants';\n\nexport interface IAuthSession {\n token: string;\n expiration: number;\n source?: string;\n email?: string;\n}\n\nexport class UpdateAuthSessionUseCase {\n private authSession: AuthSession;\n private careAuthSession: AuthSession;\n // eslint-disable-next-line @typescript-eslint/no-parameter-properties\n constructor(private data: IAuthSession) {\n this.authSession = diContainer.get(serviceNames.authSession);\n this.careAuthSession = diContainer.get(serviceNames.careAuthSession);\n }\n\n public execute = () => {\n const authSession = new AuthSession(\n this.data.token,\n TOKEN_TYPE.USER,\n this.data.expiration,\n null\n );\n\n const targetAuthSession =\n this.data.source === AUTHENTICATION_SOURCES.CARE\n ? this.careAuthSession\n : this.authSession;\n\n targetAuthSession.updateAuthSession(authSession);\n targetAuthSession.setAuthSourceData(this.data);\n };\n}\n","import { reaction } from 'mobx';\nimport { ClearAuthSessionUseCase } from '~use-cases/ClearAuthSessionUseCase';\nimport { IAuthSession, UpdateAuthSessionUseCase } from '~use-cases/UpdateAuthSessionUseCase';\nimport { AuthSessionRepository } from '~repositories/AuthSessionRepository';\nimport { GuestRepository } from '~repositories/GuestRepository';\nimport { AuthSession } from '~domain/entities/AuthSession';\n\nexport interface IServiceBusControllerConfig {\n authSessionRepository: AuthSessionRepository;\n authSession: AuthSession;\n guestRepository: GuestRepository;\n}\n\nexport class ServiceBusController {\n constructor(\n // eslint-disable-next-line @typescript-eslint/no-parameter-properties\n private readonly authSession: AuthSession,\n // eslint-disable-next-line @typescript-eslint/no-parameter-properties\n private readonly careAuthSession: AuthSession,\n // eslint-disable-next-line @typescript-eslint/no-parameter-properties\n private readonly authSessionRepository: AuthSessionRepository,\n // eslint-disable-next-line @typescript-eslint/no-parameter-properties\n private readonly guestRepository: GuestRepository\n ) {\n reaction(() => this.authSession.token, this.tokenChanged);\n }\n\n public isAuthenticated = () => {\n if (this.authSessionRepository.enableCareConfig) {\n return !!this.careAuthSession.isAuthenticated;\n }\n\n return !!this.authSession.isAuthenticated;\n };\n\n public guestEmail = async () => {\n const guestUser = await this.guestRepository.getGuestUser();\n\n return guestUser.email;\n };\n\n public getLegacyGuestAuthToken = async () => {\n return this.authSessionRepository.getLegacyAuthToken();\n };\n\n public getGuestAuthToken = () => {\n return this.authSessionRepository.getGuestAuthToken().access_token;\n };\n\n public getAccessToken = async () => {\n return this.authSessionRepository.getAccessToken();\n };\n\n public getUserId = async () => {\n return this.authSessionRepository.getUserId();\n };\n\n public updateAccessToken = (payload: IAuthSession) => {\n const useCase = new UpdateAuthSessionUseCase(payload);\n useCase.execute();\n };\n\n public signedOut = () => {\n const useCase = new ClearAuthSessionUseCase(this.authSessionRepository);\n void useCase.execute();\n };\n\n public tokenChanged = () => {\n this.authSessionRepository.storeInCookie();\n };\n}\n","import { AuthSession } from '../domain/entities/AuthSession';\nimport {\n AuthMode,\n AUTHORIZATION_HEADER_NAME,\n CARE_GUEST_SIGNIN_STATE_NAME,\n CARE_SIGNIN_DATA_NAME,\n CARE_SIGNIN_STATE_NAME,\n COOKIES_NAMES,\n TOKEN_TYPE\n} from '../constants/constants';\nimport { BrowserStorage, IHttpTransport, IRequestTransformer } from '@estee/elc-universal-utils';\nimport { ISessionData, SignInApiSdk } from '../../api/SignInApiSdk';\nimport { ConfigStore } from '../../service-setup/ConfigStore';\nimport { IAccountConfig } from '../../service-setup/IAccountConfig';\nimport { IAuthRequestStateData } from '../domain/entities/IAuthRequestStateData';\nimport { encode } from 'base-64';\n\nexport interface IAuthSessionRepositoryConfig {\n authSession: AuthSession;\n careAuthSession: AuthSession;\n signInApiSdk: SignInApiSdk;\n httpTransport: IHttpTransport;\n configStore: ConfigStore;\n}\n\nconst DEFAULT_EXPIRATION_TIME_MS = 1 * 60 * 60 * 1000;\n\nexport class AuthSessionRepository {\n private readonly authSession: AuthSession;\n private readonly careAuthSession: AuthSession;\n private readonly signInApiSdk: SignInApiSdk;\n private readonly httpTransport: IHttpTransport;\n private readonly businessUnitId: string;\n\n private requestTransformer: IRequestTransformer;\n\n public readonly enableCareConfig: boolean;\n\n private ensureAuthSessionPromise: Promise | null = null;\n\n private ensureCareAuthSessionPromise: Promise | null = null;\n private accessTokenExpirationDate: Date | null = null;\n\n constructor(config: IAuthSessionRepositoryConfig) {\n this.authSession = config.authSession;\n this.careAuthSession = config.careAuthSession;\n this.businessUnitId = config.configStore.config.businessUnitId;\n\n this.signInApiSdk = config.signInApiSdk;\n this.httpTransport = config.httpTransport;\n\n const accountConfig: IAccountConfig = config.configStore.config.accountConfig || {};\n this.enableCareConfig = accountConfig.authMode === AuthMode.CARE;\n }\n\n public get authRequestState() {\n return BrowserStorage.getItem(CARE_SIGNIN_STATE_NAME, 'localStorage');\n }\n\n public get guestAuthRequestState() {\n return BrowserStorage.getItem(CARE_GUEST_SIGNIN_STATE_NAME, 'localStorage');\n }\n\n public setAuthRequestState(state: string) {\n BrowserStorage.setItem(CARE_SIGNIN_STATE_NAME, state, 'localStorage');\n }\n\n public setGuestAuthRequestState(state: string) {\n BrowserStorage.setItem(CARE_GUEST_SIGNIN_STATE_NAME, state, 'localStorage');\n }\n\n public setAuthRequestStateData(data: IAuthRequestStateData | null) {\n if (!data) {\n BrowserStorage.removeItem(CARE_SIGNIN_DATA_NAME);\n } else {\n BrowserStorage.setItem(CARE_SIGNIN_DATA_NAME, JSON.stringify(data), 'localStorage');\n }\n }\n\n public getAuthRequestStateData(): IAuthRequestStateData | null {\n const serialized = BrowserStorage.getItem(CARE_SIGNIN_DATA_NAME, 'localStorage');\n\n return serialized ? (JSON.parse(serialized) as IAuthRequestStateData) : null;\n }\n\n public storeInCookie = () => {\n // handle auth token cookie storage\n this.storeAuthSession(this.authSession, COOKIES_NAMES.AUTH_TOKEN, COOKIES_NAMES.AUTH_TYPE);\n };\n\n public storeCareToken = () => {\n this.storeAuthSession(\n this.careAuthSession,\n COOKIES_NAMES.CARE_AUTH_TOKEN,\n COOKIES_NAMES.CARE_AUTH_TYPE\n );\n };\n\n private get storedAuthSession() {\n const tokenCookie = BrowserStorage.getCookie(COOKIES_NAMES.AUTH_TOKEN);\n const tokenTypeCookie = BrowserStorage.getCookie(COOKIES_NAMES.AUTH_TYPE);\n\n return new AuthSession(tokenCookie, tokenTypeCookie, null, null);\n }\n\n private storeAuthSession(\n authSession: AuthSession,\n cookieTokenName: string,\n cookieTypeName: string\n ) {\n const { token: authToken, tokenType, expiration } = authSession;\n\n if (!authToken) {\n BrowserStorage.eraseCookie(cookieTokenName);\n BrowserStorage.eraseCookie(cookieTypeName);\n } else {\n const storedToken = BrowserStorage.getCookie(cookieTokenName);\n const storedTokenType = BrowserStorage.getCookie(cookieTypeName);\n if (!storedToken || storedToken !== authToken || storedTokenType !== tokenType) {\n // update cookie if a new token is available\n BrowserStorage.setCookie(\n cookieTokenName,\n authToken,\n new Date(Date.now() + (expiration || 0) * 1000)\n );\n BrowserStorage.setCookie(\n cookieTypeName,\n tokenType,\n new Date(Date.now() + (expiration || 0) * 1000)\n );\n }\n }\n }\n\n public getGuestAuthToken = () => {\n return {\n access_token: encode(`${this.businessUnitId}:${window.location.origin}`),\n expires_in: 86400,\n user_id: null\n };\n };\n\n public signOut = async () => {\n try {\n await this.signInApiSdk.signOut({ token: this.authSession.token });\n } catch (error) {\n throw error;\n }\n };\n\n public ensureAuthSession: () => Promise = () => {\n let result: Promise | null = this.ensureAuthSessionPromise;\n if (!result) {\n result = this.ensureAuthSessionPromise = this.doEnsureAuthSession();\n }\n\n return result as Promise;\n };\n\n private doEnsureAuthSession = async () => {\n let guestToken;\n try {\n guestToken = await this.signInApiSdk.getLegacyGuestTokenIndependentFromApi();\n this.setGuestAuthToken(guestToken);\n this.storeInCookie();\n } catch (err) {\n console.error(err);\n }\n\n this.ensureAuthSessionPromise = null;\n };\n\n private createRequestTransformer = (): IRequestTransformer => {\n return async (config) => {\n const newHeaders = new Headers(config.headers);\n const token = this.getGuestAuthToken().access_token;\n\n if (!newHeaders.has(AUTHORIZATION_HEADER_NAME)) {\n newHeaders.set(AUTHORIZATION_HEADER_NAME, token as string);\n }\n\n config.headers = newHeaders;\n };\n };\n\n private setGuestAuthToken = (response: { access_token: string; expires_in: number | null }) => {\n const newSession = new AuthSession(\n response.access_token,\n TOKEN_TYPE.GUEST,\n response.expires_in,\n null\n );\n this.authSession.updateAuthSession(newSession);\n };\n\n public getLegacyAuthToken = async () => {\n const storedAuthToken = this.authSession.token || this.storedAuthSession;\n if (!this.authSession.token) {\n await this.ensureAuthSession();\n }\n\n return storedAuthToken;\n };\n\n public getAccessToken = async (): Promise => {\n await this.ensureCareAuthSession();\n\n return this.careAuthSession.token ?? this.getGuestAuthToken().access_token;\n };\n\n public getUserId = async (): Promise => {\n await this.ensureCareAuthSession();\n\n return this.careAuthSession.userId ?? '';\n };\n\n public isAuthenticated = async (): Promise => {\n if (this.enableCareConfig) {\n await this.ensureCareAuthSession();\n\n return this.careAuthSession.isAuthenticated;\n }\n\n return this.authSession.isAuthenticated;\n };\n\n public clearSession() {\n this.authSession.clearToken();\n this.ensureAuthSessionPromise = null;\n }\n\n public clearCareSession() {\n this.careAuthSession.clearToken();\n\n this.accessTokenExpirationDate = null;\n this.ensureCareAuthSessionPromise = null;\n }\n\n public ensureCareAuthSession = async (): Promise => {\n // ensure token is not stale\n if (\n this.ensureCareAuthSessionPromise &&\n this.accessTokenExpirationDate &&\n this.accessTokenExpirationDate < new Date()\n ) {\n this.accessTokenExpirationDate = new Date(\n new Date().getTime() + DEFAULT_EXPIRATION_TIME_MS\n );\n this.ensureCareAuthSessionPromise = null;\n }\n\n if (!this.ensureCareAuthSessionPromise) {\n this.ensureCareAuthSessionPromise = this.doEnsureCareAuthSession();\n }\n\n return this.ensureCareAuthSessionPromise;\n };\n\n private doEnsureCareAuthSession = async (): Promise => {\n let session: ISessionData | null = null;\n try {\n const { data } = await this.signInApiSdk.getSession();\n if (data.access_token) {\n session = data;\n }\n } catch (err) {\n //\n }\n\n const accessToken: {\n access_token: string;\n expires_in: number | null;\n user_id: string | null;\n } =\n session && session.access_token\n ? {\n access_token: session.access_token,\n expires_in: session.expires,\n user_id: session.user_id\n }\n : this.getGuestAuthToken();\n\n this.accessTokenExpirationDate = new Date(\n new Date().getTime() + (accessToken.expires_in || DEFAULT_EXPIRATION_TIME_MS)\n );\n\n const newSession = new AuthSession(\n accessToken.access_token,\n accessToken.user_id ? TOKEN_TYPE.USER : TOKEN_TYPE.GUEST,\n accessToken.expires_in,\n accessToken.user_id\n );\n\n this.careAuthSession.updateAuthSession(newSession);\n };\n\n public ensureRequestTransformer = () => {\n if (!this.requestTransformer) {\n this.requestTransformer = this.createRequestTransformer();\n this.httpTransport.addRequestTransformer(this.requestTransformer);\n }\n };\n}\n","import { action, computed, observable } from 'mobx';\n\nexport class GuestUser {\n @observable public signUpRequired: boolean = true;\n @observable private _email: string = '';\n\n constructor(email: string) {\n this._email = email;\n }\n\n @computed\n get email() {\n return this._email;\n }\n\n @action\n public setEmail = (email: string) => {\n this._email = email;\n };\n}\n","import { GuestUser } from '../domain/entities/GuestUser';\nimport { BrowserStorage } from '@estee/elc-universal-utils';\n\nexport class GuestRepository {\n private _guestUser: GuestUser;\n\n public fetchGuestUser = () => {\n return BrowserStorage.getItem('guestEmail', 'sessionStorage');\n };\n\n public saveGuestUser = () => {\n BrowserStorage.setItem('guestEmail', this._guestUser.email, 'sessionStorage');\n };\n\n public getGuestUser = async () => {\n const init = async () => {\n const isGuestUser = this.fetchGuestUser();\n\n return new GuestUser(isGuestUser || '');\n };\n\n if (!this._guestUser) {\n this._guestUser = await init();\n }\n\n return this._guestUser;\n };\n}\n","import { ISignInApiSdkConfig, SignInApiSdk } from '../api/SignInApiSdk';\nimport { ConfigStore } from './ConfigStore';\nimport { Container } from 'hypo-container';\nimport { ServiceBusController } from './ServiceBusController';\nimport serviceNames, { SessionManagementService } from './SessionManagementService';\nimport { ServiceManager } from '@estee/elc-service';\nimport { root, ServiceInitializer, IAppConfig } from '@estee/elc-universal-utils';\nimport { AuthSession } from '~domain/entities/AuthSession';\nimport { AuthSessionRepository } from '~repositories/AuthSessionRepository';\nimport { GuestRepository } from '~repositories/GuestRepository';\nimport { GuestUser } from '~domain/entities/GuestUser';\n\nexport const diContainer = new Container();\n\nexport const setConfig = (configJSON: IAppConfig) => {\n diContainer.config = configJSON;\n};\n\nexport const serviceInitializer: ServiceInitializer = async (config: IAppConfig) => {\n setConfig(config);\n\n const authRepo = diContainer.get(serviceNames.authSessionRepository);\n\n await authRepo.ensureRequestTransformer();\n};\n\ndiContainer\n .register(\n serviceNames.configStore,\n diContainer.factory((c) => new ConfigStore(c.config))\n )\n .register(serviceNames.httpTransport, (c) => root.HttpTransport)\n .register(serviceNames.signInApiSdk, (c) => {\n const configStore: ConfigStore = c.get(serviceNames.configStore);\n const config: ISignInApiSdkConfig = {\n businessUnitId: configStore.config.businessUnitId,\n httpTransport: c.get(serviceNames.httpTransport),\n baseUrl: configStore.config.baseUrl,\n configStore\n };\n\n return new SignInApiSdk(config);\n })\n .register(\n serviceNames.serviceBusController,\n (c) =>\n new ServiceBusController(\n c.get(serviceNames.authSession),\n c.get(serviceNames.careAuthSession),\n c.get(serviceNames.authSessionRepository),\n c.get(serviceNames.guestRepository)\n )\n )\n .register(\n serviceNames.sessionManagementService,\n (c) => new SessionManagementService(serviceInitializer)\n )\n .register(serviceNames.guestRepository, (c) => new GuestRepository())\n .register(serviceNames.guestUser, (c) => new GuestUser(''))\n .register(\n serviceNames.authSessionRepository,\n (c) =>\n new AuthSessionRepository({\n signInApiSdk: c.get(serviceNames.signInApiSdk),\n authSession: c.get(serviceNames.authSession),\n careAuthSession: c.get(serviceNames.careAuthSession),\n httpTransport: c.get(serviceNames.httpTransport),\n configStore: c.get(serviceNames.configStore)\n })\n )\n .register(serviceNames.authSession, (c) => new AuthSession(null, null, null, null))\n .register(serviceNames.careAuthSession, () => new AuthSession(null, null, null, null));\n\nexport const serviceStarter = ServiceManager.startService;\n","/*! https://mths.be/base64 v1.0.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '1.0.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n"],"names":["AUTHORIZATION_HEADER_NAME","Api","constructor","configStore","serviceName","serviceVersion","delete","payload","response","data","reponseHeaders","this","httpTransport","e","handleError","get","debounceInterval","bypassCache","patch","post","put","requestType","originalPayload","logger","error","triggerType","TriggerType","message","context","subdomain","businessUnitId","ELCLogger","addHeader","header","addGlobalHeaders","removeHeader","headerName","removeGlobalHeader","setBearerToken","bearerToken","name","version","SignInApiSdk","config","super","guestTokenRequest","url","tokenUrl","body","grant_type","getLegacyGuestTokenIndependentFromApi","URL","baseUrl","request","method","JSON","stringify","headers","getStaticGlobalHeaders","fetch","toString","json","getSession","sessionMgmtUrl","credentials","status","signIn","signInData","signOut","signOutData","authApiUrl","ConfigStore","breakpoints","desktop","largeScreen","extraLargeScreen","updateConfig","ClearAuthSessionUseCase","authSessionRepository","execute","command","serviceCommands","clearSession","enableCareConfig","clearCareSession","ensureAuthSession","ensureCareAuthSession","AUTHENTICATION_SOURCES","Object","freeze","SIGN_IN","SIGN_UP","FORGOT_PASSWORD","REFRESH_AUTH_TOKEN","CARE","TOKEN_TYPE","GUEST","USER","COOKIES_NAMES","AUTH_TOKEN","AUTH_TYPE","CARE_AUTH_TOKEN","CARE_AUTH_TYPE","CARE_SIGNIN_STATE_NAME","BAD_CREDENTIALS","CAPTCHA","WARNING","FIRST_LOCK","SECOND_LOCK","CARE_SIGNIN_DATA_NAME","CARE_GUEST_SIGNIN_STATE_NAME","AuthMode","AuthSession","token","tokenType","expiration","userId","isAuthenticated","isAuthSessionAvailable","updateToken","updateTokenType","updateExpiration","updateUserId","updateAuthSession","authSession","clearToken","setAuthSourceData","authSourceData","UpdateAuthSessionUseCase","targetAuthSession","source","careAuthSession","diContainer","ServiceBusController","guestRepository","guestEmail","getGuestUser","email","getLegacyGuestAuthToken","getLegacyAuthToken","getGuestAuthToken","access_token","getAccessToken","getUserId","updateAccessToken","signedOut","tokenChanged","storeInCookie","reaction","DEFAULT_EXPIRATION_TIME_MS","AuthSessionRepository","ensureAuthSessionPromise","ensureCareAuthSessionPromise","accessTokenExpirationDate","storeAuthSession","storeCareToken","encode","window","location","origin","expires_in","user_id","signInApiSdk","result","doEnsureAuthSession","guestToken","setGuestAuthToken","err","console","createRequestTransformer","newHeaders","Headers","has","set","newSession","storedAuthToken","storedAuthSession","Date","getTime","doEnsureCareAuthSession","session","accessToken","expires","ensureRequestTransformer","requestTransformer","addRequestTransformer","accountConfig","authMode","authRequestState","guestAuthRequestState","setAuthRequestState","state","setGuestAuthRequestState","setAuthRequestStateData","getAuthRequestStateData","serialized","parse","tokenCookie","tokenTypeCookie","cookieTokenName","cookieTypeName","authToken","storedToken","storedTokenType","now","GuestUser","signUpRequired","_email","setEmail","GuestRepository","fetchGuestUser","saveGuestUser","_guestUser","init","isGuestUser","Container","setConfig","configJSON","serviceInitializer","authRepo","register","factory","c","SessionManagementService","serviceStarter","ServiceManager","root","freeExports","exports","freeGlobal","module","g","global","InvalidCharacterError","prototype","Error","TABLE","REGEX_SPACE_CHARACTERS","base64","input","String","test","a","b","buffer","padding","length","output","position","charCodeAt","charAt","replace","bitStorage","bitCounter","indexOf","fromCharCode"],"sourceRoot":""}