Skip to content

fix(shared): drop docsUrl for Enstall OAuth provider - #8885

Merged
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817
Jun 23, 2026
Merged

fix(shared): drop docsUrl for Enstall OAuth provider#8885
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817

Conversation

@SarahSoutoul

@SarahSoutoulSarahSoutoul commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

This PR is paired with a dashboard PR.

Problem

The JS SDK was shipping a docsUrl for Enstall that points to a docs page that does not exist: https://clerk.com/docs/authentication/social-connections/enstall. That link surfaces to end users as a 404.

Enstall is a private, single-customer OIDC provider rather than a general public social connection, so we should not ship a public docs link for it.

This PR removes the public docsUrl for the Enstall OAuth provider from clerk/javascript.

Changes

  • Made docsUrl optional on OAuthProviderData
  • Removed docsUrl from the Enstall provider entry in:
    • packages/shared/src/oauth.ts
    • packages/shared/src/types/runtime-values.ts
  • Audited current shared/UI consumers in this repo and did not find any UI surface that assumes docsUrl is always present for OAuth providers

Notes

  • This is the SDK-side follow-up only for Enstall.
  • The long-lived docs redirect added here still needs to remain in clerk-docs for already-shipped SDK versions that still contain the old URL

Summary by CodeRabbit

Summary by CodeRabbit

  • Bug Fixes

    • OAuth provider docsUrl is now optional, allowing provider metadata without documentation links.
    • Removed the documentation URL for the Enstall OAuth provider so it no longer returns docsUrl in its provider data.
  • Release Management

    • Updated the package changeset to publish a patch/minor version bump for @clerk/shared.

@changeset-bot

changeset-botBot commented Jun 16, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3c3f1af

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

This PR includes changesets to release 23 packages
NameType
@clerk/sharedMinor
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/electronPatch
@clerk/expo-passkeysPatch
@clerk/expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/headlessPatch
@clerk/honoPatch
@clerk/localizationsPatch
@clerk/mswPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/reactPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/uiPatch
@clerk/vuePatch
@clerk/swingsetPatch

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

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown

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

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJun 23, 2026 3:10pm
swingsetReadyReadyPreview, CommentJun 23, 2026 3:10pm

Request Review

@coderabbitai

coderabbitaiBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 83a2cf87-9c7f-47ca-825a-aaeae2d39229

📥 Commits

Reviewing files that changed from the base of the PR and between 9d861e8 and 2ac22ef.

📒 Files selected for processing (1)
  • .changeset/curly-roses-yawn.md
✅ Files skipped from review due to trivial changes (1)
  • .changeset/curly-roses-yawn.md

📝 Walkthrough

Walkthrough

OAuthProviderData.docsUrl is changed from a required to an optional field. The enstall OAuth provider entry has its docsUrl property removed in both packages/shared/src/oauth.ts and packages/shared/src/types/runtime-values.ts. Changesets are added for @clerk/shared documenting the API adjustment.

Changes

OAuthProviderData.docsUrl optionality and enstall data update

Layer / File(s)Summary
Make docsUrl optional and remove enstall docsUrl
packages/shared/src/types/oauth.ts, packages/shared/src/oauth.ts, packages/shared/src/types/runtime-values.ts, .changeset/fresh-lies-film.md, .changeset/curly-roses-yawn.md
docsUrl is marked optional on OAuthProviderData; the enstall provider entry drops its docsUrl property from both OAUTH_PROVIDERS arrays; changesets document the API adjustment.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐇 A URL once required, now set free,
The enstall provider travels light, you see.
No docs link to carry, no string to bind,
Optional and nimble — what a find!
Hop along, little patch, you're just fine! 🌿

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly describes the main change: removing the docsUrl field for the Enstall OAuth provider, which is the core focus of the pull request across all modified files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@pkg-pr-new

pkg-pr-newBot commented Jun 16, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/electron

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

@clerk/electron-passkeys

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

@clerk/eslint-plugin

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/hono

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 3c3f1af

@SarahSoutoulSarahSoutoul self-assigned this Jun 16, 2026

@coderabbitaicoderabbitaiBot 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/shared/src/types/oauth.ts (1)

5-10: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Add JSDoc to document the public OAuthProviderData interface.

The OAuthProviderData interface is a public, reference-facing API exported from @clerk/shared that will appear in generated customer documentation. Per the coding guidelines for packages/**/src/**/*.ts files, all public APIs must be documented with comprehensive JSDoc comments.

This interface lacks documentation explaining:

  • The purpose of the interface (OAuth provider configuration metadata)
  • Each property and its role
  • That docsUrl is now optional (not all providers have public documentation)

This is especially important since this PR changes the API surface by making docsUrl optional—customers using this interface need clear documentation of the change.

📝 Suggested JSDoc for OAuthProviderData
 import type { OAuthStrategy } from './strategies';
export type OAuthScope = string;
+/**+ * Represents the configuration metadata for an OAuth provider.+ * + * This interface defines the structure of OAuth provider entries used by Clerk's OAuth integration layer.+ * Each provider has a unique identifier, associated strategy, and optional documentation link.+ * + * `@property` provider - The unique provider identifier (e.g., 'google', 'github', 'enstall')+ * `@property` strategy - The OAuth strategy name for this provider+ * `@property` name - Human-readable display name of the provider+ * `@property` docsUrl - Optional URL to the provider's documentation. Not all providers expose public documentation.+ */
export interface OAuthProviderData {
provider: OAuthProvider;
strategy: OAuthStrategy;
name: string;
docsUrl?: string;
}
🤖 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/shared/src/types/oauth.ts` around lines 5 - 10, The public
OAuthProviderData interface is missing JSDoc documentation required for all
public APIs in packages/shared. Add a comprehensive JSDoc comment block above
the interface definition that explains: the purpose of the interface as OAuth
provider configuration metadata, the role of each property (provider, strategy,
name, and docsUrl), and specifically document that docsUrl is optional since not
all providers have public documentation. This ensures the interface is properly
documented for generated customer documentation and clarifies the API surface
change.

Source: Coding guidelines

🤖 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.
Outside diff comments:
In `@packages/shared/src/types/oauth.ts`:
- Around line 5-10: The public OAuthProviderData interface is missing JSDoc
documentation required for all public APIs in packages/shared. Add a
comprehensive JSDoc comment block above the interface definition that explains:
the purpose of the interface as OAuth provider configuration metadata, the role
of each property (provider, strategy, name, and docsUrl), and specifically
document that docsUrl is optional since not all providers have public
documentation. This ensures the interface is properly documented for generated
customer documentation and clarifies the API surface change.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 936623be-bf17-4884-ae4f-fe84ff5cda43

📥 Commits

Reviewing files that changed from the base of the PR and between d97a887 and 9d861e8.

📒 Files selected for processing (4)
  • .changeset/fresh-lies-film.md
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/oauth.ts
  • packages/shared/src/types/runtime-values.ts
💤 Files with no reviewable changes (2)
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/runtime-values.ts

@github-actions

github-actionsBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-06-23T15:11:19.996Z

Summary

MetricCount
Packages analyzed19
Packages with changes1
🔴 Breaking changes1
🟡 Non-breaking changes0
🟢 Additions0

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

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

🔴 Breaking changes index (1)

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

PackageSubpathChange
@clerk/shared./typesOAuthProviderData.docsUrl

@clerk/shared

Current version: 4.20.0
Recommended bump: MAJOR → 5.0.0

Subpath ./types

🔴 Breaking Changes (1)

Changed: OAuthProviderData.docsUrl
- docsUrl: string;+ docsUrl?: string;

Static analyzer: Modified property OAuthProviderData.docsUrl: Member became optional

🤖 AI review (reclassified as breaking) (85%): Making an existing output field optional is breaking (rule 4): consumers reading docsUrl from an OAuthProviderData object previously had a guaranteed string but now receive string | undefined, requiring them to add a null check or their existing code may break at runtime.

Migration: Update any code that reads OAuthProviderData.docsUrl to handle the undefined case, e.g. providerData.docsUrl ?? ''.


Report generated by Break Check

Last ran on 3c3f1af.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

@wobsoriano

Copy link
Copy Markdown
Member

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

provider: 'enstall',
strategy: 'oauth_enstall',
name: 'Enstall',
docsUrl: 'https://clerk.com/docs/authentication/social-connections/enstall',

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.

I ran a full org-wide sweep of docsUrl / OAUTH_PROVIDERS consumers (in-repo + gh search code --owner clerk), and there is the one spot worth a second look — everything appears safe.

clerk/cli reads OAUTH_PROVIDERS[].docsUrl but defensively (?.docsUrl ?? fallback), and the in-repo UI consumers only read .strategy/.provider/.name, never .docsUrl, so we're good here.

The tricky one is clerk/dashboard. Its getSocialSettings.ts imports OAUTH_PROVIDERS from @clerk/shared/oauth and reads item.docsUrl with a name-based fallback:

item.docsUrl??`https://clerk.com/docs/guides/configure/auth-strategies/social-connections/${item.provider}`

Then, it renders that as the provider's docs link on the SSO connection page.

With docsUrl gone, Enstall falls through to …/guides/configure/auth-strategies/social-connections/enstall, which currently 404s — whereas the URL being removed here 308-redirects to the live social-connections overview (via the redirect added in clerk-docs#3391). So on the Enstall-enabled instance, this swaps a working (redirected) link for a hard 404 on the surface that actually renders it.

Since the dashboard is what surfaces this link, should we pair this with a dashboard change that drops the link when docsUrl is absent (or skips the fallback for private providers), or add a clerk-docs redirect for the new …/auth-strategies/social-connections/enstall path so the fallback resolves?

@SarahSoutoulSarahSoutoulJun 17, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Nice catch! Made a sibling dashboard PR. @manovotny

@manovotnymanovotny self-assigned this Jun 17, 2026
@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

Makes sense! But I should prob make it a major bump then? @wobsoriano

@manovotnymanovotny 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.

I am good with the changes here and in https://github.com/clerk/dashboard/pull/9497 (this PR needs to land first).

I would appreciate another set of eyes and approval before merge to ensure we're not overlooking anything else.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.
Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?
Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

@jacekradko@wobsoriano could I follow up on this?

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Given that this is internal, we can disregard the API breaking change break check 👍🏼

@wobsoriano
wobsoriano enabled auto-merge (squash) June 23, 2026 15:15
@wobsoriano
wobsoriano merged commit 97039bb into mainJun 23, 2026
48 checks passed
@wobsoriano
wobsoriano deleted the ss/DOCS-11817 branch June 23, 2026 15:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@SarahSoutoul@wobsoriano@manovotny@NWylynko
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
fix(shared): drop docsUrl for Enstall OAuth provider by SarahSoutoul · Pull Request #8885 · clerk/javascript · GitHub
Skip to content

fix(shared): drop docsUrl for Enstall OAuth provider - #8885

Merged
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817
Jun 23, 2026
Merged

fix(shared): drop docsUrl for Enstall OAuth provider#8885
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817

Conversation

@SarahSoutoul

@SarahSoutoulSarahSoutoul commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

This PR is paired with a dashboard PR.

Problem

The JS SDK was shipping a docsUrl for Enstall that points to a docs page that does not exist: https://clerk.com/docs/authentication/social-connections/enstall. That link surfaces to end users as a 404.

Enstall is a private, single-customer OIDC provider rather than a general public social connection, so we should not ship a public docs link for it.

This PR removes the public docsUrl for the Enstall OAuth provider from clerk/javascript.

Changes

  • Made docsUrl optional on OAuthProviderData
  • Removed docsUrl from the Enstall provider entry in:
    • packages/shared/src/oauth.ts
    • packages/shared/src/types/runtime-values.ts
  • Audited current shared/UI consumers in this repo and did not find any UI surface that assumes docsUrl is always present for OAuth providers

Notes

  • This is the SDK-side follow-up only for Enstall.
  • The long-lived docs redirect added here still needs to remain in clerk-docs for already-shipped SDK versions that still contain the old URL

Summary by CodeRabbit

Summary by CodeRabbit

  • Bug Fixes

    • OAuth provider docsUrl is now optional, allowing provider metadata without documentation links.
    • Removed the documentation URL for the Enstall OAuth provider so it no longer returns docsUrl in its provider data.
  • Release Management

    • Updated the package changeset to publish a patch/minor version bump for @clerk/shared.

@changeset-bot

changeset-botBot commented Jun 16, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3c3f1af

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

This PR includes changesets to release 23 packages
NameType
@clerk/sharedMinor
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/electronPatch
@clerk/expo-passkeysPatch
@clerk/expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/headlessPatch
@clerk/honoPatch
@clerk/localizationsPatch
@clerk/mswPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/reactPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/uiPatch
@clerk/vuePatch
@clerk/swingsetPatch

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

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown

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

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJun 23, 2026 3:10pm
swingsetReadyReadyPreview, CommentJun 23, 2026 3:10pm

Request Review

@coderabbitai

coderabbitaiBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 83a2cf87-9c7f-47ca-825a-aaeae2d39229

📥 Commits

Reviewing files that changed from the base of the PR and between 9d861e8 and 2ac22ef.

📒 Files selected for processing (1)
  • .changeset/curly-roses-yawn.md
✅ Files skipped from review due to trivial changes (1)
  • .changeset/curly-roses-yawn.md

📝 Walkthrough

Walkthrough

OAuthProviderData.docsUrl is changed from a required to an optional field. The enstall OAuth provider entry has its docsUrl property removed in both packages/shared/src/oauth.ts and packages/shared/src/types/runtime-values.ts. Changesets are added for @clerk/shared documenting the API adjustment.

Changes

OAuthProviderData.docsUrl optionality and enstall data update

Layer / File(s)Summary
Make docsUrl optional and remove enstall docsUrl
packages/shared/src/types/oauth.ts, packages/shared/src/oauth.ts, packages/shared/src/types/runtime-values.ts, .changeset/fresh-lies-film.md, .changeset/curly-roses-yawn.md
docsUrl is marked optional on OAuthProviderData; the enstall provider entry drops its docsUrl property from both OAUTH_PROVIDERS arrays; changesets document the API adjustment.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐇 A URL once required, now set free,
The enstall provider travels light, you see.
No docs link to carry, no string to bind,
Optional and nimble — what a find!
Hop along, little patch, you're just fine! 🌿

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly describes the main change: removing the docsUrl field for the Enstall OAuth provider, which is the core focus of the pull request across all modified files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@pkg-pr-new

pkg-pr-newBot commented Jun 16, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/electron

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

@clerk/electron-passkeys

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

@clerk/eslint-plugin

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/hono

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 3c3f1af

@SarahSoutoulSarahSoutoul self-assigned this Jun 16, 2026

@coderabbitaicoderabbitaiBot 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/shared/src/types/oauth.ts (1)

5-10: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Add JSDoc to document the public OAuthProviderData interface.

The OAuthProviderData interface is a public, reference-facing API exported from @clerk/shared that will appear in generated customer documentation. Per the coding guidelines for packages/**/src/**/*.ts files, all public APIs must be documented with comprehensive JSDoc comments.

This interface lacks documentation explaining:

  • The purpose of the interface (OAuth provider configuration metadata)
  • Each property and its role
  • That docsUrl is now optional (not all providers have public documentation)

This is especially important since this PR changes the API surface by making docsUrl optional—customers using this interface need clear documentation of the change.

📝 Suggested JSDoc for OAuthProviderData
 import type { OAuthStrategy } from './strategies';
export type OAuthScope = string;
+/**+ * Represents the configuration metadata for an OAuth provider.+ * + * This interface defines the structure of OAuth provider entries used by Clerk's OAuth integration layer.+ * Each provider has a unique identifier, associated strategy, and optional documentation link.+ * + * `@property` provider - The unique provider identifier (e.g., 'google', 'github', 'enstall')+ * `@property` strategy - The OAuth strategy name for this provider+ * `@property` name - Human-readable display name of the provider+ * `@property` docsUrl - Optional URL to the provider's documentation. Not all providers expose public documentation.+ */
export interface OAuthProviderData {
provider: OAuthProvider;
strategy: OAuthStrategy;
name: string;
docsUrl?: string;
}
🤖 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/shared/src/types/oauth.ts` around lines 5 - 10, The public
OAuthProviderData interface is missing JSDoc documentation required for all
public APIs in packages/shared. Add a comprehensive JSDoc comment block above
the interface definition that explains: the purpose of the interface as OAuth
provider configuration metadata, the role of each property (provider, strategy,
name, and docsUrl), and specifically document that docsUrl is optional since not
all providers have public documentation. This ensures the interface is properly
documented for generated customer documentation and clarifies the API surface
change.

Source: Coding guidelines

🤖 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.
Outside diff comments:
In `@packages/shared/src/types/oauth.ts`:
- Around line 5-10: The public OAuthProviderData interface is missing JSDoc
documentation required for all public APIs in packages/shared. Add a
comprehensive JSDoc comment block above the interface definition that explains:
the purpose of the interface as OAuth provider configuration metadata, the role
of each property (provider, strategy, name, and docsUrl), and specifically
document that docsUrl is optional since not all providers have public
documentation. This ensures the interface is properly documented for generated
customer documentation and clarifies the API surface change.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 936623be-bf17-4884-ae4f-fe84ff5cda43

📥 Commits

Reviewing files that changed from the base of the PR and between d97a887 and 9d861e8.

📒 Files selected for processing (4)
  • .changeset/fresh-lies-film.md
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/oauth.ts
  • packages/shared/src/types/runtime-values.ts
💤 Files with no reviewable changes (2)
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/runtime-values.ts

@github-actions

github-actionsBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-06-23T15:11:19.996Z

Summary

MetricCount
Packages analyzed19
Packages with changes1
🔴 Breaking changes1
🟡 Non-breaking changes0
🟢 Additions0

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

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

🔴 Breaking changes index (1)

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

PackageSubpathChange
@clerk/shared./typesOAuthProviderData.docsUrl

@clerk/shared

Current version: 4.20.0
Recommended bump: MAJOR → 5.0.0

Subpath ./types

🔴 Breaking Changes (1)

Changed: OAuthProviderData.docsUrl
- docsUrl: string;+ docsUrl?: string;

Static analyzer: Modified property OAuthProviderData.docsUrl: Member became optional

🤖 AI review (reclassified as breaking) (85%): Making an existing output field optional is breaking (rule 4): consumers reading docsUrl from an OAuthProviderData object previously had a guaranteed string but now receive string | undefined, requiring them to add a null check or their existing code may break at runtime.

Migration: Update any code that reads OAuthProviderData.docsUrl to handle the undefined case, e.g. providerData.docsUrl ?? ''.


Report generated by Break Check

Last ran on 3c3f1af.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

@wobsoriano

Copy link
Copy Markdown
Member

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

provider: 'enstall',
strategy: 'oauth_enstall',
name: 'Enstall',
docsUrl: 'https://clerk.com/docs/authentication/social-connections/enstall',

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.

I ran a full org-wide sweep of docsUrl / OAUTH_PROVIDERS consumers (in-repo + gh search code --owner clerk), and there is the one spot worth a second look — everything appears safe.

clerk/cli reads OAUTH_PROVIDERS[].docsUrl but defensively (?.docsUrl ?? fallback), and the in-repo UI consumers only read .strategy/.provider/.name, never .docsUrl, so we're good here.

The tricky one is clerk/dashboard. Its getSocialSettings.ts imports OAUTH_PROVIDERS from @clerk/shared/oauth and reads item.docsUrl with a name-based fallback:

item.docsUrl??`https://clerk.com/docs/guides/configure/auth-strategies/social-connections/${item.provider}`

Then, it renders that as the provider's docs link on the SSO connection page.

With docsUrl gone, Enstall falls through to …/guides/configure/auth-strategies/social-connections/enstall, which currently 404s — whereas the URL being removed here 308-redirects to the live social-connections overview (via the redirect added in clerk-docs#3391). So on the Enstall-enabled instance, this swaps a working (redirected) link for a hard 404 on the surface that actually renders it.

Since the dashboard is what surfaces this link, should we pair this with a dashboard change that drops the link when docsUrl is absent (or skips the fallback for private providers), or add a clerk-docs redirect for the new …/auth-strategies/social-connections/enstall path so the fallback resolves?

@SarahSoutoulSarahSoutoulJun 17, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Nice catch! Made a sibling dashboard PR. @manovotny

@manovotnymanovotny self-assigned this Jun 17, 2026
@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

Makes sense! But I should prob make it a major bump then? @wobsoriano

@manovotnymanovotny 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.

I am good with the changes here and in https://github.com/clerk/dashboard/pull/9497 (this PR needs to land first).

I would appreciate another set of eyes and approval before merge to ensure we're not overlooking anything else.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.
Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?
Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

@jacekradko@wobsoriano could I follow up on this?

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Given that this is internal, we can disregard the API breaking change break check 👍🏼

@wobsoriano
wobsoriano enabled auto-merge (squash) June 23, 2026 15:15
@wobsoriano
wobsoriano merged commit 97039bb into mainJun 23, 2026
48 checks passed
@wobsoriano
wobsoriano deleted the ss/DOCS-11817 branch June 23, 2026 15:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@SarahSoutoul@wobsoriano@manovotny@NWylynko
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(shared): drop docsUrl for Enstall OAuth provider by SarahSoutoul · Pull Request #8885 · clerk/javascript · GitHub
Skip to content

fix(shared): drop docsUrl for Enstall OAuth provider - #8885

Merged
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817
Jun 23, 2026
Merged

fix(shared): drop docsUrl for Enstall OAuth provider#8885
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817

Conversation

@SarahSoutoul

@SarahSoutoulSarahSoutoul commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

This PR is paired with a dashboard PR.

Problem

The JS SDK was shipping a docsUrl for Enstall that points to a docs page that does not exist: https://clerk.com/docs/authentication/social-connections/enstall. That link surfaces to end users as a 404.

Enstall is a private, single-customer OIDC provider rather than a general public social connection, so we should not ship a public docs link for it.

This PR removes the public docsUrl for the Enstall OAuth provider from clerk/javascript.

Changes

  • Made docsUrl optional on OAuthProviderData
  • Removed docsUrl from the Enstall provider entry in:
    • packages/shared/src/oauth.ts
    • packages/shared/src/types/runtime-values.ts
  • Audited current shared/UI consumers in this repo and did not find any UI surface that assumes docsUrl is always present for OAuth providers

Notes

  • This is the SDK-side follow-up only for Enstall.
  • The long-lived docs redirect added here still needs to remain in clerk-docs for already-shipped SDK versions that still contain the old URL

Summary by CodeRabbit

Summary by CodeRabbit

  • Bug Fixes

    • OAuth provider docsUrl is now optional, allowing provider metadata without documentation links.
    • Removed the documentation URL for the Enstall OAuth provider so it no longer returns docsUrl in its provider data.
  • Release Management

    • Updated the package changeset to publish a patch/minor version bump for @clerk/shared.

@changeset-bot

changeset-botBot commented Jun 16, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3c3f1af

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

This PR includes changesets to release 23 packages
NameType
@clerk/sharedMinor
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/electronPatch
@clerk/expo-passkeysPatch
@clerk/expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/headlessPatch
@clerk/honoPatch
@clerk/localizationsPatch
@clerk/mswPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/reactPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/uiPatch
@clerk/vuePatch
@clerk/swingsetPatch

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

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown

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

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJun 23, 2026 3:10pm
swingsetReadyReadyPreview, CommentJun 23, 2026 3:10pm

Request Review

@coderabbitai

coderabbitaiBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 83a2cf87-9c7f-47ca-825a-aaeae2d39229

📥 Commits

Reviewing files that changed from the base of the PR and between 9d861e8 and 2ac22ef.

📒 Files selected for processing (1)
  • .changeset/curly-roses-yawn.md
✅ Files skipped from review due to trivial changes (1)
  • .changeset/curly-roses-yawn.md

📝 Walkthrough

Walkthrough

OAuthProviderData.docsUrl is changed from a required to an optional field. The enstall OAuth provider entry has its docsUrl property removed in both packages/shared/src/oauth.ts and packages/shared/src/types/runtime-values.ts. Changesets are added for @clerk/shared documenting the API adjustment.

Changes

OAuthProviderData.docsUrl optionality and enstall data update

Layer / File(s)Summary
Make docsUrl optional and remove enstall docsUrl
packages/shared/src/types/oauth.ts, packages/shared/src/oauth.ts, packages/shared/src/types/runtime-values.ts, .changeset/fresh-lies-film.md, .changeset/curly-roses-yawn.md
docsUrl is marked optional on OAuthProviderData; the enstall provider entry drops its docsUrl property from both OAUTH_PROVIDERS arrays; changesets document the API adjustment.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐇 A URL once required, now set free,
The enstall provider travels light, you see.
No docs link to carry, no string to bind,
Optional and nimble — what a find!
Hop along, little patch, you're just fine! 🌿

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly describes the main change: removing the docsUrl field for the Enstall OAuth provider, which is the core focus of the pull request across all modified files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@pkg-pr-new

pkg-pr-newBot commented Jun 16, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/electron

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

@clerk/electron-passkeys

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

@clerk/eslint-plugin

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/hono

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 3c3f1af

@SarahSoutoulSarahSoutoul self-assigned this Jun 16, 2026

@coderabbitaicoderabbitaiBot 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/shared/src/types/oauth.ts (1)

5-10: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Add JSDoc to document the public OAuthProviderData interface.

The OAuthProviderData interface is a public, reference-facing API exported from @clerk/shared that will appear in generated customer documentation. Per the coding guidelines for packages/**/src/**/*.ts files, all public APIs must be documented with comprehensive JSDoc comments.

This interface lacks documentation explaining:

  • The purpose of the interface (OAuth provider configuration metadata)
  • Each property and its role
  • That docsUrl is now optional (not all providers have public documentation)

This is especially important since this PR changes the API surface by making docsUrl optional—customers using this interface need clear documentation of the change.

📝 Suggested JSDoc for OAuthProviderData
 import type { OAuthStrategy } from './strategies';
export type OAuthScope = string;
+/**+ * Represents the configuration metadata for an OAuth provider.+ * + * This interface defines the structure of OAuth provider entries used by Clerk's OAuth integration layer.+ * Each provider has a unique identifier, associated strategy, and optional documentation link.+ * + * `@property` provider - The unique provider identifier (e.g., 'google', 'github', 'enstall')+ * `@property` strategy - The OAuth strategy name for this provider+ * `@property` name - Human-readable display name of the provider+ * `@property` docsUrl - Optional URL to the provider's documentation. Not all providers expose public documentation.+ */
export interface OAuthProviderData {
provider: OAuthProvider;
strategy: OAuthStrategy;
name: string;
docsUrl?: string;
}
🤖 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/shared/src/types/oauth.ts` around lines 5 - 10, The public
OAuthProviderData interface is missing JSDoc documentation required for all
public APIs in packages/shared. Add a comprehensive JSDoc comment block above
the interface definition that explains: the purpose of the interface as OAuth
provider configuration metadata, the role of each property (provider, strategy,
name, and docsUrl), and specifically document that docsUrl is optional since not
all providers have public documentation. This ensures the interface is properly
documented for generated customer documentation and clarifies the API surface
change.

Source: Coding guidelines

🤖 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.
Outside diff comments:
In `@packages/shared/src/types/oauth.ts`:
- Around line 5-10: The public OAuthProviderData interface is missing JSDoc
documentation required for all public APIs in packages/shared. Add a
comprehensive JSDoc comment block above the interface definition that explains:
the purpose of the interface as OAuth provider configuration metadata, the role
of each property (provider, strategy, name, and docsUrl), and specifically
document that docsUrl is optional since not all providers have public
documentation. This ensures the interface is properly documented for generated
customer documentation and clarifies the API surface change.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 936623be-bf17-4884-ae4f-fe84ff5cda43

📥 Commits

Reviewing files that changed from the base of the PR and between d97a887 and 9d861e8.

📒 Files selected for processing (4)
  • .changeset/fresh-lies-film.md
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/oauth.ts
  • packages/shared/src/types/runtime-values.ts
💤 Files with no reviewable changes (2)
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/runtime-values.ts

@github-actions

github-actionsBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-06-23T15:11:19.996Z

Summary

MetricCount
Packages analyzed19
Packages with changes1
🔴 Breaking changes1
🟡 Non-breaking changes0
🟢 Additions0

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

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

🔴 Breaking changes index (1)

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

PackageSubpathChange
@clerk/shared./typesOAuthProviderData.docsUrl

@clerk/shared

Current version: 4.20.0
Recommended bump: MAJOR → 5.0.0

Subpath ./types

🔴 Breaking Changes (1)

Changed: OAuthProviderData.docsUrl
- docsUrl: string;+ docsUrl?: string;

Static analyzer: Modified property OAuthProviderData.docsUrl: Member became optional

🤖 AI review (reclassified as breaking) (85%): Making an existing output field optional is breaking (rule 4): consumers reading docsUrl from an OAuthProviderData object previously had a guaranteed string but now receive string | undefined, requiring them to add a null check or their existing code may break at runtime.

Migration: Update any code that reads OAuthProviderData.docsUrl to handle the undefined case, e.g. providerData.docsUrl ?? ''.


Report generated by Break Check

Last ran on 3c3f1af.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

@wobsoriano

Copy link
Copy Markdown
Member

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

provider: 'enstall',
strategy: 'oauth_enstall',
name: 'Enstall',
docsUrl: 'https://clerk.com/docs/authentication/social-connections/enstall',

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.

I ran a full org-wide sweep of docsUrl / OAUTH_PROVIDERS consumers (in-repo + gh search code --owner clerk), and there is the one spot worth a second look — everything appears safe.

clerk/cli reads OAUTH_PROVIDERS[].docsUrl but defensively (?.docsUrl ?? fallback), and the in-repo UI consumers only read .strategy/.provider/.name, never .docsUrl, so we're good here.

The tricky one is clerk/dashboard. Its getSocialSettings.ts imports OAUTH_PROVIDERS from @clerk/shared/oauth and reads item.docsUrl with a name-based fallback:

item.docsUrl??`https://clerk.com/docs/guides/configure/auth-strategies/social-connections/${item.provider}`

Then, it renders that as the provider's docs link on the SSO connection page.

With docsUrl gone, Enstall falls through to …/guides/configure/auth-strategies/social-connections/enstall, which currently 404s — whereas the URL being removed here 308-redirects to the live social-connections overview (via the redirect added in clerk-docs#3391). So on the Enstall-enabled instance, this swaps a working (redirected) link for a hard 404 on the surface that actually renders it.

Since the dashboard is what surfaces this link, should we pair this with a dashboard change that drops the link when docsUrl is absent (or skips the fallback for private providers), or add a clerk-docs redirect for the new …/auth-strategies/social-connections/enstall path so the fallback resolves?

@SarahSoutoulSarahSoutoulJun 17, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Nice catch! Made a sibling dashboard PR. @manovotny

@manovotnymanovotny self-assigned this Jun 17, 2026
@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

Makes sense! But I should prob make it a major bump then? @wobsoriano

@manovotnymanovotny 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.

I am good with the changes here and in https://github.com/clerk/dashboard/pull/9497 (this PR needs to land first).

I would appreciate another set of eyes and approval before merge to ensure we're not overlooking anything else.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.
Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?
Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

@jacekradko@wobsoriano could I follow up on this?

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Given that this is internal, we can disregard the API breaking change break check 👍🏼

@wobsoriano
wobsoriano enabled auto-merge (squash) June 23, 2026 15:15
@wobsoriano
wobsoriano merged commit 97039bb into mainJun 23, 2026
48 checks passed
@wobsoriano
wobsoriano deleted the ss/DOCS-11817 branch June 23, 2026 15:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@SarahSoutoul@wobsoriano@manovotny@NWylynko
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(shared): drop docsUrl for Enstall OAuth provider by SarahSoutoul · Pull Request #8885 · clerk/javascript · GitHub
Skip to content

fix(shared): drop docsUrl for Enstall OAuth provider - #8885

Merged
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817
Jun 23, 2026
Merged

fix(shared): drop docsUrl for Enstall OAuth provider#8885
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817

Conversation

@SarahSoutoul

@SarahSoutoulSarahSoutoul commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

This PR is paired with a dashboard PR.

Problem

The JS SDK was shipping a docsUrl for Enstall that points to a docs page that does not exist: https://clerk.com/docs/authentication/social-connections/enstall. That link surfaces to end users as a 404.

Enstall is a private, single-customer OIDC provider rather than a general public social connection, so we should not ship a public docs link for it.

This PR removes the public docsUrl for the Enstall OAuth provider from clerk/javascript.

Changes

  • Made docsUrl optional on OAuthProviderData
  • Removed docsUrl from the Enstall provider entry in:
    • packages/shared/src/oauth.ts
    • packages/shared/src/types/runtime-values.ts
  • Audited current shared/UI consumers in this repo and did not find any UI surface that assumes docsUrl is always present for OAuth providers

Notes

  • This is the SDK-side follow-up only for Enstall.
  • The long-lived docs redirect added here still needs to remain in clerk-docs for already-shipped SDK versions that still contain the old URL

Summary by CodeRabbit

Summary by CodeRabbit

  • Bug Fixes

    • OAuth provider docsUrl is now optional, allowing provider metadata without documentation links.
    • Removed the documentation URL for the Enstall OAuth provider so it no longer returns docsUrl in its provider data.
  • Release Management

    • Updated the package changeset to publish a patch/minor version bump for @clerk/shared.

@changeset-bot

changeset-botBot commented Jun 16, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3c3f1af

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

This PR includes changesets to release 23 packages
NameType
@clerk/sharedMinor
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/electronPatch
@clerk/expo-passkeysPatch
@clerk/expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/headlessPatch
@clerk/honoPatch
@clerk/localizationsPatch
@clerk/mswPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/reactPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/uiPatch
@clerk/vuePatch
@clerk/swingsetPatch

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

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown

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

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJun 23, 2026 3:10pm
swingsetReadyReadyPreview, CommentJun 23, 2026 3:10pm

Request Review

@coderabbitai

coderabbitaiBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 83a2cf87-9c7f-47ca-825a-aaeae2d39229

📥 Commits

Reviewing files that changed from the base of the PR and between 9d861e8 and 2ac22ef.

📒 Files selected for processing (1)
  • .changeset/curly-roses-yawn.md
✅ Files skipped from review due to trivial changes (1)
  • .changeset/curly-roses-yawn.md

📝 Walkthrough

Walkthrough

OAuthProviderData.docsUrl is changed from a required to an optional field. The enstall OAuth provider entry has its docsUrl property removed in both packages/shared/src/oauth.ts and packages/shared/src/types/runtime-values.ts. Changesets are added for @clerk/shared documenting the API adjustment.

Changes

OAuthProviderData.docsUrl optionality and enstall data update

Layer / File(s)Summary
Make docsUrl optional and remove enstall docsUrl
packages/shared/src/types/oauth.ts, packages/shared/src/oauth.ts, packages/shared/src/types/runtime-values.ts, .changeset/fresh-lies-film.md, .changeset/curly-roses-yawn.md
docsUrl is marked optional on OAuthProviderData; the enstall provider entry drops its docsUrl property from both OAUTH_PROVIDERS arrays; changesets document the API adjustment.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐇 A URL once required, now set free,
The enstall provider travels light, you see.
No docs link to carry, no string to bind,
Optional and nimble — what a find!
Hop along, little patch, you're just fine! 🌿

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly describes the main change: removing the docsUrl field for the Enstall OAuth provider, which is the core focus of the pull request across all modified files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@pkg-pr-new

pkg-pr-newBot commented Jun 16, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/electron

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

@clerk/electron-passkeys

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

@clerk/eslint-plugin

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/hono

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 3c3f1af

@SarahSoutoulSarahSoutoul self-assigned this Jun 16, 2026

@coderabbitaicoderabbitaiBot 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/shared/src/types/oauth.ts (1)

5-10: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Add JSDoc to document the public OAuthProviderData interface.

The OAuthProviderData interface is a public, reference-facing API exported from @clerk/shared that will appear in generated customer documentation. Per the coding guidelines for packages/**/src/**/*.ts files, all public APIs must be documented with comprehensive JSDoc comments.

This interface lacks documentation explaining:

  • The purpose of the interface (OAuth provider configuration metadata)
  • Each property and its role
  • That docsUrl is now optional (not all providers have public documentation)

This is especially important since this PR changes the API surface by making docsUrl optional—customers using this interface need clear documentation of the change.

📝 Suggested JSDoc for OAuthProviderData
 import type { OAuthStrategy } from './strategies';
export type OAuthScope = string;
+/**+ * Represents the configuration metadata for an OAuth provider.+ * + * This interface defines the structure of OAuth provider entries used by Clerk's OAuth integration layer.+ * Each provider has a unique identifier, associated strategy, and optional documentation link.+ * + * `@property` provider - The unique provider identifier (e.g., 'google', 'github', 'enstall')+ * `@property` strategy - The OAuth strategy name for this provider+ * `@property` name - Human-readable display name of the provider+ * `@property` docsUrl - Optional URL to the provider's documentation. Not all providers expose public documentation.+ */
export interface OAuthProviderData {
provider: OAuthProvider;
strategy: OAuthStrategy;
name: string;
docsUrl?: string;
}
🤖 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/shared/src/types/oauth.ts` around lines 5 - 10, The public
OAuthProviderData interface is missing JSDoc documentation required for all
public APIs in packages/shared. Add a comprehensive JSDoc comment block above
the interface definition that explains: the purpose of the interface as OAuth
provider configuration metadata, the role of each property (provider, strategy,
name, and docsUrl), and specifically document that docsUrl is optional since not
all providers have public documentation. This ensures the interface is properly
documented for generated customer documentation and clarifies the API surface
change.

Source: Coding guidelines

🤖 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.
Outside diff comments:
In `@packages/shared/src/types/oauth.ts`:
- Around line 5-10: The public OAuthProviderData interface is missing JSDoc
documentation required for all public APIs in packages/shared. Add a
comprehensive JSDoc comment block above the interface definition that explains:
the purpose of the interface as OAuth provider configuration metadata, the role
of each property (provider, strategy, name, and docsUrl), and specifically
document that docsUrl is optional since not all providers have public
documentation. This ensures the interface is properly documented for generated
customer documentation and clarifies the API surface change.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 936623be-bf17-4884-ae4f-fe84ff5cda43

📥 Commits

Reviewing files that changed from the base of the PR and between d97a887 and 9d861e8.

📒 Files selected for processing (4)
  • .changeset/fresh-lies-film.md
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/oauth.ts
  • packages/shared/src/types/runtime-values.ts
💤 Files with no reviewable changes (2)
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/runtime-values.ts

@github-actions

github-actionsBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-06-23T15:11:19.996Z

Summary

MetricCount
Packages analyzed19
Packages with changes1
🔴 Breaking changes1
🟡 Non-breaking changes0
🟢 Additions0

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

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

🔴 Breaking changes index (1)

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

PackageSubpathChange
@clerk/shared./typesOAuthProviderData.docsUrl

@clerk/shared

Current version: 4.20.0
Recommended bump: MAJOR → 5.0.0

Subpath ./types

🔴 Breaking Changes (1)

Changed: OAuthProviderData.docsUrl
- docsUrl: string;+ docsUrl?: string;

Static analyzer: Modified property OAuthProviderData.docsUrl: Member became optional

🤖 AI review (reclassified as breaking) (85%): Making an existing output field optional is breaking (rule 4): consumers reading docsUrl from an OAuthProviderData object previously had a guaranteed string but now receive string | undefined, requiring them to add a null check or their existing code may break at runtime.

Migration: Update any code that reads OAuthProviderData.docsUrl to handle the undefined case, e.g. providerData.docsUrl ?? ''.


Report generated by Break Check

Last ran on 3c3f1af.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

@wobsoriano

Copy link
Copy Markdown
Member

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

provider: 'enstall',
strategy: 'oauth_enstall',
name: 'Enstall',
docsUrl: 'https://clerk.com/docs/authentication/social-connections/enstall',

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.

I ran a full org-wide sweep of docsUrl / OAUTH_PROVIDERS consumers (in-repo + gh search code --owner clerk), and there is the one spot worth a second look — everything appears safe.

clerk/cli reads OAUTH_PROVIDERS[].docsUrl but defensively (?.docsUrl ?? fallback), and the in-repo UI consumers only read .strategy/.provider/.name, never .docsUrl, so we're good here.

The tricky one is clerk/dashboard. Its getSocialSettings.ts imports OAUTH_PROVIDERS from @clerk/shared/oauth and reads item.docsUrl with a name-based fallback:

item.docsUrl??`https://clerk.com/docs/guides/configure/auth-strategies/social-connections/${item.provider}`

Then, it renders that as the provider's docs link on the SSO connection page.

With docsUrl gone, Enstall falls through to …/guides/configure/auth-strategies/social-connections/enstall, which currently 404s — whereas the URL being removed here 308-redirects to the live social-connections overview (via the redirect added in clerk-docs#3391). So on the Enstall-enabled instance, this swaps a working (redirected) link for a hard 404 on the surface that actually renders it.

Since the dashboard is what surfaces this link, should we pair this with a dashboard change that drops the link when docsUrl is absent (or skips the fallback for private providers), or add a clerk-docs redirect for the new …/auth-strategies/social-connections/enstall path so the fallback resolves?

@SarahSoutoulSarahSoutoulJun 17, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Nice catch! Made a sibling dashboard PR. @manovotny

@manovotnymanovotny self-assigned this Jun 17, 2026
@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

Makes sense! But I should prob make it a major bump then? @wobsoriano

@manovotnymanovotny 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.

I am good with the changes here and in https://github.com/clerk/dashboard/pull/9497 (this PR needs to land first).

I would appreciate another set of eyes and approval before merge to ensure we're not overlooking anything else.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.
Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?
Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

@jacekradko@wobsoriano could I follow up on this?

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Given that this is internal, we can disregard the API breaking change break check 👍🏼

@wobsoriano
wobsoriano enabled auto-merge (squash) June 23, 2026 15:15
@wobsoriano
wobsoriano merged commit 97039bb into mainJun 23, 2026
48 checks passed
@wobsoriano
wobsoriano deleted the ss/DOCS-11817 branch June 23, 2026 15:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@SarahSoutoul@wobsoriano@manovotny@NWylynko
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' fix(shared): drop docsUrl for Enstall OAuth provider by SarahSoutoul · Pull Request #8885 · clerk/javascript · GitHub
Skip to content

fix(shared): drop docsUrl for Enstall OAuth provider - #8885

Merged
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817
Jun 23, 2026
Merged

fix(shared): drop docsUrl for Enstall OAuth provider#8885
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817

Conversation

@SarahSoutoul

@SarahSoutoulSarahSoutoul commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

This PR is paired with a dashboard PR.

Problem

The JS SDK was shipping a docsUrl for Enstall that points to a docs page that does not exist: https://clerk.com/docs/authentication/social-connections/enstall. That link surfaces to end users as a 404.

Enstall is a private, single-customer OIDC provider rather than a general public social connection, so we should not ship a public docs link for it.

This PR removes the public docsUrl for the Enstall OAuth provider from clerk/javascript.

Changes

  • Made docsUrl optional on OAuthProviderData
  • Removed docsUrl from the Enstall provider entry in:
    • packages/shared/src/oauth.ts
    • packages/shared/src/types/runtime-values.ts
  • Audited current shared/UI consumers in this repo and did not find any UI surface that assumes docsUrl is always present for OAuth providers

Notes

  • This is the SDK-side follow-up only for Enstall.
  • The long-lived docs redirect added here still needs to remain in clerk-docs for already-shipped SDK versions that still contain the old URL

Summary by CodeRabbit

Summary by CodeRabbit

  • Bug Fixes

    • OAuth provider docsUrl is now optional, allowing provider metadata without documentation links.
    • Removed the documentation URL for the Enstall OAuth provider so it no longer returns docsUrl in its provider data.
  • Release Management

    • Updated the package changeset to publish a patch/minor version bump for @clerk/shared.

@changeset-bot

changeset-botBot commented Jun 16, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3c3f1af

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

This PR includes changesets to release 23 packages
NameType
@clerk/sharedMinor
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/electronPatch
@clerk/expo-passkeysPatch
@clerk/expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/headlessPatch
@clerk/honoPatch
@clerk/localizationsPatch
@clerk/mswPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/reactPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/uiPatch
@clerk/vuePatch
@clerk/swingsetPatch

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

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown

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

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJun 23, 2026 3:10pm
swingsetReadyReadyPreview, CommentJun 23, 2026 3:10pm

Request Review

@coderabbitai

coderabbitaiBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 83a2cf87-9c7f-47ca-825a-aaeae2d39229

📥 Commits

Reviewing files that changed from the base of the PR and between 9d861e8 and 2ac22ef.

📒 Files selected for processing (1)
  • .changeset/curly-roses-yawn.md
✅ Files skipped from review due to trivial changes (1)
  • .changeset/curly-roses-yawn.md

📝 Walkthrough

Walkthrough

OAuthProviderData.docsUrl is changed from a required to an optional field. The enstall OAuth provider entry has its docsUrl property removed in both packages/shared/src/oauth.ts and packages/shared/src/types/runtime-values.ts. Changesets are added for @clerk/shared documenting the API adjustment.

Changes

OAuthProviderData.docsUrl optionality and enstall data update

Layer / File(s)Summary
Make docsUrl optional and remove enstall docsUrl
packages/shared/src/types/oauth.ts, packages/shared/src/oauth.ts, packages/shared/src/types/runtime-values.ts, .changeset/fresh-lies-film.md, .changeset/curly-roses-yawn.md
docsUrl is marked optional on OAuthProviderData; the enstall provider entry drops its docsUrl property from both OAUTH_PROVIDERS arrays; changesets document the API adjustment.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐇 A URL once required, now set free,
The enstall provider travels light, you see.
No docs link to carry, no string to bind,
Optional and nimble — what a find!
Hop along, little patch, you're just fine! 🌿

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly describes the main change: removing the docsUrl field for the Enstall OAuth provider, which is the core focus of the pull request across all modified files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@pkg-pr-new

pkg-pr-newBot commented Jun 16, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/electron

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

@clerk/electron-passkeys

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

@clerk/eslint-plugin

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/hono

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 3c3f1af

@SarahSoutoulSarahSoutoul self-assigned this Jun 16, 2026

@coderabbitaicoderabbitaiBot 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/shared/src/types/oauth.ts (1)

5-10: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Add JSDoc to document the public OAuthProviderData interface.

The OAuthProviderData interface is a public, reference-facing API exported from @clerk/shared that will appear in generated customer documentation. Per the coding guidelines for packages/**/src/**/*.ts files, all public APIs must be documented with comprehensive JSDoc comments.

This interface lacks documentation explaining:

  • The purpose of the interface (OAuth provider configuration metadata)
  • Each property and its role
  • That docsUrl is now optional (not all providers have public documentation)

This is especially important since this PR changes the API surface by making docsUrl optional—customers using this interface need clear documentation of the change.

📝 Suggested JSDoc for OAuthProviderData
 import type { OAuthStrategy } from './strategies';
export type OAuthScope = string;
+/**+ * Represents the configuration metadata for an OAuth provider.+ * + * This interface defines the structure of OAuth provider entries used by Clerk's OAuth integration layer.+ * Each provider has a unique identifier, associated strategy, and optional documentation link.+ * + * `@property` provider - The unique provider identifier (e.g., 'google', 'github', 'enstall')+ * `@property` strategy - The OAuth strategy name for this provider+ * `@property` name - Human-readable display name of the provider+ * `@property` docsUrl - Optional URL to the provider's documentation. Not all providers expose public documentation.+ */
export interface OAuthProviderData {
provider: OAuthProvider;
strategy: OAuthStrategy;
name: string;
docsUrl?: string;
}
🤖 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/shared/src/types/oauth.ts` around lines 5 - 10, The public
OAuthProviderData interface is missing JSDoc documentation required for all
public APIs in packages/shared. Add a comprehensive JSDoc comment block above
the interface definition that explains: the purpose of the interface as OAuth
provider configuration metadata, the role of each property (provider, strategy,
name, and docsUrl), and specifically document that docsUrl is optional since not
all providers have public documentation. This ensures the interface is properly
documented for generated customer documentation and clarifies the API surface
change.

Source: Coding guidelines

🤖 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.
Outside diff comments:
In `@packages/shared/src/types/oauth.ts`:
- Around line 5-10: The public OAuthProviderData interface is missing JSDoc
documentation required for all public APIs in packages/shared. Add a
comprehensive JSDoc comment block above the interface definition that explains:
the purpose of the interface as OAuth provider configuration metadata, the role
of each property (provider, strategy, name, and docsUrl), and specifically
document that docsUrl is optional since not all providers have public
documentation. This ensures the interface is properly documented for generated
customer documentation and clarifies the API surface change.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 936623be-bf17-4884-ae4f-fe84ff5cda43

📥 Commits

Reviewing files that changed from the base of the PR and between d97a887 and 9d861e8.

📒 Files selected for processing (4)
  • .changeset/fresh-lies-film.md
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/oauth.ts
  • packages/shared/src/types/runtime-values.ts
💤 Files with no reviewable changes (2)
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/runtime-values.ts

@github-actions

github-actionsBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-06-23T15:11:19.996Z

Summary

MetricCount
Packages analyzed19
Packages with changes1
🔴 Breaking changes1
🟡 Non-breaking changes0
🟢 Additions0

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

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

🔴 Breaking changes index (1)

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

PackageSubpathChange
@clerk/shared./typesOAuthProviderData.docsUrl

@clerk/shared

Current version: 4.20.0
Recommended bump: MAJOR → 5.0.0

Subpath ./types

🔴 Breaking Changes (1)

Changed: OAuthProviderData.docsUrl
- docsUrl: string;+ docsUrl?: string;

Static analyzer: Modified property OAuthProviderData.docsUrl: Member became optional

🤖 AI review (reclassified as breaking) (85%): Making an existing output field optional is breaking (rule 4): consumers reading docsUrl from an OAuthProviderData object previously had a guaranteed string but now receive string | undefined, requiring them to add a null check or their existing code may break at runtime.

Migration: Update any code that reads OAuthProviderData.docsUrl to handle the undefined case, e.g. providerData.docsUrl ?? ''.


Report generated by Break Check

Last ran on 3c3f1af.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

@wobsoriano

Copy link
Copy Markdown
Member

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

provider: 'enstall',
strategy: 'oauth_enstall',
name: 'Enstall',
docsUrl: 'https://clerk.com/docs/authentication/social-connections/enstall',

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.

I ran a full org-wide sweep of docsUrl / OAUTH_PROVIDERS consumers (in-repo + gh search code --owner clerk), and there is the one spot worth a second look — everything appears safe.

clerk/cli reads OAUTH_PROVIDERS[].docsUrl but defensively (?.docsUrl ?? fallback), and the in-repo UI consumers only read .strategy/.provider/.name, never .docsUrl, so we're good here.

The tricky one is clerk/dashboard. Its getSocialSettings.ts imports OAUTH_PROVIDERS from @clerk/shared/oauth and reads item.docsUrl with a name-based fallback:

item.docsUrl??`https://clerk.com/docs/guides/configure/auth-strategies/social-connections/${item.provider}`

Then, it renders that as the provider's docs link on the SSO connection page.

With docsUrl gone, Enstall falls through to …/guides/configure/auth-strategies/social-connections/enstall, which currently 404s — whereas the URL being removed here 308-redirects to the live social-connections overview (via the redirect added in clerk-docs#3391). So on the Enstall-enabled instance, this swaps a working (redirected) link for a hard 404 on the surface that actually renders it.

Since the dashboard is what surfaces this link, should we pair this with a dashboard change that drops the link when docsUrl is absent (or skips the fallback for private providers), or add a clerk-docs redirect for the new …/auth-strategies/social-connections/enstall path so the fallback resolves?

@SarahSoutoulSarahSoutoulJun 17, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Nice catch! Made a sibling dashboard PR. @manovotny

@manovotnymanovotny self-assigned this Jun 17, 2026
@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

Makes sense! But I should prob make it a major bump then? @wobsoriano

@manovotnymanovotny 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.

I am good with the changes here and in https://github.com/clerk/dashboard/pull/9497 (this PR needs to land first).

I would appreciate another set of eyes and approval before merge to ensure we're not overlooking anything else.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.
Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?
Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

@jacekradko@wobsoriano could I follow up on this?

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Given that this is internal, we can disregard the API breaking change break check 👍🏼

@wobsoriano
wobsoriano enabled auto-merge (squash) June 23, 2026 15:15
@wobsoriano
wobsoriano merged commit 97039bb into mainJun 23, 2026
48 checks passed
@wobsoriano
wobsoriano deleted the ss/DOCS-11817 branch June 23, 2026 15:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@SarahSoutoul@wobsoriano@manovotny@NWylynko
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(shared): drop docsUrl for Enstall OAuth provider by SarahSoutoul · Pull Request #8885 · clerk/javascript · GitHub
Skip to content

fix(shared): drop docsUrl for Enstall OAuth provider - #8885

Merged
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817
Jun 23, 2026
Merged

fix(shared): drop docsUrl for Enstall OAuth provider#8885
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817

Conversation

@SarahSoutoul

@SarahSoutoulSarahSoutoul commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

This PR is paired with a dashboard PR.

Problem

The JS SDK was shipping a docsUrl for Enstall that points to a docs page that does not exist: https://clerk.com/docs/authentication/social-connections/enstall. That link surfaces to end users as a 404.

Enstall is a private, single-customer OIDC provider rather than a general public social connection, so we should not ship a public docs link for it.

This PR removes the public docsUrl for the Enstall OAuth provider from clerk/javascript.

Changes

  • Made docsUrl optional on OAuthProviderData
  • Removed docsUrl from the Enstall provider entry in:
    • packages/shared/src/oauth.ts
    • packages/shared/src/types/runtime-values.ts
  • Audited current shared/UI consumers in this repo and did not find any UI surface that assumes docsUrl is always present for OAuth providers

Notes

  • This is the SDK-side follow-up only for Enstall.
  • The long-lived docs redirect added here still needs to remain in clerk-docs for already-shipped SDK versions that still contain the old URL

Summary by CodeRabbit

Summary by CodeRabbit

  • Bug Fixes

    • OAuth provider docsUrl is now optional, allowing provider metadata without documentation links.
    • Removed the documentation URL for the Enstall OAuth provider so it no longer returns docsUrl in its provider data.
  • Release Management

    • Updated the package changeset to publish a patch/minor version bump for @clerk/shared.

@changeset-bot

changeset-botBot commented Jun 16, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3c3f1af

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

This PR includes changesets to release 23 packages
NameType
@clerk/sharedMinor
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/electronPatch
@clerk/expo-passkeysPatch
@clerk/expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/headlessPatch
@clerk/honoPatch
@clerk/localizationsPatch
@clerk/mswPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/reactPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/uiPatch
@clerk/vuePatch
@clerk/swingsetPatch

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

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown

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

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJun 23, 2026 3:10pm
swingsetReadyReadyPreview, CommentJun 23, 2026 3:10pm

Request Review

@coderabbitai

coderabbitaiBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 83a2cf87-9c7f-47ca-825a-aaeae2d39229

📥 Commits

Reviewing files that changed from the base of the PR and between 9d861e8 and 2ac22ef.

📒 Files selected for processing (1)
  • .changeset/curly-roses-yawn.md
✅ Files skipped from review due to trivial changes (1)
  • .changeset/curly-roses-yawn.md

📝 Walkthrough

Walkthrough

OAuthProviderData.docsUrl is changed from a required to an optional field. The enstall OAuth provider entry has its docsUrl property removed in both packages/shared/src/oauth.ts and packages/shared/src/types/runtime-values.ts. Changesets are added for @clerk/shared documenting the API adjustment.

Changes

OAuthProviderData.docsUrl optionality and enstall data update

Layer / File(s)Summary
Make docsUrl optional and remove enstall docsUrl
packages/shared/src/types/oauth.ts, packages/shared/src/oauth.ts, packages/shared/src/types/runtime-values.ts, .changeset/fresh-lies-film.md, .changeset/curly-roses-yawn.md
docsUrl is marked optional on OAuthProviderData; the enstall provider entry drops its docsUrl property from both OAUTH_PROVIDERS arrays; changesets document the API adjustment.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐇 A URL once required, now set free,
The enstall provider travels light, you see.
No docs link to carry, no string to bind,
Optional and nimble — what a find!
Hop along, little patch, you're just fine! 🌿

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly describes the main change: removing the docsUrl field for the Enstall OAuth provider, which is the core focus of the pull request across all modified files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@pkg-pr-new

pkg-pr-newBot commented Jun 16, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/electron

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

@clerk/electron-passkeys

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

@clerk/eslint-plugin

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/hono

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 3c3f1af

@SarahSoutoulSarahSoutoul self-assigned this Jun 16, 2026

@coderabbitaicoderabbitaiBot 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/shared/src/types/oauth.ts (1)

5-10: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Add JSDoc to document the public OAuthProviderData interface.

The OAuthProviderData interface is a public, reference-facing API exported from @clerk/shared that will appear in generated customer documentation. Per the coding guidelines for packages/**/src/**/*.ts files, all public APIs must be documented with comprehensive JSDoc comments.

This interface lacks documentation explaining:

  • The purpose of the interface (OAuth provider configuration metadata)
  • Each property and its role
  • That docsUrl is now optional (not all providers have public documentation)

This is especially important since this PR changes the API surface by making docsUrl optional—customers using this interface need clear documentation of the change.

📝 Suggested JSDoc for OAuthProviderData
 import type { OAuthStrategy } from './strategies';
export type OAuthScope = string;
+/**+ * Represents the configuration metadata for an OAuth provider.+ * + * This interface defines the structure of OAuth provider entries used by Clerk's OAuth integration layer.+ * Each provider has a unique identifier, associated strategy, and optional documentation link.+ * + * `@property` provider - The unique provider identifier (e.g., 'google', 'github', 'enstall')+ * `@property` strategy - The OAuth strategy name for this provider+ * `@property` name - Human-readable display name of the provider+ * `@property` docsUrl - Optional URL to the provider's documentation. Not all providers expose public documentation.+ */
export interface OAuthProviderData {
provider: OAuthProvider;
strategy: OAuthStrategy;
name: string;
docsUrl?: string;
}
🤖 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/shared/src/types/oauth.ts` around lines 5 - 10, The public
OAuthProviderData interface is missing JSDoc documentation required for all
public APIs in packages/shared. Add a comprehensive JSDoc comment block above
the interface definition that explains: the purpose of the interface as OAuth
provider configuration metadata, the role of each property (provider, strategy,
name, and docsUrl), and specifically document that docsUrl is optional since not
all providers have public documentation. This ensures the interface is properly
documented for generated customer documentation and clarifies the API surface
change.

Source: Coding guidelines

🤖 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.
Outside diff comments:
In `@packages/shared/src/types/oauth.ts`:
- Around line 5-10: The public OAuthProviderData interface is missing JSDoc
documentation required for all public APIs in packages/shared. Add a
comprehensive JSDoc comment block above the interface definition that explains:
the purpose of the interface as OAuth provider configuration metadata, the role
of each property (provider, strategy, name, and docsUrl), and specifically
document that docsUrl is optional since not all providers have public
documentation. This ensures the interface is properly documented for generated
customer documentation and clarifies the API surface change.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 936623be-bf17-4884-ae4f-fe84ff5cda43

📥 Commits

Reviewing files that changed from the base of the PR and between d97a887 and 9d861e8.

📒 Files selected for processing (4)
  • .changeset/fresh-lies-film.md
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/oauth.ts
  • packages/shared/src/types/runtime-values.ts
💤 Files with no reviewable changes (2)
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/runtime-values.ts

@github-actions

github-actionsBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-06-23T15:11:19.996Z

Summary

MetricCount
Packages analyzed19
Packages with changes1
🔴 Breaking changes1
🟡 Non-breaking changes0
🟢 Additions0

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

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

🔴 Breaking changes index (1)

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

PackageSubpathChange
@clerk/shared./typesOAuthProviderData.docsUrl

@clerk/shared

Current version: 4.20.0
Recommended bump: MAJOR → 5.0.0

Subpath ./types

🔴 Breaking Changes (1)

Changed: OAuthProviderData.docsUrl
- docsUrl: string;+ docsUrl?: string;

Static analyzer: Modified property OAuthProviderData.docsUrl: Member became optional

🤖 AI review (reclassified as breaking) (85%): Making an existing output field optional is breaking (rule 4): consumers reading docsUrl from an OAuthProviderData object previously had a guaranteed string but now receive string | undefined, requiring them to add a null check or their existing code may break at runtime.

Migration: Update any code that reads OAuthProviderData.docsUrl to handle the undefined case, e.g. providerData.docsUrl ?? ''.


Report generated by Break Check

Last ran on 3c3f1af.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

@wobsoriano

Copy link
Copy Markdown
Member

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

provider: 'enstall',
strategy: 'oauth_enstall',
name: 'Enstall',
docsUrl: 'https://clerk.com/docs/authentication/social-connections/enstall',

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.

I ran a full org-wide sweep of docsUrl / OAUTH_PROVIDERS consumers (in-repo + gh search code --owner clerk), and there is the one spot worth a second look — everything appears safe.

clerk/cli reads OAUTH_PROVIDERS[].docsUrl but defensively (?.docsUrl ?? fallback), and the in-repo UI consumers only read .strategy/.provider/.name, never .docsUrl, so we're good here.

The tricky one is clerk/dashboard. Its getSocialSettings.ts imports OAUTH_PROVIDERS from @clerk/shared/oauth and reads item.docsUrl with a name-based fallback:

item.docsUrl??`https://clerk.com/docs/guides/configure/auth-strategies/social-connections/${item.provider}`

Then, it renders that as the provider's docs link on the SSO connection page.

With docsUrl gone, Enstall falls through to …/guides/configure/auth-strategies/social-connections/enstall, which currently 404s — whereas the URL being removed here 308-redirects to the live social-connections overview (via the redirect added in clerk-docs#3391). So on the Enstall-enabled instance, this swaps a working (redirected) link for a hard 404 on the surface that actually renders it.

Since the dashboard is what surfaces this link, should we pair this with a dashboard change that drops the link when docsUrl is absent (or skips the fallback for private providers), or add a clerk-docs redirect for the new …/auth-strategies/social-connections/enstall path so the fallback resolves?

@SarahSoutoulSarahSoutoulJun 17, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Nice catch! Made a sibling dashboard PR. @manovotny

@manovotnymanovotny self-assigned this Jun 17, 2026
@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

Makes sense! But I should prob make it a major bump then? @wobsoriano

@manovotnymanovotny 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.

I am good with the changes here and in https://github.com/clerk/dashboard/pull/9497 (this PR needs to land first).

I would appreciate another set of eyes and approval before merge to ensure we're not overlooking anything else.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.
Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?
Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

@jacekradko@wobsoriano could I follow up on this?

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Given that this is internal, we can disregard the API breaking change break check 👍🏼

@wobsoriano
wobsoriano enabled auto-merge (squash) June 23, 2026 15:15
@wobsoriano
wobsoriano merged commit 97039bb into mainJun 23, 2026
48 checks passed
@wobsoriano
wobsoriano deleted the ss/DOCS-11817 branch June 23, 2026 15:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@SarahSoutoul@wobsoriano@manovotny@NWylynko
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(shared): drop docsUrl for Enstall OAuth provider by SarahSoutoul · Pull Request #8885 · clerk/javascript · GitHub
Skip to content

fix(shared): drop docsUrl for Enstall OAuth provider - #8885

Merged
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817
Jun 23, 2026
Merged

fix(shared): drop docsUrl for Enstall OAuth provider#8885
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817

Conversation

@SarahSoutoul

@SarahSoutoulSarahSoutoul commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

This PR is paired with a dashboard PR.

Problem

The JS SDK was shipping a docsUrl for Enstall that points to a docs page that does not exist: https://clerk.com/docs/authentication/social-connections/enstall. That link surfaces to end users as a 404.

Enstall is a private, single-customer OIDC provider rather than a general public social connection, so we should not ship a public docs link for it.

This PR removes the public docsUrl for the Enstall OAuth provider from clerk/javascript.

Changes

  • Made docsUrl optional on OAuthProviderData
  • Removed docsUrl from the Enstall provider entry in:
    • packages/shared/src/oauth.ts
    • packages/shared/src/types/runtime-values.ts
  • Audited current shared/UI consumers in this repo and did not find any UI surface that assumes docsUrl is always present for OAuth providers

Notes

  • This is the SDK-side follow-up only for Enstall.
  • The long-lived docs redirect added here still needs to remain in clerk-docs for already-shipped SDK versions that still contain the old URL

Summary by CodeRabbit

Summary by CodeRabbit

  • Bug Fixes

    • OAuth provider docsUrl is now optional, allowing provider metadata without documentation links.
    • Removed the documentation URL for the Enstall OAuth provider so it no longer returns docsUrl in its provider data.
  • Release Management

    • Updated the package changeset to publish a patch/minor version bump for @clerk/shared.

@changeset-bot

changeset-botBot commented Jun 16, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3c3f1af

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

This PR includes changesets to release 23 packages
NameType
@clerk/sharedMinor
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/electronPatch
@clerk/expo-passkeysPatch
@clerk/expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/headlessPatch
@clerk/honoPatch
@clerk/localizationsPatch
@clerk/mswPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/reactPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/uiPatch
@clerk/vuePatch
@clerk/swingsetPatch

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

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown

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

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJun 23, 2026 3:10pm
swingsetReadyReadyPreview, CommentJun 23, 2026 3:10pm

Request Review

@coderabbitai

coderabbitaiBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 83a2cf87-9c7f-47ca-825a-aaeae2d39229

📥 Commits

Reviewing files that changed from the base of the PR and between 9d861e8 and 2ac22ef.

📒 Files selected for processing (1)
  • .changeset/curly-roses-yawn.md
✅ Files skipped from review due to trivial changes (1)
  • .changeset/curly-roses-yawn.md

📝 Walkthrough

Walkthrough

OAuthProviderData.docsUrl is changed from a required to an optional field. The enstall OAuth provider entry has its docsUrl property removed in both packages/shared/src/oauth.ts and packages/shared/src/types/runtime-values.ts. Changesets are added for @clerk/shared documenting the API adjustment.

Changes

OAuthProviderData.docsUrl optionality and enstall data update

Layer / File(s)Summary
Make docsUrl optional and remove enstall docsUrl
packages/shared/src/types/oauth.ts, packages/shared/src/oauth.ts, packages/shared/src/types/runtime-values.ts, .changeset/fresh-lies-film.md, .changeset/curly-roses-yawn.md
docsUrl is marked optional on OAuthProviderData; the enstall provider entry drops its docsUrl property from both OAUTH_PROVIDERS arrays; changesets document the API adjustment.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐇 A URL once required, now set free,
The enstall provider travels light, you see.
No docs link to carry, no string to bind,
Optional and nimble — what a find!
Hop along, little patch, you're just fine! 🌿

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly describes the main change: removing the docsUrl field for the Enstall OAuth provider, which is the core focus of the pull request across all modified files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@pkg-pr-new

pkg-pr-newBot commented Jun 16, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/electron

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

@clerk/electron-passkeys

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

@clerk/eslint-plugin

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/hono

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 3c3f1af

@SarahSoutoulSarahSoutoul self-assigned this Jun 16, 2026

@coderabbitaicoderabbitaiBot 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/shared/src/types/oauth.ts (1)

5-10: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Add JSDoc to document the public OAuthProviderData interface.

The OAuthProviderData interface is a public, reference-facing API exported from @clerk/shared that will appear in generated customer documentation. Per the coding guidelines for packages/**/src/**/*.ts files, all public APIs must be documented with comprehensive JSDoc comments.

This interface lacks documentation explaining:

  • The purpose of the interface (OAuth provider configuration metadata)
  • Each property and its role
  • That docsUrl is now optional (not all providers have public documentation)

This is especially important since this PR changes the API surface by making docsUrl optional—customers using this interface need clear documentation of the change.

📝 Suggested JSDoc for OAuthProviderData
 import type { OAuthStrategy } from './strategies';
export type OAuthScope = string;
+/**+ * Represents the configuration metadata for an OAuth provider.+ * + * This interface defines the structure of OAuth provider entries used by Clerk's OAuth integration layer.+ * Each provider has a unique identifier, associated strategy, and optional documentation link.+ * + * `@property` provider - The unique provider identifier (e.g., 'google', 'github', 'enstall')+ * `@property` strategy - The OAuth strategy name for this provider+ * `@property` name - Human-readable display name of the provider+ * `@property` docsUrl - Optional URL to the provider's documentation. Not all providers expose public documentation.+ */
export interface OAuthProviderData {
provider: OAuthProvider;
strategy: OAuthStrategy;
name: string;
docsUrl?: string;
}
🤖 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/shared/src/types/oauth.ts` around lines 5 - 10, The public
OAuthProviderData interface is missing JSDoc documentation required for all
public APIs in packages/shared. Add a comprehensive JSDoc comment block above
the interface definition that explains: the purpose of the interface as OAuth
provider configuration metadata, the role of each property (provider, strategy,
name, and docsUrl), and specifically document that docsUrl is optional since not
all providers have public documentation. This ensures the interface is properly
documented for generated customer documentation and clarifies the API surface
change.

Source: Coding guidelines

🤖 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.
Outside diff comments:
In `@packages/shared/src/types/oauth.ts`:
- Around line 5-10: The public OAuthProviderData interface is missing JSDoc
documentation required for all public APIs in packages/shared. Add a
comprehensive JSDoc comment block above the interface definition that explains:
the purpose of the interface as OAuth provider configuration metadata, the role
of each property (provider, strategy, name, and docsUrl), and specifically
document that docsUrl is optional since not all providers have public
documentation. This ensures the interface is properly documented for generated
customer documentation and clarifies the API surface change.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 936623be-bf17-4884-ae4f-fe84ff5cda43

📥 Commits

Reviewing files that changed from the base of the PR and between d97a887 and 9d861e8.

📒 Files selected for processing (4)
  • .changeset/fresh-lies-film.md
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/oauth.ts
  • packages/shared/src/types/runtime-values.ts
💤 Files with no reviewable changes (2)
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/runtime-values.ts

@github-actions

github-actionsBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-06-23T15:11:19.996Z

Summary

MetricCount
Packages analyzed19
Packages with changes1
🔴 Breaking changes1
🟡 Non-breaking changes0
🟢 Additions0

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

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

🔴 Breaking changes index (1)

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

PackageSubpathChange
@clerk/shared./typesOAuthProviderData.docsUrl

@clerk/shared

Current version: 4.20.0
Recommended bump: MAJOR → 5.0.0

Subpath ./types

🔴 Breaking Changes (1)

Changed: OAuthProviderData.docsUrl
- docsUrl: string;+ docsUrl?: string;

Static analyzer: Modified property OAuthProviderData.docsUrl: Member became optional

🤖 AI review (reclassified as breaking) (85%): Making an existing output field optional is breaking (rule 4): consumers reading docsUrl from an OAuthProviderData object previously had a guaranteed string but now receive string | undefined, requiring them to add a null check or their existing code may break at runtime.

Migration: Update any code that reads OAuthProviderData.docsUrl to handle the undefined case, e.g. providerData.docsUrl ?? ''.


Report generated by Break Check

Last ran on 3c3f1af.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

@wobsoriano

Copy link
Copy Markdown
Member

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

provider: 'enstall',
strategy: 'oauth_enstall',
name: 'Enstall',
docsUrl: 'https://clerk.com/docs/authentication/social-connections/enstall',

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.

I ran a full org-wide sweep of docsUrl / OAUTH_PROVIDERS consumers (in-repo + gh search code --owner clerk), and there is the one spot worth a second look — everything appears safe.

clerk/cli reads OAUTH_PROVIDERS[].docsUrl but defensively (?.docsUrl ?? fallback), and the in-repo UI consumers only read .strategy/.provider/.name, never .docsUrl, so we're good here.

The tricky one is clerk/dashboard. Its getSocialSettings.ts imports OAUTH_PROVIDERS from @clerk/shared/oauth and reads item.docsUrl with a name-based fallback:

item.docsUrl??`https://clerk.com/docs/guides/configure/auth-strategies/social-connections/${item.provider}`

Then, it renders that as the provider's docs link on the SSO connection page.

With docsUrl gone, Enstall falls through to …/guides/configure/auth-strategies/social-connections/enstall, which currently 404s — whereas the URL being removed here 308-redirects to the live social-connections overview (via the redirect added in clerk-docs#3391). So on the Enstall-enabled instance, this swaps a working (redirected) link for a hard 404 on the surface that actually renders it.

Since the dashboard is what surfaces this link, should we pair this with a dashboard change that drops the link when docsUrl is absent (or skips the fallback for private providers), or add a clerk-docs redirect for the new …/auth-strategies/social-connections/enstall path so the fallback resolves?

@SarahSoutoulSarahSoutoulJun 17, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Nice catch! Made a sibling dashboard PR. @manovotny

@manovotnymanovotny self-assigned this Jun 17, 2026
@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

Makes sense! But I should prob make it a major bump then? @wobsoriano

@manovotnymanovotny 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.

I am good with the changes here and in https://github.com/clerk/dashboard/pull/9497 (this PR needs to land first).

I would appreciate another set of eyes and approval before merge to ensure we're not overlooking anything else.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.
Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?
Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

@jacekradko@wobsoriano could I follow up on this?

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Given that this is internal, we can disregard the API breaking change break check 👍🏼

@wobsoriano
wobsoriano enabled auto-merge (squash) June 23, 2026 15:15
@wobsoriano
wobsoriano merged commit 97039bb into mainJun 23, 2026
48 checks passed
@wobsoriano
wobsoriano deleted the ss/DOCS-11817 branch June 23, 2026 15:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@SarahSoutoul@wobsoriano@manovotny@NWylynko
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); fix(shared): drop docsUrl for Enstall OAuth provider by SarahSoutoul · Pull Request #8885 · clerk/javascript · GitHub
Skip to content

fix(shared): drop docsUrl for Enstall OAuth provider - #8885

Merged
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817
Jun 23, 2026
Merged

fix(shared): drop docsUrl for Enstall OAuth provider#8885
wobsoriano merged 9 commits into
mainfrom
ss/DOCS-11817

Conversation

@SarahSoutoul

@SarahSoutoulSarahSoutoul commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

This PR is paired with a dashboard PR.

Problem

The JS SDK was shipping a docsUrl for Enstall that points to a docs page that does not exist: https://clerk.com/docs/authentication/social-connections/enstall. That link surfaces to end users as a 404.

Enstall is a private, single-customer OIDC provider rather than a general public social connection, so we should not ship a public docs link for it.

This PR removes the public docsUrl for the Enstall OAuth provider from clerk/javascript.

Changes

  • Made docsUrl optional on OAuthProviderData
  • Removed docsUrl from the Enstall provider entry in:
    • packages/shared/src/oauth.ts
    • packages/shared/src/types/runtime-values.ts
  • Audited current shared/UI consumers in this repo and did not find any UI surface that assumes docsUrl is always present for OAuth providers

Notes

  • This is the SDK-side follow-up only for Enstall.
  • The long-lived docs redirect added here still needs to remain in clerk-docs for already-shipped SDK versions that still contain the old URL

Summary by CodeRabbit

Summary by CodeRabbit

  • Bug Fixes

    • OAuth provider docsUrl is now optional, allowing provider metadata without documentation links.
    • Removed the documentation URL for the Enstall OAuth provider so it no longer returns docsUrl in its provider data.
  • Release Management

    • Updated the package changeset to publish a patch/minor version bump for @clerk/shared.

@changeset-bot

changeset-botBot commented Jun 16, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3c3f1af

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

This PR includes changesets to release 23 packages
NameType
@clerk/sharedMinor
@clerk/astroPatch
@clerk/backendPatch
@clerk/chrome-extensionPatch
@clerk/clerk-jsPatch
@clerk/electronPatch
@clerk/expo-passkeysPatch
@clerk/expoPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/headlessPatch
@clerk/honoPatch
@clerk/localizationsPatch
@clerk/mswPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/reactPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/uiPatch
@clerk/vuePatch
@clerk/swingsetPatch

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

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown

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

ProjectDeploymentActionsUpdated (UTC)
clerk-js-sandboxReadyReadyPreview, CommentJun 23, 2026 3:10pm
swingsetReadyReadyPreview, CommentJun 23, 2026 3:10pm

Request Review

@coderabbitai

coderabbitaiBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 83a2cf87-9c7f-47ca-825a-aaeae2d39229

📥 Commits

Reviewing files that changed from the base of the PR and between 9d861e8 and 2ac22ef.

📒 Files selected for processing (1)
  • .changeset/curly-roses-yawn.md
✅ Files skipped from review due to trivial changes (1)
  • .changeset/curly-roses-yawn.md

📝 Walkthrough

Walkthrough

OAuthProviderData.docsUrl is changed from a required to an optional field. The enstall OAuth provider entry has its docsUrl property removed in both packages/shared/src/oauth.ts and packages/shared/src/types/runtime-values.ts. Changesets are added for @clerk/shared documenting the API adjustment.

Changes

OAuthProviderData.docsUrl optionality and enstall data update

Layer / File(s)Summary
Make docsUrl optional and remove enstall docsUrl
packages/shared/src/types/oauth.ts, packages/shared/src/oauth.ts, packages/shared/src/types/runtime-values.ts, .changeset/fresh-lies-film.md, .changeset/curly-roses-yawn.md
docsUrl is marked optional on OAuthProviderData; the enstall provider entry drops its docsUrl property from both OAUTH_PROVIDERS arrays; changesets document the API adjustment.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐇 A URL once required, now set free,
The enstall provider travels light, you see.
No docs link to carry, no string to bind,
Optional and nimble — what a find!
Hop along, little patch, you're just fine! 🌿

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly describes the main change: removing the docsUrl field for the Enstall OAuth provider, which is the core focus of the pull request across all modified files.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@pkg-pr-new

pkg-pr-newBot commented Jun 16, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/electron

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

@clerk/electron-passkeys

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

@clerk/eslint-plugin

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

@clerk/expo

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/hono

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 3c3f1af

@SarahSoutoulSarahSoutoul self-assigned this Jun 16, 2026

@coderabbitaicoderabbitaiBot 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/shared/src/types/oauth.ts (1)

5-10: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Add JSDoc to document the public OAuthProviderData interface.

The OAuthProviderData interface is a public, reference-facing API exported from @clerk/shared that will appear in generated customer documentation. Per the coding guidelines for packages/**/src/**/*.ts files, all public APIs must be documented with comprehensive JSDoc comments.

This interface lacks documentation explaining:

  • The purpose of the interface (OAuth provider configuration metadata)
  • Each property and its role
  • That docsUrl is now optional (not all providers have public documentation)

This is especially important since this PR changes the API surface by making docsUrl optional—customers using this interface need clear documentation of the change.

📝 Suggested JSDoc for OAuthProviderData
 import type { OAuthStrategy } from './strategies';
export type OAuthScope = string;
+/**+ * Represents the configuration metadata for an OAuth provider.+ * + * This interface defines the structure of OAuth provider entries used by Clerk's OAuth integration layer.+ * Each provider has a unique identifier, associated strategy, and optional documentation link.+ * + * `@property` provider - The unique provider identifier (e.g., 'google', 'github', 'enstall')+ * `@property` strategy - The OAuth strategy name for this provider+ * `@property` name - Human-readable display name of the provider+ * `@property` docsUrl - Optional URL to the provider's documentation. Not all providers expose public documentation.+ */
export interface OAuthProviderData {
provider: OAuthProvider;
strategy: OAuthStrategy;
name: string;
docsUrl?: string;
}
🤖 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/shared/src/types/oauth.ts` around lines 5 - 10, The public
OAuthProviderData interface is missing JSDoc documentation required for all
public APIs in packages/shared. Add a comprehensive JSDoc comment block above
the interface definition that explains: the purpose of the interface as OAuth
provider configuration metadata, the role of each property (provider, strategy,
name, and docsUrl), and specifically document that docsUrl is optional since not
all providers have public documentation. This ensures the interface is properly
documented for generated customer documentation and clarifies the API surface
change.

Source: Coding guidelines

🤖 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.
Outside diff comments:
In `@packages/shared/src/types/oauth.ts`:
- Around line 5-10: The public OAuthProviderData interface is missing JSDoc
documentation required for all public APIs in packages/shared. Add a
comprehensive JSDoc comment block above the interface definition that explains:
the purpose of the interface as OAuth provider configuration metadata, the role
of each property (provider, strategy, name, and docsUrl), and specifically
document that docsUrl is optional since not all providers have public
documentation. This ensures the interface is properly documented for generated
customer documentation and clarifies the API surface change.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 936623be-bf17-4884-ae4f-fe84ff5cda43

📥 Commits

Reviewing files that changed from the base of the PR and between d97a887 and 9d861e8.

📒 Files selected for processing (4)
  • .changeset/fresh-lies-film.md
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/oauth.ts
  • packages/shared/src/types/runtime-values.ts
💤 Files with no reviewable changes (2)
  • packages/shared/src/oauth.ts
  • packages/shared/src/types/runtime-values.ts

@github-actions

github-actionsBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-06-23T15:11:19.996Z

Summary

MetricCount
Packages analyzed19
Packages with changes1
🔴 Breaking changes1
🟡 Non-breaking changes0
🟢 Additions0

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

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

🔴 Breaking changes index (1)

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

PackageSubpathChange
@clerk/shared./typesOAuthProviderData.docsUrl

@clerk/shared

Current version: 4.20.0
Recommended bump: MAJOR → 5.0.0

Subpath ./types

🔴 Breaking Changes (1)

Changed: OAuthProviderData.docsUrl
- docsUrl: string;+ docsUrl?: string;

Static analyzer: Modified property OAuthProviderData.docsUrl: Member became optional

🤖 AI review (reclassified as breaking) (85%): Making an existing output field optional is breaking (rule 4): consumers reading docsUrl from an OAuthProviderData object previously had a guaranteed string but now receive string | undefined, requiring them to add a null check or their existing code may break at runtime.

Migration: Update any code that reads OAuthProviderData.docsUrl to handle the undefined case, e.g. providerData.docsUrl ?? ''.


Report generated by Break Check

Last ran on 3c3f1af.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

@wobsoriano

Copy link
Copy Markdown
Member

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.

Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?

Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

provider: 'enstall',
strategy: 'oauth_enstall',
name: 'Enstall',
docsUrl: 'https://clerk.com/docs/authentication/social-connections/enstall',

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.

I ran a full org-wide sweep of docsUrl / OAUTH_PROVIDERS consumers (in-repo + gh search code --owner clerk), and there is the one spot worth a second look — everything appears safe.

clerk/cli reads OAUTH_PROVIDERS[].docsUrl but defensively (?.docsUrl ?? fallback), and the in-repo UI consumers only read .strategy/.provider/.name, never .docsUrl, so we're good here.

The tricky one is clerk/dashboard. Its getSocialSettings.ts imports OAUTH_PROVIDERS from @clerk/shared/oauth and reads item.docsUrl with a name-based fallback:

item.docsUrl??`https://clerk.com/docs/guides/configure/auth-strategies/social-connections/${item.provider}`

Then, it renders that as the provider's docs link on the SSO connection page.

With docsUrl gone, Enstall falls through to …/guides/configure/auth-strategies/social-connections/enstall, which currently 404s — whereas the URL being removed here 308-redirects to the live social-connections overview (via the redirect added in clerk-docs#3391). So on the Enstall-enabled instance, this swaps a working (redirected) link for a hard 404 on the surface that actually renders it.

Since the dashboard is what surfaces this link, should we pair this with a dashboard change that drops the link when docsUrl is absent (or skips the fallback for private providers), or add a clerk-docs redirect for the new …/auth-strategies/social-connections/enstall path so the fallback resolves?

@SarahSoutoulSarahSoutoulJun 17, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Nice catch! Made a sibling dashboard PR. @manovotny

@manovotnymanovotny self-assigned this Jun 17, 2026
@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

Makes sense! But I should prob make it a major bump then? @wobsoriano

@manovotnymanovotny 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.

I am good with the changes here and in https://github.com/clerk/dashboard/pull/9497 (this PR needs to land first).

I would appreciate another set of eyes and approval before merge to ensure we're not overlooking anything else.

@SarahSoutoul

Copy link
Copy Markdown
ContributorAuthor

@manovotny a bit worried about this warning. Making OAuthProviderData.docsUrl optional fixes the Enstall 404 cleanly on the SDK side, but it also changes a public @clerk/shared type from string to string | undefined, which the analyzer is classifying as a breaking change. That would imply a major bump just for this fix, which feels heavier than what we want here.
Wanted to sanity-check whether we’re okay treating this as a real breaking change, or if we'd rather preserve the current type shape and use a safer fallback for Enstall instead?
Screenshot 2026-06-16 at 5 44 00 pm

This is expected result with our new break check tool. But this type is only used by docs correct? Tagging @jacekradko here

@jacekradko@wobsoriano could I follow up on this?

@wobsorianowobsoriano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Given that this is internal, we can disregard the API breaking change break check 👍🏼

@wobsoriano
wobsoriano enabled auto-merge (squash) June 23, 2026 15:15
@wobsoriano
wobsoriano merged commit 97039bb into mainJun 23, 2026
48 checks passed
@wobsoriano
wobsoriano deleted the ss/DOCS-11817 branch June 23, 2026 15:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@SarahSoutoul@wobsoriano@manovotny@NWylynko