Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/dry-mice-begin.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
"@clerk/backend": patch
"@clerk/shared": patch
---

Fix OAuth consent component and hook related types.

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix grammar: hyphenate compound modifier.

"hook related types" should be "hook-related types" (hyphenated compound modifier).

📝 Proposed fix
-Fix OAuth consent component and hook related types.+Fix OAuth consent component and hook-related types.
📝 Committable suggestion

‼️IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Fix OAuth consent component and hookrelated types.
Fix OAuth consent component and hook-related types.
🧰 Tools
🪛 LanguageTool

[grammar] ~6-~6: Use a hyphen to join words.
Context: ...-- Fix OAuth consent component and hook related types.

(QB_NEW_EN_HYPHEN)

🤖 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 @.changeset/dry-mice-begin.md at line 6, Update the changelog sentence "Fix
OAuth consent component and hook related types." to hyphenate the compound
modifier by changing it to "Fix OAuth consent component and hook-related types."
Locate the exact string in the .changeset entry and replace only the phrase
"hook related" with "hook-related" so punctuation and capitalization remain
consistent.

12 changes: 12 additions & 0 deletions .typedoc/custom-plugin.mjs
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@ const FILES_WITHOUT_HEADINGS = [
'payment-element-props.mdx',
'use-organization-creation-defaults-return.mdx',
'use-organization-creation-defaults-params.mdx',
'use-o-auth-consent-params.mdx',
'use-o-auth-consent-return.mdx',
];

