Native Modules updates + restructuring

This commit is contained in:
Jean Ouina 2020-09-05 12:14:21 +02:00
parent adc98c7a2a
commit 8ecb078a95
84 changed files with 1841 additions and 1627 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1,11 +1,5 @@
const EventEmitter = require('events');
let addon = './discord_cloudsync.node'
if(process.platform === "linux"){
addon = './discord_cloudsync_linux.node'
}else if(process.platform === "darwin") {
addon = './discord_cloudsync_darwin.node'
}
const {CloudSync: CloudSyncNative} = require(addon);
const {CloudSync: CloudSyncNative} = require('./discord_cloudsync_'+process.platform+'.node');
function makeCallback(resolve, reject) {
return (err, result) => {
@ -31,4 +25,12 @@ class CloudSync extends EventEmitter {
}
}
module.exports = CloudSync;
function cloudSyncConstructor() {
const instance = new CloudSync();
return {
on: instance.on.bind(instance),
sync: instance.sync.bind(instance),
};
}
module.exports = cloudSyncConstructor;

View File

@ -1,7 +1,7 @@
{
"files": [
"discord_cloudsync.node",
"index.js",
"manifest.json"
]
{
"files": [
"discord_cloudsync.node",
"index.js",
"manifest.json"
]
}

View File

@ -1 +1,11 @@
module.exports = require((process.platform === "linux") ? './discord_dispatch_linux.node' : (process.platform === "darwin") ? './discord_dispatch_darwin.node' : './discord_dispatch.node');
const {Dispatch: DispatchNative} = require('./discord_dispatch_'+process.platform+'.node');
function dispatchConstructor(jsonConfigString, updateCallback, errorCallback, analyticsCallback) {
const instance = new DispatchNative(jsonConfigString, updateCallback, errorCallback, analyticsCallback);
return {
command: instance.command.bind(instance),
destroy: instance.destroy.bind(instance),
};
}
module.exports = {Dispatch: dispatchConstructor};

View File

@ -1,7 +1,7 @@
{
"files": [
"discord_dispatch.node",
"index.js",
"manifest.json"
]
{
"files": [
"discord_dispatch.node",
"index.js",
"manifest.json"
]
}

View File

@ -1 +1 @@
module.exports = require((process.platform === "linux") ? './discord_erlpack_linux.node' : (process.platform === "darwin") ? './discord_erlpack_darwin.node' : './discord_erlpack.node');
module.exports = require('./discord_erlpack_'+process.platform+'.node');

View File

@ -1,7 +1,7 @@
{
"files": [
"discord_erlpack.node",
"index.js",
"manifest.json"
]
{
"files": [
"discord_erlpack.node",
"index.js",
"manifest.json"
]
}

View File

@ -1 +1 @@
module.exports = require((process.platform === "linux") ? './discord_game_utils_linux.node' : (process.platform === "darwin") ? './discord_game_utils_darwin.node' : './discord_game_utils.node');
module.exports = require('./discord_game_utils_'+process.platform+'.node');

View File

@ -1,7 +1,7 @@
{
"files": [
"discord_game_utils.node",
"index.js",
"manifest.json"
]
{
"files": [
"discord_game_utils.node",
"index.js",
"manifest.json"
]
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
module.exports = require('./discord_hook.node');
module.exports = require('./discord_hook_'+process.platform+'.node');

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,17 +1,17 @@
const KrispModule = require('./discord_krisp.node');
KrispModule._initialize();
KrispModule.getNcModels = function() {
return new Promise(resolve => {
KrispModule._getNcModels(models => resolve(models));
});
};
KrispModule.getVadModels = function() {
return new Promise(resolve => {
KrispModule._getVadModels(models => resolve(models));
});
};
module.exports = KrispModule;
const KrispModule = require('./discord_krisp_'+process.platform+'.node');
KrispModule._initialize();
KrispModule.getNcModels = function() {
return new Promise(resolve => {
KrispModule._getNcModels(models => resolve(models));
});
};
KrispModule.getVadModels = function() {
return new Promise(resolve => {
KrispModule._getVadModels(models => resolve(models));
});
};
module.exports = KrispModule;

View File

@ -1,10 +1,12 @@
{
"files": [
"discord_krisp.node",
"VAD_weight.thw",
"NC_weight.thw",
"NC_small_16k.thw",
"index.js",
"manifest.json"
]
{
"files": [
"discord_krisp.node",
"VAD_weight.thw",
"NC_weight.thw",
"NC_small_16k.thw",
"c6.s.f.c55d28.thw",
"c6.xs.f.ca03f4.thw",
"index.js",
"manifest.json"
]
}

View File

@ -1,7 +1,7 @@
const native = require('./discord_media.node');
module.exports = {
getSystemAnalyticsBlob() {
return new Promise(resolve => native.getSystemAnalyticsBlob(resolve));
},
};
const native = require('./discord_media_'+process.platform+'.node');
module.exports = {
getSystemAnalyticsBlob() {
return new Promise(resolve => native.getSystemAnalyticsBlob(resolve));
},
};

View File

@ -1,7 +1,7 @@
{
"files": [
"discord_media.node",
"index.js",
"manifest.json"
]
{
"files": [
"discord_media.node",
"index.js",
"manifest.json"
]
}

View File

@ -1 +1 @@
module.exports = require((process.platform === "linux") ? './discord_modules_linux.node' : (process.platform === "darwin") ? './discord_modules_darwin.node' : './discord_modules.node');
module.exports = require('./discord_modules_'+process.platform+'.node');

View File

@ -11,11 +11,9 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
var Backoff =
/*#__PURE__*/
function () {
/**
* Create a backoff instance can automatically backoff retries.
var Backoff = /*#__PURE__*/function () {
/**
* Create a backoff instance can automatically backoff retries.
*/
function Backoff() {
var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 500;
@ -25,29 +23,34 @@ function () {
_classCallCheck(this, Backoff);
this._fails = 0;
if (min <= 0) {
throw Error("Backoff min value must be greater than zero or backoff will never back-off.");
}
this.min = min;
this.max = max != null ? max : min * 10;
this.jitter = jitter;
this._current = min;
}
/**
* Return the number of failures.
/**
* Return the number of failures.
*/
_createClass(Backoff, [{
key: "succeed",
/**
* Clear any pending callbacks and reset the backoff.
/**
* Clear any pending callbacks and reset the backoff.
*/
value: function succeed() {
this.cancel();
this._fails = 0;
this._current = this.min;
}
/**
* Incremet the backoff and schedule a callback if provided.
/**
* Incremet the backoff and schedule a callback if provided.
*/
}, {
@ -88,8 +91,8 @@ function () {
return this._current;
}
/**
* Clear any pending callbacks.
/**
* Clear any pending callbacks.
*/
}, {
@ -107,8 +110,8 @@ function () {
get: function get() {
return this._fails;
}
/**
* Current backoff value in milliseconds.
/**
* Current backoff value in milliseconds.
*/
}, {
@ -116,8 +119,8 @@ function () {
get: function get() {
return this._current;
}
/**
* A callback is going to fire.
/**
* A callback is going to fire.
*/
}, {

View File

@ -11,9 +11,7 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
var FeatureFlags =
/*#__PURE__*/
function () {
var FeatureFlags = /*#__PURE__*/function () {
function FeatureFlags() {
_classCallCheck(this, FeatureFlags);

View File

@ -11,11 +11,13 @@ var Backoff = require('./Backoff');
var _require = require('electron'),
BrowserWindow = _require.BrowserWindow,
shell = _require.shell,
_ipcMain = _require.ipcMain;
var Overlay = require('./overlay_module.js');
var _require2 = require('./securityUtils'),
saferShellOpenExternal = _require2.saferShellOpenExternal;
var path = require('path'); // IPC events must be prefixed with `DISCORD_`
@ -27,8 +29,8 @@ var ipcMain = {
return _ipcMain.removeListener("DISCORD_".concat(event), callback);
}
};
ipcMain.on('OPEN_EXTERNAL_URL', function (e, url) {
shell.openExternal(url);
ipcMain.on('OPEN_EXTERNAL_URL', function (e, externalUrl) {
saferShellOpenExternal(externalUrl);
});
function webContentsSend(win, event) {
@ -83,8 +85,8 @@ function createRenderer(pid, url) {
return;
}
var _require2 = require('url'),
URL = _require2.URL;
var _require3 = require('url'),
URL = _require3.URL;
var urlWithPid = new URL(url);
urlWithPid.searchParams.append('pid', pid.toString());
@ -101,7 +103,9 @@ function createRenderer(pid, url) {
offscreen: true,
transparent: true,
nodeIntegration: false,
preload: path.join(__dirname, '..', 'discord_desktop_core', 'core.asar', 'app', 'mainScreenPreload.js')
preload: path.join(__dirname, '..', 'discord_desktop_core', 'core.asar', 'app', 'mainScreenPreload.js'),
enableRemoteModule: false,
contextIsolation: true
}
})
};
@ -303,6 +307,10 @@ function destroyRenderer(pid) {
delete renderers[pid];
}
function needsTranslation(event) {
return 'msg' in event || !'type' in event;
}
function eventHandler(pid, event) {
var renderer = renderers[pid];
@ -339,7 +347,7 @@ function eventHandler(pid, event) {
renderer.window.webContents.invalidate();
} else if (event.message === 'input_event') {
renderer.window.focusOnWebView();
var translated = Overlay.translateInputEvent(event);
var translated = needsTranslation(event) ? Overlay.translateInputEvent(event) : event;
if (translated) {
if (!handleAccelerators(renderer.window.webContents, translated)) {

View File

@ -1,59 +1,63 @@
const Overlay = require('./overlay_module.js');
const isElectronRenderer =
typeof window !== 'undefined' && window != null && window.DiscordNative && window.DiscordNative.isRenderer;
const features = isElectronRenderer ? require('electron').remote.getGlobal('features') : global.features;
let clickZoneCallback;
let interceptInput = false;
let imeExclusiveFullscreenCallback;
let perfInfoCallback;
// [adill] indicates that the race condition between createHostProcess and connectProcess is fixed. remove ~7/2019.
features.declareSupported('create_host_on_attach');
function eventHandler(pid, event) {
if (event.message === 'click_zone_event') {
if (clickZoneCallback) {
clickZoneCallback(event.name, event.x, event.y);
}
} else if (event.message === 'ime_exclusive_fullscreen') {
if (imeExclusiveFullscreenCallback) {
imeExclusiveFullscreenCallback();
}
} else if (event.message === 'perf_info') {
if (perfInfoCallback) {
perfInfoCallback(event.data);
}
}
}
Overlay._setEventHandler(eventHandler);
if (__OVERLAY__) {
const {URL} = require('url');
const url = new URL(window.location);
const pid = parseInt(url.searchParams.get('pid'));
Overlay.connectProcess(pid);
Overlay.rendererStarted = () => {
Overlay.sendCommand(pid, {message: 'notify_renderer_started'});
};
}
Overlay.setClickZoneCallback = callback => {
clickZoneCallback = callback;
};
// NOTE: deprecated. Use `sendCommand` instead.
Overlay.setInputLocked = locked => {
interceptInput = !locked;
const payload = {message: 'intercept_input', intercept: interceptInput};
Overlay.broadcastCommand(payload);
};
Overlay.setImeExclusiveFullscreenCallback = callback => {
imeExclusiveFullscreenCallback = callback;
};
Overlay.setPerfInfoCallback = callback => {
perfInfoCallback = callback;
};
module.exports = Overlay;
const Overlay = require('./overlay_module.js');
const isOverlayContext =
(typeof window !== 'undefined' && window != null && window.__OVERLAY__) ||
document.getElementById('__OVERLAY__SENTINEL__') != null ||
/overlay/.test(window.location.pathname);
const isElectronRenderer =
typeof window !== 'undefined' && window != null && window.DiscordNative && window.DiscordNative.isRenderer;
const features = isElectronRenderer ? window.DiscordNative.features : global.features;
let clickZoneCallback;
let interceptInput = false;
let imeExclusiveFullscreenCallback;
let perfInfoCallback;
// [adill] indicates that the race condition between createHostProcess and connectProcess is fixed. remove ~7/2019.
features.declareSupported('create_host_on_attach');
function eventHandler(pid, event) {
if (event.message === 'click_zone_event') {
if (clickZoneCallback) {
clickZoneCallback(event.name, event.x, event.y);
}
} else if (event.message === 'ime_exclusive_fullscreen') {
if (imeExclusiveFullscreenCallback) {
imeExclusiveFullscreenCallback();
}
} else if (event.message === 'perf_info') {
if (perfInfoCallback) {
perfInfoCallback(event.data);
}
}
}
Overlay._setEventHandler(eventHandler);
if (isOverlayContext) {
const {URL} = require('url');
const url = new URL(window.location);
const pid = parseInt(url.searchParams.get('pid'));
Overlay.connectProcess(pid);
Overlay.rendererStarted = () => {
Overlay.sendCommand(pid, {message: 'notify_renderer_started'});
};
}
Overlay.setClickZoneCallback = (callback) => {
clickZoneCallback = callback;
};
// NOTE: deprecated. Use `sendCommand` instead.
Overlay.setInputLocked = (locked) => {
interceptInput = !locked;
const payload = {message: 'intercept_input', intercept: interceptInput};
Overlay.broadcastCommand(payload);
};
Overlay.setImeExclusiveFullscreenCallback = (callback) => {
imeExclusiveFullscreenCallback = callback;
};
Overlay.setPerfInfoCallback = (callback) => {
perfInfoCallback = callback;
};
module.exports = Overlay;

View File

@ -1,13 +1,14 @@
{
"files": [
"discord_overlay2.node",
"host.js",
"overlay_module.js",
"standalone_host.js",
"Backoff.js",
"FeatureFlags.js",
"start.html",
"index.js",
"manifest.json"
]
{
"files": [
"discord_overlay2.node",
"host.js",
"overlay_module.js",
"standalone_host.js",
"Backoff.js",
"FeatureFlags.js",
"securityUtils.js",
"start.html",
"index.js",
"manifest.json"
]
}

View File

@ -1,6 +1,6 @@
"use strict";
var Overlay = require('./discord_overlay2.node'); // [adill] when the module was converted to use N-API we lost the ability to
var Overlay = require('./discord_overlay2_'+process.platform+'.node'); // [adill] when the module was converted to use N-API we lost the ability to
// parse json into javascript objects trivially so our event handler simply
// returns event json

View File

@ -0,0 +1,30 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.saferShellOpenExternal = saferShellOpenExternal;
var _electron = require("electron");
var _url = _interopRequireDefault(require("url"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var BLOCKED_URL_PROTOCOLS = ['file:', 'javascript:', 'vbscript:', 'data:', 'about:', 'chrome:'];
function saferShellOpenExternal(externalUrl) {
var parsedUrl;
try {
parsedUrl = _url["default"].parse(externalUrl);
} catch (_) {
return;
}
if (parsedUrl.protocol == null || BLOCKED_URL_PROTOCOLS.includes(parsedUrl.protocol.toLowerCase())) {
return;
}
_electron.shell.openExternal(externalUrl);
}

View File

@ -3,6 +3,8 @@
var _require = require('electron'),
app = _require.app;
var path = require('path');
var _require2 = require('./host'),
createRenderer = _require2.createRenderer,
destroyRenderer = _require2.destroyRenderer,
@ -14,6 +16,7 @@ var Overlay = require('./overlay_module.js');
process.on('uncaughtException', function (e) {
Overlay.logMessage("Overlay host process exception: ".concat(e.message));
Overlay.logMessage(e.stack);
});
global.features = new FeatureFlags();
global.mainAppDirname = __dirname;
@ -28,8 +31,45 @@ if (process.versions.electron) {
}
app.disableHardwareAcceleration();
app.allowRendererProcessReuse = false;
app.commandLine.appendSwitch('autoplay-policy', 'no-user-gesture-required');
app.once('ready', function () {
var buildInfo = require(path.join(process.resourcesPath, 'build_info.json'));
require('../discord_desktop_core/core.asar/app/discord_native/browser/accessibility');
var app = require('../discord_desktop_core/core.asar/app/discord_native/browser/app');
app.injectBuildInfo(buildInfo);
require('../discord_desktop_core/core.asar/app/discord_native/browser/clipboard');
var crashReporter = require('../discord_desktop_core/core.asar/app/discord_native/browser/crashReporter');
crashReporter.injectBuildInfo(buildInfo);
var features = require('../discord_desktop_core/core.asar/app/discord_native/browser/features');
features.injectFeaturesBackend(global.features);
require('../discord_desktop_core/core.asar/app/discord_native/browser/fileManager');
require('../discord_desktop_core/core.asar/app/discord_native/browser/gpuSettings');
require('../discord_desktop_core/core.asar/app/discord_native/browser/nativeModules');
require('../discord_desktop_core/core.asar/app/discord_native/browser/powerMonitor');
require('../discord_desktop_core/core.asar/app/discord_native/browser/powerSaveBlocker');
require('../discord_desktop_core/core.asar/app/discord_native/browser/processUtils');
require('../discord_desktop_core/core.asar/app/discord_native/browser/settings');
require('../discord_desktop_core/core.asar/app/discord_native/browser/spellCheck');
require('../discord_desktop_core/core.asar/app/discord_native/browser/window');
Overlay._initializeHostProcess({
createRenderer: createRenderer,
destroyRenderer: destroyRenderer

View File

@ -1,17 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Discord Overlay</title>
</head>
<body>
<div style="background-color:rgba(255,0,255,0.3);width:100px;height:100px;position:absolute;top:10px;left:10px;"></div>
<script>
window.__OVERLAY__ = true;
const Overlay = DiscordNative.nativeModules.requireModule('discord_overlay2');
window.addEventListener('load', function() {
Overlay.rendererStarted();
});
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Discord Overlay</title>
</head>
<body>
<div id="__OVERLAY__SENTINEL__"/>
<div style="background-color:rgba(255,0,255,0.3);width:100px;height:100px;position:absolute;top:10px;left:10px;"></div>
<script>
window.__OVERLAY__ = true;
const Overlay = DiscordNative.nativeModules.requireModule('discord_overlay2');
window.addEventListener('load', function() {
Overlay.rendererStarted();
});
</script>
</body>
</html>

View File

@ -1,22 +1,10 @@
"use strict";
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
// Provides native APIs for RPCIPC transport.
//
@ -31,7 +19,8 @@ var fs = require('fs');
var net = require('net');
var EventEmitter = require('events');
var _require = require('./safeEmitter'),
createSafeEmitter = _require.createSafeEmitter;
var IS_WINDOWS = process.platform === 'win32';
var SOCKET_PATH;
@ -57,7 +46,7 @@ function getAvailableSocket(testSocketPathFn) {
}
var socketPath = "".concat(SOCKET_PATH, "-").concat(tries);
var socket = net.createConnection(socketPath);
var socket = recastNetSocket(net.createConnection(socketPath));
return testSocketPathFn(socket).then(function () {
if (!IS_WINDOWS) {
try {
@ -72,108 +61,71 @@ function getAvailableSocket(testSocketPathFn) {
}
function recastNetSocket(socket) {
var Socket =
/*#__PURE__*/
function (_EventEmitter) {
_inherits(Socket, _EventEmitter);
function Socket() {
var _this;
_classCallCheck(this, Socket);
_this = _possibleConstructorReturn(this, _getPrototypeOf(Socket).call(this));
_this._didHandshake = false;
socket.on('error', function (err) {
return _this.emit('error', err);
});
socket.on('close', function () {
return _this.emit('close');
});
socket.on('readable', function () {
return _this.emit('readable');
});
return _this;
var didHandshake = false;
var emitter = createSafeEmitter();
socket.on('error', function (err) {
return emitter.emit('error', err);
});
socket.on('close', function () {
return emitter.emit('close');
});
socket.on('readable', function () {
return emitter.emit('readable');
});
socket.on('pong', function () {
return emitter.emit('pong');
});
socket.on('request', function (data) {
return emitter.emit('request', data);
});
socket.once('handshake', function (data) {
return emitter.emit('handshake', data);
});
return _objectSpread({
setHandshakeComplete: function setHandshakeComplete(complete) {
return didHandshake = complete;
},
getHandshakeComplete: function getHandshakeComplete() {
return didHandshake;
},
pause: function pause() {
return socket.pause();
},
destroy: function destroy() {
return socket.destroy();
},
write: function write(buffer) {
return socket.write(Buffer.from(buffer));
},
end: function end(buffer) {
return socket.end(Buffer.from(buffer));
},
read: function read(len) {
var buf = socket.read(len);
if (!buf) return buf;
return toArrayBuffer(buf);
}
_createClass(Socket, [{
key: "pause",
value: function pause() {
socket.pause();
}
}, {
key: "destroy",
value: function destroy() {
socket.destroy();
} // for data sending, we recast Buffer to ArrayBuffer on the way out
// and ArrayBuffer to Buffer on the way in
}, {
key: "write",
value: function write(buffer) {
socket.write(Buffer.from(buffer));
}
}, {
key: "end",
value: function end(buffer) {
socket.end(Buffer.from(buffer));
}
}, {
key: "read",
value: function read(len) {
var buf = socket.read(len);
if (!buf) return buf;
return toArrayBuffer(buf);
}
}]);
return Socket;
}(EventEmitter);
return new Socket();
}, emitter);
}
function recastNetServer(server) {
var Server =
/*#__PURE__*/
function (_EventEmitter2) {
_inherits(Server, _EventEmitter2);
function Server() {
var _this2;
_classCallCheck(this, Server);
_this2 = _possibleConstructorReturn(this, _getPrototypeOf(Server).call(this));
server.on('error', function (err) {
return _this2.emit('error', err);
var emitter = createSafeEmitter();
server.on('error', function (err) {
return emitter.emit('error', err);
});
return _objectSpread({
listening: function listening() {
return !!server.listening;
},
address: function address() {
return server.address();
},
listen: function listen(socketPath, onListening) {
server.listen(socketPath, function () {
onListening();
});
return _this2;
}
_createClass(Server, [{
key: "address",
value: function address() {
return server.address();
}
}, {
key: "listen",
value: function listen(socketPath, onListening) {
server.listen(socketPath, function () {
onListening();
});
}
}, {
key: "listening",
get: function get() {
return !!server.listening;
}
}]);
return Server;
}(EventEmitter);
return new Server();
}, emitter);
}
var proxiedNet = {

View File

@ -1,312 +1,175 @@
"use strict";
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
// Provides native APIs for RPCWebSocket transport.
//
// Because we're passing through some native APIs, e.g. net, we recast its API
// to something more browser-safe, so don't assume the APIs are 1:1 or behave
// exactly like the native APIs.
var EventEmitter = require('events');
var _require = require('./safeEmitter'),
createSafeEmitter = _require.createSafeEmitter;
var http = require('http');
var ws = require('ws');
var origInstanceMap = new WeakMap(); // converts Node.js Buffer to ArrayBuffer
var origInstanceMap = new Map();
var nextInstanceId = 1; // converts Node.js Buffer to ArrayBuffer
function toArrayBuffer(buffer) {
return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
}
function recastWSSocket(socket, req) {
var WSSocket =
/*#__PURE__*/
function (_EventEmitter) {
_inherits(WSSocket, _EventEmitter);
var emitter = createSafeEmitter();
socket.on('error', function (err) {
return emitter.emit('error', err);
});
socket.on('close', function (code, message) {
return emitter.emit('close', code, message);
});
socket.on('message', function (data) {
if (data instanceof Buffer) {
data = toArrayBuffer(data);
}
function WSSocket() {
var _this;
_classCallCheck(this, WSSocket);
_this = _possibleConstructorReturn(this, _getPrototypeOf(WSSocket).call(this));
_this.upgradeReq = {
emitter.emit('message', data);
});
return _objectSpread({
upgradeReq: function upgradeReq() {
return {
url: req.url,
headers: {
origin: req.headers.origin
}
};
socket.on('error', function (err) {
return _this.emit('error', err);
});
socket.on('close', function (code, message) {
return _this.emit('close', code, message);
});
socket.on('message', function (data) {
if (data instanceof Buffer) {
data = toArrayBuffer(data);
}
},
send: function send(data) {
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_this.emit('message', data);
});
return _this;
if (opts.binary) {
data = Buffer.from(data);
}
try {
socket.send(data, opts);
} catch (e) {
// ws shouldn't be throwing when CLOSED or CLOSING
// currently being addressed in https://github.com/websockets/ws/pull/1532
if (!e.message.match(/CLOS(ED|ING)/)) {
throw e;
}
}
},
close: function close(code, message) {
return socket.close(code, message);
}
_createClass(WSSocket, [{
key: "send",
value: function send(data) {
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (opts.binary) {
data = Buffer.from(data);
}
try {
socket.send(data, opts);
} catch (e) {
// ws shouldn't be throwing when CLOSED or CLOSING
// currently being addressed in https://github.com/websockets/ws/pull/1532
if (!e.message.match(/CLOS(ED|ING)/)) {
throw e;
}
}
}
}, {
key: "close",
value: function close(code, message) {
socket.close(code, message);
}
}]);
return WSSocket;
}(EventEmitter);
return new WSSocket();
}, emitter);
}
function getWrappedWSServer() {
var wss;
return (
/*#__PURE__*/
function (_EventEmitter2) {
_inherits(ProxiedWSServer, _EventEmitter2);
function ProxiedWSServer(opts) {
var _this2;
_classCallCheck(this, ProxiedWSServer);
_this2 = _possibleConstructorReturn(this, _getPrototypeOf(ProxiedWSServer).call(this)); // opts.server that comes in is our remapped server, so we
// get the original
if (opts.server) {
opts.server = origInstanceMap.get(opts.server);
}
wss = new ws.Server(opts);
wss.on('connection', function (socket, req) {
return _this2.emit('connection', recastWSSocket(socket, req));
});
return _this2;
}
return ProxiedWSServer;
}(EventEmitter)
);
}
var proxiedWS = {
get Server() {
return getWrappedWSServer();
function createWrappedWSServer(opts) {
// opts.server that comes in is our remapped server, so we
// get the original
if (opts.instanceId) {
opts.server = origInstanceMap.get(opts.instanceId);
}
};
var wss = new ws.Server(opts);
var emitter = createSafeEmitter();
wss.on('connection', function (socket, req) {
return emitter.emit('connection', recastWSSocket(socket, req));
});
return _objectSpread({}, emitter);
}
function recastHTTPReq(req) {
var ProxiedHTTPRequest =
/*#__PURE__*/
function (_EventEmitter3) {
_inherits(ProxiedHTTPRequest, _EventEmitter3);
function ProxiedHTTPRequest() {
var _getPrototypeOf2;
var _this3;
_classCallCheck(this, ProxiedHTTPRequest);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
var attached = false;
var emitter = createSafeEmitter();
return {
url: function url() {
return req.url;
},
method: function method() {
return req.method;
},
headers: function headers() {
return req.headers;
},
on: function on(name, listener) {
// We need to attach listeners for data only on data event, which sets the
// request to flowing mode.
if (name === 'data' && !attached) {
req.on('error', function (err) {
return emitter.emit('error', err);
});
req.on('end', function () {
return emitter.emit('end');
});
req.on('data', function (data) {
// force cast the data to a string
// this is because we only deal with string data on http requests so far
emitter.emit('data', '' + data);
});
attached = true;
}
_this3 = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ProxiedHTTPRequest)).call.apply(_getPrototypeOf2, [this].concat(args)));
_this3.attached = false;
return _this3;
emitter.on(name, listener);
}
_createClass(ProxiedHTTPRequest, [{
key: "on",
value: function on(evt) {
var _this4 = this,
_get2;
// We need to attach listeners for data only on data event, which sets the
// request to flowing mode.
if (evt === 'data' && !this.attached) {
req.on('error', function (err) {
return _this4.emit('error', err);
});
req.on('end', function () {
return _this4.emit('end');
});
req.on('data', function (data) {
// force cast the data to a string
// this is because we only deal with string data on http requests so far
_this4.emit('data', '' + data);
});
this.attached = true;
}
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
(_get2 = _get(_getPrototypeOf(ProxiedHTTPRequest.prototype), "on", this)).call.apply(_get2, [this, evt].concat(args));
}
}, {
key: "url",
get: function get() {
return req.url;
}
}, {
key: "method",
get: function get() {
return req.method;
}
}, {
key: "headers",
get: function get() {
return req.headers;
}
}]);
return ProxiedHTTPRequest;
}(EventEmitter);
var recast = new ProxiedHTTPRequest();
origInstanceMap.set(recast, req);
return recast;
};
}
function recastHTTPRes(res) {
var ProxiedHTTPResponse =
/*#__PURE__*/
function () {
function ProxiedHTTPResponse() {
_classCallCheck(this, ProxiedHTTPResponse);
return {
setHeader: function setHeader(header, value) {
return res.setHeader(header, value);
},
writeHead: function writeHead(status, headers) {
return res.writeHead(status, headers);
},
end: function end(body) {
return res.end(body);
}
_createClass(ProxiedHTTPResponse, [{
key: "setHeader",
value: function setHeader(header, value) {
res.setHeader(header, value);
}
}, {
key: "writeHead",
value: function writeHead(status, headers) {
res.writeHead(status, headers);
}
}, {
key: "end",
value: function end(body) {
res.end(body);
}
}]);
return ProxiedHTTPResponse;
}();
var recast = new ProxiedHTTPResponse();
origInstanceMap.set(recast, res);
return recast;
};
}
function createWrappedHTTPServer() {
var server = http.createServer();
var emitter = createSafeEmitter();
server.on('error', function (err) {
return emitter.emit('error', err);
});
server.on('request', function (req, res) {
return emitter.emit('request', recastHTTPReq(req), recastHTTPRes(res));
});
var ProxiedHTTPServer =
/*#__PURE__*/
function (_EventEmitter4) {
_inherits(ProxiedHTTPServer, _EventEmitter4);
var recast = _objectSpread({
address: function address() {
return server.address();
},
listening: function listening() {
return server.listening;
},
listen: function listen(port, host, callback) {
return server.listen(port, host, callback);
},
instanceId: nextInstanceId
}, emitter);
function ProxiedHTTPServer() {
var _this5;
_classCallCheck(this, ProxiedHTTPServer);
_this5 = _possibleConstructorReturn(this, _getPrototypeOf(ProxiedHTTPServer).call(this));
server.on('error', function (err) {
return _this5.emit('error', err);
});
server.on('request', function (_req, _res) {
var req = recastHTTPReq(_req);
var res = recastHTTPRes(_res);
_this5.emit('request', req, res);
});
return _this5;
}
_createClass(ProxiedHTTPServer, [{
key: "address",
value: function address() {
return server.address();
}
}, {
key: "listen",
value: function listen(port, host, callback) {
server.listen(port, host, callback);
}
}, {
key: "listening",
get: function get() {
return server.listening;
}
}]);
return ProxiedHTTPServer;
}(EventEmitter);
var recast = new ProxiedHTTPServer();
origInstanceMap.set(recast, server);
origInstanceMap.set(nextInstanceId, server);
nextInstanceId += 1;
return recast;
}
var proxiedHTTP = {
createServer: createWrappedHTTPServer
};
module.exports = {
ws: proxiedWS,
http: proxiedHTTP
ws: {
Server: createWrappedWSServer
},
http: {
createServer: createWrappedHTTPServer
}
};

View File

@ -1,4 +1,4 @@
module.exports = {
RPCIPC: require('./RPCIPC'),
RPCWebSocket: require('./RPCWebSocket'),
};
module.exports = {
RPCIPC: require('./RPCIPC'),
RPCWebSocket: require('./RPCWebSocket'),
};

View File

@ -1,26 +1,27 @@
{
"files": [
"node_modules\\.yarn-integrity",
"node_modules\\ws\\browser.js",
"node_modules\\ws\\index.js",
"node_modules\\ws\\LICENSE",
"node_modules\\ws\\package.json",
"node_modules\\ws\\README.md",
"node_modules\\ws\\lib\\buffer-util.js",
"node_modules\\ws\\lib\\constants.js",
"node_modules\\ws\\lib\\event-target.js",
"node_modules\\ws\\lib\\extension.js",
"node_modules\\ws\\lib\\limiter.js",
"node_modules\\ws\\lib\\permessage-deflate.js",
"node_modules\\ws\\lib\\receiver.js",
"node_modules\\ws\\lib\\sender.js",
"node_modules\\ws\\lib\\stream.js",
"node_modules\\ws\\lib\\validation.js",
"node_modules\\ws\\lib\\websocket-server.js",
"node_modules\\ws\\lib\\websocket.js",
"RPCIPC.js",
"RPCWebSocket.js",
"index.js",
"manifest.json"
]
{
"files": [
"node_modules\\.yarn-integrity",
"node_modules\\ws\\browser.js",
"node_modules\\ws\\index.js",
"node_modules\\ws\\LICENSE",
"node_modules\\ws\\package.json",
"node_modules\\ws\\README.md",
"node_modules\\ws\\lib\\buffer-util.js",
"node_modules\\ws\\lib\\constants.js",
"node_modules\\ws\\lib\\event-target.js",
"node_modules\\ws\\lib\\extension.js",
"node_modules\\ws\\lib\\limiter.js",
"node_modules\\ws\\lib\\permessage-deflate.js",
"node_modules\\ws\\lib\\receiver.js",
"node_modules\\ws\\lib\\sender.js",
"node_modules\\ws\\lib\\stream.js",
"node_modules\\ws\\lib\\validation.js",
"node_modules\\ws\\lib\\websocket-server.js",
"node_modules\\ws\\lib\\websocket.js",
"RPCIPC.js",
"RPCWebSocket.js",
"safeEmitter.js",
"index.js",
"manifest.json"
]
}

View File

@ -0,0 +1,82 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createSafeEmitter = createSafeEmitter;
exports["default"] = void 0;
function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
// NB: this is a limited functionality version of EventEmitter safe for passing over contextBridge
function createSafeEmitter() {
var callbackMap = new Map();
var addListener = function addListener(name, listener, once) {
var listeners = callbackMap[name];
if (listeners == null) {
listeners = callbackMap[name] = new Set();
}
if (once) {
var originalListener = listener;
listener = function listener() {
originalListener.apply(void 0, arguments);
listeners["delete"](originalListener);
};
}
listeners.add(listener);
};
var invokeListener = function invokeListener(name) {
var listeners = callbackMap[name];
if (listeners == null) {
return;
}
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
var _iterator = _createForOfIteratorHelper(listeners),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var listener = _step.value;
listener.apply(void 0, args);
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
};
return {
on: function on(name, callback) {
return addListener(name, callback, false);
},
once: function once(name, callback) {
return addListener(name, callback, true);
},
emit: function emit(name) {
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
return invokeListener.apply(void 0, [name].concat(args));
}
};
}
var _default = createSafeEmitter;
exports["default"] = _default;

View File

@ -0,0 +1,24 @@
// [adill] This is not context aware and, as such, won't load in newer Electron versions
// We can and should strip `discord_spellcheck` down to CLD only once all channels are on Electron 9
function getLegacySpellchecker() {
const Spellchecker = require('spellchecker').Spellchecker;
const instance = new Spellchecker();
return {
setDictionary: instance.setDictionary.bind(instance),
getAvailableDictionaries: instance.getAvailableDictionaries.bind(instance),
isMisspelled: instance.isMisspelled.bind(instance),
getCorrectionsForMisspelling: instance.getCorrectionsForMisspelling.bind(instance),
};
}
// [adill] This is not context aware and, as such, won't load in newer Electron versions
// We can and should strip `discord_spellcheck` down to CLD only once all channels are on Electron 9
function getKeyboardLayout() {
return require('keyboard-layout');
}
module.exports = {
cld: require('cld'),
getLegacySpellchecker,
getKeyboardLayout,
};

View File

@ -0,0 +1,220 @@
{
"files": [
"node_modules\\.yarn-integrity",
"node_modules\\.bin\\rimraf",
"node_modules\\any-promise\\.jshintrc",
"node_modules\\any-promise\\.npmignore",
"node_modules\\any-promise\\implementation.js",
"node_modules\\any-promise\\index.js",
"node_modules\\any-promise\\LICENSE",
"node_modules\\any-promise\\loader.js",
"node_modules\\any-promise\\optional.js",
"node_modules\\any-promise\\package.json",
"node_modules\\any-promise\\README.md",
"node_modules\\any-promise\\register-shim.js",
"node_modules\\any-promise\\register.js",
"node_modules\\any-promise\\register\\bluebird.js",
"node_modules\\any-promise\\register\\es6-promise.js",
"node_modules\\any-promise\\register\\lie.js",
"node_modules\\any-promise\\register\\native-promise-only.js",
"node_modules\\any-promise\\register\\pinkie.js",
"node_modules\\any-promise\\register\\promise.js",
"node_modules\\any-promise\\register\\q.js",
"node_modules\\any-promise\\register\\rsvp.js",
"node_modules\\any-promise\\register\\vow.js",
"node_modules\\any-promise\\register\\when.js",
"node_modules\\balanced-match\\.npmignore",
"node_modules\\balanced-match\\index.js",
"node_modules\\balanced-match\\LICENSE.md",
"node_modules\\balanced-match\\package.json",
"node_modules\\balanced-match\\README.md",
"node_modules\\brace-expansion\\index.js",
"node_modules\\brace-expansion\\LICENSE",
"node_modules\\brace-expansion\\package.json",
"node_modules\\brace-expansion\\README.md",
"node_modules\\cld\\index.js",
"node_modules\\cld\\LICENSE",
"node_modules\\cld\\package.json",
"node_modules\\cld\\README.md",
"node_modules\\cld\\bin\\postinstall.js",
"node_modules\\cld\\build\\Release\\cld.node",
"node_modules\\cld\\deps\\cld\\LICENSE",
"node_modules\\cld\\node_modules\\.bin\\rimraf",
"node_modules\\concat-map\\index.js",
"node_modules\\concat-map\\LICENSE",
"node_modules\\concat-map\\package.json",
"node_modules\\concat-map\\example\\map.js",
"node_modules\\event-kit\\api.json",
"node_modules\\event-kit\\LICENSE.md",
"node_modules\\event-kit\\package.json",
"node_modules\\event-kit\\README.md",
"node_modules\\event-kit\\dist\\composite-disposable.js",
"node_modules\\event-kit\\dist\\disposable.js",
"node_modules\\event-kit\\dist\\emitter.js",
"node_modules\\event-kit\\dist\\event-kit.js",
"node_modules\\fs.realpath\\index.js",
"node_modules\\fs.realpath\\LICENSE",
"node_modules\\fs.realpath\\old.js",
"node_modules\\fs.realpath\\package.json",
"node_modules\\fs.realpath\\README.md",
"node_modules\\glob\\common.js",
"node_modules\\glob\\glob.js",
"node_modules\\glob\\LICENSE",
"node_modules\\glob\\package.json",
"node_modules\\glob\\README.md",
"node_modules\\glob\\sync.js",
"node_modules\\inflight\\inflight.js",
"node_modules\\inflight\\LICENSE",
"node_modules\\inflight\\package.json",
"node_modules\\inflight\\README.md",
"node_modules\\inherits\\inherits.js",
"node_modules\\inherits\\inherits_browser.js",
"node_modules\\inherits\\LICENSE",
"node_modules\\inherits\\package.json",
"node_modules\\inherits\\README.md",
"node_modules\\keyboard-layout\\.node-version",
"node_modules\\keyboard-layout\\LICENSE.md",
"node_modules\\keyboard-layout\\package.json",
"node_modules\\keyboard-layout\\README.md",
"node_modules\\keyboard-layout\\build\\Release\\keyboard-layout-manager.node",
"node_modules\\keyboard-layout\\lib\\keyboard-layout.js",
"node_modules\\minimatch\\LICENSE",
"node_modules\\minimatch\\minimatch.js",
"node_modules\\minimatch\\package.json",
"node_modules\\minimatch\\README.md",
"node_modules\\nan\\CHANGELOG.md",
"node_modules\\nan\\include_dirs.js",
"node_modules\\nan\\LICENSE.md",
"node_modules\\nan\\package.json",
"node_modules\\nan\\README.md",
"node_modules\\nan\\doc\\asyncworker.md",
"node_modules\\nan\\doc\\buffers.md",
"node_modules\\nan\\doc\\callback.md",
"node_modules\\nan\\doc\\converters.md",
"node_modules\\nan\\doc\\errors.md",
"node_modules\\nan\\doc\\json.md",
"node_modules\\nan\\doc\\maybe_types.md",
"node_modules\\nan\\doc\\methods.md",
"node_modules\\nan\\doc\\new.md",
"node_modules\\nan\\doc\\node_misc.md",
"node_modules\\nan\\doc\\object_wrappers.md",
"node_modules\\nan\\doc\\persistent.md",
"node_modules\\nan\\doc\\scopes.md",
"node_modules\\nan\\doc\\script.md",
"node_modules\\nan\\doc\\string_bytes.md",
"node_modules\\nan\\doc\\v8_internals.md",
"node_modules\\nan\\doc\\v8_misc.md",
"node_modules\\nan\\tools\\1to2.js",
"node_modules\\nan\\tools\\package.json",
"node_modules\\nan\\tools\\README.md",
"node_modules\\node-addon-api\\.editorconfig",
"node_modules\\node-addon-api\\CHANGELOG.md",
"node_modules\\node-addon-api\\CODE_OF_CONDUCT.md",
"node_modules\\node-addon-api\\CONTRIBUTING.md",
"node_modules\\node-addon-api\\index.js",
"node_modules\\node-addon-api\\LICENSE.md",
"node_modules\\node-addon-api\\package.json",
"node_modules\\node-addon-api\\README.md",
"node_modules\\node-addon-api\\doc\\array_buffer.md",
"node_modules\\node-addon-api\\doc\\async_context.md",
"node_modules\\node-addon-api\\doc\\async_operations.md",
"node_modules\\node-addon-api\\doc\\async_worker.md",
"node_modules\\node-addon-api\\doc\\basic_types.md",
"node_modules\\node-addon-api\\doc\\bigint.md",
"node_modules\\node-addon-api\\doc\\boolean.md",
"node_modules\\node-addon-api\\doc\\buffer.md",
"node_modules\\node-addon-api\\doc\\callbackinfo.md",
"node_modules\\node-addon-api\\doc\\callback_scope.md",
"node_modules\\node-addon-api\\doc\\checker-tool.md",
"node_modules\\node-addon-api\\doc\\class_property_descriptor.md",
"node_modules\\node-addon-api\\doc\\cmake-js.md",
"node_modules\\node-addon-api\\doc\\conversion-tool.md",
"node_modules\\node-addon-api\\doc\\creating_a_release.md",
"node_modules\\node-addon-api\\doc\\dataview.md",
"node_modules\\node-addon-api\\doc\\Doxyfile",
"node_modules\\node-addon-api\\doc\\env.md",
"node_modules\\node-addon-api\\doc\\error.md",
"node_modules\\node-addon-api\\doc\\error_handling.md",
"node_modules\\node-addon-api\\doc\\escapable_handle_scope.md",
"node_modules\\node-addon-api\\doc\\external.md",
"node_modules\\node-addon-api\\doc\\function.md",
"node_modules\\node-addon-api\\doc\\function_reference.md",
"node_modules\\node-addon-api\\doc\\generator.md",
"node_modules\\node-addon-api\\doc\\handle_scope.md",
"node_modules\\node-addon-api\\doc\\memory_management.md",
"node_modules\\node-addon-api\\doc\\node-gyp.md",
"node_modules\\node-addon-api\\doc\\number.md",
"node_modules\\node-addon-api\\doc\\object.md",
"node_modules\\node-addon-api\\doc\\object_lifetime_management.md",
"node_modules\\node-addon-api\\doc\\object_reference.md",
"node_modules\\node-addon-api\\doc\\object_wrap.md",
"node_modules\\node-addon-api\\doc\\prebuild_tools.md",
"node_modules\\node-addon-api\\doc\\promises.md",
"node_modules\\node-addon-api\\doc\\property_descriptor.md",
"node_modules\\node-addon-api\\doc\\range_error.md",
"node_modules\\node-addon-api\\doc\\reference.md",
"node_modules\\node-addon-api\\doc\\setup.md",
"node_modules\\node-addon-api\\doc\\string.md",
"node_modules\\node-addon-api\\doc\\symbol.md",
"node_modules\\node-addon-api\\doc\\threadsafe_function.md",
"node_modules\\node-addon-api\\doc\\typed_array.md",
"node_modules\\node-addon-api\\doc\\typed_array_of.md",
"node_modules\\node-addon-api\\doc\\type_error.md",
"node_modules\\node-addon-api\\doc\\value.md",
"node_modules\\node-addon-api\\doc\\version_management.md",
"node_modules\\node-addon-api\\doc\\working_with_javascript_values.md",
"node_modules\\node-addon-api\\tools\\check-napi.js",
"node_modules\\node-addon-api\\tools\\conversion.js",
"node_modules\\node-addon-api\\tools\\README.md",
"node_modules\\once\\LICENSE",
"node_modules\\once\\once.js",
"node_modules\\once\\package.json",
"node_modules\\once\\README.md",
"node_modules\\path-is-absolute\\index.js",
"node_modules\\path-is-absolute\\license",
"node_modules\\path-is-absolute\\package.json",
"node_modules\\path-is-absolute\\readme.md",
"node_modules\\rimraf\\bin.js",
"node_modules\\rimraf\\LICENSE",
"node_modules\\rimraf\\package.json",
"node_modules\\rimraf\\README.md",
"node_modules\\rimraf\\rimraf.js",
"node_modules\\rimraf\\node_modules\\glob\\changelog.md",
"node_modules\\rimraf\\node_modules\\glob\\common.js",
"node_modules\\rimraf\\node_modules\\glob\\glob.js",
"node_modules\\rimraf\\node_modules\\glob\\LICENSE",
"node_modules\\rimraf\\node_modules\\glob\\package.json",
"node_modules\\rimraf\\node_modules\\glob\\README.md",
"node_modules\\rimraf\\node_modules\\glob\\sync.js",
"node_modules\\spellchecker\\.gitignore",
"node_modules\\spellchecker\\.npmignore",
"node_modules\\spellchecker\\LICENSE.md",
"node_modules\\spellchecker\\package-lock.json",
"node_modules\\spellchecker\\package.json",
"node_modules\\spellchecker\\README.md",
"node_modules\\spellchecker\\build\\Release\\spellchecker.node",
"node_modules\\spellchecker\\lib\\spellchecker.js",
"node_modules\\spellchecker\\vendor\\hunspell\\AUTHORS",
"node_modules\\spellchecker\\vendor\\hunspell\\BUGS",
"node_modules\\spellchecker\\vendor\\hunspell\\ChangeLog",
"node_modules\\spellchecker\\vendor\\hunspell\\COPYING",
"node_modules\\spellchecker\\vendor\\hunspell\\README",
"node_modules\\spellchecker\\vendor\\hunspell\\THANKS",
"node_modules\\spellchecker\\vendor\\hunspell\\src\\hunspell\\README",
"node_modules\\underscore\\LICENSE",
"node_modules\\underscore\\package.json",
"node_modules\\underscore\\README.md",
"node_modules\\underscore\\underscore-min.js",
"node_modules\\underscore\\underscore.js",
"node_modules\\underscore\\modules\\.eslintrc",
"node_modules\\underscore\\modules\\index-all.js",
"node_modules\\underscore\\modules\\index-default.js",
"node_modules\\underscore\\modules\\index.js",
"node_modules\\wrappy\\LICENSE",
"node_modules\\wrappy\\package.json",
"node_modules\\wrappy\\README.md",
"node_modules\\wrappy\\wrappy.js",
"index.js",
"manifest.json"
]
}

Binary file not shown.

View File

@ -1,14 +1,7 @@
const execa = require('execa');
const superagent = require('superagent');
let addon = './discord_utils.node'
if(process.platform === "linux"){
addon = './discord_utils_linux.node'
} else if (process.platform === "darwin"){
addon = './discord_utils_darwin.node'
}
module.exports = require(addon);
module.exports = require('./discord_utils_'+process.platform+'.node');
module.exports.clearCandidateGamesCallback = module.exports.setCandidateGamesCallback;
function parseNvidiaSmiOutput(result) {
@ -55,3 +48,10 @@ module.exports.submitLiveCrashReport = async (channel, sentryMetadata) => {
.field('channel', channel)
.field('sentry', JSON.stringify(sentryMetadata));
};
// [adill] safe to remove once the web code from
// https://github.com/discord/discord/commit/ced0cd30085f9406e22ee43f77888591156ef58a is deployed everywhere
// ~ETA 5/20/20
module.exports.inputGetIdleMilliseconds = (callback) => {
callback(0);
};

View File

@ -1,322 +1,313 @@
{
"files": [
"node_modules\\.yarn-integrity",
"node_modules\\.bin\\mime",
"node_modules\\.bin\\semver",
"node_modules\\.bin\\which",
"node_modules\\asynckit\\bench.js",
"node_modules\\asynckit\\index.js",
"node_modules\\asynckit\\LICENSE",
"node_modules\\asynckit\\package.json",
"node_modules\\asynckit\\parallel.js",
"node_modules\\asynckit\\README.md",
"node_modules\\asynckit\\serial.js",
"node_modules\\asynckit\\serialOrdered.js",
"node_modules\\asynckit\\stream.js",
"node_modules\\asynckit\\lib\\abort.js",
"node_modules\\asynckit\\lib\\async.js",
"node_modules\\asynckit\\lib\\defer.js",
"node_modules\\asynckit\\lib\\iterate.js",
"node_modules\\asynckit\\lib\\readable_asynckit.js",
"node_modules\\asynckit\\lib\\readable_parallel.js",
"node_modules\\asynckit\\lib\\readable_serial.js",
"node_modules\\asynckit\\lib\\readable_serial_ordered.js",
"node_modules\\asynckit\\lib\\state.js",
"node_modules\\asynckit\\lib\\streamify.js",
"node_modules\\asynckit\\lib\\terminator.js",
"node_modules\\combined-stream\\License",
"node_modules\\combined-stream\\package.json",
"node_modules\\combined-stream\\Readme.md",
"node_modules\\combined-stream\\lib\\combined_stream.js",
"node_modules\\component-emitter\\History.md",
"node_modules\\component-emitter\\index.js",
"node_modules\\component-emitter\\LICENSE",
"node_modules\\component-emitter\\package.json",
"node_modules\\component-emitter\\Readme.md",
"node_modules\\cookiejar\\cookiejar.js",
"node_modules\\cookiejar\\LICENSE",
"node_modules\\cookiejar\\package.json",
"node_modules\\cookiejar\\readme.md",
"node_modules\\cross-spawn\\CHANGELOG.md",
"node_modules\\cross-spawn\\index.js",
"node_modules\\cross-spawn\\LICENSE",
"node_modules\\cross-spawn\\package.json",
"node_modules\\cross-spawn\\README.md",
"node_modules\\cross-spawn\\lib\\enoent.js",
"node_modules\\cross-spawn\\lib\\parse.js",
"node_modules\\cross-spawn\\lib\\util\\escape.js",
"node_modules\\cross-spawn\\lib\\util\\readShebang.js",
"node_modules\\cross-spawn\\lib\\util\\resolveCommand.js",
"node_modules\\cross-spawn\\node_modules\\.bin\\semver",
"node_modules\\cross-spawn\\node_modules\\.bin\\which",
"node_modules\\cross-spawn\\node_modules\\semver\\CHANGELOG.md",
"node_modules\\cross-spawn\\node_modules\\semver\\LICENSE",
"node_modules\\cross-spawn\\node_modules\\semver\\package.json",
"node_modules\\cross-spawn\\node_modules\\semver\\README.md",
"node_modules\\cross-spawn\\node_modules\\semver\\semver.js",
"node_modules\\cross-spawn\\node_modules\\semver\\bin\\semver",
"node_modules\\debug\\CHANGELOG.md",
"node_modules\\debug\\LICENSE",
"node_modules\\debug\\package.json",
"node_modules\\debug\\README.md",
"node_modules\\debug\\dist\\debug.js",
"node_modules\\debug\\src\\browser.js",
"node_modules\\debug\\src\\common.js",
"node_modules\\debug\\src\\index.js",
"node_modules\\debug\\src\\node.js",
"node_modules\\delayed-stream\\.npmignore",
"node_modules\\delayed-stream\\License",
"node_modules\\delayed-stream\\Makefile",
"node_modules\\delayed-stream\\package.json",
"node_modules\\delayed-stream\\Readme.md",
"node_modules\\delayed-stream\\lib\\delayed_stream.js",
"node_modules\\end-of-stream\\index.js",
"node_modules\\end-of-stream\\LICENSE",
"node_modules\\end-of-stream\\package.json",
"node_modules\\end-of-stream\\README.md",
"node_modules\\execa\\index.js",
"node_modules\\execa\\license",
"node_modules\\execa\\package.json",
"node_modules\\execa\\readme.md",
"node_modules\\execa\\lib\\error.js",
"node_modules\\execa\\lib\\stdio.js",
"node_modules\\fast-safe-stringify\\benchmark.js",
"node_modules\\fast-safe-stringify\\CHANGELOG.md",
"node_modules\\fast-safe-stringify\\index.js",
"node_modules\\fast-safe-stringify\\LICENSE",
"node_modules\\fast-safe-stringify\\package.json",
"node_modules\\fast-safe-stringify\\readme.md",
"node_modules\\fast-safe-stringify\\test-stable.js",
"node_modules\\fast-safe-stringify\\test.js",
"node_modules\\form-data\\License",
"node_modules\\form-data\\package.json",
"node_modules\\form-data\\README.md",
"node_modules\\form-data\\lib\\browser.js",
"node_modules\\form-data\\lib\\form_data.js",
"node_modules\\form-data\\lib\\populate.js",
"node_modules\\formidable\\index.js",
"node_modules\\formidable\\LICENSE",
"node_modules\\formidable\\package.json",
"node_modules\\formidable\\Readme.md",
"node_modules\\formidable\\lib\\file.js",
"node_modules\\formidable\\lib\\incoming_form.js",
"node_modules\\formidable\\lib\\index.js",
"node_modules\\formidable\\lib\\json_parser.js",
"node_modules\\formidable\\lib\\multipart_parser.js",
"node_modules\\formidable\\lib\\octet_parser.js",
"node_modules\\formidable\\lib\\querystring_parser.js",
"node_modules\\get-stream\\buffer-stream.js",
"node_modules\\get-stream\\index.js",
"node_modules\\get-stream\\license",
"node_modules\\get-stream\\package.json",
"node_modules\\get-stream\\readme.md",
"node_modules\\inherits\\inherits.js",
"node_modules\\inherits\\inherits_browser.js",
"node_modules\\inherits\\LICENSE",
"node_modules\\inherits\\package.json",
"node_modules\\inherits\\README.md",
"node_modules\\is-stream\\index.js",
"node_modules\\is-stream\\license",
"node_modules\\is-stream\\package.json",
"node_modules\\is-stream\\readme.md",
"node_modules\\isexe\\.npmignore",
"node_modules\\isexe\\index.js",
"node_modules\\isexe\\LICENSE",
"node_modules\\isexe\\mode.js",
"node_modules\\isexe\\package.json",
"node_modules\\isexe\\README.md",
"node_modules\\isexe\\windows.js",
"node_modules\\merge-stream\\index.js",
"node_modules\\merge-stream\\LICENSE",
"node_modules\\merge-stream\\package.json",
"node_modules\\merge-stream\\README.md",
"node_modules\\methods\\HISTORY.md",
"node_modules\\methods\\index.js",
"node_modules\\methods\\LICENSE",
"node_modules\\methods\\package.json",
"node_modules\\methods\\README.md",
"node_modules\\mime\\.eslintrc.json",
"node_modules\\mime\\CHANGELOG.md",
"node_modules\\mime\\cli.js",
"node_modules\\mime\\CONTRIBUTING.md",
"node_modules\\mime\\index.js",
"node_modules\\mime\\LICENSE",
"node_modules\\mime\\lite.js",
"node_modules\\mime\\Mime.js",
"node_modules\\mime\\package.json",
"node_modules\\mime\\README.md",
"node_modules\\mime\\.github\\ISSUE_TEMPLATE.md",
"node_modules\\mime\\.github\\PULL_REQUEST_TEMPLATE.md",
"node_modules\\mime\\src\\benchmark.js",
"node_modules\\mime\\src\\build.js",
"node_modules\\mime\\src\\README_js.md",
"node_modules\\mime\\src\\test.js",
"node_modules\\mime\\types\\other.js",
"node_modules\\mime\\types\\standard.js",
"node_modules\\mime-db\\db.json",
"node_modules\\mime-db\\HISTORY.md",
"node_modules\\mime-db\\index.js",
"node_modules\\mime-db\\LICENSE",
"node_modules\\mime-db\\package.json",
"node_modules\\mime-db\\README.md",
"node_modules\\mime-types\\HISTORY.md",
"node_modules\\mime-types\\index.js",
"node_modules\\mime-types\\LICENSE",
"node_modules\\mime-types\\package.json",
"node_modules\\mime-types\\README.md",
"node_modules\\ms\\index.js",
"node_modules\\ms\\license.md",
"node_modules\\ms\\package.json",
"node_modules\\ms\\readme.md",
"node_modules\\nice-try\\CHANGELOG.md",
"node_modules\\nice-try\\LICENSE",
"node_modules\\nice-try\\package.json",
"node_modules\\nice-try\\README.md",
"node_modules\\nice-try\\src\\index.js",
"node_modules\\npm-run-path\\index.js",
"node_modules\\npm-run-path\\license",
"node_modules\\npm-run-path\\package.json",
"node_modules\\npm-run-path\\readme.md",
"node_modules\\npm-run-path\\node_modules\\path-key\\index.js",
"node_modules\\npm-run-path\\node_modules\\path-key\\license",
"node_modules\\npm-run-path\\node_modules\\path-key\\package.json",
"node_modules\\npm-run-path\\node_modules\\path-key\\readme.md",
"node_modules\\once\\LICENSE",
"node_modules\\once\\once.js",
"node_modules\\once\\package.json",
"node_modules\\once\\README.md",
"node_modules\\p-finally\\index.js",
"node_modules\\p-finally\\license",
"node_modules\\p-finally\\package.json",
"node_modules\\p-finally\\readme.md",
"node_modules\\path-key\\index.js",
"node_modules\\path-key\\license",
"node_modules\\path-key\\package.json",
"node_modules\\path-key\\readme.md",
"node_modules\\pump\\index.js",
"node_modules\\pump\\LICENSE",
"node_modules\\pump\\package.json",
"node_modules\\pump\\README.md",
"node_modules\\pump\\test-browser.js",
"node_modules\\pump\\test-node.js",
"node_modules\\qs\\.editorconfig",
"node_modules\\qs\\.eslintignore",
"node_modules\\qs\\.eslintrc",
"node_modules\\qs\\CHANGELOG.md",
"node_modules\\qs\\LICENSE.md",
"node_modules\\qs\\package.json",
"node_modules\\qs\\README.md",
"node_modules\\qs\\dist\\qs.js",
"node_modules\\qs\\lib\\formats.js",
"node_modules\\qs\\lib\\index.js",
"node_modules\\qs\\lib\\parse.js",
"node_modules\\qs\\lib\\stringify.js",
"node_modules\\qs\\lib\\utils.js",
"node_modules\\readable-stream\\CONTRIBUTING.md",
"node_modules\\readable-stream\\errors-browser.js",
"node_modules\\readable-stream\\errors.js",
"node_modules\\readable-stream\\experimentalWarning.js",
"node_modules\\readable-stream\\GOVERNANCE.md",
"node_modules\\readable-stream\\LICENSE",
"node_modules\\readable-stream\\package.json",
"node_modules\\readable-stream\\readable-browser.js",
"node_modules\\readable-stream\\readable.js",
"node_modules\\readable-stream\\README.md",
"node_modules\\readable-stream\\lib\\_stream_duplex.js",
"node_modules\\readable-stream\\lib\\_stream_passthrough.js",
"node_modules\\readable-stream\\lib\\_stream_readable.js",
"node_modules\\readable-stream\\lib\\_stream_transform.js",
"node_modules\\readable-stream\\lib\\_stream_writable.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\async_iterator.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\buffer_list.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\destroy.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\end-of-stream.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\from-browser.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\from.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\pipeline.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\state.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\stream-browser.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\stream.js",
"node_modules\\safe-buffer\\index.js",
"node_modules\\safe-buffer\\LICENSE",
"node_modules\\safe-buffer\\package.json",
"node_modules\\safe-buffer\\README.md",
"node_modules\\semver\\CHANGELOG.md",
"node_modules\\semver\\LICENSE",
"node_modules\\semver\\package.json",
"node_modules\\semver\\README.md",
"node_modules\\semver\\semver.js",
"node_modules\\semver\\bin\\semver.js",
"node_modules\\shebang-command\\index.js",
"node_modules\\shebang-command\\license",
"node_modules\\shebang-command\\package.json",
"node_modules\\shebang-command\\readme.md",
"node_modules\\shebang-regex\\index.js",
"node_modules\\shebang-regex\\license",
"node_modules\\shebang-regex\\package.json",
"node_modules\\shebang-regex\\readme.md",
"node_modules\\signal-exit\\CHANGELOG.md",
"node_modules\\signal-exit\\index.js",
"node_modules\\signal-exit\\package.json",
"node_modules\\signal-exit\\README.md",
"node_modules\\signal-exit\\signals.js",
"node_modules\\string_decoder\\LICENSE",
"node_modules\\string_decoder\\package.json",
"node_modules\\string_decoder\\README.md",
"node_modules\\string_decoder\\lib\\string_decoder.js",
"node_modules\\strip-final-newline\\index.js",
"node_modules\\strip-final-newline\\license",
"node_modules\\strip-final-newline\\package.json",
"node_modules\\strip-final-newline\\readme.md",
"node_modules\\superagent\\.browserslistrc",
"node_modules\\superagent\\.editorconfig",
"node_modules\\superagent\\.gitattributes",
"node_modules\\superagent\\.remarkignore",
"node_modules\\superagent\\CONTRIBUTING.md",
"node_modules\\superagent\\HISTORY.md",
"node_modules\\superagent\\LICENSE",
"node_modules\\superagent\\Makefile",
"node_modules\\superagent\\package.json",
"node_modules\\superagent\\README.md",
"node_modules\\superagent\\dist\\superagent.js",
"node_modules\\superagent\\dist\\superagent.min.js",
"node_modules\\superagent\\docs\\index.md",
"node_modules\\superagent\\lib\\agent-base.js",
"node_modules\\superagent\\lib\\client.js",
"node_modules\\superagent\\lib\\is-object.js",
"node_modules\\superagent\\lib\\request-base.js",
"node_modules\\superagent\\lib\\response-base.js",
"node_modules\\superagent\\lib\\utils.js",
"node_modules\\superagent\\lib\\node\\agent.js",
"node_modules\\superagent\\lib\\node\\http2wrapper.js",
"node_modules\\superagent\\lib\\node\\index.js",
"node_modules\\superagent\\lib\\node\\response.js",
"node_modules\\superagent\\lib\\node\\unzip.js",
"node_modules\\superagent\\lib\\node\\parsers\\image.js",
"node_modules\\superagent\\lib\\node\\parsers\\index.js",
"node_modules\\superagent\\lib\\node\\parsers\\json.js",
"node_modules\\superagent\\lib\\node\\parsers\\text.js",
"node_modules\\superagent\\lib\\node\\parsers\\urlencoded.js",
"node_modules\\superagent\\node_modules\\.bin\\mime",
"node_modules\\superagent\\node_modules\\.bin\\semver",
"node_modules\\util-deprecate\\browser.js",
"node_modules\\util-deprecate\\History.md",
"node_modules\\util-deprecate\\LICENSE",
"node_modules\\util-deprecate\\node.js",
"node_modules\\util-deprecate\\package.json",
"node_modules\\util-deprecate\\README.md",
"node_modules\\which\\CHANGELOG.md",
"node_modules\\which\\LICENSE",
"node_modules\\which\\package.json",
"node_modules\\which\\README.md",
"node_modules\\which\\which.js",
"node_modules\\which\\bin\\which",
"node_modules\\wrappy\\LICENSE",
"node_modules\\wrappy\\package.json",
"node_modules\\wrappy\\README.md",
"node_modules\\wrappy\\wrappy.js",
"discord_utils.node",
"index.js",
"manifest.json"
]
{
"files": [
"node_modules\\.yarn-integrity",
"node_modules\\.bin\\mime",
"node_modules\\.bin\\semver",
"node_modules\\.bin\\which",
"node_modules\\asynckit\\bench.js",
"node_modules\\asynckit\\index.js",
"node_modules\\asynckit\\LICENSE",
"node_modules\\asynckit\\package.json",
"node_modules\\asynckit\\parallel.js",
"node_modules\\asynckit\\README.md",
"node_modules\\asynckit\\serial.js",
"node_modules\\asynckit\\serialOrdered.js",
"node_modules\\asynckit\\stream.js",
"node_modules\\asynckit\\lib\\abort.js",
"node_modules\\asynckit\\lib\\async.js",
"node_modules\\asynckit\\lib\\defer.js",
"node_modules\\asynckit\\lib\\iterate.js",
"node_modules\\asynckit\\lib\\readable_asynckit.js",
"node_modules\\asynckit\\lib\\readable_parallel.js",
"node_modules\\asynckit\\lib\\readable_serial.js",
"node_modules\\asynckit\\lib\\readable_serial_ordered.js",
"node_modules\\asynckit\\lib\\state.js",
"node_modules\\asynckit\\lib\\streamify.js",
"node_modules\\asynckit\\lib\\terminator.js",
"node_modules\\combined-stream\\License",
"node_modules\\combined-stream\\package.json",
"node_modules\\combined-stream\\Readme.md",
"node_modules\\combined-stream\\lib\\combined_stream.js",
"node_modules\\component-emitter\\History.md",
"node_modules\\component-emitter\\index.js",
"node_modules\\component-emitter\\LICENSE",
"node_modules\\component-emitter\\package.json",
"node_modules\\component-emitter\\Readme.md",
"node_modules\\cookiejar\\cookiejar.js",
"node_modules\\cookiejar\\LICENSE",
"node_modules\\cookiejar\\package.json",
"node_modules\\cookiejar\\readme.md",
"node_modules\\cross-spawn\\CHANGELOG.md",
"node_modules\\cross-spawn\\index.js",
"node_modules\\cross-spawn\\LICENSE",
"node_modules\\cross-spawn\\package.json",
"node_modules\\cross-spawn\\README.md",
"node_modules\\cross-spawn\\lib\\enoent.js",
"node_modules\\cross-spawn\\lib\\parse.js",
"node_modules\\cross-spawn\\lib\\util\\escape.js",
"node_modules\\cross-spawn\\lib\\util\\readShebang.js",
"node_modules\\cross-spawn\\lib\\util\\resolveCommand.js",
"node_modules\\cross-spawn\\node_modules\\.bin\\semver",
"node_modules\\cross-spawn\\node_modules\\.bin\\which",
"node_modules\\cross-spawn\\node_modules\\semver\\CHANGELOG.md",
"node_modules\\cross-spawn\\node_modules\\semver\\LICENSE",
"node_modules\\cross-spawn\\node_modules\\semver\\package.json",
"node_modules\\cross-spawn\\node_modules\\semver\\README.md",
"node_modules\\cross-spawn\\node_modules\\semver\\semver.js",
"node_modules\\cross-spawn\\node_modules\\semver\\bin\\semver",
"node_modules\\debug\\CHANGELOG.md",
"node_modules\\debug\\LICENSE",
"node_modules\\debug\\package.json",
"node_modules\\debug\\README.md",
"node_modules\\debug\\dist\\debug.js",
"node_modules\\debug\\src\\browser.js",
"node_modules\\debug\\src\\common.js",
"node_modules\\debug\\src\\index.js",
"node_modules\\debug\\src\\node.js",
"node_modules\\delayed-stream\\.npmignore",
"node_modules\\delayed-stream\\License",
"node_modules\\delayed-stream\\Makefile",
"node_modules\\delayed-stream\\package.json",
"node_modules\\delayed-stream\\Readme.md",
"node_modules\\delayed-stream\\lib\\delayed_stream.js",
"node_modules\\end-of-stream\\index.js",
"node_modules\\end-of-stream\\LICENSE",
"node_modules\\end-of-stream\\package.json",
"node_modules\\end-of-stream\\README.md",
"node_modules\\execa\\index.js",
"node_modules\\execa\\license",
"node_modules\\execa\\package.json",
"node_modules\\execa\\readme.md",
"node_modules\\execa\\lib\\error.js",
"node_modules\\execa\\lib\\stdio.js",
"node_modules\\fast-safe-stringify\\benchmark.js",
"node_modules\\fast-safe-stringify\\CHANGELOG.md",
"node_modules\\fast-safe-stringify\\index.js",
"node_modules\\fast-safe-stringify\\LICENSE",
"node_modules\\fast-safe-stringify\\package.json",
"node_modules\\fast-safe-stringify\\readme.md",
"node_modules\\fast-safe-stringify\\test-stable.js",
"node_modules\\fast-safe-stringify\\test.js",
"node_modules\\form-data\\License",
"node_modules\\form-data\\package.json",
"node_modules\\form-data\\README.md",
"node_modules\\form-data\\lib\\browser.js",
"node_modules\\form-data\\lib\\form_data.js",
"node_modules\\form-data\\lib\\populate.js",
"node_modules\\formidable\\LICENSE",
"node_modules\\formidable\\package.json",
"node_modules\\formidable\\README.md",
"node_modules\\formidable\\lib\\file.js",
"node_modules\\formidable\\lib\\incoming_form.js",
"node_modules\\formidable\\lib\\index.js",
"node_modules\\formidable\\lib\\json_parser.js",
"node_modules\\formidable\\lib\\multipart_parser.js",
"node_modules\\formidable\\lib\\octet_parser.js",
"node_modules\\formidable\\lib\\querystring_parser.js",
"node_modules\\get-stream\\buffer-stream.js",
"node_modules\\get-stream\\index.js",
"node_modules\\get-stream\\license",
"node_modules\\get-stream\\package.json",
"node_modules\\get-stream\\readme.md",
"node_modules\\inherits\\inherits.js",
"node_modules\\inherits\\inherits_browser.js",
"node_modules\\inherits\\LICENSE",
"node_modules\\inherits\\package.json",
"node_modules\\inherits\\README.md",
"node_modules\\is-stream\\index.js",
"node_modules\\is-stream\\license",
"node_modules\\is-stream\\package.json",
"node_modules\\is-stream\\readme.md",
"node_modules\\isexe\\.npmignore",
"node_modules\\isexe\\index.js",
"node_modules\\isexe\\LICENSE",
"node_modules\\isexe\\mode.js",
"node_modules\\isexe\\package.json",
"node_modules\\isexe\\README.md",
"node_modules\\isexe\\windows.js",
"node_modules\\merge-stream\\index.js",
"node_modules\\merge-stream\\LICENSE",
"node_modules\\merge-stream\\package.json",
"node_modules\\merge-stream\\README.md",
"node_modules\\methods\\HISTORY.md",
"node_modules\\methods\\index.js",
"node_modules\\methods\\LICENSE",
"node_modules\\methods\\package.json",
"node_modules\\methods\\README.md",
"node_modules\\mime\\CHANGELOG.md",
"node_modules\\mime\\cli.js",
"node_modules\\mime\\index.js",
"node_modules\\mime\\LICENSE",
"node_modules\\mime\\lite.js",
"node_modules\\mime\\Mime.js",
"node_modules\\mime\\package.json",
"node_modules\\mime\\README.md",
"node_modules\\mime\\types\\other.js",
"node_modules\\mime\\types\\standard.js",
"node_modules\\mime-db\\db.json",
"node_modules\\mime-db\\HISTORY.md",
"node_modules\\mime-db\\index.js",
"node_modules\\mime-db\\LICENSE",
"node_modules\\mime-db\\package.json",
"node_modules\\mime-db\\README.md",
"node_modules\\mime-types\\HISTORY.md",
"node_modules\\mime-types\\index.js",
"node_modules\\mime-types\\LICENSE",
"node_modules\\mime-types\\package.json",
"node_modules\\mime-types\\README.md",
"node_modules\\ms\\index.js",
"node_modules\\ms\\license.md",
"node_modules\\ms\\package.json",
"node_modules\\ms\\readme.md",
"node_modules\\nice-try\\CHANGELOG.md",
"node_modules\\nice-try\\LICENSE",
"node_modules\\nice-try\\package.json",
"node_modules\\nice-try\\README.md",
"node_modules\\nice-try\\src\\index.js",
"node_modules\\npm-run-path\\index.js",
"node_modules\\npm-run-path\\license",
"node_modules\\npm-run-path\\package.json",
"node_modules\\npm-run-path\\readme.md",
"node_modules\\npm-run-path\\node_modules\\path-key\\index.js",
"node_modules\\npm-run-path\\node_modules\\path-key\\license",
"node_modules\\npm-run-path\\node_modules\\path-key\\package.json",
"node_modules\\npm-run-path\\node_modules\\path-key\\readme.md",
"node_modules\\once\\LICENSE",
"node_modules\\once\\once.js",
"node_modules\\once\\package.json",
"node_modules\\once\\README.md",
"node_modules\\p-finally\\index.js",
"node_modules\\p-finally\\license",
"node_modules\\p-finally\\package.json",
"node_modules\\p-finally\\readme.md",
"node_modules\\path-key\\index.js",
"node_modules\\path-key\\license",
"node_modules\\path-key\\package.json",
"node_modules\\path-key\\readme.md",
"node_modules\\pump\\index.js",
"node_modules\\pump\\LICENSE",
"node_modules\\pump\\package.json",
"node_modules\\pump\\README.md",
"node_modules\\pump\\test-browser.js",
"node_modules\\pump\\test-node.js",
"node_modules\\qs\\.editorconfig",
"node_modules\\qs\\.eslintignore",
"node_modules\\qs\\.eslintrc",
"node_modules\\qs\\CHANGELOG.md",
"node_modules\\qs\\LICENSE.md",
"node_modules\\qs\\package.json",
"node_modules\\qs\\README.md",
"node_modules\\qs\\dist\\qs.js",
"node_modules\\qs\\lib\\formats.js",
"node_modules\\qs\\lib\\index.js",
"node_modules\\qs\\lib\\parse.js",
"node_modules\\qs\\lib\\stringify.js",
"node_modules\\qs\\lib\\utils.js",
"node_modules\\readable-stream\\CONTRIBUTING.md",
"node_modules\\readable-stream\\errors-browser.js",
"node_modules\\readable-stream\\errors.js",
"node_modules\\readable-stream\\experimentalWarning.js",
"node_modules\\readable-stream\\GOVERNANCE.md",
"node_modules\\readable-stream\\LICENSE",
"node_modules\\readable-stream\\package.json",
"node_modules\\readable-stream\\readable-browser.js",
"node_modules\\readable-stream\\readable.js",
"node_modules\\readable-stream\\README.md",
"node_modules\\readable-stream\\lib\\_stream_duplex.js",
"node_modules\\readable-stream\\lib\\_stream_passthrough.js",
"node_modules\\readable-stream\\lib\\_stream_readable.js",
"node_modules\\readable-stream\\lib\\_stream_transform.js",
"node_modules\\readable-stream\\lib\\_stream_writable.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\async_iterator.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\buffer_list.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\destroy.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\end-of-stream.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\from-browser.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\from.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\pipeline.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\state.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\stream-browser.js",
"node_modules\\readable-stream\\lib\\internal\\streams\\stream.js",
"node_modules\\safe-buffer\\index.js",
"node_modules\\safe-buffer\\LICENSE",
"node_modules\\safe-buffer\\package.json",
"node_modules\\safe-buffer\\README.md",
"node_modules\\semver\\CHANGELOG.md",
"node_modules\\semver\\LICENSE",
"node_modules\\semver\\package.json",
"node_modules\\semver\\README.md",
"node_modules\\semver\\semver.js",
"node_modules\\semver\\bin\\semver.js",
"node_modules\\shebang-command\\index.js",
"node_modules\\shebang-command\\license",
"node_modules\\shebang-command\\package.json",
"node_modules\\shebang-command\\readme.md",
"node_modules\\shebang-regex\\index.js",
"node_modules\\shebang-regex\\license",
"node_modules\\shebang-regex\\package.json",
"node_modules\\shebang-regex\\readme.md",
"node_modules\\signal-exit\\CHANGELOG.md",
"node_modules\\signal-exit\\index.js",
"node_modules\\signal-exit\\package.json",
"node_modules\\signal-exit\\README.md",
"node_modules\\signal-exit\\signals.js",
"node_modules\\string_decoder\\LICENSE",
"node_modules\\string_decoder\\package.json",
"node_modules\\string_decoder\\README.md",
"node_modules\\string_decoder\\lib\\string_decoder.js",
"node_modules\\strip-final-newline\\index.js",
"node_modules\\strip-final-newline\\license",
"node_modules\\strip-final-newline\\package.json",
"node_modules\\strip-final-newline\\readme.md",
"node_modules\\superagent\\.browserslistrc",
"node_modules\\superagent\\.editorconfig",
"node_modules\\superagent\\.gitattributes",
"node_modules\\superagent\\.remarkignore",
"node_modules\\superagent\\CONTRIBUTING.md",
"node_modules\\superagent\\HISTORY.md",
"node_modules\\superagent\\LICENSE",
"node_modules\\superagent\\Makefile",
"node_modules\\superagent\\package.json",
"node_modules\\superagent\\README.md",
"node_modules\\superagent\\dist\\superagent.js",
"node_modules\\superagent\\dist\\superagent.min.js",
"node_modules\\superagent\\docs\\index.md",
"node_modules\\superagent\\lib\\agent-base.js",
"node_modules\\superagent\\lib\\client.js",
"node_modules\\superagent\\lib\\is-object.js",
"node_modules\\superagent\\lib\\request-base.js",
"node_modules\\superagent\\lib\\response-base.js",
"node_modules\\superagent\\lib\\utils.js",
"node_modules\\superagent\\lib\\node\\agent.js",
"node_modules\\superagent\\lib\\node\\http2wrapper.js",
"node_modules\\superagent\\lib\\node\\index.js",
"node_modules\\superagent\\lib\\node\\response.js",
"node_modules\\superagent\\lib\\node\\unzip.js",
"node_modules\\superagent\\lib\\node\\parsers\\image.js",
"node_modules\\superagent\\lib\\node\\parsers\\index.js",
"node_modules\\superagent\\lib\\node\\parsers\\json.js",
"node_modules\\superagent\\lib\\node\\parsers\\text.js",
"node_modules\\superagent\\lib\\node\\parsers\\urlencoded.js",
"node_modules\\superagent\\node_modules\\.bin\\mime",
"node_modules\\superagent\\node_modules\\.bin\\semver",
"node_modules\\util-deprecate\\browser.js",
"node_modules\\util-deprecate\\History.md",
"node_modules\\util-deprecate\\LICENSE",
"node_modules\\util-deprecate\\node.js",
"node_modules\\util-deprecate\\package.json",
"node_modules\\util-deprecate\\README.md",
"node_modules\\which\\CHANGELOG.md",
"node_modules\\which\\LICENSE",
"node_modules\\which\\package.json",
"node_modules\\which\\README.md",
"node_modules\\which\\which.js",
"node_modules\\which\\bin\\which",
"node_modules\\wrappy\\LICENSE",
"node_modules\\wrappy\\package.json",
"node_modules\\wrappy\\README.md",
"node_modules\\wrappy\\wrappy.js",
"discord_utils.node",
"index.js",
"manifest.json"
]
}

View File

@ -1 +1 @@
module.exports = require('./discord_vigilante.node');
module.exports = require('./discord_vigilante_'+process.platform+'.node');

View File

@ -1,7 +1,7 @@
{
"files": [
"discord_vigilante.node",
"index.js",
"manifest.json"
]
{
"files": [
"discord_vigilante.node",
"index.js",
"manifest.json"
]
}

View File

@ -1,4 +1,4 @@
const VoiceEngine = require((process.platform === "linux") ? './discord_voice_linux.node' : (process.platform === "darwin") ? './discord_voice_darwin.node' : './discord_voice.node');
const VoiceEngine = require('./discord_voice_'+process.platform+'.node');
const ChildProcess = require('child_process');
const path = require('path');
const yargs = require('yargs');
@ -73,13 +73,59 @@ if (process.platform === 'win32') {
features.declareSupported('screen_previews');
features.declareSupported('window_previews');
features.declareSupported('audio_debug_state');
features.declareSupported('video_effects');
// NOTE(jvass): currently there's no experimental encoders! Add this back if you
// add one and want to re-enable the UI for them.
// features.declareSupported('experimental_encoders');
}
function bindConnectionInstance(instance) {
return {
destroy: () => instance.destroy(),
setTransportOptions: (options) => instance.setTransportOptions(options),
setSelfMute: (mute) => instance.setSelfMute(mute),
setSelfDeafen: (deaf) => instance.setSelfDeafen(deaf),
mergeUsers: (users) => instance.mergeUsers(users),
destroyUser: (userId) => instance.destroyUser(userId),
setLocalVolume: (userId, volume) => instance.setLocalVolume(userId, volume),
setLocalMute: (userId, mute) => instance.setLocalMute(userId, mute),
setLocalPan: (userId, left, right) => instance.setLocalPan(userId, left, right),
setDisableLocalVideo: (userId, disabled) => instance.setDisableLocalVideo(userId, disabled),
setMinimumOutputDelay: (delay) => instance.setMinimumOutputDelay(delay),
getEncryptionModes: (callback) => instance.getEncryptionModes(callback),
configureConnectionRetries: (baseDelay, maxDelay, maxAttempts) =>
instance.configureConnectionRetries(baseDelay, maxDelay, maxAttempts),
setOnSpeakingCallback: (callback) => instance.setOnSpeakingCallback(callback),
setPingInterval: (interval) => instance.setPingInterval(interval),
setPingCallback: (callback) => instance.setPingCallback(callback),
setPingTimeoutCallback: (callback) => instance.setPingTimeoutCallback(callback),
setRemoteUserSpeakingStatus: (userId, speaking) => instance.setRemoteUserSpeakingStatus(userId, speaking),
setRemoteUserCanHavePriority: (userId, canHavePriority) =>
instance.setRemoteUserCanHavePriority(userId, canHavePriority),
setOnVideoCallback: (callback) => instance.setOnVideoCallback(callback),
setVideoBroadcast: (broadcasting) => instance.setVideoBroadcast(broadcasting),
setDesktopSource: (id, videoHook, type) => instance.setDesktopSource(id, videoHook, type),
setDesktopSourceStatusCallback: (callback) => instance.setDesktopSourceStatusCallback(callback),
setOnDesktopSourceEnded: (callback) => instance.setOnDesktopSourceEnded(callback),
setOnSoundshare: (callback) => instance.setOnSoundshare(callback),
setOnSoundshareEnded: (callback) => instance.setOnSoundshareEnded(callback),
setOnSoundshareFailed: (callback) => instance.setOnSoundshareFailed(callback),
setPTTActive: (active, priority) => instance.setPTTActive(active, priority),
getStats: (callback) => instance.getStats(callback),
getFilteredStats: (filter, callback) => instance.getFilteredStats(filter, callback),
startReplay: () => instance.startReplay(),
};
}
const VoiceConnection = VoiceEngine.VoiceConnection;
const VoiceReplayConnection = VoiceEngine.VoiceReplayConnection;
delete VoiceEngine.VoiceConnection;
delete VoiceEngine.VoiceReplayConnection;
VoiceEngine.createTransport = VoiceEngine._createTransport;
@ -88,6 +134,18 @@ if (isElectronRenderer) {
VoiceEngine.setImageDataAllocator((width, height) => new window.ImageData(width, height));
}
VoiceEngine.VoiceConnection = function (audioSSRC, userId, address, port, onConnectCallback, experiments, rids) {
let instance = null;
if (rids != null) {
instance = new VoiceConnection(audioSSRC, userId, address, port, onConnectCallback, experiments, rids);
} else if (experiments != null) {
instance = new VoiceConnection(audioSSRC, userId, address, port, onConnectCallback, experiments);
} else {
instance = new VoiceConnection(audioSSRC, userId, address, port, onConnectCallback);
}
return bindConnectionInstance(instance);
};
VoiceEngine.createReplayConnection = function (audioEngineId, callback, replayLog) {
if (replayLog == null) {
return null;
@ -138,15 +196,122 @@ VoiceEngine.getDebugLogging = function () {
return debugLogging;
};
reloadElectronApp = function () {
if (isElectronRenderer) {
const app = require('electron').remote.app;
app.relaunch();
app.exit(0);
} else {
ChildProcess.spawn(process.argv[0], process.argv.splice(1), {detached: true});
process.exit(0);
const videoStreams = {};
const ensureCanvasContext = function (sinkId) {
let canvas = document.getElementById(sinkId);
if (canvas == null) {
for (const popout of window.popouts.values()) {
const element = popout.document != null && popout.document.getElementById(sinkId);
if (element != null) {
canvas = element;
break;
}
}
if (canvas == null) {
return null;
}
}
const context = canvas.getContext('2d');
if (context == null) {
console.log(`Failed to initialize context for sinkId ${sinkId}`);
return null;
}
return context;
};
// [adill] NB: with context isolation it has become extremely costly (both memory & performance) to provide the image
// data directly to clients at any reasonably fast interval so we've replaced setVideoOutputSink with a direct canvas
// renderer via addVideoOutputSink
const setVideoOutputSink = VoiceEngine.setVideoOutputSink;
const clearVideoOutputSink = (streamId) => {
// [adill] NB: if you don't pass a frame callback setVideoOutputSink clears the sink
setVideoOutputSink(streamId);
};
const signalVideoOutputSinkReady = VoiceEngine.signalVideoOutputSinkReady;
delete VoiceEngine.setVideoOutputSink;
delete VoiceEngine.signalVideoOutputSinkReady;
function addVideoOutputSinkInternal(sinkId, streamId, frameCallback) {
let sinks = videoStreams[streamId];
if (sinks == null) {
sinks = videoStreams[streamId] = new Map();
}
if (sinks.size === 0) {
console.log(`Subscribing to frames for streamId ${streamId}`);
const onFrame = (imageData) => {
const sinks = videoStreams[streamId];
if (sinks != null) {
for (const callback of sinks.values()) {
if (callback != null) {
callback(imageData);
}
}
}
signalVideoOutputSinkReady(streamId);
};
setVideoOutputSink(streamId, onFrame, true);
}
sinks.set(sinkId, frameCallback);
}
VoiceEngine.addVideoOutputSink = function (sinkId, streamId, frameCallback) {
let canvasContext = null;
addVideoOutputSinkInternal(sinkId, streamId, (imageData) => {
if (canvasContext == null) {
canvasContext = ensureCanvasContext(sinkId);
if (canvasContext == null) {
return;
}
}
if (frameCallback != null) {
frameCallback(imageData.width, imageData.height);
}
// [adill] NB: Electron 9+ on macOS would show massive leaks in the the GPU helper process when a non-Discord
// window completely occludes the Discord window. Adding this tiny readback ameliorates the issue. We tried WebGL
// rendering which did not exhibit the issue, however, the context limit of 16 was too small to be a real
// alternative.
const leak = canvasContext.getImageData(0, 0, 1, 1);
canvasContext.putImageData(imageData, 0, 0);
});
};
VoiceEngine.removeVideoOutputSink = function (sinkId, streamId) {
const sinks = videoStreams[streamId];
if (sinks != null) {
sinks.delete(sinkId);
if (sinks.size === 0) {
delete videoStreams[streamId];
console.log(`Unsubscribing from frames for streamId ${streamId}`);
clearVideoOutputSink(streamId);
}
}
};
let sinkId = 0;
VoiceEngine.getNextVideoOutputFrame = function (streamId) {
const nextVideoFrameSinkId = `getNextVideoFrame_${++sinkId}`;
return new Promise((resolve, reject) => {
setTimeout(() => {
VoiceEngine.removeVideoOutputSink(nextVideoFrameSinkId, streamId);
reject(new Error('getNextVideoOutputFrame timeout'));
}, 5000);
addVideoOutputSinkInternal(nextVideoFrameSinkId, streamId, (imageData) => {
VoiceEngine.removeVideoOutputSink(nextVideoFrameSinkId, streamId);
resolve({
width: imageData.width,
height: imageData.height,
data: new Uint8ClampedArray(imageData.data.buffer),
});
});
});
};
console.log(`Initializing voice engine with audio subsystem: ${audioSubsystem}`);

View File

@ -1,272 +1,272 @@
{
"files": [
"node_modules\\.yarn-integrity",
"node_modules\\.bin\\which",
"node_modules\\ansi-regex\\index.js",
"node_modules\\ansi-regex\\license",
"node_modules\\ansi-regex\\package.json",
"node_modules\\ansi-regex\\readme.md",
"node_modules\\camelcase\\index.js",
"node_modules\\camelcase\\license",
"node_modules\\camelcase\\package.json",
"node_modules\\camelcase\\readme.md",
"node_modules\\cliui\\CHANGELOG.md",
"node_modules\\cliui\\index.js",
"node_modules\\cliui\\package.json",
"node_modules\\cliui\\README.md",
"node_modules\\cliui\\node_modules\\ansi-regex\\index.js",
"node_modules\\cliui\\node_modules\\ansi-regex\\license",
"node_modules\\cliui\\node_modules\\ansi-regex\\package.json",
"node_modules\\cliui\\node_modules\\ansi-regex\\readme.md",
"node_modules\\cliui\\node_modules\\strip-ansi\\index.js",
"node_modules\\cliui\\node_modules\\strip-ansi\\license",
"node_modules\\cliui\\node_modules\\strip-ansi\\package.json",
"node_modules\\cliui\\node_modules\\strip-ansi\\readme.md",
"node_modules\\code-point-at\\index.js",
"node_modules\\code-point-at\\license",
"node_modules\\code-point-at\\package.json",
"node_modules\\code-point-at\\readme.md",
"node_modules\\cross-spawn\\CHANGELOG.md",
"node_modules\\cross-spawn\\index.js",
"node_modules\\cross-spawn\\LICENSE",
"node_modules\\cross-spawn\\package.json",
"node_modules\\cross-spawn\\README.md",
"node_modules\\cross-spawn\\lib\\enoent.js",
"node_modules\\cross-spawn\\lib\\parse.js",
"node_modules\\cross-spawn\\lib\\util\\escapeArgument.js",
"node_modules\\cross-spawn\\lib\\util\\escapeCommand.js",
"node_modules\\cross-spawn\\lib\\util\\hasEmptyArgumentBug.js",
"node_modules\\cross-spawn\\lib\\util\\readShebang.js",
"node_modules\\cross-spawn\\lib\\util\\resolveCommand.js",
"node_modules\\cross-spawn\\node_modules\\.bin\\which",
"node_modules\\decamelize\\index.js",
"node_modules\\decamelize\\license",
"node_modules\\decamelize\\package.json",
"node_modules\\decamelize\\readme.md",
"node_modules\\execa\\index.js",
"node_modules\\execa\\license",
"node_modules\\execa\\package.json",
"node_modules\\execa\\readme.md",
"node_modules\\execa\\lib\\errname.js",
"node_modules\\execa\\lib\\stdio.js",
"node_modules\\find-up\\index.js",
"node_modules\\find-up\\license",
"node_modules\\find-up\\package.json",
"node_modules\\find-up\\readme.md",
"node_modules\\get-caller-file\\index.js",
"node_modules\\get-caller-file\\LICENSE.md",
"node_modules\\get-caller-file\\package.json",
"node_modules\\get-caller-file\\README.md",
"node_modules\\get-stream\\buffer-stream.js",
"node_modules\\get-stream\\index.js",
"node_modules\\get-stream\\license",
"node_modules\\get-stream\\package.json",
"node_modules\\get-stream\\readme.md",
"node_modules\\invert-kv\\index.js",
"node_modules\\invert-kv\\package.json",
"node_modules\\invert-kv\\readme.md",
"node_modules\\is-fullwidth-code-point\\index.js",
"node_modules\\is-fullwidth-code-point\\license",
"node_modules\\is-fullwidth-code-point\\package.json",
"node_modules\\is-fullwidth-code-point\\readme.md",
"node_modules\\is-stream\\index.js",
"node_modules\\is-stream\\license",
"node_modules\\is-stream\\package.json",
"node_modules\\is-stream\\readme.md",
"node_modules\\isexe\\.npmignore",
"node_modules\\isexe\\index.js",
"node_modules\\isexe\\LICENSE",
"node_modules\\isexe\\mode.js",
"node_modules\\isexe\\package.json",
"node_modules\\isexe\\README.md",
"node_modules\\isexe\\windows.js",
"node_modules\\lcid\\index.js",
"node_modules\\lcid\\lcid.json",
"node_modules\\lcid\\license",
"node_modules\\lcid\\package.json",
"node_modules\\lcid\\readme.md",
"node_modules\\locate-path\\index.js",
"node_modules\\locate-path\\license",
"node_modules\\locate-path\\package.json",
"node_modules\\locate-path\\readme.md",
"node_modules\\lru-cache\\index.js",
"node_modules\\lru-cache\\LICENSE",
"node_modules\\lru-cache\\package.json",
"node_modules\\lru-cache\\README.md",
"node_modules\\mem\\index.js",
"node_modules\\mem\\license",
"node_modules\\mem\\package.json",
"node_modules\\mem\\readme.md",
"node_modules\\mimic-fn\\index.js",
"node_modules\\mimic-fn\\license",
"node_modules\\mimic-fn\\package.json",
"node_modules\\mimic-fn\\readme.md",
"node_modules\\npm-run-path\\index.js",
"node_modules\\npm-run-path\\license",
"node_modules\\npm-run-path\\package.json",
"node_modules\\npm-run-path\\readme.md",
"node_modules\\number-is-nan\\index.js",
"node_modules\\number-is-nan\\license",
"node_modules\\number-is-nan\\package.json",
"node_modules\\number-is-nan\\readme.md",
"node_modules\\os-locale\\index.js",
"node_modules\\os-locale\\license",
"node_modules\\os-locale\\package.json",
"node_modules\\os-locale\\readme.md",
"node_modules\\p-finally\\index.js",
"node_modules\\p-finally\\license",
"node_modules\\p-finally\\package.json",
"node_modules\\p-finally\\readme.md",
"node_modules\\p-limit\\index.js",
"node_modules\\p-limit\\license",
"node_modules\\p-limit\\package.json",
"node_modules\\p-limit\\readme.md",
"node_modules\\p-locate\\index.js",
"node_modules\\p-locate\\license",
"node_modules\\p-locate\\package.json",
"node_modules\\p-locate\\readme.md",
"node_modules\\p-try\\index.js",
"node_modules\\p-try\\license",
"node_modules\\p-try\\package.json",
"node_modules\\p-try\\readme.md",
"node_modules\\path-exists\\index.js",
"node_modules\\path-exists\\license",
"node_modules\\path-exists\\package.json",
"node_modules\\path-exists\\readme.md",
"node_modules\\path-key\\index.js",
"node_modules\\path-key\\license",
"node_modules\\path-key\\package.json",
"node_modules\\path-key\\readme.md",
"node_modules\\pseudomap\\LICENSE",
"node_modules\\pseudomap\\map.js",
"node_modules\\pseudomap\\package.json",
"node_modules\\pseudomap\\pseudomap.js",
"node_modules\\pseudomap\\README.md",
"node_modules\\require-directory\\.jshintrc",
"node_modules\\require-directory\\.npmignore",
"node_modules\\require-directory\\index.js",
"node_modules\\require-directory\\LICENSE",
"node_modules\\require-directory\\package.json",
"node_modules\\require-main-filename\\.npmignore",
"node_modules\\require-main-filename\\index.js",
"node_modules\\require-main-filename\\package.json",
"node_modules\\require-main-filename\\README.md",
"node_modules\\require-main-filename\\test.js",
"node_modules\\set-blocking\\CHANGELOG.md",
"node_modules\\set-blocking\\index.js",
"node_modules\\set-blocking\\package.json",
"node_modules\\set-blocking\\README.md",
"node_modules\\shebang-command\\index.js",
"node_modules\\shebang-command\\license",
"node_modules\\shebang-command\\package.json",
"node_modules\\shebang-command\\readme.md",
"node_modules\\shebang-regex\\index.js",
"node_modules\\shebang-regex\\license",
"node_modules\\shebang-regex\\package.json",
"node_modules\\shebang-regex\\readme.md",
"node_modules\\signal-exit\\CHANGELOG.md",
"node_modules\\signal-exit\\index.js",
"node_modules\\signal-exit\\package.json",
"node_modules\\signal-exit\\README.md",
"node_modules\\signal-exit\\signals.js",
"node_modules\\string-width\\index.js",
"node_modules\\string-width\\license",
"node_modules\\string-width\\package.json",
"node_modules\\string-width\\readme.md",
"node_modules\\string-width\\node_modules\\ansi-regex\\index.js",
"node_modules\\string-width\\node_modules\\ansi-regex\\license",
"node_modules\\string-width\\node_modules\\ansi-regex\\package.json",
"node_modules\\string-width\\node_modules\\ansi-regex\\readme.md",
"node_modules\\string-width\\node_modules\\strip-ansi\\index.js",
"node_modules\\string-width\\node_modules\\strip-ansi\\license",
"node_modules\\string-width\\node_modules\\strip-ansi\\package.json",
"node_modules\\string-width\\node_modules\\strip-ansi\\readme.md",
"node_modules\\strip-ansi\\index.js",
"node_modules\\strip-ansi\\license",
"node_modules\\strip-ansi\\package.json",
"node_modules\\strip-ansi\\readme.md",
"node_modules\\strip-eof\\index.js",
"node_modules\\strip-eof\\license",
"node_modules\\strip-eof\\package.json",
"node_modules\\strip-eof\\readme.md",
"node_modules\\which\\CHANGELOG.md",
"node_modules\\which\\LICENSE",
"node_modules\\which\\package.json",
"node_modules\\which\\README.md",
"node_modules\\which\\which.js",
"node_modules\\which\\bin\\which",
"node_modules\\which-module\\CHANGELOG.md",
"node_modules\\which-module\\index.js",
"node_modules\\which-module\\LICENSE",
"node_modules\\which-module\\package.json",
"node_modules\\which-module\\README.md",
"node_modules\\wrap-ansi\\index.js",
"node_modules\\wrap-ansi\\license",
"node_modules\\wrap-ansi\\package.json",
"node_modules\\wrap-ansi\\readme.md",
"node_modules\\wrap-ansi\\node_modules\\is-fullwidth-code-point\\index.js",
"node_modules\\wrap-ansi\\node_modules\\is-fullwidth-code-point\\license",
"node_modules\\wrap-ansi\\node_modules\\is-fullwidth-code-point\\package.json",
"node_modules\\wrap-ansi\\node_modules\\is-fullwidth-code-point\\readme.md",
"node_modules\\wrap-ansi\\node_modules\\string-width\\index.js",
"node_modules\\wrap-ansi\\node_modules\\string-width\\license",
"node_modules\\wrap-ansi\\node_modules\\string-width\\package.json",
"node_modules\\wrap-ansi\\node_modules\\string-width\\readme.md",
"node_modules\\y18n\\index.js",
"node_modules\\y18n\\LICENSE",
"node_modules\\y18n\\package.json",
"node_modules\\y18n\\README.md",
"node_modules\\yallist\\iterator.js",
"node_modules\\yallist\\LICENSE",
"node_modules\\yallist\\package.json",
"node_modules\\yallist\\README.md",
"node_modules\\yallist\\yallist.js",
"node_modules\\yargs\\CHANGELOG.md",
"node_modules\\yargs\\index.js",
"node_modules\\yargs\\LICENSE",
"node_modules\\yargs\\package.json",
"node_modules\\yargs\\README.md",
"node_modules\\yargs\\yargs.js",
"node_modules\\yargs\\lib\\apply-extends.js",
"node_modules\\yargs\\lib\\argsert.js",
"node_modules\\yargs\\lib\\command.js",
"node_modules\\yargs\\lib\\completion.js",
"node_modules\\yargs\\lib\\levenshtein.js",
"node_modules\\yargs\\lib\\obj-filter.js",
"node_modules\\yargs\\lib\\usage.js",
"node_modules\\yargs\\lib\\validation.js",
"node_modules\\yargs\\lib\\yerror.js",
"node_modules\\yargs\\locales\\be.json",
"node_modules\\yargs\\locales\\de.json",
"node_modules\\yargs\\locales\\en.json",
"node_modules\\yargs\\locales\\es.json",
"node_modules\\yargs\\locales\\fr.json",
"node_modules\\yargs\\locales\\hi.json",
"node_modules\\yargs\\locales\\hu.json",
"node_modules\\yargs\\locales\\id.json",
"node_modules\\yargs\\locales\\it.json",
"node_modules\\yargs\\locales\\ja.json",
"node_modules\\yargs\\locales\\ko.json",
"node_modules\\yargs\\locales\\nb.json",
"node_modules\\yargs\\locales\\nl.json",
"node_modules\\yargs\\locales\\nn.json",
"node_modules\\yargs\\locales\\pirate.json",
"node_modules\\yargs\\locales\\pl.json",
"node_modules\\yargs\\locales\\pt.json",
"node_modules\\yargs\\locales\\pt_BR.json",
"node_modules\\yargs\\locales\\ru.json",
"node_modules\\yargs\\locales\\th.json",
"node_modules\\yargs\\locales\\tr.json",
"node_modules\\yargs\\locales\\zh_CN.json",
"node_modules\\yargs\\locales\\zh_TW.json",
"node_modules\\yargs-parser\\CHANGELOG.md",
"node_modules\\yargs-parser\\index.js",
"node_modules\\yargs-parser\\package.json",
"node_modules\\yargs-parser\\README.md",
"node_modules\\yargs-parser\\lib\\tokenize-arg-string.js",
"discord_voice.node",
"openh264-1.7.0-win32.dll",
"index.js",
"manifest.json"
]
{
"files": [
"node_modules\\.yarn-integrity",
"node_modules\\.bin\\which",
"node_modules\\ansi-regex\\index.js",
"node_modules\\ansi-regex\\license",
"node_modules\\ansi-regex\\package.json",
"node_modules\\ansi-regex\\readme.md",
"node_modules\\camelcase\\index.js",
"node_modules\\camelcase\\license",
"node_modules\\camelcase\\package.json",
"node_modules\\camelcase\\readme.md",
"node_modules\\cliui\\CHANGELOG.md",
"node_modules\\cliui\\index.js",
"node_modules\\cliui\\package.json",
"node_modules\\cliui\\README.md",
"node_modules\\cliui\\node_modules\\ansi-regex\\index.js",
"node_modules\\cliui\\node_modules\\ansi-regex\\license",
"node_modules\\cliui\\node_modules\\ansi-regex\\package.json",
"node_modules\\cliui\\node_modules\\ansi-regex\\readme.md",
"node_modules\\cliui\\node_modules\\strip-ansi\\index.js",
"node_modules\\cliui\\node_modules\\strip-ansi\\license",
"node_modules\\cliui\\node_modules\\strip-ansi\\package.json",
"node_modules\\cliui\\node_modules\\strip-ansi\\readme.md",
"node_modules\\code-point-at\\index.js",
"node_modules\\code-point-at\\license",
"node_modules\\code-point-at\\package.json",
"node_modules\\code-point-at\\readme.md",
"node_modules\\cross-spawn\\CHANGELOG.md",
"node_modules\\cross-spawn\\index.js",
"node_modules\\cross-spawn\\LICENSE",
"node_modules\\cross-spawn\\package.json",
"node_modules\\cross-spawn\\README.md",
"node_modules\\cross-spawn\\lib\\enoent.js",
"node_modules\\cross-spawn\\lib\\parse.js",
"node_modules\\cross-spawn\\lib\\util\\escapeArgument.js",
"node_modules\\cross-spawn\\lib\\util\\escapeCommand.js",
"node_modules\\cross-spawn\\lib\\util\\hasEmptyArgumentBug.js",
"node_modules\\cross-spawn\\lib\\util\\readShebang.js",
"node_modules\\cross-spawn\\lib\\util\\resolveCommand.js",
"node_modules\\cross-spawn\\node_modules\\.bin\\which",
"node_modules\\decamelize\\index.js",
"node_modules\\decamelize\\license",
"node_modules\\decamelize\\package.json",
"node_modules\\decamelize\\readme.md",
"node_modules\\execa\\index.js",
"node_modules\\execa\\license",
"node_modules\\execa\\package.json",
"node_modules\\execa\\readme.md",
"node_modules\\execa\\lib\\errname.js",
"node_modules\\execa\\lib\\stdio.js",
"node_modules\\find-up\\index.js",
"node_modules\\find-up\\license",
"node_modules\\find-up\\package.json",
"node_modules\\find-up\\readme.md",
"node_modules\\get-caller-file\\index.js",
"node_modules\\get-caller-file\\LICENSE.md",
"node_modules\\get-caller-file\\package.json",
"node_modules\\get-caller-file\\README.md",
"node_modules\\get-stream\\buffer-stream.js",
"node_modules\\get-stream\\index.js",
"node_modules\\get-stream\\license",
"node_modules\\get-stream\\package.json",
"node_modules\\get-stream\\readme.md",
"node_modules\\invert-kv\\index.js",
"node_modules\\invert-kv\\package.json",
"node_modules\\invert-kv\\readme.md",
"node_modules\\is-fullwidth-code-point\\index.js",
"node_modules\\is-fullwidth-code-point\\license",
"node_modules\\is-fullwidth-code-point\\package.json",
"node_modules\\is-fullwidth-code-point\\readme.md",
"node_modules\\is-stream\\index.js",
"node_modules\\is-stream\\license",
"node_modules\\is-stream\\package.json",
"node_modules\\is-stream\\readme.md",
"node_modules\\isexe\\.npmignore",
"node_modules\\isexe\\index.js",
"node_modules\\isexe\\LICENSE",
"node_modules\\isexe\\mode.js",
"node_modules\\isexe\\package.json",
"node_modules\\isexe\\README.md",
"node_modules\\isexe\\windows.js",
"node_modules\\lcid\\index.js",
"node_modules\\lcid\\lcid.json",
"node_modules\\lcid\\license",
"node_modules\\lcid\\package.json",
"node_modules\\lcid\\readme.md",
"node_modules\\locate-path\\index.js",
"node_modules\\locate-path\\license",
"node_modules\\locate-path\\package.json",
"node_modules\\locate-path\\readme.md",
"node_modules\\lru-cache\\index.js",
"node_modules\\lru-cache\\LICENSE",
"node_modules\\lru-cache\\package.json",
"node_modules\\lru-cache\\README.md",
"node_modules\\mem\\index.js",
"node_modules\\mem\\license",
"node_modules\\mem\\package.json",
"node_modules\\mem\\readme.md",
"node_modules\\mimic-fn\\index.js",
"node_modules\\mimic-fn\\license",
"node_modules\\mimic-fn\\package.json",
"node_modules\\mimic-fn\\readme.md",
"node_modules\\npm-run-path\\index.js",
"node_modules\\npm-run-path\\license",
"node_modules\\npm-run-path\\package.json",
"node_modules\\npm-run-path\\readme.md",
"node_modules\\number-is-nan\\index.js",
"node_modules\\number-is-nan\\license",
"node_modules\\number-is-nan\\package.json",
"node_modules\\number-is-nan\\readme.md",
"node_modules\\os-locale\\index.js",
"node_modules\\os-locale\\license",
"node_modules\\os-locale\\package.json",
"node_modules\\os-locale\\readme.md",
"node_modules\\p-finally\\index.js",
"node_modules\\p-finally\\license",
"node_modules\\p-finally\\package.json",
"node_modules\\p-finally\\readme.md",
"node_modules\\p-limit\\index.js",
"node_modules\\p-limit\\license",
"node_modules\\p-limit\\package.json",
"node_modules\\p-limit\\readme.md",
"node_modules\\p-locate\\index.js",
"node_modules\\p-locate\\license",
"node_modules\\p-locate\\package.json",
"node_modules\\p-locate\\readme.md",
"node_modules\\p-try\\index.js",
"node_modules\\p-try\\license",
"node_modules\\p-try\\package.json",
"node_modules\\p-try\\readme.md",
"node_modules\\path-exists\\index.js",
"node_modules\\path-exists\\license",
"node_modules\\path-exists\\package.json",
"node_modules\\path-exists\\readme.md",
"node_modules\\path-key\\index.js",
"node_modules\\path-key\\license",
"node_modules\\path-key\\package.json",
"node_modules\\path-key\\readme.md",
"node_modules\\pseudomap\\LICENSE",
"node_modules\\pseudomap\\map.js",
"node_modules\\pseudomap\\package.json",
"node_modules\\pseudomap\\pseudomap.js",
"node_modules\\pseudomap\\README.md",
"node_modules\\require-directory\\.jshintrc",
"node_modules\\require-directory\\.npmignore",
"node_modules\\require-directory\\index.js",
"node_modules\\require-directory\\LICENSE",
"node_modules\\require-directory\\package.json",
"node_modules\\require-main-filename\\.npmignore",
"node_modules\\require-main-filename\\index.js",
"node_modules\\require-main-filename\\package.json",
"node_modules\\require-main-filename\\README.md",
"node_modules\\require-main-filename\\test.js",
"node_modules\\set-blocking\\CHANGELOG.md",
"node_modules\\set-blocking\\index.js",
"node_modules\\set-blocking\\package.json",
"node_modules\\set-blocking\\README.md",
"node_modules\\shebang-command\\index.js",
"node_modules\\shebang-command\\license",
"node_modules\\shebang-command\\package.json",
"node_modules\\shebang-command\\readme.md",
"node_modules\\shebang-regex\\index.js",
"node_modules\\shebang-regex\\license",
"node_modules\\shebang-regex\\package.json",
"node_modules\\shebang-regex\\readme.md",
"node_modules\\signal-exit\\CHANGELOG.md",
"node_modules\\signal-exit\\index.js",
"node_modules\\signal-exit\\package.json",
"node_modules\\signal-exit\\README.md",
"node_modules\\signal-exit\\signals.js",
"node_modules\\string-width\\index.js",
"node_modules\\string-width\\license",
"node_modules\\string-width\\package.json",
"node_modules\\string-width\\readme.md",
"node_modules\\string-width\\node_modules\\ansi-regex\\index.js",
"node_modules\\string-width\\node_modules\\ansi-regex\\license",
"node_modules\\string-width\\node_modules\\ansi-regex\\package.json",
"node_modules\\string-width\\node_modules\\ansi-regex\\readme.md",
"node_modules\\string-width\\node_modules\\strip-ansi\\index.js",
"node_modules\\string-width\\node_modules\\strip-ansi\\license",
"node_modules\\string-width\\node_modules\\strip-ansi\\package.json",
"node_modules\\string-width\\node_modules\\strip-ansi\\readme.md",
"node_modules\\strip-ansi\\index.js",
"node_modules\\strip-ansi\\license",
"node_modules\\strip-ansi\\package.json",
"node_modules\\strip-ansi\\readme.md",
"node_modules\\strip-eof\\index.js",
"node_modules\\strip-eof\\license",
"node_modules\\strip-eof\\package.json",
"node_modules\\strip-eof\\readme.md",
"node_modules\\which\\CHANGELOG.md",
"node_modules\\which\\LICENSE",
"node_modules\\which\\package.json",
"node_modules\\which\\README.md",
"node_modules\\which\\which.js",
"node_modules\\which\\bin\\which",
"node_modules\\which-module\\CHANGELOG.md",
"node_modules\\which-module\\index.js",
"node_modules\\which-module\\LICENSE",
"node_modules\\which-module\\package.json",
"node_modules\\which-module\\README.md",
"node_modules\\wrap-ansi\\index.js",
"node_modules\\wrap-ansi\\license",
"node_modules\\wrap-ansi\\package.json",
"node_modules\\wrap-ansi\\readme.md",
"node_modules\\wrap-ansi\\node_modules\\is-fullwidth-code-point\\index.js",
"node_modules\\wrap-ansi\\node_modules\\is-fullwidth-code-point\\license",
"node_modules\\wrap-ansi\\node_modules\\is-fullwidth-code-point\\package.json",
"node_modules\\wrap-ansi\\node_modules\\is-fullwidth-code-point\\readme.md",
"node_modules\\wrap-ansi\\node_modules\\string-width\\index.js",
"node_modules\\wrap-ansi\\node_modules\\string-width\\license",
"node_modules\\wrap-ansi\\node_modules\\string-width\\package.json",
"node_modules\\wrap-ansi\\node_modules\\string-width\\readme.md",
"node_modules\\y18n\\index.js",
"node_modules\\y18n\\LICENSE",
"node_modules\\y18n\\package.json",
"node_modules\\y18n\\README.md",
"node_modules\\yallist\\iterator.js",
"node_modules\\yallist\\LICENSE",
"node_modules\\yallist\\package.json",
"node_modules\\yallist\\README.md",
"node_modules\\yallist\\yallist.js",
"node_modules\\yargs\\CHANGELOG.md",
"node_modules\\yargs\\index.js",
"node_modules\\yargs\\LICENSE",
"node_modules\\yargs\\package.json",
"node_modules\\yargs\\README.md",
"node_modules\\yargs\\yargs.js",
"node_modules\\yargs\\lib\\apply-extends.js",
"node_modules\\yargs\\lib\\argsert.js",
"node_modules\\yargs\\lib\\command.js",
"node_modules\\yargs\\lib\\completion.js",
"node_modules\\yargs\\lib\\levenshtein.js",
"node_modules\\yargs\\lib\\obj-filter.js",
"node_modules\\yargs\\lib\\usage.js",
"node_modules\\yargs\\lib\\validation.js",
"node_modules\\yargs\\lib\\yerror.js",
"node_modules\\yargs\\locales\\be.json",
"node_modules\\yargs\\locales\\de.json",
"node_modules\\yargs\\locales\\en.json",
"node_modules\\yargs\\locales\\es.json",
"node_modules\\yargs\\locales\\fr.json",
"node_modules\\yargs\\locales\\hi.json",
"node_modules\\yargs\\locales\\hu.json",
"node_modules\\yargs\\locales\\id.json",
"node_modules\\yargs\\locales\\it.json",
"node_modules\\yargs\\locales\\ja.json",
"node_modules\\yargs\\locales\\ko.json",
"node_modules\\yargs\\locales\\nb.json",
"node_modules\\yargs\\locales\\nl.json",
"node_modules\\yargs\\locales\\nn.json",
"node_modules\\yargs\\locales\\pirate.json",
"node_modules\\yargs\\locales\\pl.json",
"node_modules\\yargs\\locales\\pt.json",
"node_modules\\yargs\\locales\\pt_BR.json",
"node_modules\\yargs\\locales\\ru.json",
"node_modules\\yargs\\locales\\th.json",
"node_modules\\yargs\\locales\\tr.json",
"node_modules\\yargs\\locales\\zh_CN.json",
"node_modules\\yargs\\locales\\zh_TW.json",
"node_modules\\yargs-parser\\CHANGELOG.md",
"node_modules\\yargs-parser\\index.js",
"node_modules\\yargs-parser\\package.json",
"node_modules\\yargs-parser\\README.md",
"node_modules\\yargs-parser\\lib\\tokenize-arg-string.js",
"discord_voice.node",
"openh264-1.7.0-win32.dll",
"index.js",
"manifest.json"
]
}

View File

@ -7,11 +7,12 @@
"compile": "node compile.js",
"test": "npm run compile && electron .",
"run": "electron .",
"start": "electron .",
"build": "npm run build:minify && npm run build:electron && npm run build:after",
"build:electron": "npm run build:electron_win && npm run build:electron_linux && npm run build:electron_darwin",
"build:electron_win": "electron-packager ./distApp --ignore=\"(distApp|builds|\\.ts|\\.so\\.4)\" --arch=ia32 --win32metadata.ProductName=\"Lightcord\" --win32metadata.CompanyName=\"Lightcord\" --protocol=discord --platform=\"win32\" --out=builds --icon=app.ico --executable-name=\"Lightcord\" --asar.unpack='*.{node,dll}' --overwrite",
"build:electron_linux": "electron-packager ./distApp --ignore=\"(distApp|builds|\\.ts|\\.dll)\" --arch=x64 --protocol=discord --platform=\"linux\" --out=builds --icon=app.ico --executable-name=\"Lightcord\" --asar.unpack='*.{node,so.4}' --overwrite",
"build:electron_darwin": "electron-packager ./distApp --ignore\"(distApp|builds|\\.ts\\.so\\.4\\.dll )\" --arch=x64 --protocol=discord --platform=\"darwin\" --out=builds --icon=app_icon_darwin.icns --executable-name=\"Lightcord\" --asar.unpack='*.{node,dylib}' --overwrite",
"build:electron": "node build_electron.js",
"build:electron_win": "electron-packager ./distApp --ignore=\"(distApp|builds|\\.ts|\\.so\\.4|\\.dylib)\" --arch=ia32 --win32metadata.ProductName=\"Lightcord\" --win32metadata.CompanyName=\"Lightcord\" --protocol=discord --platform=\"win32\" --out=builds --icon=app.ico --executable-name=\"Lightcord\" --asar.unpack='*.{node,dll}' --overwrite",
"build:electron_linux": "electron-packager ./distApp --ignore=\"(distApp|builds|\\.ts|\\.dll|\\.dylib)\" --arch=x64 --protocol=discord --platform=\"linux\" --out=builds --icon=app.ico --executable-name=\"Lightcord\" --asar.unpack='*.{node,so.4}' --overwrite",
"build:electron_darwin": "electron-packager ./distApp --ignore\"(distApp|builds|\\.ts\\.so\\.4\\.dll)\" --arch=x64 --protocol=discord --platform=\"darwin\" --out=builds --icon=app_icon_darwin.icns --executable-name=\"Lightcord\" --asar.unpack='*.{node,dylib}' --overwrite",
"build:minify": "node build.js",
"build:after": "node afterbuild.js",
"devInstall": "npm i --save-dev --arch=ia32 electron@8.5.0 && node installSubModules.js && echo \"Everything is installed. You should be able to do `npm run test` to compile everything and launch.\"",
@ -40,10 +41,11 @@
"@types/rimraf": "^3.0.0",
"@types/uuid": "^8.0.0",
"@types/yauzl": "^2.9.1",
"asar": "^3.0.3",
"cross-spawn": "^7.0.3",
"electron": "^8.5.0",
"terser": "^4.7.0",
"typescript": "^3.9.7",
"electron": "8.5.0",
"yazl": "^2.5.1"
}
}

View File

@ -9,9 +9,12 @@ discord links are on [Lightcord's support server](https://discord.gg/7eFff2A)
- [ ] Transition from WebViews to BrowserView in tabs
- [x] lightcord-9 setting.
- [x] Fixing #14
- [ ] Fixing #15
- [x] Fixing #15
- [x] LazyLoader in LightcordApi.
- [ ] Emojis and markdown in notifications.
- [ ] https://discord.com/channels/705908350218666117/712993712426450946/745332266594729984
- [ ] https://discord.com/channels/705908350218666117/711334559521833110/745411834160611500
- [ ] Fixing #21
- [ ] Fixing #21
- [ ] Update electron version to fix spellchecker problems.
- [ ] fix all the shit with folders structure (native addons, building, etc)
- [ ] update glasstron to the latest version.