-
Notifications
You must be signed in to change notification settings - Fork 0
/
error.ts
69 lines (63 loc) · 2.68 KB
/
error.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
export enum ErrorCode {
PasswordMismatch = 'You entered a wrong password!',
EmailRequired = 'Email is required field, please enter the email!',
PasswordRequired = 'Password is required field, please enter the password!',
UserNotFound = "It seems this user doesn't exist, are you sure you entered correct credentials?",
AuthenticationRequired = 'You are not authenticated!',
UnsupportedAuthorization = 'Unsupported authorization type!',
MissingRefreshToken = 'Refresh token is required parameter! Please send it in body or query as refreshToken.',
UpdatePasswordNotImplemented = "Function 'updatePassword' is not implemented!" +
"Please add 'updatePassword' functionality under the 'emailPassword' provider options.",
ResetPasswordTokenRequired = 'Reset password token is required parameter! Please send it in body or query as token.',
InvalidResetPasswordToken = 'Reset password token is not valid, some mandatory data are missing!',
SaveNonExistingUserNotImplemented = "Function 'saveNonExistingUser' is not implemented!" +
"Please add 'saveNonExistingUser' functionality under the 'emailPassword' provider options.",
}
class GenericError extends Error {
constructor(
public readonly message: string,
public readonly status: number,
public readonly errorCode: string = ''
) {
super(message);
Object.setPrototypeOf(this, new.target.prototype);
this.name = this.constructor.name;
}
public toJSON() {
return {
message: this.message,
status: this.status,
errorCode: this.errorCode,
errorClass: this.constructor.name,
stack: this.stack,
};
}
static apiErrorData = (error?: typeof ErrorCode[keyof typeof ErrorCode]) => {
const { message, code } = (error as any) || { message: '', code: '' };
return [code, message] as [string, string];
}
}
export class NotAuthenticated extends GenericError {
constructor(error?: typeof ErrorCode[keyof typeof ErrorCode]) {
const [code, message] = GenericError.apiErrorData(error);
super(message, 401, code);
}
}
export class BadRequest extends GenericError {
constructor(error?: typeof ErrorCode[keyof typeof ErrorCode]) {
const [code, message] = GenericError.apiErrorData(error);
super(message, 400, code);
}
}
const mapErrorCodeValues = (): typeof ErrorCode => {
const result: any = {};
const eCode = Object(ErrorCode);
for (const key in ErrorCode) {
result[key] = {
code: key,
message: eCode[key],
};
}
return result;
};
export const ERROR_CODE = mapErrorCodeValues();