ClerkAPIError drops meta.lockout_expires_in_seconds from user_locked errors
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 78/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- typescript
- Domaine
- authentication
Piste de recherche
Commencez dans packages/shared/src/errors/clerkApiError.ts, au niveau de l’analyse des métadonnées autour des lignes 21-38, où ClerkAPIError construit meta à partir de clés connues. Suivez la manière dont la réponse brute user_locked est convertie en erreur publique, puis vérifiez que lockout_expires_in_seconds est conservé sous la forme lockoutExpiresInSeconds et reste disponible pour les appelants.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Preliminary Checks
- I have reviewed the documentation: https://clerk.com/docs
- I have searched for existing issues: https://github.com/clerk/javascript/issues
- I have not already reached out to Clerk support via email or Discord
- This issue is not a question, general help request, or anything other than a bug report directly related to Clerk
Reproduction
The bug is visible in the source, no project needed: https://github.com/clerk/javascript/blob/main/packages/shared/src/errors/clerkApiError.ts#L21-L38
Publishable key
Not needed: the behavior does not depend on an instance, it is in the error parser.
Description
When an account reaches the user lockout threshold, the Frontend API answers the failed attempt with 403 user_locked and includes how long the lockout lasts in meta.lockout_expires_in_seconds. ClerkAPIError builds its meta from a fixed list of known keys (param_name, session_id, identifiers, zxcvbn, plan, …), so lockout_expires_in_seconds is dropped and the app cannot tell the user when they can try again.
Steps to reproduce:
- Enable user lockout on an instance (e.g. 10 attempts, 60 minutes).
- Sign in with a phone code and submit wrong codes until the attempt returns
user_locked. - Inspect the network response:
errors[0].meta.lockout_expires_in_secondsis present (e.g.3599). - Inspect the thrown
ClerkAPIResponseError:errors[0].metahas no lockout field.
Expected behavior:
ClerkAPIError.meta exposes the lockout duration (e.g. lockoutExpiresInSeconds), the same way ClerkAPIResponseError.retryAfter already exposes Retry-After for too_many_requests, so apps can show a countdown or hide "resend code" until the lockout ends.
Actual behavior:
The value is discarded during parsing. The only way to read it is to bypass the SDK and parse the raw response.
Environment
@clerk/shared 4.31.0 (also on main as of 2026-10-01)
@clerk/clerk-expo, React Native (Expo SDK), iOS and Android
- Langage dominant
- TypeScript
- Étoiles
- 1.8k
- Forks
- 477
- Merge moyen
- 2 j 25 min
- PR mergées (30 j)
- 267
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de clerk/javascript
-
@clerk/nextjs: onBeforeSetActive never settles when invalidateCacheAction rejects (e.g. after a redeploy), so setActive and signOut hang foreverPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
clerk/javascript#9987 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 65/100
clerk/javascript#10011 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 50/100
clerk/javascript#9984 ·
Les mainteneurs répondent en général sous 1 jour
-
M2M Token only authentication in Clerk MiddlewarePeut-être pris @wobsoriano l’a pris il y a 6 jours. Ouverteneeds-triage
clerk/javascript#9981 · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
Multi-session: getToken() on a non-active session writes that session's token into __sessionOuverte
Difficulté 3/5 1-2 jours Accessibilité débutants 72/100
clerk/javascript#9972 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de clerk/javascript
Issues similaires
-
area:docs bug triage:confirmed
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
Cotal-AI/Cotal#2875 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
GLM-5.3 available on bedrock nowOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
anomalyco/models.dev#8862 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
fix(data-lake): wizard source step still previews the local slug, not the server-disambiguated oneOuvertedata-lake
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour
-
ready-for-triage
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
konflux-ci/konflux-ui#1596 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement good first issue priority: low size: XS
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour