mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-17 03:53:29 +01:00
fix websocket unpacking (#3301)
This commit is contained in:
@@ -6,9 +6,13 @@ try {
|
|||||||
if (!erlpack.pack) erlpack = null;
|
if (!erlpack.pack) erlpack = null;
|
||||||
} catch (err) {} // eslint-disable-line no-empty
|
} catch (err) {} // eslint-disable-line no-empty
|
||||||
|
|
||||||
|
let TextDecoder;
|
||||||
|
|
||||||
if (browser) {
|
if (browser) {
|
||||||
|
TextDecoder = window.TextDecoder; // eslint-disable-line no-undef
|
||||||
exports.WebSocket = window.WebSocket; // eslint-disable-line no-undef
|
exports.WebSocket = window.WebSocket; // eslint-disable-line no-undef
|
||||||
} else {
|
} else {
|
||||||
|
TextDecoder = require('util').TextDecoder;
|
||||||
try {
|
try {
|
||||||
exports.WebSocket = require('@discordjs/uws');
|
exports.WebSocket = require('@discordjs/uws');
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -16,12 +20,19 @@ if (browser) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ab = new TextDecoder();
|
||||||
|
|
||||||
exports.encoding = erlpack ? 'etf' : 'json';
|
exports.encoding = erlpack ? 'etf' : 'json';
|
||||||
|
|
||||||
exports.pack = erlpack ? erlpack.pack : JSON.stringify;
|
exports.pack = erlpack ? erlpack.pack : JSON.stringify;
|
||||||
|
|
||||||
exports.unpack = data => {
|
exports.unpack = data => {
|
||||||
if (!erlpack || data[0] === '{') return JSON.parse(data);
|
if (exports.encoding === 'json') {
|
||||||
|
if (typeof data !== 'string') {
|
||||||
|
data = ab.decode(data);
|
||||||
|
}
|
||||||
|
return JSON.parse(data);
|
||||||
|
}
|
||||||
if (!Buffer.isBuffer(data)) data = Buffer.from(new Uint8Array(data));
|
if (!Buffer.isBuffer(data)) data = Buffer.from(new Uint8Array(data));
|
||||||
return erlpack.unpack(data);
|
return erlpack.unpack(data);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,16 +3,12 @@
|
|||||||
const EventEmitter = require('events');
|
const EventEmitter = require('events');
|
||||||
const WebSocket = require('../../WebSocket');
|
const WebSocket = require('../../WebSocket');
|
||||||
const { Status, Events, ShardEvents, OPCodes, WSEvents } = require('../../util/Constants');
|
const { Status, Events, ShardEvents, OPCodes, WSEvents } = require('../../util/Constants');
|
||||||
const { TextDecoder } = require('util');
|
|
||||||
|
|
||||||
let zstd;
|
let zstd;
|
||||||
let decoder;
|
|
||||||
|
|
||||||
let zlib;
|
let zlib;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
zstd = require('zucc');
|
zstd = require('zucc');
|
||||||
decoder = new TextDecoder('utf8');
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
try {
|
try {
|
||||||
zlib = require('zlib-sync');
|
zlib = require('zlib-sync');
|
||||||
@@ -259,8 +255,7 @@ class WebSocketShard extends EventEmitter {
|
|||||||
onMessage({ data }) {
|
onMessage({ data }) {
|
||||||
let raw;
|
let raw;
|
||||||
if (zstd) {
|
if (zstd) {
|
||||||
const ab = this.inflate.decompress(new Uint8Array(data).buffer);
|
raw = this.inflate.decompress(new Uint8Array(data).buffer);
|
||||||
raw = decoder.decode(ab);
|
|
||||||
} else {
|
} else {
|
||||||
if (data instanceof ArrayBuffer) data = new Uint8Array(data);
|
if (data instanceof ArrayBuffer) data = new Uint8Array(data);
|
||||||
const l = data.length;
|
const l = data.length;
|
||||||
|
|||||||
Reference in New Issue
Block a user