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 }) } }