| 
									
										
										
										
											2019-06-20 15:45:14 +02:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const os = require('os'); | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  | const _ = require('lodash'); | 
					
						
							| 
									
										
										
										
											2019-06-20 15:45:14 +02:00
										 |  |  | const fetch = require('node-fetch'); | 
					
						
							| 
									
										
										
										
											2019-09-26 14:03:22 +02:00
										 |  |  | const sentry = require('@sentry/node'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Add properties from the package.json strapi key in the metadata | 
					
						
							|  |  |  |  * @param {object} metadata | 
					
						
							|  |  |  |  * @param {object} scope | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | function addPackageJsonStrapiMetadata(metadata, scope) { | 
					
						
							|  |  |  |   const { packageJsonStrapi = {} } = scope; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return _.defaults(metadata, packageJsonStrapi); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-15 16:21:59 +02:00
										 |  |  | async function captureException(error) { | 
					
						
							| 
									
										
										
										
											2019-09-26 14:03:22 +02:00
										 |  |  |   try { | 
					
						
							|  |  |  |     sentry.captureException(error); | 
					
						
							|  |  |  |     await sentry.flush(); | 
					
						
							|  |  |  |   } catch (err) { | 
					
						
							|  |  |  |     /** ignore errors*/ | 
					
						
							|  |  |  |     return Promise.resolve(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-06-20 15:45:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-15 16:21:59 +02:00
										 |  |  | async function captureError(message) { | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     sentry.captureMessage(message, 'error'); | 
					
						
							|  |  |  |     await sentry.flush(); | 
					
						
							|  |  |  |   } catch (err) { | 
					
						
							|  |  |  |     /** ignore errors*/ | 
					
						
							|  |  |  |     return Promise.resolve(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function captureStderr(name, error) { | 
					
						
							|  |  |  |   if (error && error.stderr && error.stderr.trim() !== '') { | 
					
						
							|  |  |  |     error.stderr | 
					
						
							|  |  |  |       .trim() | 
					
						
							|  |  |  |       .split('\n') | 
					
						
							|  |  |  |       .forEach(line => { | 
					
						
							|  |  |  |         sentry.addBreadcrumb({ | 
					
						
							|  |  |  |           category: 'stderr', | 
					
						
							|  |  |  |           message: line, | 
					
						
							|  |  |  |           level: 'error', | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return captureError(name); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-20 15:45:14 +02:00
										 |  |  | function trackEvent(event, body) { | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     return fetch('https://analytics.strapi.io/track', { | 
					
						
							|  |  |  |       method: 'POST', | 
					
						
							|  |  |  |       body: JSON.stringify({ | 
					
						
							|  |  |  |         event, | 
					
						
							|  |  |  |         ...body, | 
					
						
							|  |  |  |       }), | 
					
						
							|  |  |  |       timeout: 1000, | 
					
						
							|  |  |  |       headers: { 'Content-Type': 'application/json' }, | 
					
						
							|  |  |  |     }).catch(() => {}); | 
					
						
							|  |  |  |   } catch (err) { | 
					
						
							|  |  |  |     /** ignore errors*/ | 
					
						
							|  |  |  |     return Promise.resolve(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function trackError({ scope, error }) { | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  |   const { uuid } = scope; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const properties = { | 
					
						
							|  |  |  |     error: typeof error == 'string' ? error : error && error.message, | 
					
						
							|  |  |  |     os: os.type(), | 
					
						
							|  |  |  |     platform: os.platform(), | 
					
						
							|  |  |  |     release: os.release(), | 
					
						
							|  |  |  |     version: scope.strapiVersion, | 
					
						
							|  |  |  |     nodeVersion: process.version, | 
					
						
							|  |  |  |     docker: scope.docker, | 
					
						
							|  |  |  |     useYarn: scope.useYarn, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-20 15:45:14 +02:00
										 |  |  |   try { | 
					
						
							|  |  |  |     return trackEvent('didNotCreateProject', { | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  |       uuid, | 
					
						
							| 
									
										
										
										
											2019-06-20 15:45:14 +02:00
										 |  |  |       deviceId: scope.deviceId, | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  |       properties: addPackageJsonStrapiMetadata(properties, scope), | 
					
						
							| 
									
										
										
										
											2019-06-20 15:45:14 +02:00
										 |  |  |     }); | 
					
						
							|  |  |  |   } catch (err) { | 
					
						
							|  |  |  |     /** ignore errors*/ | 
					
						
							|  |  |  |     return Promise.resolve(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function trackUsage({ event, scope, error }) { | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  |   const { uuid } = scope; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const properties = { | 
					
						
							|  |  |  |     error: typeof error == 'string' ? error : error && error.message, | 
					
						
							|  |  |  |     os: os.type(), | 
					
						
							|  |  |  |     os_platform: os.platform(), | 
					
						
							|  |  |  |     os_release: os.release(), | 
					
						
							|  |  |  |     node_version: process.version, | 
					
						
							|  |  |  |     version: scope.strapiVersion, | 
					
						
							|  |  |  |     docker: scope.docker, | 
					
						
							|  |  |  |     useYarn: scope.useYarn.toString(), | 
					
						
							|  |  |  |     noRun: (scope.runQuickstartApp !== true).toString(), | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-20 15:45:14 +02:00
										 |  |  |   try { | 
					
						
							|  |  |  |     return trackEvent(event, { | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  |       uuid: uuid, | 
					
						
							| 
									
										
										
										
											2019-06-20 15:45:14 +02:00
										 |  |  |       deviceId: scope.deviceId, | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  |       properties: addPackageJsonStrapiMetadata(properties, scope), | 
					
						
							| 
									
										
										
										
											2019-06-20 15:45:14 +02:00
										 |  |  |     }); | 
					
						
							|  |  |  |   } catch (err) { | 
					
						
							|  |  |  |     /** ignore errors*/ | 
					
						
							|  |  |  |     return Promise.resolve(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = { | 
					
						
							|  |  |  |   trackError, | 
					
						
							|  |  |  |   trackUsage, | 
					
						
							| 
									
										
										
										
											2019-10-15 16:21:59 +02:00
										 |  |  |   captureException, | 
					
						
							|  |  |  |   captureStderr, | 
					
						
							| 
									
										
										
										
											2019-06-20 15:45:14 +02:00
										 |  |  | }; |