{"version":3,"file":"Discovery.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/Discovery.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport {\n  B2BDiscoveryIntermediateSessionsExchangeResponse,\n  B2BDiscoveryOrganizationsCreateResponse,\n  DirectLoginForSingleMembershipConfig,\n  DiscoveredOrganization,\n  StytchAPIError,\n  StytchProjectConfigurationInput,\n} from '@stytch/core/public';\nimport React, { useCallback, useEffect } from 'react';\n\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport Typography from '../../components/atoms/Typography';\nimport ButtonColumn from '../../components/molecules/ButtonColumn';\nimport { LoadingScreen, LoggingInScreen } from '../../components/molecules/Loading';\nimport OrganizationRow from '../components/OrganizationRow';\nimport { useConfig, useGlobalReducer, useStytch } from '../GlobalContextProvider';\nimport { AppScreens } from '../types/AppScreens';\nimport { ErrorType } from '../types/ErrorType';\nimport { onAuthenticateSuccess, StytchMutationKey, useBootstrap, useMutate } from '../utils';\n\nconst isJoinViaJitType = (type: DiscoveredOrganization['membership']['type']) =>\n  type === 'eligible_to_join_by_email_domain' || type === 'eligible_to_join_by_oauth_tenant';\n\nconst DiscoverNoOrganizations = () => {\n  const [state, dispatch] = useGlobalReducer();\n  const stytchClient = useStytch();\n  const config = useConfig();\n  const { createOrganizationEnabled } = useBootstrap();\n  const { t } = useLingui();\n  const goBack = () => dispatch({ type: 'transition', screen: AppScreens.Main });\n\n  const { trigger: stytchCreateOrganization, isMutating: isCreateLoading } = useMutate<\n    B2BDiscoveryOrganizationsCreateResponse<StytchProjectConfigurationInput>,\n    StytchAPIError,\n    StytchMutationKey\n  >(\n    'stytch.discovery.organizations.create',\n    () =>\n      stytchClient.discovery.organizations.create({\n        session_duration_minutes: config.sessionOptions.sessionDurationMinutes,\n      }),\n    {\n      onSuccess: (data: B2BDiscoveryOrganizationsCreateResponse<StytchProjectConfigurationInput>) => {\n        onAuthenticateSuccess(data, dispatch, config);\n      },\n      onError: (error) => {\n        dispatch({\n          type: 'set_error_message_and_transition',\n          errorType:\n            error.error_type === 'action_not_allowed_email_domain_is_claimed'\n              ? ErrorType.OrganizationDiscoveryClaimedDomain\n              : ErrorType.Default,\n          canGoBack: true,\n        });\n      },\n    },\n  );\n\n  const shouldAutomaticallyCreateOrganization =\n    createOrganizationEnabled && config.directCreateOrganizationForNoMembership;\n\n  useEffect(() => {\n    if (shouldAutomaticallyCreateOrganization) {\n      stytchCreateOrganization();\n    }\n  }, [shouldAutomaticallyCreateOrganization, stytchCreateOrganization]);\n\n  if (shouldAutomaticallyCreateOrganization || isCreateLoading) {\n    return <LoadingScreen />;\n  }\n\n  const email = state.formState.discoveryState.email;\n\n  if (createOrganizationEnabled && !config.disableCreateOrganization) {\n    return (\n      <Column gap={6}>\n        <Typography variant=\"header\">\n          {t({ id: 'organizationDiscovery.noOrgs.create.title', message: 'Create an organization to get started' })}\n        </Typography>\n\n        <Typography variant=\"body\">\n          {t({\n            id: 'organizationDiscovery.noOrgs.create.content',\n            message: `${email} does not have an account. Think this is a mistake? Try a different email address, or contact your admin.`,\n          })}\n        </Typography>\n\n        <ButtonColumn>\n          <Button variant=\"primary\" onClick={() => stytchCreateOrganization()}>\n            {t({ id: 'button.createAnOrganization', message: 'Create an organization' })}\n          </Button>\n          <Button variant=\"ghost\" onClick={goBack}>\n            {t({ id: 'button.goBack', message: 'Go back' })}\n          </Button>\n        </ButtonColumn>\n      </Column>\n    );\n  }\n\n  return (\n    <Column gap={6}>\n      <Typography variant=\"header\">\n        {t({\n          id: 'organizationDiscovery.noOrgs.title',\n          message: `${email} does not belong to any organizations.`,\n        })}\n      </Typography>\n      <Typography variant=\"body\">\n        {t({\n          id: 'organizationDiscovery.noOrgs.content',\n          message: 'Make sure your email address is correct. Otherwise, you might need to be invited by your admin.',\n        })}\n      </Typography>\n      <Button variant=\"outline\" onClick={goBack}>\n        {t({ id: 'button.tryDifferentEmailAddress', message: 'Try a different email address' })}\n      </Button>\n    </Column>\n  );\n};\n\nconst shouldAllowDirectLoginToOrganization = (\n  organizations: DiscoveredOrganization[],\n  config?: DirectLoginForSingleMembershipConfig,\n): DiscoveredOrganization | null => {\n  // If direct login is not enabled, return false\n  if (!config?.status) {\n    return null;\n  }\n\n  // Count active memberships\n  const activeOrganizations = organizations.filter((org) => org.membership.type === 'active_member');\n\n  // Check for pending invites or JIT provisioning, depending on config\n  const hasBlockingConditions = organizations.some(\n    (org) =>\n      ((org.membership.type === 'pending_member' || org.membership.type === 'invited_member') &&\n        !config.ignoreInvites) ||\n      (isJoinViaJitType(org.membership.type) && !config.ignoreJitProvisioning),\n  );\n\n  // Allow direct login if there is exactly one active membership and no blocking conditions\n  return activeOrganizations.length === 1 && !hasBlockingConditions ? activeOrganizations[0] : null;\n};\n\nexport const Discovery = () => {\n  const [state, dispatch] = useGlobalReducer();\n  const stytchClient = useStytch();\n  const config = useConfig();\n  const { t } = useLingui();\n  const shouldDirectLoginConfigEnabled = !!config.directLoginForSingleMembership?.status;\n  const { createOrganizationEnabled } = useBootstrap();\n\n  useEffect(() => {\n    if (isExchangeInProgress) {\n      // If there is already an exchange in progress, don't do anything\n      return;\n    }\n\n    const directLoginOrganization = shouldAllowDirectLoginToOrganization(\n      state.formState.discoveryState.discoveredOrganizations,\n      config.directLoginForSingleMembership,\n    );\n\n    if (shouldDirectLoginConfigEnabled && directLoginOrganization !== null) {\n      handleDiscoveryOrganizationStart(directLoginOrganization);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps -- SDK-1354\n  }, [\n    shouldDirectLoginConfigEnabled,\n    state.formState.discoveryState.discoveredOrganizations,\n    config.directLoginForSingleMembership,\n  ]);\n\n  const handleDiscoveryOrganizationStart = (discoveredOrganization: DiscoveredOrganization) => {\n    const organization = discoveredOrganization.organization;\n\n    if (discoveredOrganization.primary_required) {\n      const allowedAuthMethods = discoveredOrganization.primary_required.allowed_auth_methods;\n      if (\n        allowedAuthMethods &&\n        allowedAuthMethods.length === 1 &&\n        allowedAuthMethods[0] === 'sso' &&\n        organization.sso_default_connection_id\n      ) {\n        startSso(organization.sso_default_connection_id);\n      } else {\n        dispatch({\n          type: 'select_discovered_organization',\n          discoveredOrganization,\n        });\n      }\n    } else {\n      stytchDiscoveryExchange({ organizationId: organization.organization_id });\n    }\n  };\n\n  const startSso = useCallback(\n    (connectionId: string) => {\n      stytchClient.sso.start({\n        connection_id: connectionId,\n        login_redirect_url: config.ssoOptions?.loginRedirectURL,\n        signup_redirect_url: config.ssoOptions?.signupRedirectURL,\n      });\n    },\n    [stytchClient, config.ssoOptions],\n  );\n\n  const { trigger: stytchDiscoveryExchange, isMutating: isExchangeInProgress } = useMutate<\n    B2BDiscoveryIntermediateSessionsExchangeResponse<StytchProjectConfigurationInput>,\n    StytchAPIError,\n    StytchMutationKey,\n    { organizationId: string }\n  >(\n    `stytch.discovery.intermediateSessions.exchange`,\n    (_: string, { arg: { organizationId } }: { arg: { organizationId: string } }) =>\n      stytchClient.discovery.intermediateSessions.exchange({\n        organization_id: organizationId,\n        session_duration_minutes: config.sessionOptions.sessionDurationMinutes,\n      }),\n    {\n      onSuccess: (data: B2BDiscoveryIntermediateSessionsExchangeResponse<StytchProjectConfigurationInput>) => {\n        onAuthenticateSuccess(data, dispatch, config);\n      },\n      onError: (error) => {\n        dispatch({\n          type: 'set_error_message_and_transition',\n          errorType:\n            error.error_type === 'action_not_allowed_email_domain_is_claimed'\n              ? ErrorType.OrganizationDiscoveryClaimedDomain\n              : ErrorType.Default,\n          canGoBack: true,\n        });\n      },\n    },\n  );\n\n  const { trigger: stytchCreateOrganization, isMutating: isCreateLoading } = useMutate<\n    B2BDiscoveryOrganizationsCreateResponse<StytchProjectConfigurationInput>,\n    StytchAPIError,\n    StytchMutationKey\n  >(\n    'stytch.discovery.organizations.create',\n    () =>\n      stytchClient.discovery.organizations.create({\n        session_duration_minutes: config.sessionOptions.sessionDurationMinutes,\n      }),\n    {\n      onSuccess: (data: B2BDiscoveryOrganizationsCreateResponse<StytchProjectConfigurationInput>) => {\n        onAuthenticateSuccess(data, dispatch, config);\n      },\n      onError: (error) => {\n        dispatch({\n          type: 'set_error_message_and_transition',\n          errorType:\n            error.error_type === 'action_not_allowed_email_domain_is_claimed'\n              ? ErrorType.OrganizationDiscoveryClaimedDomain\n              : ErrorType.Default,\n          canGoBack: true,\n        });\n      },\n    },\n  );\n\n  if (isExchangeInProgress) {\n    return <LoggingInScreen />;\n  }\n\n  if (isCreateLoading) {\n    return <LoadingScreen />;\n  }\n\n  if (state.formState.discoveryState.discoveredOrganizations.length === 0) {\n    return <DiscoverNoOrganizations />;\n  }\n\n  const organizationButtons = state.formState.discoveryState.discoveredOrganizations.map((discoveredOrganization) => {\n    const { organization, membership } = discoveredOrganization;\n\n    let action: string | undefined;\n    if (isJoinViaJitType(membership.type) || membership.type === 'pending_member')\n      action = t({ id: 'organizationDiscovery.join', message: 'Join' });\n    else if (membership.type === 'invited_member')\n      action = t({ id: 'organizationDiscovery.acceptInvite', message: 'Accept Invite' });\n\n    return (\n      <OrganizationRow\n        key={organization.organization_id}\n        organization={organization}\n        action={action}\n        onClick={() => handleDiscoveryOrganizationStart(discoveredOrganization)}\n      ></OrganizationRow>\n    );\n  });\n\n  const createOrganizationButton =\n    createOrganizationEnabled && !config.disableCreateOrganization ? (\n      <Button variant=\"outline\" onClick={() => stytchCreateOrganization()}>\n        {t({ id: 'button.createAnOrganization', message: 'Create an organization' })}\n      </Button>\n    ) : null;\n\n  const goBackButton = (\n    <Button variant=\"ghost\" onClick={() => dispatch({ type: 'transition', screen: AppScreens.Main })}>\n      {t({ id: 'button.goBack', message: 'Go back' })}\n    </Button>\n  );\n\n  return (\n    <Column gap={6}>\n      <Typography variant=\"header\">\n        {t({ id: 'organizationDiscovery.title', message: 'Select an organization to continue' })}\n      </Typography>\n\n      {createOrganizationButton ? (\n        // Display with divider if the Create Organization Button can be shown,\n        // otherwise just show everything together\n        <ButtonColumn\n          top={organizationButtons}\n          bottom={\n            <>\n              {createOrganizationButton}\n              {goBackButton}\n            </>\n          }\n        />\n      ) : (\n        <Column gap={4}>\n          <ButtonColumn>{organizationButtons}</ButtonColumn>\n          {goBackButton}\n        </Column>\n      )}\n    </Column>\n  );\n};\n"],"names":["isJoinViaJitType","type","DiscoverNoOrganizations","state","dispatch","useGlobalReducer","stytchClient","useStytch","config","useConfig","createOrganizationEnabled","useBootstrap","useLingui","goBack","screen","AppScreens","Main","trigger","stytchCreateOrganization","isMutating","isCreateLoading","useMutate","discovery","organizations","create","session_duration_minutes","sessionOptions","sessionDurationMinutes","onSuccess","data","onAuthenticateSuccess","onError","error","errorType","error_type","ErrorType","OrganizationDiscoveryClaimedDomain","Default","canGoBack","shouldAutomaticallyCreateOrganization","directCreateOrganizationForNoMembership","useEffect","React","LoadingScreen","email","formState","discoveryState","disableCreateOrganization","Column","gap","Typography","variant","ButtonColumn","Button","onClick","shouldAllowDirectLoginToOrganization","status","activeOrganizations","filter","org","membership","hasBlockingConditions","some","ignoreInvites","ignoreJitProvisioning","length","Discovery","shouldDirectLoginConfigEnabled","directLoginForSingleMembership","isExchangeInProgress","directLoginOrganization","discoveredOrganizations","handleDiscoveryOrganizationStart","discoveredOrganization","organization","primary_required","allowedAuthMethods","allowed_auth_methods","sso_default_connection_id","startSso","stytchDiscoveryExchange","organizationId","organization_id","useCallback","connectionId","sso","start","connection_id","login_redirect_url","ssoOptions","loginRedirectURL","signup_redirect_url","signupRedirectURL","_","arg","intermediateSessions","exchange","LoggingInScreen","organizationButtons","map","action","OrganizationRow","key","createOrganizationButton","goBackButton","top","bottom"],"mappings":"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"}