const fs = require('fs'); const os = require('os'); const path = require('path'); const spawn = require('child_process').spawn; const electron = require('electron'); const binding = process.atomBinding('crash_reporter'); var CrashReporter = (function() { function CrashReporter() {} CrashReporter.prototype.start = function(options) { var app, args, autoSubmit, companyName, deprecate, env, extra, ignoreSystemCrashHandler, start, submitURL; if (options == null) { options = {}; } this.productName = options.productName, companyName = options.companyName, submitURL = options.submitURL, autoSubmit = options.autoSubmit, ignoreSystemCrashHandler = options.ignoreSystemCrashHandler, extra = options.extra; // Deprecated. deprecate = electron.deprecate; if (options.submitUrl) { if (submitURL == null) { submitURL = options.submitUrl; } deprecate.warn('submitUrl', 'submitURL'); } app = (process.type === 'browser' ? electron : electron.remote).app; if (this.productName == null) { this.productName = app.getName(); } if (autoSubmit == null) { autoSubmit = true; } if (ignoreSystemCrashHandler == null) { ignoreSystemCrashHandler = false; } if (extra == null) { extra = {}; } if (extra._productName == null) { extra._productName = this.productName; } if (extra._companyName == null) { extra._companyName = companyName; } if (extra._version == null) { extra._version = app.getVersion(); } if (companyName == null) { deprecate.log('companyName is now a required option to crashReporter.start'); return; } if (submitURL == null) { deprecate.log('submitURL is now a required option to crashReporter.start'); return; } start = (function(_this) { return function() { return binding.start(_this.productName, companyName, submitURL, autoSubmit, ignoreSystemCrashHandler, extra); }; })(this); if (process.platform === 'win32') { args = ["--reporter-url=" + submitURL, "--application-name=" + this.productName, "--v=1"]; env = { ATOM_SHELL_INTERNAL_CRASH_SERVICE: 1 }; spawn(process.execPath, args, { env: env, detached: true }); } return start(); }; CrashReporter.prototype.getLastCrashReport = function() { var reports; reports = this.getUploadedReports(); if (reports.length > 0) { return reports[0]; } else { return null; } }; CrashReporter.prototype.getUploadedReports = function() { var log, tmpdir; tmpdir = process.platform === 'win32' ? os.tmpdir() : '/tmp'; log = process.platform === 'darwin' ? path.join(tmpdir, this.productName + " Crashes") : path.join(tmpdir, this.productName + " Crashes", 'uploads.log'); return binding._getUploadedReports(log); }; return CrashReporter; })(); module.exports = new CrashReporter;