@trufflesuite/uws-js-unofficial
Advanced tools
Comparing version 18.14.0-unofficial.10 to 18.14.0-unofficial.11
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.WebSocket = void 0; | ||
const TOO_BIG_MESSAGE = Buffer.from("Received too big message", "utf8"); | ||
/** | ||
* Converts a buffer to an `ArrayBuffer`. | ||
* | ||
* @param {Buffer} buf The buffer to convert | ||
* @return {ArrayBuffer} Converted buffer | ||
* @public | ||
*/ | ||
function toArrayBuffer(buf) { | ||
if (buf.byteLength === buf.buffer.byteLength) { | ||
return buf.buffer; | ||
} | ||
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); | ||
} | ||
const NODE_VERSION = parseInt(process.versions.node, 10); | ||
class WebSocket { | ||
constructor(internalWs) { | ||
this.internalWs = internalWs; | ||
// `nodebuffer` is already the default, but I just wanted to be explicit | ||
// here because when `nodebuffer` is the binaryType the `message` event's | ||
// data type is guaranteed to be a `Buffer`. We don't need to check for | ||
// different types of data. | ||
// I mention all this because if `arraybuffer` or `fragment` is used for the | ||
// binaryType the `"message"` event's `data` may end up being | ||
// `ArrayBuffer | Buffer`, or `Buffer[] | Buffer`, respectively. | ||
internalWs.binaryType = "nodebuffer"; | ||
} | ||
@@ -19,3 +42,12 @@ initialize(behavior) { | ||
this.internalWs._closeCode = 1006; | ||
this.internalWs._closeMessage = "Received too big message"; | ||
this.internalWs._closeMessage = TOO_BIG_MESSAGE; | ||
// node 14 and up automatically destroy the socket after an error occurs | ||
// but versions before that they don't. We need to do our own cleanup | ||
// here, otherwise errors (like "Max payload size exceeded") won't | ||
// immediately close the websocket connection. | ||
// See https://github.com/websockets/ws/issues/1940#issuecomment-907432872 | ||
// for more information | ||
if (NODE_VERSION < 14) { | ||
this.internalWs.terminate(); | ||
} | ||
} | ||
@@ -26,22 +58,5 @@ else { | ||
}); | ||
this.internalWs.on("message", (message) => { | ||
this.internalWs.on("message", (message, isBinary) => { | ||
if (typeof behavior.message === "function") { | ||
if (typeof message === "string") { | ||
const buf = new ArrayBuffer(message.length); | ||
const bufView = new Uint8Array(buf); | ||
for (let i = 0; i < message.length; i++) { | ||
bufView[i] = message.charCodeAt(i); | ||
} | ||
behavior.message(this, buf, false); | ||
} | ||
else if (Buffer.isBuffer(message)) { | ||
const buf = (new Uint8Array(message)).buffer; | ||
behavior.message(this, buf, true); | ||
} | ||
else if (Array.isArray(message)) { | ||
// array of buffers. do nothing? | ||
} | ||
else { | ||
behavior.message(this, message, true); | ||
} | ||
behavior.message(this, toArrayBuffer(message), isBinary); | ||
} | ||
@@ -53,7 +68,3 @@ }); | ||
if (typeof behavior.close === "function") { | ||
const buf = new ArrayBuffer(reason.length); | ||
const bufView = new Uint8Array(buf); | ||
for (let i = 0; i < reason.length; i++) { | ||
bufView[i] = reason.charCodeAt(i); | ||
} | ||
const buf = reason ? toArrayBuffer(reason) : new ArrayBuffer(0); | ||
behavior.close(this, code, buf); | ||
@@ -136,2 +147,2 @@ } | ||
exports.WebSocket = WebSocket; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhbGxiYWNrL3dlYnNvY2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxNQUFhLFNBQVM7SUFHcEIsWUFBWSxVQUE2QjtRQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQTJCO1FBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUVyQyxJQUFJLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDdkMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3BDLHFFQUFxRTtZQUNyRSx5RUFBeUU7WUFDekUsWUFBWTtZQUNaLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSywyQkFBMkIsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLFVBQWtCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFVBQWtCLENBQUMsYUFBYSxHQUFHLDBCQUEwQixDQUFDO2FBQ3JFO2lCQUFNO2dCQUNMLE1BQU0sS0FBSyxDQUFDO2FBQ2I7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3hDLElBQUksT0FBTyxRQUFRLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRTtnQkFDMUMsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7b0JBQy9CLE1BQU0sR0FBRyxHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENB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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhbGxiYWNrL3dlYnNvY2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRXhFOzs7Ozs7R0FNRztBQUNILFNBQVMsYUFBYSxDQUFDLEdBQVc7SUFDaEMsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1FBQzVDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQztLQUNuQjtJQUVELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRXpELE1BQWEsU0FBUztJQUdwQixZQUFZLFVBQTZCO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLHdFQUF3RTtRQUN4RSx5RUFBeUU7UUFDekUsdUVBQXVFO1FBQ3ZFLDJCQUEyQjtRQUMzQiw0RUFBNEU7UUFDNUUsNkRBQTZEO1FBQzdELGdFQUFnRTtRQUNoRSxVQUFVLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztJQUN2QyxDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQTJCO1FBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUVyQyxJQUFJLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDdkMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQjtRQUVELElBQUksQ0FBQyxVQUFV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 |
{ | ||
"name": "@trufflesuite/uws-js-unofficial", | ||
"version": "18.14.0-unofficial.10", | ||
"version": "18.14.0-unofficial.11", | ||
"description": "Simple, secure, & standards compliant web server for the most demanding of applications.", | ||
@@ -38,3 +38,3 @@ "main": "src/uws.js", | ||
"devDependencies": { | ||
"@types/ws": "^7.4.1", | ||
"@types/ws": "^7.4.7", | ||
"electron-rebuild": "^2.3.5", | ||
@@ -45,3 +45,3 @@ "node-gyp": "^7.1.2", | ||
"dependencies": { | ||
"ws": "^7.4.4" | ||
"ws": "^8.2.0" | ||
}, | ||
@@ -48,0 +48,0 @@ "optionalDependencies": { |
import { | ||
RecognizedString, | ||
WebSocket as uWsWebSocket, | ||
WebSocketBehavior | ||
WebSocketBehavior, | ||
} from "../../docs/index"; | ||
import InternalWebSocket from "ws"; | ||
const TOO_BIG_MESSAGE = Buffer.from("Received too big message", "utf8"); | ||
/** | ||
* Converts a buffer to an `ArrayBuffer`. | ||
* | ||
* @param {Buffer} buf The buffer to convert | ||
* @return {ArrayBuffer} Converted buffer | ||
* @public | ||
*/ | ||
function toArrayBuffer(buf: Buffer) { | ||
if (buf.byteLength === buf.buffer.byteLength) { | ||
return buf.buffer; | ||
} | ||
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); | ||
} | ||
const NODE_VERSION = parseInt(process.versions.node, 10); | ||
export class WebSocket implements uWsWebSocket { | ||
@@ -13,2 +32,10 @@ private internalWs: InternalWebSocket; | ||
this.internalWs = internalWs; | ||
// `nodebuffer` is already the default, but I just wanted to be explicit | ||
// here because when `nodebuffer` is the binaryType the `message` event's | ||
// data type is guaranteed to be a `Buffer`. We don't need to check for | ||
// different types of data. | ||
// I mention all this because if `arraybuffer` or `fragment` is used for the | ||
// binaryType the `"message"` event's `data` may end up being | ||
// `ArrayBuffer | Buffer`, or `Buffer[] | Buffer`, respectively. | ||
internalWs.binaryType = "nodebuffer"; | ||
} | ||
@@ -29,3 +56,13 @@ | ||
(this.internalWs as any)._closeCode = 1006; | ||
(this.internalWs as any)._closeMessage = "Received too big message"; | ||
(this.internalWs as any)._closeMessage = TOO_BIG_MESSAGE; | ||
// node 14 and up automatically destroy the socket after an error occurs | ||
// but versions before that they don't. We need to do our own cleanup | ||
// here, otherwise errors (like "Max payload size exceeded") won't | ||
// immediately close the websocket connection. | ||
// See https://github.com/websockets/ws/issues/1940#issuecomment-907432872 | ||
// for more information | ||
if (NODE_VERSION < 14) { | ||
this.internalWs.terminate(); | ||
} | ||
} else { | ||
@@ -36,19 +73,5 @@ throw error; | ||
this.internalWs.on("message", (message) => { | ||
this.internalWs.on("message", (message: Buffer, isBinary: boolean) => { | ||
if (typeof behavior.message === "function") { | ||
if (typeof message === "string") { | ||
const buf = new ArrayBuffer(message.length); | ||
const bufView = new Uint8Array(buf); | ||
for (let i = 0; i < message.length; i++) { | ||
bufView[i] = message.charCodeAt(i); | ||
} | ||
behavior.message(this, buf, false); | ||
} else if (Buffer.isBuffer(message)) { | ||
const buf = (new Uint8Array(message)).buffer; | ||
behavior.message(this, buf, true); | ||
} else if (Array.isArray(message)) { | ||
// array of buffers. do nothing? | ||
} else { | ||
behavior.message(this, message, true); | ||
} | ||
behavior.message(this, toArrayBuffer(message), isBinary); | ||
} | ||
@@ -60,9 +83,5 @@ }); | ||
this.internalWs.on("close", (code, reason) => { | ||
this.internalWs.on("close", (code, reason: Buffer) => { | ||
if (typeof behavior.close === "function") { | ||
const buf = new ArrayBuffer(reason.length); | ||
const bufView = new Uint8Array(buf); | ||
for (let i = 0; i < reason.length; i++) { | ||
bufView[i] = reason.charCodeAt(i); | ||
} | ||
const buf = reason ? toArrayBuffer(reason) : new ArrayBuffer(0); | ||
behavior.close(this, code, buf); | ||
@@ -69,0 +88,0 @@ } |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
29323684
4729