SupportBot Pre-7.2
SupportBot Build for DiscordJS 13
This commit is contained in:
1 parent
09f0873f27
commit
37c870c7ab
3723 files changed
+4075
-349720
No files matched your search
+1
-2
@@ -1,8 +1,7 @@
|
||||
# ws: a Node.js WebSocket library
|
||||
|
||||
[](https://www.npmjs.com/package/ws)
|
||||
[](https://github.com/websockets/ws/actions?query=workflow%3ACI+branch%3Amaster)
|
||||
[](https://ci.appveyor.com/project/lpinca/ws)
|
||||
[](https://github.com/websockets/ws/actions?query=workflow%3ACI+branch%3Amaster)
|
||||
[](https://coveralls.io/github/websockets/ws)
|
||||
|
||||
ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and
|
||||
|
||||
+2
-2
@@ -22,7 +22,7 @@ const INFLATING = 5;
|
||||
/**
|
||||
* HyBi Receiver implementation.
|
||||
*
|
||||
* @extends stream.Writable
|
||||
* @extends Writable
|
||||
*/
|
||||
class Receiver extends Writable {
|
||||
/**
|
||||
@@ -586,7 +586,7 @@ module.exports = Receiver;
|
||||
/**
|
||||
* Builds an error object.
|
||||
*
|
||||
* @param {(Error|RangeError)} ErrorCtor The error constructor
|
||||
* @param {function(new:Error|RangeError)} ErrorCtor The error constructor
|
||||
* @param {String} message The error message
|
||||
* @param {Boolean} prefix Specifies whether or not to add a default prefix to
|
||||
* `message`
|
||||
|
||||
+5
-1
@@ -1,5 +1,9 @@
|
||||
/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^net|tls$" }] */
|
||||
|
||||
'use strict';
|
||||
|
||||
const net = require('net');
|
||||
const tls = require('tls');
|
||||
const { randomFillSync } = require('crypto');
|
||||
|
||||
const PerMessageDeflate = require('./permessage-deflate');
|
||||
@@ -16,7 +20,7 @@ class Sender {
|
||||
/**
|
||||
* Creates a Sender instance.
|
||||
*
|
||||
* @param {net.Socket} socket The connection socket
|
||||
* @param {(net.Socket|tls.Socket)} socket The connection socket
|
||||
* @param {Object} [extensions] An object containing the negotiated extensions
|
||||
*/
|
||||
constructor(socket, extensions) {
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ const { Duplex } = require('stream');
|
||||
/**
|
||||
* Emits the `'close'` event on a stream.
|
||||
*
|
||||
* @param {stream.Duplex} The stream.
|
||||
* @param {Duplex} stream The stream.
|
||||
* @private
|
||||
*/
|
||||
function emitClose(stream) {
|
||||
@@ -43,7 +43,7 @@ function duplexOnError(err) {
|
||||
*
|
||||
* @param {WebSocket} ws The `WebSocket` to wrap
|
||||
* @param {Object} [options] The options for the `Duplex` constructor
|
||||
* @return {stream.Duplex} The duplex stream
|
||||
* @return {Duplex} The duplex stream
|
||||
* @public
|
||||
*/
|
||||
function createWebSocketStream(ws, options) {
|
||||
|
||||
+41
-12
@@ -1,8 +1,13 @@
|
||||
/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^net|tls|https$" }] */
|
||||
|
||||
'use strict';
|
||||
|
||||
const EventEmitter = require('events');
|
||||
const http = require('http');
|
||||
const https = require('https');
|
||||
const net = require('net');
|
||||
const tls = require('tls');
|
||||
const { createHash } = require('crypto');
|
||||
const { createServer, STATUS_CODES } = require('http');
|
||||
|
||||
const PerMessageDeflate = require('./permessage-deflate');
|
||||
const WebSocket = require('./websocket');
|
||||
@@ -11,6 +16,10 @@ const { GUID, kWebSocket } = require('./constants');
|
||||
|
||||
const keyRegex = /^[+/0-9A-Za-z]{22}==$/;
|
||||
|
||||
const RUNNING = 0;
|
||||
const CLOSING = 1;
|
||||
const CLOSED = 2;
|
||||
|
||||
/**
|
||||
* Class representing a WebSocket server.
|
||||
*
|
||||
@@ -34,7 +43,8 @@ class WebSocketServer extends EventEmitter {
|
||||
* @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable
|
||||
* permessage-deflate
|
||||
* @param {Number} [options.port] The port where to bind the server
|
||||
* @param {http.Server} [options.server] A pre-created HTTP/S server to use
|
||||
* @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S
|
||||
* server to use
|
||||
* @param {Function} [options.verifyClient] A hook to reject connections
|
||||
* @param {Function} [callback] A listener for the `listening` event
|
||||
*/
|
||||
@@ -56,15 +66,20 @@ class WebSocketServer extends EventEmitter {
|
||||
...options
|
||||
};
|
||||
|
||||
if (options.port == null && !options.server && !options.noServer) {
|
||||
if (
|
||||
(options.port == null && !options.server && !options.noServer) ||
|
||||
(options.port != null && (options.server || options.noServer)) ||
|
||||
(options.server && options.noServer)
|
||||
) {
|
||||
throw new TypeError(
|
||||
'One of the "port", "server", or "noServer" options must be specified'
|
||||
'One and only one of the "port", "server", or "noServer" options ' +
|
||||
'must be specified'
|
||||
);
|
||||
}
|
||||
|
||||
if (options.port != null) {
|
||||
this._server = createServer((req, res) => {
|
||||
const body = STATUS_CODES[426];
|
||||
this._server = http.createServer((req, res) => {
|
||||
const body = http.STATUS_CODES[426];
|
||||
|
||||
res.writeHead(426, {
|
||||
'Content-Length': body.length,
|
||||
@@ -97,6 +112,7 @@ class WebSocketServer extends EventEmitter {
|
||||
if (options.perMessageDeflate === true) options.perMessageDeflate = {};
|
||||
if (options.clientTracking) this.clients = new Set();
|
||||
this.options = options;
|
||||
this._state = RUNNING;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -126,6 +142,14 @@ class WebSocketServer extends EventEmitter {
|
||||
close(cb) {
|
||||
if (cb) this.once('close', cb);
|
||||
|
||||
if (this._state === CLOSED) {
|
||||
process.nextTick(emitClose, this);
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._state === CLOSING) return;
|
||||
this._state = CLOSING;
|
||||
|
||||
//
|
||||
// Terminate all associated clients.
|
||||
//
|
||||
@@ -143,7 +167,7 @@ class WebSocketServer extends EventEmitter {
|
||||
// Close the http server if it was internally created.
|
||||
//
|
||||
if (this.options.port != null) {
|
||||
server.close(() => this.emit('close'));
|
||||
server.close(emitClose.bind(undefined, this));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -173,7 +197,8 @@ class WebSocketServer extends EventEmitter {
|
||||
* Handle a HTTP Upgrade request.
|
||||
*
|
||||
* @param {http.IncomingMessage} req The request object
|
||||
* @param {net.Socket} socket The network socket between the server and client
|
||||
* @param {(net.Socket|tls.Socket)} socket The network socket between the
|
||||
* server and client
|
||||
* @param {Buffer} head The first packet of the upgraded stream
|
||||
* @param {Function} cb Callback
|
||||
* @public
|
||||
@@ -252,7 +277,8 @@ class WebSocketServer extends EventEmitter {
|
||||
* @param {String} key The value of the `Sec-WebSocket-Key` header
|
||||
* @param {Object} extensions The accepted extensions
|
||||
* @param {http.IncomingMessage} req The request object
|
||||
* @param {net.Socket} socket The network socket between the server and client
|
||||
* @param {(net.Socket|tls.Socket)} socket The network socket between the
|
||||
* server and client
|
||||
* @param {Buffer} head The first packet of the upgraded stream
|
||||
* @param {Function} cb Callback
|
||||
* @throws {Error} If called more than once with the same socket
|
||||
@@ -271,6 +297,8 @@ class WebSocketServer extends EventEmitter {
|
||||
);
|
||||
}
|
||||
|
||||
if (this._state > RUNNING) return abortHandshake(socket, 503);
|
||||
|
||||
const digest = createHash('sha1')
|
||||
.update(key + GUID)
|
||||
.digest('base64');
|
||||
@@ -360,6 +388,7 @@ function addListeners(server, map) {
|
||||
* @private
|
||||
*/
|
||||
function emitClose(server) {
|
||||
server._state = CLOSED;
|
||||
server.emit('close');
|
||||
}
|
||||
|
||||
@@ -375,7 +404,7 @@ function socketOnError() {
|
||||
/**
|
||||
* Close the connection when preconditions are not fulfilled.
|
||||
*
|
||||
* @param {net.Socket} socket The socket of the upgrade request
|
||||
* @param {(net.Socket|tls.Socket)} socket The socket of the upgrade request
|
||||
* @param {Number} code The HTTP response status code
|
||||
* @param {String} [message] The HTTP response body
|
||||
* @param {Object} [headers] Additional HTTP response headers
|
||||
@@ -383,7 +412,7 @@ function socketOnError() {
|
||||
*/
|
||||
function abortHandshake(socket, code, message, headers) {
|
||||
if (socket.writable) {
|
||||
message = message || STATUS_CODES[code];
|
||||
message = message || http.STATUS_CODES[code];
|
||||
headers = {
|
||||
Connection: 'close',
|
||||
'Content-Type': 'text/html',
|
||||
@@ -392,7 +421,7 @@ function abortHandshake(socket, code, message, headers) {
|
||||
};
|
||||
|
||||
socket.write(
|
||||
`HTTP/1.1 ${code} ${STATUS_CODES[code]}\r\n` +
|
||||
`HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r\n` +
|
||||
Object.keys(headers)
|
||||
.map((h) => `${h}: ${headers[h]}`)
|
||||
.join('\r\n') +
|
||||
|
||||
+203
-46
@@ -1,3 +1,5 @@
|
||||
/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Readable$" }] */
|
||||
|
||||
'use strict';
|
||||
|
||||
const EventEmitter = require('events');
|
||||
@@ -6,6 +8,7 @@ const http = require('http');
|
||||
const net = require('net');
|
||||
const tls = require('tls');
|
||||
const { randomBytes, createHash } = require('crypto');
|
||||
const { Readable } = require('stream');
|
||||
const { URL } = require('url');
|
||||
|
||||
const PerMessageDeflate = require('./permessage-deflate');
|
||||
@@ -36,7 +39,7 @@ class WebSocket extends EventEmitter {
|
||||
/**
|
||||
* Create a new `WebSocket`.
|
||||
*
|
||||
* @param {(String|url.URL)} address The URL to which to connect
|
||||
* @param {(String|URL)} address The URL to which to connect
|
||||
* @param {(String|String[])} [protocols] The subprotocols
|
||||
* @param {Object} [options] Connection options
|
||||
*/
|
||||
@@ -112,6 +115,50 @@ class WebSocket extends EventEmitter {
|
||||
return Object.keys(this._extensions).join();
|
||||
}
|
||||
|
||||
/**
|
||||
* @type {Function}
|
||||
*/
|
||||
/* istanbul ignore next */
|
||||
get onclose() {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/* istanbul ignore next */
|
||||
set onclose(listener) {}
|
||||
|
||||
/**
|
||||
* @type {Function}
|
||||
*/
|
||||
/* istanbul ignore next */
|
||||
get onerror() {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/* istanbul ignore next */
|
||||
set onerror(listener) {}
|
||||
|
||||
/**
|
||||
* @type {Function}
|
||||
*/
|
||||
/* istanbul ignore next */
|
||||
get onopen() {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/* istanbul ignore next */
|
||||
set onopen(listener) {}
|
||||
|
||||
/**
|
||||
* @type {Function}
|
||||
*/
|
||||
/* istanbul ignore next */
|
||||
get onmessage() {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/* istanbul ignore next */
|
||||
set onmessage(listener) {}
|
||||
|
||||
/**
|
||||
* @type {String}
|
||||
*/
|
||||
@@ -136,7 +183,8 @@ class WebSocket extends EventEmitter {
|
||||
/**
|
||||
* Set up the socket and the internal resources.
|
||||
*
|
||||
* @param {net.Socket} socket The network socket between the server and client
|
||||
* @param {(net.Socket|tls.Socket)} socket The network socket between the
|
||||
* server and client
|
||||
* @param {Buffer} head The first packet of the upgraded stream
|
||||
* @param {Number} [maxPayload=0] The maximum allowed message size
|
||||
* @private
|
||||
@@ -392,11 +440,76 @@ class WebSocket extends EventEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
readyStates.forEach((readyState, i) => {
|
||||
const descriptor = { enumerable: true, value: i };
|
||||
/**
|
||||
* @constant {Number} CONNECTING
|
||||
* @memberof WebSocket
|
||||
*/
|
||||
Object.defineProperty(WebSocket, 'CONNECTING', {
|
||||
enumerable: true,
|
||||
value: readyStates.indexOf('CONNECTING')
|
||||
});
|
||||
|
||||
Object.defineProperty(WebSocket.prototype, readyState, descriptor);
|
||||
Object.defineProperty(WebSocket, readyState, descriptor);
|
||||
/**
|
||||
* @constant {Number} CONNECTING
|
||||
* @memberof WebSocket.prototype
|
||||
*/
|
||||
Object.defineProperty(WebSocket.prototype, 'CONNECTING', {
|
||||
enumerable: true,
|
||||
value: readyStates.indexOf('CONNECTING')
|
||||
});
|
||||
|
||||
/**
|
||||
* @constant {Number} OPEN
|
||||
* @memberof WebSocket
|
||||
*/
|
||||
Object.defineProperty(WebSocket, 'OPEN', {
|
||||
enumerable: true,
|
||||
value: readyStates.indexOf('OPEN')
|
||||
});
|
||||
|
||||
/**
|
||||
* @constant {Number} OPEN
|
||||
* @memberof WebSocket.prototype
|
||||
*/
|
||||
Object.defineProperty(WebSocket.prototype, 'OPEN', {
|
||||
enumerable: true,
|
||||
value: readyStates.indexOf('OPEN')
|
||||
});
|
||||
|
||||
/**
|
||||
* @constant {Number} CLOSING
|
||||
* @memberof WebSocket
|
||||
*/
|
||||
Object.defineProperty(WebSocket, 'CLOSING', {
|
||||
enumerable: true,
|
||||
value: readyStates.indexOf('CLOSING')
|
||||
});
|
||||
|
||||
/**
|
||||
* @constant {Number} CLOSING
|
||||
* @memberof WebSocket.prototype
|
||||
*/
|
||||
Object.defineProperty(WebSocket.prototype, 'CLOSING', {
|
||||
enumerable: true,
|
||||
value: readyStates.indexOf('CLOSING')
|
||||
});
|
||||
|
||||
/**
|
||||
* @constant {Number} CLOSED
|
||||
* @memberof WebSocket
|
||||
*/
|
||||
Object.defineProperty(WebSocket, 'CLOSED', {
|
||||
enumerable: true,
|
||||
value: readyStates.indexOf('CLOSED')
|
||||
});
|
||||
|
||||
/**
|
||||
* @constant {Number} CLOSED
|
||||
* @memberof WebSocket.prototype
|
||||
*/
|
||||
Object.defineProperty(WebSocket.prototype, 'CLOSED', {
|
||||
enumerable: true,
|
||||
value: readyStates.indexOf('CLOSED')
|
||||
});
|
||||
|
||||
[
|
||||
@@ -416,14 +529,7 @@ readyStates.forEach((readyState, i) => {
|
||||
//
|
||||
['open', 'error', 'close', 'message'].forEach((method) => {
|
||||
Object.defineProperty(WebSocket.prototype, `on${method}`, {
|
||||
configurable: true,
|
||||
enumerable: true,
|
||||
/**
|
||||
* Return the listener of the event.
|
||||
*
|
||||
* @return {(Function|undefined)} The event listener or `undefined`
|
||||
* @public
|
||||
*/
|
||||
get() {
|
||||
const listeners = this.listeners(method);
|
||||
for (let i = 0; i < listeners.length; i++) {
|
||||
@@ -432,12 +538,6 @@ readyStates.forEach((readyState, i) => {
|
||||
|
||||
return undefined;
|
||||
},
|
||||
/**
|
||||
* Add a listener for the event.
|
||||
*
|
||||
* @param {Function} listener The listener to add
|
||||
* @public
|
||||
*/
|
||||
set(listener) {
|
||||
const listeners = this.listeners(method);
|
||||
for (let i = 0; i < listeners.length; i++) {
|
||||
@@ -460,7 +560,7 @@ module.exports = WebSocket;
|
||||
* Initialize a WebSocket client.
|
||||
*
|
||||
* @param {WebSocket} websocket The client to initialize
|
||||
* @param {(String|url.URL)} address The URL to which to connect
|
||||
* @param {(String|URL)} address The URL to which to connect
|
||||
* @param {String} [protocols] The subprotocols
|
||||
* @param {Object} [options] Connection options
|
||||
* @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable
|
||||
@@ -660,23 +760,51 @@ function initAsClient(websocket, address, protocols, options) {
|
||||
|
||||
if (serverProt) websocket._protocol = serverProt;
|
||||
|
||||
if (perMessageDeflate) {
|
||||
try {
|
||||
const extensions = parse(res.headers['sec-websocket-extensions']);
|
||||
const secWebSocketExtensions = res.headers['sec-websocket-extensions'];
|
||||
|
||||
if (extensions[PerMessageDeflate.extensionName]) {
|
||||
perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);
|
||||
websocket._extensions[PerMessageDeflate.extensionName] =
|
||||
perMessageDeflate;
|
||||
}
|
||||
} catch (err) {
|
||||
abortHandshake(
|
||||
websocket,
|
||||
socket,
|
||||
'Invalid Sec-WebSocket-Extensions header'
|
||||
);
|
||||
if (secWebSocketExtensions !== undefined) {
|
||||
if (!perMessageDeflate) {
|
||||
const message =
|
||||
'Server sent a Sec-WebSocket-Extensions header but no extension ' +
|
||||
'was requested';
|
||||
abortHandshake(websocket, socket, message);
|
||||
return;
|
||||
}
|
||||
|
||||
let extensions;
|
||||
|
||||
try {
|
||||
extensions = parse(secWebSocketExtensions);
|
||||
} catch (err) {
|
||||
const message = 'Invalid Sec-WebSocket-Extensions header';
|
||||
abortHandshake(websocket, socket, message);
|
||||
return;
|
||||
}
|
||||
|
||||
const extensionNames = Object.keys(extensions);
|
||||
|
||||
if (extensionNames.length) {
|
||||
if (
|
||||
extensionNames.length !== 1 ||
|
||||
extensionNames[0] !== PerMessageDeflate.extensionName
|
||||
) {
|
||||
const message =
|
||||
'Server indicated an extension that was not requested';
|
||||
abortHandshake(websocket, socket, message);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);
|
||||
} catch (err) {
|
||||
const message = 'Invalid Sec-WebSocket-Extensions header';
|
||||
abortHandshake(websocket, socket, message);
|
||||
return;
|
||||
}
|
||||
|
||||
websocket._extensions[PerMessageDeflate.extensionName] =
|
||||
perMessageDeflate;
|
||||
}
|
||||
}
|
||||
|
||||
websocket.setSocket(socket, head, opts.maxPayload);
|
||||
@@ -716,8 +844,8 @@ function tlsConnect(options) {
|
||||
* Abort the handshake and emit an error.
|
||||
*
|
||||
* @param {WebSocket} websocket The WebSocket instance
|
||||
* @param {(http.ClientRequest|net.Socket)} stream The request to abort or the
|
||||
* socket to destroy
|
||||
* @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to
|
||||
* abort or the socket to destroy
|
||||
* @param {String} message The error message
|
||||
* @private
|
||||
*/
|
||||
@@ -790,13 +918,15 @@ function sendAfterClose(websocket, data, cb) {
|
||||
function receiverOnConclude(code, reason) {
|
||||
const websocket = this[kWebSocket];
|
||||
|
||||
websocket._socket.removeListener('data', socketOnData);
|
||||
websocket._socket.resume();
|
||||
|
||||
websocket._closeFrameReceived = true;
|
||||
websocket._closeMessage = reason;
|
||||
websocket._closeCode = code;
|
||||
|
||||
if (websocket._socket[kWebSocket] === undefined) return;
|
||||
|
||||
websocket._socket.removeListener('data', socketOnData);
|
||||
process.nextTick(resume, websocket._socket);
|
||||
|
||||
if (code === 1005) websocket.close();
|
||||
else websocket.close(code, reason);
|
||||
}
|
||||
@@ -819,10 +949,18 @@ function receiverOnDrain() {
|
||||
function receiverOnError(err) {
|
||||
const websocket = this[kWebSocket];
|
||||
|
||||
websocket._socket.removeListener('data', socketOnData);
|
||||
websocket._socket.resume();
|
||||
if (websocket._socket[kWebSocket] !== undefined) {
|
||||
websocket._socket.removeListener('data', socketOnData);
|
||||
|
||||
//
|
||||
// On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See
|
||||
// https://github.com/websockets/ws/issues/1940.
|
||||
//
|
||||
process.nextTick(resume, websocket._socket);
|
||||
|
||||
websocket.close(err[kStatusCode]);
|
||||
}
|
||||
|
||||
websocket.close(err[kStatusCode]);
|
||||
websocket.emit('error', err);
|
||||
}
|
||||
|
||||
@@ -868,6 +1006,16 @@ function receiverOnPong(data) {
|
||||
this[kWebSocket].emit('pong', data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resume a readable stream
|
||||
*
|
||||
* @param {Readable} stream The readable stream
|
||||
* @private
|
||||
*/
|
||||
function resume(stream) {
|
||||
stream.resume();
|
||||
}
|
||||
|
||||
/**
|
||||
* The listener of the `net.Socket` `'close'` event.
|
||||
*
|
||||
@@ -877,10 +1025,13 @@ function socketOnClose() {
|
||||
const websocket = this[kWebSocket];
|
||||
|
||||
this.removeListener('close', socketOnClose);
|
||||
this.removeListener('data', socketOnData);
|
||||
this.removeListener('end', socketOnEnd);
|
||||
|
||||
websocket._readyState = WebSocket.CLOSING;
|
||||
|
||||
let chunk;
|
||||
|
||||
//
|
||||
// The close frame might not have been received or the `'end'` event emitted,
|
||||
// for example, if the socket was destroyed due to an error. Ensure that the
|
||||
@@ -888,13 +1039,19 @@ function socketOnClose() {
|
||||
// it. If the readable side of the socket is in flowing mode then there is no
|
||||
// buffered data as everything has been already written and `readable.read()`
|
||||
// will return `null`. If instead, the socket is paused, any possible buffered
|
||||
// data will be read as a single chunk and emitted synchronously in a single
|
||||
// `'data'` event.
|
||||
// data will be read as a single chunk.
|
||||
//
|
||||
websocket._socket.read();
|
||||
if (
|
||||
!this._readableState.endEmitted &&
|
||||
!websocket._closeFrameReceived &&
|
||||
!websocket._receiver._writableState.errorEmitted &&
|
||||
(chunk = websocket._socket.read()) !== null
|
||||
) {
|
||||
websocket._receiver.write(chunk);
|
||||
}
|
||||
|
||||
websocket._receiver.end();
|
||||
|
||||
this.removeListener('data', socketOnData);
|
||||
this[kWebSocket] = undefined;
|
||||
|
||||
clearTimeout(websocket._closeTimer);
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ws",
|
||||
"version": "7.5.1",
|
||||
"version": "7.5.5",
|
||||
"description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js",
|
||||
"keywords": [
|
||||
"HyBi",
|
||||
@@ -47,7 +47,7 @@
|
||||
"bufferutil": "^4.0.1",
|
||||
"eslint": "^7.2.0",
|
||||
"eslint-config-prettier": "^8.1.0",
|
||||
"eslint-plugin-prettier": "^3.0.1",
|
||||
"eslint-plugin-prettier": "^4.0.0",
|
||||
"mocha": "^7.0.0",
|
||||
"nyc": "^15.0.0",
|
||||
"prettier": "^2.0.5",
|
||||
|
||||
Reference in new issue
Block a user