{"version":3,"file":"IDPConsent.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/IDPConsent.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport { NoCurrentSessionError } from '@stytch/core/public';\nimport React, { ReactNode, useEffect, useRef, useState } from 'react';\n\nimport { AuthTokenParams } from '../../../types';\nimport { OAuthAuthorizeParams, OAuthLogoutParams, parseIDPParams } from '../../../utils/idpHelpers';\nimport { ErrorDisplay } from '../../components/molecules/ErrorScreen';\nimport { LoadingScreen } from '../../components/molecules/Loading';\nimport MainContainer from '../../components/molecules/MainContainer';\nimport { IDPConsent, useIDPState } from '../../components/organisms/IDPConsent';\nimport { useTrustedAuthTokenParams } from '../../components/organisms/IDPContextProvider';\nimport { IDPLogout, useLogoutState } from '../../components/organisms/IDPLogout';\nimport { usePresentation } from '../../components/PresentationConfig';\nimport { useErrorCallback, useEventCallback, useStytch } from '../GlobalContextProvider';\nimport { useStytchMember } from '../hooks/useStytchMember';\nimport { useBootstrap } from '../utils';\n\nconst IDPConsentScreenImpl = ({\n  initialError,\n  initialParams,\n}: {\n  initialError: string | null;\n  initialParams: OAuthAuthorizeParams;\n}) => {\n  const stytchClient = useStytch();\n  const onError = useErrorCallback();\n  const onEvent = useEventCallback();\n  const { oauthAuthorizeStart, oauthAuthorizeSubmit } = stytchClient.idp;\n\n  // TODO: Consumer and B2B Bootstrap hooks should return same shape\n  const bootstrap = useBootstrap();\n\n  const idpConsentState = useIDPState({\n    initialError,\n    initialParams,\n    oauthAuthorizeStart,\n    oauthAuthorizeSubmit,\n    onError,\n    onEvent,\n  });\n\n  return <IDPConsent bootstrap={bootstrap} bootstrapNotLoaded={false} {...idpConsentState} />;\n};\n\nconst IDPLogoutScreenImpl = ({\n  initialError,\n  initialParams,\n  navigate,\n}: {\n  initialError: string | null;\n  initialParams: OAuthLogoutParams;\n  navigate?: (href: string) => void;\n}) => {\n  const stytchClient = useStytch();\n  const onError = useErrorCallback();\n  const { oauthLogoutStart } = stytchClient.idp;\n  const revokeSession = () => stytchClient.session.revoke({ forceClear: true });\n\n  const bootstrap = useBootstrap();\n  const idpLogoutState = useLogoutState({\n    initialError,\n    initialParams,\n    oauthLogoutStart,\n    revokeSession,\n    onError,\n    navigate,\n  });\n\n  return <IDPLogout {...idpLogoutState} bootstrap={bootstrap} bootstrapNotLoaded={false} />;\n};\n\nexport const IDPConsentScreen = ({\n  searchParams = window.location.search,\n  navigate,\n}: {\n  searchParams?: string;\n  navigate?: (href: string) => void;\n} = {}) => {\n  // Preserve the URL Params seen on first render - even if they change later\n  const [{ flow, error }] = useState(parseIDPParams(searchParams));\n  const { theme, displayWatermark } = usePresentation();\n\n  let content;\n  if (flow.type === 'Authorize') {\n    content = (\n      <EnsureMemberIsLoggedIn>\n        <IDPConsentScreenImpl initialError={error} initialParams={flow.params} />\n      </EnsureMemberIsLoggedIn>\n    );\n  } else if (flow.type === 'Logout') {\n    content = <IDPLogoutScreenImpl initialError={error} initialParams={flow.params} navigate={navigate} />;\n  }\n\n  return (\n    <MainContainer theme={theme} displayWatermark={displayWatermark}>\n      {content}\n    </MainContainer>\n  );\n};\n\nconst EnsureMemberIsLoggedIn = ({ children }: { children: ReactNode }) => {\n  const { t } = useLingui();\n  const member = useStytchMember();\n  const onError = useErrorCallback();\n  const onErrorRef = useRef(onError);\n  useEffect(() => {\n    onErrorRef.current = onError;\n  }, [onError]);\n\n  // if a trusted auth token is provided, attest it before rendering the consent screen\n  const stytchClient = useStytch();\n  const authParams = useTrustedAuthTokenParams();\n  const [attesting, setAttesting] = useState(false);\n  const [attested, setAttested] = useState(false);\n\n  useEffect(() => {\n    if (attesting || attested) return;\n\n    const attestTrustedToken = async (authParams: AuthTokenParams | undefined): Promise<void> => {\n      if (authParams?.trustedAuthToken && authParams?.tokenProfileID) {\n        setAttesting(true);\n        const token = authParams.trustedAuthToken;\n        const profile_id = authParams.tokenProfileID;\n\n        // revoke the current session before calling attest\n        // store the member to refer to its organization_id later\n        const member = stytchClient.self.getSync();\n        if (member) {\n          await stytchClient.session.revoke();\n        }\n        try {\n          await stytchClient.session.attest({\n            token,\n            profile_id,\n            organization_id: member?.organization_id,\n            session_duration_minutes: 60,\n          });\n        } catch (error) {\n          onErrorRef.current(error as Error);\n        } finally {\n          setAttesting(false);\n          setAttested(true);\n        }\n      }\n      // set this either way to short-circuit the useEffect below\n      setAttested(true);\n    };\n    attestTrustedToken(authParams);\n  }, [authParams, attesting, attested, stytchClient]);\n\n  useEffect(() => {\n    if (member) return;\n    onErrorRef.current(new NoCurrentSessionError());\n  }, [member]);\n\n  if (attesting) {\n    return <LoadingScreen />;\n  } else if (member) {\n    return children;\n  } else {\n    return (\n      <ErrorDisplay\n        text={t({\n          id: 'idpConsent.noActiveSession',\n          message: 'No active session detected. Please log in to continue.',\n        })}\n      />\n    );\n  }\n};\n"],"names":["IDPConsentScreenImpl","initialError","initialParams","stytchClient","useStytch","onError","useErrorCallback","onEvent","useEventCallback","oauthAuthorizeStart","oauthAuthorizeSubmit","idp","bootstrap","useBootstrap","idpConsentState","useIDPState","React","IDPConsent","bootstrapNotLoaded","IDPLogoutScreenImpl","navigate","oauthLogoutStart","revokeSession","session","revoke","forceClear","idpLogoutState","useLogoutState","IDPLogout","IDPConsentScreen","searchParams","window","location","search","flow","error","useState","parseIDPParams","theme","displayWatermark","usePresentation","content","type","EnsureMemberIsLoggedIn","params","MainContainer","children","useLingui","member","useStytchMember","onErrorRef","useRef","useEffect","current","authParams","useTrustedAuthTokenParams","attesting","setAttesting","attested","setAttested","attestTrustedToken","trustedAuthToken","tokenProfileID","token","profile_id","self","getSync","attest","organization_id","session_duration_minutes","NoCurrentSessionError","LoadingScreen","ErrorDisplay","text"],"mappings":"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"}