From b325d60346bb0491f6367f55474db1d40d5c6ac3 Mon Sep 17 00:00:00 2001 From: Laura Beatris Date: Thu, 21 May 2026 11:16:21 -0300 Subject: [PATCH 1/4] Add changeset --- .changeset/dull-plums-sleep.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .changeset/dull-plums-sleep.md 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 From ac53c53040b126bd6e0cc8f57101ad7f045c7f2c Mon Sep 17 00:00:00 2001 From: Laura Beatris Date: Thu, 21 May 2026 13:47:21 -0300 Subject: [PATCH 2/4] Add active organization guard for `ConfigureSSO` --- packages/clerk-js/src/core/clerk.ts | 7 ++++--- packages/shared/src/internal/clerk-js/componentGuards.ts | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index c96ae678925..d89e5e975a3 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1480,10 +1480,11 @@ export class Clerk implements ClerkInterface { return; } - if (noUserExists(this)) { + const userExists = !noUserExists(this); + if (noOrganizationExists(this) && userExists) { if (this.#instanceType === 'development') { - throw new ClerkRuntimeError(warnings.cannotRenderConfigureSSOComponentWhenUserDoesNotExist, { - code: CANNOT_RENDER_USER_MISSING_ERROR_CODE, + throw new ClerkRuntimeError(warnings.cannotRenderComponentWhenOrgDoesNotExist, { + code: CANNOT_RENDER_ORGANIZATION_MISSING_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) => { From 4f57fd74add8eaa7a1ddf10b6a6945762cb3bc39 Mon Sep 17 00:00:00 2001 From: Laura Beatris Date: Thu, 21 May 2026 14:21:32 -0300 Subject: [PATCH 3/4] Integrate with orgs in-app prompt --- packages/clerk-js/src/core/clerk.ts | 34 +++++++++++++------ .../shared/src/internal/clerk-js/warnings.ts | 3 +- packages/shared/src/types/clerk.ts | 1 + 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index d89e5e975a3..10793bccf3f 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1462,29 +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; } - const userExists = !noUserExists(this); - if (noOrganizationExists(this) && userExists) { + if (disabledEmailAddressAttribute(this, this.environment)) { if (this.#instanceType === 'development') { - throw new ClerkRuntimeError(warnings.cannotRenderComponentWhenOrgDoesNotExist, { - code: CANNOT_RENDER_ORGANIZATION_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/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; From 75c901d462b5e52645277a68333a19702ecda2e8 Mon Sep 17 00:00:00 2001 From: Laura Beatris Date: Thu, 21 May 2026 14:24:01 -0300 Subject: [PATCH 4/4] Add changeset --- .changeset/tangy-jeans-crash.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/tangy-jeans-crash.md 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