diff --git a/.changeset/dull-plums-sleep.md b/.changeset/dull-plums-sleep.md new file mode 100644 index 00000000000..f780c9b5ba6 --- /dev/null +++ b/.changeset/dull-plums-sleep.md @@ -0,0 +1,8 @@ +--- +'@clerk/localizations': minor +'@clerk/clerk-js': minor +'@clerk/shared': minor +'@clerk/ui': minor +--- + +Display "Single Sign-on (SSO)" section in `OrganizationProfile` if self-serve SSO is enabled on the current active organization diff --git a/.changeset/tangy-jeans-crash.md b/.changeset/tangy-jeans-crash.md new file mode 100644 index 00000000000..67459dfe646 --- /dev/null +++ b/.changeset/tangy-jeans-crash.md @@ -0,0 +1,6 @@ +--- +'@clerk/clerk-js': patch +'@clerk/shared': patch +--- + +Guard `ConfigureSSO` based on active organization diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index c96ae678925..10793bccf3f 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1462,28 +1462,43 @@ export class Clerk implements ClerkInterface { * @param props Configuration parameters. */ public mountConfigureSSO = (node: HTMLDivElement, props?: ConfigureSSOProps) => { - if (disabledSelfServeSSOFeature(this, this.environment)) { + const { isEnabled: isOrganizationsEnabled } = this.__internal_attemptToEnableEnvironmentSetting({ + for: 'organizations', + caller: 'ConfigureSSO', + onClose: () => { + throw new ClerkRuntimeError(warnings.cannotRenderAnyOrganizationComponent('ConfigureSSO'), { + code: CANNOT_RENDER_ORGANIZATIONS_DISABLED_ERROR_CODE, + }); + }, + }); + + if (!isOrganizationsEnabled) { + return; + } + + const userExists = !noUserExists(this); + if (noOrganizationExists(this) && userExists) { if (this.#instanceType === 'development') { - throw new ClerkRuntimeError(warnings.cannotRenderConfigureSSOComponentWhenDisabled, { - code: CANNOT_RENDER_SELF_SERVE_SSO_DISABLED_ERROR_CODE, + throw new ClerkRuntimeError(warnings.cannotRenderComponentWhenOrgDoesNotExist, { + code: CANNOT_RENDER_ORGANIZATION_MISSING_ERROR_CODE, }); } return; } - if (disabledEmailAddressAttribute(this, this.environment)) { + if (disabledSelfServeSSOFeature(this, this.environment)) { if (this.#instanceType === 'development') { - throw new ClerkRuntimeError(warnings.cannotRenderConfigureSSOComponentWhenEmailAddressDisabled, { - code: CANNOT_RENDER_CONFIGURE_SSO_EMAIL_ADDRESS_DISABLED_ERROR_CODE, + throw new ClerkRuntimeError(warnings.cannotRenderConfigureSSOComponentWhenDisabled, { + code: CANNOT_RENDER_SELF_SERVE_SSO_DISABLED_ERROR_CODE, }); } return; } - if (noUserExists(this)) { + if (disabledEmailAddressAttribute(this, this.environment)) { if (this.#instanceType === 'development') { - throw new ClerkRuntimeError(warnings.cannotRenderConfigureSSOComponentWhenUserDoesNotExist, { - code: CANNOT_RENDER_USER_MISSING_ERROR_CODE, + throw new ClerkRuntimeError(warnings.cannotRenderConfigureSSOComponentWhenEmailAddressDisabled, { + code: CANNOT_RENDER_CONFIGURE_SSO_EMAIL_ADDRESS_DISABLED_ERROR_CODE, }); } return; diff --git a/packages/shared/src/internal/clerk-js/componentGuards.ts b/packages/shared/src/internal/clerk-js/componentGuards.ts index 06f9ac443b9..0ab6a5a7595 100644 --- a/packages/shared/src/internal/clerk-js/componentGuards.ts +++ b/packages/shared/src/internal/clerk-js/componentGuards.ts @@ -46,8 +46,8 @@ export const disabledAllAPIKeysFeatures: ComponentGuard = (_, environment) => { return disabledUserAPIKeysFeature(_, environment) && disabledOrganizationAPIKeysFeature(_, environment); }; -export const disabledSelfServeSSOFeature: ComponentGuard = (_, environment) => { - return !environment?.userSettings.enterpriseSSO.self_serve_sso; +export const disabledSelfServeSSOFeature: ComponentGuard = (clerk, environment) => { + return !environment?.userSettings.enterpriseSSO.self_serve_sso || !clerk.organization?.selfServeSSOEnabled; }; export const disabledEmailAddressAttribute: ComponentGuard = (_, environment) => { diff --git a/packages/shared/src/internal/clerk-js/warnings.ts b/packages/shared/src/internal/clerk-js/warnings.ts index bb9497e7ea2..130e433e149 100644 --- a/packages/shared/src/internal/clerk-js/warnings.ts +++ b/packages/shared/src/internal/clerk-js/warnings.ts @@ -10,7 +10,8 @@ const createMessageForDisabledOrganizations = ( | 'OrganizationSwitcher' | 'OrganizationList' | 'CreateOrganization' - | 'TaskChooseOrganization', + | 'TaskChooseOrganization' + | 'ConfigureSSO', ) => { return formatWarning( `The <${componentName}/> cannot be rendered when the feature is turned off. Visit 'dashboard.clerk.com' to enable the feature. Since the feature is turned off, this is no-op.`, diff --git a/packages/shared/src/types/clerk.ts b/packages/shared/src/types/clerk.ts index e840032f4f6..c7e87bcd2d2 100644 --- a/packages/shared/src/types/clerk.ts +++ b/packages/shared/src/types/clerk.ts @@ -1644,6 +1644,7 @@ export type __internal_AttemptToEnableEnvironmentSettingParams = { | 'OrganizationList' | 'CreateOrganization' | 'TaskChooseOrganization' + | 'ConfigureSSO' | 'useOrganizationList' | 'useOrganization'; onClose?: () => void;