diff --git a/app/src/api.ts b/app/src/api.ts index d5773bfe04..51a9bcc23e 100644 --- a/app/src/api.ts +++ b/app/src/api.ts @@ -51,7 +51,7 @@ export const onError = async (error: RequestError) => { /* istanbul ignore next */ const status = error.response?.status; /* istanbul ignore next */ - const code = error.response?.data?.error?.code; + const code = error.response?.data?.errors?.[0]?.extensions?.code; if (status === 401 && code === 'INVALID_CREDENTIALS' && error.request.responseURL.includes('refresh') === false) { try { diff --git a/app/src/components/v-error/v-error.vue b/app/src/components/v-error/v-error.vue index 85471127fa..93aeeaca4d 100644 --- a/app/src/components/v-error/v-error.vue +++ b/app/src/components/v-error/v-error.vue @@ -24,7 +24,7 @@ export default defineComponent({ }, setup(props) { const code = computed(() => { - return props.error?.response?.data?.error?.code || 'UNKNOWN'; + return props.error?.response?.data?.errors?.[0]?.extensions?.code || 'UNKNOWN'; }); const copied = ref(false); diff --git a/app/src/lang/en-US/index.json b/app/src/lang/en-US/index.json index 7eb1bd9379..9fb9ab45fb 100644 --- a/app/src/lang/en-US/index.json +++ b/app/src/lang/en-US/index.json @@ -434,22 +434,16 @@ "auto_format_casing": "Auto-format casing", "errors": { - "3": "Only super admins have access to this", - "4": "Super Admin Token not provided", - "11": "Can't Reach Database", - "12": "Field has invalid regular expression", - "100": "Incorrect Email/Password", - "101": "Logged-out from Inactivity", - "102": "Logged-out from Inactivity", - "103": "User Suspended", - "105": "Reset link expired", - "106": "Incorrect Email/Password", - "107": "User Not Found", - "111": "Enter One-Time Password", - "112": "Wrong One-Time Password", - "114": "Incorrect Email/Password", - "115": "SSO is not allowed when 2FA is enabled", - "503": "Email couldn't be sent. Please verify the API's configuration", + "COLLECTION_NOT_FOUND": "Collection doesn't exist.", + "FIELD_NOT_FOUND": "Field not found.", + "NO_PERMISSION": "Forbidden.", + "INVALID_CREDENTIALS": "Wrong username or password.", + "INVALID_OTP": "Wrong one-time password.", + "INVALID_PAYLOAD": "Invalid payload.", + "INVALID_QUERY": "Invalid query.", + "ITEM_LIMIT_REACHED": "Item limit reached.", + "ITEM_NOT_FOUND": "Item not found.", + "ROUTE_NOT_FOUND": "Not found.", "-1": "Couldn't Reach API" }, diff --git a/app/src/lang/index.ts b/app/src/lang/index.ts index 39886d328e..a59f10634c 100644 --- a/app/src/lang/index.ts +++ b/app/src/lang/index.ts @@ -100,13 +100,13 @@ export async function setLanguage(lang: Language): Promise { export default i18n; -export function translateAPIError(error: RequestError | number) { +export function translateAPIError(error: RequestError | string) { const defaultMsg = i18n.t('unexpected_error'); let code = error; if (typeof error === 'object') { - code = error?.response?.data?.error?.code; + code = error?.response?.data?.errors?.[0]?.extensions?.code; } if (!error) return defaultMsg; diff --git a/app/src/routes/login/components/login-form/login-form.vue b/app/src/routes/login/components/login-form/login-form.vue index 011ce8f77f..33cb927b2d 100644 --- a/app/src/routes/login/components/login-form/login-form.vue +++ b/app/src/routes/login/components/login-form/login-form.vue @@ -127,7 +127,10 @@ export default defineComponent({ router.push(lastPage || '/collections'); } catch (err) { /** @todo use new error code */ - if (err.response?.data?.error?.code === 111) { + if ( + err.response?.data?.errors?.[0]?.extensions?.code === 'INVALID_OTP' && + requiresTFA.value === false + ) { requiresTFA.value = true; } else { error.value = err;