From 99f10bdca2197a3a87c40ab9e0566680b37f881d Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Mon, 18 Aug 2025 18:07:11 -0300 Subject: [PATCH 1/5] Remove `onBeforeSetActive` hook --- packages/clerk-js/src/core/clerk.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 190328ec6bf..089e833e69f 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -28,9 +28,9 @@ import type { AuthenticateWithGoogleOneTapParams, AuthenticateWithMetamaskParams, AuthenticateWithOKXWalletParams, - Clerk as ClerkInterface, ClerkAPIError, ClerkAuthenticateWithWeb3Params, + Clerk as ClerkInterface, ClerkOptions, ClientJSONSnapshot, ClientResource, @@ -2293,11 +2293,6 @@ export class Clerk implements ClerkInterface { const hasTransitionedToPendingStatus = this.session.status === 'active' && session?.status === 'pending'; if (hasTransitionedToPendingStatus) { - const onBeforeSetActive: SetActiveHook = - typeof window !== 'undefined' && typeof window.__unstable__onBeforeSetActive === 'function' - ? window.__unstable__onBeforeSetActive - : noop; - const onAfterSetActive: SetActiveHook = typeof window !== 'undefined' && typeof window.__unstable__onAfterSetActive === 'function' ? window.__unstable__onAfterSetActive @@ -2305,7 +2300,7 @@ export class Clerk implements ClerkInterface { // Execute hooks to update server authentication context and trigger // page protections in clerkMiddleware or server components - void onBeforeSetActive()?.then?.(() => void onAfterSetActive()); + void onAfterSetActive(); } // Note: this might set this.session to null From c03849f060d97b90f3a4bfa53b14fc0bfa35e93b Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Mon, 18 Aug 2025 18:14:07 -0300 Subject: [PATCH 2/5] Add changeset --- .changeset/plain-candies-fly.md | 5 +++++ packages/clerk-js/src/core/clerk.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/plain-candies-fly.md diff --git a/.changeset/plain-candies-fly.md b/.changeset/plain-candies-fly.md new file mode 100644 index 00000000000..9daceafd5c8 --- /dev/null +++ b/.changeset/plain-candies-fly.md @@ -0,0 +1,5 @@ +--- +'@clerk/clerk-js': patch +--- + +Fix server-side cache revalidation for Next.js when transitioning from `active` to `pending` session diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 089e833e69f..ac78f078b6b 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -28,9 +28,9 @@ import type { AuthenticateWithGoogleOneTapParams, AuthenticateWithMetamaskParams, AuthenticateWithOKXWalletParams, + Clerk as ClerkInterface, ClerkAPIError, ClerkAuthenticateWithWeb3Params, - Clerk as ClerkInterface, ClerkOptions, ClientJSONSnapshot, ClientResource, From d4cb0d071da872251e5d872a3649ff69187c856c Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Mon, 18 Aug 2025 18:27:51 -0300 Subject: [PATCH 3/5] Update test --- packages/clerk-js/src/core/__tests__/clerk.test.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/clerk-js/src/core/__tests__/clerk.test.ts b/packages/clerk-js/src/core/__tests__/clerk.test.ts index 8dee5fba0a6..0142da8ad08 100644 --- a/packages/clerk-js/src/core/__tests__/clerk.test.ts +++ b/packages/clerk-js/src/core/__tests__/clerk.test.ts @@ -2502,14 +2502,8 @@ describe('Clerk singleton', () => { // Verify hooks were called await waitFor(() => { - expect(mockOnBeforeSetActive).toHaveBeenCalledTimes(1); expect(mockOnAfterSetActive).toHaveBeenCalledTimes(1); }); - - // Verify that onAfterSetActive was called after onBeforeSetActive - const beforeCallTime = mockOnBeforeSetActive.mock.invocationCallOrder[0]; - const afterCallTime = mockOnAfterSetActive.mock.invocationCallOrder[0]; - expect(afterCallTime).toBeGreaterThan(beforeCallTime); }); }); }); From 3f2207f0d18a3756e49be869c097cfa110aa0a79 Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Tue, 19 Aug 2025 09:54:07 -0300 Subject: [PATCH 4/5] Update `TaskChooseOrganization` to use `navigate` with `setActive` --- .../TaskChooseOrganization/ChooseOrganizationScreen.tsx | 7 ++++++- .../TaskChooseOrganization/CreateOrganizationScreen.tsx | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx index 1ffc0122dd0..124693e8209 100644 --- a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx +++ b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx @@ -25,6 +25,7 @@ import { Header } from '@/ui/elements/Header'; import { OrganizationPreview } from '@/ui/elements/OrganizationPreview'; import { useOrganizationListInView } from '@/ui/hooks/useOrganizationListInView'; import { Add } from '@/ui/icons'; +import { useRouter } from '@/ui/router'; import { handleError } from '@/ui/utils/errorHandler'; type ChooseOrganizationScreenProps = { @@ -106,6 +107,7 @@ export const ChooseOrganizationScreen = (props: ChooseOrganizationScreenProps) = const MembershipPreview = (props: { organization: OrganizationResource }) => { const { user } = useUser(); const card = useCardState(); + const { navigate } = useRouter(); const { redirectUrlComplete } = useTaskChooseOrganizationContext(); const { isLoaded, setActive } = useOrganizationList(); const { t } = useLocalizations(); @@ -119,7 +121,10 @@ const MembershipPreview = (props: { organization: OrganizationResource }) => { try { await setActive({ organization, - redirectUrl: redirectUrlComplete, + navigate: async () => { + // TODO - Handle next tasks + await navigate(redirectUrlComplete); + }, }); } catch (err) { if (!isClerkAPIResponseError(err)) { diff --git a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx index 3a72a889cff..6b9ba90629d 100644 --- a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx +++ b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx @@ -7,6 +7,7 @@ import { Form } from '@/ui/elements/Form'; import { FormButtonContainer } from '@/ui/elements/FormButtons'; import { FormContainer } from '@/ui/elements/FormContainer'; import { Header } from '@/ui/elements/Header'; +import { useRouter } from '@/ui/router'; import { createSlug } from '@/ui/utils/createSlug'; import { handleError } from '@/ui/utils/errorHandler'; import { useFormControl } from '@/ui/utils/useFormControl'; @@ -19,6 +20,7 @@ type CreateOrganizationScreenProps = { export const CreateOrganizationScreen = (props: CreateOrganizationScreenProps) => { const card = useCardState(); + const { navigate } = useRouter(); const { redirectUrlComplete } = useTaskChooseOrganizationContext(); const { createOrganization, isLoaded, setActive } = useOrganizationList({ userMemberships: organizationListParams.userMemberships, @@ -47,7 +49,10 @@ export const CreateOrganizationScreen = (props: CreateOrganizationScreenProps) = await setActive({ organization, - redirectUrl: redirectUrlComplete, + navigate: async () => { + // TODO - Handle next tasks + await navigate(redirectUrlComplete); + }, }); } catch (err) { handleError(err, [nameField, slugField], card.setError); From 16a87e009c8dca71325412c0dcd6e9cf41fc09e0 Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Tue, 19 Aug 2025 10:54:25 -0300 Subject: [PATCH 5/5] Update TODO comments with ticket number --- .../tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx | 2 +- .../tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx index 124693e8209..c0cf177a130 100644 --- a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx +++ b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx @@ -122,7 +122,7 @@ const MembershipPreview = (props: { organization: OrganizationResource }) => { await setActive({ organization, navigate: async () => { - // TODO - Handle next tasks + // TODO(after-auth) ORGS-779 - Handle next tasks await navigate(redirectUrlComplete); }, }); diff --git a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx index 6b9ba90629d..e18b6972468 100644 --- a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx +++ b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx @@ -50,7 +50,7 @@ export const CreateOrganizationScreen = (props: CreateOrganizationScreenProps) = await setActive({ organization, navigate: async () => { - // TODO - Handle next tasks + // TODO(after-auth) ORGS-779 - Handle next tasks await navigate(redirectUrlComplete); }, });