{"version":3,"file":"bootstrap.mjs","sources":["../../src/utils/logger.ts","../../src/utils/crypto.ts","../../src/common/persisted-state.ts","../../src/common/store.ts","../../src/common/publish-state.ts","../../src/utils/broadcast.ts","../../src/utils/constants.ts","../../src/utils/navigation.ts","../../src/utils/seamless.ts","../../src/cias/cias-env.ts","../../src/common/error.ts","../../src/cias/cias-errors.ts","../../src/cias/cias-api.ts","../../src/cias/cias-logout.ts","../../src/cias/cias-login.ts","../../src/cias/cias-linkout.ts","../../src/cias/cias-logged-in.ts","../../src/common/flows.ts","../../src/utils/translation.ts","../../src/common/publish-error.ts","../../src/utils/analytics.ts","../../src/bootstrap.ts"],"sourcesContent":["import { formatBuildTime } from '@b2x/shared/metadata.mjs';\nimport { isDebuggerEnable, isDebuggerGrouped } from '@b2x/std/core/debug.mjs';\nimport { isLocalhost } from '@b2x/std/core/utilities.mjs';\nimport { BrowserReporter, consola } from '@b2x/std/logger.mjs';\n\nconst LOGGER_NAMESPACE = 'B2X@AUTH';\n\ntype Logger = {\n  createLogger: (group: string) => ReturnType<typeof consola.createLoggerGroup>;\n};\n\nfunction initializeLogger(): Logger {\n  consola.setLogger(LOGGER_NAMESPACE, {\n    reporters: [\n      new BrowserReporter({\n        title: `AUTH@${VERSION}-${formatBuildTime(BUILD_TIME)}`,\n        namespace: LOGGER_NAMESPACE,\n        delay: 1500,\n        grouped: isDebuggerGrouped(LOGGER_NAMESPACE),\n        enabled: isDebuggerEnable(LOGGER_NAMESPACE) || isLocalhost(),\n      }),\n    ],\n  });\n\n  return {\n    createLogger: (group: string) => consola.createLoggerGroup(LOGGER_NAMESPACE, group),\n  };\n}\n\nexport const logger = initializeLogger();\n","export async function encrypt(content: string, password: string) {\n  const salt = crypto.getRandomValues(new Uint8Array(16));\n\n  const key = await getKey(password, salt);\n\n  const iv = crypto.getRandomValues(new Uint8Array(12));\n\n  const contentBytes = stringToBytes(content);\n\n  const cipher = new Uint8Array(await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, contentBytes));\n\n  return {\n    salt: bytesToBase64(salt),\n    iv: bytesToBase64(iv),\n    cipher: bytesToBase64(cipher),\n  };\n}\n\nexport async function decrypt(encryptedData: any, password: string) {\n  const salt = base64ToBytes(encryptedData.salt);\n\n  const key = await getKey(password, salt);\n\n  const iv = base64ToBytes(encryptedData.iv);\n\n  const cipher = base64ToBytes(encryptedData.cipher);\n\n  const contentBytes = new Uint8Array(await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, cipher));\n\n  return bytesToString(contentBytes);\n}\n\nasync function getKey(password: string, salt: Uint8Array<ArrayBuffer>) {\n  const passwordBytes = stringToBytes(password);\n\n  const initialKey = await crypto.subtle.importKey('raw', passwordBytes, { name: 'PBKDF2' }, false, ['deriveKey']);\n\n  return crypto.subtle.deriveKey(\n    { name: 'PBKDF2', salt, iterations: 100000, hash: 'SHA-256' },\n    initialKey,\n    { name: 'AES-GCM', length: 256 },\n    false,\n    ['encrypt', 'decrypt'],\n  );\n}\n\n// conversion helpers\n\nfunction bytesToString(bytes: Uint8Array) {\n  return new TextDecoder().decode(bytes);\n}\n\nfunction stringToBytes(str: string) {\n  return new TextEncoder().encode(str);\n}\n\nfunction bytesToBase64(arr: Uint8Array) {\n  return btoa(Array.from(arr, (byte) => String.fromCodePoint(byte)).join(''));\n}\n\nfunction base64ToBytes(base64: string) {\n  return Uint8Array.from(atob(base64), (character) => character.codePointAt(0) as number);\n}\n","import { storage } from '@b2x/std/core/storage.mjs';\n\nimport { decrypt, encrypt } from '@/utils/crypto';\n\nimport type { AuthStateLegacy, Cias } from './types';\n\nclass PersistedState {\n  public readonly storageKey = 'b2x.auth-state';\n\n  private readonly key = 'key';\n\n  private readonly initialState: AuthStateLegacy<null> = {\n    jwe: null,\n    claims: null,\n    identityProvider: null,\n  };\n\n  private decryptedState: AuthStateLegacy | null = null;\n\n  async get<T = Cias>() {\n    if (this.decryptedState) {\n      return this.decryptedState as AuthStateLegacy<T | null>;\n    }\n\n    const encryptedState = storage.local.get<AuthStateLegacy<T> | null>(this.storageKey);\n    if (!encryptedState) {\n      return this.initialState as AuthStateLegacy<T | null>;\n    }\n\n    const decryptedData = await decrypt(encryptedState, this.key);\n    this.decryptedState = JSON.parse(decryptedData);\n\n    return this.decryptedState as AuthStateLegacy<T | null>;\n  }\n\n  async set(authState: AuthStateLegacy) {\n    this.decryptedState = authState;\n\n    const state = JSON.stringify({\n      jwe: authState.jwe,\n      claims: authState.claims,\n      identityProvider: authState.identityProvider,\n    });\n\n    const encryptedData = await encrypt(state, this.key);\n\n    storage.local.set(this.storageKey, encryptedData);\n  }\n\n  clearCache() {\n    this.decryptedState = null;\n  }\n\n  remove() {\n    storage.local.remove(this.storageKey);\n    this.clearCache();\n  }\n}\n\nexport const persistedState = new PersistedState();\n","import { defineStore } from '@b2x/std/store.mjs';\nimport type { StoreApi } from '@b2x/std/types';\n\nimport type { AuthStateInitial, StateApi } from './types';\n\n// new store\nexport const authStore: StoreApi<AuthStateInitial, StateApi> = defineStore<AuthStateInitial, StateApi>({\n  jwe: null,\n  isMfaEnabled: false,\n  email: null,\n  isLoginOrLogoutEvent: false,\n});\n\nauthStore.defineGetter('isLoggedIn', (state) => Boolean(state.jwe));\n","import { storage } from '@b2x/std/core/storage.mjs';\n\nimport type { CiasClaims } from '@/cias/cias-types';\nimport { logger } from '@/utils/logger';\n\nimport { persistedState } from './persisted-state';\nimport { authStore } from './store';\nimport type { AuthStateLegacy } from './types';\n\nconst log = logger.createLogger('PUBLISH_STATE');\n\nexport async function publishState(\n  authStateLegacy: AuthStateLegacy,\n  { isLoginOrLogoutEvent = false }: { isLoginOrLogoutEvent?: boolean } = {},\n) {\n  log.info('publishing state', authStateLegacy, { isLoginOrLogoutEvent });\n\n  // 1. new state in memory\n  authStore.updateState({\n    jwe: authStateLegacy.jwe,\n    isMfaEnabled: (authStateLegacy.claims as CiasClaims)?.acr === 'mfa',\n    email: (authStateLegacy.claims as CiasClaims)?.email,\n    isLoginOrLogoutEvent,\n  });\n\n  // 2. set analytics login state\n  storage.session.set('ow_aem_loginstate', authStateLegacy.jwe ? 'logged_in' : 'logged_out', false);\n\n  // 3. persist\n  if (authStateLegacy?.jwe) {\n    await persistedState.set(authStateLegacy);\n  } else {\n    // we remove the state to avoid doing decryption on every page load\n    persistedState.remove();\n  }\n}\n","import { createBroadcastChannel } from '@b2x/std/core/broadcast.mjs';\n\nexport const authChannel: ReturnType<typeof createBroadcastChannel> = createBroadcastChannel('b2x-auth-channel');\n","export const FLOWS = {\n  LOGIN: 'LOGIN',\n  LOGOUT: 'LOGOUT',\n  REGISTER: 'REGISTER',\n  LINKOUT: 'LINKOUT',\n} as const;\n\nexport type Flows = (typeof FLOWS)[keyof typeof FLOWS];\n\nexport const QUERY_PARAMETERS = {\n  PROVIDER: 'b2xProvider',\n  FLOW: 'b2xFlow',\n  ERROR: 'b2xError',\n  CIAS_ERROR: 'error',\n  TOKEN: 'token',\n  REGISTER: 'b2xRegister',\n  B2B_REGISTRATION: 'company-profile',\n  LINKOUT_CODE: 'linkout_code',\n} as const;\n\nexport const PROVIDERS = {\n  CIAS: 'CIAS',\n} as const;\n\nexport const TENANTS = {\n  ONEWEB: 'oneweb',\n} as const;\n\nexport const COMPANY_PROFILE = {\n  ENABLED: 'enabled',\n  DISABLED: 'disabled',\n} as const;\n\nexport const STAGES = {\n  DEV: 'DEV',\n  TEST: 'TEST',\n  INT: 'INT',\n  PPROD: 'PPROD',\n  PROD: 'PROD',\n} as const;\n\nexport const NON_PROD_STAGES = [STAGES.DEV, STAGES.TEST, STAGES.INT, STAGES.PPROD] as const;\n\nexport const CIAM_REDIRECT_CHAR_LIMIT = 300;\n","export function navigateTo(url: URL | string) {\n  globalThis.location.assign(url);\n}\n","import { getEnvironmentData } from '@b2x/shared/utilities.mjs';\nimport type { PageEnvironmentVariables } from '@seamless/one-context';\n\nexport interface Page extends PageEnvironmentVariables {\n  stage: Stage;\n}\n\nexport type Stage = 'DEV' | 'TEST' | 'INT' | 'PPROD' | 'PROD';\nexport type PageEnvironment = Pick<Page, 'stage' | 'language' | 'country' | 'runMode'>;\n\nexport const getPageEnv = async (): Promise<PageEnvironment> => {\n  const env = (await getEnvironmentData('authentication')).pageEnvironmentVariables;\n  return {\n    stage: env.stage as Stage,\n    language: env.language,\n    country: env.country,\n    runMode: env.runMode,\n  };\n};\n\nexport async function isPrivatePage() {\n  const compData = (await getEnvironmentData('authentication')).componentData;\n\n  return Object.values(compData).some((comp: any) => comp.config?.userSessionRequired);\n}\n\nexport const isAuthorMode = async () => (await getPageEnv()).runMode === 'AUTHOR'; // PUBLISH\n","import { getPageEnv } from '@/utils/seamless';\n\nconst CIAS_HOST_TEST = 'https://test.api.oneweb.mercedes-benz.com/cias/v1/';\nconst CIAS_HOST_INT = 'https://int.api.oneweb.mercedes-benz.com/cias/v1/';\nconst CIAS_HOST_PROD = 'https://api.oneweb.mercedes-benz.com/cias/v1/';\n\nconst ciasEnv = {\n  DEV: CIAS_HOST_TEST,\n  TEST: CIAS_HOST_INT,\n  INT: CIAS_HOST_INT,\n  PPROD: CIAS_HOST_INT,\n  PROD: CIAS_HOST_PROD,\n};\n\nexport async function getCiasHost(): Promise<string> {\n  const stage = (await getPageEnv()).stage;\n  return ciasEnv[stage];\n}\n","export abstract class IamError extends Error {\n  abstract id: string; // name has to be defined in the derived class because of minification\n\n  public type = '';\n\n  public translationKey = '';\n\n  get shouldNotify() {\n    return Boolean(this.type);\n  }\n\n  toString() {\n    return `[${this.id}]: ${this.message}`;\n  }\n}\n\nexport const NotificationType = {\n  ERROR: 'ERROR',\n  WARNING: 'WARNING',\n  SUCCESS: 'SUCCESS',\n  BASIC: 'BASIC',\n  HIGHLIGHT: 'HIGHLIGHT',\n} as const;\n\nexport class UnknownError extends IamError {\n  id = 'UnknownError';\n  type = NotificationType.ERROR;\n  translationKey = 'error.unknown';\n\n  constructor() {\n    super('Authorization: Unexpected error occurred. Please try later.');\n  }\n}\n","import { IamError, NotificationType, UnknownError } from '@/common/error';\n\nexport class CiasMissingToken extends IamError {\n  id = 'CiasMissingToken';\n  type = NotificationType.ERROR;\n  translationKey = 'error.login';\n\n  constructor() {\n    super('Cias is missing token');\n  }\n}\n\nexport class CiasFailureFetchJwt extends IamError {\n  id = 'CiasFailureFetchJwt';\n  type = NotificationType.ERROR;\n  translationKey = 'error.login';\n\n  constructor() {\n    super('Cias failed exchanging token to jwe');\n  }\n}\n\nexport class CiasFailureFetchClaims extends IamError {\n  id = 'CiasFailureFetchClaims';\n  type = NotificationType.ERROR;\n  translationKey = 'error.login';\n\n  constructor() {\n    super('Cias failed obtaining claims');\n  }\n}\n\nexport class CiasValidationError extends IamError {\n  id = 'CiasValidationError';\n  type = NotificationType.ERROR;\n  translationKey = 'error.login';\n\n  constructor() {\n    super('Cias failed validating token');\n  }\n}\n\nexport class CiasFailureRefreshJwt extends IamError {\n  id = 'CiasFailureRefreshJwt';\n  translationKey = 'error.refresh';\n\n  constructor() {\n    super('Cias failed refresh jwe');\n  }\n}\n\nconst errors = [\n  CiasMissingToken,\n  CiasFailureFetchJwt,\n  CiasFailureFetchClaims,\n  CiasValidationError,\n  CiasFailureRefreshJwt,\n];\n\nexport function getCiasErrorById(id: string) {\n  const ErrorClass = errors.find((error) => new error().id === id) || UnknownError;\n  return new ErrorClass();\n}\n","import { createHttpClient } from '@b2x/std/core/http.mjs';\n\nimport { TENANTS } from '@/utils/constants';\n\nimport { getCiasHost } from './cias-env';\nimport { CiasFailureFetchClaims, CiasFailureFetchJwt, CiasFailureRefreshJwt, CiasValidationError } from './cias-errors';\nimport type { CiasClaims } from './cias-types';\n\nexport async function ciasApi() {\n  const http = createHttpClient({ prefixUrl: await getCiasHost() });\n\n  return {\n    fetchJwe: async (token: string) => {\n      try {\n        const response = await http.get(`jwe/${token}`);\n        return response?.text();\n      } catch {\n        throw new CiasFailureFetchJwt();\n      }\n    },\n\n    fetchClaims: async (jwe: string) => {\n      try {\n        const response = await http.put('claims', {\n          headers: {\n            Accept: 'application/json',\n            ApplicationName: 'b2xlc',\n            Authorization: `Bearer ${jwe}`,\n          },\n          searchParams: {\n            scope: 'FULL_NO_CIAM_ID',\n          },\n        });\n        return await response.json<CiasClaims>();\n      } catch {\n        throw new CiasFailureFetchClaims();\n      }\n    },\n\n    validate: async (jwe: string) => {\n      try {\n        const response = await http.get('validation', {\n          headers: {\n            Accept: 'application/json',\n            ApplicationName: 'b2xlc',\n            Authorization: `Bearer ${jwe}`,\n          },\n        });\n        return await response.json<CiasClaims>();\n      } catch {\n        throw new CiasValidationError();\n      }\n    },\n\n    refreshToken: async (jwe: string) => {\n      try {\n        const response = await http.post('jwe/refresh', {\n          headers: {\n            accept: 'application/json',\n            tenantId: TENANTS.ONEWEB,\n            Authorization: `Bearer ${jwe}`,\n          },\n        });\n        const data = await response.json<{ jwe: string }>();\n        return data.jwe;\n      } catch {\n        throw new CiasFailureRefreshJwt();\n      }\n    },\n  };\n}\n","import { publishState } from '@/common/publish-state';\nimport { authChannel } from '@/utils/broadcast';\nimport { CIAM_REDIRECT_CHAR_LIMIT, FLOWS, PROVIDERS, QUERY_PARAMETERS } from '@/utils/constants';\nimport { logger } from '@/utils/logger';\nimport { navigateTo } from '@/utils/navigation';\nimport { getPageEnv, isPrivatePage } from '@/utils/seamless';\n\nimport { getCiasHost } from './cias-env';\n\nconst log = logger.createLogger('LOGOUT_CIAS');\n\nexport async function logoutCias({ targetUrl = globalThis.location.href } = {}) {\n  const fullTargetUrl = new URL(targetUrl);\n\n  if (await isPrivatePage()) {\n    fullTargetUrl.pathname = '/';\n\n    if (globalThis.location.pathname.includes('vans')) {\n      fullTargetUrl.pathname = '/vans';\n    }\n\n    const allowedParams = new Set<string>([QUERY_PARAMETERS.ERROR]);\n\n    for (const key of fullTargetUrl.searchParams.keys()) {\n      if (!allowedParams.has(key)) {\n        fullTargetUrl.searchParams.delete(key);\n      }\n    }\n  }\n\n  fullTargetUrl.searchParams.append(QUERY_PARAMETERS.PROVIDER, PROVIDERS.CIAS);\n  fullTargetUrl.searchParams.append(QUERY_PARAMETERS.FLOW, FLOWS.LOGOUT);\n\n  const encodedTargetUrlLength = encodeURIComponent(fullTargetUrl.toString()).length;\n\n  if (encodedTargetUrlLength >= CIAM_REDIRECT_CHAR_LIMIT) {\n    log.warn(`Target URL length (${encodedTargetUrlLength}) exceeds CIAM redirect limit. Redirecting to fallback URL.`);\n    fullTargetUrl.href = buildFallbackUrl();\n  }\n\n  const { country, language } = await getPageEnv();\n\n  const params = {\n    locale: `${language}_${country}`,\n    tenantId: 'oneweb',\n    targetUrl: fullTargetUrl.toString(),\n  };\n  const logoutUrl = new URL('logout', await getCiasHost());\n  logoutUrl.search = new URLSearchParams(params).toString();\n\n  log.info('Logout action on CIAS to url:', logoutUrl);\n\n  navigateTo(logoutUrl);\n}\n\nexport async function logoutFlowCias() {\n  // TODO: track logout event\n\n  await publishState(\n    {\n      jwe: null,\n      claims: null,\n      identityProvider: null,\n    },\n    { isLoginOrLogoutEvent: true },\n  );\n\n  authChannel.send({ type: 'logout', payload: null });\n}\n\nfunction buildFallbackUrl() {\n  const fallbackUrl = new URL(globalThis.location.origin);\n  fallbackUrl.searchParams.append(QUERY_PARAMETERS.PROVIDER, PROVIDERS.CIAS);\n  fallbackUrl.searchParams.append(QUERY_PARAMETERS.FLOW, FLOWS.LOGOUT);\n  return fallbackUrl.toString();\n}\n","import { getQueryParameter, removeQueryParametersForSeamlessRouter } from '@b2x/std/core/url.mjs';\n\nimport { publishState } from '@/common/publish-state';\nimport { authStore } from '@/common/store';\nimport type { AuthStateLegacy, Cias } from '@/common/types';\nimport { authChannel } from '@/utils/broadcast';\nimport { FLOWS, PROVIDERS, QUERY_PARAMETERS, TENANTS } from '@/utils/constants';\nimport { logger } from '@/utils/logger';\nimport { navigateTo } from '@/utils/navigation';\nimport { getPageEnv, isPrivatePage } from '@/utils/seamless';\n\nimport { ciasApi } from './cias-api';\nimport { getCiasHost } from './cias-env';\nimport { CiasMissingToken } from './cias-errors';\nimport { logoutCias } from './cias-logout';\n\nconst log = logger.createLogger('LOGIN_CIAS');\n\nexport async function loginCias({\n  redirectUrl = globalThis.location.href,\n  mfa = false,\n  linkoutCode,\n}: { redirectUrl?: string; mfa?: boolean; linkoutCode?: string | null } = {}) {\n  if (authStore.state.isLoggedIn && !mfa) {\n    throw new Error('There is active session already, cannot start a new one');\n  }\n\n  if (authStore.state.isLoggedIn && mfa && authStore.state.isMfaEnabled) {\n    throw new Error('There is active session with mfa already, cannot start a new one');\n  }\n\n  const fullRedirectUrl = new URL(redirectUrl);\n  fullRedirectUrl.searchParams.append(QUERY_PARAMETERS.PROVIDER, PROVIDERS.CIAS);\n  fullRedirectUrl.searchParams.append(QUERY_PARAMETERS.FLOW, FLOWS.LOGIN);\n\n  const { country, language } = await getPageEnv();\n\n  const initParams: Record<string, string> = {\n    prompt: 'DEFAULT',\n    locale: `${language}_${country}`,\n    tenantId: TENANTS.ONEWEB,\n    redirectUrl: fullRedirectUrl.toString(), // It is called a USVString which is different from the JavaScript string type\n    forceMfa: String(mfa),\n  };\n\n  if (linkoutCode) {\n    initParams[QUERY_PARAMETERS.LINKOUT_CODE] = linkoutCode;\n  }\n\n  const loginUrl = new URL('authentication', await getCiasHost());\n  loginUrl.search = new URLSearchParams(initParams).toString();\n\n  log.info('Login action on CIAS to url:', loginUrl);\n\n  navigateTo(loginUrl);\n}\n\nexport async function loginFlowCias(): Promise<void> {\n  log.info('Running CIAS login flow');\n  let state: AuthStateLegacy<Cias | null> = {\n    jwe: null,\n    claims: null,\n    identityProvider: null,\n  };\n\n  try {\n    const api = await ciasApi();\n\n    const token = getQueryParameter(QUERY_PARAMETERS.TOKEN);\n    removeQueryParametersForSeamlessRouter([QUERY_PARAMETERS.TOKEN, QUERY_PARAMETERS.REGISTER]);\n\n    if (!token) {\n      throw new CiasMissingToken();\n    }\n\n    const jwe = await api.fetchJwe(token);\n    const claims = await api.fetchClaims(jwe);\n\n    state = {\n      jwe,\n      claims,\n      identityProvider: PROVIDERS.CIAS,\n    };\n  } catch (error) {\n    if (await isPrivatePage()) {\n      const targetUrl = new URL(globalThis.location.href);\n      targetUrl.searchParams.append(QUERY_PARAMETERS.ERROR, (error as any).id);\n\n      return logoutCias({ targetUrl: targetUrl.toString() });\n    }\n\n    throw error;\n  } finally {\n    await publishState(state, { isLoginOrLogoutEvent: true });\n    authChannel.send({ type: 'login', payload: state });\n  }\n}\n","import { logger } from '@/utils/logger';\n\nimport { loginCias } from './cias-login';\n\nconst log = logger.createLogger('LINKOUT_CIAS');\n\n/**\n * Mobile webview handoff: consume `linkout_code` from the OneWeb URL and\n * start the normal CIAS authentication redirect, forwarding the same param\n * on the CIAS `/authentication` URL.\n */\nexport async function linkoutFlowCias(linkoutCode: string): Promise<void> {\n  log.info('[LINKOUT_CIAS] Starting CIAS login flow with linkout code');\n\n  await loginCias({ linkoutCode });\n}\n","import type { IamError } from '@/common/error';\nimport { publishState } from '@/common/publish-state';\nimport type { AuthStateLegacy, Cias } from '@/common/types';\nimport { PROVIDERS, QUERY_PARAMETERS } from '@/utils/constants';\nimport { logger } from '@/utils/logger';\nimport { isPrivatePage } from '@/utils/seamless';\n\nimport { ciasApi } from './cias-api';\nimport { logoutCias } from './cias-logout';\n\nconst log = logger.createLogger('LOGGED_IN_CIAS');\n\nexport async function loggedInFlowCias(state: AuthStateLegacy<Cias>) {\n  log.info('Logged in flow');\n  let newState: AuthStateLegacy<Cias | null> = state;\n\n  try {\n    const api = await ciasApi();\n    const isValid = await api\n      .validate(state.jwe)\n      .then(() => true)\n      .catch(() => false);\n\n    if (!isValid) {\n      const newJwe = await api.refreshToken(state.jwe);\n      const newClaims = await api.fetchClaims(newJwe);\n\n      newState = {\n        jwe: newJwe,\n        claims: newClaims,\n        identityProvider: PROVIDERS.CIAS,\n      };\n    }\n  } catch (error) {\n    if (await isPrivatePage()) {\n      const targetUrl = new URL(globalThis.location.origin);\n      targetUrl.searchParams.append(QUERY_PARAMETERS.ERROR, (error as IamError).id);\n\n      return logoutCias({ targetUrl: targetUrl.toString() });\n    }\n\n    newState = {\n      jwe: null,\n      claims: null,\n      identityProvider: null,\n    };\n\n    throw error;\n  } finally {\n    await publishState(newState);\n  }\n}\n","import { getQueryParameter, removeQueryParametersForSeamlessRouter } from '@b2x/std/core/url.mjs';\n\nimport { getCiasErrorById } from '@/cias/cias-errors';\nimport { linkoutFlowCias as runLinkoutFlowCias } from '@/cias/cias-linkout';\nimport { loggedInFlowCias as runLoggedInFlowCias } from '@/cias/cias-logged-in';\nimport { loginCias, loginFlowCias as runLoginFlowCias } from '@/cias/cias-login';\nimport { logoutFlowCias as runLogoutFlowCias } from '@/cias/cias-logout';\nimport { publishState } from '@/common/publish-state';\nimport { FLOWS, type Flows, PROVIDERS, QUERY_PARAMETERS } from '@/utils/constants';\nimport { logger } from '@/utils/logger';\nimport { isPrivatePage } from '@/utils/seamless';\n\nimport { persistedState } from './persisted-state';\nimport type { AuthStateLegacy, Cias } from './types';\n\nconst log = logger.createLogger('GET_FLOW');\n\nexport async function runFlow() {\n  const flowParam = getQueryParameter(QUERY_PARAMETERS.FLOW) as Flows | null;\n  const registerParam = getQueryParameter(QUERY_PARAMETERS.REGISTER);\n  const providerParam = getQueryParameter(QUERY_PARAMETERS.PROVIDER);\n  const errorParam = getQueryParameter(QUERY_PARAMETERS.ERROR);\n  const ciasErrorParam = getQueryParameter(QUERY_PARAMETERS.CIAS_ERROR);\n  const linkoutCodeParam = getQueryParameter(QUERY_PARAMETERS.LINKOUT_CODE);\n\n  log.info('Flow, provider, error', flowParam, providerParam, errorParam || ciasErrorParam);\n\n  removeQueryParametersForSeamlessRouter([\n    QUERY_PARAMETERS.FLOW,\n    QUERY_PARAMETERS.PROVIDER,\n    QUERY_PARAMETERS.ERROR,\n    QUERY_PARAMETERS.CIAS_ERROR,\n    QUERY_PARAMETERS.REGISTER,\n    QUERY_PARAMETERS.LINKOUT_CODE,\n  ]);\n\n  const savedState = await persistedState.get();\n\n  const flows = [\n    () => errorFlowCias(errorParam || ciasErrorParam, providerParam),\n    () => linkoutFlowCias(linkoutCodeParam),\n    () => loginFlowCias(flowParam, providerParam),\n    () => logoutFlowCias(flowParam, providerParam),\n    () => loggedInFlowCias(savedState),\n    () => privateFlowCias(savedState),\n\n    () => anonymousCase(),\n  ];\n\n  for (const flowCondition of flows) {\n    const flow = await flowCondition();\n\n    if (flow) {\n      await flow();\n      break;\n    }\n  }\n\n  if (linkoutCodeParam) {\n    return FLOWS.LINKOUT;\n  }\n\n  return registerParam ? FLOWS.REGISTER : flowParam;\n}\n\nfunction linkoutFlowCias(linkoutCodeParam: string | null) {\n  if (linkoutCodeParam) {\n    return () => runLinkoutFlowCias(linkoutCodeParam);\n  }\n}\n\nfunction loginFlowCias(flowParam: string | null, providerParam: string | null) {\n  if (flowParam === FLOWS.LOGIN && providerParam === PROVIDERS.CIAS) {\n    return runLoginFlowCias;\n  }\n}\n\nfunction logoutFlowCias(flowParam: string | null, providerParam: string | null) {\n  if (flowParam === FLOWS.LOGOUT && providerParam === PROVIDERS.CIAS) {\n    return runLogoutFlowCias;\n  }\n}\n\nfunction loggedInFlowCias(persistedState: AuthStateLegacy | null) {\n  if (persistedState?.jwe && persistedState?.identityProvider === PROVIDERS.CIAS) {\n    return async () => await runLoggedInFlowCias(persistedState as AuthStateLegacy<Cias>);\n  }\n}\n\nasync function privateFlowCias(persistedState: AuthStateLegacy | null) {\n  if (!persistedState?.jwe && (await isPrivatePage()) && !globalThis.location.pathname.includes('sales-mode')) {\n    return async () => {\n      await publishState({\n        claims: null,\n        identityProvider: null,\n        jwe: null,\n      });\n      return loginCias();\n    };\n  }\n}\n\nfunction errorFlowCias(errorParam: string | null, providerParam: string | null) {\n  if (errorParam && providerParam === PROVIDERS.CIAS) {\n    const error = getCiasErrorById(errorParam);\n\n    return async () => {\n      await publishState({\n        claims: null,\n        identityProvider: null,\n        jwe: null,\n      });\n\n      throw error;\n    };\n  }\n}\n\nfunction anonymousCase() {\n  log.info('Anonymous flow, publishing empty state');\n\n  return async () =>\n    await publishState({\n      claims: null,\n      identityProvider: null,\n      jwe: null,\n    });\n}\n","import { initTranslations } from '@b2x/std/i18n.mjs';\n\nimport { getPageEnv } from './seamless';\n\nexport async function getTranslation(key: string) {\n  const pageEnv = await getPageEnv();\n\n  const { t } = await initTranslations({\n    distributionHash: 'euw1-27b2c3e3fa18b785a3b3ivp',\n    country: pageEnv?.country as Uppercase<string>,\n    language: pageEnv?.language as Lowercase<string>,\n  });\n\n  return t(key) || key;\n}\n","import { logger } from '@/utils/logger';\nimport { getTranslation } from '@/utils/translation';\n\nimport { IamError, NotificationType, UnknownError } from './error';\n\nconst log = logger.createLogger('PUBLISH_ERROR');\n\nexport async function publishError(error: unknown) {\n  log.error('Error occurred', error);\n  let notification: IamError | null = null;\n\n  if (error instanceof IamError) {\n    if (error.shouldNotify) {\n      notification = error;\n    }\n  } else {\n    notification = new UnknownError();\n  }\n\n  if (notification) {\n    try {\n      notification.message = await getTranslation(notification.translationKey);\n    } catch (error) {\n      log.error('Error occurred while translating notification', error);\n    }\n\n    // @ts-ignore\n    const { renderNotification } = await import(/* @vite-ignore */ '@oneweb/notification');\n    const notificationConfig: any = {\n      message: notification.message,\n      theme: 'light',\n      variant: notification.type.toLowerCase(),\n    };\n\n    if (notification.type !== NotificationType.ERROR) {\n      notificationConfig.lifetime = 20_000;\n    }\n\n    renderNotification(notificationConfig);\n  }\n}\n","import { type Profile, subscribe } from '@b2x/profile-library';\nimport { createHttpClient } from '@b2x/std/core/http.mjs';\nimport { storage } from '@b2x/std/core/storage.mjs';\nimport { tryCatch } from '@b2x/std/helpers/try-catch.mjs';\n\nimport { authStore } from '@/common/store';\nimport type { AuthState } from '@/common/types';\n\nimport { FLOWS, type Flows } from './constants';\nimport { logger } from './logger';\nimport { getPageEnv } from './seamless';\n\nconst log = logger.createLogger('trackUserData');\nlet unsubscribeFromActiveProfile: (() => void) | null = null;\n\nexport async function initializeRoleTracking(flow: Flows | null) {\n  unsubscribeFromActiveProfile?.();\n  unsubscribeFromActiveProfile = subscribe(({ activeProfile }) => {\n    log.info('Got active profile from PL', 'flow:', flow, activeProfile);\n\n    if (!activeProfile?.id) {\n      log.info('No active profile found, skipping role tracking');\n      return;\n    }\n\n    trackRole(activeProfile, flow);\n  });\n}\n\nexport async function trackRole(activeProfile: Profile, flow: Flows | null) {\n  let role = 'not_set';\n  let businessContext = 'private';\n  const sessionKeyProfile = 'b2x.analytics.profileId';\n  const sessionKeyUser = 'analytics_user_md';\n\n  const loginStatus = authStore.state.isLoggedIn ? 'logged_in' : 'logged_out';\n\n  const cachedProfileId = storage.session.get(sessionKeyProfile);\n  const cachedAnalyticsUser = storage.session.get(sessionKeyUser);\n\n  // anonymous B2B and loggedIn default B2B profile have the same id\n  if (`${activeProfile.id}__${loginStatus}` === cachedProfileId) {\n    log.info(\"Profile didn't change, no need to track it\");\n    return;\n  }\n\n  if (activeProfile.businessType === 'B2B') {\n    businessContext = 'business';\n\n    if (activeProfile.id !== 'DEFAULT_B2B') {\n      const [roleFromBff, err] = await tryCatch(() =>\n        getCompanyRole(authStore.state.jwe as string, activeProfile.meId as string),\n      );\n\n      if (err) {\n        log.error('Failed to get company role', err);\n      }\n\n      role = roleFromBff || role;\n    }\n  }\n\n  const analyticsData = {\n    loginState: loginStatus,\n    context: businessContext,\n    role: role,\n    loginStateDetail: resolveLoginStateDetail(authStore.state, cachedAnalyticsUser, flow),\n  };\n\n  storage.session.set(sessionKeyUser, analyticsData);\n  storage.session.set(sessionKeyProfile, `${activeProfile.id}__${loginStatus}`);\n\n  globalThis.dispatchEvent(new CustomEvent('analytics_user_md_change'));\n\n  log.info('User data tracked successfully', analyticsData);\n}\n\nasync function getCompanyRole(jwe: string, meId: string) {\n  const { stage, country } = await getPageEnv();\n\n  const stagePrefix = stage === 'PROD' ? '' : 'int.';\n  const iamBffUrl = `https://${stagePrefix}api.oneweb.mercedes-benz.com/iam/bff/`;\n\n  const http = createHttpClient({ prefixUrl: iamBffUrl });\n  const response = await http\n    .post('company-role', {\n      headers: {\n        'Content-Type': 'application/json',\n        Authorization: `Bearer ${jwe}`,\n        'x-market': country,\n      },\n      body: JSON.stringify({ companyId: meId }),\n    })\n    .json<{ companyRole: string }>()\n    .catch(() => ({\n      companyRole: 'not_set',\n    }));\n\n  return response.companyRole;\n}\n\nconst LoginDetail = {\n  loggedIn: 'logged_in',\n  loggedOut: 'logged_out',\n  registered: 'account_registered',\n  guest: 'guest',\n} as const;\n\ntype LoginStateDetail = (typeof LoginDetail)[keyof typeof LoginDetail];\n\nexport function resolveLoginStateDetail(\n  authState: AuthState,\n  cachedAnalyticsUser: Record<string, any> | null,\n  flow: Flows | null,\n): LoginStateDetail {\n  const persistedLoginDetail = cachedAnalyticsUser?.loginStateDetail;\n\n  let loginDetail: LoginStateDetail = LoginDetail.loggedOut;\n\n  if (authState.jwe) {\n    if (flow === FLOWS.REGISTER || persistedLoginDetail === LoginDetail.registered) {\n      loginDetail = LoginDetail.registered;\n    } else {\n      loginDetail = LoginDetail.loggedIn;\n    }\n  } else if (!persistedLoginDetail || persistedLoginDetail === LoginDetail.guest) {\n    loginDetail = LoginDetail.guest;\n  }\n\n  return loginDetail;\n}\n","import { formatBuildTime } from '@b2x/shared/metadata.mjs';\n\nimport { loginCias } from '@/cias/cias-login';\nimport { runFlow } from '@/common/flows';\nimport { persistedState } from '@/common/persisted-state';\nimport { publishError } from '@/common/publish-error';\nimport { publishState } from '@/common/publish-state';\nimport { authStore } from '@/common/store';\nimport type { AuthStateLegacy } from '@/common/types';\nimport { initializeRoleTracking } from '@/utils/analytics';\nimport { authChannel } from '@/utils/broadcast';\nimport { logger } from '@/utils/logger';\n\nconst log = logger.createLogger('AUTHENTICATION_BOOTSTRAP');\nlet refreshPromise: Promise<void> | null = null;\nlet pageRestoreHandlerRegistered = false;\nlet visibilityChangeHandler: (() => void) | null = null;\n\nexport function bootstrap() {\n  log.info(`Bootstrapping authentication ${VERSION} - ${formatBuildTime(BUILD_TIME)}`);\n\n  return runFlow()\n    .then((flow) => {\n      initializeRoleTracking(flow);\n    })\n    .catch(publishError)\n    .finally(() => {\n      handleLoginHash();\n      handleVisibilityChange();\n      handleEventFromOtherTabs();\n      handlePageRestore();\n    });\n}\n\nexport function refreshAuthentication(): Promise<void> {\n  if (refreshPromise) {\n    log.info('Reusing in-flight authentication refresh');\n    return refreshPromise;\n  }\n\n  log.info('Starting authentication refresh');\n  persistedState.clearCache();\n  refreshPromise = runFlow()\n    .then((flow) => initializeRoleTracking(flow))\n    .then(() => {\n      log.info('Authentication refresh completed');\n    })\n    .catch(async (error: unknown) => {\n      await publishError(error);\n      throw error;\n    })\n    .finally(() => {\n      refreshPromise = null;\n      handleVisibilityChange();\n    });\n\n  return refreshPromise;\n}\n\nfunction handlePageRestore() {\n  if (pageRestoreHandlerRegistered) {\n    return;\n  }\n\n  pageRestoreHandlerRegistered = true;\n  globalThis.addEventListener('pageshow', (event) => {\n    if (!event.persisted) {\n      return;\n    }\n\n    log.info('Refreshing authentication after BFCache restore');\n    refreshAuthentication().catch((error: unknown) => {\n      log.error('Failed to refresh authentication after BFCache restore', error);\n    });\n  });\n}\n\nasync function handleVisibilityChange() {\n  log.info('Updating visibility-change listener', { refreshEnabled: Boolean(authStore.state.jwe) });\n\n  if (visibilityChangeHandler) {\n    document.removeEventListener('visibilitychange', visibilityChangeHandler);\n    visibilityChangeHandler = null;\n  }\n\n  if (authStore.state.jwe) {\n    visibilityChangeHandler = onVisibilityChange;\n    document.addEventListener('visibilitychange', onVisibilityChange);\n  }\n\n  function onVisibilityChange() {\n    log.info(`Visibility changed to ${document.visibilityState}`);\n\n    if (document.visibilityState === 'visible') {\n      log.info('Refreshing authentication after visibility change');\n      document.removeEventListener('visibilitychange', onVisibilityChange);\n      visibilityChangeHandler = null;\n\n      refreshAuthentication().catch((error: unknown) => {\n        log.error('Failed to refresh authentication after visibility change', error);\n      });\n    }\n  }\n}\n\nasync function handleLoginHash() {\n  log.info('Handle login hash');\n\n  // check if URL already contains #login\n  triggerLogin();\n\n  // listen for hash changes on the same page\n  globalThis.addEventListener('hashchange', triggerLogin);\n\n  function triggerLogin() {\n    if (location.hash === '#login') {\n      log.info('Login hash detected, users login state is:', authStore.state.isLoggedIn);\n      history.replaceState(null, '', globalThis.location.pathname + globalThis.location.search);\n\n      if (!authStore.state.isLoggedIn) {\n        log.info('Triggering login since user is not logged in');\n        globalThis.removeEventListener('hashchange', triggerLogin);\n        loginCias();\n      }\n    }\n  }\n}\n\nfunction handleEventFromOtherTabs() {\n  log.info('Handle event from other tabs');\n\n  authChannel.subscribe('logout', async () => {\n    log.info('Received logout event from other tab');\n    await publishState(\n      {\n        jwe: null,\n        claims: null,\n        identityProvider: null,\n      },\n      { isLoginOrLogoutEvent: true },\n    );\n  });\n\n  authChannel.subscribe('login', async ({ payload }) => {\n    log.info('Received login event from other tab');\n    await publishState(payload as AuthStateLegacy, { isLoginOrLogoutEvent: true });\n  });\n}\n"],"names":["LOGGER_NAMESPACE","initializeLogger","consola","BrowserReporter","formatBuildTime","isDebuggerGrouped","isDebuggerEnable","isLocalhost","group","logger","encrypt","content","password","salt","key","getKey","iv","contentBytes","stringToBytes","cipher","bytesToBase64","decrypt","encryptedData","base64ToBytes","bytesToString","passwordBytes","initialKey","bytes","str","arr","byte","base64","character","PersistedState","encryptedState","storage","decryptedData","authState","state","persistedState","authStore","defineStore","log","publishState","authStateLegacy","isLoginOrLogoutEvent","authChannel","createBroadcastChannel","FLOWS","QUERY_PARAMETERS","PROVIDERS","TENANTS","COMPANY_PROFILE","CIAM_REDIRECT_CHAR_LIMIT","navigateTo","url","getPageEnv","env","getEnvironmentData","isPrivatePage","compData","comp","CIAS_HOST_TEST","CIAS_HOST_INT","CIAS_HOST_PROD","ciasEnv","getCiasHost","stage","IamError","NotificationType","UnknownError","CiasMissingToken","CiasFailureFetchJwt","CiasFailureFetchClaims","CiasValidationError","CiasFailureRefreshJwt","errors","getCiasErrorById","id","ErrorClass","error","ciasApi","http","createHttpClient","token","jwe","logoutCias","targetUrl","fullTargetUrl","allowedParams","encodedTargetUrlLength","buildFallbackUrl","country","language","params","logoutUrl","logoutFlowCias","fallbackUrl","loginCias","redirectUrl","mfa","linkoutCode","fullRedirectUrl","initParams","loginUrl","loginFlowCias","api","getQueryParameter","removeQueryParametersForSeamlessRouter","claims","linkoutFlowCias","loggedInFlowCias","newState","newJwe","newClaims","runFlow","flowParam","registerParam","providerParam","errorParam","ciasErrorParam","linkoutCodeParam","savedState","flows","errorFlowCias","privateFlowCias","anonymousCase","flowCondition","flow","runLinkoutFlowCias","runLoginFlowCias","runLogoutFlowCias","runLoggedInFlowCias","getTranslation","pageEnv","t","initTranslations","publishError","notification","renderNotification","notificationConfig","unsubscribeFromActiveProfile","initializeRoleTracking","subscribe","activeProfile","trackRole","role","businessContext","sessionKeyProfile","sessionKeyUser","loginStatus","cachedProfileId","cachedAnalyticsUser","roleFromBff","err","tryCatch","getCompanyRole","analyticsData","resolveLoginStateDetail","meId","LoginDetail","persistedLoginDetail","loginDetail","refreshPromise","pageRestoreHandlerRegistered","visibilityChangeHandler","bootstrap","handleLoginHash","handleVisibilityChange","handleEventFromOtherTabs","handlePageRestore","refreshAuthentication","event","onVisibilityChange","triggerLogin","payload"],"mappings":"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"}