Skip to content

feat(ui): upgrade affiliation domains for SSO - #9356

Open
NicolasLopes7 wants to merge 10 commits into
mainfrom
nicolas/affiliation-ownership
Open

feat(ui): upgrade affiliation domains for SSO#9356
NicolasLopes7 wants to merge 10 commits into
mainfrom
nicolas/affiliation-ownership

Conversation

@NicolasLopes7

@NicolasLopes7 NicolasLopes7 commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Summary

  • surface existing affiliation-verified organization domains in Configure SSO
  • let admins start TXT ownership verification for those domains
  • attach only ownership-verified domains to enterprise connections

@changeset-bot

changeset-bot Bot commented Aug 6, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: ff305cb

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 23 packages
Name Type
@clerk/localizations Patch
@clerk/shared Patch
@clerk/ui Patch
@clerk/react Patch
@clerk/astro Patch
@clerk/backend Patch
@clerk/chrome-extension Patch
@clerk/clerk-js Patch
@clerk/electron Patch
@clerk/expo-passkeys Patch
@clerk/expo Patch
@clerk/express Patch
@clerk/fastify Patch
@clerk/headless Patch
@clerk/hono Patch
@clerk/msw Patch
@clerk/nextjs Patch
@clerk/nuxt Patch
@clerk/react-router Patch
@clerk/tanstack-react-start Patch
@clerk/testing Patch
@clerk/vue Patch
@clerk/swingset Patch

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

@vercel

vercel Bot commented Aug 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
clerk-js-sandbox Ready Ready Preview Aug 7, 2026 1:42pm
swingset Ready Ready Preview Aug 7, 2026 1:42pm

Request Review

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

ConfigureSSO now supports ownership verification for existing affiliation-verified organization domains. Domain creation accepts a separate enrollment mode. Enterprise connections use only domains with verified ownership. Domain cards distinguish affiliation and ownership verification states. Removal can preserve affiliation verification. Tests cover verification preparation, domain filtering, connection payloads, and removal messaging.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

  • clerk/javascript#9275: Updates related OrganizationDomainsStep and ConfigureSSO domain ownership-verification flows.

Suggested reviewers: iagodahlem, laurabeatris

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: upgrading affiliation-verified domains for SSO.
Description check ✅ Passed The description directly explains the changes to affiliation-verified domains, ownership verification, and enterprise connections.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@packages/ui/src/components/ConfigureSSO/hooks/__tests__/useOrganizationEnterpriseConnection.test.tsx`:
- Around line 189-192: Update the mock domainsState.data element type from `{
name: string }` to include the ownershipVerification property used by the test
fixtures, allowing both the verified status object and null while preserving the
existing name field.

In
`@packages/ui/src/components/ConfigureSSO/hooks/useOrganizationEnterpriseConnection.ts`:
- Line 251: Update the domains selection in useOrganizationEnterpriseConnection
so existing connection domains are restricted to names present in
verifiedOwnershipDomains before provider replacement; retain only verified names
and preserve the fallback behavior when no existing domains are available. Add a
changeProvider test covering an existing unverified domain and assert it is
excluded.

In `@packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx`:
- Around line 472-478: Update the ownership-verification preparation flow used
by ExpiredNotice and onPrepareOwnershipVerification so rejected promises are
explicitly caught rather than discarded after finally(). Surface the failure
through the existing mutation error state or established error message, while
preserving the current success and cleanup behavior.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 29826ac4-101d-4fbd-83b7-ece13a362a4f

📥 Commits

Reviewing files that changed from the base of the PR and between 2f24826 and abe9e86.

📒 Files selected for processing (8)
  • .changeset/bright-geese-upgrade.md
  • packages/shared/src/react/hooks/useOrganizationDomains.tsx
  • packages/ui/src/components/ConfigureSSO/__tests__/ConfigureSSO.test.tsx
  • packages/ui/src/components/ConfigureSSO/domain/__tests__/organizationEnterpriseConnection.test.ts
  • packages/ui/src/components/ConfigureSSO/domain/organizationEnterpriseConnection.ts
  • packages/ui/src/components/ConfigureSSO/hooks/__tests__/useOrganizationEnterpriseConnection.test.tsx
  • packages/ui/src/components/ConfigureSSO/hooks/useOrganizationEnterpriseConnection.ts
  • packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • clerk/clerk_go (manual)
  • clerk/dashboard (manual)
  • clerk/accounts (manual)
  • clerk/backoffice (manual)
  • clerk/clerk (manual)
  • clerk/clerk-docs (manual)
  • clerk/cloudflare-workers (manual)
  • clerk/clerk-ios (auto-detected)
  • clerk/clerk-android (auto-detected)
  • clerk/cli (auto-detected)

}

const domains = enterpriseConnection?.domains ?? organizationDomains?.map(domain => domain.name);
const domains = enterpriseConnection?.domains ?? verifiedOwnershipDomains?.map(domain => domain.name);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Filter existing connection domains before provider replacement.

Line 251 reuses every existing connection domain. This can recreate a connection with affiliation-only or unverified domains after deleting the old connection. Filter the existing names against verifiedOwnershipDomains, or use only the verified names.

Add a changeProvider test with an existing unverified domain.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@packages/ui/src/components/ConfigureSSO/hooks/useOrganizationEnterpriseConnection.ts`
at line 251, Update the domains selection in useOrganizationEnterpriseConnection
so existing connection domains are restricted to names present in
verifiedOwnershipDomains before provider replacement; retain only verified names
and preserve the fallback behavior when no existing domains are available. Add a
changeProvider test covering an existing unverified domain and assert it is
excluded.

Source: Linked repositories

