index.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. const execa = require('execa');
  2. const superagent = require('superagent');
  3. const {
  4. inputCaptureSetWatcher,
  5. inputCaptureRegisterElement,
  6. } = require('./input_capture');
  7. const {
  8. wrapInputEventRegister,
  9. wrapInputEventUnregister,
  10. } = require('./input_event');
  11. module.exports = require('./discord_utils_'+process.platform+'.node');
  12. module.exports.clearCandidateGamesCallback = module.exports.setCandidateGamesCallback;
  13. inputCaptureSetWatcher(module.exports.inputWatchAll);
  14. delete module.exports.inputWatchAll;
  15. module.exports.inputCaptureRegisterElement = inputCaptureRegisterElement;
  16. module.exports.inputEventRegister = wrapInputEventRegister(module.exports.inputEventRegister);
  17. module.exports.inputEventUnregister = wrapInputEventUnregister(module.exports.inputEventUnregister);
  18. function parseNvidiaSmiOutput(result) {
  19. if (!result || !result.stdout) {
  20. return {error: 'nvidia-smi produced no output'};
  21. }
  22. const match = result.stdout.match(/Driver Version: (\d+)\.(\d+)/);
  23. if (match.length === 3) {
  24. return {major: parseInt(match[1], 10), minor: parseInt(match[2], 10)};
  25. } else {
  26. return {error: 'failed to parse nvidia-smi output'};
  27. }
  28. }
  29. module.exports.getGPUDriverVersions = async () => {
  30. if (process.platform !== 'win32') {
  31. return {};
  32. }
  33. const result = {};
  34. const nvidiaSmiPath = `${process.env['ProgramW6432']}/NVIDIA Corporation/NVSMI/nvidia-smi.exe`;
  35. try {
  36. result.nvidia = parseNvidiaSmiOutput(await execa(nvidiaSmiPath, []));
  37. } catch (e) {
  38. result.nvidia = {error: e.toString()};
  39. }
  40. return result;
  41. };
  42. module.exports.submitLiveCrashReport = async (channel, sentryMetadata) => {
  43. const path = module.exports._generateLiveMinidump();
  44. if (!path) {
  45. return null;
  46. }
  47. await superagent
  48. .post('https://sentry.io/api/146342/minidump/?sentry_key=f11e8c3e62cb46b5a006c339b2086ba3')
  49. .attach('upload_file_minidump', path)
  50. .field('channel', channel)
  51. .field('sentry', JSON.stringify(sentryMetadata));
  52. };