Skip to content

Commit 81b2759

Browse files
authored
fix(clerk-js): Update server-side revalidation hooks for session status transition (#6572)
1 parent aa6a3c3 commit 81b2759

5 files changed

Lines changed: 18 additions & 14 deletions

File tree

.changeset/plain-candies-fly.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@clerk/clerk-js': patch
3+
---
4+
5+
Fix server-side cache revalidation for Next.js when transitioning from `active` to `pending` session

packages/clerk-js/src/core/__tests__/clerk.test.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2502,14 +2502,8 @@ describe('Clerk singleton', () => {
25022502

25032503
// Verify hooks were called
25042504
await waitFor(() => {
2505-
expect(mockOnBeforeSetActive).toHaveBeenCalledTimes(1);
25062505
expect(mockOnAfterSetActive).toHaveBeenCalledTimes(1);
25072506
});
2508-
2509-
// Verify that onAfterSetActive was called after onBeforeSetActive
2510-
const beforeCallTime = mockOnBeforeSetActive.mock.invocationCallOrder[0];
2511-
const afterCallTime = mockOnAfterSetActive.mock.invocationCallOrder[0];
2512-
expect(afterCallTime).toBeGreaterThan(beforeCallTime);
25132507
});
25142508
});
25152509
});

packages/clerk-js/src/core/clerk.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2293,19 +2293,14 @@ export class Clerk implements ClerkInterface {
22932293

22942294
const hasTransitionedToPendingStatus = this.session.status === 'active' && session?.status === 'pending';
22952295
if (hasTransitionedToPendingStatus) {
2296-
const onBeforeSetActive: SetActiveHook =
2297-
typeof window !== 'undefined' && typeof window.__unstable__onBeforeSetActive === 'function'
2298-
? window.__unstable__onBeforeSetActive
2299-
: noop;
2300-
23012296
const onAfterSetActive: SetActiveHook =
23022297
typeof window !== 'undefined' && typeof window.__unstable__onAfterSetActive === 'function'
23032298
? window.__unstable__onAfterSetActive
23042299
: noop;
23052300

23062301
// Execute hooks to update server authentication context and trigger
23072302
// page protections in clerkMiddleware or server components
2308-
void onBeforeSetActive()?.then?.(() => void onAfterSetActive());
2303+
void onAfterSetActive();
23092304
}
23102305

23112306
// Note: this might set this.session to null

packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { Header } from '@/ui/elements/Header';
2525
import { OrganizationPreview } from '@/ui/elements/OrganizationPreview';
2626
import { useOrganizationListInView } from '@/ui/hooks/useOrganizationListInView';
2727
import { Add } from '@/ui/icons';
28+
import { useRouter } from '@/ui/router';
2829
import { handleError } from '@/ui/utils/errorHandler';
2930

3031
type ChooseOrganizationScreenProps = {
@@ -106,6 +107,7 @@ export const ChooseOrganizationScreen = (props: ChooseOrganizationScreenProps) =
106107
const MembershipPreview = (props: { organization: OrganizationResource }) => {
107108
const { user } = useUser();
108109
const card = useCardState();
110+
const { navigate } = useRouter();
109111
const { redirectUrlComplete } = useTaskChooseOrganizationContext();
110112
const { isLoaded, setActive } = useOrganizationList();
111113
const { t } = useLocalizations();
@@ -119,7 +121,10 @@ const MembershipPreview = (props: { organization: OrganizationResource }) => {
119121
try {
120122
await setActive({
121123
organization,
122-
redirectUrl: redirectUrlComplete,
124+
navigate: async () => {
125+
// TODO(after-auth) ORGS-779 - Handle next tasks
126+
await navigate(redirectUrlComplete);
127+
},
123128
});
124129
} catch (err) {
125130
if (!isClerkAPIResponseError(err)) {

packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Form } from '@/ui/elements/Form';
77
import { FormButtonContainer } from '@/ui/elements/FormButtons';
88
import { FormContainer } from '@/ui/elements/FormContainer';
99
import { Header } from '@/ui/elements/Header';
10+
import { useRouter } from '@/ui/router';
1011
import { createSlug } from '@/ui/utils/createSlug';
1112
import { handleError } from '@/ui/utils/errorHandler';
1213
import { useFormControl } from '@/ui/utils/useFormControl';
@@ -19,6 +20,7 @@ type CreateOrganizationScreenProps = {
1920

2021
export const CreateOrganizationScreen = (props: CreateOrganizationScreenProps) => {
2122
const card = useCardState();
23+
const { navigate } = useRouter();
2224
const { redirectUrlComplete } = useTaskChooseOrganizationContext();
2325
const { createOrganization, isLoaded, setActive } = useOrganizationList({
2426
userMemberships: organizationListParams.userMemberships,
@@ -47,7 +49,10 @@ export const CreateOrganizationScreen = (props: CreateOrganizationScreenProps) =
4749

4850
await setActive({
4951
organization,
50-
redirectUrl: redirectUrlComplete,
52+
navigate: async () => {
53+
// TODO(after-auth) ORGS-779 - Handle next tasks
54+
await navigate(redirectUrlComplete);
55+
},
5156
});
5257
} catch (err) {
5358
handleError(err, [nameField, slugField], card.setError);

0 commit comments

Comments
 (0)