Skip to content

Commit 857cc83

Browse files
authored
Merge branch 'main' into jr/integration-build-serve
2 parents 0cc5ee2 + 79d0ecf commit 857cc83

30 files changed

Lines changed: 583 additions & 48 deletions
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
---
2+
---

.changeset/bumpy-wings-travel.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@clerk/clerk-js': minor
3+
'@clerk/shared': minor
4+
'@clerk/ui': minor
5+
---
6+
7+
Prevent modification of immutable attributes in UserProfile

.changeset/five-carrots-laugh.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@clerk/chrome-extension': minor
3+
'@clerk/ui': minor
4+
---
5+
6+
Remove remotely hosted code from new @clerk/ui package

.changeset/flat-pets-taste.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@clerk/localizations': minor
3+
---
4+
5+
Added en-XA locale to highlight unlocalized strings.

.changeset/jolly-parents-refuse.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@clerk/react': patch
3+
---
4+
5+
Remove experimental tags on signal hooks
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@clerk/shared": patch
3+
---
4+
5+
Add `typesVersions` fallback so that `@clerk/shared/types` resolves correctly under `moduleResolution: "node"` in TypeScript.

.changeset/warm-pens-laugh.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@clerk/backend': patch
3+
---
4+
5+
Remove experimental comment from Agent Tasks API

integration/tests/cache-components.test.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,5 +323,61 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withEmailCodes], withPattern:
323323
const userId = await userIdElement.textContent();
324324
expect(userId).toMatch(/^user_/);
325325
});
326+
327+
test('sign out completes and navigation promise resolves', async ({ page, context }) => {
328+
const u = createTestUtils({ app, page, context });
329+
330+
// Sign in
331+
await u.po.signIn.goTo();
332+
await u.po.signIn.signInWithEmailAndInstantPassword({
333+
email: fakeUser.email,
334+
password: fakeUser.password,
335+
});
336+
await u.po.expect.toBeSignedIn();
337+
338+
// Navigate to a non-root page to ensure post-sign-out navigation is a real route change
339+
await u.page.goToRelative('/auth-server-component');
340+
await expect(u.page.getByText('auth() in Server Component')).toBeVisible();
341+
342+
// Sign out by explicitly awaiting the full signOut() promise.
343+
// Internally, signOut() calls: onBeforeSetActive (cache invalidation) →
344+
// session removal → navigate(redirectUrl) via routerPush → useInternalNavFun →
345+
// startTransition(() => router.push(to)).
346+
// The navigate() call awaits the promise from useInternalNavFun.
347+
// If isPending doesn't cycle (the concern from removing usePathname in #7989),
348+
// the navigation promise hangs and this evaluate call times out.
349+
await page.evaluate(async () => {
350+
await window.Clerk.signOut();
351+
});
352+
353+
await u.po.expect.toBeSignedOut();
354+
});
355+
356+
test('protected route redirects to sign-in after sign out', async ({ page, context }) => {
357+
const u = createTestUtils({ app, page, context });
358+
359+
// Sign in and access protected route
360+
await u.po.signIn.goTo();
361+
await u.po.signIn.signInWithEmailAndInstantPassword({
362+
email: fakeUser.email,
363+
password: fakeUser.password,
364+
});
365+
await u.po.expect.toBeSignedIn();
366+
367+
await u.page.goToRelative('/protected');
368+
await expect(u.page.getByText('Protected Route')).toBeVisible();
369+
370+
// Sign out
371+
await page.evaluate(async () => {
372+
await window.Clerk.signOut();
373+
});
374+
375+
await u.po.expect.toBeSignedOut();
376+
377+
// Try to access protected route again — should redirect to sign-in
378+
// This verifies cache invalidation worked correctly alongside navigation
379+
await u.page.goToRelative('/protected');
380+
await expect(page).toHaveURL(/sign-in/);
381+
});
326382
},
327383
);

packages/backend/src/api/endpoints/AgentTaskApi.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,6 @@ type CreateAgentTaskParams = {
4848
const basePath = '/agents/tasks';
4949

5050
export class AgentTaskAPI extends AbstractAPI {
51-
/**
52-
* @experimental This is an experimental API for the Agent Tokens feature that is available under a private beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
53-
*/
5451
public async create(params: CreateAgentTaskParams) {
5552
return this.request<AgentTask>({
5653
method: 'POST',

packages/chrome-extension/src/react/ClerkProvider.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { Clerk } from '@clerk/clerk-js/no-rhc';
22
import type { ClerkProviderProps as ClerkReactProviderProps } from '@clerk/react';
33
import { InternalClerkProvider as ClerkReactProvider } from '@clerk/react/internal';
4-
import { ui } from '@clerk/ui';
4+
import { ui } from '@clerk/ui/no-rhc';
55
import React from 'react';
66

77
import { createClerkClient } from '../internal/clerk';

0 commit comments

Comments
 (0)