{"version":3,"file":"OrganizationUpdatesSection.mjs","sources":["../../../../../../../../web/src/adminPortal/sso/OrganizationUpdatesSection.tsx"],"sourcesContent":["import { Organization } from '@stytch/core/public';\nimport React, { SetStateAction, useCallback, useMemo } from 'react';\n\nimport { FlexBox } from '../components/FlexBox';\nimport {\n  SetDefaultConfirmModal,\n  useMutateDefaultConnection,\n  useSetDefaultConnection,\n} from '../components/SetDefaultConnection';\nimport { SettingsContainer, useSettingsContainer } from '../components/SettingsContainer';\nimport { SettingsSection } from '../components/SettingsSection';\nimport { Switch } from '../components/Switch';\nimport { Typography } from '../components/Typography';\nimport { useFormState } from '../utils/useFormState';\nimport { useMutateOrganization } from '../utils/useMutateOrganization';\nimport { useOrgInfo } from '../utils/useOrgInfo';\nimport { useRbac } from '../utils/useRbac';\nimport { useSsoRouterController } from './SSORouter';\nimport { TaggedConnection } from './TaggedConnection';\n\ntype JitProvisioningPolicy = Organization['sso_jit_provisioning'];\n\nconst OrganizationUpdatesSectionBody = ({\n  connection,\n  defaultConnectionName,\n  orgJitProvisioningPolicy,\n  localState,\n  setLocalState,\n  remoteState,\n}: {\n  connection: TaggedConnection;\n  defaultConnectionName: string | undefined;\n  orgJitProvisioningPolicy: JitProvisioningPolicy | undefined;\n  localState: OrganizationUpdatesFormState;\n  setLocalState: (state: SetStateAction<OrganizationUpdatesFormState>) => void;\n  remoteState: OrganizationUpdatesFormState;\n}) => {\n  const { editing } = useSettingsContainer();\n\n  const { handleRequestSetDefault, modalProps } = useSetDefaultConnection({ defaultConnectionName });\n\n  const { isDefaultConnection, jitProvisioningEnabled } = editing ? localState : remoteState;\n\n  const { data: canSetDefaultConnection } = useRbac('stytch.organization', 'update.settings.default-sso-connection');\n  const { data: canSetSsoJitProvisioning } = useRbac('stytch.organization', 'update.settings.sso-jit-provisioning');\n\n  const showSwitch = orgJitProvisioningPolicy === 'RESTRICTED';\n  const jitProvisioningText = `JIT provisioning is ${\n    orgJitProvisioningPolicy === 'ALL_ALLOWED' ? 'enabled' : 'disabled'\n  } for all SSO connections.`;\n\n  return (\n    <FlexBox flexDirection=\"column\" gap={2}>\n      {editing && (\n        <SetDefaultConfirmModal\n          {...modalProps}\n          confirm={() => {\n            setLocalState((state) => ({ ...state, isDefaultConnection: true }));\n            return Promise.resolve();\n          }}\n        />\n      )}\n      <SettingsSection\n        title=\"Default SSO connection\"\n        tooltipText=\"The default SSO Connection is used to automatically initiate authentication for your Members when possible. If multiple active SSO Connections exist, Members will still have the option to login via non-default connections.\"\n      >\n        {remoteState.isDefaultConnection ? (\n          <Typography variant=\"body2\">This connection is already set as the default.</Typography>\n        ) : (\n          <Switch\n            readOnly={!editing || !canSetDefaultConnection}\n            label=\"Set this connection as the default SSO connection. This will replace your existing default SSO connection.\"\n            checked={isDefaultConnection}\n            onChange={() => {\n              if (isDefaultConnection) {\n                setLocalState((state) => ({ ...state, isDefaultConnection: false }));\n              } else {\n                handleRequestSetDefault({\n                  displayName: connection.display_name,\n                  id: connection.connection_id,\n                });\n              }\n            }}\n          />\n        )}\n      </SettingsSection>\n      <SettingsSection\n        title=\"JIT provisioning\"\n        tooltipText=\"If enabled, users who successfully authenticate through this SSO Connection will be automatically provisioned if they do not already have an account.\"\n      >\n        {showSwitch ? (\n          <Switch\n            readOnly={!editing || !canSetSsoJitProvisioning}\n            label=\"Allow JIT provisioning for users who successfully authenticate through this SSO connection.\"\n            checked={jitProvisioningEnabled}\n            onChange={(value) => {\n              setLocalState((state) => ({ ...state, jitProvisioningEnabled: value }));\n            }}\n          />\n        ) : (\n          <Typography variant=\"body2\">{jitProvisioningText}</Typography>\n        )}\n      </SettingsSection>\n    </FlexBox>\n  );\n};\n\ninterface OrganizationUpdatesFormState {\n  isDefaultConnection: boolean;\n  jitProvisioningEnabled: boolean;\n}\n\nexport const OrganizationUpdatesSection = ({\n  connection,\n  defaultConnectionName,\n  isDefaultConnection,\n}: {\n  connection: TaggedConnection;\n  defaultConnectionName: string | undefined;\n  isDefaultConnection: boolean;\n}) => {\n  const { data: canSetDefaultConnection } = useRbac('stytch.organization', 'update.settings.default-sso-connection');\n  const { data: canSetSsoJitProvisioning } = useRbac('stytch.organization', 'update.settings.sso-jit-provisioning');\n\n  const { data: organization } = useOrgInfo();\n\n  const orgJitProvisioningPolicy = organization?.sso_jit_provisioning;\n\n  const remoteState = useMemo(\n    () => ({\n      isDefaultConnection,\n      jitProvisioningEnabled: !!(\n        orgJitProvisioningPolicy === 'ALL_ALLOWED' ||\n        (orgJitProvisioningPolicy === 'RESTRICTED' &&\n          organization?.sso_jit_provisioning_allowed_connections.includes(connection.connection_id))\n      ),\n    }),\n    [\n      connection.connection_id,\n      isDefaultConnection,\n      orgJitProvisioningPolicy,\n      organization?.sso_jit_provisioning_allowed_connections,\n    ],\n  );\n\n  const { localState, setLocalState, editing, handleSetEditing } = useFormState({ remoteState });\n\n  const { setDefault } = useMutateDefaultConnection();\n  const { mutate } = useMutateOrganization();\n\n  const handleSave = useCallback(async () => {\n    if (!organization) {\n      return Promise.reject(new Error('Failed to save changes.'));\n    }\n\n    const promises: Promise<unknown>[] = [];\n\n    if (!remoteState.isDefaultConnection && localState.isDefaultConnection) {\n      promises.push(\n        setDefault({\n          connectionId: connection.connection_id,\n          connectionName: connection.display_name,\n        }),\n      );\n    }\n\n    if (localState.jitProvisioningEnabled && !remoteState.jitProvisioningEnabled) {\n      if (orgJitProvisioningPolicy === 'NOT_ALLOWED' || orgJitProvisioningPolicy === 'RESTRICTED') {\n        const allowedConnections = new Set(organization.sso_jit_provisioning_allowed_connections ?? []);\n        allowedConnections.add(connection.connection_id);\n        promises.push(\n          mutate(\n            {\n              sso_jit_provisioning: 'RESTRICTED',\n              sso_jit_provisioning_allowed_connections: Array.from(allowedConnections),\n            },\n            { errorMessage: 'Failed to enable JIT provisioning.' },\n          ),\n        );\n      }\n    }\n\n    if (!localState.jitProvisioningEnabled && remoteState.jitProvisioningEnabled) {\n      if (orgJitProvisioningPolicy === 'RESTRICTED') {\n        const allowedConnections = new Set(organization.sso_jit_provisioning_allowed_connections ?? []);\n        allowedConnections.delete(connection.connection_id);\n        promises.push(\n          mutate(\n            {\n              sso_jit_provisioning: allowedConnections.size === 0 ? 'NOT_ALLOWED' : 'RESTRICTED',\n              sso_jit_provisioning_allowed_connections: Array.from(allowedConnections),\n            },\n            { errorMessage: 'Failed to disable JIT provisioning.' },\n          ),\n        );\n      }\n    }\n\n    return Promise.all(promises).then(() => {\n      // no-op to return void\n    });\n  }, [\n    connection.connection_id,\n    connection.display_name,\n    localState.isDefaultConnection,\n    localState.jitProvisioningEnabled,\n    mutate,\n    orgJitProvisioningPolicy,\n    organization,\n    remoteState.isDefaultConnection,\n    remoteState.jitProvisioningEnabled,\n    setDefault,\n  ]);\n\n  const { useBlockNavigation } = useSsoRouterController();\n\n  const disableSave = orgJitProvisioningPolicy !== 'RESTRICTED' && isDefaultConnection;\n\n  return (\n    <SettingsContainer\n      title=\"Authentication settings\"\n      hasCTA={(canSetDefaultConnection || canSetSsoJitProvisioning) && !disableSave}\n      onSave={handleSave}\n      useBlockNavigation={useBlockNavigation}\n      editing={editing}\n      setEditing={handleSetEditing}\n    >\n      <OrganizationUpdatesSectionBody\n        connection={connection}\n        defaultConnectionName={defaultConnectionName}\n        orgJitProvisioningPolicy={orgJitProvisioningPolicy}\n        remoteState={remoteState}\n        localState={localState}\n        setLocalState={setLocalState}\n      />\n    </SettingsContainer>\n  );\n};\n"],"names":["OrganizationUpdatesSectionBody","connection","defaultConnectionName","orgJitProvisioningPolicy","localState","setLocalState","remoteState","editing","useSettingsContainer","handleRequestSetDefault","modalProps","useSetDefaultConnection","isDefaultConnection","jitProvisioningEnabled","data","canSetDefaultConnection","useRbac","canSetSsoJitProvisioning","showSwitch","jitProvisioningText","React","FlexBox","flexDirection","gap","SetDefaultConfirmModal","confirm","state","Promise","resolve","SettingsSection","title","tooltipText","Typography","variant","Switch","readOnly","label","checked","onChange","displayName","display_name","id","connection_id","value","OrganizationUpdatesSection","organization","useOrgInfo","sso_jit_provisioning","useMemo","sso_jit_provisioning_allowed_connections","includes","handleSetEditing","useFormState","setDefault","useMutateDefaultConnection","mutate","useMutateOrganization","handleSave","useCallback","reject","Error","promises","push","connectionId","connectionName","allowedConnections","Set","add","Array","from","errorMessage","delete","size","all","then","useBlockNavigation","useSsoRouterController","disableSave","SettingsContainer","hasCTA","onSave","setEditing"],"mappings":"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"}