| 
									
										
										
										
											2017-07-13 11:39:07 -07:00
										 |  |  | import debug from 'debug'; | 
					
						
							| 
									
										
										
										
											2018-05-29 14:08:55 +01:00
										 |  |  | import Rollbar from 'rollbar'; | 
					
						
							| 
									
										
										
										
											2017-07-13 11:39:07 -07:00
										 |  |  | import { | 
					
						
							|  |  |  |   isHandledError, | 
					
						
							|  |  |  |   unwrapHandledError | 
					
						
							|  |  |  | } from '../utils/create-handled-error.js'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-29 14:08:55 +01:00
										 |  |  | const { ROLLBAR_APP_ID } = process.env; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const rollbar = new Rollbar(ROLLBAR_APP_ID); | 
					
						
							| 
									
										
										
										
											2017-07-13 11:39:07 -07:00
										 |  |  | const log = debug('fcc:middlewares:error-reporter'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-29 14:08:55 +01:00
										 |  |  | const errTemplate = ({message, ...restError}, req) => `
 | 
					
						
							|  |  |  | Time: ${new Date(Date.now()).toISOString()} | 
					
						
							|  |  |  | Error: ${message} | 
					
						
							|  |  |  | Is authenticated user: ${!!req.user} | 
					
						
							|  |  |  | Route: ${JSON.stringify(req.route, null, 2)} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ${JSON.stringify(restError, null, 2)} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | `;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-18 21:33:57 -08:00
										 |  |  | export default function errrorReporter() { | 
					
						
							| 
									
										
										
										
											2018-05-19 01:41:44 +05:30
										 |  |  |   if (process.env.NODE_ENV !== 'production' && process.env.ERROR_REPORTER) { | 
					
						
							| 
									
										
										
										
											2017-07-13 11:39:07 -07:00
										 |  |  |     return (err, req, res, next) => { | 
					
						
							| 
									
										
										
										
											2018-05-29 14:08:55 +01:00
										 |  |  |       console.error(errTemplate(err, req)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-13 11:39:07 -07:00
										 |  |  |       if (isHandledError(err)) { | 
					
						
							|  |  |  |         // log out user messages in development
 | 
					
						
							|  |  |  |         const handled = unwrapHandledError(err); | 
					
						
							|  |  |  |         log(handled.message); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       next(err); | 
					
						
							| 
									
										
										
										
											2018-05-17 15:26:44 +01:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2017-07-13 11:39:07 -07:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-05-29 14:08:55 +01:00
										 |  |  |   return (err, req, res, next) => { | 
					
						
							| 
									
										
										
										
											2018-06-01 18:07:28 +01:00
										 |  |  |     // handled errors do not need to be reported,
 | 
					
						
							|  |  |  |     // they report a message and maybe redirect the user
 | 
					
						
							|  |  |  |     // errors with status codes shouldn't be reported
 | 
					
						
							|  |  |  |     // as they are usually user messages
 | 
					
						
							|  |  |  |     if (isHandledError(err) || err.statusCode || err.status) { | 
					
						
							|  |  |  |       return next(err); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     // logging the error provides us with more information,
 | 
					
						
							|  |  |  |     // i.e isAuthenticatedUser, req.route
 | 
					
						
							| 
									
										
										
										
											2018-05-29 14:08:55 +01:00
										 |  |  |     console.error(errTemplate(err, req)); | 
					
						
							| 
									
										
										
										
											2018-06-01 18:07:28 +01:00
										 |  |  |     return rollbar.error(err.message, err); | 
					
						
							| 
									
										
										
										
											2018-05-29 14:08:55 +01:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2017-07-13 11:39:07 -07:00
										 |  |  | } |