Skip to content

Commit 1199fc6

Browse files
committed
Enhance passkey error handling in auth-utils by introducing new error messages for unavailable features and authentication API errors. Update related tests to ensure correct message mappings for various error responses.
1 parent 767acfc commit 1199fc6

File tree

2 files changed

+21
-23
lines changed

2 files changed

+21
-23
lines changed

packages/template-retail-react-app/app/utils/auth-utils.js

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,15 @@ export const TOO_MANY_PASSWORD_RESET_ATTEMPTS_ERROR_MESSAGE = defineMessage({
2828
id: 'global.error.too_many_password_reset_requests'
2929
})
3030

31-
export const TOO_MANY_PASSKEY_REGISTRATION_ATTEMPTS_ERROR_MESSAGE = defineMessage({
31+
// Constants for Passkey authentication and registration
32+
export const PASSKEY_FEATURE_UNAVAILABLE_ERROR_MESSAGE = defineMessage({
33+
id: 'global.error.passkey_feature_unavailable',
34+
defaultMessage: 'The passkey feature is currently unavailable'
35+
})
36+
export const PASSKEY_AUTHENTICATION_API_ERROR_MESSAGE = defineMessage({
37+
id: 'global.error.passkey_api_error',
3238
defaultMessage:
33-
'You reached the limit for passkey registration attempts. For your security, wait 10 minutes and try again.',
34-
id: 'global.error.too_many_passkey_registration_attempts'
39+
'Something went wrong while authenticating your passkey. Try again or use a different login method.'
3540
})
3641

3742
// Shared error patterns for token-based auth features (passwordless login, password reset)
@@ -130,9 +135,9 @@ export const getLoginPasswordlessErrorMessage = (errorMessage) => {
130135
*/
131136
export const getPasskeyAuthenticateErrorMessage = (error) => {
132137
if (error.response?.status === 400 || error.response?.status === 401) {
133-
return FEATURE_UNAVAILABLE_ERROR_MESSAGE
138+
return PASSKEY_FEATURE_UNAVAILABLE_ERROR_MESSAGE
134139
}
135-
return API_ERROR_MESSAGE
140+
return PASSKEY_AUTHENTICATION_API_ERROR_MESSAGE
136141
}
137142

138143
/**
@@ -148,12 +153,8 @@ export const getPasskeyAuthenticateErrorMessage = (error) => {
148153
* @returns {Object} - The message descriptor (from defineMessage) for formatMessage
149154
*/
150155
export const getPasskeyRegistrationErrorMessage = (error) => {
151-
// Too many requests error is only returned by AuthorizeWebauthnRegistration
152-
if (TOO_MANY_REQUESTS_ERROR.test(error.message)) {
153-
return TOO_MANY_PASSKEY_REGISTRATION_ATTEMPTS_ERROR_MESSAGE
154-
}
155156
if (error.response?.status === 400 || error.response?.status === 401) {
156-
return FEATURE_UNAVAILABLE_ERROR_MESSAGE
157+
return PASSKEY_FEATURE_UNAVAILABLE_ERROR_MESSAGE
157158
}
158159
return API_ERROR_MESSAGE
159160
}

packages/template-retail-react-app/app/utils/auth-utils.test.js

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import {
1818
getPasskeyRegistrationErrorMessage,
1919
TOO_MANY_LOGIN_ATTEMPTS_ERROR_MESSAGE,
2020
TOO_MANY_PASSWORD_RESET_ATTEMPTS_ERROR_MESSAGE,
21-
TOO_MANY_PASSKEY_REGISTRATION_ATTEMPTS_ERROR_MESSAGE
21+
PASSKEY_FEATURE_UNAVAILABLE_ERROR_MESSAGE,
22+
PASSKEY_AUTHENTICATION_API_ERROR_MESSAGE
2223
} from '@salesforce/retail-react-app/app/utils/auth-utils'
2324

2425
afterEach(() => {
@@ -121,23 +122,19 @@ describe('getLoginPasswordlessErrorMessage', () => {
121122

122123
describe('getPasskeyAuthenticateErrorMessage', () => {
123124
test.each([
124-
[{response: {status: 400}}, FEATURE_UNAVAILABLE_ERROR_MESSAGE],
125-
[{response: {status: 401}}, FEATURE_UNAVAILABLE_ERROR_MESSAGE],
126-
[{response: {status: 403}}, API_ERROR_MESSAGE],
127-
[{response: {status: 412}}, API_ERROR_MESSAGE],
128-
[{response: {status: 500}}, API_ERROR_MESSAGE],
129-
[new Error('Network Error'), API_ERROR_MESSAGE]
125+
[{response: {status: 400}}, PASSKEY_FEATURE_UNAVAILABLE_ERROR_MESSAGE],
126+
[{response: {status: 401}}, PASSKEY_FEATURE_UNAVAILABLE_ERROR_MESSAGE],
127+
[{response: {status: 403}}, PASSKEY_AUTHENTICATION_API_ERROR_MESSAGE],
128+
[{response: {status: 412}}, PASSKEY_AUTHENTICATION_API_ERROR_MESSAGE],
129+
[{response: {status: 500}}, PASSKEY_AUTHENTICATION_API_ERROR_MESSAGE],
130+
[new Error('Network Error'), PASSKEY_AUTHENTICATION_API_ERROR_MESSAGE]
130131
])('maps passkey error to the correct message descriptor', (error, expectedMessage) => {
131132
expect(getPasskeyAuthenticateErrorMessage(error)).toBe(expectedMessage)
132133
})
133134

134135
test.each([
135-
[
136-
{message: 'Too many passkey registration requests were made.', response: {status: 400}},
137-
TOO_MANY_PASSKEY_REGISTRATION_ATTEMPTS_ERROR_MESSAGE
138-
],
139-
[{response: {status: 400}}, FEATURE_UNAVAILABLE_ERROR_MESSAGE],
140-
[{response: {status: 401}}, FEATURE_UNAVAILABLE_ERROR_MESSAGE],
136+
[{response: {status: 400}}, PASSKEY_FEATURE_UNAVAILABLE_ERROR_MESSAGE],
137+
[{response: {status: 401}}, PASSKEY_FEATURE_UNAVAILABLE_ERROR_MESSAGE],
141138
[{response: {status: 403}}, API_ERROR_MESSAGE],
142139
[{response: {status: 412}}, API_ERROR_MESSAGE],
143140
[{response: {status: 500}}, API_ERROR_MESSAGE],

0 commit comments

Comments
 (0)