Repository navigation
Conversation
🦋 Changeset detectedLatest commit: fcbf773 The changes in this PR will be included in the next version bump. This PR includes changesets to release 23 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
No actionable comments were generated in the recent review.
|
@clerk/astro
@clerk/backend
@clerk/chrome-extension
@clerk/clerk-js
@clerk/electron
@clerk/electron-passkeys
@clerk/eslint-plugin
@clerk/expo
@clerk/expo-biometrics
@clerk/expo-google-signin
@clerk/expo-native-components
@clerk/expo-passkeys
@clerk/express
@clerk/fastify
@clerk/hono
@clerk/localizations
@clerk/mosaic
@clerk/nextjs
@clerk/nuxt
@clerk/react
@clerk/react-router
@clerk/shared
@clerk/tanstack-react-start
@clerk/testing
@clerk/ui
@clerk/upgrade
@clerk/vue
commit: |
5eb5789 to
ce188e7
Compare
ce188e7 to
132bc73
Compare
API Changes Report
Summary
@clerk/sharedCurrent version: 4.43.1 Subpath
|
| * Configuration options. | ||
| */ | ||
| export type SignOutOptions = { | ||
| __internal_satelliteSignOutRedirectUrl?: string; |
There was a problem hiding this comment.
This field is on the public SignOutOptions type but has no /** @internal */ tag, unlike the other __internal_ fields in this file. Our typedoc config uses excludeInternal: true, which hides members by that tag, so this one will appear in the generated signOut() reference docs and in customers' autocomplete. Customers could then pass it to opt arbitrary callbacks into repair, which contradicts the rule that custom callbacks don't opt in. The backend redirect allowlist still limits where users can be sent, so this is about the API contract, not security.
| __internal_satelliteSignOutRedirectUrl?: string; | |
| /** @internal */ | |
| __internal_satelliteSignOutRedirectUrl?: string; |
~ 🤖
There was a problem hiding this comment.
Added /** @internal */ to the optional metadata field, matching the existing annotations and excludeInternal configuration. Public signOut overloads and callback signatures remain unchanged. This hides the field from generated reference docs; it is metadata, not a runtime access restriction.
~ 🤖
| path: persistClient ? this.path() + '/sessions' : '/client', | ||
| search: { sign_out_redirect_url: redirectUrl }, | ||
| }); | ||
| this.fromJSON((json?.response || json) as ClientJSON | null); | ||
| SessionTokenCache.clear(); | ||
| if (!persistClient) { | ||
| this.resetClient(); |
There was a problem hiding this comment.
The only caller, clerk.ts:810, gates repair on persistClient, so this method always gets persistClient: true. The DELETE /client path and the resetClient() branch never run. I left a matching note on the backend's clear action in clerk_go#23504. If persistence-disabled repair is out of scope, both sides can drop it, and this method can lose the persistClient parameter.
~ 🤖
There was a problem hiding this comment.
Removed the unused persistClient parameter and DELETE /client/reset branch from the concrete repair transport. It now only removes sessions while retaining the client. Persistence-disabled sign-out continues through the existing destroy branch with no repair redirect; updated transport tests retain the client-state assertions.
~ 🤖
Satellite sign-out could fail before removing sessions when its destination was malformed, and deliberately discarded clients took an unnecessary trip through the primary. Use the original removal and navigation paths for unsupported destinations and disabled client persistence, preserving callback and navigation error behavior. Part of CORE-4146
1702463 to
fcbf773
Compare
Description
Signing out on a satellite leaves the primary domain holding a stale client cookie. The next primary password sign-in creates a new client and repeats the Device Trust challenge, even though the browser was already trusted.
Uses the optional repair URL from the companion backend change to refresh the primary cookie before continuing sign-out navigation. Repair applies to production browser satellites with client persistence enabled; the backend only offers it when Device Trust is enabled. Disabled persistence and malformed or unsupported destinations use the original removal path, so URL parsing cannot prevent session removal. Navigation errors still propagate.
Preserves the public
signOutoverloads and zero-argument callback contract. Built-in UI actions retain their original navigation closures and opt in with an internal return URL resolved through the active router. Only a usable backend repair URL replaces that navigation; missing or invalid responses invoke the original callback. Component-internal, hash/virtual, arbitrary customer callback, targeted multisession, primary, development, and native flows retain their existing paths. The transport method remains concrete-only rather than becoming a requiredClientResourcemember.Part of CORE-4146
Checklist
pnpm testruns as expected. Targeted ClerkJS, UI, and router suites passed; the full monorepo suite was not run.pnpm buildruns as expected. Browser bundles and relevant typechecks passed; the full monorepo build was not run.Type of change