diff --git a/_locales/en/messages.json b/_locales/en/messages.json index a36e159df8..27e4b705ba 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -5643,6 +5643,10 @@ "messageformat": "Numbers with more than 2 digits can’t start with 0", "description": "Shown if user has attempted to enter a username with leading 0 in discriminator" }, + "icu:ProfileEditor--username--too-many-attempts": { + "messageformat": "Too many attempts made, please try again later", + "description": "Shown if user has made too many attempts to pick a username and has to wait before retrying" + }, "icu:ProfileEditor--username--unavailable": { "messageformat": "This username is not available", "description": "Shown if the username is not available for registration" diff --git a/ts/components/EditUsernameModalBody.stories.tsx b/ts/components/EditUsernameModalBody.stories.tsx index ff7d4665b7..1419b92354 100644 --- a/ts/components/EditUsernameModalBody.stories.tsx +++ b/ts/components/EditUsernameModalBody.stories.tsx @@ -53,6 +53,7 @@ export default { CheckCharacters: UsernameReservationError.CheckCharacters, UsernameNotAvailable: UsernameReservationError.UsernameNotAvailable, General: UsernameReservationError.General, + TooManyAttempts: UsernameReservationError.TooManyAttempts, }, }, reservation: { diff --git a/ts/components/EditUsernameModalBody.tsx b/ts/components/EditUsernameModalBody.tsx index 072467998b..26f1f8aafd 100644 --- a/ts/components/EditUsernameModalBody.tsx +++ b/ts/components/EditUsernameModalBody.tsx @@ -208,6 +208,9 @@ export function EditUsernameModalBody({ 'icu:ProfileEditor--username--check-discriminator-leading-zero' ); } + if (error === UsernameReservationError.TooManyAttempts) { + return i18n('icu:ProfileEditor--username--too-many-attempts'); + } // Displayed through confirmation modal below if ( error === UsernameReservationError.General || diff --git a/ts/services/username.ts b/ts/services/username.ts index 366ae02abc..fcd3b2dfe8 100644 --- a/ts/services/username.ts +++ b/ts/services/username.ts @@ -138,11 +138,10 @@ export async function reserveUsername( return { ok: false, error: ReserveUsernameError.Conflict }; } if (error.code === 413 || error.code === 429) { - const time = findRetryAfterTimeFromError(error); - log.warn(`reserveUsername: got ${error.code}, waiting ${time}ms`); - await sleep(time, abortSignal); - - return reserveUsername(options); + return { + ok: false, + error: ReserveUsernameError.TooManyAttempts, + }; } } if (error instanceof LibSignalErrorBase) { diff --git a/ts/state/ducks/username.ts b/ts/state/ducks/username.ts index 2c550afa4b..ee26682bb4 100644 --- a/ts/state/ducks/username.ts +++ b/ts/state/ducks/username.ts @@ -476,6 +476,8 @@ export function reducer( stateError = UsernameReservationError.AllZeroDiscriminator; } else if (error === ReserveUsernameError.LeadingZeroDiscriminator) { stateError = UsernameReservationError.LeadingZeroDiscriminator; + } else if (error === ReserveUsernameError.TooManyAttempts) { + stateError = UsernameReservationError.TooManyAttempts; } else { throw missingCaseError(error); } diff --git a/ts/state/ducks/usernameEnums.ts b/ts/state/ducks/usernameEnums.ts index b8b3610a5f..fb701d2e53 100644 --- a/ts/state/ducks/usernameEnums.ts +++ b/ts/state/ducks/usernameEnums.ts @@ -43,4 +43,5 @@ export enum UsernameReservationError { NotEnoughDiscriminator = 'NotEnoughDiscriminator', AllZeroDiscriminator = 'AllZeroDiscriminator', LeadingZeroDiscriminator = 'LeadingZeroDiscriminator', + TooManyAttempts = 'TooManyAttempts', } diff --git a/ts/types/Username.ts b/ts/types/Username.ts index adcd25c58a..76ac22c8ff 100644 --- a/ts/types/Username.ts +++ b/ts/types/Username.ts @@ -19,6 +19,7 @@ export enum ReserveUsernameError { NotEnoughDiscriminator = 'NotEnoughDiscriminator', AllZeroDiscriminator = 'AllZeroDiscriminator', LeadingZeroDiscriminator = 'LeadingZeroDiscriminator', + TooManyAttempts = 'TooManyAttempts', } export enum ConfirmUsernameResult {