{"version":3,"file":"signInAuthProvider.mjs","names":["PublicClientApplication","EventType","ConfigService","signInAuthProviderInstance","loginRequestInstance","tokenRequestInstance","apiAccessScopeValue","initSignInAuthProvider","PUBLIC_URL","URL","import","meta","env","BASE_URL","window","location","origin","href","replace","REDIRECT_URL_BASE","config","USE_AAD_REDIRECT","UNITY_URL","MSAL_TENANT","Error","MSAL_CLIENT_ID","tenant","currentPath","pathname","searchParams","URLSearchParams","search","domainHint","get","history","replaceState","idTokenHint","signInPolicy","SIGN_IN_POLICY","applicationID","reactRedirectUri","tenantSubdomain","split","b2cInstance","signInAuthority","apiAccessScope","MSAL_API_ACCESS_SCOPE","ua","navigator","userAgent","msie","indexOf","msie11","msedge","firefox","isIE","isEdge","isFirefox","signInConfig","auth","authority","knownAuthorities","clientId","redirectUri","postLogoutRedirectUri","navigateToLoginRequestUrl","cache","cacheLocation","storeAuthStateInCookie","system","allowRedirectInIframe","authProvider","initialize","getActiveAccount","getAllAccounts","length","setActiveAccount","activeAccount","idp","idTokenClaims","includes","addEventCallback","event","eventType","LOGIN_SUCCESS","payload","account","tokenRequest","scopes","loginRequest","state","extraQueryParameters","id_token_hint","flow","domain_hint","getSignInAuthProvider","getLoginRequest","getTokenRequest","getApiAccessScope"],"sources":["../../../src/utilities/auth/signInAuthProvider.js"],"sourcesContent":["import { PublicClientApplication, EventType } from '@azure/msal-browser';\nimport { ConfigService } from '../../configService';\n\n/** @type {import('@azure/msal-browser').PublicClientApplication | null} */\nlet signInAuthProviderInstance = null;\n/** @type {import('@azure/msal-browser').RedirectRequest | null} */\nlet loginRequestInstance = null;\n/** @type {import('@azure/msal-browser').SilentRequest | null} */\nlet tokenRequestInstance = null;\n/** @type {string | null} */\nlet apiAccessScopeValue = null;\n\n/**\n * Initializes the MSAL auth provider and request templates.\n * @returns {Promise<void>}\n */\nexport async function initSignInAuthProvider() {\n  if (signInAuthProviderInstance) {\n    return; // Already initialized\n  }\n\n  const PUBLIC_URL = new URL(\n    import.meta.env.BASE_URL || '/',\n    window.location.origin\n  ).href.replace(/\\/$/, '');\n\n  const REDIRECT_URL_BASE = ConfigService.config.USE_AAD_REDIRECT\n    ? ConfigService.config.UNITY_URL\n    : PUBLIC_URL;\n\n  if (!ConfigService.config.MSAL_TENANT)\n    throw new Error('MSAL_TENANT not configured');\n  if (!ConfigService.config.MSAL_CLIENT_ID)\n    throw new Error('MSAL_CLIENT_ID not configured');\n\n  const tenant = ConfigService.config.MSAL_TENANT;\n\n  // Determine idp_target and id_token_hint for Unified Policy\n  const currentPath = window.location.pathname;\n  const searchParams = new URLSearchParams(window.location.search);\n\n  let domainHint = searchParams.get('domain_hint');\n\n  if (currentPath === '/sso/entra') {\n    domainHint = 'entra';\n  }\n\n  if (currentPath === '/sso/entra') {\n    domainHint = 'entra';\n    window.history.replaceState(null, '', '/');\n  }\n\n  const idTokenHint = searchParams.get('id_token_hint');\n\n  const signInPolicy = ConfigService.config.SIGN_IN_POLICY;\n\n  const applicationID = ConfigService.config.MSAL_CLIENT_ID;\n  const reactRedirectUri = `${REDIRECT_URL_BASE}/${ConfigService.config.USE_AAD_REDIRECT ? 'aad_redirect' : 'aad_callback'\n    }`;\n  const tenantSubdomain = tenant.split('.')[0];\n  const b2cInstance = `https://${tenantSubdomain}.b2clogin.com/`;\n  const signInAuthority = `${b2cInstance}${tenant}/${signInPolicy}`;\n  const apiAccessScope = `https://${tenant}/${ConfigService.config.MSAL_API_ACCESS_SCOPE}`;\n\n  const ua = window.navigator.userAgent;\n  const msie = ua.indexOf('MSIE ');\n  const msie11 = ua.indexOf('Trident/');\n  const msedge = ua.indexOf('Edge/');\n  const firefox = ua.indexOf('Firefox');\n  const isIE = msie > 0 || msie11 > 0;\n  const isEdge = msedge > 0;\n  const isFirefox = firefox > 0; // Only needed if you need to support the redirect flow in Firefox incognito\n\n  // Msal Configurations\n  const signInConfig = {\n    auth: {\n      authority: signInAuthority,\n      knownAuthorities: [`${tenantSubdomain}.b2clogin.com`],\n      clientId: applicationID,\n      redirectUri: reactRedirectUri,\n      postLogoutRedirectUri: PUBLIC_URL + '/',\n      navigateToLoginRequestUrl: false,\n    },\n    cache: {\n      cacheLocation: 'sessionStorage',\n      storeAuthStateInCookie: isIE || isEdge || isFirefox,\n    },\n    system: {\n      allowRedirectInIframe: true,\n    },\n  };\n\n  // Build everything in locals so the module-scope state stays consistent —\n  // observers either see the fully-initialized provider + request templates,\n  // or they wait for init. Assigning piecemeal across awaits caused callers\n  // (e.g. acquireAccessToken → getTokenRequest) to grab a half-initialized\n  // state and throw \"tokenRequest is not initialized\" intermittently.\n  const authProvider = new PublicClientApplication(signInConfig);\n\n  await authProvider.initialize();\n\n  if (\n    !authProvider.getActiveAccount() &&\n    authProvider.getAllAccounts().length > 0\n  ) {\n    authProvider.setActiveAccount(authProvider.getAllAccounts()[0]);\n  }\n\n  // Check if the active account is an Entra account to set the hint\n  const activeAccount = authProvider.getActiveAccount();\n  if (activeAccount && !domainHint) {\n    const idp = activeAccount.idTokenClaims?.idp;\n    if (idp && idp.includes('login.microsoftonline.com')) {\n      domainHint = 'entra';\n    }\n  }\n\n  authProvider.addEventCallback((event) => {\n    if (event.eventType === EventType.LOGIN_SUCCESS && event.payload.account) {\n      authProvider.setActiveAccount(event.payload.account);\n    }\n  });\n\n  const tokenRequest = { scopes: [apiAccessScope] };\n  const loginRequest = {\n    scopes: [apiAccessScope, 'openid', 'offline_access'],\n    state: `${PUBLIC_URL}/aad_callback`,\n    extraQueryParameters: {\n      ...(idTokenHint && { id_token_hint: idTokenHint, flow: 'redeem' }),\n      ...(domainHint && !idTokenHint && { domain_hint: 'entra' }),\n    },\n  };\n\n  // Commit to module scope last — atomically from observers' POV.\n  apiAccessScopeValue = apiAccessScope;\n  tokenRequestInstance = tokenRequest;\n  loginRequestInstance = loginRequest;\n  signInAuthProviderInstance = authProvider;\n}\n\nexport const getSignInAuthProvider = () => {\n  if (!signInAuthProviderInstance) {\n    throw new Error(\n      'signInAuthProvider is not initialized. Call initSignInAuthProvider first.'\n    );\n  }\n  return signInAuthProviderInstance;\n};\n\n/**\n * @returns {import('@azure/msal-browser').RedirectRequest}\n */\nexport const getLoginRequest = () => {\n  if (!loginRequestInstance) {\n    throw new Error(\n      'loginRequest is not initialized. Call initSignInAuthProvider first.'\n    );\n  }\n  return loginRequestInstance;\n};\n\n/**\n * @returns {import('@azure/msal-browser').SilentRequest}\n */\nexport const getTokenRequest = () => {\n  if (!tokenRequestInstance) {\n    throw new Error(\n      'tokenRequest is not initialized. Call initSignInAuthProvider first.'\n    );\n  }\n  return tokenRequestInstance;\n};\n\nexport const getApiAccessScope = () => {\n  if (!apiAccessScopeValue) {\n    throw new Error(\n      'apiAccessScope is not initialized. Call initSignInAuthProvider first.'\n    );\n  }\n  return apiAccessScopeValue;\n};\n"],"mappings":"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"}