Comment on lines 472 to 478
{!hasOwnershipVerification || isExpired ? (
<ExpiredNotice
key='expired'
key={isExpired ? 'expired' : 'unprepared'}
isExpired={isExpired}
expiresAt={ownershipVerification?.expiresAt ?? null}
onPrepareOwnershipVerification={onPrepareOwnershipVerification}
/>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Handle ownership-verification preparation failures.

This new path calls ExpiredNotice, whose handler discards a rejected promise after .finally(). If preparation fails, the UI provides no error and can produce an unhandled rejection. Catch the error and show the existing mutation error state or message.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx`
around lines 472 - 478, Update the ownership-verification preparation flow used
by ExpiredNotice and onPrepareOwnershipVerification so rejected promises are
explicitly caught rather than discarded after finally(). Surface the failure
through the existing mutation error state or established error message, while
preserving the current success and cleanup behavior.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx`:
- Around line 439-464: Add elementDescriptor props to the affiliation and
ownership Text elements, the verified Badge, and the ArrowRight Icon within the
isAffiliationVerified block in OrganizationDomainsStep. Use matching, unique
descriptors consistent with the component’s existing descriptor naming
conventions so Appearance customizations can target each new status element.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: da01ea36-50d2-43ca-b001-a0ddaac2647f

📥 Commits

Reviewing files that changed from the base of the PR and between abe9e86 and 4257a05.

📒 Files selected for processing (3)
  • packages/localizations/src/en-US.ts
  • packages/ui/src/components/ConfigureSSO/__tests__/ConfigureSSO.test.tsx
  • packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • clerk/clerk_go (manual)
  • clerk/dashboard (manual)
  • clerk/accounts (manual)
  • clerk/backoffice (manual)
  • clerk/clerk (manual)
  • clerk/clerk-docs (manual)
  • clerk/cloudflare-workers (manual)
  • clerk/clerk-ios (auto-detected)
  • clerk/clerk-android (auto-detected)
  • clerk/cli (auto-detected)
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/ui/src/components/ConfigureSSO/tests/ConfigureSSO.test.tsx

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx`:
- Around line 100-102: Update the catch block in the organization-domain
submission flow to catch unknown errors instead of using err: any. Preserve
Clerk-specific handling via getFieldError and getGlobalError, but route
non-Clerk failures through the shared handleError path used by
RemoveDomainDialog or provide a generic user-facing fallback before calling
card.setError.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: af531d0a-a130-4422-b31d-84191bb9a242

📥 Commits

Reviewing files that changed from the base of the PR and between 4257a05 and 315c5d5.

📒 Files selected for processing (4)
  • .changeset/bright-geese-upgrade.md
  • packages/localizations/src/en-US.ts
  • packages/ui/src/components/ConfigureSSO/__tests__/ConfigureSSO.test.tsx
  • packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • clerk/clerk_go (manual)
  • clerk/dashboard (manual)
  • clerk/accounts (manual)
  • clerk/backoffice (manual)
  • clerk/clerk (manual)
  • clerk/clerk-docs (manual)
  • clerk/cloudflare-workers (manual)
  • clerk/clerk-ios (auto-detected)
  • clerk/clerk-android (auto-detected)
  • clerk/cli (auto-detected)
🚧 Files skipped from review as they are similar to previous changes (3)
  • .changeset/bright-geese-upgrade.md
  • packages/ui/src/components/ConfigureSSO/tests/ConfigureSSO.test.tsx
  • packages/localizations/src/en-US.ts

Comment on lines +100 to +102
} catch (err: any) {
const apiError = getFieldError(err) ?? getGlobalError(err);
card.setError(apiError);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Preserve a fallback error for non-Clerk failures.

getFieldError and getGlobalError return undefined for non-ClerkAPIResponseError failures. card.setError(apiError) then provides no user-facing error after a network or unexpected failure.

Catch unknown, narrow it, and use the shared handleError path used by RemoveDomainDialog.tsx Lines 63-70, or provide a generic fallback. Do not use err: any.

As per coding guidelines, use typed errors and avoid unjustified any. The shared error helpers are defined in packages/ui/src/utils/errorHandler.ts Lines 89-112.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx`
around lines 100 - 102, Update the catch block in the organization-domain
submission flow to catch unknown errors instead of using err: any. Preserve
Clerk-specific handling via getFieldError and getGlobalError, but route
non-Clerk failures through the shared handleError path used by
RemoveDomainDialog or provide a generic user-facing fallback before calling
card.setError.

Source: Coding guidelines

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/ui/src/components/ConfigureSSO/RemoveDomainDialog.tsx`:
- Around line 49-59: Update RemoveDomainDialog’s subtitle selection to use a
combined active-preservation message when preserveAffiliationVerification and
isConnectionActive are both true, while retaining existing copy for the other
states. Add the corresponding English localization in
packages/localizations/src/en-US.ts:691-692 explaining that SSO will no longer
be used with the domain while affiliation verification remains active. Update
packages/ui/src/components/ConfigureSSO/__tests__/RemoveDomainDialog.test.tsx:85-94
to set isConnectionActive to true and assert the combined message.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 1484e26c-f2be-4638-90dc-e7fb13d666f3

📥 Commits

Reviewing files that changed from the base of the PR and between 315c5d5 and bfd2453.

📒 Files selected for processing (5)
  • packages/localizations/src/en-US.ts
  • packages/ui/src/components/ConfigureSSO/RemoveDomainDialog.tsx
  • packages/ui/src/components/ConfigureSSO/__tests__/ConfigureSSO.test.tsx
  • packages/ui/src/components/ConfigureSSO/__tests__/RemoveDomainDialog.test.tsx
  • packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • clerk/clerk_go (manual)
  • clerk/dashboard (manual)
  • clerk/accounts (manual)
  • clerk/backoffice (manual)
  • clerk/clerk (manual)
  • clerk/clerk-docs (manual)
  • clerk/cloudflare-workers (manual)
  • clerk/clerk-ios (auto-detected)
  • clerk/clerk-android (auto-detected)
  • clerk/cli (auto-detected)
🚧 Files skipped from review as they are similar to previous changes (2)
  • packages/ui/src/components/ConfigureSSO/tests/ConfigureSSO.test.tsx
  • packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx

Comment thread packages/ui/src/components/ConfigureSSO/RemoveDomainDialog.tsx Outdated
Adds the affiliation/ownership domain card and remove-dialog keys to
__internal_LocalizationResource and regenerates the locale files.
@pkg-pr-new

pkg-pr-new Bot commented Aug 7, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@9356

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@9356

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@9356

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@9356

@clerk/electron

npm i https://pkg.pr.new/@clerk/electron@9356

@clerk/electron-passkeys

npm i https://pkg.pr.new/@clerk/electron-passkeys@9356

@clerk/eslint-plugin

npm i https://pkg.pr.new/@clerk/eslint-plugin@9356

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@9356

@clerk/expo-google-signin

npm i https://pkg.pr.new/@clerk/expo-google-signin@9356

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@9356

@clerk/express

npm i https://pkg.pr.new/@clerk/express@9356

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@9356

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@9356

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@9356

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@9356

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@9356

@clerk/react

npm i https://pkg.pr.new/@clerk/react@9356

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@9356

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@9356

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@9356

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@9356

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@9356

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@9356

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@9356

commit: ff305cb

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-08-07T13:46:13.560Z

Summary

Metric Count
Packages analyzed 19
Packages with changes 9
🔴 Breaking changes 56
🟡 Non-breaking changes 8
🟢 Additions 1

Warning
56 breaking change(s) detected - Major version bump required

🤖 This report was reviewed by claude-sonnet-4-6.

🔴 Breaking changes index (56)

Every breaking change, up front. Full diffs are in the package sections below.

Package Subpath Change
@clerk/backend . BillingSubscription.undefined
@clerk/backend . BillingSubscription.instanceId
@clerk/backend . BillingSubscription.nextPayment
@clerk/backend . BillingSubscriptionItem.undefined
@clerk/backend . BillingSubscriptionItem.instanceId
@clerk/backend . BillingSubscriptionItem.isFreeTrial
@clerk/backend . BillingSubscriptionItem.nextPayment
@clerk/backend . BillingSubscriptionItem.priceId
@clerk/backend . BillingSubscriptionItem.seats
@clerk/backend . BillingSubscriptionItemJSON.amount
@clerk/backend . BillingSubscriptionItemJSON.instance_id
@clerk/backend . BillingSubscriptionItemJSON.lifetime_paid
@clerk/backend . BillingSubscriptionItemJSON.next_payment
@clerk/backend . BillingSubscriptionItemJSON.price_id
@clerk/backend . BillingSubscriptionItemJSON.seats
@clerk/backend . BillingSubscriptionItemJSON.status
@clerk/backend . BillingSubscriptionItemStatus
@clerk/backend . BillingSubscriptionJSON.instance_id
@clerk/backend . BillingSubscriptionJSON.next_payment
@clerk/clerk-js . Clerk.closeInviteMembers
@clerk/clerk-js . Clerk.openInviteMembers
@clerk/clerk-js ./no-rhc Clerk.closeInviteMembers
@clerk/clerk-js ./no-rhc Clerk.openInviteMembers
@clerk/expo ./native EmbeddedNavigationProps
@clerk/expo ./native EmbeddedNavigationProps.onHostBack
@clerk/expo ./experimental StartSSOFlowParams
@clerk/expo ./experimental StartSSOFlowReturnType
@clerk/expo ./experimental useSSO
@clerk/expo ./experimental UseSSOReturn
@clerk/express ./types AuthenticateRequestParams
@clerk/react . ClerkProviderProps
@clerk/react . InviteMembersButton
@clerk/react ./types ClerkProviderProps
@clerk/shared ./internal/clerk-js/queryParams VerifyTokenStatus
@clerk/shared ./internal/clerk-js/warnings warnings
@clerk/shared ./types __internal_AttemptToEnableEnvironmentSettingParams
@clerk/shared ./types __internal_EnableOrganizationsPromptProps
@clerk/shared ./types AttackProtectionData
@clerk/shared ./types Clerk.closeInviteMembers
@clerk/shared ./types Clerk.openInviteMembers
@clerk/shared ./types EnterpriseOAuthConfigJSON.auth_url
@clerk/shared ./types EnterpriseOAuthConfigJSON.redirect_uri
@clerk/shared ./types EnterpriseOAuthConfigJSON.token_url
@clerk/shared ./types EnterpriseOAuthConfigJSON.user_info_url
@clerk/shared ./types EnterpriseOAuthConfigResource.authUrl
@clerk/shared ./types EnterpriseOAuthConfigResource.redirectUri
@clerk/shared ./types EnterpriseOAuthConfigResource.tokenUrl
@clerk/shared ./types EnterpriseOAuthConfigResource.userInfoUrl
@clerk/shared ./types FieldId
@clerk/shared ./types InviteMembersButtonProps
@clerk/shared ./types InviteMembersModalProps
@clerk/shared ./types InviteMembersProps
@clerk/shared ./types UserSettingsJSON.attack_protection
@clerk/shared ./types UserSettingsResource.attackProtection
@clerk/shared ./internal/clerk-js/navigateToNextStepSignUp ./internal/clerk-js/navigateToNextStepSignUp
@clerk/ui ./internal ComponentControls

@clerk/shared

Version: 4.27.0 → 4.25.8
Recommended bump: MAJOR

Subpath ./internal/clerk-js/navigateToNextStepSignUp

🔴 Breaking Changes (1)

Changed: ./internal/clerk-js/navigateToNextStepSignUp

Subpath export ./internal/clerk-js/navigateToNextStepSignUp was removed

Subpath ./internal/clerk-js/queryParams

🔴 Breaking Changes (1)

Changed: VerifyTokenStatus
- type VerifyTokenStatus = 'verified' | 'transferable' | (typeof EmailLinkErrorCodeStatus)[keyof typeof EmailLinkErrorCodeStatus];
+ type VerifyTokenStatus = 'verified' | (typeof EmailLinkErrorCodeStatus)[keyof typeof EmailLinkErrorCodeStatus];

Static analyzer: Breaking change in type alias VerifyTokenStatus: Type changed: 'transferable'|'verified'|(typeof import("@clerk/shared").~EmailLinkErrorCodeStatus)[keyof typeof import("@clerk/shared…'verified'|(typeof import("@clerk/shared").~EmailLinkErrorCodeStatus)[keyof typeof import("@clerk/shared").~EmailLinkEr…

🤖 AI review (confirmed) (95%): The literal 'transferable' has been removed from the VerifyTokenStatus union, so any consumer code that assigns, compares against, or handles the 'transferable' variant will no longer type-check correctly.

Migration: Remove any references to the 'transferable' string literal from code that uses VerifyTokenStatus; update switch/if branches and type guards that previously handled that case.

Subpath ./internal/clerk-js/warnings

🔴 Breaking Changes (1)

Changed: warnings
// ... 7 unchanged lines elided ...
    cannotRenderSignInComponentWhenSessionExists: string;
    cannotRenderSignInComponentWhenTaskExists: string;
    cannotRenderComponentWhenUserDoesNotExist: string;
-   createCannotRenderComponentWhenOrgDoesNotExist: (componentName: "OrganizationProfile" | "InviteMembers" | "ConfigureSSO") => string;
-   createCannotRenderComponentWhenPermissionIsMissing: (componentName: "InviteMembers", permission: string) => string;
-   cannotRenderAnyOrganizationComponent: (componentName: "OrganizationProfile" | "InviteMembers" | "OrganizationSwitcher" | "OrganizationList" | "CreateOrganization" | "TaskChooseOrganization" | "ConfigureSSO") => string;
+   createCannotRenderComponentWhenOrgDoesNotExist: (componentName: "OrganizationProfile" | "ConfigureSSO") => string;
+   cannotRenderAnyOrganizationComponent: (componentName: "OrganizationProfile" | "OrganizationSwitcher" | "OrganizationList" | "CreateOrganization" | "TaskChooseOrganization" | "ConfigureSSO") => string;
    cannotRenderAnyBillingComponent: (componentName: "PricingTable" | "Checkout" | "PlanDetails") => string;
    cannotOpenUserProfile: string;
    cannotOpenCheckout: string;
// ... 10 unchanged lines elided ...

Static analyzer: Breaking change in variable warnings: Type changed: {proxyUrlAsFunctionNotSupported:string;domainAsFunctionNotSupported:string;cannotRenderComponentWhenSessionExists:strin…{proxyUrlAsFunctionNotSupported:string;domainAsFunctionNotSupported:string;cannotRenderComponentWhenSessionExists:strin…

🤖 AI review (confirmed) (90%): Two members were removed or narrowed: createCannotRenderComponentWhenPermissionIsMissing was removed entirely, and the union types for createCannotRenderComponentWhenOrgDoesNotExist (lost "InviteMembers") and cannotRenderAnyOrganizationComponent (lost "InviteMembers") were narrowed, breaking any consumer that passed "InviteMembers" to those functions.

Migration: Remove calls to createCannotRenderComponentWhenPermissionIsMissing and stop passing "InviteMembers" to createCannotRenderComponentWhenOrgDoesNotExist and cannotRenderAnyOrganizationComponent, as those overloads no longer exist.

Subpath ./types

🔴 Breaking Changes (19)

Changed: __internal_AttemptToEnableEnvironmentSettingParams
  type __internal_AttemptToEnableEnvironmentSettingParams = {
    for: 'organizations';
-   caller: 'OrganizationSwitcher' | 'OrganizationProfile' | 'InviteMembers' | 'OrganizationList' | 'CreateOrganization' | 'TaskChooseOrganization' | 'ConfigureSSO' | 'useOrganizationList' | 'useOrganization';
+   caller: 'OrganizationSwitcher' | 'OrganizationProfile' | 'OrganizationList' | 'CreateOrganization' | 'TaskChooseOrganization' | 'ConfigureSSO' | 'useOrganizationList' | 'useOrganization';
    onClose?: () => void;
  };

Static analyzer: Breaking change in type alias __internal_AttemptToEnableEnvironmentSettingParams: Type changed: {for:'organizations';caller:'ConfigureSSO'|'CreateOrganization'|'InviteMembers'|'OrganizationList'|'OrganizationProfile…{for:'organizations';caller:'ConfigureSSO'|'CreateOrganization'|'OrganizationList'|'OrganizationProfile'|'OrganizationS…

🤖 AI review (confirmed) (90%): The caller union in __internal_AttemptToEnableEnvironmentSettingParams had 'InviteMembers' removed; this is an input parameter type, so callers passing caller: 'InviteMembers' will fail to compile.

Migration: Remove any usage of caller: 'InviteMembers' when calling __internal_attemptToEnableEnvironmentSetting; use another valid caller value instead.

Changed: __internal_EnableOrganizationsPromptProps
// ... 1 unchanged line elided ...
    onSuccess?: () => void;
    onClose?: () => void;
  } & {
-   caller: 'OrganizationSwitcher' | 'OrganizationProfile' | 'InviteMembers' | 'OrganizationList' | 'useOrganizationList' | 'useOrganization';
+   caller: 'OrganizationSwitcher' | 'OrganizationProfile' | 'OrganizationList' | 'useOrganizationList' | 'useOrganization';
  };

Static analyzer: Breaking change in type alias __internal_EnableOrganizationsPromptProps: Type changed: {caller:'InviteMembers'|'OrganizationList'|'OrganizationProfile'|'OrganizationSwitcher'|'useOrganization'|'useOrganizat…{caller:'OrganizationList'|'OrganizationProfile'|'OrganizationSwitcher'|'useOrganization'|'useOrganizationList';}&{onSu…

🤖 AI review (confirmed) (90%): The caller union in __internal_EnableOrganizationsPromptProps had 'InviteMembers' removed; this is an input parameter type, so callers passing caller: 'InviteMembers' will fail to compile.

Migration: Remove any usage of caller: 'InviteMembers' when calling __internal_openEnableOrganizationsPrompt; use another valid caller value instead.

Changed: AttackProtectionData
- type AttackProtectionData = {
-   enumeration_protection: {
-     enabled: boolean;
-   };
- };

Static analyzer: Removed type alias AttackProtectionData

🤖 AI review (confirmed) (95%): The exported type alias AttackProtectionData was removed entirely, breaking any consumer code that references it by name.

Migration: Inline the type { enumeration_protection: { enabled: boolean } } wherever AttackProtectionData was previously referenced.

Changed: Clerk.closeInviteMembers
- closeInviteMembers: () => void;

Static analyzer: Removed property Clerk.closeInviteMembers

🤖 AI review (confirmed) (95%): The closeInviteMembers method was removed from the Clerk interface, breaking any consumer code that calls it.

Migration: Remove all calls to clerk.closeInviteMembers() from consumer code.

Changed: Clerk.openInviteMembers
- openInviteMembers: (props?: InviteMembersModalProps) => void;

Static analyzer: Removed property Clerk.openInviteMembers

🤖 AI review (confirmed) (95%): The openInviteMembers method was removed from the Clerk interface, breaking any consumer code that calls it.

Migration: Remove all calls to clerk.openInviteMembers() from consumer code.

Changed: EnterpriseOAuthConfigJSON.auth_url
- auth_url?: string;

Static analyzer: Removed property EnterpriseOAuthConfigJSON.auth_url

🤖 AI review (confirmed) (90%): The optional auth_url property was removed from EnterpriseOAuthConfigJSON; consumers reading or assigning this field will break.

Migration: Remove references to auth_url on EnterpriseOAuthConfigJSON objects in consumer code.

Changed: EnterpriseOAuthConfigJSON.redirect_uri
- redirect_uri?: string;

Static analyzer: Removed property EnterpriseOAuthConfigJSON.redirect_uri

🤖 AI review (confirmed) (90%): The optional redirect_uri property was removed from EnterpriseOAuthConfigJSON; consumers reading or assigning this field will break.

Migration: Remove references to redirect_uri on EnterpriseOAuthConfigJSON objects in consumer code.

Changed: EnterpriseOAuthConfigJSON.token_url
- token_url?: string;

Static analyzer: Removed property EnterpriseOAuthConfigJSON.token_url

🤖 AI review (confirmed) (90%): The optional token_url property was removed from EnterpriseOAuthConfigJSON; consumers reading or assigning this field will break.

Migration: Remove references to token_url on EnterpriseOAuthConfigJSON objects in consumer code.

Changed: EnterpriseOAuthConfigJSON.user_info_url
- user_info_url?: string;

Static analyzer: Removed property EnterpriseOAuthConfigJSON.user_info_url

🤖 AI review (confirmed) (90%): The optional user_info_url property was removed from EnterpriseOAuthConfigJSON; consumers reading or assigning this field will break.

Migration: Remove references to user_info_url on EnterpriseOAuthConfigJSON objects in consumer code.

Changed: EnterpriseOAuthConfigResource.authUrl
- authUrl?: string;

Static analyzer: Removed property EnterpriseOAuthConfigResource.authUrl

🤖 AI review (confirmed) (90%): The optional authUrl property was removed from EnterpriseOAuthConfigResource; consumers reading this field will fail to compile.

Migration: Remove references to authUrl on EnterpriseOAuthConfigResource objects in consumer code.

Changed: EnterpriseOAuthConfigResource.redirectUri
- redirectUri?: string;

Static analyzer: Removed property EnterpriseOAuthConfigResource.redirectUri

🤖 AI review (confirmed) (90%): The optional redirectUri property was removed from EnterpriseOAuthConfigResource; consumers reading this field will fail to compile.

Migration: Remove references to redirectUri on EnterpriseOAuthConfigResource objects in consumer code.

Changed: EnterpriseOAuthConfigResource.tokenUrl
- tokenUrl?: string;

Static analyzer: Removed property EnterpriseOAuthConfigResource.tokenUrl

🤖 AI review (confirmed) (90%): The optional tokenUrl property was removed from EnterpriseOAuthConfigResource; consumers reading this field will fail to compile.

Migration: Remove references to tokenUrl on EnterpriseOAuthConfigResource objects in consumer code.

Changed: EnterpriseOAuthConfigResource.userInfoUrl
- userInfoUrl?: string;

Static analyzer: Removed property EnterpriseOAuthConfigResource.userInfoUrl

🤖 AI review (confirmed) (90%): The optional userInfoUrl property was removed from EnterpriseOAuthConfigResource; consumers reading this field will fail to compile.

Migration: Remove references to userInfoUrl on EnterpriseOAuthConfigResource objects in consumer code.

Changed: FieldId
- type FieldId = 'firstName' | 'lastName' | 'name' | 'slug' | 'emailAddress' | 'phoneNumber' | 'currentPassword' | 'newPassword' | 'signOutOfOtherSessions' | 'passkeyName' | 'password' | 'confirmPassword' | 'identifier' | 'username' | 'code' | 'role' | 'deleteConfirmation' | 'deleteOrganizationConfirmation' | 'enrollmentMode' | 'affiliationEmailAddress' | 'deleteExistingInvitationsSuggestions' | 'legalAccepted' | 'apiKeyDescription' | 'apiKeyExpirationDate' | 'apiKeyRevokeConfirmation' | 'apiKeySecret' | 'idpCertificate' | 'idpEntityId' | 'idpMetadata' | 'idpMetadataUrl' | 'idpSsoUrl' | 'discoveryUrl' | 'authUrl' | 'tokenUrl' | 'userInfoUrl' | 'clientId' | 'clientSecret' | 'redirectUri' | 'acsUrl' | 'spEntityId' | 'web3WalletName' | 'domain';
+ type FieldId = 'firstName' | 'lastName' | 'name' | 'slug' | 'emailAddress' | 'phoneNumber' | 'currentPassword' | 'newPassword' | 'signOutOfOtherSessions' | 'passkeyName' | 'password' | 'confirmPassword' | 'identifier' | 'username' | 'code' | 'role' | 'deleteConfirmation' | 'deleteOrganizationConfirmation' | 'enrollmentMode' | 'affiliationEmailAddress' | 'deleteExistingInvitationsSuggestions' | 'legalAccepted' | 'apiKeyDescription' | 'apiKeyExpirationDate' | 'apiKeyRevokeConfirmation' | 'apiKeySecret' | 'idpCertificate' | 'idpEntityId' | 'idpMetadata' | 'idpMetadataUrl' | 'idpSsoUrl' | 'acsUrl' | 'spEntityId' | 'web3WalletName' | 'domain';

Static analyzer: Breaking change in type alias FieldId: Type changed: 'acsUrl'|'affiliationEmailAddress'|'apiKeyDescription'|'apiKeyExpirationDate'|'apiKeyRevokeConfirmation'|'apiKeySecret'…'acsUrl'|'affiliationEmailAddress'|'apiKeyDescription'|'apiKeyExpirationDate'|'apiKeyRevokeConfirmation'|'apiKeySecret'…

🤖 AI review (confirmed) (95%): The FieldId union had 'authUrl', 'tokenUrl', 'userInfoUrl', 'clientId', 'clientSecret', 'redirectUri', and 'discoveryUrl' removed; consumers using any of those literal values as a FieldId will fail to compile.

Migration: Remove or replace references to the removed FieldId literal values ('authUrl', 'tokenUrl', 'userInfoUrl', 'clientId', 'clientSecret', 'redirectUri', 'discoveryUrl') in consumer code.

Changed: InviteMembersButtonProps
- type InviteMembersButtonProps = InviteMembersProps;

Static analyzer: Removed type alias InviteMembersButtonProps

🤖 AI review (confirmed) (95%): The exported type alias InviteMembersButtonProps was removed entirely, breaking any consumer code that references it by name.

Migration: Inline the underlying props type or remove references to InviteMembersButtonProps from consumer code.

Changed: InviteMembersModalProps
- type InviteMembersModalProps = InviteMembersProps & {
-   getContainer?: () => HTMLElement | null;
- };

Static analyzer: Removed type alias InviteMembersModalProps

🤖 AI review (confirmed) (95%): The exported type alias InviteMembersModalProps was removed entirely, breaking any consumer code that references it by name.

Migration: Inline the underlying props type or remove references to InviteMembersModalProps from consumer code.

Changed: InviteMembersProps
- type InviteMembersProps = {
-   appearance?: OrganizationProfileProps['appearance'];
- };

Static analyzer: Removed type alias InviteMembersProps

🤖 AI review (confirmed) (95%): The exported type alias InviteMembersProps was removed entirely, breaking any consumer code that references it by name.

Migration: Inline the underlying props type { appearance?: OrganizationProfileProps['appearance'] } or remove references to InviteMembersProps from consumer code.

Changed: UserSettingsJSON.attack_protection
- attack_protection?: AttackProtectionData;

Static analyzer: Removed property UserSettingsJSON.attack_protection

🤖 AI review (confirmed) (90%): The attack_protection property was removed from UserSettingsJSON; consumers reading this field will fail to compile.

Migration: Remove references to attack_protection on UserSettingsJSON objects in consumer code.

Changed: UserSettingsResource.attackProtection
- attackProtection: AttackProtectionData;

Static analyzer: Removed property UserSettingsResource.attackProtection

🤖 AI review (confirmed) (90%): The attackProtection property was removed from UserSettingsResource; consumers reading this field will fail to compile.

Migration: Remove references to attackProtection on UserSettingsResource objects in consumer code.

🟡 Non-breaking Changes (2)

Modified: __internal_LocalizationResource
Diff (before: 2066 lines, after: 1988 lines). Click to expand.
// ... 429 unchanged lines elided ...
          titleNewTab: LocalizationValue;
          subtitleNewTab: LocalizationValue;
        };
-       verifiedTransferable: {
-         title: LocalizationValue;
-         subtitle: LocalizationValue;
-       };
-       loading: {
-         title: LocalizationValue;
-         subtitle: LocalizationValue;
-       };
-       failed: {
-         title: LocalizationValue;
-         subtitle: LocalizationValue;
-       };
-       expired: {
-         title: LocalizationValue;
-         subtitle: LocalizationValue;
-       };
-       clientMismatch: {
-         title: LocalizationValue;
-         subtitle: LocalizationValue;
-       };
-     };
-     phoneCode: {
-       title: LocalizationValue;
-       subtitle: LocalizationValue;
-       formTitle: LocalizationValue;
-       resendButton: LocalizationValue;
-     };
-     alternativePhoneCodeProvider: {
-       formTitle: LocalizationValue;
-       resendButton: LocalizationValue;
// ... 1023 more lines elided ...
-               label: LocalizationValue;
-               placeholder: LocalizationValue;
-             };
-             userInfoUrl: {
-               label: LocalizationValue;
-               placeholder: LocalizationValue;
-             };
-           };
-           modes: {
-             ariaLabel: LocalizationValue;
-             discoveryUrl: LocalizationValue;
-             manual: LocalizationValue;
-           };
-         };
-         credentialsStep: {
-           headerSubtitle: LocalizationValue;
-           clientId: {
-             label: LocalizationValue;
-             placeholder: LocalizationValue;
-           };
-           clientSecret: {
-             label: LocalizationValue;
-             placeholder: LocalizationValue;
-           };
-           paragraph: LocalizationValue;
-         };
-       };
-       unsupportedProvider: {
-         title: LocalizationValue;
-         description: LocalizationValue;
+       loading: {
+         title: LocalizationValue;
+         subtitle: LocalizationValue;
+       };
+       failed: {
+         title: LocalizationValue;
+         subtitle: LocalizationValue;
+       };
+       expired: {
+         title: LocalizationValue;
+         subtitle: LocalizationValue;
+       };
+       clientMismatch: {
+         title: LocalizationValue;
+         subtitle: LocalizationValue;
+       };
+     };
+     phoneCode: {
+       title: LocalizationValue;
+       subtitle: LocalizationValue;
+       formTitle: LocalizationValue;
+       resendButton: LocalizationValue;
+     };
+     alternativePhoneCodeProvider: {
+       formTitle: LocalizationValue;
+       resendButton: LocalizationValue;
+       subtitle: LocalizationValue;
+       title: LocalizationValue<'provider'>;
+     };
+     emailCodeMfa: {
// ... 945 more lines elided ...
+           saml_response_relaystate_missing: {
+             description: LocalizationValue;
+           };
+           saml_email_address_domain_mismatch: {
+             description: LocalizationValue;
+           };
+           oauth_access_denied: {
+             description: LocalizationValue;
+           };
+           oauth_token_exchange_error: {
+             description: LocalizationValue;
+           };
+           oauth_fetch_user_error: {
+             intro: LocalizationValue;
+             step1: LocalizationValue;
+             step2: LocalizationValue;
+           };
+         };
+       };
+     };
+     configureStep: {
+       attributeMappingTable: {
+         badges: {
+           required: LocalizationValue;
+           optional: LocalizationValue;
+         };
+       };
+       activeConnectionWarning: {
+         title: LocalizationValue;
+         dismiss: LocalizationValue;
        };
        samlOkta: {
          mainHeaderTitle: LocalizationValue;
// ... 548 unchanged lines elided ...

Static analyzer: Breaking change in type alias __internal_LocalizationResource: Type changed: {locale:string;maintenanceMode:import("@clerk/shared").LocalizationValue;roles:{[r:string]:import("@clerk/shared").Loca…{locale:string;maintenanceMode:import("@clerk/shared").LocalizationValue;roles:{[r:string]:import("@clerk/shared").Loca…

🤖 AI review (reclassified as non-breaking) (70%): The __internal_LocalizationResource type is used only as an input to LocalizationResource via DeepPartial<DeepLocalizationWithoutObjects<...>>, meaning consumers supply optional partial values; the diff appears to be removing localization keys that belonged to the removed InviteMembers component, which consumers could omit entirely. The elided line counts differ (1986 vs 1908) suggesting key removals, but since all fields in a DeepPartial are optional, existing consumers who do not reference removed keys are unaffected. However, consumers who do reference removed localization keys would break.

Modified: ClerkOptions
// ... 26 unchanged lines elided ...
      rethrowOfflineNetworkErrors: boolean;
      commerce: boolean;
      runtimeEnvironment: 'headless';
+     oidcSelfServe: boolean;
    }, Record<string, any>>;
    __internal_keyless_claimKeylessApplicationUrl?: string;
    __internal_keyless_copyInstanceKeysUrl?: string;
// ... 4 unchanged lines elided ...

Static analyzer: Breaking change in type alias ClerkOptions: Type changed: import("@clerk/shared").AfterMultiSessionSingleSignOutUrl&import("@clerk/shared").AfterSignOutUrl&import("@clerk/shared…import("@clerk/shared").AfterMultiSessionSingleSignOutUrl&import("@clerk/shared").AfterSignOutUrl&import("@clerk/shared…

🤖 AI review (reclassified as non-breaking) (90%): The only change to ClerkOptions is the addition of an optional oidcSelfServe: boolean property inside the experimental field's Autocomplete<...> union; per rule 14, Autocomplete<X, Record<string, any>> contains an absorbing Record<string, any> arm so adding a new literal key is non-breaking, and adding an optional property to an input type is also non-breaking.

Subpath ./react

🟡 Non-breaking Changes (1)

Modified: UseOrganizationDomainsParams
// ... 1 unchanged line elided ...
    enabled?: boolean;
    keepPreviousData?: boolean;
    enrollmentMode?: OrganizationEnrollmentMode;
+   createEnrollmentMode?: OrganizationEnrollmentMode;
    onOwnershipVerified?: (verifiedDomains: OrganizationDomainResource[]) => void | Promise<void>;
  };

Static analyzer: Breaking change in type alias UseOrganizationDomainsParams: Type changed: {enabled?:boolean;keepPreviousData?:boolean;enrollmentMode?:import("@clerk/shared").~OrganizationEnrollmentMode;onOwner…{enabled?:boolean;keepPreviousData?:boolean;enrollmentMode?:import("@clerk/shared").~OrganizationEnrollmentMode;createE…

🤖 AI review (reclassified as non-breaking) (95%): A new optional property createEnrollmentMode? was added to UseOrganizationDomainsParams. Per rule 9, adding a new optional property is non-breaking for both input and output types: existing consumers neither passed it nor relied on reading it.


@clerk/backend

Version: 3.16.0 → 3.13.2
Recommended bump: MAJOR

🔴 Breaking Changes (19)

Changed: BillingSubscription.undefined

  constructor(
      id: string, 
-     instanceId: string, 
      status: BillingSubscriptionJSON['status'], 
      payerId: string, 
      createdAt: number, 
      updatedAt: number, 
      activeAt: number | null, 
      pastDueAt: number | null, 
      subscriptionItems: BillingSubscriptionItem[], 
      nextPayment: {
          date: number;
          amount: BillingMoneyAmount;
-         perUnitTotals?: BillingPerUnitTotal[];
-         totals?: BillingTotals;
      } | null, 
      eligibleForFreeTrial: boolean);

Static analyzer: Breaking change in constructor BillingSubscription.undefined: Parameter instanceId type changed: stringimport("@clerk/backend").BillingSubscriptionJSON['status']; Parameter status type changed: import("@clerk/backend").BillingSubscriptionJSON['status']string; Parameter payerId type changed: stringnumber; Parameter updatedAt type changed: numbernull|number; Parameter pastDueAt type changed: null|numberimport("@clerk/backend").BillingSubscriptionItem[]; Parameter subscriptionItems type changed: import("@clerk/backend").BillingSubscriptionItem[]null|{date:number;amount:import("@clerk/shared").BillingMoneyAmount;}; Parameter nextPayment type changed: null|{date:number;amount:import("@clerk/shared").BillingMoneyAmount;perUnitTotals?:import("@clerk/shared").BillingPerUnitTotal[];totals?:import("@clerk/shared").BillingTotals;}boolean; Parameter eligibleForFreeTrial was removed

🤖 AI review (confirmed) (95%): The BillingSubscription constructor had instanceId: string removed as the second parameter, shifting all subsequent parameter positions; consumers constructing this class directly will pass wrong values to wrong parameters.

Migration: Update all direct new BillingSubscription(...) call sites to drop the instanceId argument and remove the perUnitTotals/totals fields from the nextPayment argument.

Changed: BillingSubscription.instanceId

- readonly instanceId: string;

Static analyzer: Removed property BillingSubscription.instanceId

🤖 AI review (confirmed) (97%): The instanceId readonly property was removed from BillingSubscription; consumers reading subscription.instanceId will get a compile error.

Migration: Remove all references to .instanceId on BillingSubscription instances.

Changed: BillingSubscription.nextPayment

  readonly nextPayment: {
          date: number;
          amount: BillingMoneyAmount;
-         perUnitTotals?: BillingPerUnitTotal[];
-         totals?: BillingTotals;
      } | null;

Static analyzer: Breaking change in property BillingSubscription.nextPayment: Type changed: null|{date:number;amount:import("@clerk/shared").BillingMoneyAmount;perUnitTotals?:import("@clerk/shared").BillingPerUn…null|{date:number;amount:import("@clerk/shared").BillingMoneyAmount;}

🤖 AI review (confirmed) (95%): The nextPayment property on BillingSubscription dropped the optional perUnitTotals and totals fields; consumers reading those fields will get a type error.

Migration: Remove any code that accesses .nextPayment.perUnitTotals or .nextPayment.totals on a BillingSubscription instance.

Changed: BillingSubscriptionItem.undefined

  constructor(
      id: string, 
-     instanceId: string, 
      status: BillingSubscriptionItemJSON['status'], 
      planPeriod: 'month' | 'annual', 
      periodStart: number, 
      nextPayment: {
-         amount: BillingMoneyAmount;
+         amount: number;
          date: number;
-         perUnitTotals?: BillingPerUnitTotal[];
-         totals?: BillingTotals;
      } | null | undefined, 
      amount: BillingMoneyAmount | undefined, 
      plan: BillingPlan | null, 
      planId: string | null, 
-     priceId: string | null, 
      createdAt: number, 
      updatedAt: number, 
      periodEnd: number | null, 
      canceledAt: number | null, 
      pastDueAt: number | null, 
      endedAt: number | null, 
      payerId: string | undefined, 
-     isFreeTrial: boolean, 
-     lifetimePaid?: BillingMoneyAmount | undefined, 
-     seats?: BillingSubscriptionItemSeats | undefined);
+     isFreeTrial?: boolean | undefined, 
+     lifetimePaid?: BillingMoneyAmount | undefined);

Static analyzer: Breaking change in constructor BillingSubscriptionItem.undefined: Parameter instanceId type changed: stringimport("@clerk/backend").BillingSubscriptionItemJSON['status']; Parameter status type changed: import("@clerk/backend").BillingSubscriptionItemJSON['status']'annual'|'month'; Parameter planPeriod type changed: 'annual'|'month'number; Parameter periodStart type changed: numbernull|undefined|{amount:number;date:number;}; Parameter nextPayment type changed: null|undefined|{amount:import("@clerk/shared").BillingMoneyAmount;date:number;perUnitTotals?:import("@clerk/shared").BillingPerUnitTotal[];totals?:import("@clerk/shared").BillingTotals;}import("@clerk/shared").BillingMoneyAmount|undefined; Parameter amount type changed: import("@clerk/shared").BillingMoneyAmount|undefinedimport("@clerk/backend").BillingPlan|null; Parameter plan type changed: import("@clerk/backend").BillingPlan|nullnull|string; Parameter planId type changed: null|stringnumber; Parameter priceId type changed: null|stringnumber; Parameter createdAt type changed: numbernull|number; Parameter updatedAt type changed: numbernull|number; Parameter pastDueAt type changed: null|numberstring|undefined; Parameter endedAt became optional; Parameter endedAt type changed: null|numberboolean|undefined; Parameter payerId became optional; Parameter payerId type changed: string|undefinedimport("@clerk/shared").BillingMoneyAmount|undefined; Parameter isFreeTrial was removed; Parameter lifetimePaid was removed; Parameter seats was removed

🤖 AI review (confirmed) (95%): The BillingSubscriptionItem constructor had instanceId, priceId, and seats parameters removed, and nextPayment.amount type changed from BillingMoneyAmount to number; all direct construction call sites are broken.

Migration: Update all new BillingSubscriptionItem(...) call sites to drop the instanceId and priceId arguments, remove seats, and change nextPayment.amount from a BillingMoneyAmount object to a plain number.

Changed: BillingSubscriptionItem.instanceId

- readonly instanceId: string;

Static analyzer: Removed property BillingSubscriptionItem.instanceId

🤖 AI review (confirmed) (97%): The instanceId readonly property was removed from BillingSubscriptionItem; consumers reading .instanceId will get a compile error.

Migration: Remove all references to .instanceId on BillingSubscriptionItem instances.

Changed: BillingSubscriptionItem.isFreeTrial

- readonly isFreeTrial: boolean;
+ readonly isFreeTrial?: boolean | undefined;

Static analyzer: Breaking change in property BillingSubscriptionItem.isFreeTrial: Member became optional; Type changed: booleanboolean|undefined

🤖 AI review (confirmed) (90%): The isFreeTrial property changed from required boolean to optional boolean | undefined on the output class BillingSubscriptionItem; consumers who relied on it always being present (e.g. strict boolean checks) may see unexpected undefined.

Migration: Add a null/undefined guard when reading .isFreeTrial on BillingSubscriptionItem instances.

Changed: BillingSubscriptionItem.nextPayment

  readonly nextPayment: {
-         amount: BillingMoneyAmount;
+         amount: number;
          date: number;
-         perUnitTotals?: BillingPerUnitTotal[];
-         totals?: BillingTotals;
      } | null | undefined;

Static analyzer: Breaking change in property BillingSubscriptionItem.nextPayment: Type changed: null|undefined|{amount:import("@clerk/shared").BillingMoneyAmount;date:number;perUnitTotals?:import("@clerk/shared").Bi…null|undefined|{amount:number;date:number;}

🤖 AI review (confirmed) (95%): The nextPayment.amount field on BillingSubscriptionItem changed from BillingMoneyAmount (an object) to number; consumers accessing .nextPayment.amount as an object will get runtime/type errors.

Migration: Update code reading .nextPayment.amount on BillingSubscriptionItem to treat it as a plain number instead of a BillingMoneyAmount object.

Changed: BillingSubscriptionItem.priceId

- readonly priceId: string | null;

Static analyzer: Removed property BillingSubscriptionItem.priceId

🤖 AI review (confirmed) (97%): The priceId readonly property was removed from BillingSubscriptionItem; consumers reading .priceId will get a compile error.

Migration: Remove all references to .priceId on BillingSubscriptionItem instances.

Changed: BillingSubscriptionItem.seats

- readonly seats?: BillingSubscriptionItemSeats | undefined;

Static analyzer: Removed property BillingSubscriptionItem.seats

🤖 AI review (confirmed) (97%): The optional seats readonly property was removed from BillingSubscriptionItem; consumers reading .seats will get a compile error.

Migration: Remove all references to .seats on BillingSubscriptionItem instances.

Changed: BillingSubscriptionItemJSON.amount

- amount?: BillingMoneyAmountJSON | null;
+ amount: BillingMoneyAmountJSON;

Static analyzer: Breaking change in property BillingSubscriptionItemJSON.amount: Member is no longer optional; Type changed: import("@clerk/backend").~BillingMoneyAmountJSON|nullimport("@clerk/backend").~BillingMoneyAmountJSON

🤖 AI review (confirmed) (90%): BillingSubscriptionItemJSON.amount changed from optional BillingMoneyAmountJSON | null to required BillingMoneyAmountJSON; consumers constructing objects of this interface type must now always provide amount.

Migration: Ensure all objects assigned to BillingSubscriptionItemJSON include a non-null amount: BillingMoneyAmountJSON field.

Changed: BillingSubscriptionItemJSON.instance_id

- instance_id: string;

Static analyzer: Removed property BillingSubscriptionItemJSON.instance_id

🤖 AI review (confirmed) (97%): The required instance_id property was removed from BillingSubscriptionItemJSON; consumers who constructed objects conforming to this interface included it, and consumers reading it will get a type error.

Migration: Remove instance_id from any objects typed as BillingSubscriptionItemJSON and stop reading it from such objects.

Changed: BillingSubscriptionItemJSON.lifetime_paid

- lifetime_paid?: BillingMoneyAmountJSON | null;
+ lifetime_paid: BillingMoneyAmountJSON | null;

Static analyzer: Breaking change in property BillingSubscriptionItemJSON.lifetime_paid: Member is no longer optional

🤖 AI review (confirmed) (90%): BillingSubscriptionItemJSON.lifetime_paid changed from optional to required; consumers constructing objects of this interface type must now always include lifetime_paid.

Migration: Add a lifetime_paid: BillingMoneyAmountJSON | null field to all objects typed as BillingSubscriptionItemJSON.

Changed: BillingSubscriptionItemJSON.next_payment

- next_payment?: BillingSubscriptionItemNextPaymentJSON | null;
+ next_payment?: {
+         amount: number;
+         date: number;
+     } | null;

Static analyzer: Breaking change in property BillingSubscriptionItemJSON.next_payment: Type changed: import("@clerk/shared").BillingSubscriptionItemNextPaymentJSON|nullnull|{amount:number;date:number;}

🤖 AI review (confirmed) (85%): The next_payment field type changed from BillingSubscriptionItemNextPaymentJSON | null (a named type that included perUnitTotals, totals, etc.) to an inline { amount: number; date: number; } | null; the amount type changed from a structured object to number, breaking any consumer constructing or reading this field structurally.

Migration: Update all uses of BillingSubscriptionItemJSON.next_payment to use { amount: number; date: number; } instead of BillingSubscriptionItemNextPaymentJSON.

Changed: BillingSubscriptionItemJSON.price_id

- price_id?: string;

Static analyzer: Removed property BillingSubscriptionItemJSON.price_id

🤖 AI review (confirmed) (97%): The optional price_id property was removed from BillingSubscriptionItemJSON; consumers reading .price_id will get a compile error.

Migration: Remove all references to price_id on objects typed as BillingSubscriptionItemJSON.

Changed: BillingSubscriptionItemJSON.seats

- seats?: BillingSubscriptionItemSeatsJSON;

Static analyzer: Removed property BillingSubscriptionItemJSON.seats

🤖 AI review (confirmed) (97%): The optional seats property was removed from BillingSubscriptionItemJSON; consumers reading .seats will get a compile error.

Migration: Remove all references to seats on objects typed as BillingSubscriptionItemJSON.

Changed: BillingSubscriptionItemJSON.status

  status: BillingSubscriptionItemStatus;

Static analyzer: Breaking change in property BillingSubscriptionItemJSON.status: Type changed: import("@clerk/backend").BillingSubscriptionItemStatusimport("@clerk/backend").~BillingSubscriptionItemStatus

🤖 AI review (confirmed) (85%): The status property type changed from the exported BillingSubscriptionItemStatus to a non-resolvable ~BillingSubscriptionItemStatus (tilde prefix indicates a non-public/chunk reference); consumers who imported BillingSubscriptionItemStatus by name will lose the type.

Migration: Replace references to the imported BillingSubscriptionItemStatus type with an inline union of the status string literals.

Changed: BillingSubscriptionItemStatus

- export type BillingSubscriptionItemStatus = 
- /** The Subscription Item is in the abandoned state. */
- 'abandoned'
- /** The Subscription Item is active. */
-  | 'active'
- /** The Subscription Item is canceled. */
-  | 'canceled'
- /** The Subscription Item has ended. */
-  | 'ended'
- /** The Subscription Item has expired. */
-  | 'expired'
- /** The Subscription Item is incomplete. */
-  | 'incomplete'
- /** The Subscription Item has a past-due payment. */
-  | 'past_due'
- /** The Subscription Item is upcoming. */
-  | 'upcoming';

Static analyzer: Removed type alias BillingSubscriptionItemStatus

🤖 AI review (confirmed) (97%): The BillingSubscriptionItemStatus type alias was removed from the public exports; consumers who imported and used this type by name will get a compile error.

Migration: Replace all uses of BillingSubscriptionItemStatus with the inline union type 'active' | 'canceled' | 'ended' | 'expired' | 'incomplete' | 'past_due' | 'upcoming' | 'abandoned'.

Changed: BillingSubscriptionJSON.instance_id

- instance_id: string;

Static analyzer: Removed property BillingSubscriptionJSON.instance_id

🤖 AI review (confirmed) (97%): The required instance_id property was removed from BillingSubscriptionJSON; consumers constructing or reading this property on objects typed as BillingSubscriptionJSON will get a compile error.

Migration: Remove instance_id from any objects typed as BillingSubscriptionJSON and stop reading it from such objects.

Changed: BillingSubscriptionJSON.next_payment

  next_payment?: {
          date: number;
          amount: BillingMoneyAmountJSON;
-         per_unit_totals?: BillingPerUnitTotalJSON[];
-         totals?: SharedBillingTotalsJSON;
      };

Static analyzer: Breaking change in property BillingSubscriptionJSON.next_payment: Type changed: {date:number;amount:import("@clerk/backend").~BillingMoneyAmountJSON;per_unit_totals?:import("@clerk/shared").BillingPe…{date:number;amount:import("@clerk/backend").~BillingMoneyAmountJSON;}

🤖 AI review (confirmed) (90%): The next_payment field in BillingSubscriptionJSON dropped the optional per_unit_totals and totals properties; consumers constructing or reading those sub-fields will get compile errors.

Migration: Remove any code that reads or writes per_unit_totals or totals on BillingSubscriptionJSON.next_payment.

🟡 Non-breaking Changes (1)

Modified: BillingSubscriptionItemJSON.is_free_trial

- is_free_trial: boolean;
+ is_free_trial?: boolean;

Static analyzer: Modified property BillingSubscriptionItemJSON.is_free_trial: Member became optional

🤖 AI review (confirmed) (97%): BillingSubscriptionItemJSON.is_free_trial became optional, which is non-breaking for consumers providing this interface as input (they no longer need to supply it) and is also non-breaking for readers (they already had to handle it as boolean).


@clerk/expo

Version: 4.2.2 → 4.1.0
Recommended bump: MAJOR

Subpath ./experimental

🔴 Breaking Changes (4)

Changed: StartSSOFlowParams
- export type StartSSOFlowParams = {
-     redirectUrl?: string;
-     unsafeMetadata?: SignUpUnsafeMetadata;
-     authSessionOptions?: Pick<WebBrowser.AuthSessionOpenOptions, 'showInRecents'>;
- } & ({
-     strategy: OAuthStrategy;
- } | {
-     strategy: EnterpriseSSOStrategy;
-     identifier: string;
- });

Static analyzer: Removed type alias StartSSOFlowParams

🤖 AI review (confirmed) (95%): The exported type alias StartSSOFlowParams was removed, so any consumer who imported and referenced it will fail to compile.

Migration: Import or redefine StartSSOFlowParams locally, or update to the replacement type exported by the new API.

Changed: StartSSOFlowReturnType
- export type StartSSOFlowReturnType = {
-     createdSessionId: string | null;
-     authSessionResult: WebBrowser.WebBrowserAuthSessionResult | null;
-     signIn?: SignInFutureResource | null;
-     signUp?: SignUpFutureResource | null;
- };

Static analyzer: Removed type alias StartSSOFlowReturnType

🤖 AI review (confirmed) (95%): The exported type alias StartSSOFlowReturnType was removed, so any consumer who imported and referenced it will fail to compile.

Migration: Import or redefine StartSSOFlowReturnType locally, or update to the replacement type exported by the new API.

Changed: useSSO
- export declare function useSSO(): UseSSOReturn;

Static analyzer: Removed function useSSO

🤖 AI review (confirmed) (97%): The exported function useSSO was removed entirely, so any consumer calling it will fail to compile.

Migration: Replace calls to useSSO with the equivalent hook or function provided by the updated package API.

Changed: UseSSOReturn
- export type UseSSOReturn = {
-     startSSOFlow: (params: StartSSOFlowParams) => Promise<StartSSOFlowReturnType>;
- };

Static analyzer: Removed type alias UseSSOReturn

🤖 AI review (confirmed) (95%): The exported type alias UseSSOReturn was removed, so any consumer who imported and referenced it will fail to compile.

Migration: Import or redefine UseSSOReturn locally, or update to the replacement type exported by the new API.

Subpath ./native

🔴 Breaking Changes (2)

Changed: EmbeddedNavigationProps
- export interface EmbeddedNavigationProps

Static analyzer: Removed interface EmbeddedNavigationProps

🤖 AI review (confirmed) (85%): EmbeddedNavigationProps was a publicly exported interface; removing it breaks any consumer code that explicitly references or imports this type.

Migration: Remove any direct references to EmbeddedNavigationProps in consumer code; the interface is no longer exported and its only property (onHostBack) has been removed from AuthViewProps as well.

Changed: EmbeddedNavigationProps.onHostBack
- onHostBack?: () => void;

Static analyzer: Removed property EmbeddedNavigationProps.onHostBack

🤖 AI review (confirmed) (90%): AuthViewProps previously extended EmbeddedNavigationProps, which contributed the optional onHostBack property; since AuthViewProps no longer extends it, consumers who passed onHostBack to AuthView will now receive a type error.

Migration: Remove any usage of the onHostBack prop when calling AuthView, as it is no longer accepted.

🟡 Non-breaking Changes (1)

Modified: AuthView
- export declare function AuthView(input: AuthViewProps): import("react/jsx-runtime").JSX.Element;
+ export declare function AuthView(input: AuthViewProps): ReactElement;

Static analyzer: Breaking change in function AuthView: Return type changed: import("@types/react").JSX.Elementimport("@types/react").React.ReactElement

🤖 AI review (reclassified as non-breaking) (90%): JSX.Element and React.ReactElement are structurally equivalent (JSX.Element is defined as React.ReactElement in React's type definitions), and the return type of AuthView is an output position, so narrowing/aliasing to an equivalent type does not break consumers.


@clerk/clerk-js

Version: 6.27.0 → 6.25.10
Recommended bump: MAJOR

Subpath .

🔴 Breaking Changes (2)

Changed: Clerk.closeInviteMembers
- closeInviteMembers: () => void;

Static analyzer: Removed property Clerk.closeInviteMembers

🤖 AI review (confirmed) (97%): The closeInviteMembers method was removed from the Clerk interface, so any consumer calling clerk.closeInviteMembers() will no longer compile.

Migration: Remove calls to clerk.closeInviteMembers() or implement the functionality inline.

Changed: Clerk.openInviteMembers
- openInviteMembers: (props?: InviteMembersModalProps) => void;

Static analyzer: Removed property Clerk.openInviteMembers

🤖 AI review (confirmed) (97%): The openInviteMembers method was removed from the Clerk interface, so any consumer calling clerk.openInviteMembers(...) will no longer compile.

Migration: Remove calls to clerk.openInviteMembers(props) or use an alternative API to open the invite members UI.

Subpath ./no-rhc

🔴 Breaking Changes (2)

Changed: Clerk.closeInviteMembers
- closeInviteMembers: () => void;

Static analyzer: Removed property Clerk.closeInviteMembers

🤖 AI review (confirmed) (97%): The closeInviteMembers method was removed from the Clerk interface; any consumer calling clerk.closeInviteMembers() will fail to compile.

Migration: Remove calls to clerk.closeInviteMembers() or check for its existence at runtime before calling it.

Changed: Clerk.openInviteMembers
- openInviteMembers: (props?: InviteMembersModalProps) => void;

Static analyzer: Removed property Clerk.openInviteMembers

🤖 AI review (confirmed) (97%): The openInviteMembers method was removed from the Clerk interface; any consumer calling clerk.openInviteMembers(...) will fail to compile.

Migration: Remove calls to clerk.openInviteMembers(...) or check for its existence at runtime before calling it.


@clerk/react

Version: 6.13.0 → 6.12.8
Recommended bump: MAJOR

Subpath .

🔴 Breaking Changes (2)

Changed: ClerkProviderProps
- type ClerkProviderProps<TUi extends Ui = Ui> = Omit<IsomorphicClerkOptions, 'appearance' | 'publishableKey' | keyof InternalClerkScriptProps> & {
+ type ClerkProviderProps<TUi extends Ui = Ui> = Omit<IsomorphicClerkOptions, 'appearance' | keyof InternalClerkScriptProps> & {
    children: React$1.ReactNode;
-   publishableKey?: string;
    initialState?: InitialState;
    __internal_bypassMissingPublishableKey?: boolean;
    appearance?: ExtractAppearanceType<TUi, Appearance>;
// ... 2 unchanged lines elided ...

Static analyzer: Breaking change in type alias ClerkProviderProps: Type changed: !Omit:type<import("@clerk/shared").IsomorphicClerkOptions,'appearance'|'publishableKey'|keyof import("@clerk/shared").I…!Omit:type<import("@clerk/shared").IsomorphicClerkOptions,'appearance'|keyof import("@clerk/shared").InternalClerkScrip…

🤖 AI review (confirmed) (90%): The publishableKey property was previously Omit-ted from IsomorphicClerkOptions and re-added as an explicit optional field (publishableKey?: string); in the new version publishableKey is no longer omitted from IsomorphicClerkOptions and no longer re-declared, which changes the effective type of publishableKey from string | undefined (optional) to whatever IsomorphicClerkOptions declares it as (likely required string), making consumers who omit publishableKey potentially non-compilable.

Migration: Ensure publishableKey is explicitly provided when constructing or spreading ClerkProviderProps, as it may now be required rather than optional.

Changed: InviteMembersButton
- InviteMembersButton: {
-   (props: import("@clerk/shared/types").Without<WithClerkProp<React.PropsWithChildren<import("@clerk/shared/types").InviteMembersProps>>, "clerk">): React.JSX.Element | null;
-   displayName: string;
- }

Static analyzer: Removed variable InviteMembersButton

🤖 AI review (confirmed) (100%): The InviteMembersButton variable was entirely removed from the public API, breaking any consumer that imports or references it.

Migration: Remove all usages of InviteMembersButton from your codebase, or find an equivalent replacement in the updated package.

Subpath ./types

🔴 Breaking Changes (1)

Changed: ClerkProviderProps
- type ClerkProviderProps<TUi extends Ui = Ui> = Omit<IsomorphicClerkOptions, 'appearance' | 'publishableKey' | keyof InternalClerkScriptProps> & {
+ type ClerkProviderProps<TUi extends Ui = Ui> = Omit<IsomorphicClerkOptions, 'appearance' | keyof InternalClerkScriptProps> & {
    children: React$1.ReactNode;
-   publishableKey?: string;
    initialState?: InitialState;
    __internal_bypassMissingPublishableKey?: boolean;
    appearance?: ExtractAppearanceType<TUi, Appearance>;
// ... 2 unchanged lines elided ...

Static analyzer: Breaking change in type alias ClerkProviderProps: Type changed: !Omit:type<import("@clerk/shared").IsomorphicClerkOptions,'appearance'|'publishableKey'|keyof import("@clerk/shared").I…!Omit:type<import("@clerk/shared").IsomorphicClerkOptions,'appearance'|keyof import("@clerk/shared").InternalClerkScrip…

🤖 AI review (confirmed) (85%): The 'publishableKey' key was removed from the Omit list, which means publishableKey from IsomorphicClerkOptions is no longer omitted and instead flows through directly. Simultaneously, the explicit optional publishableKey?: string re-declaration was removed from the intersection object. If IsomorphicClerkOptions.publishableKey is required (non-optional), this makes publishableKey required in ClerkProviderProps, breaking existing consumers who did not supply it. If it remains optional the shape is equivalent, but without the source definition available the safe verdict is breaking.

Migration: Check whether IsomorphicClerkOptions.publishableKey is optional; if it is required, you must now explicitly pass publishableKey to ClerkProviderProps, or update your type annotations accordingly.


@clerk/express

Version: 2.1.51 → 2.1.47
Recommended bump: MAJOR

Subpath ./types

🔴 Breaking Changes (1)

Changed: AuthenticateRequestParams
  type AuthenticateRequestParams = {
    clerkClient: ClerkClient$1;
    request: Request;
-   options?: ClerkMiddlewareOptions; /** Prebuilt ClerkRequest, so callers that already converted the request can skip re-conversion. */
-   clerkRequest?: ClerkRequest;
+   options?: ClerkMiddlewareOptions;
  };

Static analyzer: Breaking change in type alias AuthenticateRequestParams: Type changed: {clerkClient:import("@clerk/express").~ClerkClient$1;request:import("@types/express").e.Request;options?:import("@clerk…{clerkClient:import("@clerk/express").~ClerkClient$1;request:import("@types/express").e.Request;options?:import("@clerk…

🤖 AI review (confirmed) (80%): The clerkRequest optional property was removed from AuthenticateRequestParams; any consumer code that passed clerkRequest in this object would no longer have that property recognized by the type, potentially breaking compiled code.

Migration: Remove the clerkRequest property from any object you pass as AuthenticateRequestParams; re-convert the request using the standard path if you relied on skipping re-conversion.


Note
Report truncated to fit GitHub's comment size limit. 3 more packages (5 changes) omitted from this comment. See the full JSON report (--format json) or the uploaded run artifact for the complete diff.


Report generated by Break Check

Last ran on ff305cb.

Adds a combined subtitle for removing an affiliation-verified domain from
an active connection, element descriptors for the new domain card status
elements, and drops the comments added in this branch.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant