Socket
Socket
Sign inDemoInstall

engine.io

Package Overview
Dependencies
20
Maintainers
2
Versions
147
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 6.5.1 to 6.5.2-alpha.1

32

build/server.js

@@ -14,16 +14,13 @@ "use strict";

const webtransport_1 = require("./transports/webtransport");
const util_1 = require("util");
const engine_io_parser_1 = require("engine.io-parser");
const debug = (0, debug_1.default)("engine");
const kResponseHeaders = Symbol("responseHeaders");
const TEXT_DECODER = new util_1.TextDecoder();
function parseSessionId(handshake) {
if (handshake.startsWith("0{")) {
try {
const parsed = JSON.parse(handshake.substring(1));
if (typeof parsed.sid === "string") {
return parsed.sid;
}
function parseSessionId(data) {
try {
const parsed = JSON.parse(data);
if (typeof parsed.sid === "string") {
return parsed.sid;
}
catch (e) { }
}
catch (e) { }
}

@@ -347,3 +344,4 @@ class BaseServer extends events_1.EventEmitter {

const stream = result.value;
const reader = stream.readable.getReader();
const transformStream = (0, engine_io_parser_1.createPacketDecoderStream)(this.opts.maxHttpBufferSize, "nodebuffer");
const reader = stream.readable.pipeThrough(transformStream).getReader();
// reading the first packet of the stream

@@ -356,7 +354,7 @@ const { value, done } = await reader.read();

clearTimeout(timeout);
const handshake = TEXT_DECODER.decode(value);
// handshake is either
// "0" => new session
// '0{"sid":"xxxx"}' => upgrade
if (handshake === "0") {
if (value.type !== "open") {
debug("invalid WebTransport handshake");
return session.close();
}
if (value.data === undefined) {
const transport = new webtransport_1.WebTransport(session, stream, reader);

@@ -376,3 +374,3 @@ // note: we cannot use "this.generateId()", because there is no "req" argument

}
const sid = parseSessionId(handshake);
const sid = parseSessionId(value.data);
if (!sid) {

@@ -379,0 +377,0 @@ debug("invalid WebTransport handshake");

@@ -11,4 +11,4 @@ import { Transport } from "../transport";

get supportsFraming(): boolean;
send(packets: any): void;
send(packets: any): Promise<void>;
doClose(fn: any): void;
}

@@ -6,12 +6,4 @@ "use strict";

const debug_1 = require("debug");
const engine_io_parser_1 = require("engine.io-parser");
const debug = (0, debug_1.default)("engine:webtransport");
const BINARY_HEADER = Buffer.of(54);
function shouldIncludeBinaryHeader(packet, encoded) {
// 48 === "0".charCodeAt(0) (OPEN packet type)
// 54 === "6".charCodeAt(0) (NOOP packet type)
return (packet.type === "message" &&
typeof packet.data !== "string" &&
encoded[0] >= 48 &&
encoded[0] <= 54);
}
/**

@@ -24,19 +16,20 @@ * Reference: https://developer.mozilla.org/en-US/docs/Web/API/WebTransport_API

this.session = session;
this.writer = stream.writable.getWriter();
const transformStream = (0, engine_io_parser_1.createPacketEncoderStream)();
transformStream.readable.pipeTo(stream.writable);
this.writer = transformStream.writable.getWriter();
(async () => {
let binaryFlag = false;
while (true) {
const { value, done } = await reader.read();
if (done) {
debug("session is closed");
break;
try {
while (true) {
const { value, done } = await reader.read();
if (done) {
debug("session is closed");
break;
}
debug("received chunk: %o", value);
this.onPacket(value);
}
debug("received chunk: %o", value);
if (!binaryFlag && value.byteLength === 1 && value[0] === 54) {
binaryFlag = true;
continue;
}
this.onPacket(this.parser.decodePacketFromBinary(value, binaryFlag, "nodebuffer"));
binaryFlag = false;
}
catch (e) {
debug("error while reading: %s", e.message);
}
})();

@@ -52,20 +45,15 @@ session.closed.then(() => this.onClose());

}
send(packets) {
async send(packets) {
this.writable = false;
for (let i = 0; i < packets.length; i++) {
const packet = packets[i];
const isLast = i + 1 === packets.length;
this.parser.encodePacketToBinary(packet, (data) => {
if (shouldIncludeBinaryHeader(packet, data)) {
debug("writing binary header");
this.writer.write(BINARY_HEADER);
}
debug("writing chunk: %o", data);
this.writer.write(data);
if (isLast) {
this.writable = true;
this.emit("drain");
}
});
try {
for (let i = 0; i < packets.length; i++) {
const packet = packets[i];
await this.writer.write(packet);
}
}
catch (e) {
debug("error while writing: %s", e.message);
}
this.writable = true;
this.emit("drain");
}

@@ -72,0 +60,0 @@ doClose(fn) {

{
"name": "engine.io",
"version": "6.5.1",
"version": "6.5.2-alpha.1",
"description": "The realtime engine behind Socket.IO. Provides the foundation of a bidirectional connection between client and server",

@@ -42,3 +42,3 @@ "type": "commonjs",

"debug": "~4.3.1",
"engine.io-parser": "~5.1.0",
"engine.io-parser": "~5.2.1",
"ws": "~8.11.0"

@@ -83,4 +83,4 @@ },

"engines": {
"node": ">=10.0.0"
"node": ">=10.2.0"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc