diff --git a/package.json b/package.json index 1169e1c33..7b1f26d2d 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "node-opus": "^0.2.7", "opusscript": "^0.0.6", "sodium": "^2.0.3", - "libsodium-wrappers": "^0.5.4", + "libsodium-wrappers": "^0.7.3", "uws": "^9.14.0" }, "devDependencies": { diff --git a/src/client/voice/dispatcher/StreamDispatcher.js b/src/client/voice/dispatcher/StreamDispatcher.js index 8eee823bc..45e47c1ba 100644 --- a/src/client/voice/dispatcher/StreamDispatcher.js +++ b/src/client/voice/dispatcher/StreamDispatcher.js @@ -163,7 +163,7 @@ class StreamDispatcher extends VolumeInterface { packetBuffer.writeUIntBE(this.player.voiceConnection.authentication.ssrc, 8, 4); packetBuffer.copy(nonce, 0, 0, 12); - buffer = secretbox.close(buffer, nonce, this.player.voiceConnection.authentication.secretKey.key); + buffer = secretbox.methods.close(buffer, nonce, this.player.voiceConnection.authentication.secretKey.key); for (let i = 0; i < buffer.length; i++) packetBuffer[i + 12] = buffer[i]; return packetBuffer; diff --git a/src/client/voice/receiver/VoiceReceiver.js b/src/client/voice/receiver/VoiceReceiver.js index 13af9764a..56ee63d49 100644 --- a/src/client/voice/receiver/VoiceReceiver.js +++ b/src/client/voice/receiver/VoiceReceiver.js @@ -147,7 +147,7 @@ class VoiceReceiver extends EventEmitter { handlePacket(msg, user) { msg.copy(nonce, 0, 0, 12); - let data = secretbox.open(msg.slice(12), nonce, this.voiceConnection.authentication.secretKey.key); + let data = secretbox.methods.open(msg.slice(12), nonce, this.voiceConnection.authentication.secretKey.key); if (!data) { /** * Emitted whenever a voice packet experiences a problem. diff --git a/src/client/voice/util/Secretbox.js b/src/client/voice/util/Secretbox.js index f1c8f03a8..a833d51e4 100644 --- a/src/client/voice/util/Secretbox.js +++ b/src/client/voice/util/Secretbox.js @@ -13,10 +13,21 @@ const libs = { }), }; +exports.methods = {}; + for (const libName of Object.keys(libs)) { try { const lib = require(libName); - module.exports = libs[libName](lib); + if (libName === 'libsodium-wrappers' && lib.ready) { + lib.ready.then(() => { + exports.methods = libs[libName](lib); + }).catch(() => { + const tweetnacl = require('tweetnacl'); + exports.methods = libs.tweetnacl(tweetnacl); + }).catch(() => undefined); + } else { + exports.methods = libs[libName](lib); + } break; } catch (err) {} // eslint-disable-line no-empty }