From 4845bf1d8b70b1b3a1efc956d7aededc0ae1e67c Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 3 Nov 2025 15:53:37 +0000 Subject: [PATCH 1/2] Fix: Throw error when setting active org with invalid slug Co-authored-by: jeff --- .../clerk-js/src/core/__tests__/clerk.test.ts | 27 +++++++++++++++++++ packages/clerk-js/src/core/clerk.ts | 7 +++++ 2 files changed, 34 insertions(+) diff --git a/packages/clerk-js/src/core/__tests__/clerk.test.ts b/packages/clerk-js/src/core/__tests__/clerk.test.ts index 1cccffbbcd8..e7eae3e57e9 100644 --- a/packages/clerk-js/src/core/__tests__/clerk.test.ts +++ b/packages/clerk-js/src/core/__tests__/clerk.test.ts @@ -378,6 +378,33 @@ describe('Clerk singleton', () => { }); }); + it('throws an error when setting active organization with invalid slug', async () => { + const mockSession2 = { + id: '1', + status, + user: { + organizationMemberships: [ + { + id: 'orgmem_id', + organization: { + id: 'org_id', + slug: 'valid-org-slug', + }, + }, + ], + }, + touch: vi.fn(), + getToken: vi.fn(), + }; + mockClientFetch.mockReturnValue(Promise.resolve({ signedInSessions: [mockSession2] })); + const sut = new Clerk(productionPublishableKey); + await sut.load(); + + await expect(sut.setActive({ organization: 'invalid-org-slug' })).rejects.toThrow( + 'Unable to find organization with slug "invalid-org-slug". The user is not a member of this organization or it does not exist.', + ); + }); + it('redirects the user to the /v1/client/touch endpoint if the cookie_expires_at is less than 8 days away', async () => { mockSession.touch.mockReturnValue(Promise.resolve()); mockClientFetch.mockReturnValue( diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 1d9f44f5258..e7021595ff5 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1351,6 +1351,13 @@ export class Clerk implements ClerkInterface { const newLastActiveOrganizationId = matchingOrganization?.organization.id || null; const isPersonalWorkspace = newLastActiveOrganizationId === null; + // If a slug was explicitly provided but doesn't match any organization, throw an error + if (organizationIdOrSlug && !matchingOrganization) { + throw new Error( + `Unable to find organization with slug "${organizationIdOrSlug}". The user is not a member of this organization or it does not exist.`, + ); + } + // Do not update in-memory to personal workspace if force organization selection is enabled if (this.environment?.organizationSettings?.forceOrganizationSelection && isPersonalWorkspace) { return; From 022593ddbf8f25770310254ab98549d9af0b1f7e Mon Sep 17 00:00:00 2001 From: Jeff Escalante Date: Mon, 3 Nov 2025 11:23:12 -0500 Subject: [PATCH 2/2] Update packages/clerk-js/src/core/clerk.ts Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- packages/clerk-js/src/core/clerk.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index e7021595ff5..eb21c501261 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1351,12 +1351,15 @@ export class Clerk implements ClerkInterface { const newLastActiveOrganizationId = matchingOrganization?.organization.id || null; const isPersonalWorkspace = newLastActiveOrganizationId === null; - // If a slug was explicitly provided but doesn't match any organization, throw an error - if (organizationIdOrSlug && !matchingOrganization) { - throw new Error( - `Unable to find organization with slug "${organizationIdOrSlug}". The user is not a member of this organization or it does not exist.`, - ); - } + const INVALID_ORGANIZATION_SLUG_ERROR_CODE = 'invalid_organization_slug'; + + // If a slug was explicitly provided but doesn't match any organization, throw an error + if (organizationIdOrSlug && !matchingOrganization) { + throw new ClerkRuntimeError( + `Unable to find organization with slug "${organizationIdOrSlug}". The user is not a member of this organization or it does not exist.`, + { code: INVALID_ORGANIZATION_SLUG_ERROR_CODE } + ); + } // Do not update in-memory to personal workspace if force organization selection is enabled if (this.environment?.organizationSettings?.forceOrganizationSelection && isPersonalWorkspace) {