Skip to content

Latest commit

 

History

History
730 lines (412 loc) · 27.1 KB

CHANGELOG.md

File metadata and controls

730 lines (412 loc) · 27.1 KB

History

2022

2021

2020

2019

2018

Release notes

4.5.4 (2022-11-22)

This release contains a bump of:

Dependencies

4.5.3 (2022-10-15)

Bug Fixes

  • typings: accept an HTTP2 server in the constructor (d3d0a2d)
  • typings: apply types to "io.timeout(...).emit()" calls (e357daf)

4.5.2 (2022-09-02)

Bug Fixes

  • prevent the socket from joining a room after disconnection (18f3fda)
  • uws: prevent the server from crashing after upgrade (ba497ee)

2.5.0 (2022-06-26)

Bug Fixes

  • fix race condition in dynamic namespaces (05e1278)
  • ignore packet received after disconnection (22d4bdf)
  • only set 'connected' to true after middleware execution (226cc16)
  • prevent the socket from joining a room after disconnection (f223178)

4.5.1 (2022-05-17)

Bug Fixes

  • forward the local flag to the adapter when using fetchSockets() (30430f0)
  • typings: add HTTPS server to accepted types (#4351) (9b43c91)

4.5.0 (2022-04-23)

Bug Fixes

  • typings: ensure compatibility with TypeScript 3.x (#4259) (02c87a8)

Features

  • add support for catch-all listeners for outgoing packets (531104d)

This is similar to onAny(), but for outgoing packets.

Syntax:

socket.onAnyOutgoing((event, ...args) => {
  console.log(event);
});
  • broadcast and expect multiple acks (8b20457)

Syntax:

io.timeout(1000).emit("some-event", (err, responses) => {
  // ...
});
  • add the "maxPayload" field in the handshake details (088dcb4)

So that clients in HTTP long-polling can decide how many packets they have to send to stay under the maxHttpBufferSize value.

This is a backward compatible change which should not mandate a new major revision of the protocol (we stay in v4), as we only add a field in the JSON-encoded handshake data:

0{"sid":"lv_VI97HAXpY6yYWAAAC","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000,"maxPayload":1000000}

4.4.1 (2022-01-06)

Bug Fixes

  • types: make RemoteSocket.data type safe (#4234) (770ee59)
  • types: pass SocketData type to custom namespaces (#4233) (f2b8de7)

4.4.0 (2021-11-18)

Bug Fixes

  • only set 'connected' to true after middleware execution (02b0f73)

Features

  • add an implementation based on uWebSockets.js (c0d8c5a)
  • add timeout feature (f0ed42f)
  • add type information to socket.data (#4159) (fe8730c)

4.3.2 (2021-11-08)

Bug Fixes

  • fix race condition in dynamic namespaces (#4137) (9d86397)

4.3.1 (2021-10-16)

Bug Fixes

4.3.0 (2021-10-14)

Bug Fixes

  • typings: add name field to cookie option (#4099) (033c5d3)
  • send volatile packets with binary attachments (dc81fcf)

Features

4.2.0 (2021-08-30)

Bug Fixes

  • typings: allow async listener in typed events (ccfd8ca)

Features

  • ignore the query string when serving client JavaScript (#4024) (24fee27)

4.1.3 (2021-07-10)

Bug Fixes

  • fix io.except() method (94e27cd)
  • remove x-sourcemap header (a4dffc6)

4.1.2 (2021-05-17)

Bug Fixes

  • typings: ensure compatibility with TypeScript 3.x (0cb6ac9)
  • ensure compatibility with previous versions of the adapter (a2cf248)

4.1.1 (2021-05-11)

Bug Fixes

  • typings: properly type server-side events (b84ed1e)
  • typings: properly type the adapter attribute (891b187)

4.1.0 (2021-05-11)

Features

  • add support for inter-server communication (93cce05)
  • notify upon namespace creation (499c892)
  • add a "connection_error" event (7096e98, from engine.io)
  • add the "initial_headers" and "headers" events (2527543, from engine.io)

Performance Improvements

  • add support for the "wsPreEncoded" writing option (dc381b7)

4.0.2 (2021-05-06)

Bug Fixes

  • typings: make "engine" attribute public (b81ce4c)
  • properly export the Socket class (d65b6ee)

4.0.1 (2021-03-31)

Bug Fixes

  • typings: add fallback to untyped event listener (#3834) (a11152f)
  • typings: update return type from emit (#3843) (1a72ae4)

4.0.0 (2021-03-10)

Bug Fixes

  • make io.to(...) immutable (ac9e8ca)

Features

  • add some utility methods (b25495c)
  • add support for typed events (#3822) (0107510)
  • allow to exclude specific rooms when broadcasting (#3789) (7de2e87)
  • allow to pass an array to io.to(...) (085d1de)

3.1.2 (2021-02-26)

Bug Fixes

  • ignore packets received after disconnection (494c64e)

3.1.1 (2021-02-03)

Bug Fixes

  • properly parse the CONNECT packet in v2 compatibility mode (6f4bd7f)
  • typings: add return types and general-case overload signatures (#3776) (9e8f288)
  • typings: update the types of "query", "auth" and "headers" (4f2e9a7)

3.1.0 (2021-01-15)

Features

Bug Fixes

  • allow integers as event names (1c220dd)

2.4.1 (2021-01-07)

Reverts

  • fix(security): do not allow all origins by default (a169050)

3.0.5 (2021-01-05)

Bug Fixes

  • properly clear timeout on connection failure (170b739)

Reverts

  • restore the socket middleware functionality (bf54327)

2.4.0 (2021-01-04)

Bug Fixes

  • security: do not allow all origins by default (f78a575)
  • properly overwrite the query sent in the handshake (d33a619)

3.0.4 (2020-12-07)

3.0.3 (2020-11-19)

3.0.2 (2020-11-17)

Bug Fixes

  • merge Engine.IO options (43705d7)

3.0.1 (2020-11-09)

Bug Fixes

  • export ServerOptions and Namespace types (#3684) (f62f180)
  • typings: update the signature of the emit method (50671d9)

3.0.0 (2020-11-05)

Bug Fixes

  • close clients with no namespace (91cd255)

Features

  • emit an Error object upon middleware error (54bf4a4)
  • serve msgpack bundle (aa7574f)
  • add support for catch-all listeners (5c73733)
  • make Socket#join() and Socket#leave() synchronous (129c641)
  • remove prod dependency to socket.io-client (7603da7)
  • move binary detection back to the parser (669592d)
  • add ES6 module export (8b6b100)
  • do not reuse the Engine.IO id (2875d2c)
  • remove Server#set() method (029f478)
  • remove Socket#rooms object (1507b41)
  • remove the 'origins' option (a8c0600)
  • remove the implicit connection to the default namespace (3289f7e)
  • throw upon reserved event names (4bd5b23)

BREAKING CHANGES

  • the Socket#use() method is removed (see 5c73733)

  • Socket#join() and Socket#leave() do not accept a callback argument anymore.

Before:

socket.join("room1", () => {
 io.to("room1").emit("hello");
});

After:

socket.join("room1");
io.to("room1").emit("hello");
// or await socket.join("room1"); for custom adapters
  • the "connected" map is renamed to "sockets"
  • the Socket#binary() method is removed, as this use case is now covered by the ability to provide your own parser.
  • the 'origins' option is removed

Before:

new Server(3000, {
  origins: ["https://example.com"]
});

The 'origins' option was used in the allowRequest method, in order to determine whether the request should pass or not. And the Engine.IO server would implicitly add the necessary Access-Control-Allow-xxx headers.

After:

new Server(3000, {
  cors: {
    origin: "https://example.com",
    methods: ["GET", "POST"],
    allowedHeaders: ["content-type"]
  }
});

The already existing 'allowRequest' option can be used for validation:

new Server(3000, {
  allowRequest: (req, callback) => {
    callback(null, req.headers.referer.startsWith("https://example.com"));
  }
});
  • Socket#rooms is now a Set instead of an object

  • Namespace#connected is now a Map instead of an object

  • there is no more implicit connection to the default namespace:

// client-side
const socket = io("/admin");

// server-side
io.on("connect", socket => {
  // not triggered anymore
})

io.use((socket, next) => {
  // not triggered anymore
});

io.of("/admin").use((socket, next) => {
  // triggered
});
  • the Server#set() method was removed

This method was kept for backward-compatibility with pre-1.0 versions.

3.0.0-rc4 (2020-10-30)

Features

  • emit an Error object upon middleware error (54bf4a4)
  • serve msgpack bundle (aa7574f)

3.0.0-rc3 (2020-10-26)

Features

  • add support for catch-all listeners (5c73733)
  • make Socket#join() and Socket#leave() synchronous (129c641)
  • remove prod dependency to socket.io-client (7603da7)

BREAKING CHANGES

  • the Socket#use() method is removed (see 5c73733)

  • Socket#join() and Socket#leave() do not accept a callback argument anymore.

Before:

socket.join("room1", () => {
 io.to("room1").emit("hello");
});

After:

socket.join("room1");
io.to("room1").emit("hello");
// or await socket.join("room1"); for custom adapters

3.0.0-rc2 (2020-10-15)

Bug Fixes

  • close clients with no namespace (91cd255)

Code Refactoring

  • remove duplicate _sockets map (8a5db7f)

Features

  • move binary detection back to the parser (669592d)

BREAKING CHANGES

  • the "connected" map is renamed to "sockets"
  • the Socket#binary() method is removed, as this use case is now covered by the ability to provide your own parser.

3.0.0-rc1 (2020-10-13)

Features

  • add ES6 module export (8b6b100)
  • do not reuse the Engine.IO id (2875d2c)
  • remove Server#set() method (029f478)
  • remove Socket#rooms object (1507b41)
  • remove the 'origins' option (a8c0600)
  • remove the implicit connection to the default namespace (3289f7e)
  • throw upon reserved event names (4bd5b23)

BREAKING CHANGES

  • the 'origins' option is removed

Before:

new Server(3000, {
  origins: ["https://example.com"]
});

The 'origins' option was used in the allowRequest method, in order to determine whether the request should pass or not. And the Engine.IO server would implicitly add the necessary Access-Control-Allow-xxx headers.

After:

new Server(3000, {
  cors: {
    origin: "https://example.com",
    methods: ["GET", "POST"],
    allowedHeaders: ["content-type"]
  }
});

The already existing 'allowRequest' option can be used for validation:

new Server(3000, {
  allowRequest: (req, callback) => {
    callback(null, req.headers.referer.startsWith("https://example.com"));
  }
});
  • Socket#rooms is now a Set instead of an object

  • Namespace#connected is now a Map instead of an object

  • there is no more implicit connection to the default namespace:

// client-side
const socket = io("/admin");

// server-side
io.on("connect", socket => {
  // not triggered anymore
})

io.use((socket, next) => {
  // not triggered anymore
});

io.of("/admin").use((socket, next) => {
  // triggered
});
  • the Server#set() method was removed

This method was kept for backward-compatibility with pre-1.0 versions.

2.3.0 (2019-09-20)

This release mainly contains a bump of the engine.io and ws packages, but no additional features.

2.2.0 (2018-11-29)

Features

  • add cache-control header when serving the client source (#2907) (b00ae50)

Bug fixes

  • throw an error when trying to access the clients of a dynamic namespace (#3355) (a7fbd1a)

2.1.1 (2018-05-17)

Features

socket.local.to('room101').emit(/* */);

2.1.0 (2018-03-29)

Features

// by default, the object is recursively scanned to check whether it contains some binary data
// in the following example, the check is skipped in order to improve performance
socket.binary(false).emit('plain-object', object);

// it also works at the namespace level
io.binary(false).emit('plain-object', object);
io.of(/^\/dynamic-\d+$/).on('connect', (socket) => {
  // socket.nsp.name = '/dynamic-101'
});

// client-side
const client = require('socket.io-client')('/dynamic-101');

Bug fixes

  • properly emit 'connect' when using a custom namespace (#3197) (f4fc517)
  • include the protocol in the origins check (#3198) (1f1d64b)

Important note ⚠️ from Engine.IO 3.2.0 release

There are two non-breaking changes that are somehow quite important:

  • ws was reverted as the default wsEngine (socketio/engine.io#550), as there was several blocking issues with uws. You can still use uws by running npm install uws --save in your project and using the wsEngine option:
var engine = require('engine.io');
var server = engine.listen(3000, {
  wsEngine: 'uws'
});