Files
Superalgos/api/src/errors/index.js
T

50 lines
1.4 KiB
JavaScript

import { ApolloError } from 'apollo-server-express'
import { inspect } from 'util'
import { logger } from '../logger'
export {
ApolloError,
AuthenticationError,
ForbiddenError,
SyntaxError,
UserInputError,
ValidationError,
} from 'apollo-server-express'
export const formatError = (error) => {
// This can be used to send errors to third
// party services like Sentry or Stackdriver
logger.info('formatError')
logger.error(JSON.parse(JSON.stringify(inspect(error))))
const originalError = searchOriginalError(error)
logger.error('originalError')
logger.error(originalError)
const { message, code } = originalError
return { message, code}
}
const searchOriginalError = (error) => {
if (error.originalError) {
logger.error('Original Error')
logger.error(error.originalError)
return error.originalError
}
if (error.errors) {
logger.error('Errors')
logger.error(JSON.parse(JSON.stringify(inspect(error.errors))))
return error.errors.map(searchOriginalError)[0]
}
logger.error('searchOriginalErrors')
logger.error(JSON.parse(JSON.stringify(inspect(error))))
return error;
}
// Define custom Apollo errors here
export class ExternalServiceError extends ApolloError {
constructor(message) {
super(message, 'EXTERNAL_SERVICE_UNAVAILABLE')
Object.defineProperty(this, 'name', { value: this.constructor.name })
}
}