diff --git a/.changeset/silly-coins-consent.md b/.changeset/silly-coins-consent.md
new file mode 100644
index 00000000000..c232e227340
--- /dev/null
+++ b/.changeset/silly-coins-consent.md
@@ -0,0 +1,7 @@
+---
+'@clerk/localizations': patch
+'@clerk/shared': patch
+'@clerk/ui': patch
+---
+
+Make OAuth consent screens clearly identify private metadata as potentially sensitive information set by the Clerk application.
diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts
index 9b70f8d0a2d..8420ef26b84 100644
--- a/packages/localizations/src/ar-SA.ts
+++ b/packages/localizations/src/ar-SA.ts
@@ -853,6 +853,7 @@ export const arSA: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts
index 3fb72ae5d54..93604b18488 100644
--- a/packages/localizations/src/be-BY.ts
+++ b/packages/localizations/src/be-BY.ts
@@ -855,6 +855,7 @@ export const beBY: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts
index 4e14def42ab..9c37f2f9832 100644
--- a/packages/localizations/src/bg-BG.ts
+++ b/packages/localizations/src/bg-BG.ts
@@ -854,6 +854,7 @@ export const bgBG: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts
index d8a33bdfa92..eee4b256d66 100644
--- a/packages/localizations/src/bn-IN.ts
+++ b/packages/localizations/src/bn-IN.ts
@@ -860,6 +860,7 @@ export const bnIN: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts
index fe24667d6a5..912c5a72925 100644
--- a/packages/localizations/src/ca-ES.ts
+++ b/packages/localizations/src/ca-ES.ts
@@ -860,6 +860,7 @@ export const caES: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts
index 40ca97e4f47..bb907f902fa 100644
--- a/packages/localizations/src/cs-CZ.ts
+++ b/packages/localizations/src/cs-CZ.ts
@@ -858,6 +858,7 @@ export const csCZ: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts
index 8f6cd90e1ce..8c93b674edf 100644
--- a/packages/localizations/src/da-DK.ts
+++ b/packages/localizations/src/da-DK.ts
@@ -853,6 +853,7 @@ export const daDK: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts
index f7c181cf898..b90b25b3ca2 100644
--- a/packages/localizations/src/de-DE.ts
+++ b/packages/localizations/src/de-DE.ts
@@ -864,6 +864,7 @@ export const deDE: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts
index fbc71c2473a..bff8a6a78b6 100644
--- a/packages/localizations/src/el-GR.ts
+++ b/packages/localizations/src/el-GR.ts
@@ -856,6 +856,7 @@ export const elGR: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts
index 74fa7ea9e73..79ac6c67bbb 100644
--- a/packages/localizations/src/en-GB.ts
+++ b/packages/localizations/src/en-GB.ts
@@ -853,6 +853,7 @@ export const enGB: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts
index d766d4ce383..efc7eff6995 100644
--- a/packages/localizations/src/en-US.ts
+++ b/packages/localizations/src/en-US.ts
@@ -875,6 +875,7 @@ export const enUS: LocalizationResource = {
title: 'Redirect URL',
},
scopeList: {
+ privateMetadata: 'Your private metadata set by {{applicationName}}, which may include sensitive information',
title: 'This will allow {{applicationName}} access to:',
},
subtitle: 'wants to access {{applicationName}} on behalf of {{identifier}}',
diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts
index 6c465f680a0..36a0a04d0ec 100644
--- a/packages/localizations/src/es-CR.ts
+++ b/packages/localizations/src/es-CR.ts
@@ -855,6 +855,7 @@ export const esCR: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts
index 2d6895e5822..bfd8d24ef84 100644
--- a/packages/localizations/src/es-ES.ts
+++ b/packages/localizations/src/es-ES.ts
@@ -860,6 +860,7 @@ export const esES: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts
index 64b90aa3da2..aea265ad4c7 100644
--- a/packages/localizations/src/es-MX.ts
+++ b/packages/localizations/src/es-MX.ts
@@ -856,6 +856,7 @@ export const esMX: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts
index b027e07069f..c62eb1762fa 100644
--- a/packages/localizations/src/es-UY.ts
+++ b/packages/localizations/src/es-UY.ts
@@ -855,6 +855,7 @@ export const esUY: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts
index 1cf0c875abf..22827362f99 100644
--- a/packages/localizations/src/fa-IR.ts
+++ b/packages/localizations/src/fa-IR.ts
@@ -859,6 +859,7 @@ export const faIR: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts
index d02b810a53a..5bfe223229b 100644
--- a/packages/localizations/src/fi-FI.ts
+++ b/packages/localizations/src/fi-FI.ts
@@ -860,6 +860,7 @@ export const fiFI: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts
index 3ef7465f900..c472f336904 100644
--- a/packages/localizations/src/fr-FR.ts
+++ b/packages/localizations/src/fr-FR.ts
@@ -864,6 +864,7 @@ export const frFR: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts
index b1763ec3337..2a3ba9a956a 100644
--- a/packages/localizations/src/he-IL.ts
+++ b/packages/localizations/src/he-IL.ts
@@ -852,6 +852,7 @@ export const heIL: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts
index 98812de0410..3acfd4db4a5 100644
--- a/packages/localizations/src/hi-IN.ts
+++ b/packages/localizations/src/hi-IN.ts
@@ -860,6 +860,7 @@ export const hiIN: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts
index db93f008960..990b1258b76 100644
--- a/packages/localizations/src/hr-HR.ts
+++ b/packages/localizations/src/hr-HR.ts
@@ -860,6 +860,7 @@ export const hrHR: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts
index 3a3aff4cfe8..dd9f1e78a69 100644
--- a/packages/localizations/src/hu-HU.ts
+++ b/packages/localizations/src/hu-HU.ts
@@ -861,6 +861,7 @@ export const huHU: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts
index df03c826a49..ea52c8fd6fa 100644
--- a/packages/localizations/src/id-ID.ts
+++ b/packages/localizations/src/id-ID.ts
@@ -854,6 +854,7 @@ export const idID: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts
index a2f5087a28e..c06f20b105c 100644
--- a/packages/localizations/src/is-IS.ts
+++ b/packages/localizations/src/is-IS.ts
@@ -860,6 +860,7 @@ export const isIS: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts
index 305b7cc39d0..c714cd721db 100644
--- a/packages/localizations/src/it-IT.ts
+++ b/packages/localizations/src/it-IT.ts
@@ -861,6 +861,7 @@ export const itIT: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts
index ad9f53c787f..3ab6862adfb 100644
--- a/packages/localizations/src/ja-JP.ts
+++ b/packages/localizations/src/ja-JP.ts
@@ -860,6 +860,7 @@ export const jaJP: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts
index f2ecf7e21fe..d5771bf7f95 100644
--- a/packages/localizations/src/kk-KZ.ts
+++ b/packages/localizations/src/kk-KZ.ts
@@ -853,6 +853,7 @@ export const kkKZ: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts
index 0bb35f7cee4..5ceb74b18cc 100644
--- a/packages/localizations/src/ko-KR.ts
+++ b/packages/localizations/src/ko-KR.ts
@@ -856,6 +856,7 @@ export const koKR: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts
index 0d25f3cea12..2bb88ab2fb8 100644
--- a/packages/localizations/src/mn-MN.ts
+++ b/packages/localizations/src/mn-MN.ts
@@ -854,6 +854,7 @@ export const mnMN: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts
index 72e32d5764c..86d2d84b14b 100644
--- a/packages/localizations/src/ms-MY.ts
+++ b/packages/localizations/src/ms-MY.ts
@@ -862,6 +862,7 @@ export const msMY: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts
index edd764c32d5..d614810caef 100644
--- a/packages/localizations/src/nb-NO.ts
+++ b/packages/localizations/src/nb-NO.ts
@@ -862,6 +862,7 @@ export const nbNO: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts
index 4107509c7d1..efcac54de9a 100644
--- a/packages/localizations/src/nl-BE.ts
+++ b/packages/localizations/src/nl-BE.ts
@@ -853,6 +853,7 @@ export const nlBE: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts
index b54ddc59780..29ed1a0b899 100644
--- a/packages/localizations/src/nl-NL.ts
+++ b/packages/localizations/src/nl-NL.ts
@@ -853,6 +853,7 @@ export const nlNL: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts
index 92adfd113a1..b84cfe863ee 100644
--- a/packages/localizations/src/pl-PL.ts
+++ b/packages/localizations/src/pl-PL.ts
@@ -854,6 +854,7 @@ export const plPL: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts
index 0b9478c97dd..9e3bf101f8a 100644
--- a/packages/localizations/src/pt-BR.ts
+++ b/packages/localizations/src/pt-BR.ts
@@ -861,6 +861,7 @@ export const ptBR: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts
index f378392dcb4..da2b7bf79af 100644
--- a/packages/localizations/src/pt-PT.ts
+++ b/packages/localizations/src/pt-PT.ts
@@ -862,6 +862,7 @@ export const ptPT: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts
index 6a91ac6bbd0..d0439eef007 100644
--- a/packages/localizations/src/ro-RO.ts
+++ b/packages/localizations/src/ro-RO.ts
@@ -861,6 +861,7 @@ export const roRO: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts
index 545061ad0e5..bfcd33d3f1c 100644
--- a/packages/localizations/src/ru-RU.ts
+++ b/packages/localizations/src/ru-RU.ts
@@ -857,6 +857,7 @@ export const ruRU: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts
index 0c34697e47f..468818450a8 100644
--- a/packages/localizations/src/sk-SK.ts
+++ b/packages/localizations/src/sk-SK.ts
@@ -854,6 +854,7 @@ export const skSK: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts
index 92aee810ba2..be68fa18bca 100644
--- a/packages/localizations/src/sr-RS.ts
+++ b/packages/localizations/src/sr-RS.ts
@@ -853,6 +853,7 @@ export const srRS: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts
index 56d3da38257..d36e466183a 100644
--- a/packages/localizations/src/sv-SE.ts
+++ b/packages/localizations/src/sv-SE.ts
@@ -854,6 +854,7 @@ export const svSE: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts
index 587a71d59e5..bd3d1553de1 100644
--- a/packages/localizations/src/ta-IN.ts
+++ b/packages/localizations/src/ta-IN.ts
@@ -862,6 +862,7 @@ export const taIN: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts
index de16deaba50..84268a6852a 100644
--- a/packages/localizations/src/te-IN.ts
+++ b/packages/localizations/src/te-IN.ts
@@ -860,6 +860,7 @@ export const teIN: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts
index 8c8b34e16ba..7bfc646066f 100644
--- a/packages/localizations/src/th-TH.ts
+++ b/packages/localizations/src/th-TH.ts
@@ -856,6 +856,7 @@ export const thTH: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts
index 98e08e93e4a..819d6fc9986 100644
--- a/packages/localizations/src/tr-TR.ts
+++ b/packages/localizations/src/tr-TR.ts
@@ -853,6 +853,7 @@ export const trTR: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts
index dc6f645e1c5..54573559b55 100644
--- a/packages/localizations/src/uk-UA.ts
+++ b/packages/localizations/src/uk-UA.ts
@@ -854,6 +854,7 @@ export const ukUA: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts
index 4d61f937845..d891df354ef 100644
--- a/packages/localizations/src/vi-VN.ts
+++ b/packages/localizations/src/vi-VN.ts
@@ -860,6 +860,7 @@ export const viVN: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts
index 50fd9254b16..f8c7e8e821e 100644
--- a/packages/localizations/src/zh-CN.ts
+++ b/packages/localizations/src/zh-CN.ts
@@ -851,6 +851,7 @@ export const zhCN: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts
index b79689fb355..7f04ea9edc4 100644
--- a/packages/localizations/src/zh-TW.ts
+++ b/packages/localizations/src/zh-TW.ts
@@ -854,6 +854,7 @@ export const zhTW: LocalizationResource = {
title: undefined,
},
scopeList: {
+ privateMetadata: undefined,
title: undefined,
},
subtitle: undefined,
diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts
index 19074bdbae5..2a4a8d2d83d 100644
--- a/packages/shared/src/types/localization.ts
+++ b/packages/shared/src/types/localization.ts
@@ -1341,6 +1341,7 @@ export type __internal_LocalizationResource = {
oauthConsent: {
subtitle: LocalizationValue<'applicationName' | 'identifier'>;
scopeList: {
+ privateMetadata: LocalizationValue<'applicationName'>;
title: LocalizationValue<'applicationName'>;
};
action__deny: LocalizationValue;
diff --git a/packages/ui/src/components/OAuthConsent/OAuthConsent.tsx b/packages/ui/src/components/OAuthConsent/OAuthConsent.tsx
index dd403253117..e85b0229dce 100644
--- a/packages/ui/src/components/OAuthConsent/OAuthConsent.tsx
+++ b/packages/ui/src/components/OAuthConsent/OAuthConsent.tsx
@@ -27,6 +27,7 @@ import { OrgSelect } from './OrgSelect';
import { getForwardedParams, getOAuthConsentFromSearch, getRedirectDisplay, getRedirectUriFromSearch } from './utils';
const OFFLINE_ACCESS_SCOPE = 'offline_access';
+const PRIVATE_METADATA_SCOPE = 'private_metadata';
const USER_ORG_READ_SCOPE = 'user:org:read';
function _OAuthConsent() {
@@ -148,7 +149,15 @@ function _OAuthConsent() {
const primaryIdentifier = user?.primaryEmailAddress?.emailAddress || user?.primaryPhoneNumber?.phoneNumber;
- const displayedScopes = scopes.filter(item => item.scope !== OFFLINE_ACCESS_SCOPE);
+ const displayedScopes = scopes
+ .filter(item => item.scope !== OFFLINE_ACCESS_SCOPE)
+ .map(item => ({
+ ...item,
+ description:
+ item.scope === PRIVATE_METADATA_SCOPE
+ ? t(localizationKeys('oauthConsent.scopeList.privateMetadata', { applicationName }))
+ : item.description,
+ }));
const hasOfflineAccess = scopes.some(item => item.scope === OFFLINE_ACCESS_SCOPE);
return (
diff --git a/packages/ui/src/components/OAuthConsent/__tests__/OAuthConsent.test.tsx b/packages/ui/src/components/OAuthConsent/__tests__/OAuthConsent.test.tsx
index fc401643835..1b02ec27a2b 100644
--- a/packages/ui/src/components/OAuthConsent/__tests__/OAuthConsent.test.tsx
+++ b/packages/ui/src/components/OAuthConsent/__tests__/OAuthConsent.test.tsx
@@ -3,6 +3,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { bindCreateFixtures } from '@/test/create-fixtures';
import { render, waitFor } from '@/test/utils';
+import { OptionsProvider } from '../../../contexts';
import { OAuthConsent } from '../OAuthConsent';
const { createFixtures } = bindCreateFixtures('OAuthConsent');
@@ -28,6 +29,14 @@ const fakeConsentInfoWithOrgScope = {
],
};
+const fakeConsentInfoWithPrivateMetadataScope = {
+ ...fakeConsentInfo,
+ scopes: [
+ ...fakeConsentInfo.scopes,
+ { scope: 'private_metadata', description: 'Your private metadata', requiresConsent: true },
+ ],
+};
+
/**
* `oauthApplication` is a getter on the Clerk prototype and cannot be assigned
* directly. Use Object.defineProperty to replace it with a configurable mock.
@@ -99,6 +108,63 @@ describe('OAuthConsent', () => {
});
});
+ it('identifies private metadata as potentially sensitive data set by the Clerk application', async () => {
+ const { wrapper, fixtures, props } = await createFixtures(f => {
+ f.withUser({ email_addresses: ['jane@example.com'] });
+ });
+
+ props.setProps({ componentName: 'OAuthConsent' } as any);
+ mockOAuthApplication(fixtures.clerk, {
+ getConsentInfo: vi.fn().mockResolvedValue(fakeConsentInfoWithPrivateMetadataScope),
+ });
+
+ const { getByText, queryByText } = render(, { wrapper });
+
+ await waitFor(() => {
+ expect(getByText('Your private metadata set by TestApp, which may include sensitive information')).toBeVisible();
+ });
+ expect(queryByText('Your private metadata')).toBeNull();
+ });
+
+ it('supports localizing the private metadata scope description', async () => {
+ const {
+ wrapper: Wrapper,
+ fixtures,
+ props,
+ } = await createFixtures(f => {
+ f.withUser({ email_addresses: ['jane@example.com'] });
+ });
+
+ props.setProps({ componentName: 'OAuthConsent' } as any);
+ mockOAuthApplication(fixtures.clerk, {
+ getConsentInfo: vi.fn().mockResolvedValue(fakeConsentInfoWithPrivateMetadataScope),
+ });
+
+ const wrapper = ({ children }) => (
+
+
+ {children}
+
+
+ );
+
+ const { getByText } = render(, { wrapper });
+
+ await waitFor(() => {
+ expect(getByText('Localized private metadata from TestApp')).toBeVisible();
+ });
+ });
+
it('renders a single form with allow/deny submit buttons in the public flow', async () => {
const { wrapper, fixtures, props } = await createFixtures(f => {
f.withUser({ email_addresses: ['jane@example.com'] });