2024-05-06 12:49:24 +00:00
|
|
|
import { ReactNode } from "react";
|
|
|
|
|
2024-05-01 09:24:35 +00:00
|
|
|
export enum EPageTypes {
|
|
|
|
"PUBLIC" = "PUBLIC",
|
|
|
|
"NON_AUTHENTICATED" = "NON_AUTHENTICATED",
|
|
|
|
"ONBOARDING" = "ONBOARDING",
|
|
|
|
"AUTHENTICATED" = "AUTHENTICATED",
|
|
|
|
}
|
|
|
|
|
2024-04-30 11:34:49 +00:00
|
|
|
export enum EAuthModes {
|
|
|
|
SIGN_IN = "SIGN_IN",
|
|
|
|
SIGN_UP = "SIGN_UP",
|
2024-04-29 17:42:43 +00:00
|
|
|
}
|
|
|
|
|
2024-04-30 11:34:49 +00:00
|
|
|
export enum EAuthSteps {
|
|
|
|
EMAIL = "EMAIL",
|
|
|
|
PASSWORD = "PASSWORD",
|
|
|
|
UNIQUE_CODE = "UNIQUE_CODE",
|
2024-04-29 17:42:43 +00:00
|
|
|
}
|
|
|
|
|
2024-04-30 11:34:49 +00:00
|
|
|
export enum EAuthenticationErrorCodes {
|
|
|
|
// alert errors
|
2024-04-29 17:42:43 +00:00
|
|
|
INSTANCE_NOT_CONFIGURED = "INSTANCE_NOT_CONFIGURED",
|
2024-04-30 11:34:49 +00:00
|
|
|
SMTP_NOT_CONFIGURED = "SMTP_NOT_CONFIGURED",
|
|
|
|
AUTHENTICATION_FAILED = "AUTHENTICATION_FAILED",
|
|
|
|
INVALID_TOKEN = "INVALID_TOKEN",
|
|
|
|
EXPIRED_TOKEN = "EXPIRED_TOKEN",
|
|
|
|
IMPROPERLY_CONFIGURED = "IMPROPERLY_CONFIGURED",
|
|
|
|
OAUTH_PROVIDER_ERROR = "OAUTH_PROVIDER_ERROR",
|
|
|
|
// banner errors
|
2024-04-29 17:42:43 +00:00
|
|
|
INVALID_EMAIL = "INVALID_EMAIL",
|
2024-04-30 11:34:49 +00:00
|
|
|
INVALID_PASSWORD = "INVALID_PASSWORD",
|
|
|
|
USER_DOES_NOT_EXIST = "USER_DOES_NOT_EXIST",
|
|
|
|
ADMIN_ALREADY_EXIST = "ADMIN_ALREADY_EXIST",
|
2024-04-29 17:42:43 +00:00
|
|
|
USER_ALREADY_EXIST = "USER_ALREADY_EXIST",
|
2024-04-30 11:34:49 +00:00
|
|
|
// inline errors from backend
|
|
|
|
REQUIRED_EMAIL_PASSWORD_FIRST_NAME = "REQUIRED_EMAIL_PASSWORD_FIRST_NAME",
|
2024-04-29 17:42:43 +00:00
|
|
|
REQUIRED_EMAIL_PASSWORD = "REQUIRED_EMAIL_PASSWORD",
|
2024-04-30 11:34:49 +00:00
|
|
|
EMAIL_CODE_REQUIRED = "EMAIL_CODE_REQUIRED",
|
2024-04-29 17:42:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export enum EErrorAlertType {
|
|
|
|
BANNER_ALERT = "BANNER_ALERT",
|
|
|
|
TOAST_ALERT = "TOAST_ALERT",
|
|
|
|
INLINE_FIRST_NAME = "INLINE_FIRST_NAME",
|
|
|
|
INLINE_EMAIL = "INLINE_EMAIL",
|
|
|
|
INLINE_PASSWORD = "INLINE_PASSWORD",
|
2024-04-30 11:34:49 +00:00
|
|
|
INLINE_EMAIL_CODE = "INLINE_EMAIL_CODE",
|
2024-04-29 17:42:43 +00:00
|
|
|
}
|
|
|
|
|
2024-05-06 12:49:24 +00:00
|
|
|
export type TAuthErrorInfo = { type: EErrorAlertType; title: string; message: ReactNode };
|
|
|
|
|
|
|
|
const errorCodeMessages: { [key in EAuthenticationErrorCodes]: { title: string; message: ReactNode } } = {
|
|
|
|
[EAuthenticationErrorCodes.INSTANCE_NOT_CONFIGURED]: {
|
|
|
|
title: `Instance not configured`,
|
|
|
|
message: `Instance not configured. Please contact your administrator.`,
|
|
|
|
},
|
|
|
|
[EAuthenticationErrorCodes.SMTP_NOT_CONFIGURED]: {
|
|
|
|
title: `SMTP not configured`,
|
|
|
|
message: `SMTP not configured. Please contact your administrator.`,
|
|
|
|
},
|
|
|
|
[EAuthenticationErrorCodes.AUTHENTICATION_FAILED]: {
|
|
|
|
title: `Authentication failed.`,
|
|
|
|
message: `Authentication failed. Please try again.`,
|
|
|
|
},
|
|
|
|
[EAuthenticationErrorCodes.INVALID_TOKEN]: { title: `Invalid token.`, message: `Invalid token. Please try again.` },
|
|
|
|
[EAuthenticationErrorCodes.EXPIRED_TOKEN]: { title: `Expired token.`, message: `Expired token. Please try again.` },
|
|
|
|
[EAuthenticationErrorCodes.IMPROPERLY_CONFIGURED]: {
|
|
|
|
title: `Improperly configured.`,
|
|
|
|
message: `Improperly configured. Please contact your administrator.`,
|
|
|
|
},
|
|
|
|
[EAuthenticationErrorCodes.OAUTH_PROVIDER_ERROR]: {
|
|
|
|
title: `OAuth provider error.`,
|
|
|
|
message: `OAuth provider error. Please try again.`,
|
|
|
|
},
|
|
|
|
[EAuthenticationErrorCodes.INVALID_EMAIL]: {
|
|
|
|
title: `Invalid email.`,
|
|
|
|
message: `Invalid email. Please try again.`,
|
|
|
|
},
|
|
|
|
[EAuthenticationErrorCodes.INVALID_PASSWORD]: {
|
|
|
|
title: `Invalid password.`,
|
|
|
|
message: `Invalid password. Please try again.`,
|
|
|
|
},
|
|
|
|
[EAuthenticationErrorCodes.USER_DOES_NOT_EXIST]: {
|
|
|
|
title: `User does not exist.`,
|
|
|
|
message: `User does not exist. Please try again.`,
|
|
|
|
},
|
|
|
|
[EAuthenticationErrorCodes.ADMIN_ALREADY_EXIST]: {
|
|
|
|
title: `Admin already exists.`,
|
|
|
|
message: `Admin already exists. Please try again.`,
|
|
|
|
},
|
|
|
|
[EAuthenticationErrorCodes.USER_ALREADY_EXIST]: {
|
|
|
|
title: `User already exists.`,
|
|
|
|
message: `User already exists. Please try again.`,
|
|
|
|
},
|
|
|
|
[EAuthenticationErrorCodes.REQUIRED_EMAIL_PASSWORD_FIRST_NAME]: {
|
|
|
|
title: `Missing fields.`,
|
|
|
|
message: `Email, password, and first name are required.`,
|
|
|
|
},
|
|
|
|
[EAuthenticationErrorCodes.REQUIRED_EMAIL_PASSWORD]: {
|
|
|
|
title: `Missing fields.`,
|
|
|
|
message: `Email and password are required.`,
|
|
|
|
},
|
|
|
|
[EAuthenticationErrorCodes.EMAIL_CODE_REQUIRED]: {
|
|
|
|
title: `Missing fields.`,
|
|
|
|
message: `Email and code are required.`,
|
|
|
|
},
|
|
|
|
};
|
2024-04-30 11:34:49 +00:00
|
|
|
|
2024-04-30 14:00:42 +00:00
|
|
|
export const authErrorHandler = (
|
|
|
|
errorCode: EAuthenticationErrorCodes,
|
|
|
|
errorMessage: string | undefined
|
|
|
|
): TAuthErrorInfo | undefined => {
|
2024-04-30 11:34:49 +00:00
|
|
|
const toastAlertErrorCodes = [
|
|
|
|
EAuthenticationErrorCodes.INSTANCE_NOT_CONFIGURED,
|
|
|
|
EAuthenticationErrorCodes.SMTP_NOT_CONFIGURED,
|
|
|
|
EAuthenticationErrorCodes.AUTHENTICATION_FAILED,
|
|
|
|
EAuthenticationErrorCodes.INVALID_TOKEN,
|
|
|
|
EAuthenticationErrorCodes.EXPIRED_TOKEN,
|
|
|
|
EAuthenticationErrorCodes.IMPROPERLY_CONFIGURED,
|
|
|
|
EAuthenticationErrorCodes.OAUTH_PROVIDER_ERROR,
|
|
|
|
];
|
|
|
|
const bannerAlertErrorCodes = [
|
2024-05-06 12:49:24 +00:00
|
|
|
EAuthenticationErrorCodes.INVALID_EMAIL,
|
|
|
|
EAuthenticationErrorCodes.INVALID_PASSWORD,
|
2024-04-30 11:34:49 +00:00
|
|
|
EAuthenticationErrorCodes.USER_DOES_NOT_EXIST,
|
|
|
|
EAuthenticationErrorCodes.ADMIN_ALREADY_EXIST,
|
|
|
|
EAuthenticationErrorCodes.USER_ALREADY_EXIST,
|
2024-05-06 12:49:24 +00:00
|
|
|
EAuthenticationErrorCodes.REQUIRED_EMAIL_PASSWORD_FIRST_NAME,
|
|
|
|
EAuthenticationErrorCodes.REQUIRED_EMAIL_PASSWORD,
|
|
|
|
EAuthenticationErrorCodes.EMAIL_CODE_REQUIRED,
|
2024-04-30 11:34:49 +00:00
|
|
|
];
|
|
|
|
|
2024-04-30 14:00:42 +00:00
|
|
|
if (toastAlertErrorCodes.includes(errorCode))
|
|
|
|
return {
|
2024-04-30 11:34:49 +00:00
|
|
|
type: EErrorAlertType.TOAST_ALERT,
|
2024-05-06 12:49:24 +00:00
|
|
|
title: errorCodeMessages[errorCode]?.title || "Error",
|
|
|
|
message: errorMessage || errorCodeMessages[errorCode]?.message || "Something went wrong. Please try again.",
|
2024-04-30 11:34:49 +00:00
|
|
|
};
|
|
|
|
|
2024-04-30 14:00:42 +00:00
|
|
|
if (bannerAlertErrorCodes.includes(errorCode))
|
|
|
|
return {
|
2024-04-30 11:34:49 +00:00
|
|
|
type: EErrorAlertType.BANNER_ALERT,
|
2024-05-06 12:49:24 +00:00
|
|
|
title: errorCodeMessages[errorCode]?.title || "Error",
|
|
|
|
message: errorMessage || errorCodeMessages[errorCode]?.message || "Something went wrong. Please try again.",
|
2024-04-30 11:34:49 +00:00
|
|
|
};
|
2024-04-29 17:42:43 +00:00
|
|
|
|
2024-04-30 14:00:42 +00:00
|
|
|
return undefined;
|
2024-04-29 17:42:43 +00:00
|
|
|
};
|