-
Notifications
You must be signed in to change notification settings - Fork 409
feat(clerk-js): Introduce reset password session task #7268
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
feat(clerk-js): Introduce reset password session task #7268
Conversation
🦋 Changeset detectedLatest commit: 5f8bf0c The changes in this PR will be included in the next version bump. This PR includes changesets to release 22 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
WalkthroughAdds a "reset-password" session task: route mapping, TaskResetPassword component with guard and context, types and localization entries across locales, tests and fixture updates, a changeset, and an increased bundlewatch limit for the sessionTasks bundle. Changes
Sequence Diagram(s)sequenceDiagram
actor User
participant UI as SessionTasks UI
participant Ctx as TaskResetPasswordContext
participant Guard as withTaskGuard
participant Comp as TaskResetPassword
participant API as Clerk API
User->>UI: open session tasks route (/session-tasks/reset-password)
UI->>Ctx: mount TaskResetPasswordContext (redirectUrlComplete)
UI->>Guard: render guarded component
Guard->>Guard: check clerk.session.currentTask == 'reset-password'?
alt task exists
Guard->>Comp: render TaskResetPassword
User->>Comp: enter newPassword, confirmPassword, toggle signOutOfOtherSessions
Comp->>API: updatePassword (reverification flow) + signOut option
API-->>Comp: success / error
alt success
Comp->>User: show success and redirect (redirectUrlComplete or after-sign-in)
else error
Comp->>User: show field errors / card state
end
else task missing
Guard->>User: redirect to sign-in or after-sign-in URL (emit warning)
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25–30 minutes
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Disabled knowledge base sources:
📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (2)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
Tip 📝 Customizable high-level summaries are now available in beta!You can now customize how CodeRabbit generates the high-level summary in your pull requests — including its content, structure, tone, and formatting.
Example instruction:
Note: This feature is currently in beta for Pro-tier users, and pricing will be announced later. Comment |
|
!snapshot |
|
Hey @octoper - the snapshot version command generated the following package versions:
Tip: Use the snippet copy button below to quickly install the required packages. npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact |
1b51682 to
9ab72aa
Compare
|
!snapshot |
| subtitle: 'Enter the password associated with your account', | ||
| title: 'Enter your password', | ||
| }, | ||
| passwordPwned: { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Comment for the reviewers: I will generate the localizations before merging the PR
|
Hey @octoper - the snapshot version command generated the following package versions:
Tip: Use the snippet copy button below to quickly install the required packages. npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (2)
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/withTaskGuard.ts (1)
1-26: withTaskGuard implementation matches existing session task guard semanticsThe guard correctly:
- Checks for absence of
clerk.session?.currentTaskand redirects either tobuildSignInUrl()(no session) orctx.redirectUrlComplete ?? clerk.buildAfterSignInUrl().- Reuses
withRedirectand warningcannotRenderComponentWhenTaskDoesNotExist.- Preserves component displayName, consistent with the TaskChooseOrganization guard.
One thing to double‑check: ensure
TaskResetPasswordPropshas been added toAvailableComponentProps, otherwisewithTaskGuard(TaskResetPassword)will fail theP extends AvailableComponentPropsconstraint.If more task-specific guards are added in the future, consider extracting a shared helper that takes the task context hook as a parameter to avoid near-identical HOCs.
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/index.tsx (1)
128-128: Consider using configured password settings for minLength.The
minLength={6}is hardcoded, butpasswordSettingsis available from the environment context. While the validatePassword flag on the field already uses password settings for validation, aligning the HTML5 minLength attribute with the configured minimum would provide more consistent user feedback.Consider using:
<Form.PasswordInput {...passwordField.props} isRequired - minLength={6} + minLength={passwordSettings.min_length} />
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (16)
.changeset/loose-brooms-occur.md(1 hunks)packages/clerk-js/src/core/sessionTasks.ts(1 hunks)packages/clerk-js/src/ui/components/SessionTasks/index.tsx(2 hunks)packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/index.tsx(1 hunks)packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/__tests__/TaskResetPassword.test.tsx(1 hunks)packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/index.tsx(1 hunks)packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/withTaskGuard.ts(1 hunks)packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx(3 hunks)packages/clerk-js/src/ui/contexts/components/SessionTasks.ts(2 hunks)packages/clerk-js/src/ui/elements/contexts/index.tsx(1 hunks)packages/clerk-js/src/ui/types.ts(3 hunks)packages/localizations/src/en-US.ts(2 hunks)packages/shared/src/types/appearance.ts(1 hunks)packages/shared/src/types/clerk.ts(2 hunks)packages/shared/src/types/localization.ts(2 hunks)packages/shared/src/types/session.ts(2 hunks)
🧰 Additional context used
🧬 Code graph analysis (8)
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/__tests__/TaskResetPassword.test.tsx (2)
packages/clerk-js/src/test/create-fixtures.tsx (1)
bindCreateFixtures(28-35)packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/index.tsx (1)
TaskResetPassword(186-188)
packages/clerk-js/src/ui/components/SessionTasks/index.tsx (3)
packages/clerk-js/src/core/sessionTasks.ts (1)
INTERNAL_SESSION_TASK_ROUTE_BY_KEY(9-12)packages/clerk-js/src/ui/contexts/components/SessionTasks.ts (1)
TaskResetPasswordContext(31-31)packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/index.tsx (1)
TaskResetPassword(186-188)
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/index.tsx (5)
packages/clerk-js/src/ui/elements/contexts/index.tsx (2)
useCardState(42-70)withCardStateProvider(72-81)packages/clerk-js/src/ui/utils/passwordUtils.ts (1)
createPasswordError(33-74)packages/clerk-js/src/ui/hooks/usePassword.ts (1)
useConfirmPassword(77-110)packages/clerk-js/src/ui/utils/errorHandler.ts (1)
handleError(64-86)packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/withTaskGuard.ts (1)
withTaskGuard(8-26)
packages/shared/src/types/clerk.ts (1)
packages/shared/src/types/appearance.ts (1)
TaskResetPasswordTheme(1044-1044)
packages/clerk-js/src/ui/types.ts (1)
packages/shared/src/types/clerk.ts (1)
TaskResetPasswordProps(2222-2228)
packages/clerk-js/src/ui/contexts/components/SessionTasks.ts (1)
packages/clerk-js/src/ui/types.ts (1)
TaskResetPasswordCtx(155-157)
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/withTaskGuard.ts (4)
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/withTaskGuard.ts (1)
withTaskGuard(8-26)packages/clerk-js/src/ui/types.ts (1)
AvailableComponentProps(46-63)packages/clerk-js/src/ui/contexts/components/SessionTasks.ts (1)
useTaskResetPasswordContext(33-41)packages/clerk-js/src/ui/common/withRedirect.tsx (1)
withRedirect(16-53)
packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx (2)
packages/clerk-js/src/ui/contexts/components/SessionTasks.ts (1)
TaskResetPasswordContext(31-31)packages/shared/src/types/clerk.ts (1)
TaskResetPasswordProps(2222-2228)
🔇 Additional comments (16)
packages/shared/src/types/appearance.ts (1)
1044-1044: TaskResetPasswordTheme alias is consistent with existing theme typesThe new
TaskResetPasswordThemealias mirrors the pattern used for other component themes and keeps the public API consistent. No issues from a typing or compatibility perspective..changeset/loose-brooms-occur.md (1)
1-7: Changeset scope and bump levels look appropriateThe changeset correctly scopes the
reset-passwordsession task work to@clerk/clerk-js,@clerk/shared, and@clerk/localizationswithminorbumps, matching the feature-level change.packages/clerk-js/src/ui/elements/contexts/index.tsx (1)
83-105: FlowMetadata extended correctly for new task flowsAdding
'taskChooseOrganization'and'taskResetPassword'toFlowMetadata.flowaligns with the new session task routes and existing usages like<Flow.Root flow='taskChooseOrganization'>. The union remains coherent and backward compatible.packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/index.tsx (1)
11-11: Import path adjustment aligns with new task-local guard structureSwitching
withTaskGuardto a sibling import ('./withTaskGuard') matches the new pattern where each session task owns its own guard implementation. The wrapping at the export site remains unchanged and correct.packages/shared/src/types/clerk.ts (1)
2222-2228: LGTM! TaskResetPasswordProps follows established patterns.The type definition correctly mirrors the structure of
TaskChooseOrganizationProps, with appropriate fields for navigation and theming. The JSDoc comment clearly documents the purpose of theredirectUrlCompletefield.packages/clerk-js/src/core/sessionTasks.ts (1)
9-12: LGTM! Route mapping correctly added.The new
'reset-password'entry follows the existing pattern and integrates properly with theSessionTask['key']type union. This will enable proper URL building viagetTaskEndpointandbuildTaskUrlfunctions.packages/clerk-js/src/ui/components/SessionTasks/index.tsx (1)
65-71: LGTM! Route and context setup correctly implemented.The new reset-password route follows the established pattern from the choose-organization task. The context provider properly passes
componentNameandredirectUrlCompleteto the TaskResetPassword component.packages/clerk-js/src/ui/types.ts (1)
155-157: LGTM! Context type properly defined.The
TaskResetPasswordCtxtype correctly extendsTaskResetPasswordPropsand adds the requiredcomponentNameliteral, following the established pattern for component contexts.packages/localizations/src/en-US.ts (1)
866-872: LGTM! Localization strings properly structured.The
taskResetPasswordlocalization keys follow the same pattern astaskChooseOrganization, providing clear user-facing strings for the title and sign-out action. The{{identifier}}placeholder correctly enables dynamic user information display.packages/shared/src/types/localization.ts (1)
1290-1296: LGTM! Localization types correctly defined.The
taskResetPasswordtype definition properly mirrors the structure inen-US.ts, with correctly typedLocalizationValuefields. TheactionTextfield appropriately usesLocalizationValue<'identifier'>to enable type-safe interpolation of the user identifier.packages/shared/src/types/session.ts (2)
338-338: LGTM! SessionTask key union properly extended.The
keyfield now correctly includes both'choose-organization'and'reset-password', enabling type-safe handling of the new task type throughout the session management system.
38-40: Nice documentation improvement.The JSDoc
@default trueannotation clarifies the default behavior oftreatPendingAsSignedOut, improving the developer experience.packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx (1)
130-137: LGTM! Context provider case correctly implemented.The
TaskResetPasswordcase follows the established pattern, properly typing the props and providing the context value with the correctcomponentNameliteral. The implementation is consistent with theTaskChooseOrganizationcase.packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/__tests__/TaskResetPassword.test.tsx (1)
1-103: LGTM! Comprehensive test coverage.The test suite provides excellent coverage of the TaskResetPassword component, including:
- Guard behavior (rendering only when task exists)
- Multi-task ordering
- User identifier display (both email and username)
- Sign-out interaction flow
The tests are well-structured, use appropriate testing utilities, and have clear assertions.
packages/clerk-js/src/ui/contexts/components/SessionTasks.ts (1)
3-3: LGTM! Consistent context implementation.The new TaskResetPassword context and hook follow the established pattern used by TaskChooseOrganization. The implementation is consistent with the codebase conventions and includes proper error messaging.
Also applies to: 31-41
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/index.tsx (1)
186-188: LGTM! Proper HOC composition.The component export correctly composes three higher-order components:
withCoreSessionSwitchGuardfor session-level guardswithTaskGuardfor task existence validationwithCardStateProviderfor form state managementThe order and composition are appropriate for this session task component.
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/index.tsx
Outdated
Show resolved
Hide resolved
@clerk/agent-toolkit
@clerk/astro
@clerk/backend
@clerk/chrome-extension
@clerk/clerk-js
@clerk/dev-cli
@clerk/elements
@clerk/clerk-expo
@clerk/expo-passkeys
@clerk/express
@clerk/fastify
@clerk/localizations
@clerk/nextjs
@clerk/nuxt
@clerk/clerk-react
@clerk/react-router
@clerk/remix
@clerk/shared
@clerk/tanstack-react-start
@clerk/testing
@clerk/themes
@clerk/types
@clerk/upgrade
@clerk/vue
commit: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (2)
packages/localizations/src/en-US.ts (1)
863-869: Confirm copy consistency with existing reset-password flowsThe new
taskResetPasswordstrings look fine and match the type, but the title here ('Reset password') differs fromsignIn.resetPassword.title('Set new password'). If these flows are meant to feel like the same step, consider reusing or aligning the wording for consistency; otherwise, leaving them distinct is also reasonable.packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/index.tsx (1)
74-90: Use card state’s async helpers to manage loading and double-submits
resetPasswordruns the async reverification/password update without going throughcard.runAsyncor updating card loading state, so the UI can’t reflect an in-flight submission and users may trigger multiple requests by clicking rapidly.It would be more consistent with other flows to wrap the operation with the card state helper and/or disable the submit button while a request is in progress, e.g. by using
card.runAsyncand addingcard.isLoadinginto theForm.SubmitButton’s disabled condition.Also applies to: 107-113, 147-151
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (3)
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/index.tsx(1 hunks)packages/localizations/src/en-US.ts(1 hunks)packages/shared/src/types/localization.ts(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/index.tsx (5)
packages/clerk-js/src/ui/elements/contexts/index.tsx (2)
useCardState(42-70)withCardStateProvider(72-81)packages/clerk-js/src/ui/utils/passwordUtils.ts (1)
createPasswordError(33-74)packages/clerk-js/src/ui/hooks/usePassword.ts (1)
useConfirmPassword(77-110)packages/clerk-js/src/ui/utils/errorHandler.ts (1)
handleError(64-86)packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/withTaskGuard.ts (1)
withTaskGuard(8-26)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Analyze (javascript-typescript)
- GitHub Check: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
🔇 Additional comments (2)
packages/shared/src/types/localization.ts (1)
1287-1293: taskResetPassword localization shape is consistent and correctly typedThe new
taskResetPasswordblock (title +signOut.actionLink/actionText<'identifier'>) aligns with how it’s used in the UI and with the en-US resource; the interpolation parameter choice looks correct.packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/index.tsx (1)
92-177: Overall TaskResetPassword wiring, localization, and sign-out behavior look solidThe component correctly derives the identifier for display, uses the new
taskResetPassword.*localization keys, integrates reverification-based password updates, and handles multi-session sign-out viauseMultipleSessions+ sign-out context in a way that matches existing patterns.
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskResetPassword/index.tsx
Show resolved
Hide resolved
|
Let's also add some integration tests for the main flow + unit tests for the task component itself |
29759c4 to
3a52a51
Compare
…ext and update tests
…current password requirement and related fields
…t for consistency
…on component for clarity
69bb063 to
f7c2635
Compare
|
@LauraBeatris I've added more unit tests, we will have to add integration tests on an upcoming PR |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (20)
packages/localizations/src/is-IS.ts (1)
866-873: taskResetPassword block structure looks correct and consistentThe
taskResetPasswordgroup matches the existing localization patterns (shape andundefinedplaceholders) used elsewhere in this file and across locales, so this is structurally safe. Once proper Icelandic translations are available, consider replacing theundefinedvalues to avoid fallback English strings leaking into the reset-password flow.packages/localizations/src/hu-HU.ts (1)
863-870:taskResetPasswordblock shape looks correct and consistentThe new
taskResetPasswordkeys mirror the structure of other session task blocks (including nestedsignOut) and should integrate cleanly with the new task without type or runtime issues, even with values left asundefinedfor fallback behavior. If you’d like to improve the Hungarian coverage, we can add proper translations here in a follow‑up or I can propose initial strings now.packages/localizations/src/kk-KZ.ts (1)
856-863:taskResetPasswordlocalization block is structurally correctThe new
taskResetPasswordentry matches the expected schema and neighboring patterns (e.g.,taskChooseOrganization), so it should integrate cleanly. Since this locale already uses manyundefinedplaceholders, leaving these keys untranslated is acceptable, though you may want to fill in Kazakh strings later to keep the UX consistent.packages/localizations/src/ro-RO.ts (1)
877-884:taskResetPasswordblock structure looks correctThe new
taskResetPasswordlocalization block matches the expected shape and is consistent with how this file usesundefinedplaceholders for untranslated strings. Once the Romanian copy is ready, you can safely replace theseundefinedvalues with actual translations; until then, fallback behavior should work as for other keys.packages/localizations/src/ru-RU.ts (1)
876-883:taskResetPasswordshape looks correct; consider reusing existing Russian reset-password copyThe new
taskResetPasswordblock matches the expected structure (button,signOut, title) and is consistent with how other untranslated keys are left asundefinedin this community locale, so type-wise this is fine. As an optional improvement, you might reuse the existing Russian strings fromsignIn.resetPasswordforformButtonPrimary/titlehere to avoid falling back to the default locale or showing empty labels when this task UI is rendered.packages/localizations/src/pl-PL.ts (1)
869-876: LGTM! Structure is correct and consistent with file pattern.The new
taskResetPasswordlocalization cluster is properly structured with all required keys. While all values are currentlyundefined, this is consistent with the community-maintained nature of this file as stated in the disclaimer (lines 1-11) and matches the pattern used throughout the file where many sections remain untranslated.Future improvement: Consider providing Polish translations for these keys in a follow-up to complete the localization for the reset password task.
packages/localizations/src/ms-MY.ts (1)
872-879: Structure is correct; translations pending.The
taskResetPasswordlocalization section has been added with the correct structure, matching the pattern of other task sections in this file. All values are currentlyundefined, which is consistent with this being a community-contributed locale file where many translations remain incomplete.The application will handle these undefined values appropriately (typically falling back to the default locale).
If Malay translations become available in the future, consider populating these keys:
formButtonPrimary- primary button text for the reset password formsignOut.actionLinkandsignOut.actionText- sign out action labelstitle- screen title for the reset password taskpackages/localizations/src/it-IT.ts (1)
872-879: taskResetPassword block shape looks correctThe new
taskResetPasswordblock is placed correctly aftertaskChooseOrganization, matches the expected key structure (formButtonPrimary, nestedsignOut,title), and preserves object syntax. Values beingundefinedis consistent with other untranslated keys in this locale and will rely on fallback strings until Italian translations are available.packages/localizations/src/be-BY.ts (1)
869-876: Consistent addition of taskResetPassword localizationThe
taskResetPasswordentry mirrors the structure oftaskChooseOrganizationand other locales (button label, nestedsignOut,title), and the object syntax is valid. Usingundefinedfor all strings is consistent with the rest of this community locale and will fall back to the default language until Belarusian translations are provided.packages/localizations/src/ta-IN.ts (1)
871-878: taskResetPassword block wired correctly for ta‑INThe new
taskResetPasswordsection is structurally correct (expected keys and nesting, correct commas) and placed alongside other task blocks. Leaving the valuesundefinedis in line with other untranslated surfaces in this locale and will use fallback copy until Tamil translations are supplied.packages/localizations/src/hi-IN.ts (1)
869-876: Reset‑password task localization hook added cleanlyThe
taskResetPasswordgroup is correctly shaped (button label, nestedsignOut,title) and integrated beside existing task localizations. Usingundefinedplaceholders is consistent with other unfinished translations in this community file and will fall back to the base locale until Hindi copy is ready.packages/localizations/src/sv-SE.ts (1)
867-874: Swedish taskResetPassword locale entry matches shared contractThe new
taskResetPasswordblock is correctly placed and matches the expected key structure (primary button, nestedsignOut,title). With all values set toundefined, it follows the existing pattern for untranslated strings in this community locale and can later be populated to mirror the semantics of the existingsignIn.resetPasswordcopy.packages/localizations/src/es-ES.ts (1)
865-872: NewtaskResetPasswordkeys wired correctlyThe
taskResetPasswordgroup is added with the correct keys and nesting. Usingundefinedplaceholders is consistent with other untranslated task blocks in this locale; you can later reuse or adapt the existingsignIn.resetPasswordstrings when you localize this task.packages/localizations/src/es-MX.ts (1)
872-879: Well-formedtaskResetPasswordlocalization blockThe new
taskResetPasswordgroup is correctly shaped and aligned with other locales. Leaving valuesundefinedis consistent with this community file; later you may want to mirror the existingsignIn.resetPasswordSpanish (MX) wording here for a more complete experience.packages/localizations/src/fr-FR.ts (1)
880-887: taskResetPassword block shape is correct and consistentThe new
taskResetPasswordentry mirrors the existing task structure (taskChooseOrganization) and matches the expected fields for the reset-password task. Usingundefinedplaceholders is consistent with the rest of this community-contributed locale and should keep typings happy while falling back to defaults where applicable. When you have bandwidth, you may want to reuse the existingsignIn.resetPasswordFrench copy here instead ofundefinedto avoid mixed-language UI for this task.packages/localizations/src/es-CR.ts (1)
871-878: Consistent taskResetPassword structure; consider filling Spanish strings laterThe
taskResetPasswordobject is added with the correct shape and in the right place, consistent with other locales and withtaskChooseOrganization. Leaving fields asundefinedmatches the existing pattern for untranslated es-CR keys. As a follow-up, you might want to populate these with Spanish strings aligned tosignIn.resetPasswordso this task doesn’t partially fall back to another locale at runtime.packages/localizations/src/bn-IN.ts (1)
869-876: taskResetPassword key added with correct schemaThe new
taskResetPasswordentry matches the expected schema (button, sign-out CTA, title) and follows the existing pattern of usingundefinedfor untranslated bn-IN strings. Once the main flow stabilizes, it would be worth populating these with Bengali copy, likely based on the already-localizedsignIn.resetPasswordblock, to keep the reset-password task fully localized.packages/localizations/src/pt-BR.ts (1)
876-883: Schema looks good; this locale is mature enough to localize nowThe
taskResetPasswordobject is structurally correct and aligns with other locales andtaskChooseOrganization. Since pt-BR is otherwise very complete and already hassignIn.resetPasswordstrings, you may want to replace theseundefinedplaceholders with Portuguese text now to avoid a mixed-language experience in the new reset-password task.packages/localizations/src/bg-BG.ts (1)
865-872: Correct addition of taskResetPassword; translations can followThe new
taskResetPasswordgroup uses the same structure as other locales and slots in cleanly aftertaskChooseOrganization, so typings and routing for the new task will work as expected. Given thatsignIn.resetPasswordis already localized in this file, a nice follow-up would be to copy/adapt that Bulgarian copy here instead of leaving all fieldsundefined, but that can be done independently of this PR.packages/localizations/src/mn-MN.ts (1)
864-871: Consider reusing existing reset‑password Mongolian strings for this new taskThe object shape for
taskResetPasswordlooks correct, but leaving all fieldsundefinedmeans this new screen will likely show fallback (probably English) even though you already have Mongolian copy for reset password undersignIn.resetPassword. To keep the UX consistent, you can safely reuse those existing strings for the CTA and title:taskResetPassword: { - formButtonPrimary: undefined, + formButtonPrimary: 'Нууц үг сэргээх', signOut: { actionLink: undefined, actionText: undefined, }, - title: undefined, + title: 'Шинэ нууц үг тохируулна уу', },If the intent is to keep English fallback until a native speaker reviews the copy, feel free to ignore this suggestion.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (49)
packages/localizations/src/ar-SA.ts(1 hunks)packages/localizations/src/be-BY.ts(1 hunks)packages/localizations/src/bg-BG.ts(1 hunks)packages/localizations/src/bn-IN.ts(1 hunks)packages/localizations/src/ca-ES.ts(1 hunks)packages/localizations/src/cs-CZ.ts(1 hunks)packages/localizations/src/da-DK.ts(1 hunks)packages/localizations/src/de-DE.ts(1 hunks)packages/localizations/src/el-GR.ts(1 hunks)packages/localizations/src/en-GB.ts(1 hunks)packages/localizations/src/en-US.ts(1 hunks)packages/localizations/src/es-CR.ts(1 hunks)packages/localizations/src/es-ES.ts(1 hunks)packages/localizations/src/es-MX.ts(1 hunks)packages/localizations/src/es-UY.ts(1 hunks)packages/localizations/src/fa-IR.ts(1 hunks)packages/localizations/src/fi-FI.ts(1 hunks)packages/localizations/src/fr-FR.ts(1 hunks)packages/localizations/src/he-IL.ts(1 hunks)packages/localizations/src/hi-IN.ts(1 hunks)packages/localizations/src/hr-HR.ts(1 hunks)packages/localizations/src/hu-HU.ts(1 hunks)packages/localizations/src/id-ID.ts(1 hunks)packages/localizations/src/is-IS.ts(1 hunks)packages/localizations/src/it-IT.ts(1 hunks)packages/localizations/src/ja-JP.ts(1 hunks)packages/localizations/src/kk-KZ.ts(1 hunks)packages/localizations/src/ko-KR.ts(1 hunks)packages/localizations/src/mn-MN.ts(1 hunks)packages/localizations/src/ms-MY.ts(1 hunks)packages/localizations/src/nb-NO.ts(1 hunks)packages/localizations/src/nl-BE.ts(1 hunks)packages/localizations/src/nl-NL.ts(1 hunks)packages/localizations/src/pl-PL.ts(1 hunks)packages/localizations/src/pt-BR.ts(1 hunks)packages/localizations/src/pt-PT.ts(1 hunks)packages/localizations/src/ro-RO.ts(1 hunks)packages/localizations/src/ru-RU.ts(1 hunks)packages/localizations/src/sk-SK.ts(1 hunks)packages/localizations/src/sr-RS.ts(1 hunks)packages/localizations/src/sv-SE.ts(1 hunks)packages/localizations/src/ta-IN.ts(1 hunks)packages/localizations/src/te-IN.ts(1 hunks)packages/localizations/src/th-TH.ts(1 hunks)packages/localizations/src/tr-TR.ts(1 hunks)packages/localizations/src/uk-UA.ts(1 hunks)packages/localizations/src/vi-VN.ts(1 hunks)packages/localizations/src/zh-CN.ts(1 hunks)packages/localizations/src/zh-TW.ts(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
- GitHub Check: Build Packages
- GitHub Check: Formatting | Dedupe | Changeset
- GitHub Check: Analyze (javascript-typescript)
- GitHub Check: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
🔇 Additional comments (27)
packages/localizations/src/ca-ES.ts (1)
864-871: taskResetPassword shape and placement look correctThe new
taskResetPasswordblock matches the expected structure (button label, sign-out link/text, title) and is placed consistently next totaskChooseOrganization. Usingundefinedplaceholders is aligned with this community file’s existing pattern for untranslated keys, so this addition is safe to ship as-is.packages/localizations/src/fi-FI.ts (1)
865-872: NewtaskResetPasswordlocalization block matches existing patternsThe added
taskResetPasswordobject has the correct shape (button label, sign‑out actions, title) and is consistent with neighboring task keys and other locales; usingundefinedplaceholders is aligned with how this community locale handles untranslated strings.packages/localizations/src/hr-HR.ts (1)
866-873: LGTM! Localization structure added correctly.The new
taskResetPasswordsection follows the established pattern for task-related localization blocks (matchingtaskChooseOrganization). Theundefinedvalues are consistent with this being a community-contributed locale that awaits translation, as noted in the file's disclaimer.packages/localizations/src/ja-JP.ts (1)
866-873: LGTM! Structure is consistent with existing patterns.The new
taskResetPasswordentry is correctly structured and follows the same placeholder pattern used throughout this community-contributed localization file. Theundefinedvalues are expected and will need Japanese translations in a future update.packages/localizations/src/tr-TR.ts (1)
865-872: LGTM! Localization structure follows established pattern.The new
taskResetPasswordlocalization block correctly follows the structure used throughout this community-contributed localization file. Theundefinedplaceholders are consistent with the pattern for untranslated strings, as noted in the file's disclaimer (lines 1-11).The structure matches the expected shape:
formButtonPrimary: button labelsignOut: nested object with action link and texttitle: section titleThis aligns with how other task localizations (e.g.,
taskChooseOrganization) are structured in this file.packages/localizations/src/nb-NO.ts (1)
863-870: LGTM! Consistent structure for community-contributed localization.The
taskResetPasswordobject follows the established pattern for community-contributed localizations, with all fields properly initialized toundefinedto match the type definition while awaiting Norwegian translations. The structure is consistent with similar task objects liketaskChooseOrganizationand maintains type compatibility withLocalizationResource.packages/localizations/src/sk-SK.ts (1)
869-876: LGTM! Placeholder entries added correctly.The new
taskResetPasswordlocalization block follows the established pattern for this community-maintained locale. All fields are appropriately set toundefined, consistent with how untranslated keys are handled throughout the file (similar totaskChooseOrganization).Future translations for these fields should be provided by the Slovak community to complete the localization for the reset-password session task.
packages/localizations/src/te-IN.ts (1)
871-878: LGTM! Consistent with the te-IN locale pattern.The addition of the
taskResetPasswordblock withundefinedvalues is appropriate for this community-maintained localization file. The structure correctly mirrors other task blocks in this file, and the placeholder values will allow the application to fall back to the default locale for Telugu users until translations are provided.packages/localizations/src/uk-UA.ts (1)
861-868: LGTM! Structure is correct and consistent with the file.The new
taskResetPasswordsection is properly structured and syntactically correct. While all fields are set toundefined(meaning no Ukrainian translations are provided yet), this is consistent with the current state of this community-contributed localization file, which has extensiveundefinedvalues throughout. The structure correctly provides type safety for the new reset-password session task feature.packages/localizations/src/fa-IR.ts (1)
875-882: LGTM! Structure follows established pattern.The addition of the
taskResetPasswordlocalization group withundefinedplaceholders is consistent with the existing pattern throughout this community-maintained file. The structure correctly matches the expected schema (formButtonPrimary, signOut actions, and title), and since this file already contains numerousundefinedvalues for untranslated keys, the consuming code should handle these gracefully.Note: As this is a community-contributed localization file (per the disclaimer at the top), these placeholders can be filled with Persian translations by community contributors when available.
packages/localizations/src/he-IL.ts (1)
855-862: LGTM! Structure is consistent across all locales.The
taskResetPasswordentry in he-IL.ts follows the exact structure used across all 47 locale files in this PR. Only en-US provides actual translations; all other locales useundefinedvalues as placeholders, which is the expected pattern for community-contributed localization files.packages/localizations/src/el-GR.ts (1)
866-873: taskResetPassword block shape is correct and consistently placedThe new
taskResetPasswordentry matches the expected key structure and is aligned with how other, untranslated keys are represented in this community locale. No further changes needed here.packages/localizations/src/sr-RS.ts (1)
862-869: Consistent taskResetPassword localization stubThe added
taskResetPasswordblock has the correct key structure and mirrors the pattern used in other locales for untranslated entries. Looks good.packages/localizations/src/vi-VN.ts (1)
872-879: vi-VN taskResetPassword entry matches the shared schemaThe
taskResetPasswordblock uses the expected keys and is added alongside other task_* sections, matching the cross-locale pattern. No issues.packages/localizations/src/da-DK.ts (1)
862-869: da-DK taskResetPassword stub is well-formedThe new
taskResetPasswordlocalization block has the correct keys and is positioned consistently aftertaskChooseOrganization. Looks fine as a placeholder for future translations.packages/localizations/src/zh-TW.ts (1)
852-859: zh-TW gains the required taskResetPassword keysThe added
taskResetPasswordblock matches the expected schema (button label, sign-out actions, title) and aligns with other locales’ additions. No changes requested.packages/localizations/src/ko-KR.ts (1)
857-864:taskResetPasswordstructure is correct and consistentThe new
taskResetPasswordblock has the expected shape and matches the surrounding pattern of leaving untranslated strings asundefinedin this community locale file. No changes needed.packages/localizations/src/de-DE.ts (1)
879-886: Correct addition oftaskResetPasswordgroupThe new
taskResetPasswordlocalization block has the right key names and nesting and is consistent with how other locales define this task. Leaving valuesundefinedis fine until German copy is available.packages/localizations/src/nl-BE.ts (1)
864-871:taskResetPasswordkeys added with correct shapeThe
taskResetPasswordblock is positioned and structured consistently with other locales and existing task blocks in this file. Usingundefinedplaceholders is acceptable until Dutch (BE) translations are provided.packages/localizations/src/pt-PT.ts (1)
862-869: taskResetPassword block is structurally correct and consistentThe new
taskResetPasswordobject matches the expected key shape and nesting (button, signOut, title) and is correctly placed alongsidetaskChooseOrganization. No issues from a localization-structure perspective.packages/localizations/src/ar-SA.ts (1)
861-868: Arabic taskResetPassword block matches the shared task schema
taskResetPassworduses the same keys and nesting as other task sections and is correctly wired at the top level; leaving values undefined is consistent with other untranslated entries in this community file.packages/localizations/src/nl-NL.ts (1)
864-871: Dutch taskResetPassword localization block is correctly shapedThe
taskResetPasswordentry has the expected keys and nesting and is placed alongside other task-level sections; structurally ready for future translations.packages/localizations/src/en-GB.ts (1)
866-873: en-GB taskResetPassword entry aligns with task localization contractThe
taskResetPasswordobject is correctly added withformButtonPrimary, nestedsignOutactions, andtitle, matching the established structure for session tasks.packages/localizations/src/zh-CN.ts (1)
851-858: Chinese taskResetPassword block is correctly added and positionedThe new
taskResetPasswordsection uses the correct key names and nesting and is properly inserted among task-level localizations, ready for translation content.packages/localizations/src/en-US.ts (1)
863-870: LGTM! Well-structured localization entry for the reset password task.The new
taskResetPasswordentry follows established patterns and includes appropriate keys for the task flow:
- Clear title and button text
- Sign-out action for account switching scenarios (consistent with
taskChooseOrganization)- Proper capitalization conventions
As noted in your earlier comment, remember to propagate these keys to the other locale files before merging.
packages/localizations/src/id-ID.ts (1)
870-877: Need to verify how the application handles undefined translations and whether this is an intentional phased rollout strategy.Perfect! The search results confirm this is the Clerk authentication library. Based on the verification, I now have complete clarity:
Clerk officially only maintains the en-US locale, and all other language translations provided within this package are community contributions. The script output shows that
taskResetPasswordis a newly introduced feature structure across ALL 48 locale files in this PR, with only en-US containing actual translations while all other locales have undefined placeholders.As part of redesigns of Clerk's components, new localization keys are added, and if translated values are not supplied for these keys in custom localization, they will fall back to the default English values. This is the intended behavior for new features during gradual rollout.
No action needed—Indonesian localization follows expected pattern for new features.
The
taskResetPasswordblock at lines 870–877 with all undefined values is the intentional structure for this new reset-password task feature being added across all locales. The application will automatically fall back to English translations from en-US for undefined values, providing proper UI text for Indonesian users. This is standard Clerk practice: introduce the feature structure across all locales with en-US providing the initial translations, then allow community contributions to fill in other languages over time.packages/localizations/src/es-UY.ts (1)
871-878: LGTM! Structure is correct and consistent across all locales.The new
taskResetPasswordlocalization key follows the expected structure withformButtonPrimary,signOut(containingactionLinkandactionText), andtitle. Verification confirms this structure is identical across all 52 locale files in the repository. Theundefinedvalues are consistent with this community-contributed locale file, which has many incomplete translations throughout—matching the pattern in other community locales like fr-FR, de-DE, it-IT, and pt-BR, while en-US serves as the reference with complete translations.
…e redirec to the next one
…nts-new-flow-and-session-task
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (4)
packages/clerk-js/bundlewatch.config.json(1 hunks)packages/clerk-js/src/ui/elements/contexts/index.tsx(1 hunks)packages/shared/src/types/appearance.ts(1 hunks)packages/shared/src/types/clerk.ts(2 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
- packages/clerk-js/bundlewatch.config.json
- packages/clerk-js/src/ui/elements/contexts/index.tsx
- packages/shared/src/types/clerk.ts
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
All code must pass ESLint checks with the project's configuration
Files:
packages/shared/src/types/appearance.ts
**/*.{js,jsx,ts,tsx,json,md,yml,yaml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/shared/src/types/appearance.ts
packages/**/src/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/shared/src/types/appearance.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Follow established naming conventions (PascalCase for components, camelCase for variables)
Prefer importing types from
@clerk/shared/typesinstead of the deprecated@clerk/typesalias
Files:
packages/shared/src/types/appearance.ts
packages/**/src/**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
packages/**/src/**/*.{ts,tsx,js,jsx}: Maintain comprehensive JSDoc comments for public APIs
Use tree-shaking friendly exports
Validate all inputs and sanitize outputs
All public APIs must be documented with JSDoc
Use dynamic imports for optional features
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Implement proper logging with different levels
Files:
packages/shared/src/types/appearance.ts
**/*.ts?(x)
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
Files:
packages/shared/src/types/appearance.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/typescript.mdc)
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Implement type guards forunknowntypes using the patternfunction isType(value: unknown): value is Type
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details in classes
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Use mixins for shared behavior across unrelated classes in TypeScript
Use generic constraints with bounded type parameters like<T extends { id: string }>
Use utility types likeOmit,Partial, andPickfor data transformation instead of manual type construction
Use discriminated unions instead of boolean flags for state management and API responses
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation at the type level
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Document functions with JSDoc comments including @param, @returns, @throws, and @example tags
Create custom error classes that extend Error for specific error types
Use the Result pattern for error handling instead of throwing exceptions
Use optional chaining (?.) and nullish coalescing (??) operators for safe property access
Let TypeScript infer obvious types to reduce verbosity
Useconst assertionswithas constfor literal types
Usesatisfiesoperator for type checking without widening types
Declare readonly arrays and objects for immutable data structures
Use spread operator and array spread for immutable updates instead of mutations
Use lazy loading for large types...
Files:
packages/shared/src/types/appearance.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
- GitHub Check: Formatting | Dedupe | Changeset
- GitHub Check: Build Packages
- GitHub Check: Analyze (javascript-typescript)
- GitHub Check: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
| task && | ||
| clerk.session?.tasks && | ||
| clerk.session.tasks.length > 0 && | ||
| !clerk.session.tasks.find(t => matches(INTERNAL_SESSION_TASK_ROUTE_BY_KEY[t.key])) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
INTERNAL_SESSION_TASK_ROUTE_BY_KEY[t.key]) returns the UI route name for the task, not the task key itself that matches FAPI, so if I'd rename the value of reset-password within that map, this effect would break.
Is the intent here to navigate from /tasks to /tasks/reset-password or /tasks/choose-organization to /tasks/reset-password?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the intent here is to go from /tasks/reset-password to /tasks/choose-organization
.../src/ui/components/SessionTasks/tasks/TaskResetPassword/__tests__/TaskResetPassword.test.tsx
Outdated
Show resolved
Hide resolved
| const handleSignOut = () => { | ||
| if (otherSessions.length === 0) { | ||
| return signOut(navigateAfterSignOut); | ||
| } | ||
|
|
||
| return signOut(navigateAfterMultiSessionSingleSignOutUrl, { sessionId: session?.id }); | ||
| }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not a blocker for this PR, we can do it in a separate one. I have a proposal to move this sign-out with multi-session handling within the SignOutContext as we're duplicating between two task components now.
We'd have to double-check on how it's being handled within the UserButton popover and potentially reuse it there.
| if (!user) { | ||
| return; | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We could also add an assertion for clerk.isLoaded before declaring the functions / variable within this component, and then TypeScript would guard against not loaded resources, such as user.
The components only get rendered when Clerk is loaded anyway, so adding a comment to clarify that should suffice.
…update Portuguese localization for reset password
|
!snapshot |
|
Hey @octoper - the snapshot version command generated the following package versions:
Tip: Use the snippet copy button below to quickly install the required packages. npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact
npm i @clerk/[email protected] --save-exact |
Description
This PR introduces the new
reset-passwordsession taskChecklist
pnpm testruns as expected.pnpm buildruns as expected.Type of change
Summary by CodeRabbit
New Features
Tests
Chores
✏️ Tip: You can customize this high-level summary in your review settings.