/**
Expand DownExpand Up@@ -66,6 +68,8 @@ const LINK_REPLACEMENTS = [
['organization-domain-resource', '/docs/reference/types/organization-domain-resource'],
['organization-invitation-resource', '/docs/reference/types/organization-invitation'],
['organization-membership-request-resource', '/docs/reference/types/organization-membership-request'],
['o-auth-consent-info', '/docs/reference/types/oauth-consent-info'],
['o-auth-consent-scope', '/docs/reference/types/oauth-consent-scope'],
['session', '/docs/reference/backend/types/backend-session'],
['session-activity', '/docs/reference/backend/types/backend-session-activity'],
['organization', '/docs/reference/backend/types/backend-organization'],
Expand All@@ -76,6 +80,9 @@ const LINK_REPLACEMENTS = [
['email-address', '/docs/reference/backend/types/backend-email-address'],
['enterprise-account', '/docs/reference/backend/types/backend-enterprise-account'],
['enterprise-account-connection', '/docs/reference/backend/types/backend-enterprise-account-connection'],
['enterprise-connection', '/docs/reference/backend/types/backend-enterprise-connection'],
['enterprise-connection-oauth-config', '/docs/reference/backend/types/backend-enterprise-connection-oauth-config'],
['enterprise-connection-saml-connection', '/docs/reference/backend/types/backend-enterprise-connection-saml-connection'],
['external-account', '/docs/reference/backend/types/backend-external-account'],
['phone-number', '/docs/reference/backend/types/backend-phone-number'],
['saml-account', '/docs/reference/backend/types/backend-saml-account'],
Expand All@@ -101,6 +108,7 @@ const LINK_REPLACEMENTS = [
['billing-statement-resource', '/docs/reference/types/billing-statement-resource'],
['billing-subscription-resource', '/docs/reference/types/billing-subscription-resource'],
['clerk-api-response-error', '/docs/reference/types/clerk-api-response-error'],
['clerk-api-error', '/docs/reference/types/clerk-api-error'],
['billing-statement-totals', '/docs/reference/types/billing-statement-totals'],
['billing-payment-resource', '/docs/reference/types/billing-payment-resource'],
['deleted-object-resource', '/docs/reference/types/deleted-object-resource'],
Expand DownExpand Up@@ -134,6 +142,10 @@ function getRelativeLinkReplacements() {

function getCatchAllReplacements() {
return [
{
pattern: /(?<![`[\]])\bClerkAPIResponseError\b(?![\]\(])/g,
replace: '[ClerkAPIResponseError](/docs/reference/types/clerk-api-response-error)',
},
{
pattern: /(?<![\[\w`])`Appearance`\\<`Theme`\\>/g,
replace: '[`Appearance<Theme>`](/docs/guides/customizing-clerk/appearance-prop/overview)',
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/src/api/resources/EnterpriseAccount.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import type { EnterpriseAccountConnectionJSON, EnterpriseAccountJSON } from './J
import { Verification } from './Verification';

/**
* Represents an enterprise SSO connection associated with an enterprise account.
* The Backend `EnterpriseAccountConnection` object represents an enterprise SSO connection associated with an enterprise account.
*/
export class EnterpriseAccountConnection {
constructor(
Expand Down
3 changes: 3 additions & 0 deletions packages/backend/src/api/resources/EnterpriseConnection.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import type {
EnterpriseConnectionSamlConnectionJSON,
} from './JSON';

/**
* The Backend `EnterpriseConnectionSamlConnection` object holds information about a SAML enterprise connection for an instance or organization.
*/
export class EnterpriseConnectionSamlConnection {
constructor(
/**
Expand Down
8 changes: 1 addition & 7 deletions packages/shared/src/react/hooks/useOAuthConsent.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,6 @@ const HOOK_NAME = 'useOAuthConsent';
* (`GET /me/oauth/consent/{oauthClientId}`). Ensure the user is authenticated before relying on this hook
* (for example, redirect to sign-in on your custom consent route).
*
* The hook is a pure data fetcher: it takes an explicit `oauthClientId` and optional `scope` and
* issues the fetch when both the user is signed in and `oauthClientId` is non-empty. The query is
* disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @example
* ```tsx
* import { useOAuthConsent } from '@clerk/react/internal'
Expand All@@ -30,7 +24,7 @@ const HOOK_NAME = 'useOAuthConsent';
* })
* ```
*/
export function useOAuthConsent(params: UseOAuthConsentParams = {}): UseOAuthConsentReturn {
export function useOAuthConsent(params: UseOAuthConsentParams): UseOAuthConsentReturn {
useAssertWrappedByClerkProvider(HOOK_NAME);

const { oauthClientId: oauthClientIdParam, scope, keepPreviousData = true, enabled = true } = params;
Comment thread
wobsoriano marked this conversation as resolved.
Expand Down
14 changes: 2 additions & 12 deletions packages/shared/src/react/hooks/useOAuthConsent.types.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,16 +2,9 @@ import type { ClerkAPIResponseError } from '../../errors/clerkApiResponseError';
import type { GetOAuthConsentInfoParams, OAuthConsentInfo } from '../../types';

/**
* Options for {@link useOAuthConsent}.
*
* Pass `oauthClientId` and `scope` explicitly. The hook does not read from `window.location` or
* any other ambient source. The hook is disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @interface
*/
export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'>> & {
export type UseOAuthConsentParams = Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'> & {
/**
* If `true`, the previous data will be kept in the cache until new data is fetched.
*
Expand All@@ -27,14 +20,11 @@ export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oau
};

/**
* @internal
*
* @interface
*/
export type UseOAuthConsentReturn = {
/**
* OAuth consent screen metadata from Clerk, or `undefined` before the first successful fetch.
* Additional fields (e.g. submission helpers) may be added in the future without renaming this hook.
* The OAuth consent screen metadata returned by Clerk, or `undefined` before the first successful fetch.
*/
data: OAuthConsentInfo | undefined;
/**
Expand Down
38 changes: 34 additions & 4 deletions packages/shared/src/types/oauthApplication.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,30 +24,60 @@ export interface OAuthConsentInfoJSON extends ClerkResourceJSON {

/**
* A single OAuth scope with its description and whether it requires consent.
*
* @interface
*/
export type OAuthConsentScope = {
/**
* The name of the scope, as defined by the OAuth application.
*/
scope: string;
/**
* The description of the scope, which can be shown to users on the consent screen. This may be `null` if no description is available.
*/
description: string | null;
/**
* Whether or not this scope requires explicit user consent. If `false`, the scope is considered "safe" and can be granted without showing the consent screen to the user.
*/
requiresConsent: boolean;
};

/**
* OAuth consent screen metadata from `GET /v1/me/oauth/consent/{oauthClientId}`.
* Includes information needed to populate the consent dialog.
* An interface representing OAuth consent information, including application details and requested scopes.
*
* @interface
*/
export type OAuthConsentInfo = {
/**
* The display name of the OAuth application requesting access.
*/
oauthApplicationName: string;
/**
* The URL of the OAuth application's logo image.
*/
oauthApplicationLogoUrl: string;
/**
* The homepage URL of the OAuth application.
*/
oauthApplicationUrl: string;
/**
* The OAuth `client_id` identifying the application.
*/
clientId: string;
/**
* The `state` parameter from the original authorize request.
*/
state: string;
/**
* A list of scopes the application is requesting, with descriptions and consent requirements.
*/
scopes: OAuthConsentScope[];
};

export type GetOAuthConsentInfoParams = {
/** OAuth `client_id` from the authorize request. */
/** The OAuth `client_id` from the authorize request. The hook is disabled when this value is empty or omitted. */
oauthClientId: string;
/** Optional space-delimited scope string from the authorize request. */
/** A space-delimited scope string from the authorize request. */
scope?: string;
};

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/dry-mice-begin.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
"@clerk/backend": patch
"@clerk/shared": patch
---

Fix OAuth consent component and hook related types.

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix grammar: hyphenate compound modifier.

"hook related types" should be "hook-related types" (hyphenated compound modifier).

📝 Proposed fix
-Fix OAuth consent component and hook related types.+Fix OAuth consent component and hook-related types.
📝 Committable suggestion

‼️IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Fix OAuth consent component and hookrelated types.
Fix OAuth consent component and hook-related types.
🧰 Tools
🪛 LanguageTool

[grammar] ~6-~6: Use a hyphen to join words.
Context: ...-- Fix OAuth consent component and hook related types.

(QB_NEW_EN_HYPHEN)

🤖 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 @.changeset/dry-mice-begin.md at line 6, Update the changelog sentence "Fix
OAuth consent component and hook related types." to hyphenate the compound
modifier by changing it to "Fix OAuth consent component and hook-related types."
Locate the exact string in the .changeset entry and replace only the phrase
"hook related" with "hook-related" so punctuation and capitalization remain
consistent.

12 changes: 12 additions & 0 deletions .typedoc/custom-plugin.mjs
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@ const FILES_WITHOUT_HEADINGS = [
'payment-element-props.mdx',
'use-organization-creation-defaults-return.mdx',
'use-organization-creation-defaults-params.mdx',
'use-o-auth-consent-params.mdx',
'use-o-auth-consent-return.mdx',
];

/**
Expand DownExpand Up@@ -66,6 +68,8 @@ const LINK_REPLACEMENTS = [
['organization-domain-resource', '/docs/reference/types/organization-domain-resource'],
['organization-invitation-resource', '/docs/reference/types/organization-invitation'],
['organization-membership-request-resource', '/docs/reference/types/organization-membership-request'],
['o-auth-consent-info', '/docs/reference/types/oauth-consent-info'],
['o-auth-consent-scope', '/docs/reference/types/oauth-consent-scope'],
['session', '/docs/reference/backend/types/backend-session'],
['session-activity', '/docs/reference/backend/types/backend-session-activity'],
['organization', '/docs/reference/backend/types/backend-organization'],
Expand All@@ -76,6 +80,9 @@ const LINK_REPLACEMENTS = [
['email-address', '/docs/reference/backend/types/backend-email-address'],
['enterprise-account', '/docs/reference/backend/types/backend-enterprise-account'],
['enterprise-account-connection', '/docs/reference/backend/types/backend-enterprise-account-connection'],
['enterprise-connection', '/docs/reference/backend/types/backend-enterprise-connection'],
['enterprise-connection-oauth-config', '/docs/reference/backend/types/backend-enterprise-connection-oauth-config'],
['enterprise-connection-saml-connection', '/docs/reference/backend/types/backend-enterprise-connection-saml-connection'],
['external-account', '/docs/reference/backend/types/backend-external-account'],
['phone-number', '/docs/reference/backend/types/backend-phone-number'],
['saml-account', '/docs/reference/backend/types/backend-saml-account'],
Expand All@@ -101,6 +108,7 @@ const LINK_REPLACEMENTS = [
['billing-statement-resource', '/docs/reference/types/billing-statement-resource'],
['billing-subscription-resource', '/docs/reference/types/billing-subscription-resource'],
['clerk-api-response-error', '/docs/reference/types/clerk-api-response-error'],
['clerk-api-error', '/docs/reference/types/clerk-api-error'],
['billing-statement-totals', '/docs/reference/types/billing-statement-totals'],
['billing-payment-resource', '/docs/reference/types/billing-payment-resource'],
['deleted-object-resource', '/docs/reference/types/deleted-object-resource'],
Expand DownExpand Up@@ -134,6 +142,10 @@ function getRelativeLinkReplacements() {

function getCatchAllReplacements() {
return [
{
pattern: /(?<![`[\]])\bClerkAPIResponseError\b(?![\]\(])/g,
replace: '[ClerkAPIResponseError](/docs/reference/types/clerk-api-response-error)',
},
{
pattern: /(?<![\[\w`])`Appearance`\\<`Theme`\\>/g,
replace: '[`Appearance<Theme>`](/docs/guides/customizing-clerk/appearance-prop/overview)',
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/src/api/resources/EnterpriseAccount.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import type { EnterpriseAccountConnectionJSON, EnterpriseAccountJSON } from './J
import { Verification } from './Verification';

/**
* Represents an enterprise SSO connection associated with an enterprise account.
* The Backend `EnterpriseAccountConnection` object represents an enterprise SSO connection associated with an enterprise account.
*/
export class EnterpriseAccountConnection {
constructor(
Expand Down
3 changes: 3 additions & 0 deletions packages/backend/src/api/resources/EnterpriseConnection.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import type {
EnterpriseConnectionSamlConnectionJSON,
} from './JSON';

/**
* The Backend `EnterpriseConnectionSamlConnection` object holds information about a SAML enterprise connection for an instance or organization.
*/
export class EnterpriseConnectionSamlConnection {
constructor(
/**
Expand Down
8 changes: 1 addition & 7 deletions packages/shared/src/react/hooks/useOAuthConsent.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,6 @@ const HOOK_NAME = 'useOAuthConsent';
* (`GET /me/oauth/consent/{oauthClientId}`). Ensure the user is authenticated before relying on this hook
* (for example, redirect to sign-in on your custom consent route).
*
* The hook is a pure data fetcher: it takes an explicit `oauthClientId` and optional `scope` and
* issues the fetch when both the user is signed in and `oauthClientId` is non-empty. The query is
* disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @example
* ```tsx
* import { useOAuthConsent } from '@clerk/react/internal'
Expand All@@ -30,7 +24,7 @@ const HOOK_NAME = 'useOAuthConsent';
* })
* ```
*/
export function useOAuthConsent(params: UseOAuthConsentParams = {}): UseOAuthConsentReturn {
export function useOAuthConsent(params: UseOAuthConsentParams): UseOAuthConsentReturn {
useAssertWrappedByClerkProvider(HOOK_NAME);

const { oauthClientId: oauthClientIdParam, scope, keepPreviousData = true, enabled = true } = params;
Comment thread
wobsoriano marked this conversation as resolved.
Expand Down
14 changes: 2 additions & 12 deletions packages/shared/src/react/hooks/useOAuthConsent.types.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,16 +2,9 @@ import type { ClerkAPIResponseError } from '../../errors/clerkApiResponseError';
import type { GetOAuthConsentInfoParams, OAuthConsentInfo } from '../../types';

/**
* Options for {@link useOAuthConsent}.
*
* Pass `oauthClientId` and `scope` explicitly. The hook does not read from `window.location` or
* any other ambient source. The hook is disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @interface
*/
export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'>> & {
export type UseOAuthConsentParams = Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'> & {
/**
* If `true`, the previous data will be kept in the cache until new data is fetched.
*
Expand All@@ -27,14 +20,11 @@ export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oau
};

/**
* @internal
*
* @interface
*/
export type UseOAuthConsentReturn = {
/**
* OAuth consent screen metadata from Clerk, or `undefined` before the first successful fetch.
* Additional fields (e.g. submission helpers) may be added in the future without renaming this hook.
* The OAuth consent screen metadata returned by Clerk, or `undefined` before the first successful fetch.
*/
data: OAuthConsentInfo | undefined;
/**
Expand Down
38 changes: 34 additions & 4 deletions packages/shared/src/types/oauthApplication.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,30 +24,60 @@ export interface OAuthConsentInfoJSON extends ClerkResourceJSON {

/**
* A single OAuth scope with its description and whether it requires consent.
*
* @interface
*/
export type OAuthConsentScope = {
/**
* The name of the scope, as defined by the OAuth application.
*/
scope: string;
/**
* The description of the scope, which can be shown to users on the consent screen. This may be `null` if no description is available.
*/
description: string | null;
/**
* Whether or not this scope requires explicit user consent. If `false`, the scope is considered "safe" and can be granted without showing the consent screen to the user.
*/
requiresConsent: boolean;
};

/**
* OAuth consent screen metadata from `GET /v1/me/oauth/consent/{oauthClientId}`.
* Includes information needed to populate the consent dialog.
* An interface representing OAuth consent information, including application details and requested scopes.
*
* @interface
*/
export type OAuthConsentInfo = {
/**
* The display name of the OAuth application requesting access.
*/
oauthApplicationName: string;
/**
* The URL of the OAuth application's logo image.
*/
oauthApplicationLogoUrl: string;
/**
* The homepage URL of the OAuth application.
*/
oauthApplicationUrl: string;
/**
* The OAuth `client_id` identifying the application.
*/
clientId: string;
/**
* The `state` parameter from the original authorize request.
*/
state: string;
/**
* A list of scopes the application is requesting, with descriptions and consent requirements.
*/
scopes: OAuthConsentScope[];
};

export type GetOAuthConsentInfoParams = {
/** OAuth `client_id` from the authorize request. */
/** The OAuth `client_id` from the authorize request. The hook is disabled when this value is empty or omitted. */
oauthClientId: string;
/** Optional space-delimited scope string from the authorize request. */
/** A space-delimited scope string from the authorize request. */
scope?: string;
};

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/dry-mice-begin.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
"@clerk/backend": patch
"@clerk/shared": patch
---

Fix OAuth consent component and hook related types.

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix grammar: hyphenate compound modifier.

"hook related types" should be "hook-related types" (hyphenated compound modifier).

📝 Proposed fix
-Fix OAuth consent component and hook related types.+Fix OAuth consent component and hook-related types.
📝 Committable suggestion

‼️IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Fix OAuth consent component and hookrelated types.
Fix OAuth consent component and hook-related types.
🧰 Tools
🪛 LanguageTool

[grammar] ~6-~6: Use a hyphen to join words.
Context: ...-- Fix OAuth consent component and hook related types.

(QB_NEW_EN_HYPHEN)

🤖 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 @.changeset/dry-mice-begin.md at line 6, Update the changelog sentence "Fix
OAuth consent component and hook related types." to hyphenate the compound
modifier by changing it to "Fix OAuth consent component and hook-related types."
Locate the exact string in the .changeset entry and replace only the phrase
"hook related" with "hook-related" so punctuation and capitalization remain
consistent.

12 changes: 12 additions & 0 deletions .typedoc/custom-plugin.mjs
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@ const FILES_WITHOUT_HEADINGS = [
'payment-element-props.mdx',
'use-organization-creation-defaults-return.mdx',
'use-organization-creation-defaults-params.mdx',
'use-o-auth-consent-params.mdx',
'use-o-auth-consent-return.mdx',
];

/**
Expand DownExpand Up@@ -66,6 +68,8 @@ const LINK_REPLACEMENTS = [
['organization-domain-resource', '/docs/reference/types/organization-domain-resource'],
['organization-invitation-resource', '/docs/reference/types/organization-invitation'],
['organization-membership-request-resource', '/docs/reference/types/organization-membership-request'],
['o-auth-consent-info', '/docs/reference/types/oauth-consent-info'],
['o-auth-consent-scope', '/docs/reference/types/oauth-consent-scope'],
['session', '/docs/reference/backend/types/backend-session'],
['session-activity', '/docs/reference/backend/types/backend-session-activity'],
['organization', '/docs/reference/backend/types/backend-organization'],
Expand All@@ -76,6 +80,9 @@ const LINK_REPLACEMENTS = [
['email-address', '/docs/reference/backend/types/backend-email-address'],
['enterprise-account', '/docs/reference/backend/types/backend-enterprise-account'],
['enterprise-account-connection', '/docs/reference/backend/types/backend-enterprise-account-connection'],
['enterprise-connection', '/docs/reference/backend/types/backend-enterprise-connection'],
['enterprise-connection-oauth-config', '/docs/reference/backend/types/backend-enterprise-connection-oauth-config'],
['enterprise-connection-saml-connection', '/docs/reference/backend/types/backend-enterprise-connection-saml-connection'],
['external-account', '/docs/reference/backend/types/backend-external-account'],
['phone-number', '/docs/reference/backend/types/backend-phone-number'],
['saml-account', '/docs/reference/backend/types/backend-saml-account'],
Expand All@@ -101,6 +108,7 @@ const LINK_REPLACEMENTS = [
['billing-statement-resource', '/docs/reference/types/billing-statement-resource'],
['billing-subscription-resource', '/docs/reference/types/billing-subscription-resource'],
['clerk-api-response-error', '/docs/reference/types/clerk-api-response-error'],
['clerk-api-error', '/docs/reference/types/clerk-api-error'],
['billing-statement-totals', '/docs/reference/types/billing-statement-totals'],
['billing-payment-resource', '/docs/reference/types/billing-payment-resource'],
['deleted-object-resource', '/docs/reference/types/deleted-object-resource'],
Expand DownExpand Up@@ -134,6 +142,10 @@ function getRelativeLinkReplacements() {

function getCatchAllReplacements() {
return [
{
pattern: /(?<![`[\]])\bClerkAPIResponseError\b(?![\]\(])/g,
replace: '[ClerkAPIResponseError](/docs/reference/types/clerk-api-response-error)',
},
{
pattern: /(?<![\[\w`])`Appearance`\\<`Theme`\\>/g,
replace: '[`Appearance<Theme>`](/docs/guides/customizing-clerk/appearance-prop/overview)',
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/src/api/resources/EnterpriseAccount.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import type { EnterpriseAccountConnectionJSON, EnterpriseAccountJSON } from './J
import { Verification } from './Verification';

/**
* Represents an enterprise SSO connection associated with an enterprise account.
* The Backend `EnterpriseAccountConnection` object represents an enterprise SSO connection associated with an enterprise account.
*/
export class EnterpriseAccountConnection {
constructor(
Expand Down
3 changes: 3 additions & 0 deletions packages/backend/src/api/resources/EnterpriseConnection.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import type {
EnterpriseConnectionSamlConnectionJSON,
} from './JSON';

/**
* The Backend `EnterpriseConnectionSamlConnection` object holds information about a SAML enterprise connection for an instance or organization.
*/
export class EnterpriseConnectionSamlConnection {
constructor(
/**
Expand Down
8 changes: 1 addition & 7 deletions packages/shared/src/react/hooks/useOAuthConsent.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,6 @@ const HOOK_NAME = 'useOAuthConsent';
* (`GET /me/oauth/consent/{oauthClientId}`). Ensure the user is authenticated before relying on this hook
* (for example, redirect to sign-in on your custom consent route).
*
* The hook is a pure data fetcher: it takes an explicit `oauthClientId` and optional `scope` and
* issues the fetch when both the user is signed in and `oauthClientId` is non-empty. The query is
* disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @example
* ```tsx
* import { useOAuthConsent } from '@clerk/react/internal'
Expand All@@ -30,7 +24,7 @@ const HOOK_NAME = 'useOAuthConsent';
* })
* ```
*/
export function useOAuthConsent(params: UseOAuthConsentParams = {}): UseOAuthConsentReturn {
export function useOAuthConsent(params: UseOAuthConsentParams): UseOAuthConsentReturn {
useAssertWrappedByClerkProvider(HOOK_NAME);

const { oauthClientId: oauthClientIdParam, scope, keepPreviousData = true, enabled = true } = params;
Comment thread
wobsoriano marked this conversation as resolved.
Expand Down
14 changes: 2 additions & 12 deletions packages/shared/src/react/hooks/useOAuthConsent.types.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,16 +2,9 @@ import type { ClerkAPIResponseError } from '../../errors/clerkApiResponseError';
import type { GetOAuthConsentInfoParams, OAuthConsentInfo } from '../../types';

/**
* Options for {@link useOAuthConsent}.
*
* Pass `oauthClientId` and `scope` explicitly. The hook does not read from `window.location` or
* any other ambient source. The hook is disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @interface
*/
export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'>> & {
export type UseOAuthConsentParams = Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'> & {
/**
* If `true`, the previous data will be kept in the cache until new data is fetched.
*
Expand All@@ -27,14 +20,11 @@ export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oau
};

/**
* @internal
*
* @interface
*/
export type UseOAuthConsentReturn = {
/**
* OAuth consent screen metadata from Clerk, or `undefined` before the first successful fetch.
* Additional fields (e.g. submission helpers) may be added in the future without renaming this hook.
* The OAuth consent screen metadata returned by Clerk, or `undefined` before the first successful fetch.
*/
data: OAuthConsentInfo | undefined;
/**
Expand Down
38 changes: 34 additions & 4 deletions packages/shared/src/types/oauthApplication.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,30 +24,60 @@ export interface OAuthConsentInfoJSON extends ClerkResourceJSON {

/**
* A single OAuth scope with its description and whether it requires consent.
*
* @interface
*/
export type OAuthConsentScope = {
/**
* The name of the scope, as defined by the OAuth application.
*/
scope: string;
/**
* The description of the scope, which can be shown to users on the consent screen. This may be `null` if no description is available.
*/
description: string | null;
/**
* Whether or not this scope requires explicit user consent. If `false`, the scope is considered "safe" and can be granted without showing the consent screen to the user.
*/
requiresConsent: boolean;
};

/**
* OAuth consent screen metadata from `GET /v1/me/oauth/consent/{oauthClientId}`.
* Includes information needed to populate the consent dialog.
* An interface representing OAuth consent information, including application details and requested scopes.
*
* @interface
*/
export type OAuthConsentInfo = {
/**
* The display name of the OAuth application requesting access.
*/
oauthApplicationName: string;
/**
* The URL of the OAuth application's logo image.
*/
oauthApplicationLogoUrl: string;
/**
* The homepage URL of the OAuth application.
*/
oauthApplicationUrl: string;
/**
* The OAuth `client_id` identifying the application.
*/
clientId: string;
/**
* The `state` parameter from the original authorize request.
*/
state: string;
/**
* A list of scopes the application is requesting, with descriptions and consent requirements.
*/
scopes: OAuthConsentScope[];
};

export type GetOAuthConsentInfoParams = {
/** OAuth `client_id` from the authorize request. */
/** The OAuth `client_id` from the authorize request. The hook is disabled when this value is empty or omitted. */
oauthClientId: string;
/** Optional space-delimited scope string from the authorize request. */
/** A space-delimited scope string from the authorize request. */
scope?: string;
};

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/dry-mice-begin.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
"@clerk/backend": patch
"@clerk/shared": patch
---

Fix OAuth consent component and hook related types.

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix grammar: hyphenate compound modifier.

"hook related types" should be "hook-related types" (hyphenated compound modifier).

📝 Proposed fix
-Fix OAuth consent component and hook related types.+Fix OAuth consent component and hook-related types.
📝 Committable suggestion

‼️IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Fix OAuth consent component and hookrelated types.
Fix OAuth consent component and hook-related types.
🧰 Tools
🪛 LanguageTool

[grammar] ~6-~6: Use a hyphen to join words.
Context: ...-- Fix OAuth consent component and hook related types.

(QB_NEW_EN_HYPHEN)

🤖 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 @.changeset/dry-mice-begin.md at line 6, Update the changelog sentence "Fix
OAuth consent component and hook related types." to hyphenate the compound
modifier by changing it to "Fix OAuth consent component and hook-related types."
Locate the exact string in the .changeset entry and replace only the phrase
"hook related" with "hook-related" so punctuation and capitalization remain
consistent.

12 changes: 12 additions & 0 deletions .typedoc/custom-plugin.mjs
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@ const FILES_WITHOUT_HEADINGS = [
'payment-element-props.mdx',
'use-organization-creation-defaults-return.mdx',
'use-organization-creation-defaults-params.mdx',
'use-o-auth-consent-params.mdx',
'use-o-auth-consent-return.mdx',
];

/**
Expand DownExpand Up@@ -66,6 +68,8 @@ const LINK_REPLACEMENTS = [
['organization-domain-resource', '/docs/reference/types/organization-domain-resource'],
['organization-invitation-resource', '/docs/reference/types/organization-invitation'],
['organization-membership-request-resource', '/docs/reference/types/organization-membership-request'],
['o-auth-consent-info', '/docs/reference/types/oauth-consent-info'],
['o-auth-consent-scope', '/docs/reference/types/oauth-consent-scope'],
['session', '/docs/reference/backend/types/backend-session'],
['session-activity', '/docs/reference/backend/types/backend-session-activity'],
['organization', '/docs/reference/backend/types/backend-organization'],
Expand All@@ -76,6 +80,9 @@ const LINK_REPLACEMENTS = [
['email-address', '/docs/reference/backend/types/backend-email-address'],
['enterprise-account', '/docs/reference/backend/types/backend-enterprise-account'],
['enterprise-account-connection', '/docs/reference/backend/types/backend-enterprise-account-connection'],
['enterprise-connection', '/docs/reference/backend/types/backend-enterprise-connection'],
['enterprise-connection-oauth-config', '/docs/reference/backend/types/backend-enterprise-connection-oauth-config'],
['enterprise-connection-saml-connection', '/docs/reference/backend/types/backend-enterprise-connection-saml-connection'],
['external-account', '/docs/reference/backend/types/backend-external-account'],
['phone-number', '/docs/reference/backend/types/backend-phone-number'],
['saml-account', '/docs/reference/backend/types/backend-saml-account'],
Expand All@@ -101,6 +108,7 @@ const LINK_REPLACEMENTS = [
['billing-statement-resource', '/docs/reference/types/billing-statement-resource'],
['billing-subscription-resource', '/docs/reference/types/billing-subscription-resource'],
['clerk-api-response-error', '/docs/reference/types/clerk-api-response-error'],
['clerk-api-error', '/docs/reference/types/clerk-api-error'],
['billing-statement-totals', '/docs/reference/types/billing-statement-totals'],
['billing-payment-resource', '/docs/reference/types/billing-payment-resource'],
['deleted-object-resource', '/docs/reference/types/deleted-object-resource'],
Expand DownExpand Up@@ -134,6 +142,10 @@ function getRelativeLinkReplacements() {

function getCatchAllReplacements() {
return [
{
pattern: /(?<![`[\]])\bClerkAPIResponseError\b(?![\]\(])/g,
replace: '[ClerkAPIResponseError](/docs/reference/types/clerk-api-response-error)',
},
{
pattern: /(?<![\[\w`])`Appearance`\\<`Theme`\\>/g,
replace: '[`Appearance<Theme>`](/docs/guides/customizing-clerk/appearance-prop/overview)',
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/src/api/resources/EnterpriseAccount.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import type { EnterpriseAccountConnectionJSON, EnterpriseAccountJSON } from './J
import { Verification } from './Verification';

/**
* Represents an enterprise SSO connection associated with an enterprise account.
* The Backend `EnterpriseAccountConnection` object represents an enterprise SSO connection associated with an enterprise account.
*/
export class EnterpriseAccountConnection {
constructor(
Expand Down
3 changes: 3 additions & 0 deletions packages/backend/src/api/resources/EnterpriseConnection.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import type {
EnterpriseConnectionSamlConnectionJSON,
} from './JSON';

/**
* The Backend `EnterpriseConnectionSamlConnection` object holds information about a SAML enterprise connection for an instance or organization.
*/
export class EnterpriseConnectionSamlConnection {
constructor(
/**
Expand Down
8 changes: 1 addition & 7 deletions packages/shared/src/react/hooks/useOAuthConsent.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,6 @@ const HOOK_NAME = 'useOAuthConsent';
* (`GET /me/oauth/consent/{oauthClientId}`). Ensure the user is authenticated before relying on this hook
* (for example, redirect to sign-in on your custom consent route).
*
* The hook is a pure data fetcher: it takes an explicit `oauthClientId` and optional `scope` and
* issues the fetch when both the user is signed in and `oauthClientId` is non-empty. The query is
* disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @example
* ```tsx
* import { useOAuthConsent } from '@clerk/react/internal'
Expand All@@ -30,7 +24,7 @@ const HOOK_NAME = 'useOAuthConsent';
* })
* ```
*/
export function useOAuthConsent(params: UseOAuthConsentParams = {}): UseOAuthConsentReturn {
export function useOAuthConsent(params: UseOAuthConsentParams): UseOAuthConsentReturn {
useAssertWrappedByClerkProvider(HOOK_NAME);

const { oauthClientId: oauthClientIdParam, scope, keepPreviousData = true, enabled = true } = params;
Comment thread
wobsoriano marked this conversation as resolved.
Expand Down
14 changes: 2 additions & 12 deletions packages/shared/src/react/hooks/useOAuthConsent.types.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,16 +2,9 @@ import type { ClerkAPIResponseError } from '../../errors/clerkApiResponseError';
import type { GetOAuthConsentInfoParams, OAuthConsentInfo } from '../../types';

/**
* Options for {@link useOAuthConsent}.
*
* Pass `oauthClientId` and `scope` explicitly. The hook does not read from `window.location` or
* any other ambient source. The hook is disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @interface
*/
export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'>> & {
export type UseOAuthConsentParams = Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'> & {
/**
* If `true`, the previous data will be kept in the cache until new data is fetched.
*
Expand All@@ -27,14 +20,11 @@ export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oau
};

/**
* @internal
*
* @interface
*/
export type UseOAuthConsentReturn = {
/**
* OAuth consent screen metadata from Clerk, or `undefined` before the first successful fetch.
* Additional fields (e.g. submission helpers) may be added in the future without renaming this hook.
* The OAuth consent screen metadata returned by Clerk, or `undefined` before the first successful fetch.
*/
data: OAuthConsentInfo | undefined;
/**
Expand Down
38 changes: 34 additions & 4 deletions packages/shared/src/types/oauthApplication.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,30 +24,60 @@ export interface OAuthConsentInfoJSON extends ClerkResourceJSON {

/**
* A single OAuth scope with its description and whether it requires consent.
*
* @interface
*/
export type OAuthConsentScope = {
/**
* The name of the scope, as defined by the OAuth application.
*/
scope: string;
/**
* The description of the scope, which can be shown to users on the consent screen. This may be `null` if no description is available.
*/
description: string | null;
/**
* Whether or not this scope requires explicit user consent. If `false`, the scope is considered "safe" and can be granted without showing the consent screen to the user.
*/
requiresConsent: boolean;
};

/**
* OAuth consent screen metadata from `GET /v1/me/oauth/consent/{oauthClientId}`.
* Includes information needed to populate the consent dialog.
* An interface representing OAuth consent information, including application details and requested scopes.
*
* @interface
*/
export type OAuthConsentInfo = {
/**
* The display name of the OAuth application requesting access.
*/
oauthApplicationName: string;
/**
* The URL of the OAuth application's logo image.
*/
oauthApplicationLogoUrl: string;
/**
* The homepage URL of the OAuth application.
*/
oauthApplicationUrl: string;
/**
* The OAuth `client_id` identifying the application.
*/
clientId: string;
/**
* The `state` parameter from the original authorize request.
*/
state: string;
/**
* A list of scopes the application is requesting, with descriptions and consent requirements.
*/
scopes: OAuthConsentScope[];
};

export type GetOAuthConsentInfoParams = {
/** OAuth `client_id` from the authorize request. */
/** The OAuth `client_id` from the authorize request. The hook is disabled when this value is empty or omitted. */
oauthClientId: string;
/** Optional space-delimited scope string from the authorize request. */
/** A space-delimited scope string from the authorize request. */
scope?: string;
};

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/dry-mice-begin.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
"@clerk/backend": patch
"@clerk/shared": patch
---

Fix OAuth consent component and hook related types.

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix grammar: hyphenate compound modifier.

"hook related types" should be "hook-related types" (hyphenated compound modifier).

📝 Proposed fix
-Fix OAuth consent component and hook related types.+Fix OAuth consent component and hook-related types.
📝 Committable suggestion

‼️IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Fix OAuth consent component and hookrelated types.
Fix OAuth consent component and hook-related types.
🧰 Tools
🪛 LanguageTool

[grammar] ~6-~6: Use a hyphen to join words.
Context: ...-- Fix OAuth consent component and hook related types.

(QB_NEW_EN_HYPHEN)

🤖 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 @.changeset/dry-mice-begin.md at line 6, Update the changelog sentence "Fix
OAuth consent component and hook related types." to hyphenate the compound
modifier by changing it to "Fix OAuth consent component and hook-related types."
Locate the exact string in the .changeset entry and replace only the phrase
"hook related" with "hook-related" so punctuation and capitalization remain
consistent.

12 changes: 12 additions & 0 deletions .typedoc/custom-plugin.mjs
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@ const FILES_WITHOUT_HEADINGS = [
'payment-element-props.mdx',
'use-organization-creation-defaults-return.mdx',
'use-organization-creation-defaults-params.mdx',
'use-o-auth-consent-params.mdx',
'use-o-auth-consent-return.mdx',
];

/**
Expand DownExpand Up@@ -66,6 +68,8 @@ const LINK_REPLACEMENTS = [
['organization-domain-resource', '/docs/reference/types/organization-domain-resource'],
['organization-invitation-resource', '/docs/reference/types/organization-invitation'],
['organization-membership-request-resource', '/docs/reference/types/organization-membership-request'],
['o-auth-consent-info', '/docs/reference/types/oauth-consent-info'],
['o-auth-consent-scope', '/docs/reference/types/oauth-consent-scope'],
['session', '/docs/reference/backend/types/backend-session'],
['session-activity', '/docs/reference/backend/types/backend-session-activity'],
['organization', '/docs/reference/backend/types/backend-organization'],
Expand All@@ -76,6 +80,9 @@ const LINK_REPLACEMENTS = [
['email-address', '/docs/reference/backend/types/backend-email-address'],
['enterprise-account', '/docs/reference/backend/types/backend-enterprise-account'],
['enterprise-account-connection', '/docs/reference/backend/types/backend-enterprise-account-connection'],
['enterprise-connection', '/docs/reference/backend/types/backend-enterprise-connection'],
['enterprise-connection-oauth-config', '/docs/reference/backend/types/backend-enterprise-connection-oauth-config'],
['enterprise-connection-saml-connection', '/docs/reference/backend/types/backend-enterprise-connection-saml-connection'],
['external-account', '/docs/reference/backend/types/backend-external-account'],
['phone-number', '/docs/reference/backend/types/backend-phone-number'],
['saml-account', '/docs/reference/backend/types/backend-saml-account'],
Expand All@@ -101,6 +108,7 @@ const LINK_REPLACEMENTS = [
['billing-statement-resource', '/docs/reference/types/billing-statement-resource'],
['billing-subscription-resource', '/docs/reference/types/billing-subscription-resource'],
['clerk-api-response-error', '/docs/reference/types/clerk-api-response-error'],
['clerk-api-error', '/docs/reference/types/clerk-api-error'],
['billing-statement-totals', '/docs/reference/types/billing-statement-totals'],
['billing-payment-resource', '/docs/reference/types/billing-payment-resource'],
['deleted-object-resource', '/docs/reference/types/deleted-object-resource'],
Expand DownExpand Up@@ -134,6 +142,10 @@ function getRelativeLinkReplacements() {

function getCatchAllReplacements() {
return [
{
pattern: /(?<![`[\]])\bClerkAPIResponseError\b(?![\]\(])/g,
replace: '[ClerkAPIResponseError](/docs/reference/types/clerk-api-response-error)',
},
{
pattern: /(?<![\[\w`])`Appearance`\\<`Theme`\\>/g,
replace: '[`Appearance<Theme>`](/docs/guides/customizing-clerk/appearance-prop/overview)',
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/src/api/resources/EnterpriseAccount.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import type { EnterpriseAccountConnectionJSON, EnterpriseAccountJSON } from './J
import { Verification } from './Verification';

/**
* Represents an enterprise SSO connection associated with an enterprise account.
* The Backend `EnterpriseAccountConnection` object represents an enterprise SSO connection associated with an enterprise account.
*/
export class EnterpriseAccountConnection {
constructor(
Expand Down
3 changes: 3 additions & 0 deletions packages/backend/src/api/resources/EnterpriseConnection.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import type {
EnterpriseConnectionSamlConnectionJSON,
} from './JSON';

/**
* The Backend `EnterpriseConnectionSamlConnection` object holds information about a SAML enterprise connection for an instance or organization.
*/
export class EnterpriseConnectionSamlConnection {
constructor(
/**
Expand Down
8 changes: 1 addition & 7 deletions packages/shared/src/react/hooks/useOAuthConsent.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,6 @@ const HOOK_NAME = 'useOAuthConsent';
* (`GET /me/oauth/consent/{oauthClientId}`). Ensure the user is authenticated before relying on this hook
* (for example, redirect to sign-in on your custom consent route).
*
* The hook is a pure data fetcher: it takes an explicit `oauthClientId` and optional `scope` and
* issues the fetch when both the user is signed in and `oauthClientId` is non-empty. The query is
* disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @example
* ```tsx
* import { useOAuthConsent } from '@clerk/react/internal'
Expand All@@ -30,7 +24,7 @@ const HOOK_NAME = 'useOAuthConsent';
* })
* ```
*/
export function useOAuthConsent(params: UseOAuthConsentParams = {}): UseOAuthConsentReturn {
export function useOAuthConsent(params: UseOAuthConsentParams): UseOAuthConsentReturn {
useAssertWrappedByClerkProvider(HOOK_NAME);

const { oauthClientId: oauthClientIdParam, scope, keepPreviousData = true, enabled = true } = params;
Comment thread
wobsoriano marked this conversation as resolved.
Expand Down
14 changes: 2 additions & 12 deletions packages/shared/src/react/hooks/useOAuthConsent.types.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,16 +2,9 @@ import type { ClerkAPIResponseError } from '../../errors/clerkApiResponseError';
import type { GetOAuthConsentInfoParams, OAuthConsentInfo } from '../../types';

/**
* Options for {@link useOAuthConsent}.
*
* Pass `oauthClientId` and `scope` explicitly. The hook does not read from `window.location` or
* any other ambient source. The hook is disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @interface
*/
export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'>> & {
export type UseOAuthConsentParams = Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'> & {
/**
* If `true`, the previous data will be kept in the cache until new data is fetched.
*
Expand All@@ -27,14 +20,11 @@ export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oau
};

/**
* @internal
*
* @interface
*/
export type UseOAuthConsentReturn = {
/**
* OAuth consent screen metadata from Clerk, or `undefined` before the first successful fetch.
* Additional fields (e.g. submission helpers) may be added in the future without renaming this hook.
* The OAuth consent screen metadata returned by Clerk, or `undefined` before the first successful fetch.
*/
data: OAuthConsentInfo | undefined;
/**
Expand Down
38 changes: 34 additions & 4 deletions packages/shared/src/types/oauthApplication.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,30 +24,60 @@ export interface OAuthConsentInfoJSON extends ClerkResourceJSON {

/**
* A single OAuth scope with its description and whether it requires consent.
*
* @interface
*/
export type OAuthConsentScope = {
/**
* The name of the scope, as defined by the OAuth application.
*/
scope: string;
/**
* The description of the scope, which can be shown to users on the consent screen. This may be `null` if no description is available.
*/
description: string | null;
/**
* Whether or not this scope requires explicit user consent. If `false`, the scope is considered "safe" and can be granted without showing the consent screen to the user.
*/
requiresConsent: boolean;
};

/**
* OAuth consent screen metadata from `GET /v1/me/oauth/consent/{oauthClientId}`.
* Includes information needed to populate the consent dialog.
* An interface representing OAuth consent information, including application details and requested scopes.
*
* @interface
*/
export type OAuthConsentInfo = {
/**
* The display name of the OAuth application requesting access.
*/
oauthApplicationName: string;
/**
* The URL of the OAuth application's logo image.
*/
oauthApplicationLogoUrl: string;
/**
* The homepage URL of the OAuth application.
*/
oauthApplicationUrl: string;
/**
* The OAuth `client_id` identifying the application.
*/
clientId: string;
/**
* The `state` parameter from the original authorize request.
*/
state: string;
/**
* A list of scopes the application is requesting, with descriptions and consent requirements.
*/
scopes: OAuthConsentScope[];
};

export type GetOAuthConsentInfoParams = {
/** OAuth `client_id` from the authorize request. */
/** The OAuth `client_id` from the authorize request. The hook is disabled when this value is empty or omitted. */
oauthClientId: string;
/** Optional space-delimited scope string from the authorize request. */
/** A space-delimited scope string from the authorize request. */
scope?: string;
};

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/dry-mice-begin.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
"@clerk/backend": patch
"@clerk/shared": patch
---

Fix OAuth consent component and hook related types.

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix grammar: hyphenate compound modifier.

"hook related types" should be "hook-related types" (hyphenated compound modifier).

📝 Proposed fix
-Fix OAuth consent component and hook related types.+Fix OAuth consent component and hook-related types.
📝 Committable suggestion

‼️IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Fix OAuth consent component and hookrelated types.
Fix OAuth consent component and hook-related types.
🧰 Tools
🪛 LanguageTool

[grammar] ~6-~6: Use a hyphen to join words.
Context: ...-- Fix OAuth consent component and hook related types.

(QB_NEW_EN_HYPHEN)

🤖 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 @.changeset/dry-mice-begin.md at line 6, Update the changelog sentence "Fix
OAuth consent component and hook related types." to hyphenate the compound
modifier by changing it to "Fix OAuth consent component and hook-related types."
Locate the exact string in the .changeset entry and replace only the phrase
"hook related" with "hook-related" so punctuation and capitalization remain
consistent.

12 changes: 12 additions & 0 deletions .typedoc/custom-plugin.mjs
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@ const FILES_WITHOUT_HEADINGS = [
'payment-element-props.mdx',
'use-organization-creation-defaults-return.mdx',
'use-organization-creation-defaults-params.mdx',
'use-o-auth-consent-params.mdx',
'use-o-auth-consent-return.mdx',
];

/**
Expand DownExpand Up@@ -66,6 +68,8 @@ const LINK_REPLACEMENTS = [
['organization-domain-resource', '/docs/reference/types/organization-domain-resource'],
['organization-invitation-resource', '/docs/reference/types/organization-invitation'],
['organization-membership-request-resource', '/docs/reference/types/organization-membership-request'],
['o-auth-consent-info', '/docs/reference/types/oauth-consent-info'],
['o-auth-consent-scope', '/docs/reference/types/oauth-consent-scope'],
['session', '/docs/reference/backend/types/backend-session'],
['session-activity', '/docs/reference/backend/types/backend-session-activity'],
['organization', '/docs/reference/backend/types/backend-organization'],
Expand All@@ -76,6 +80,9 @@ const LINK_REPLACEMENTS = [
['email-address', '/docs/reference/backend/types/backend-email-address'],
['enterprise-account', '/docs/reference/backend/types/backend-enterprise-account'],
['enterprise-account-connection', '/docs/reference/backend/types/backend-enterprise-account-connection'],
['enterprise-connection', '/docs/reference/backend/types/backend-enterprise-connection'],
['enterprise-connection-oauth-config', '/docs/reference/backend/types/backend-enterprise-connection-oauth-config'],
['enterprise-connection-saml-connection', '/docs/reference/backend/types/backend-enterprise-connection-saml-connection'],
['external-account', '/docs/reference/backend/types/backend-external-account'],
['phone-number', '/docs/reference/backend/types/backend-phone-number'],
['saml-account', '/docs/reference/backend/types/backend-saml-account'],
Expand All@@ -101,6 +108,7 @@ const LINK_REPLACEMENTS = [
['billing-statement-resource', '/docs/reference/types/billing-statement-resource'],
['billing-subscription-resource', '/docs/reference/types/billing-subscription-resource'],
['clerk-api-response-error', '/docs/reference/types/clerk-api-response-error'],
['clerk-api-error', '/docs/reference/types/clerk-api-error'],
['billing-statement-totals', '/docs/reference/types/billing-statement-totals'],
['billing-payment-resource', '/docs/reference/types/billing-payment-resource'],
['deleted-object-resource', '/docs/reference/types/deleted-object-resource'],
Expand DownExpand Up@@ -134,6 +142,10 @@ function getRelativeLinkReplacements() {

function getCatchAllReplacements() {
return [
{
pattern: /(?<![`[\]])\bClerkAPIResponseError\b(?![\]\(])/g,
replace: '[ClerkAPIResponseError](/docs/reference/types/clerk-api-response-error)',
},
{
pattern: /(?<![\[\w`])`Appearance`\\<`Theme`\\>/g,
replace: '[`Appearance<Theme>`](/docs/guides/customizing-clerk/appearance-prop/overview)',
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/src/api/resources/EnterpriseAccount.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import type { EnterpriseAccountConnectionJSON, EnterpriseAccountJSON } from './J
import { Verification } from './Verification';

/**
* Represents an enterprise SSO connection associated with an enterprise account.
* The Backend `EnterpriseAccountConnection` object represents an enterprise SSO connection associated with an enterprise account.
*/
export class EnterpriseAccountConnection {
constructor(
Expand Down
3 changes: 3 additions & 0 deletions packages/backend/src/api/resources/EnterpriseConnection.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import type {
EnterpriseConnectionSamlConnectionJSON,
} from './JSON';

/**
* The Backend `EnterpriseConnectionSamlConnection` object holds information about a SAML enterprise connection for an instance or organization.
*/
export class EnterpriseConnectionSamlConnection {
constructor(
/**
Expand Down
8 changes: 1 addition & 7 deletions packages/shared/src/react/hooks/useOAuthConsent.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,6 @@ const HOOK_NAME = 'useOAuthConsent';
* (`GET /me/oauth/consent/{oauthClientId}`). Ensure the user is authenticated before relying on this hook
* (for example, redirect to sign-in on your custom consent route).
*
* The hook is a pure data fetcher: it takes an explicit `oauthClientId` and optional `scope` and
* issues the fetch when both the user is signed in and `oauthClientId` is non-empty. The query is
* disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @example
* ```tsx
* import { useOAuthConsent } from '@clerk/react/internal'
Expand All@@ -30,7 +24,7 @@ const HOOK_NAME = 'useOAuthConsent';
* })
* ```
*/
export function useOAuthConsent(params: UseOAuthConsentParams = {}): UseOAuthConsentReturn {
export function useOAuthConsent(params: UseOAuthConsentParams): UseOAuthConsentReturn {
useAssertWrappedByClerkProvider(HOOK_NAME);

const { oauthClientId: oauthClientIdParam, scope, keepPreviousData = true, enabled = true } = params;
Comment thread
wobsoriano marked this conversation as resolved.
Expand Down
14 changes: 2 additions & 12 deletions packages/shared/src/react/hooks/useOAuthConsent.types.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,16 +2,9 @@ import type { ClerkAPIResponseError } from '../../errors/clerkApiResponseError';
import type { GetOAuthConsentInfoParams, OAuthConsentInfo } from '../../types';

/**
* Options for {@link useOAuthConsent}.
*
* Pass `oauthClientId` and `scope` explicitly. The hook does not read from `window.location` or
* any other ambient source. The hook is disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @interface
*/
export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'>> & {
export type UseOAuthConsentParams = Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'> & {
/**
* If `true`, the previous data will be kept in the cache until new data is fetched.
*
Expand All@@ -27,14 +20,11 @@ export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oau
};

/**
* @internal
*
* @interface
*/
export type UseOAuthConsentReturn = {
/**
* OAuth consent screen metadata from Clerk, or `undefined` before the first successful fetch.
* Additional fields (e.g. submission helpers) may be added in the future without renaming this hook.
* The OAuth consent screen metadata returned by Clerk, or `undefined` before the first successful fetch.
*/
data: OAuthConsentInfo | undefined;
/**
Expand Down
38 changes: 34 additions & 4 deletions packages/shared/src/types/oauthApplication.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,30 +24,60 @@ export interface OAuthConsentInfoJSON extends ClerkResourceJSON {

/**
* A single OAuth scope with its description and whether it requires consent.
*
* @interface
*/
export type OAuthConsentScope = {
/**
* The name of the scope, as defined by the OAuth application.
*/
scope: string;
/**
* The description of the scope, which can be shown to users on the consent screen. This may be `null` if no description is available.
*/
description: string | null;
/**
* Whether or not this scope requires explicit user consent. If `false`, the scope is considered "safe" and can be granted without showing the consent screen to the user.
*/
requiresConsent: boolean;
};

/**
* OAuth consent screen metadata from `GET /v1/me/oauth/consent/{oauthClientId}`.
* Includes information needed to populate the consent dialog.
* An interface representing OAuth consent information, including application details and requested scopes.
*
* @interface
*/
export type OAuthConsentInfo = {
/**
* The display name of the OAuth application requesting access.
*/
oauthApplicationName: string;
/**
* The URL of the OAuth application's logo image.
*/
oauthApplicationLogoUrl: string;
/**
* The homepage URL of the OAuth application.
*/
oauthApplicationUrl: string;
/**
* The OAuth `client_id` identifying the application.
*/
clientId: string;
/**
* The `state` parameter from the original authorize request.
*/
state: string;
/**
* A list of scopes the application is requesting, with descriptions and consent requirements.
*/
scopes: OAuthConsentScope[];
};

export type GetOAuthConsentInfoParams = {
/** OAuth `client_id` from the authorize request. */
/** The OAuth `client_id` from the authorize request. The hook is disabled when this value is empty or omitted. */
oauthClientId: string;
/** Optional space-delimited scope string from the authorize request. */
/** A space-delimited scope string from the authorize request. */
scope?: string;
};

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/dry-mice-begin.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
"@clerk/backend": patch
"@clerk/shared": patch
---

Fix OAuth consent component and hook related types.

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix grammar: hyphenate compound modifier.

"hook related types" should be "hook-related types" (hyphenated compound modifier).

📝 Proposed fix
-Fix OAuth consent component and hook related types.+Fix OAuth consent component and hook-related types.
📝 Committable suggestion

‼️IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Fix OAuth consent component and hookrelated types.
Fix OAuth consent component and hook-related types.
🧰 Tools
🪛 LanguageTool

[grammar] ~6-~6: Use a hyphen to join words.
Context: ...-- Fix OAuth consent component and hook related types.

(QB_NEW_EN_HYPHEN)

🤖 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 @.changeset/dry-mice-begin.md at line 6, Update the changelog sentence "Fix
OAuth consent component and hook related types." to hyphenate the compound
modifier by changing it to "Fix OAuth consent component and hook-related types."
Locate the exact string in the .changeset entry and replace only the phrase
"hook related" with "hook-related" so punctuation and capitalization remain
consistent.

12 changes: 12 additions & 0 deletions .typedoc/custom-plugin.mjs
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@ const FILES_WITHOUT_HEADINGS = [
'payment-element-props.mdx',
'use-organization-creation-defaults-return.mdx',
'use-organization-creation-defaults-params.mdx',
'use-o-auth-consent-params.mdx',
'use-o-auth-consent-return.mdx',
];

/**
Expand DownExpand Up@@ -66,6 +68,8 @@ const LINK_REPLACEMENTS = [
['organization-domain-resource', '/docs/reference/types/organization-domain-resource'],
['organization-invitation-resource', '/docs/reference/types/organization-invitation'],
['organization-membership-request-resource', '/docs/reference/types/organization-membership-request'],
['o-auth-consent-info', '/docs/reference/types/oauth-consent-info'],
['o-auth-consent-scope', '/docs/reference/types/oauth-consent-scope'],
['session', '/docs/reference/backend/types/backend-session'],
['session-activity', '/docs/reference/backend/types/backend-session-activity'],
['organization', '/docs/reference/backend/types/backend-organization'],
Expand All@@ -76,6 +80,9 @@ const LINK_REPLACEMENTS = [
['email-address', '/docs/reference/backend/types/backend-email-address'],
['enterprise-account', '/docs/reference/backend/types/backend-enterprise-account'],
['enterprise-account-connection', '/docs/reference/backend/types/backend-enterprise-account-connection'],
['enterprise-connection', '/docs/reference/backend/types/backend-enterprise-connection'],
['enterprise-connection-oauth-config', '/docs/reference/backend/types/backend-enterprise-connection-oauth-config'],
['enterprise-connection-saml-connection', '/docs/reference/backend/types/backend-enterprise-connection-saml-connection'],
['external-account', '/docs/reference/backend/types/backend-external-account'],
['phone-number', '/docs/reference/backend/types/backend-phone-number'],
['saml-account', '/docs/reference/backend/types/backend-saml-account'],
Expand All@@ -101,6 +108,7 @@ const LINK_REPLACEMENTS = [
['billing-statement-resource', '/docs/reference/types/billing-statement-resource'],
['billing-subscription-resource', '/docs/reference/types/billing-subscription-resource'],
['clerk-api-response-error', '/docs/reference/types/clerk-api-response-error'],
['clerk-api-error', '/docs/reference/types/clerk-api-error'],
['billing-statement-totals', '/docs/reference/types/billing-statement-totals'],
['billing-payment-resource', '/docs/reference/types/billing-payment-resource'],
['deleted-object-resource', '/docs/reference/types/deleted-object-resource'],
Expand DownExpand Up@@ -134,6 +142,10 @@ function getRelativeLinkReplacements() {

function getCatchAllReplacements() {
return [
{
pattern: /(?<![`[\]])\bClerkAPIResponseError\b(?![\]\(])/g,
replace: '[ClerkAPIResponseError](/docs/reference/types/clerk-api-response-error)',
},
{
pattern: /(?<![\[\w`])`Appearance`\\<`Theme`\\>/g,
replace: '[`Appearance<Theme>`](/docs/guides/customizing-clerk/appearance-prop/overview)',
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/src/api/resources/EnterpriseAccount.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import type { EnterpriseAccountConnectionJSON, EnterpriseAccountJSON } from './J
import { Verification } from './Verification';

/**
* Represents an enterprise SSO connection associated with an enterprise account.
* The Backend `EnterpriseAccountConnection` object represents an enterprise SSO connection associated with an enterprise account.
*/
export class EnterpriseAccountConnection {
constructor(
Expand Down
3 changes: 3 additions & 0 deletions packages/backend/src/api/resources/EnterpriseConnection.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import type {
EnterpriseConnectionSamlConnectionJSON,
} from './JSON';

/**
* The Backend `EnterpriseConnectionSamlConnection` object holds information about a SAML enterprise connection for an instance or organization.
*/
export class EnterpriseConnectionSamlConnection {
constructor(
/**
Expand Down
8 changes: 1 addition & 7 deletions packages/shared/src/react/hooks/useOAuthConsent.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,6 @@ const HOOK_NAME = 'useOAuthConsent';
* (`GET /me/oauth/consent/{oauthClientId}`). Ensure the user is authenticated before relying on this hook
* (for example, redirect to sign-in on your custom consent route).
*
* The hook is a pure data fetcher: it takes an explicit `oauthClientId` and optional `scope` and
* issues the fetch when both the user is signed in and `oauthClientId` is non-empty. The query is
* disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @example
* ```tsx
* import { useOAuthConsent } from '@clerk/react/internal'
Expand All@@ -30,7 +24,7 @@ const HOOK_NAME = 'useOAuthConsent';
* })
* ```
*/
export function useOAuthConsent(params: UseOAuthConsentParams = {}): UseOAuthConsentReturn {
export function useOAuthConsent(params: UseOAuthConsentParams): UseOAuthConsentReturn {
useAssertWrappedByClerkProvider(HOOK_NAME);

const { oauthClientId: oauthClientIdParam, scope, keepPreviousData = true, enabled = true } = params;
Comment thread
wobsoriano marked this conversation as resolved.
Expand Down
14 changes: 2 additions & 12 deletions packages/shared/src/react/hooks/useOAuthConsent.types.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,16 +2,9 @@ import type { ClerkAPIResponseError } from '../../errors/clerkApiResponseError';
import type { GetOAuthConsentInfoParams, OAuthConsentInfo } from '../../types';

/**
* Options for {@link useOAuthConsent}.
*
* Pass `oauthClientId` and `scope` explicitly. The hook does not read from `window.location` or
* any other ambient source. The hook is disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @interface
*/
export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'>> & {
export type UseOAuthConsentParams = Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'> & {
/**
* If `true`, the previous data will be kept in the cache until new data is fetched.
*
Expand All@@ -27,14 +20,11 @@ export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oau
};

/**
* @internal
*
* @interface
*/
export type UseOAuthConsentReturn = {
/**
* OAuth consent screen metadata from Clerk, or `undefined` before the first successful fetch.
* Additional fields (e.g. submission helpers) may be added in the future without renaming this hook.
* The OAuth consent screen metadata returned by Clerk, or `undefined` before the first successful fetch.
*/
data: OAuthConsentInfo | undefined;
/**
Expand Down
38 changes: 34 additions & 4 deletions packages/shared/src/types/oauthApplication.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,30 +24,60 @@ export interface OAuthConsentInfoJSON extends ClerkResourceJSON {

/**
* A single OAuth scope with its description and whether it requires consent.
*
* @interface
*/
export type OAuthConsentScope = {
/**
* The name of the scope, as defined by the OAuth application.
*/
scope: string;
/**
* The description of the scope, which can be shown to users on the consent screen. This may be `null` if no description is available.
*/
description: string | null;
/**
* Whether or not this scope requires explicit user consent. If `false`, the scope is considered "safe" and can be granted without showing the consent screen to the user.
*/
requiresConsent: boolean;
};

/**
* OAuth consent screen metadata from `GET /v1/me/oauth/consent/{oauthClientId}`.
* Includes information needed to populate the consent dialog.
* An interface representing OAuth consent information, including application details and requested scopes.
*
* @interface
*/
export type OAuthConsentInfo = {
/**
* The display name of the OAuth application requesting access.
*/
oauthApplicationName: string;
/**
* The URL of the OAuth application's logo image.
*/
oauthApplicationLogoUrl: string;
/**
* The homepage URL of the OAuth application.
*/
oauthApplicationUrl: string;
/**
* The OAuth `client_id` identifying the application.
*/
clientId: string;
/**
* The `state` parameter from the original authorize request.
*/
state: string;
/**
* A list of scopes the application is requesting, with descriptions and consent requirements.
*/
scopes: OAuthConsentScope[];
};

export type GetOAuthConsentInfoParams = {
/** OAuth `client_id` from the authorize request. */
/** The OAuth `client_id` from the authorize request. The hook is disabled when this value is empty or omitted. */
oauthClientId: string;
/** Optional space-delimited scope string from the authorize request. */
/** A space-delimited scope string from the authorize request. */
scope?: string;
};

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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/dry-mice-begin.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
---
"@clerk/backend": patch
"@clerk/shared": patch
---

Fix OAuth consent component and hook related types.

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix grammar: hyphenate compound modifier.

"hook related types" should be "hook-related types" (hyphenated compound modifier).

📝 Proposed fix
-Fix OAuth consent component and hook related types.+Fix OAuth consent component and hook-related types.
📝 Committable suggestion

‼️IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Fix OAuth consent component and hookrelated types.
Fix OAuth consent component and hook-related types.
🧰 Tools
🪛 LanguageTool

[grammar] ~6-~6: Use a hyphen to join words.
Context: ...-- Fix OAuth consent component and hook related types.

(QB_NEW_EN_HYPHEN)

🤖 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 @.changeset/dry-mice-begin.md at line 6, Update the changelog sentence "Fix
OAuth consent component and hook related types." to hyphenate the compound
modifier by changing it to "Fix OAuth consent component and hook-related types."
Locate the exact string in the .changeset entry and replace only the phrase
"hook related" with "hook-related" so punctuation and capitalization remain
consistent.

12 changes: 12 additions & 0 deletions .typedoc/custom-plugin.mjs
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,6 +36,8 @@ const FILES_WITHOUT_HEADINGS = [
'payment-element-props.mdx',
'use-organization-creation-defaults-return.mdx',
'use-organization-creation-defaults-params.mdx',
'use-o-auth-consent-params.mdx',
'use-o-auth-consent-return.mdx',
];

/**
Expand DownExpand Up@@ -66,6 +68,8 @@ const LINK_REPLACEMENTS = [
['organization-domain-resource', '/docs/reference/types/organization-domain-resource'],
['organization-invitation-resource', '/docs/reference/types/organization-invitation'],
['organization-membership-request-resource', '/docs/reference/types/organization-membership-request'],
['o-auth-consent-info', '/docs/reference/types/oauth-consent-info'],
['o-auth-consent-scope', '/docs/reference/types/oauth-consent-scope'],
['session', '/docs/reference/backend/types/backend-session'],
['session-activity', '/docs/reference/backend/types/backend-session-activity'],
['organization', '/docs/reference/backend/types/backend-organization'],
Expand All@@ -76,6 +80,9 @@ const LINK_REPLACEMENTS = [
['email-address', '/docs/reference/backend/types/backend-email-address'],
['enterprise-account', '/docs/reference/backend/types/backend-enterprise-account'],
['enterprise-account-connection', '/docs/reference/backend/types/backend-enterprise-account-connection'],
['enterprise-connection', '/docs/reference/backend/types/backend-enterprise-connection'],
['enterprise-connection-oauth-config', '/docs/reference/backend/types/backend-enterprise-connection-oauth-config'],
['enterprise-connection-saml-connection', '/docs/reference/backend/types/backend-enterprise-connection-saml-connection'],
['external-account', '/docs/reference/backend/types/backend-external-account'],
['phone-number', '/docs/reference/backend/types/backend-phone-number'],
['saml-account', '/docs/reference/backend/types/backend-saml-account'],
Expand All@@ -101,6 +108,7 @@ const LINK_REPLACEMENTS = [
['billing-statement-resource', '/docs/reference/types/billing-statement-resource'],
['billing-subscription-resource', '/docs/reference/types/billing-subscription-resource'],
['clerk-api-response-error', '/docs/reference/types/clerk-api-response-error'],
['clerk-api-error', '/docs/reference/types/clerk-api-error'],
['billing-statement-totals', '/docs/reference/types/billing-statement-totals'],
['billing-payment-resource', '/docs/reference/types/billing-payment-resource'],
['deleted-object-resource', '/docs/reference/types/deleted-object-resource'],
Expand DownExpand Up@@ -134,6 +142,10 @@ function getRelativeLinkReplacements() {

function getCatchAllReplacements() {
return [
{
pattern: /(?<![`[\]])\bClerkAPIResponseError\b(?![\]\(])/g,
replace: '[ClerkAPIResponseError](/docs/reference/types/clerk-api-response-error)',
},
{
pattern: /(?<![\[\w`])`Appearance`\\<`Theme`\\>/g,
replace: '[`Appearance<Theme>`](/docs/guides/customizing-clerk/appearance-prop/overview)',
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/src/api/resources/EnterpriseAccount.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import type { EnterpriseAccountConnectionJSON, EnterpriseAccountJSON } from './J
import { Verification } from './Verification';

/**
* Represents an enterprise SSO connection associated with an enterprise account.
* The Backend `EnterpriseAccountConnection` object represents an enterprise SSO connection associated with an enterprise account.
*/
export class EnterpriseAccountConnection {
constructor(
Expand Down
3 changes: 3 additions & 0 deletions packages/backend/src/api/resources/EnterpriseConnection.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import type {
EnterpriseConnectionSamlConnectionJSON,
} from './JSON';

/**
* The Backend `EnterpriseConnectionSamlConnection` object holds information about a SAML enterprise connection for an instance or organization.
*/
export class EnterpriseConnectionSamlConnection {
constructor(
/**
Expand Down
8 changes: 1 addition & 7 deletions packages/shared/src/react/hooks/useOAuthConsent.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,6 @@ const HOOK_NAME = 'useOAuthConsent';
* (`GET /me/oauth/consent/{oauthClientId}`). Ensure the user is authenticated before relying on this hook
* (for example, redirect to sign-in on your custom consent route).
*
* The hook is a pure data fetcher: it takes an explicit `oauthClientId` and optional `scope` and
* issues the fetch when both the user is signed in and `oauthClientId` is non-empty. The query is
* disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @example
* ```tsx
* import { useOAuthConsent } from '@clerk/react/internal'
Expand All@@ -30,7 +24,7 @@ const HOOK_NAME = 'useOAuthConsent';
* })
* ```
*/
export function useOAuthConsent(params: UseOAuthConsentParams = {}): UseOAuthConsentReturn {
export function useOAuthConsent(params: UseOAuthConsentParams): UseOAuthConsentReturn {
useAssertWrappedByClerkProvider(HOOK_NAME);

const { oauthClientId: oauthClientIdParam, scope, keepPreviousData = true, enabled = true } = params;
Comment thread
wobsoriano marked this conversation as resolved.
Expand Down
14 changes: 2 additions & 12 deletions packages/shared/src/react/hooks/useOAuthConsent.types.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,16 +2,9 @@ import type { ClerkAPIResponseError } from '../../errors/clerkApiResponseError';
import type { GetOAuthConsentInfoParams, OAuthConsentInfo } from '../../types';

/**
* Options for {@link useOAuthConsent}.
*
* Pass `oauthClientId` and `scope` explicitly. The hook does not read from `window.location` or
* any other ambient source. The hook is disabled when `oauthClientId` is empty or omitted.
*
* @internal
*
* @interface
*/
export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'>> & {
export type UseOAuthConsentParams = Pick<GetOAuthConsentInfoParams, 'oauthClientId' | 'scope'> & {
/**
* If `true`, the previous data will be kept in the cache until new data is fetched.
*
Expand All@@ -27,14 +20,11 @@ export type UseOAuthConsentParams = Partial<Pick<GetOAuthConsentInfoParams, 'oau
};

/**
* @internal
*
* @interface
*/
export type UseOAuthConsentReturn = {
/**
* OAuth consent screen metadata from Clerk, or `undefined` before the first successful fetch.
* Additional fields (e.g. submission helpers) may be added in the future without renaming this hook.
* The OAuth consent screen metadata returned by Clerk, or `undefined` before the first successful fetch.
*/
data: OAuthConsentInfo | undefined;
/**
Expand Down
38 changes: 34 additions & 4 deletions packages/shared/src/types/oauthApplication.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,30 +24,60 @@ export interface OAuthConsentInfoJSON extends ClerkResourceJSON {

/**
* A single OAuth scope with its description and whether it requires consent.
*
* @interface
*/
export type OAuthConsentScope = {
/**
* The name of the scope, as defined by the OAuth application.
*/
scope: string;
/**
* The description of the scope, which can be shown to users on the consent screen. This may be `null` if no description is available.
*/
description: string | null;
/**
* Whether or not this scope requires explicit user consent. If `false`, the scope is considered "safe" and can be granted without showing the consent screen to the user.
*/
requiresConsent: boolean;
};

/**
* OAuth consent screen metadata from `GET /v1/me/oauth/consent/{oauthClientId}`.
* Includes information needed to populate the consent dialog.
* An interface representing OAuth consent information, including application details and requested scopes.
*
* @interface
*/
export type OAuthConsentInfo = {
/**
* The display name of the OAuth application requesting access.
*/
oauthApplicationName: string;
/**
* The URL of the OAuth application's logo image.
*/
oauthApplicationLogoUrl: string;
/**
* The homepage URL of the OAuth application.
*/
oauthApplicationUrl: string;
/**
* The OAuth `client_id` identifying the application.
*/
clientId: string;
/**
* The `state` parameter from the original authorize request.
*/
state: string;
/**
* A list of scopes the application is requesting, with descriptions and consent requirements.
*/
scopes: OAuthConsentScope[];
};

export type GetOAuthConsentInfoParams = {
/** OAuth `client_id` from the authorize request. */
/** The OAuth `client_id` from the authorize request. The hook is disabled when this value is empty or omitted. */
oauthClientId: string;
/** Optional space-delimited scope string from the authorize request. */
/** A space-delimited scope string from the authorize request. */
scope?: string;
};

Expand Down
Loading