Files
Superalgos/api/src/errors/index.js
T
2018-11-02 01:33:13 -07:00

49 lines
1.3 KiB
JavaScript

import { ApolloError } from 'apollo-server-express'
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.stringify(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(JSON.stringify(error.originalError))
return error.originalError
}
if (error.errors) {
logger.error('Errors')
logger.error(JSON.stringify(error.errors))
return error.errors.map(searchOriginalError)[0]
}
logger.error('searchOriginalErrors')
logger.error(JSON.stringify(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 })
}
}