| 
									
										
										
										
											2022-08-09 19:14:27 +02:00
										 |  |  | /* eslint-disable max-classes-per-file */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const { HttpError } = require('http-errors'); | 
					
						
							|  |  |  | const { formatYupErrors } = require('./format-yup-error'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ApplicationError */ | 
					
						
							|  |  |  | class ApplicationError extends Error { | 
					
						
							|  |  |  |   constructor(message, details = {}) { | 
					
						
							|  |  |  |     super(); | 
					
						
							|  |  |  |     this.name = 'ApplicationError'; | 
					
						
							|  |  |  |     this.message = message || 'An application error occured'; | 
					
						
							|  |  |  |     this.details = details; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ValidationError extends ApplicationError { | 
					
						
							|  |  |  |   constructor(message, details) { | 
					
						
							|  |  |  |     super(message, details); | 
					
						
							|  |  |  |     this.name = 'ValidationError'; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-29 12:23:28 +02:00
										 |  |  | class YupValidationError extends ValidationError { | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |   constructor(yupError, message) { | 
					
						
							|  |  |  |     super(); | 
					
						
							|  |  |  |     const { errors, message: yupMessage } = formatYupErrors(yupError); | 
					
						
							|  |  |  |     this.message = message || yupMessage; | 
					
						
							|  |  |  |     this.details = { errors }; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PaginationError extends ApplicationError { | 
					
						
							| 
									
										
										
										
											2021-10-29 12:23:28 +02:00
										 |  |  |   constructor(message, details) { | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |     super(message, details); | 
					
						
							|  |  |  |     this.name = 'PaginationError'; | 
					
						
							|  |  |  |     this.message = message || 'Invalid pagination'; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-27 18:54:58 +02:00
										 |  |  | class NotFoundError extends ApplicationError { | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |   constructor(message, details) { | 
					
						
							|  |  |  |     super(message, details); | 
					
						
							| 
									
										
										
										
											2021-10-27 18:54:58 +02:00
										 |  |  |     this.name = 'NotFoundError'; | 
					
						
							|  |  |  |     this.message = message || 'Entity not found'; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ForbiddenError extends ApplicationError { | 
					
						
							|  |  |  |   constructor(message, details) { | 
					
						
							|  |  |  |     super(message, details); | 
					
						
							|  |  |  |     this.name = 'ForbiddenError'; | 
					
						
							| 
									
										
										
										
											2021-10-28 12:10:22 +02:00
										 |  |  |     this.message = message || 'Forbidden access'; | 
					
						
							| 
									
										
										
										
											2021-10-27 18:54:58 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-05 08:21:34 -07:00
										 |  |  | class UnauthorizedError extends ApplicationError { | 
					
						
							| 
									
										
										
										
											2021-10-27 18:54:58 +02:00
										 |  |  |   constructor(message, details) { | 
					
						
							|  |  |  |     super(message, details); | 
					
						
							| 
									
										
										
										
											2022-10-05 08:21:34 -07:00
										 |  |  |     this.name = 'UnauthorizedError'; | 
					
						
							|  |  |  |     this.message = message || 'Unauthorized'; | 
					
						
							| 
									
										
										
										
											2021-10-27 18:54:58 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-05 08:21:34 -07:00
										 |  |  | class RateLimitError extends ApplicationError { | 
					
						
							| 
									
										
										
										
											2021-10-27 18:54:58 +02:00
										 |  |  |   constructor(message, details) { | 
					
						
							|  |  |  |     super(message, details); | 
					
						
							| 
									
										
										
										
											2022-10-05 08:21:34 -07:00
										 |  |  |     this.name = 'RateLimitError'; | 
					
						
							|  |  |  |     this.message = message || 'Too many requests, please try again later.'; | 
					
						
							| 
									
										
										
										
											2022-10-05 11:26:17 -07:00
										 |  |  |     this.details = details || {}; | 
					
						
							| 
									
										
										
										
											2022-10-05 08:21:34 -07:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PayloadTooLargeError extends ApplicationError { | 
					
						
							|  |  |  |   constructor(message, details) { | 
					
						
							|  |  |  |     super(message, details); | 
					
						
							|  |  |  |     this.name = 'PayloadTooLargeError'; | 
					
						
							|  |  |  |     this.message = message || 'Entity too large'; | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-03 06:25:18 -07:00
										 |  |  | class PolicyError extends ForbiddenError { | 
					
						
							| 
									
										
										
										
											2022-01-03 06:16:34 -07:00
										 |  |  |   constructor(message, details) { | 
					
						
							|  |  |  |     super(message, details); | 
					
						
							|  |  |  |     this.name = 'PolicyError'; | 
					
						
							|  |  |  |     this.message = message || 'Policy Failed'; | 
					
						
							|  |  |  |     this.details = details || {}; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  | module.exports = { | 
					
						
							|  |  |  |   HttpError, | 
					
						
							|  |  |  |   ApplicationError, | 
					
						
							|  |  |  |   ValidationError, | 
					
						
							|  |  |  |   YupValidationError, | 
					
						
							|  |  |  |   PaginationError, | 
					
						
							| 
									
										
										
										
											2021-10-27 18:54:58 +02:00
										 |  |  |   NotFoundError, | 
					
						
							|  |  |  |   ForbiddenError, | 
					
						
							|  |  |  |   UnauthorizedError, | 
					
						
							| 
									
										
										
										
											2022-10-05 08:21:34 -07:00
										 |  |  |   RateLimitError, | 
					
						
							|  |  |  |   PayloadTooLargeError, | 
					
						
							| 
									
										
										
										
											2022-01-03 06:16:34 -07:00
										 |  |  |   PolicyError, | 
					
						
							| 
									
										
										
										
											2021-10-20 17:30:05 +02:00
										 |  |  | }; |