50 lines
1.4 KiB
JavaScript
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 })
|
|
}
|
|
}
|