From f0a417f15f45c1cc52a4ccd62486ea64de6397e9 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Tue, 2 Dec 2025 13:49:34 +0200 Subject: [PATCH 1/5] feat(clerk-js): Untrusted password screen for sign-in (#7331) Co-authored-by: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> --- .changeset/sweet-poets-sell.md | 7 ++ packages/localizations/src/ar-SA.ts | 4 + packages/localizations/src/be-BY.ts | 4 + packages/localizations/src/bg-BG.ts | 4 + packages/localizations/src/bn-IN.ts | 4 + packages/localizations/src/ca-ES.ts | 4 + packages/localizations/src/cs-CZ.ts | 4 + packages/localizations/src/da-DK.ts | 4 + packages/localizations/src/de-DE.ts | 4 + packages/localizations/src/el-GR.ts | 4 + packages/localizations/src/en-GB.ts | 4 + packages/localizations/src/en-US.ts | 5 ++ packages/localizations/src/es-CR.ts | 4 + packages/localizations/src/es-ES.ts | 4 + packages/localizations/src/es-MX.ts | 4 + packages/localizations/src/es-UY.ts | 4 + packages/localizations/src/fa-IR.ts | 4 + packages/localizations/src/fi-FI.ts | 4 + packages/localizations/src/fr-FR.ts | 4 + packages/localizations/src/he-IL.ts | 4 + packages/localizations/src/hi-IN.ts | 4 + packages/localizations/src/hr-HR.ts | 4 + packages/localizations/src/hu-HU.ts | 4 + packages/localizations/src/id-ID.ts | 4 + packages/localizations/src/is-IS.ts | 4 + packages/localizations/src/it-IT.ts | 4 + packages/localizations/src/ja-JP.ts | 7 +- packages/localizations/src/kk-KZ.ts | 4 + packages/localizations/src/ko-KR.ts | 4 + packages/localizations/src/mn-MN.ts | 4 + packages/localizations/src/ms-MY.ts | 4 + packages/localizations/src/nb-NO.ts | 4 + packages/localizations/src/nl-BE.ts | 4 + packages/localizations/src/nl-NL.ts | 4 + packages/localizations/src/pl-PL.ts | 4 + packages/localizations/src/pt-BR.ts | 4 + packages/localizations/src/pt-PT.ts | 4 + packages/localizations/src/ro-RO.ts | 4 + packages/localizations/src/ru-RU.ts | 4 + packages/localizations/src/sk-SK.ts | 4 + packages/localizations/src/sr-RS.ts | 4 + packages/localizations/src/sv-SE.ts | 4 + packages/localizations/src/ta-IN.ts | 4 + packages/localizations/src/te-IN.ts | 4 + packages/localizations/src/th-TH.ts | 4 + packages/localizations/src/tr-TR.ts | 4 + packages/localizations/src/uk-UA.ts | 4 + packages/localizations/src/vi-VN.ts | 4 + packages/localizations/src/zh-CN.ts | 4 + packages/localizations/src/zh-TW.ts | 4 + packages/shared/src/error.ts | 1 + packages/shared/src/errors/helpers.ts | 9 +++ packages/shared/src/types/localization.ts | 4 + .../components/SignIn/AlternativeMethods.tsx | 12 ++- .../src/components/SignIn/SignInFactorOne.tsx | 31 ++++++-- .../SignIn/SignInFactorOnePasswordCard.tsx | 34 +++++--- .../SignIn/__tests__/SignInFactorOne.test.tsx | 78 +++++++++++++++++++ packages/ui/src/elements/contexts/index.tsx | 1 + 58 files changed, 357 insertions(+), 20 deletions(-) create mode 100644 .changeset/sweet-poets-sell.md diff --git a/.changeset/sweet-poets-sell.md b/.changeset/sweet-poets-sell.md new file mode 100644 index 00000000000..15328c03b8b --- /dev/null +++ b/.changeset/sweet-poets-sell.md @@ -0,0 +1,7 @@ +--- +'@clerk/localizations': minor +'@clerk/clerk-js': minor +'@clerk/shared': minor +--- + +Introduce a new variant for the alternative methods screen to handle untrusted password error on sign-in diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index 0c748dad894..bb1ed0c2886 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -693,6 +693,9 @@ export const arSA: LocalizationResource = { passwordPwned: { title: 'كلمة المرور غير آمنة', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'رمز التحقق', resendButton: 'لم يصلك الرمز؟ حاول مرة أخرى', @@ -895,6 +898,7 @@ export const arSA: LocalizationResource = { form_password_pwned__sign_in: 'لا يمكن أستعمال كلمة السر هذه لانها غير أمنة, الرجاء اختيار كلمة مرور أخرى', form_password_size_in_bytes_exceeded: 'تجاوزت كلمة المرور الحد الأقصى للحروف المدخلة, الرجاء أدخال كلمة مرور أقصر أو حذف بعض الأحرف الخاصة', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'كلمة مرور خاطئة', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index cfc808586fb..836a7bf7f62 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -700,6 +700,9 @@ export const beBY: LocalizationResource = { passwordPwned: { title: 'Пароль быў узламаны', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Код верыфікацыі', resendButton: 'Пераадправіць код', @@ -904,6 +907,7 @@ export const beBY: LocalizationResource = { form_password_pwned__sign_in: 'Гэты пароль быў узламаны, калі ласка, абярыце іншы.', form_password_size_in_bytes_exceeded: 'Ваш пароль перавышае максімальна дапушчальнае колькасць байтаў, скараціце яго або выдаліце некаторыя спецыяльныя сімвалы.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Неверагодны пароль', form_username_invalid_character: 'Імя карыстальніка змяшчае недапушчальныя сімвалы.', form_username_invalid_length: 'Імя карыстальніка павінна быць ад 3 да 50 сімвалаў.', diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index 68854c51d96..72d918e80e3 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -696,6 +696,9 @@ export const bgBG: LocalizationResource = { passwordPwned: { title: undefined, }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Код за потвърждение', resendButton: 'Не сте получили код? Изпрати отново', @@ -897,6 +900,7 @@ export const bgBG: LocalizationResource = { form_password_pwned: 'Тази парола е компрометирана в изтекли данни. Моля, изберете друга.', form_password_pwned__sign_in: undefined, form_password_size_in_bytes_exceeded: 'Паролата ви е твърде дълга. Моля, съкратете я.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Невалидна парола.', form_username_invalid_character: 'Потребителското име съдържа невалидни символи.', form_username_invalid_length: 'Потребителското име трябва да бъде между 3 и 256 символа.', diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index e23fdd620e6..f12be149038 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -699,6 +699,9 @@ export const bnIN: LocalizationResource = { passwordPwned: { title: 'পাসওয়ার্ড সমঝোতা হয়েছে', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'যাচাইকরণ কোড', resendButton: 'কোনো কোড পাননি? পুনরায় পাঠান', @@ -906,6 +909,7 @@ export const bnIN: LocalizationResource = { 'এই পাসওয়ার্ডটি একটি ডেটা লঙ্ঘনের অংশ হিসাবে পাওয়া গেছে এবং ব্যবহার করা যাবে না, দয়া করে আপনার পাসওয়ার্ড রিসেট করুন।', form_password_size_in_bytes_exceeded: 'আপনার পাসওয়ার্ড অনুমোদিত সর্বাধিক বাইট সংখ্যা অতিক্রম করেছে, দয়া করে এটি ছোট করুন বা কিছু বিশেষ অক্ষর সরান।', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'ভুল পাসওয়ার্ড', form_username_invalid_character: 'আপনার ব্যবহারকারীর নামে অবৈধ অক্ষর রয়েছে। দয়া করে শুধুমাত্র অক্ষর, সংখ্যা এবং আন্ডারস্কোর ব্যবহার করুন।', diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index 72f043c0776..8eafd5690f5 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -696,6 +696,9 @@ export const caES: LocalizationResource = { passwordPwned: { title: undefined, }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Codi de verificació', resendButton: 'No has rebut el codi? Reenvia', @@ -899,6 +902,7 @@ export const caES: LocalizationResource = { form_password_pwned__sign_in: undefined, form_password_size_in_bytes_exceeded: 'La teva contrasenya ha superat el nombre màxim de bytes permesos, si us plau, redueix-la o elimina alguns caràcters especials.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Contrasenya incorrecta', form_username_invalid_character: "El nom d'usuari conté caràcters no vàlids.", form_username_invalid_length: "El nom d'usuari ha de tenir entre 3 i 50 caràcters.", diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index c941c2214ee..753c9e76b6f 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -704,6 +704,9 @@ export const csCZ: LocalizationResource = { passwordPwned: { title: 'Heslo kompromitováno', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Ověřovací kód', resendButton: 'Neobdrželi jste kód? Znovu poslat', @@ -910,6 +913,7 @@ export const csCZ: LocalizationResource = { 'Toto heslo bylo nalezeno jako součást prolomení a nelze ho použít, prosím resetujte si heslo.', form_password_size_in_bytes_exceeded: 'Vaše heslo překročilo maximální povolený počet bajtů, prosím zkrátit ho nebo odstranit některé speciální znaky.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Nesprávné heslo', form_username_invalid_character: 'Uživatelské jméno může obsahovat pouze alfanumerické znaky a podtržítka.', form_username_invalid_length: 'Vaše uživatelské jméno musí mít mezi {{min_length}} a {{max_length}} znaky.', diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index 7c0b99d08d2..a30113a9c80 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -695,6 +695,9 @@ export const daDK: LocalizationResource = { passwordPwned: { title: 'Sikkerhedsadvarsel', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Bekræftelseskode', resendButton: 'Send kode igen', @@ -896,6 +899,7 @@ export const daDK: LocalizationResource = { form_password_pwned__sign_in: 'Din adgangskode er blevet kompromitteret, vælg en ny.', form_password_size_in_bytes_exceeded: 'Din adgangskode har overskredet det maksimalt tilladte antal bytes, forkort den eller fjern nogle specialtegn.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Forkert adgangskode.', form_username_invalid_character: 'Brugernavnet indeholder ugyldige tegn.', form_username_invalid_length: 'Brugernavnet har en ugyldig længde.', diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index f16a737073d..d0a787430b8 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -709,6 +709,9 @@ export const deDE: LocalizationResource = { passwordPwned: { title: 'Passwort kompromittiert', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Bestätigungscode', resendButton: 'Code erneut senden', @@ -915,6 +918,7 @@ export const deDE: LocalizationResource = { 'Dieses Passwort wurde in einem Datenleck gefunden und kann nicht verwendet werden. Bitte setzen Sie Ihr Passwort zurück.', form_password_size_in_bytes_exceeded: 'Das Passwort hat die maximale Anzahl an Bytes überschritten. Bitte kürzen oder Sonderzeichen entfernen.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Falsches Passwort.', form_username_invalid_character: 'Der Benutzername enthält ungültige Zeichen. Bitte verwenden Sie nur alphanumerische Zeichen und Unterstriche.', diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index aee5ca92183..77373cbbac7 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -697,6 +697,9 @@ export const elGR: LocalizationResource = { passwordPwned: { title: 'Παραβιασμένος κωδικός', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Κωδικός επαλήθευσης', resendButton: 'Δεν λάβατε κωδικό; Αποστολή ξανά', @@ -901,6 +904,7 @@ export const elGR: LocalizationResource = { form_password_pwned__sign_in: undefined, form_password_size_in_bytes_exceeded: 'Ο κωδικός πρόσβασής σας έχει υπερβεί το μέγιστο αριθμό bytes που επιτρέπεται. Παρακαλούμε, συντομεύστε τον ή αφαιρέστε μερικούς ειδικούς χαρακτήρες.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Λανθασμένος κωδικός', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index 8256d3bf775..423b5d6b7a7 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -697,6 +697,9 @@ export const enGB: LocalizationResource = { passwordPwned: { title: 'Password compromised', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Verification code', resendButton: "Didn't receive a code? Resend", @@ -902,6 +905,7 @@ export const enGB: LocalizationResource = { 'This password has been found as part of a breach and can not be used, please reset your password.', form_password_size_in_bytes_exceeded: 'Your password has exceeded the maximum number of bytes allowed, please shorten it or remove some special characters.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Incorrect Password', form_username_invalid_character: 'Your username contains invalid characters. Please use only letters, numbers, and underscores.', diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts index bbda0fa79c3..1b98e5fff63 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -694,6 +694,9 @@ export const enUS: LocalizationResource = { passwordPwned: { title: 'Password compromised', }, + passwordUntrusted: { + title: 'Password compromised', + }, phoneCode: { formTitle: 'Verification code', resendButton: "Didn't receive a code? Resend", @@ -897,6 +900,8 @@ export const enUS: LocalizationResource = { form_password_pwned__sign_in: 'This password has been found as part of a breach and can not be used, please reset your password.', form_password_size_in_bytes_exceeded: undefined, + form_password_untrusted__sign_in: + "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", form_password_validation_failed: undefined, form_username_invalid_character: undefined, form_username_invalid_length: 'Your username must be between {{min_length}} and {{max_length}} characters long.', diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index 582c683516d..99ab7bd9063 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -701,6 +701,9 @@ export const esCR: LocalizationResource = { passwordPwned: { title: 'Contraseña en peligro', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Código de verificación', resendButton: 'Reenviar código', @@ -907,6 +910,7 @@ export const esCR: LocalizationResource = { 'Esta contraseña se encontró como parte de una brecha y no se puede utilizar, por favor restablece tu contraseña.', form_password_size_in_bytes_exceeded: 'La contraseña excede el número máximo de bytes permitidos. Por favor, elimine algunos caracteres especiales o reduzca la longitud de la contraseña.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Contraseña incorrecta', form_username_invalid_character: 'El nombre de usuario contiene caracteres inválidos.', form_username_invalid_length: 'La longitud del nombre de usuario es demasiado corta.', diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index 1d51a5e8397..c792b1724bd 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -697,6 +697,9 @@ export const esES: LocalizationResource = { passwordPwned: { title: 'Tu contraseña ha sido comprometida', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Código de verificación', resendButton: 'Reenviar código', @@ -900,6 +903,7 @@ export const esES: LocalizationResource = { form_password_pwned__sign_in: 'La contraseña ya está en uso en otro servicio.', form_password_size_in_bytes_exceeded: 'Tu contraseña ha excedido el número máximo de bytes permitidos, por favor acórtala o elimina algunos caracteres especiales.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'La validación de la contraseña falló.', form_username_invalid_character: 'El nombre de usuario contiene caracteres inválidos.', form_username_invalid_length: 'El nombre de usuario debe tener entre 3 y 20 caracteres.', diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index 54cfb0e8102..52b2b1832d1 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -702,6 +702,9 @@ export const esMX: LocalizationResource = { passwordPwned: { title: 'Contraseña en peligro', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Código de verificación', resendButton: 'Reenviar código', @@ -908,6 +911,7 @@ export const esMX: LocalizationResource = { 'Esta contraseña se encontró como parte de una brecha y no se puede utilizar, por favor restablece tu contraseña.', form_password_size_in_bytes_exceeded: 'La contraseña excede el número máximo de bytes permitidos. Por favor, elimine algunos caracteres especiales o reduzca la longitud de la contraseña.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Contraseña incorrecta', form_username_invalid_character: 'El nombre de usuario contiene caracteres inválidos.', form_username_invalid_length: 'La longitud del nombre de usuario es demasiado corta.', diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index cb8a218669f..4001bb3d730 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -700,6 +700,9 @@ export const esUY: LocalizationResource = { passwordPwned: { title: 'Contraseña comprometida', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Código de verificación', resendButton: '¿No recibiste un código? Reenviar', @@ -907,6 +910,7 @@ export const esUY: LocalizationResource = { 'Esta contraseña se encontró en una filtración y no se puede usar. Por favor, restablecé tu contraseña.', form_password_size_in_bytes_exceeded: 'Tu contraseña ha excedido el número máximo de bytes permitidos. Por favor, acortala o eliminá algunos caracteres especiales.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Contraseña incorrecta', form_username_invalid_character: 'Tu nombre de usuario contiene caracteres inválidos. Por favor, usá solo letras, números y guiones bajos.', diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index 55ce823d65a..fa169ba27b0 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -705,6 +705,9 @@ export const faIR: LocalizationResource = { passwordPwned: { title: 'رمز عبور به خطر افتاده است', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'کد تأیید', resendButton: 'کدی دریافت نکردید؟ ارسال دوباره', @@ -909,6 +912,7 @@ export const faIR: LocalizationResource = { form_password_pwned__sign_in: 'این رمز عبور به عنوان بخشی از یک نقض امنیتی یافت شده و قابل استفاده نیست، لطفاً رمز عبور خود را مجدداً تنظیم کنید.', form_password_size_in_bytes_exceeded: 'رمز عبور خیلی طولانی است.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'اعتبارسنجی رمز عبور ناموفق بود.', form_username_invalid_character: 'نام کاربری شامل کاراکترهای نامعتبر است.', form_username_invalid_length: 'نام کاربری شما باید بین {{min_length}} و {{max_length}} کاراکتر باشد.', diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index 08a4fff3da4..6fc7f2b831e 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -697,6 +697,9 @@ export const fiFI: LocalizationResource = { passwordPwned: { title: 'Salasana kompromisoitu', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Vahvistuskoodi', resendButton: 'Etkö saanut koodia? Lähetä uudelleen', @@ -899,6 +902,7 @@ export const fiFI: LocalizationResource = { form_password_pwned__sign_in: 'Salasana on ollut osallisena tietovuodossa. Vaihdathan salasanasi.', form_password_size_in_bytes_exceeded: 'Salasanasi on ylittänyt sallitun tavumäärän, lyhennä sitä tai poista joitain erikoismerkkejä.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Väärä salasana.', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index c7d96d5d0af..480e0f00689 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -710,6 +710,9 @@ export const frFR: LocalizationResource = { passwordPwned: { title: 'Mot de passe compromis', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Code de vérification', resendButton: "Vous n'avez pas reçu de code ? Renvoyer", @@ -915,6 +918,7 @@ export const frFR: LocalizationResource = { form_password_pwned__sign_in: 'Mot de passe compromis. Veuillez le réinitialiser.', form_password_size_in_bytes_exceeded: "Votre mot de passe a dépassé le nombre maximum d'octets autorisés. Veuillez le raccourcir ou supprimer certains caractères spéciaux.", + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Mot de passe incorrect', form_username_invalid_character: "L'identifiant contient des caractères invalides.", form_username_invalid_length: "Le nombre de caractères de l'identifiant est invalide.", diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index 46ee40b40cb..c498d177bc7 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -688,6 +688,9 @@ export const heIL: LocalizationResource = { passwordPwned: { title: undefined, }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'קוד אימות', resendButton: 'שלח את הקוד שוב', @@ -888,6 +891,7 @@ export const heIL: LocalizationResource = { 'הסיסמה הזו נמצאה כחלק מהפרטים שנחשפו בהפרת נתונים ולא ניתן להשתמש בה, אנא בצע איתחול לסיסמה שלך.', form_password_size_in_bytes_exceeded: 'הסיסמה שלך חורגת ממספר הבייטים המרבי המותר, נסה לקצר אותה או להסיר כמה תווים מיוחדים.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'סיסמה שגויה', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index f10e586c598..33fa75414bb 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -698,6 +698,9 @@ export const hiIN: LocalizationResource = { passwordPwned: { title: 'पासवर्ड समझौता हो गया', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'सत्यापन कोड', resendButton: 'कोड नहीं मिला? फिर से भेजें', @@ -905,6 +908,7 @@ export const hiIN: LocalizationResource = { 'यह पासवर्ड डेटा उल्लंघन के हिस्से के रूप में पाया गया है और इसका उपयोग नहीं किया जा सकता, कृपया अपना पासवर्ड रीसेट करें।', form_password_size_in_bytes_exceeded: 'आपके पासवर्ड ने अनुमत बाइट्स की अधिकतम संख्या से अधिक हो गया है, कृपया इसे छोटा करें या कुछ विशेष वर्णों को हटा दें।', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'गलत पासवर्ड', form_username_invalid_character: 'आपके उपयोगकर्ता नाम में अमान्य वर्ण हैं। कृपया केवल अक्षर, संख्या और अंडरस्कोर का उपयोग करें।', diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index c4a9056969a..95cdd7fe5f7 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -697,6 +697,9 @@ export const hrHR: LocalizationResource = { passwordPwned: { title: 'Lozinka je kompromitirana', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Verifikacijski kod', resendButton: 'Niste primili kod? Pošalji ponovno', @@ -902,6 +905,7 @@ export const hrHR: LocalizationResource = { 'Ova lozinka je pronađena kao dio curenja podataka i ne može se koristiti, molimo resetirajte svoju lozinku.', form_password_size_in_bytes_exceeded: 'Vaša lozinka je premašila maksimalni dopušteni broj bajtova, molimo skratite je ili uklonite neke posebne znakove.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Netočna lozinka', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 72de3c469a3..0261fc32490 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -696,6 +696,9 @@ export const huHU: LocalizationResource = { passwordPwned: { title: 'Jelszó kompromitálódott', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Visszaigazoló kód', resendButton: 'Nem kaptad meg a kódot? Újraküldés', @@ -899,6 +902,7 @@ export const huHU: LocalizationResource = { 'Úgy látjuk, hogy ez a jelszó kiszivárgott, ezért ezt nem használhatod, kérlek állítsd át a jelszavad.', form_password_size_in_bytes_exceeded: 'A jelszavad több bájtot tartalmaz mint a megadott maximum, kérlek rövidítsd vagy törölj ki néhány speciális karaktert.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Helytelen jelszó', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index 56b3fba8f2b..cca9b632a22 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -699,6 +699,9 @@ export const idID: LocalizationResource = { passwordPwned: { title: 'Kata sandi terkompromi', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Kode verifikasi', resendButton: 'Tidak menerima kode? Kirim ulang', @@ -906,6 +909,7 @@ export const idID: LocalizationResource = { 'Kata sandi ini telah ditemukan sebagai bagian dari kebocoran data dan tidak dapat digunakan, silakan reset kata sandi Anda.', form_password_size_in_bytes_exceeded: 'Kata sandi Anda telah melebihi jumlah byte maksimum yang diizinkan, silakan persingkat atau hapus beberapa karakter khusus.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Kata Sandi Salah', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index 1e08384e767..ae99b1e9aa2 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -698,6 +698,9 @@ export const isIS: LocalizationResource = { passwordPwned: { title: 'Lykilorð brotið', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Staðfestingarkóði', resendButton: 'Fékkstu ekki kóða? Senda aftur', @@ -902,6 +905,7 @@ export const isIS: LocalizationResource = { 'Þetta lykilorð hefur fundist sem hluti af öryggisbresti og má ekki nota, vinsamlegast endurstilltu lykilorðið þitt.', form_password_size_in_bytes_exceeded: 'Lykilorðið þitt hefur farið yfir hámarksfjölda bæta sem leyfðir eru, vinsamlegast styttu það eða fjarlægðu nokkra sérstafi.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Rangt lykilorð', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index 71fd3f220f4..3fce56e6bee 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -703,6 +703,9 @@ export const itIT: LocalizationResource = { passwordPwned: { title: 'La tua password è stata trovata in un data breach.', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Codice di verifica', resendButton: 'Rinvia il codice', @@ -907,6 +910,7 @@ export const itIT: LocalizationResource = { 'Questa password è stata trovata in una violazione dei dati. Non può essere utilizzata. Reimposta la tua password.', form_password_size_in_bytes_exceeded: 'La tua password ha superato il numero massimo di byte consentiti, per favore accorciala o rimuovi alcuni caratteri speciali.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Password errata.', form_username_invalid_character: 'Il nome utente contiene caratteri non validi.', form_username_invalid_length: 'Il nome utente deve avere una lunghezza compresa tra 3 e 32 caratteri.', diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index d1ece04d110..24509b45a9c 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -695,6 +695,9 @@ export const jaJP: LocalizationResource = { passwordPwned: { title: undefined, }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: '検証コード', resendButton: 'コードを再送信', @@ -898,9 +901,11 @@ export const jaJP: LocalizationResource = { form_password_not_strong_enough: 'パスワードの強度が不十分です。', form_password_pwned: 'このパスワードは侵害の一部として見つかったため使用できません。別のパスワードを試してください。', - form_password_pwned__sign_in: undefined, + form_password_pwned__sign_in: + 'このパスワードは侵害の一部として見つかったため使用できません。パスワードをリセットしてください。', form_password_size_in_bytes_exceeded: 'パスワードのバイト数が上限を超えています。短くするか、一部の特殊文字を削除してください。', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'パスワードが間違っています', form_username_invalid_character: 'ユーザー名に無効な文字が含まれています。', form_username_invalid_length: 'ユーザー名の長さが無効です。', diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index 51652ba0316..8d708bc8d4e 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -688,6 +688,9 @@ export const kkKZ: LocalizationResource = { passwordPwned: { title: 'Құпия сөз қауіпті', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Растау коды', resendButton: 'Код алмадыңыз ба? Қайта жіберу', @@ -888,6 +891,7 @@ export const kkKZ: LocalizationResource = { form_password_pwned__sign_in: 'Бұл құпия сөз қауіпсіз емес. Құпия сөзді өзгертуге болады.', form_password_size_in_bytes_exceeded: 'Құпия сөзде тым көп байт бар. Оны қысқартыңыз немесе арнайы таңбаларды алып тастаңыз.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Құпия сөз қате', form_username_invalid_character: 'Пайдаланушы атында жарамсыз таңбалар бар. Тек әріптер, сандар және астыңғы сызықшаларды қолданыңыз.', diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index 919f1bd5d8c..22606878ab2 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -690,6 +690,9 @@ export const koKR: LocalizationResource = { passwordPwned: { title: undefined, }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: '인증 코드', resendButton: '코드 다시 보내기', @@ -891,6 +894,7 @@ export const koKR: LocalizationResource = { form_password_pwned__sign_in: undefined, form_password_size_in_bytes_exceeded: '비밀번호가 허용되는 최대 바이트 수를 초과했습니다. 비밀번호를 줄이거나 일부 특수 문자를 제거해 주세요.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: '잘못된 비밀번호', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index 6a83251942c..deb4e9bd1bc 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -697,6 +697,9 @@ export const mnMN: LocalizationResource = { passwordPwned: { title: undefined, }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Баталгаажуулах код', resendButton: 'Код хүлээж аваагүй юу? Дахин илгээх', @@ -899,6 +902,7 @@ export const mnMN: LocalizationResource = { form_password_pwned__sign_in: undefined, form_password_size_in_bytes_exceeded: 'Энэ нууц үгийг зөрчлийн нэг хэсэг гэж олсон тул ашиглах боломжгүй. Өөр нууц үг оруулж үзнэ үү.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Нууц үг буруу', form_username_invalid_character: 'Хэрэглэгчийн нэр буруу тэмдэгт агуулж байна.', form_username_invalid_length: 'Хэрэглэгчийн нэр буруу байна.', diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index 10b5565164e..9ed0b84a2a0 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -701,6 +701,9 @@ export const msMY: LocalizationResource = { passwordPwned: { title: 'Kata laluan dikompromi', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Kod pengesahan', resendButton: 'Tidak menerima kod? Hantar semula', @@ -909,6 +912,7 @@ export const msMY: LocalizationResource = { 'Kata laluan ini telah dijumpai sebagai sebahagian daripada pelanggaran dan tidak boleh digunakan, sila tetapkan semula kata laluan anda.', form_password_size_in_bytes_exceeded: 'Kata laluan anda telah melebihi bilangan maksimum bait yang dibenarkan, sila pendekkannya atau keluarkan beberapa aksara khas.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Kata Laluan Tidak Betul', form_username_invalid_character: 'Nama pengguna anda mengandungi aksara yang tidak sah. Sila gunakan hanya huruf, nombor, dan garis bawah.', diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index 3ad81e887d6..f0b5444a6a6 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -695,6 +695,9 @@ export const nbNO: LocalizationResource = { passwordPwned: { title: undefined, }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Verifiseringskode', resendButton: 'Send kode på nytt', @@ -898,6 +901,7 @@ export const nbNO: LocalizationResource = { form_password_pwned__sign_in: undefined, form_password_size_in_bytes_exceeded: 'Passordet ditt har overskredet maksimalt antall byte tillatt. Vennligst forkort det eller fjern noen spesialtegn.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Feil passord', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index 7ce4fff3dd4..c35517700f3 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -696,6 +696,9 @@ export const nlBE: LocalizationResource = { passwordPwned: { title: 'Dit wachtwoord is gelekt bij een datalek. Kies een ander wachtwoord om veiligheidsredenen.', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Verificatiecode', resendButton: 'Verstuur code opnieuw', @@ -898,6 +901,7 @@ export const nlBE: LocalizationResource = { form_password_pwned__sign_in: 'Als je dit wachtwoord elders gebruikt, moet je het wijzigen.', form_password_size_in_bytes_exceeded: 'Je wachtwoord heeft het maximum aantal bytes overschreden, vermijd speciale tekens.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Wachtwoord is incorrect.', form_username_invalid_character: 'De gebruikersnaam bevat ongeldige tekens.', form_username_invalid_length: 'De gebruikersnaam is te kort of te lang.', diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index a39c91c1168..5be87e009e0 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -696,6 +696,9 @@ export const nlNL: LocalizationResource = { passwordPwned: { title: 'Dit wachtwoord is gelekt bij een datalek. Kies een ander wachtwoord om veiligheidsredenen.', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Verificatiecode', resendButton: 'Verstuur code opnieuw', @@ -898,6 +901,7 @@ export const nlNL: LocalizationResource = { form_password_pwned__sign_in: 'Als je dit wachtwoord elders gebruikt, moet je het wijzigen.', form_password_size_in_bytes_exceeded: 'Je wachtwoord heeft het maximum aantal bytes overschreden, vermijd speciale tekens.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Wachtwoord is incorrect.', form_username_invalid_character: 'De gebruikersnaam bevat ongeldige tekens.', form_username_invalid_length: 'De gebruikersnaam is te kort of te lang.', diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index 5fa5d7129fb..00b75a375e5 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -698,6 +698,9 @@ export const plPL: LocalizationResource = { passwordPwned: { title: 'Hasło skompromitowane', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Kod weryfikacyjny', resendButton: 'Wyślij kod ponownie', @@ -904,6 +907,7 @@ export const plPL: LocalizationResource = { form_password_pwned__sign_in: 'To hasło zostało znalezione w wyniku włamania i nie można go użyć. Zresetuj hasło.', form_password_size_in_bytes_exceeded: 'Twoje hasło przekroczyło maksymalną dozwoloną liczbę bajtów, skróć je lub usuń niektóre znaki specjalne.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Podane hasło jest nieprawidłowe', form_username_invalid_character: 'Twoja nazwa użytkownika zawiera nieprawidłowe znaki. Prosimy o używanie wyłącznie liter, cyfr i podkreśleń.', diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 9d3eef9e152..480d6017544 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -705,6 +705,9 @@ export const ptBR: LocalizationResource = { passwordPwned: { title: 'Senha comprometida', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Código de verificação', resendButton: 'Reenviar código', @@ -910,6 +913,7 @@ export const ptBR: LocalizationResource = { form_password_pwned__sign_in: 'Esta senha foi comprometida, por favor redefina sua senha.', form_password_size_in_bytes_exceeded: 'Sua senha excedeu o número máximo de bytes permitidos, por favor, encurte-a ou remova alguns caracteres especiais.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Senha incorreta', form_username_invalid_character: 'Nome de usuário contém caracteres inválidos. Por favor, tente outro.', form_username_invalid_length: 'Nome de usuário deve ter entre 3 e 256 caracteres.', diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index 4cda68f3624..d6d36816d30 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -694,6 +694,9 @@ export const ptPT: LocalizationResource = { passwordPwned: { title: 'Este password foi comprometido em uma violação de dados. Escolha outro por motivos de segurança.', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Código de verificação', resendButton: 'Reenviar código', @@ -898,6 +901,7 @@ export const ptPT: LocalizationResource = { 'Esta palavra-passe foi encontrada como parte de uma violação e não pode ser utilizada para login. Por favor, escolha outra.', form_password_size_in_bytes_exceeded: 'A sua palavra-passe excedeu o número máximo de bytes permitidos, por favor, encurte-a ou remova alguns caracteres especiais.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Falha na validação da palavra-passe.', form_username_invalid_character: 'O nome de utilizador contém caracteres inválidos.', form_username_invalid_length: 'O nome de utilizador deve ter entre 3 e 50 caracteres.', diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index 8284ca0a329..5ef24b1a6dd 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -707,6 +707,9 @@ export const roRO: LocalizationResource = { passwordPwned: { title: 'Parola este compromisă', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Cod de verificare', resendButton: 'Nu ai primit un cod? Retrimite', @@ -911,6 +914,7 @@ export const roRO: LocalizationResource = { form_password_pwned__sign_in: 'Această parolă a fost găsită într-o breșă de securitate și nu poate fi folosită. Te rugăm resetează parola.', form_password_size_in_bytes_exceeded: undefined, + form_password_untrusted__sign_in: undefined, form_password_validation_failed: undefined, form_username_invalid_character: undefined, form_username_invalid_length: diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index d8d6a010559..cc37887b67d 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -705,6 +705,9 @@ export const ruRU: LocalizationResource = { passwordPwned: { title: 'Пароль скомпрометирован', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Верификационный код', resendButton: 'Не получили код? Отправить снова.', @@ -911,6 +914,7 @@ export const ruRU: LocalizationResource = { 'Этот пароль был найден в утечке данных и не может быть использован. Пожалуйста, сбросьте пароль.', form_password_size_in_bytes_exceeded: 'Ваш пароль превышает максимально допустимое количество байтов, сократите его или удалите некоторые специальные символы.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Неверный пароль', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index d08d954746c..7c2d4956c16 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -698,6 +698,9 @@ export const skSK: LocalizationResource = { passwordPwned: { title: undefined, }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Overovací kód', resendButton: 'Znova odoslať kód', @@ -904,6 +907,7 @@ export const skSK: LocalizationResource = { 'Toto heslo bolo nájdené v rámci úniku dát a nemôže byť použité, prosím zvoľte iné heslo.', form_password_size_in_bytes_exceeded: 'Vaše heslo prekročilo maximálny povolený počet bytov, prosím skráťte ho alebo odstráňte niektoré špeciálne znaky.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Nesprávne heslo', form_username_invalid_character: 'Používateľské meno môže obsahovať len písmená, číslice, pomlčky a podčiarkovníky.', diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index 952de397572..d1848bf4d2b 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -695,6 +695,9 @@ export const srRS: LocalizationResource = { passwordPwned: { title: 'Lozinka kompromitovana', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Verifikacioni kod', resendButton: 'Nisi primio kod? Pošalji ponovo', @@ -898,6 +901,7 @@ export const srRS: LocalizationResource = { 'Ova lozinka je pronađena kao deo kompromitovanih podataka i ne može se koristiti, molimo resetuj svoju lozinku.', form_password_size_in_bytes_exceeded: 'Tvoja lozinka je premašila maksimalni dozvoljeni broj bajtova, molimo skrati je ili ukloni neke specijalne znakove.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Neispravna lozinka', form_username_invalid_character: 'Korisničko ime sadrži nevažeće karaktere.', form_username_invalid_length: 'Dužina korisničkog imena nije validna.', diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index d9b2c4f65a8..a4ac47fd208 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -698,6 +698,9 @@ export const svSE: LocalizationResource = { passwordPwned: { title: 'Lösenord är för osäkert', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Verifieringskod', resendButton: 'Skicka koden igen', @@ -901,6 +904,7 @@ export const svSE: LocalizationResource = { form_password_pwned__sign_in: 'Lösenordet har läckt, vänligen logga in för att ändra det.', form_password_size_in_bytes_exceeded: 'Ditt lösenord har överskridit det maximala antalet tillåtna bytes, vänligen förkorta det eller ta bort några specialtecken.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Felaktigt lösenord', form_username_invalid_character: 'Användarnamnet innehåller ogiltiga tecken.', form_username_invalid_length: 'Användarnamnets längd är ogiltig.', diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index d18e325f5e5..c9478dd0472 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -701,6 +701,9 @@ export const taIN: LocalizationResource = { passwordPwned: { title: 'கடவுச்சொல் அபாயத்தில் உள்ளது', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'சரிபார்ப்புக் குறியீடு', resendButton: 'குறியீடு கிடைக்கவில்லையா? மீண்டும் அனுப்பு', @@ -908,6 +911,7 @@ export const taIN: LocalizationResource = { 'இந்த கடவுச்சொல் தரவு மீறலின் ஒரு பகுதியாக காணப்பட்டது மற்றும் பயன்படுத்த முடியாது, தயவுசெய்து உங்கள் கடவுச்சொல்லை மீட்டமைக்கவும்.', form_password_size_in_bytes_exceeded: 'உங்கள் கடவுச்சொல் அனுமதிக்கப்பட்ட அதிகபட்ச பைட்டுகளை மீறிவிட்டது, தயவுசெய்து அதை குறைக்கவும் அல்லது சில சிறப்பு எழுத்துக்களை நீக்கவும்.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'தவறான கடவுச்சொல்', form_username_invalid_character: 'உங்கள் பயனர்பெயரில் தவறான எழுத்துக்கள் உள்ளன. எழுத்துக்கள், எண்கள் மற்றும் அடிக்கோடுகளை மட்டும் பயன்படுத்தவும்.', diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index 40134fa9f1b..184e4ef1f24 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -700,6 +700,9 @@ export const teIN: LocalizationResource = { passwordPwned: { title: 'పాస్‌వర్డ్ ప్రమాదంలో ఉంది', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'ధృవీకరణ కోడ్', resendButton: 'కోడ్ అందలేదా? మళ్ళీ పంపండి', @@ -907,6 +910,7 @@ export const teIN: LocalizationResource = { 'ఈ పాస్‌వర్డ్ డేటా ఉల్లంఘన భాగంగా కనుగొనబడింది మరియు ఉపయోగించడానికి వీలుపడదు, దయచేసి మీ పాస్‌వర్డ్‌ను రీసెట్ చేయండి.', form_password_size_in_bytes_exceeded: 'మీ పాస్‌వర్డ్ అనుమతించిన గరిష్ట బైట్ల సంఖ్యను మించింది, దయచేసి దాన్ని చిన్నదిగా చేయండి లేదా కొన్ని ప్రత్యేక అక్షరాలను తొలగించండి.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'తప్పు పాస్‌వర్డ్', form_username_invalid_character: 'మీ వినియోగదారు పేరులో చెల్లని అక్షరాలు ఉన్నాయి. దయచేసి అక్షరాలు, సంఖ్యలు మరియు అండర్‌స్కోర్‌లను మాత్రమే ఉపయోగించండి.', diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index 99818db1309..48f0dda33b5 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -697,6 +697,9 @@ export const thTH: LocalizationResource = { passwordPwned: { title: 'รหัสผ่านถูกโจรกรรม', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'รหัสยืนยัน', resendButton: 'ไม่ได้รับรหัส? ส่งใหม่', @@ -899,6 +902,7 @@ export const thTH: LocalizationResource = { form_password_pwned__sign_in: 'รหัสผ่านนี้ถูกพบว่าเป็นส่วนหนึ่งของรหัสผ่านที่เคยถูกโจรกรรมข้อมูลและไม่สามารถใช้ได้ โปรดรีเซ็ตรหัสผ่านของคุณ', form_password_size_in_bytes_exceeded: undefined, + form_password_untrusted__sign_in: undefined, form_password_validation_failed: undefined, form_username_invalid_character: undefined, form_username_invalid_length: 'ชื่อผู้ใช้ของคุณต้องมีความยาวระหว่าง {{min_length}} ถึง {{max_length}} ตัวอักษร', diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index 5a65f006d58..6a3365328cf 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -697,6 +697,9 @@ export const trTR: LocalizationResource = { passwordPwned: { title: 'Şifre ele geçirildi', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Doğrulama kodu', resendButton: 'Kod almadınız mı? Tekrar gönderin', @@ -900,6 +903,7 @@ export const trTR: LocalizationResource = { 'Bu şifre bir veri ihlalinde tespit edildi ve oturum açmak için kullanılamaz. Lütfen başka bir şifre seçin.', form_password_size_in_bytes_exceeded: 'Şifreniz izin verilen maksimum byte sayısını aştı, lütfen kısaltın veya bazı özel karakterleri çıkarın.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Şifre doğrulaması başarısız.', form_username_invalid_character: 'Kullanıcı adı geçersiz karakterler içeriyor.', form_username_invalid_length: 'Kullanıcı adı 3 ile 50 karakter arasında olmalıdır.', diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index f95d2b788a5..ead12129f31 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -694,6 +694,9 @@ export const ukUA: LocalizationResource = { passwordPwned: { title: undefined, }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Код підтвердження', resendButton: 'Не отримали код? повторно відправити', @@ -895,6 +898,7 @@ export const ukUA: LocalizationResource = { form_password_pwned__sign_in: undefined, form_password_size_in_bytes_exceeded: 'Ваш пароль перевищує максимально допустиму кількість байтів, скоротіть його або видаліть деякі спеціальні символи.', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: 'Невірний пароль', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index fb594fe9d09..e29d8f659d6 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -703,6 +703,9 @@ export const viVN: LocalizationResource = { passwordPwned: { title: 'Mật khẩu bị rò rỉ', }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: 'Mã xác minh', resendButton: 'Không nhận được mã? Gửi lại', @@ -906,6 +909,7 @@ export const viVN: LocalizationResource = { form_password_pwned__sign_in: 'Mật khẩu này đã được tìm thấy trong một rò rỉ và không thể được sử dụng, vui lòng đặt lại mật khẩu của bạn.', form_password_size_in_bytes_exceeded: undefined, + form_password_untrusted__sign_in: undefined, form_password_validation_failed: undefined, form_username_invalid_character: undefined, form_username_invalid_length: 'Tên người dùng của bạn phải có giữa {{min_length}} và {{max_length}} ký tự.', diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index 885f4473c11..7ea0cf6fb17 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -684,6 +684,9 @@ export const zhCN: LocalizationResource = { passwordPwned: { title: undefined, }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: '验证码', resendButton: '重新发送验证码', @@ -882,6 +885,7 @@ export const zhCN: LocalizationResource = { form_password_pwned: '这个密码在数据泄露中被发现,不能使用,请换一个密码试试。', form_password_pwned__sign_in: undefined, form_password_size_in_bytes_exceeded: '您的密码超过了允许的最大字节数,请缩短它或去掉一些特殊字符。', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: '密码错误', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index 679b8399d8a..05079a5737f 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -684,6 +684,9 @@ export const zhTW: LocalizationResource = { passwordPwned: { title: undefined, }, + passwordUntrusted: { + title: undefined, + }, phoneCode: { formTitle: '驗證碼', resendButton: '重新傳送驗證碼', @@ -883,6 +886,7 @@ export const zhTW: LocalizationResource = { form_password_pwned: '此密碼已在已知的資料外洩事件中出現,請改用其他密碼。', form_password_pwned__sign_in: undefined, form_password_size_in_bytes_exceeded: '您的密碼超過允許的大小上限,請縮短或移除部分特殊字元。', + form_password_untrusted__sign_in: undefined, form_password_validation_failed: '密碼驗證失敗', form_username_invalid_character: undefined, form_username_invalid_length: undefined, diff --git a/packages/shared/src/error.ts b/packages/shared/src/error.ts index 14b32870d1f..2e9b9293866 100644 --- a/packages/shared/src/error.ts +++ b/packages/shared/src/error.ts @@ -24,6 +24,7 @@ export { isMetamaskError, isNetworkError, isPasswordPwnedError, + isPasswordUntrustedError, isReverificationCancelledError, isUnauthorizedError, isUserLockedError, diff --git a/packages/shared/src/errors/helpers.ts b/packages/shared/src/errors/helpers.ts index 046270fedf9..2335b141e25 100644 --- a/packages/shared/src/errors/helpers.ts +++ b/packages/shared/src/errors/helpers.ts @@ -120,6 +120,15 @@ export function isPasswordPwnedError(err: any) { return isClerkAPIResponseError(err) && err.errors?.[0]?.code === 'form_password_pwned'; } +/** + * Checks if the provided error is a clerk api response error indicating a password was untrusted. + * + * @internal + */ +export function isPasswordUntrustedError(err: any) { + return isClerkAPIResponseError(err) && err.errors?.[0]?.code === 'form_password_untrusted'; +} + /** * Checks if the provided error is an EmailLinkError. * diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts index d80f9dbc54f..2f9d8292063 100644 --- a/packages/shared/src/types/localization.ts +++ b/packages/shared/src/types/localization.ts @@ -400,6 +400,9 @@ export type __internal_LocalizationResource = { passwordPwned: { title: LocalizationValue; }; + passwordUntrusted: { + title: LocalizationValue; + }; passkey: { title: LocalizationValue; subtitle: LocalizationValue; @@ -1312,6 +1315,7 @@ type UnstableErrors = WithParamName<{ web3_missing_identifier: LocalizationValue; form_password_pwned: LocalizationValue; form_password_pwned__sign_in: LocalizationValue; + form_password_untrusted__sign_in: LocalizationValue; form_username_invalid_length: LocalizationValue<'min_length' | 'max_length'>; form_username_invalid_character: LocalizationValue; form_param_format_invalid: LocalizationValue; diff --git a/packages/ui/src/components/SignIn/AlternativeMethods.tsx b/packages/ui/src/components/SignIn/AlternativeMethods.tsx index 8ca576bdab1..95e41ac3f5d 100644 --- a/packages/ui/src/components/SignIn/AlternativeMethods.tsx +++ b/packages/ui/src/components/SignIn/AlternativeMethods.tsx @@ -18,7 +18,7 @@ import { SignInSocialButtons } from './SignInSocialButtons'; import { useResetPasswordFactor } from './useResetPasswordFactor'; import { withHavingTrouble } from './withHavingTrouble'; -type AlternativeMethodsMode = 'forgot' | 'pwned' | 'default'; +export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordUntrusted' | 'default'; export type AlternativeMethodsProps = { onBackLinkClick: React.MouseEventHandler | undefined; @@ -55,7 +55,9 @@ const AlternativeMethodsList = (props: AlternativeMethodListProps) => { - {!isReset && } + {!isReset && mode !== 'passwordUntrusted' && ( + + )} {card.error} {/*TODO: extract main in its own component */} @@ -183,6 +185,8 @@ function determineFlowPart(mode: AlternativeMethodsMode) { return 'forgotPasswordMethods'; case 'pwned': return 'passwordPwnedMethods'; + case 'passwordUntrusted': + return 'passwordUntrustedMethods'; default: return 'alternativeMethods'; } @@ -194,6 +198,8 @@ function determineTitle(mode: AlternativeMethodsMode): LocalizationKey { return localizationKeys('signIn.forgotPasswordAlternativeMethods.title'); case 'pwned': return localizationKeys('signIn.passwordPwned.title'); + case 'passwordUntrusted': + return localizationKeys('signIn.passwordPwned.title'); default: return localizationKeys('signIn.alternativeMethods.title'); } @@ -204,6 +210,8 @@ function determineIsReset(mode: AlternativeMethodsMode): boolean { case 'forgot': case 'pwned': return true; + case 'passwordUntrusted': + return false; default: return false; } diff --git a/packages/ui/src/components/SignIn/SignInFactorOne.tsx b/packages/ui/src/components/SignIn/SignInFactorOne.tsx index e318345e719..01eb0c0b14e 100644 --- a/packages/ui/src/components/SignIn/SignInFactorOne.tsx +++ b/packages/ui/src/components/SignIn/SignInFactorOne.tsx @@ -11,6 +11,7 @@ import { useCoreSignIn, useEnvironment } from '../../contexts'; import { useAlternativeStrategies } from '../../hooks/useAlternativeStrategies'; import { localizationKeys } from '../../localization'; import { useRouter } from '../../router'; +import type { AlternativeMethodsMode } from './AlternativeMethods'; import { AlternativeMethods } from './AlternativeMethods'; import { hasMultipleEnterpriseConnections } from './shared'; import { SignInFactorOneAlternativePhoneCodeCard } from './SignInFactorOneAlternativePhoneCodeCard'; @@ -19,6 +20,7 @@ import { SignInFactorOneEmailLinkCard } from './SignInFactorOneEmailLinkCard'; import { SignInFactorOneEnterpriseConnections } from './SignInFactorOneEnterpriseConnections'; import { SignInFactorOneForgotPasswordCard } from './SignInFactorOneForgotPasswordCard'; import { SignInFactorOnePasskey } from './SignInFactorOnePasskey'; +import type { PasswordErrorCode } from './SignInFactorOnePasswordCard'; import { SignInFactorOnePasswordCard } from './SignInFactorOnePasswordCard'; import { SignInFactorOnePhoneCodeCard } from './SignInFactorOnePhoneCodeCard'; import { useResetPasswordFactor } from './useResetPasswordFactor'; @@ -41,6 +43,25 @@ const factorKey = (factor: SignInFactor | null | undefined) => { return key; }; +function determineAlternativeMethodsMode( + showForgotPasswordStrategies: boolean, + passwordErrorCode: PasswordErrorCode | null, +): AlternativeMethodsMode { + if (!showForgotPasswordStrategies) { + return 'default'; + } + + if (passwordErrorCode === 'pwned') { + return 'pwned'; + } + + if (passwordErrorCode === 'untrusted') { + return 'passwordUntrusted'; + } + + return 'forgot'; +} + function SignInFactorOneInternal(): JSX.Element { const { __internal_setActiveInProgress } = useClerk(); const signIn = useCoreSignIn(); @@ -84,7 +105,7 @@ function SignInFactorOneInternal(): JSX.Element { const [showForgotPasswordStrategies, setShowForgotPasswordStrategies] = React.useState(false); - const [isPasswordPwned, setIsPasswordPwned] = React.useState(false); + const [passwordErrorCode, setPasswordErrorCode] = React.useState(null); React.useEffect(() => { if (__internal_setActiveInProgress) { @@ -139,11 +160,11 @@ function SignInFactorOneInternal(): JSX.Element { const toggle = showAllStrategies ? toggleAllStrategies : toggleForgotPasswordStrategies; const backHandler = () => { card.setError(undefined); - setIsPasswordPwned(false); + setPasswordErrorCode(null); toggle?.(); }; - const mode = showForgotPasswordStrategies ? (isPasswordPwned ? 'pwned' : 'forgot') : 'default'; + const mode = determineAlternativeMethodsMode(showForgotPasswordStrategies, passwordErrorCode); return ( { - setIsPasswordPwned(true); + onPasswordError={errorCode => { + setPasswordErrorCode(errorCode); toggleForgotPasswordStrategies(); }} /> diff --git a/packages/ui/src/components/SignIn/SignInFactorOnePasswordCard.tsx b/packages/ui/src/components/SignIn/SignInFactorOnePasswordCard.tsx index 34884e417fb..f9623346d9d 100644 --- a/packages/ui/src/components/SignIn/SignInFactorOnePasswordCard.tsx +++ b/packages/ui/src/components/SignIn/SignInFactorOnePasswordCard.tsx @@ -1,4 +1,4 @@ -import { isPasswordPwnedError, isUserLockedError } from '@clerk/shared/error'; +import { isPasswordPwnedError, isPasswordUntrustedError, isUserLockedError } from '@clerk/shared/error'; import { clerkInvalidFAPIResponse } from '@clerk/shared/internal/clerk-js/errors'; import { useClerk } from '@clerk/shared/react'; import React from 'react'; @@ -18,10 +18,12 @@ import { useRouter } from '../../router/RouteContext'; import { HavingTrouble } from './HavingTrouble'; import { useResetPasswordFactor } from './useResetPasswordFactor'; +export type PasswordErrorCode = 'untrusted' | 'pwned'; + type SignInFactorOnePasswordProps = { onForgotPasswordMethodClick: React.MouseEventHandler | undefined; onShowAlternativeMethodsClick: React.MouseEventHandler | undefined; - onPasswordPwned?: () => void; + onPasswordError?: (errorCode: PasswordErrorCode) => void; }; const usePasswordControl = (props: SignInFactorOnePasswordProps) => { @@ -50,7 +52,7 @@ const usePasswordControl = (props: SignInFactorOnePasswordProps) => { }; export const SignInFactorOnePasswordCard = (props: SignInFactorOnePasswordProps) => { - const { onShowAlternativeMethodsClick, onPasswordPwned } = props; + const { onShowAlternativeMethodsClick, onPasswordError } = props; const passwordInputRef = React.useRef(null); const card = useCardState(); const { setActive } = useClerk(); @@ -64,20 +66,20 @@ export const SignInFactorOnePasswordCard = (props: SignInFactorOnePasswordProps) const clerk = useClerk(); const goBack = () => { - return navigate('../'); + void navigate('../'); }; - const handlePasswordSubmit: React.FormEventHandler = async e => { + const handlePasswordSubmit: React.FormEventHandler = e => { e.preventDefault(); - return signIn + void signIn .attemptFirstFactor({ strategy: 'password', password: passwordControl.value }) .then(res => { switch (res.status) { case 'complete': return setActive({ session: res.createdSessionId, - navigate: async ({ session }) => { - await navigateOnSetActive({ session, redirectUrl: afterSignInUrl }); + navigate: ({ session }) => { + void navigateOnSetActive({ session, redirectUrl: afterSignInUrl }); }, }); case 'needs_second_factor': @@ -92,10 +94,18 @@ export const SignInFactorOnePasswordCard = (props: SignInFactorOnePasswordProps) return clerk.__internal_navigateWithError('..', err.errors[0]); } - if (isPasswordPwnedError(err) && onPasswordPwned) { - card.setError({ ...err.errors[0], code: 'form_password_pwned__sign_in' }); - onPasswordPwned(); - return; + if (onPasswordError) { + if (isPasswordPwnedError(err)) { + card.setError({ ...err.errors[0], code: 'form_password_pwned__sign_in' }); + onPasswordError('pwned'); + return; + } + + if (isPasswordUntrustedError(err)) { + card.setError({ ...err.errors[0], code: 'form_password_untrusted__sign_in' }); + onPasswordError('untrusted'); + return; + } } handleError(err, [passwordControl], card.setError); diff --git a/packages/ui/src/components/SignIn/__tests__/SignInFactorOne.test.tsx b/packages/ui/src/components/SignIn/__tests__/SignInFactorOne.test.tsx index d610e2d9150..c543db87364 100644 --- a/packages/ui/src/components/SignIn/__tests__/SignInFactorOne.test.tsx +++ b/packages/ui/src/components/SignIn/__tests__/SignInFactorOne.test.tsx @@ -352,6 +352,84 @@ describe('SignInFactorOne', () => { ), ).not.toBeInTheDocument(); }); + + it('using an untrusted password should show the untrusted password screen', async () => { + const { wrapper, fixtures } = await createFixtures(f => { + f.withEmailAddress(); + f.withPassword(); + f.withPreferredSignInStrategy({ strategy: 'password' }); + f.startSignInWithEmailAddress({ + supportEmailCode: true, + supportPassword: true, + supportResetPassword: true, + }); + }); + fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource)); + + const errJSON = { + code: 'form_password_untrusted', + long_message: + "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", + message: + "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", + meta: { param_name: 'password' }, + }; + + fixtures.signIn.attemptFirstFactor.mockRejectedValueOnce( + new ClerkAPIResponseError('Error', { + data: [errJSON], + status: 422, + }), + ); + const { userEvent } = render(, { wrapper }); + await userEvent.type(screen.getByLabelText('Password'), '123456'); + await userEvent.click(screen.getByText('Continue')); + + await screen.findByText('Password compromised'); + await screen.findByText( + "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", + ); + + await screen.findByText('Email code to hello@clerk.com'); + }); + + it('Prompts the user to use a different method if the password is untrusted', async () => { + const { wrapper, fixtures } = await createFixtures(f => { + f.withEmailAddress(); + f.withPassword(); + f.withPreferredSignInStrategy({ strategy: 'password' }); + f.withSocialProvider({ provider: 'google', authenticatable: true }); + f.startSignInWithEmailAddress({ + supportEmailCode: true, + supportPassword: true, + supportResetPassword: true, + }); + }); + fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource)); + + const errJSON = { + code: 'form_password_untrusted', + long_message: + "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", + message: + "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", + meta: { param_name: 'password' }, + }; + + fixtures.signIn.attemptFirstFactor.mockRejectedValueOnce( + new ClerkAPIResponseError('Error', { + data: [errJSON], + status: 422, + }), + ); + const { userEvent } = render(, { wrapper }); + await userEvent.type(screen.getByLabelText('Password'), '123456'); + await userEvent.click(screen.getByText('Continue')); + + await screen.findByText('Password compromised'); + await userEvent.click(screen.getByText('Email code to hello@clerk.com')); + await screen.findByText('Check your email'); + }); }); describe('Forgot Password', () => { diff --git a/packages/ui/src/elements/contexts/index.tsx b/packages/ui/src/elements/contexts/index.tsx index 6211f1a0b84..1ad79f85d0c 100644 --- a/packages/ui/src/elements/contexts/index.tsx +++ b/packages/ui/src/elements/contexts/index.tsx @@ -120,6 +120,7 @@ export type FlowMetadata = { | 'alternativeMethods' | 'forgotPasswordMethods' | 'passwordPwnedMethods' + | 'passwordUntrustedMethods' | 'havingTrouble' | 'ssoCallback' | 'popupCallback' From 66f44eb0cf00507baa2e923f59f60c98e0527442 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Tue, 2 Dec 2025 20:59:03 +0200 Subject: [PATCH 2/5] test(e2e): Update tests to handle untrusted password on sign-in (#7345) --- .changeset/funny-crabs-crash.md | 3 +++ ...ssion-tasks-sign-in-reset-password.test.ts | 22 +++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 .changeset/funny-crabs-crash.md diff --git a/.changeset/funny-crabs-crash.md b/.changeset/funny-crabs-crash.md new file mode 100644 index 00000000000..853d812bb36 --- /dev/null +++ b/.changeset/funny-crabs-crash.md @@ -0,0 +1,3 @@ +--- + +--- diff --git a/integration/tests/session-tasks-sign-in-reset-password.test.ts b/integration/tests/session-tasks-sign-in-reset-password.test.ts index 581e53a683d..1b888378c5a 100644 --- a/integration/tests/session-tasks-sign-in-reset-password.test.ts +++ b/integration/tests/session-tasks-sign-in-reset-password.test.ts @@ -1,4 +1,4 @@ -import { test } from '@playwright/test'; +import { expect, test } from '@playwright/test'; import { hash } from '../models/helpers'; import { appConfigs } from '../presets'; @@ -28,6 +28,13 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword await u.po.signIn.setPassword(user.password); await u.po.signIn.continue(); + await expect( + u.page.getByText( + "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", + ), + ).toBeVisible(); + await u.po.signIn.getAltMethodsEmailCodeButton().click(); + await u.page.getByRole('textbox', { name: 'code' }).click(); await u.page.keyboard.type('424242', { delay: 100 }); @@ -62,7 +69,8 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword await u.services.users.passwordUntrusted(createdUser.id); const fakeOrganization = u.services.organizations.createFakeOrganization(); await u.services.organizations.createBapiOrganization({ - ...fakeOrganization, + name: fakeOrganization.name, + slug: fakeOrganization.slug + Date.now().toString(), createdBy: createdUser.id, }); @@ -73,9 +81,15 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword await u.po.signIn.setPassword(user.password); await u.po.signIn.continue(); - await u.page.getByRole('textbox', { name: 'code' }).fill('424242'); + await expect( + u.page.getByText( + "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", + ), + ).toBeVisible(); + await u.po.signIn.getAltMethodsEmailCodeButton().click(); - await u.po.expect.toBeSignedIn(); + await u.page.getByRole('textbox', { name: 'code' }).click(); + await u.page.keyboard.type('424242', { delay: 100 }); // Redirects back to tasks when accessing protected route by `auth.protect` await u.page.goToRelative('/page-protected'); From 7366d83ff5b401dfd400c44024006c76e92dd910 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Wed, 3 Dec 2025 14:03:55 +0200 Subject: [PATCH 3/5] fix(clerk-js,localizations,backend): Rename `passwordUntrusted` to `passwordCompromised` (#7352) --- .changeset/honest-pigs-move.md | 5 +++++ .changeset/moody-dryers-serve.md | 5 +++++ .changeset/some-phones-report.md | 6 ++++++ integration/testUtils/usersService.ts | 6 +++--- .../session-tasks-sign-in-reset-password.test.ts | 4 ++-- packages/backend/src/api/endpoints/UserApi.ts | 4 ++-- packages/localizations/src/ar-SA.ts | 3 +++ packages/localizations/src/be-BY.ts | 3 +++ packages/localizations/src/bg-BG.ts | 3 +++ packages/localizations/src/bn-IN.ts | 3 +++ packages/localizations/src/ca-ES.ts | 3 +++ packages/localizations/src/cs-CZ.ts | 3 +++ packages/localizations/src/da-DK.ts | 3 +++ packages/localizations/src/de-DE.ts | 3 +++ packages/localizations/src/el-GR.ts | 3 +++ packages/localizations/src/en-GB.ts | 3 +++ packages/localizations/src/en-US.ts | 5 ++++- packages/localizations/src/es-CR.ts | 3 +++ packages/localizations/src/es-ES.ts | 3 +++ packages/localizations/src/es-MX.ts | 3 +++ packages/localizations/src/es-UY.ts | 3 +++ packages/localizations/src/fa-IR.ts | 3 +++ packages/localizations/src/fi-FI.ts | 3 +++ packages/localizations/src/fr-FR.ts | 3 +++ packages/localizations/src/he-IL.ts | 3 +++ packages/localizations/src/hi-IN.ts | 3 +++ packages/localizations/src/hr-HR.ts | 3 +++ packages/localizations/src/hu-HU.ts | 3 +++ packages/localizations/src/id-ID.ts | 3 +++ packages/localizations/src/is-IS.ts | 3 +++ packages/localizations/src/it-IT.ts | 3 +++ packages/localizations/src/ja-JP.ts | 3 +++ packages/localizations/src/kk-KZ.ts | 3 +++ packages/localizations/src/ko-KR.ts | 3 +++ packages/localizations/src/mn-MN.ts | 3 +++ packages/localizations/src/ms-MY.ts | 3 +++ packages/localizations/src/nb-NO.ts | 3 +++ packages/localizations/src/nl-BE.ts | 3 +++ packages/localizations/src/nl-NL.ts | 3 +++ packages/localizations/src/pl-PL.ts | 3 +++ packages/localizations/src/pt-BR.ts | 3 +++ packages/localizations/src/pt-PT.ts | 3 +++ packages/localizations/src/ro-RO.ts | 3 +++ packages/localizations/src/ru-RU.ts | 3 +++ packages/localizations/src/sk-SK.ts | 3 +++ packages/localizations/src/sr-RS.ts | 3 +++ packages/localizations/src/sv-SE.ts | 3 +++ packages/localizations/src/ta-IN.ts | 3 +++ packages/localizations/src/te-IN.ts | 3 +++ packages/localizations/src/th-TH.ts | 3 +++ packages/localizations/src/tr-TR.ts | 3 +++ packages/localizations/src/uk-UA.ts | 3 +++ packages/localizations/src/vi-VN.ts | 3 +++ packages/localizations/src/zh-CN.ts | 3 +++ packages/localizations/src/zh-TW.ts | 3 +++ packages/shared/src/error.ts | 2 +- packages/shared/src/errors/helpers.ts | 6 +++--- packages/shared/src/types/localization.ts | 6 ++++++ .../src/components/SignIn/AlternativeMethods.tsx | 14 +++++++------- .../ui/src/components/SignIn/SignInFactorOne.tsx | 4 ++-- .../SignIn/SignInFactorOnePasswordCard.tsx | 10 +++++----- .../SignIn/__tests__/SignInFactorOne.test.tsx | 8 ++++---- packages/ui/src/elements/contexts/index.tsx | 2 +- 63 files changed, 200 insertions(+), 31 deletions(-) create mode 100644 .changeset/honest-pigs-move.md create mode 100644 .changeset/moody-dryers-serve.md create mode 100644 .changeset/some-phones-report.md diff --git a/.changeset/honest-pigs-move.md b/.changeset/honest-pigs-move.md new file mode 100644 index 00000000000..749c12dbdc2 --- /dev/null +++ b/.changeset/honest-pigs-move.md @@ -0,0 +1,5 @@ +--- +'@clerk/backend': patch +--- + +Rename `__experimental_passwordUntrusted` to `__experimental_passwordCompromised` diff --git a/.changeset/moody-dryers-serve.md b/.changeset/moody-dryers-serve.md new file mode 100644 index 00000000000..bd84ebca859 --- /dev/null +++ b/.changeset/moody-dryers-serve.md @@ -0,0 +1,5 @@ +--- +'@clerk/localizations': patch +--- + +Deprecating `passwordUntrusted` in favour of `passwordCompromised` and `form_password_untrusted__sign_in` to `form_password_compromised__sign_in` diff --git a/.changeset/some-phones-report.md b/.changeset/some-phones-report.md new file mode 100644 index 00000000000..704e93a3dd5 --- /dev/null +++ b/.changeset/some-phones-report.md @@ -0,0 +1,6 @@ +--- +'@clerk/clerk-js': patch +'@clerk/shared': patch +--- + +Rename internal `isPasswordUntrustedError` to `isPasswordCompromisedError` diff --git a/integration/testUtils/usersService.ts b/integration/testUtils/usersService.ts index 3b88e971db0..52814990c92 100644 --- a/integration/testUtils/usersService.ts +++ b/integration/testUtils/usersService.ts @@ -76,7 +76,7 @@ export type UserService = { createFakeOrganization: (userId: string) => Promise; getUser: (opts: { id?: string; email?: string }) => Promise; createFakeAPIKey: (userId: string) => Promise; - passwordUntrusted: (userId: string) => Promise; + passwordCompromised: (userId: string) => Promise; }; /** @@ -211,8 +211,8 @@ export const createUserService = (clerkClient: ClerkClient) => { revoke: () => clerkClient.apiKeys.revoke({ apiKeyId: apiKey.id, revocationReason: 'For testing purposes' }), } satisfies FakeAPIKey; }, - passwordUntrusted: async (userId: string) => { - await clerkClient.users.__experimental_passwordUntrusted(userId); + passwordCompromised: async (userId: string) => { + await clerkClient.users.__experimental_passwordCompromised(userId); }, }; diff --git a/integration/tests/session-tasks-sign-in-reset-password.test.ts b/integration/tests/session-tasks-sign-in-reset-password.test.ts index 1b888378c5a..cf82347cf09 100644 --- a/integration/tests/session-tasks-sign-in-reset-password.test.ts +++ b/integration/tests/session-tasks-sign-in-reset-password.test.ts @@ -19,7 +19,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword const user = u.services.users.createFakeUser(); const createdUser = await u.services.users.createBapiUser(user); - await u.services.users.passwordUntrusted(createdUser.id); + await u.services.users.passwordCompromised(createdUser.id); // Performs sign-in await u.po.signIn.goTo(); @@ -66,7 +66,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword const user = u.services.users.createFakeUser(); const createdUser = await u.services.users.createBapiUser(user); - await u.services.users.passwordUntrusted(createdUser.id); + await u.services.users.passwordCompromised(createdUser.id); const fakeOrganization = u.services.organizations.createFakeOrganization(); await u.services.organizations.createBapiOrganization({ name: fakeOrganization.name, diff --git a/packages/backend/src/api/endpoints/UserApi.ts b/packages/backend/src/api/endpoints/UserApi.ts index a96f6051092..f883aa14685 100644 --- a/packages/backend/src/api/endpoints/UserApi.ts +++ b/packages/backend/src/api/endpoints/UserApi.ts @@ -448,11 +448,11 @@ export class UserAPI extends AbstractAPI { }); } - public async __experimental_passwordUntrusted(userId: string) { + public async __experimental_passwordCompromised(userId: string) { this.requireId(userId); return this.request({ method: 'POST', - path: joinPaths(basePath, userId, 'password_untrusted'), + path: joinPaths(basePath, userId, 'password_compromised'), bodyParams: { revokeAllSessions: false, }, diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index bb1ed0c2886..f29d72f1c1f 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -690,6 +690,9 @@ export const arSA: LocalizationResource = { subtitle: 'للمتابعة إلى {{applicationName}}', title: 'ادخل كلمة المرور', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'كلمة المرور غير آمنة', }, diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index 836a7bf7f62..8c80a9f1ca7 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -697,6 +697,9 @@ export const beBY: LocalizationResource = { subtitle: 'каб працягнуць працу ў "{{applicationName}}"', title: 'Увядзіце пароль', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Пароль быў узламаны', }, diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index 72d918e80e3..db903a06907 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -693,6 +693,9 @@ export const bgBG: LocalizationResource = { subtitle: 'Въведете паролата, свързана с вашия акаунт', title: 'Въведете вашата парола', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: undefined, }, diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index f12be149038..21c2d0d9390 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -696,6 +696,9 @@ export const bnIN: LocalizationResource = { subtitle: 'আপনার অ্যাকাউন্টের সাথে যুক্ত পাসওয়ার্ড লিখুন', title: 'আপনার পাসওয়ার্ড লিখুন', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'পাসওয়ার্ড সমঝোতা হয়েছে', }, diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index 8eafd5690f5..248697ba84a 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -693,6 +693,9 @@ export const caES: LocalizationResource = { subtitle: 'Introdueix la contrasenya associada al teu compte', title: 'Introdueix la teva contrasenya', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: undefined, }, diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index 753c9e76b6f..7fe22d20802 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -701,6 +701,9 @@ export const csCZ: LocalizationResource = { subtitle: 'Zadejte heslo spojené s vaším účtem', title: 'Zadejte své heslo', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Heslo kompromitováno', }, diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index a30113a9c80..f47c6a17541 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -692,6 +692,9 @@ export const daDK: LocalizationResource = { subtitle: 'Fortsæt til {{applicationName}}', title: 'Indtast din adgangskode', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Sikkerhedsadvarsel', }, diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index d0a787430b8..c88e726934e 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -706,6 +706,9 @@ export const deDE: LocalizationResource = { subtitle: 'weiter zu {{applicationName}}', title: 'Geben Sie Ihr Passwort ein', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Passwort kompromittiert', }, diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index 77373cbbac7..067ce743a37 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -694,6 +694,9 @@ export const elGR: LocalizationResource = { subtitle: 'για να συνεχίσετε στο {{applicationName}}', title: 'Εισαγωγή κωδικού πρόσβασης', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Παραβιασμένος κωδικός', }, diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index 423b5d6b7a7..ae263ed220e 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -694,6 +694,9 @@ export const enGB: LocalizationResource = { subtitle: 'Enter the password associated with your account', title: 'Enter your password', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Password compromised', }, diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts index 1b98e5fff63..14bee5b04ac 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -691,11 +691,14 @@ export const enUS: LocalizationResource = { subtitle: 'Enter the password associated with your account', title: 'Enter your password', }, + passwordCompromised: { + title: 'Password compromised', + }, passwordPwned: { title: 'Password compromised', }, passwordUntrusted: { - title: 'Password compromised', + title: 'Password untrusted', }, phoneCode: { formTitle: 'Verification code', diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index 99ab7bd9063..6faf00279e7 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -698,6 +698,9 @@ export const esCR: LocalizationResource = { subtitle: 'para continuar con {{applicationName}}', title: 'Introduzca su contraseña', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Contraseña en peligro', }, diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index c792b1724bd..c9370ff306e 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -694,6 +694,9 @@ export const esES: LocalizationResource = { subtitle: 'para continuar a {{applicationName}}', title: 'Introduzca su contraseña', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Tu contraseña ha sido comprometida', }, diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index 52b2b1832d1..e8e72d4c4f8 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -699,6 +699,9 @@ export const esMX: LocalizationResource = { subtitle: 'para continuar con {{applicationName}}', title: 'Introduzca su contraseña', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Contraseña en peligro', }, diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index 4001bb3d730..f760c413d85 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -697,6 +697,9 @@ export const esUY: LocalizationResource = { subtitle: 'Ingresá la contraseña asociada a tu cuenta', title: 'Ingresá tu contraseña', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Contraseña comprometida', }, diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index fa169ba27b0..991b08b23b1 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -702,6 +702,9 @@ export const faIR: LocalizationResource = { subtitle: 'رمز عبور مرتبط با حساب کاربری خود را وارد کنید', title: 'رمز عبور خود را وارد کنید', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'رمز عبور به خطر افتاده است', }, diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index 6fc7f2b831e..4cf90f4bfc0 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -694,6 +694,9 @@ export const fiFI: LocalizationResource = { subtitle: 'Syötä tilisi salasana', title: 'Syötä salasanasi', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Salasana kompromisoitu', }, diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index 480e0f00689..7783f8f1169 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -707,6 +707,9 @@ export const frFR: LocalizationResource = { subtitle: 'pour continuer vers {{applicationName}}', title: 'Tapez votre mot de passe', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Mot de passe compromis', }, diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index c498d177bc7..394fcd4c8a3 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -685,6 +685,9 @@ export const heIL: LocalizationResource = { subtitle: 'להמשיך אל {{applicationName}}', title: 'הכנס את סיסמתך', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: undefined, }, diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index 33fa75414bb..36cefd321e2 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -695,6 +695,9 @@ export const hiIN: LocalizationResource = { subtitle: 'अपने खाते से जुड़ा पासवर्ड दर्ज करें', title: 'अपना पासवर्ड दर्ज करें', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'पासवर्ड समझौता हो गया', }, diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index 95cdd7fe5f7..e8f53c22af3 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -694,6 +694,9 @@ export const hrHR: LocalizationResource = { subtitle: 'Unesite lozinku povezanu s vašim računom', title: 'Unesite svoju lozinku', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Lozinka je kompromitirana', }, diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 0261fc32490..ec54f471ed4 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -693,6 +693,9 @@ export const huHU: LocalizationResource = { subtitle: 'Írd be a fiókhoz tartozó jelszavad', title: 'Írd be a jelszavad', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Jelszó kompromitálódott', }, diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index cca9b632a22..39cd8f4b02a 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -696,6 +696,9 @@ export const idID: LocalizationResource = { subtitle: 'Masukkan kata sandi yang terkait dengan akun Anda', title: 'Masukkan kata sandi Anda', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Kata sandi terkompromi', }, diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index ae99b1e9aa2..13e2b353593 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -695,6 +695,9 @@ export const isIS: LocalizationResource = { subtitle: 'Sláðu inn lykilorðið sem tengist reikningnum þínum', title: 'Sláðu inn lykilorðið þitt', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Lykilorð brotið', }, diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index 3fce56e6bee..a00ee857c98 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -700,6 +700,9 @@ export const itIT: LocalizationResource = { subtitle: 'per continuare su {{applicationName}}', title: 'Inserisci la tua password', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'La tua password è stata trovata in un data breach.', }, diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index 24509b45a9c..a0ca9c1a8ec 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -692,6 +692,9 @@ export const jaJP: LocalizationResource = { subtitle: '{{applicationName}}へのアクセスを続ける', title: 'パスワードを入力', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: undefined, }, diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index 8d708bc8d4e..a1e1b55ef22 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -685,6 +685,9 @@ export const kkKZ: LocalizationResource = { subtitle: 'Есептік жазбаңыздың құпия сөзін енгізіңіз', title: 'Құпия сөзді енгізіңіз', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Құпия сөз қауіпті', }, diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index 22606878ab2..1c29c335b67 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -687,6 +687,9 @@ export const koKR: LocalizationResource = { subtitle: '계정에 등록된 비밀번호를 입력해 주세요', title: '비밀번호를 입력하세요', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: undefined, }, diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index deb4e9bd1bc..7710f935a4a 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -694,6 +694,9 @@ export const mnMN: LocalizationResource = { subtitle: 'Бүртгэлтэй холбоотой нууц үгээ оруулна уу', title: 'Нууц үгээ оруулна уу', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: undefined, }, diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index 9ed0b84a2a0..1ba51bae5ef 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -698,6 +698,9 @@ export const msMY: LocalizationResource = { subtitle: 'Masukkan kata laluan yang berkaitan dengan akaun anda', title: 'Masukkan kata laluan anda', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Kata laluan dikompromi', }, diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index f0b5444a6a6..30a5ed65927 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -692,6 +692,9 @@ export const nbNO: LocalizationResource = { subtitle: 'for å fortsette til {{applicationName}}', title: 'Skriv inn passordet ditt', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: undefined, }, diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index c35517700f3..b67e1eb96cc 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -693,6 +693,9 @@ export const nlBE: LocalizationResource = { subtitle: 'om door te gaan naar {{applicationName}}', title: 'Vul je wachtwoord in', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Dit wachtwoord is gelekt bij een datalek. Kies een ander wachtwoord om veiligheidsredenen.', }, diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index 5be87e009e0..435fd0d10ca 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -693,6 +693,9 @@ export const nlNL: LocalizationResource = { subtitle: 'om door te gaan naar {{applicationName}}', title: 'Vul je wachtwoord in', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Dit wachtwoord is gelekt bij een datalek. Kies een ander wachtwoord om veiligheidsredenen.', }, diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index 00b75a375e5..3a4fd9ddda1 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -695,6 +695,9 @@ export const plPL: LocalizationResource = { subtitle: 'aby kontynuować w {{applicationName}}', title: 'Wprowadź swoje hasło', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Hasło skompromitowane', }, diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 480d6017544..ecc67af1b0f 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -702,6 +702,9 @@ export const ptBR: LocalizationResource = { subtitle: 'para continuar em {{applicationName}}', title: 'Insira sua senha', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Senha comprometida', }, diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index d6d36816d30..e99a85289ea 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -691,6 +691,9 @@ export const ptPT: LocalizationResource = { subtitle: 'para continuar em {{applicationName}}', title: 'Insira a sua palavra-passe', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Este password foi comprometido em uma violação de dados. Escolha outro por motivos de segurança.', }, diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index 5ef24b1a6dd..b48ac2b6722 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -704,6 +704,9 @@ export const roRO: LocalizationResource = { subtitle: 'Introdu parola asociată contului tău', title: 'Introdu parola', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Parola este compromisă', }, diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index cc37887b67d..5208a202811 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -702,6 +702,9 @@ export const ruRU: LocalizationResource = { subtitle: 'чтобы продолжить работу в "{{applicationName}}"', title: 'Введите пароль', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Пароль скомпрометирован', }, diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index 7c2d4956c16..b7055e253bf 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -695,6 +695,9 @@ export const skSK: LocalizationResource = { subtitle: 'pre pokračovanie do {{applicationName}}', title: 'Zadajte svoje heslo', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: undefined, }, diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index d1848bf4d2b..949b3bf3c42 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -692,6 +692,9 @@ export const srRS: LocalizationResource = { subtitle: 'Unesi lozinku koja je povezana sa tvojim nalogom', title: 'Unesi svoju lozinku', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Lozinka kompromitovana', }, diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index a4ac47fd208..d385b3d8be5 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -695,6 +695,9 @@ export const svSE: LocalizationResource = { subtitle: 'för att fortsätta till {{applicationName}}', title: 'Ange ditt lösenord', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Lösenord är för osäkert', }, diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index c9478dd0472..d09f6401e94 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -698,6 +698,9 @@ export const taIN: LocalizationResource = { subtitle: 'உங்கள் கணக்குடன் தொடர்புடைய கடவுச்சொல்லை உள்ளிடவும்', title: 'உங்கள் கடவுச்சொல்லை உள்ளிடவும்', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'கடவுச்சொல் அபாயத்தில் உள்ளது', }, diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index 184e4ef1f24..360acba609d 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -697,6 +697,9 @@ export const teIN: LocalizationResource = { subtitle: 'మీ ఖాతాతో సంబంధం ఉన్న పాస్‌వర్డ్‌ను నమోదు చేయండి', title: 'మీ పాస్‌వర్డ్‌ను నమోదు చేయండి', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'పాస్‌వర్డ్ ప్రమాదంలో ఉంది', }, diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index 48f0dda33b5..07a1fce16b9 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -694,6 +694,9 @@ export const thTH: LocalizationResource = { subtitle: 'ใส่รหัสผ่านที่เชื่อมโยงกับบัญชีของคุณ', title: 'ใส่รหัสผ่านของคุณ', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'รหัสผ่านถูกโจรกรรม', }, diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index 6a3365328cf..97168de2838 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -694,6 +694,9 @@ export const trTR: LocalizationResource = { subtitle: '{{applicationName}} ile devam etmek için', title: 'Şifrenizi girin', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Şifre ele geçirildi', }, diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index ead12129f31..ffc3e812363 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -691,6 +691,9 @@ export const ukUA: LocalizationResource = { subtitle: 'щоб продовжити роботу в "{{applicationName}}"', title: 'Введіть пароль', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: undefined, }, diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index e29d8f659d6..d8b38186bd6 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -700,6 +700,9 @@ export const viVN: LocalizationResource = { subtitle: 'Nhập mật khẩu được liên kết với tài khoản của bạn', title: 'Nhập mật khẩu', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: 'Mật khẩu bị rò rỉ', }, diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index 7ea0cf6fb17..ef8e11f1d77 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -681,6 +681,9 @@ export const zhCN: LocalizationResource = { subtitle: '继续使用 {{applicationName}}', title: '输入您的密码', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: undefined, }, diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index 05079a5737f..5ba0befc600 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -681,6 +681,9 @@ export const zhTW: LocalizationResource = { subtitle: '以繼續前往 {{applicationName}}', title: '輸入您的密碼', }, + passwordCompromised: { + title: undefined, + }, passwordPwned: { title: undefined, }, diff --git a/packages/shared/src/error.ts b/packages/shared/src/error.ts index 2e9b9293866..ad8cea5ce3b 100644 --- a/packages/shared/src/error.ts +++ b/packages/shared/src/error.ts @@ -24,7 +24,7 @@ export { isMetamaskError, isNetworkError, isPasswordPwnedError, - isPasswordUntrustedError, + isPasswordCompromisedError, isReverificationCancelledError, isUnauthorizedError, isUserLockedError, diff --git a/packages/shared/src/errors/helpers.ts b/packages/shared/src/errors/helpers.ts index 2335b141e25..5d28681e836 100644 --- a/packages/shared/src/errors/helpers.ts +++ b/packages/shared/src/errors/helpers.ts @@ -121,12 +121,12 @@ export function isPasswordPwnedError(err: any) { } /** - * Checks if the provided error is a clerk api response error indicating a password was untrusted. + * Checks if the provided error is a clerk api response error indicating a password was compromised. * * @internal */ -export function isPasswordUntrustedError(err: any) { - return isClerkAPIResponseError(err) && err.errors?.[0]?.code === 'form_password_untrusted'; +export function isPasswordCompromisedError(err: any) { + return isClerkAPIResponseError(err) && err.errors?.[0]?.code === 'form_password_compromised'; } /** diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts index 2f9d8292063..1776bfc87bf 100644 --- a/packages/shared/src/types/localization.ts +++ b/packages/shared/src/types/localization.ts @@ -400,9 +400,13 @@ export type __internal_LocalizationResource = { passwordPwned: { title: LocalizationValue; }; + /** @deprecated Use `passwordCompromised` instead */ passwordUntrusted: { title: LocalizationValue; }; + passwordCompromised: { + title: LocalizationValue; + }; passkey: { title: LocalizationValue; subtitle: LocalizationValue; @@ -1315,7 +1319,9 @@ type UnstableErrors = WithParamName<{ web3_missing_identifier: LocalizationValue; form_password_pwned: LocalizationValue; form_password_pwned__sign_in: LocalizationValue; + /** @deprecated Use `form_password_compromised__sign_in` instead */ form_password_untrusted__sign_in: LocalizationValue; + form_password_compromised__sign_in: LocalizationValue; form_username_invalid_length: LocalizationValue<'min_length' | 'max_length'>; form_username_invalid_character: LocalizationValue; form_param_format_invalid: LocalizationValue; diff --git a/packages/ui/src/components/SignIn/AlternativeMethods.tsx b/packages/ui/src/components/SignIn/AlternativeMethods.tsx index 95e41ac3f5d..4cc452bf379 100644 --- a/packages/ui/src/components/SignIn/AlternativeMethods.tsx +++ b/packages/ui/src/components/SignIn/AlternativeMethods.tsx @@ -18,7 +18,7 @@ import { SignInSocialButtons } from './SignInSocialButtons'; import { useResetPasswordFactor } from './useResetPasswordFactor'; import { withHavingTrouble } from './withHavingTrouble'; -export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordUntrusted' | 'default'; +export type AlternativeMethodsMode = 'forgot' | 'pwned' | 'passwordCompromised' | 'default'; export type AlternativeMethodsProps = { onBackLinkClick: React.MouseEventHandler | undefined; @@ -55,7 +55,7 @@ const AlternativeMethodsList = (props: AlternativeMethodListProps) => { - {!isReset && mode !== 'passwordUntrusted' && ( + {!isReset && mode !== 'passwordCompromised' && ( )} @@ -185,8 +185,8 @@ function determineFlowPart(mode: AlternativeMethodsMode) { return 'forgotPasswordMethods'; case 'pwned': return 'passwordPwnedMethods'; - case 'passwordUntrusted': - return 'passwordUntrustedMethods'; + case 'passwordCompromised': + return 'passwordCompromisedMethods'; default: return 'alternativeMethods'; } @@ -198,8 +198,8 @@ function determineTitle(mode: AlternativeMethodsMode): LocalizationKey { return localizationKeys('signIn.forgotPasswordAlternativeMethods.title'); case 'pwned': return localizationKeys('signIn.passwordPwned.title'); - case 'passwordUntrusted': - return localizationKeys('signIn.passwordPwned.title'); + case 'passwordCompromised': + return localizationKeys('signIn.passwordCompromised.title'); default: return localizationKeys('signIn.alternativeMethods.title'); } @@ -210,7 +210,7 @@ function determineIsReset(mode: AlternativeMethodsMode): boolean { case 'forgot': case 'pwned': return true; - case 'passwordUntrusted': + case 'passwordCompromised': return false; default: return false; diff --git a/packages/ui/src/components/SignIn/SignInFactorOne.tsx b/packages/ui/src/components/SignIn/SignInFactorOne.tsx index 01eb0c0b14e..c493c19dfd9 100644 --- a/packages/ui/src/components/SignIn/SignInFactorOne.tsx +++ b/packages/ui/src/components/SignIn/SignInFactorOne.tsx @@ -55,8 +55,8 @@ function determineAlternativeMethodsMode( return 'pwned'; } - if (passwordErrorCode === 'untrusted') { - return 'passwordUntrusted'; + if (passwordErrorCode === 'compromised') { + return 'passwordCompromised'; } return 'forgot'; diff --git a/packages/ui/src/components/SignIn/SignInFactorOnePasswordCard.tsx b/packages/ui/src/components/SignIn/SignInFactorOnePasswordCard.tsx index f9623346d9d..8acacb4021f 100644 --- a/packages/ui/src/components/SignIn/SignInFactorOnePasswordCard.tsx +++ b/packages/ui/src/components/SignIn/SignInFactorOnePasswordCard.tsx @@ -1,4 +1,4 @@ -import { isPasswordPwnedError, isPasswordUntrustedError, isUserLockedError } from '@clerk/shared/error'; +import { isPasswordCompromisedError, isPasswordPwnedError, isUserLockedError } from '@clerk/shared/error'; import { clerkInvalidFAPIResponse } from '@clerk/shared/internal/clerk-js/errors'; import { useClerk } from '@clerk/shared/react'; import React from 'react'; @@ -18,7 +18,7 @@ import { useRouter } from '../../router/RouteContext'; import { HavingTrouble } from './HavingTrouble'; import { useResetPasswordFactor } from './useResetPasswordFactor'; -export type PasswordErrorCode = 'untrusted' | 'pwned'; +export type PasswordErrorCode = 'compromised' | 'pwned'; type SignInFactorOnePasswordProps = { onForgotPasswordMethodClick: React.MouseEventHandler | undefined; @@ -101,9 +101,9 @@ export const SignInFactorOnePasswordCard = (props: SignInFactorOnePasswordProps) return; } - if (isPasswordUntrustedError(err)) { - card.setError({ ...err.errors[0], code: 'form_password_untrusted__sign_in' }); - onPasswordError('untrusted'); + if (isPasswordCompromisedError(err)) { + card.setError({ ...err.errors[0], code: 'form_password_compromised__sign_in' }); + onPasswordError('compromised'); return; } } diff --git a/packages/ui/src/components/SignIn/__tests__/SignInFactorOne.test.tsx b/packages/ui/src/components/SignIn/__tests__/SignInFactorOne.test.tsx index c543db87364..a4a2525ed61 100644 --- a/packages/ui/src/components/SignIn/__tests__/SignInFactorOne.test.tsx +++ b/packages/ui/src/components/SignIn/__tests__/SignInFactorOne.test.tsx @@ -353,7 +353,7 @@ describe('SignInFactorOne', () => { ).not.toBeInTheDocument(); }); - it('using an untrusted password should show the untrusted password screen', async () => { + it('using an compromised password should show the compromised password screen', async () => { const { wrapper, fixtures } = await createFixtures(f => { f.withEmailAddress(); f.withPassword(); @@ -367,7 +367,7 @@ describe('SignInFactorOne', () => { fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource)); const errJSON = { - code: 'form_password_untrusted', + code: 'form_password_compromised', long_message: "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", message: @@ -393,7 +393,7 @@ describe('SignInFactorOne', () => { await screen.findByText('Email code to hello@clerk.com'); }); - it('Prompts the user to use a different method if the password is untrusted', async () => { + it('Prompts the user to use a different method if the password is compromised', async () => { const { wrapper, fixtures } = await createFixtures(f => { f.withEmailAddress(); f.withPassword(); @@ -408,7 +408,7 @@ describe('SignInFactorOne', () => { fixtures.signIn.prepareFirstFactor.mockReturnValueOnce(Promise.resolve({} as SignInResource)); const errJSON = { - code: 'form_password_untrusted', + code: 'form_password_compromised', long_message: "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", message: diff --git a/packages/ui/src/elements/contexts/index.tsx b/packages/ui/src/elements/contexts/index.tsx index 1ad79f85d0c..6f660525375 100644 --- a/packages/ui/src/elements/contexts/index.tsx +++ b/packages/ui/src/elements/contexts/index.tsx @@ -120,7 +120,7 @@ export type FlowMetadata = { | 'alternativeMethods' | 'forgotPasswordMethods' | 'passwordPwnedMethods' - | 'passwordUntrustedMethods' + | 'passwordCompromisedMethods' | 'havingTrouble' | 'ssoCallback' | 'popupCallback' From 8a84a4f82d803bbad17dce5152241ae177ff19b2 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Wed, 3 Dec 2025 17:29:28 +0200 Subject: [PATCH 4/5] chore: Remove changesets --- .changeset/funny-crabs-crash.md | 3 --- .changeset/honest-pigs-move.md | 5 ----- .changeset/moody-dryers-serve.md | 5 ----- .changeset/some-phones-report.md | 6 ------ .changeset/sweet-poets-sell.md | 7 ------- 5 files changed, 26 deletions(-) delete mode 100644 .changeset/funny-crabs-crash.md delete mode 100644 .changeset/honest-pigs-move.md delete mode 100644 .changeset/moody-dryers-serve.md delete mode 100644 .changeset/some-phones-report.md delete mode 100644 .changeset/sweet-poets-sell.md diff --git a/.changeset/funny-crabs-crash.md b/.changeset/funny-crabs-crash.md deleted file mode 100644 index 853d812bb36..00000000000 --- a/.changeset/funny-crabs-crash.md +++ /dev/null @@ -1,3 +0,0 @@ ---- - ---- diff --git a/.changeset/honest-pigs-move.md b/.changeset/honest-pigs-move.md deleted file mode 100644 index 749c12dbdc2..00000000000 --- a/.changeset/honest-pigs-move.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@clerk/backend': patch ---- - -Rename `__experimental_passwordUntrusted` to `__experimental_passwordCompromised` diff --git a/.changeset/moody-dryers-serve.md b/.changeset/moody-dryers-serve.md deleted file mode 100644 index bd84ebca859..00000000000 --- a/.changeset/moody-dryers-serve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@clerk/localizations': patch ---- - -Deprecating `passwordUntrusted` in favour of `passwordCompromised` and `form_password_untrusted__sign_in` to `form_password_compromised__sign_in` diff --git a/.changeset/some-phones-report.md b/.changeset/some-phones-report.md deleted file mode 100644 index 704e93a3dd5..00000000000 --- a/.changeset/some-phones-report.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@clerk/clerk-js': patch -'@clerk/shared': patch ---- - -Rename internal `isPasswordUntrustedError` to `isPasswordCompromisedError` diff --git a/.changeset/sweet-poets-sell.md b/.changeset/sweet-poets-sell.md deleted file mode 100644 index 15328c03b8b..00000000000 --- a/.changeset/sweet-poets-sell.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@clerk/localizations': minor -'@clerk/clerk-js': minor -'@clerk/shared': minor ---- - -Introduce a new variant for the alternative methods screen to handle untrusted password error on sign-in From 577871af40f067bfeff668eed02cdd19e563cf8b Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Wed, 3 Dec 2025 17:35:44 +0200 Subject: [PATCH 5/5] chore: Update localization --- packages/localizations/src/en-US.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts index 14bee5b04ac..eded6cc401f 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -903,6 +903,8 @@ export const enUS: LocalizationResource = { form_password_pwned__sign_in: 'This password has been found as part of a breach and can not be used, please reset your password.', form_password_size_in_bytes_exceeded: undefined, + form_password_compromised__sign_in: + "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", form_password_untrusted__sign_in: "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", form_password_validation_failed: undefined,