2023-10-10 17:50:47 +02:00
import * as deprecate from '@electron/internal/common/deprecate' ;
2016-03-10 11:54:17 -08:00
2024-10-02 19:10:44 -07:00
import { app } from 'electron/main' ;
2020-06-22 20:32:45 -07:00
const binding = process . _linkedBinding ( 'electron_browser_crash_reporter' ) ;
2016-01-11 18:40:23 -08:00
2023-10-25 14:02:15 -04:00
class CrashReporter implements Electron . CrashReporter {
2020-05-07 13:31:26 -07:00
start ( options : Electron.CrashReporterStartOptions ) {
2019-03-28 15:04:16 -04:00
const {
2020-05-07 13:31:26 -07:00
productName = app . name ,
2017-10-30 22:51:22 -04:00
companyName ,
2019-03-28 15:04:16 -04:00
extra = { } ,
2020-05-07 13:31:26 -07:00
globalExtra = { } ,
2019-03-28 15:04:16 -04:00
ignoreSystemCrashHandler = false ,
2021-03-18 14:15:19 -07:00
submitURL = '' ,
2020-04-14 10:36:31 -07:00
uploadToServer = true ,
rateLimit = false ,
2020-09-03 12:43:58 -07:00
compress = true
2020-05-07 13:31:26 -07:00
} = options || { } ;
2016-11-28 14:51:24 -08:00
2021-03-18 14:15:19 -07:00
if ( uploadToServer && ! submitURL ) throw new Error ( 'submitURL must be specified when uploadToServer is true' ) ;
2016-10-05 13:40:39 -07:00
2021-03-05 09:13:17 +08:00
if ( ! compress && uploadToServer ) {
2020-05-19 13:47:21 -07:00
deprecate . log ( 'Sending uncompressed crash reports is deprecated and will be removed in a future version of Electron. Set { compress: true } to opt-in to the new behavior. Crash reports will be uploaded gzipped, which most crash reporting servers support.' ) ;
}
2020-05-07 13:31:26 -07:00
const appVersion = app . getVersion ( ) ;
2018-09-26 07:43:34 +02:00
2020-05-07 13:31:26 -07:00
if ( companyName && globalExtra . _companyName == null ) globalExtra . _companyName = companyName ;
2018-09-26 07:43:34 +02:00
2020-05-07 13:31:26 -07:00
const globalExtraAmended = {
_productName : productName ,
_version : appVersion ,
. . . globalExtra
} ;
2016-10-05 13:40:39 -07:00
2020-05-07 13:31:26 -07:00
binding . start ( submitURL , uploadToServer ,
ignoreSystemCrashHandler , rateLimit , compress , globalExtraAmended , extra , false ) ;
2016-03-25 12:41:24 -07:00
}
2016-01-11 18:40:23 -08:00
2016-10-05 13:40:39 -07:00
getLastCrashReport ( ) {
const reports = this . getUploadedReports ( )
2018-03-13 13:57:12 -07:00
. sort ( ( a , b ) = > {
2018-03-13 17:35:55 -07:00
const ats = ( a && a . date ) ? new Date ( a . date ) . getTime ( ) : 0 ;
const bts = ( b && b . date ) ? new Date ( b . date ) . getTime ( ) : 0 ;
2018-03-13 13:57:12 -07:00
return bts - ats ;
} ) ;
2017-10-30 22:51:22 -04:00
return ( reports . length > 0 ) ? reports [ 0 ] : null ;
2016-03-25 12:41:24 -07:00
}
2016-01-11 18:40:23 -08:00
2020-05-07 13:31:26 -07:00
getUploadedReports ( ) : Electron . CrashReport [ ] {
return binding . getUploadedReports ( ) ;
2016-03-25 12:41:24 -07:00
}
2016-01-11 18:40:23 -08:00
2016-11-22 19:30:20 +11:00
getUploadToServer ( ) {
2016-11-08 13:39:11 +13:00
if ( process . type === 'browser' ) {
2017-02-02 13:00:00 -08:00
return binding . getUploadToServer ( ) ;
2016-11-08 13:39:11 +13:00
} else {
2016-11-22 19:30:20 +11:00
throw new Error ( 'getUploadToServer can only be called from the main process' ) ;
2016-11-08 13:39:11 +13:00
}
2016-11-08 11:03:57 +11:00
}
2020-05-07 13:31:26 -07:00
setUploadToServer ( uploadToServer : boolean ) {
2016-11-08 13:39:11 +13:00
if ( process . type === 'browser' ) {
2017-02-02 13:00:00 -08:00
return binding . setUploadToServer ( uploadToServer ) ;
2016-11-08 13:39:11 +13:00
} else {
2016-11-22 19:30:20 +11:00
throw new Error ( 'setUploadToServer can only be called from the main process' ) ;
2016-11-08 13:39:11 +13:00
}
2016-11-08 11:03:57 +11:00
}
2017-02-02 14:23:21 -08:00
2020-05-07 13:31:26 -07:00
addExtraParameter ( key : string , value : string ) {
2017-11-01 21:57:43 -04:00
binding . addExtraParameter ( key , value ) ;
}
2020-05-07 13:31:26 -07:00
removeExtraParameter ( key : string ) {
2017-11-01 21:57:43 -04:00
binding . removeExtraParameter ( key ) ;
}
2019-03-28 15:04:16 -04:00
getParameters ( ) {
2017-10-31 13:51:44 -04:00
return binding . getParameters ( ) ;
2017-10-31 13:06:54 -04:00
}
2016-10-06 10:02:46 -07:00
}
2020-05-07 13:31:26 -07:00
export default new CrashReporter ( ) ;