socketio/socket.io (socket.io)
### [`v4.6.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#462-2023-05-31)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.6.1...4.6.2)
##### Bug Fixes
- **exports:** move `types` condition to the top ([#4698](https://togithub.com/socketio/socket.io/issues/4698)) ([3d44aae](https://togithub.com/socketio/socket.io/commit/3d44aae381af38349fdb808d510d9f47a0c2507e))
##### Dependencies
- [`engine.io@~6.4.2`](https://togithub.com/socketio/engine.io/releases/tag/6.4.0) ([diff](https://togithub.com/socketio/engine.io/compare/6.4.1...6.4.2))
- [`ws@~8.11.0`](https://togithub.com/websockets/ws/releases/tag/8.11.0) (no change)
### [`v4.6.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#461-2023-02-20)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.6.0...4.6.1)
##### Bug Fixes
- properly handle manually created dynamic namespaces ([0d0a7a2](https://togithub.com/socketio/socket.io/commit/0d0a7a22b5ff95f864216c529114b7dd41738d1e))
- **types:** fix nodenext module resolution compatibility ([#4625](https://togithub.com/socketio/socket.io/issues/4625)) ([d0b22c6](https://togithub.com/socketio/socket.io/commit/d0b22c630208669aceb7ae013180c99ef90279b0))
##### Dependencies
- [`engine.io@~6.4.1`](https://togithub.com/socketio/engine.io/releases/tag/6.4.1) ([diff](https://togithub.com/socketio/engine.io/compare/6.4.0...6.4.1))
- [`ws@~8.11.0`](https://togithub.com/websockets/ws/releases/tag/8.11.0) (no change)
### [`v4.6.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#460-2023-02-07)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.5.4...4.6.0)
##### Bug Fixes
- add timeout method to remote socket ([#4558](https://togithub.com/socketio/socket.io/issues/4558)) ([0c0eb00](https://togithub.com/socketio/socket.io/commit/0c0eb0016317218c2be3641e706cfaa9bea39a2d))
- **typings:** properly type emits with timeout ([f3ada7d](https://togithub.com/socketio/socket.io/commit/f3ada7d8ccc02eeced2b9b9ac8e4bc921eb630d2))
##### Features
##### Promise-based acknowledgements
This commit adds some syntactic sugar around acknowledgements:
- `emitWithAck()`
```js
try {
const responses = await io.timeout(1000).emitWithAck("some-event");
console.log(responses); // one response per client
} catch (e) {
// some clients did not acknowledge the event in the given delay
}
io.on("connection", async (socket) => {
// without timeout
const response = await socket.emitWithAck("hello", "world");
// with a specific timeout
try {
const response = await socket.timeout(1000).emitWithAck("hello", "world");
} catch (err) {
// the client did not acknowledge the event in the given delay
}
});
```
- `serverSideEmitWithAck()`
```js
try {
const responses = await io.timeout(1000).serverSideEmitWithAck("some-event");
console.log(responses); // one response per server (except itself)
} catch (e) {
// some servers did not acknowledge the event in the given delay
}
```
Added in [184f3cf](https://togithub.com/socketio/socket.io/commit/184f3cf7af57acc4b0948eee307f25f8536eb6c8).
##### Connection state recovery
This feature allows a client to reconnect after a temporary disconnection and restore its state:
- id
- rooms
- data
- missed packets
Usage:
```js
import { Server } from "socket.io";
const io = new Server({
connectionStateRecovery: {
// default values
maxDisconnectionDuration: 2 * 60 * 1000,
skipMiddlewares: true,
},
});
io.on("connection", (socket) => {
console.log(socket.recovered); // whether the state was recovered or not
});
```
Here's how it works:
- the server sends a session ID during the handshake (which is different from the current `id` attribute, which is public and can be freely shared)
- the server also includes an offset in each packet (added at the end of the data array, for backward compatibility)
- upon temporary disconnection, the server stores the client state for a given delay (implemented at the adapter level)
- upon reconnection, the client sends both the session ID and the last offset it has processed, and the server tries to restore the state
The in-memory adapter already supports this feature, and we will soon update the Postgres and MongoDB adapters. We will also create a new adapter based on [Redis Streams](https://redis.io/docs/data-types/streams/), which will support this feature.
Added in [54d5ee0](https://togithub.com/socketio/socket.io/commit/54d5ee05a684371191e207b8089f09fc24eb5107).
##### Compatibility (for real) with Express middlewares
This feature implements middlewares at the Engine.IO level, because Socket.IO middlewares are meant for namespace authorization and are not executed during a classic HTTP request/response cycle.
Syntax:
```js
io.engine.use((req, res, next) => {
// do something
next();
});
// with express-session
import session from "express-session";
io.engine.use(session({
secret: "keyboard cat",
resave: false,
saveUninitialized: true,
cookie: { secure: true }
}));
// with helmet
import helmet from "helmet";
io.engine.use(helmet());
```
A workaround was possible by using the allowRequest option and the "headers" event, but this feels way cleaner and works with upgrade requests too.
Added in [24786e7](https://togithub.com/socketio/engine.io/commit/24786e77c5403b1c4b5a2bc84e2af06f9187f74a).
##### Error details in the disconnecting and disconnect events
The `disconnect` event will now contain additional details about the disconnection reason.
```js
io.on("connection", (socket) => {
socket.on("disconnect", (reason, description) => {
console.log(description);
});
});
```
Added in [8aa9499](https://togithub.com/socketio/socket.io/commit/8aa94991cee5518567d6254eec04b23f81510257).
##### Automatic removal of empty child namespaces
This commit adds a new option, "cleanupEmptyChildNamespaces". With this option enabled (disabled by default), when a socket disconnects from a dynamic namespace and if there are no other sockets connected to it then the namespace will be cleaned up and its adapter will be closed.
```js
import { createServer } from "node:http";
import { Server } from "socket.io";
const httpServer = createServer();
const io = new Server(httpServer, {
cleanupEmptyChildNamespaces: true
});
```
Added in [5d9220b](https://togithub.com/socketio/socket.io/commit/5d9220b69adf73e086c27bbb63a4976b348f7c4c).
##### A new "addTrailingSlash" option
The trailing slash which was added by default can now be disabled:
```js
import { createServer } from "node:http";
import { Server } from "socket.io";
const httpServer = createServer();
const io = new Server(httpServer, {
addTrailingSlash: false
});
```
In the example above, the clients can omit the trailing slash and use `/socket.io` instead of `/socket.io/`.
Added in [d0fd474](https://togithub.com/socketio/engine.io/commit/d0fd4746afa396297f07bb62e539b0c1c4018d7c).
##### Performance Improvements
- precompute the WebSocket frames when broadcasting ([da2b542](https://togithub.com/socketio/socket.io/commit/da2b54279749adc5279c9ac4742b01b36c01cff0))
##### Dependencies
- [`engine.io@~6.4.0`](https://togithub.com/socketio/engine.io/releases/tag/6.4.0) (https://github.com/socketio/engine.io/compare/6.2.1...6.4.0)
- [`ws@~8.11.0`](https://togithub.com/websockets/ws/releases/tag/8.11.0) (https://github.com/websockets/ws/compare/8.2.3...8.11.0)
### [`v4.5.4`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#454-2022-11-22)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.5.3...4.5.4)
This release contains a bump of:
- `engine.io` in order to fix [CVE-2022-41940](https://togithub.com/socketio/engine.io/security/advisories/GHSA-r7qp-cfhv-p84w)
- `socket.io-parser` in order to fix [CVE-2022-2421](https://togithub.com/advisories/GHSA-qm95-pgcg-qqfq).
##### Dependencies
- [`engine.io@~6.2.1`](https://togithub.com/socketio/engine.io/releases/tag/6.2.1) ([diff](https://togithub.com/socketio/engine.io/compare/6.2.0...6.2.1))
- [`ws@~8.2.3`](https://togithub.com/websockets/ws/releases/tag/8.2.3) (no change)
### [`v4.5.3`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#453-2022-10-15)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.5.2...4.5.3)
##### Bug Fixes
- **typings:** accept an HTTP2 server in the constructor ([d3d0a2d](https://togithub.com/socketio/socket.io/commit/d3d0a2d5beaff51fd145f810bcaf6914213f8a06))
- **typings:** apply types to "io.timeout(...).emit()" calls ([e357daf](https://togithub.com/socketio/socket.io/commit/e357daf5858560bc84e7e50cd36f0278d6721ea1))
##### Dependencies
- [`engine.io@~6.2.0`](https://togithub.com/socketio/engine.io/releases/tag/6.2.1) (no change)
- [`ws@~8.2.3`](https://togithub.com/websockets/ws/releases/tag/8.2.3) (no change)
### [`v4.5.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#452-2022-09-02)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.5.1...4.5.2)
##### Bug Fixes
- prevent the socket from joining a room after disconnection ([18f3fda](https://togithub.com/socketio/socket.io/commit/18f3fdab12947a9fee3e9c37cfc1da97027d1473))
- **uws:** prevent the server from crashing after upgrade ([ba497ee](https://togithub.com/socketio/socket.io/commit/ba497ee3eb52c4abf1464380d015d8c788714364))
##### Dependencies
- [`engine.io@~6.2.0`](https://togithub.com/socketio/engine.io/releases/tag/6.2.0) (no change)
- [`ws@~8.2.3`](https://togithub.com/websockets/ws/releases/tag/8.2.3) (no change)
### [`v4.5.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#451-2022-05-17)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.5.0...4.5.1)
##### Bug Fixes
- forward the local flag to the adapter when using fetchSockets() ([30430f0](https://togithub.com/socketio/socket.io/commit/30430f0985f8e7c49394543d4c84913b6a15df60))
- **typings:** add HTTPS server to accepted types ([#4351](https://togithub.com/socketio/socket.io/issues/4351)) ([9b43c91](https://togithub.com/socketio/socket.io/commit/9b43c9167cff817c60fa29dbda2ef7cd938aff51))
##### Dependencies
- [`engine.io@~6.2.0`](https://togithub.com/socketio/engine.io/releases/tag/6.2.0) (no change)
- [`ws@~8.2.3`](https://togithub.com/websockets/ws/releases/tag/8.2.3) (no change)
### [`v4.5.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#450-2022-04-23)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.4.1...4.5.0)
##### Bug Fixes
- **typings:** ensure compatibility with TypeScript 3.x ([#4259](https://togithub.com/socketio/socket.io/issues/4259)) ([02c87a8](https://togithub.com/socketio/socket.io/commit/02c87a85614e217b8e7b93753f315790ae9d99f6))
##### Features
##### Catch-all listeners for outgoing packets
This is similar to `onAny()`, but for outgoing packets.
Syntax:
```js
socket.onAnyOutgoing((event, ...args) => {
console.log(event);
});
```
Added in [531104d](https://togithub.com/socketio/socket.io/commit/531104d332690138b7aab84d5583d6204132c8b4).
##### Broadcast and expect multiple acknowledgements
Syntax:
```js
io.timeout(1000).emit("some-event", (err, responses) => {
// ...
});
```
Added in [8b20457](https://togithub.com/socketio/socket.io/commit/8b204570a94979bbec307f23ca078f30f5cf07b0).
##### `maxHttpBufferSize` value negotiation
A "maxPayload" field is now included in the Engine.IO handshake, 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}
Added in [088dcb4](https://togithub.com/socketio/engine.io/commit/088dcb4dff60df39785df13d0a33d3ceaa1dff38).
##### Dependencies
- [`engine.io@~6.2.0`](https://togithub.com/socketio/engine.io/releases/tag/6.2.0) (https://github.com/socketio/engine.io/compare/6.1.0...6.2.0)
- [`ws@~8.2.3`](https://togithub.com/websockets/ws/releases/tag/8.2.3) (no change)
#### [4.4.1](https://togithub.com/socketio/socket.io/compare/4.4.0...4.4.1) (2022-01-06)
##### Bug Fixes
- **types:** make `RemoteSocket.data` type safe ([#4234](https://togithub.com/socketio/socket.io/issues/4234)) ([770ee59](https://togithub.com/socketio/socket.io/commit/770ee5949fb47c2556876c622f06c862573657d6))
- **types:** pass `SocketData` type to custom namespaces ([#4233](https://togithub.com/socketio/socket.io/issues/4233)) ([f2b8de7](https://togithub.com/socketio/socket.io/commit/f2b8de71919e1b4d3e57f15a459972c1d1064787))
### [`v4.4.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#441-2022-01-06)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.4.0...4.4.1)
##### Bug Fixes
- **types:** make `RemoteSocket.data` type safe ([#4234](https://togithub.com/socketio/socket.io/issues/4234)) ([770ee59](https://togithub.com/socketio/socket.io/commit/770ee5949fb47c2556876c622f06c862573657d6))
- **types:** pass `SocketData` type to custom namespaces ([#4233](https://togithub.com/socketio/socket.io/issues/4233)) ([f2b8de7](https://togithub.com/socketio/socket.io/commit/f2b8de71919e1b4d3e57f15a459972c1d1064787))
### [`v4.4.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#440-2021-11-18)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.3.2...4.4.0)
##### Bug Fixes
- only set 'connected' to true after middleware execution ([02b0f73](https://togithub.com/socketio/socket.io/commit/02b0f73e2c64b09c72c5fbf7dc5f059557bdbe50))
##### Features
- add an implementation based on uWebSockets.js ([c0d8c5a](https://togithub.com/socketio/socket.io/commit/c0d8c5ab234d0d2bef0d0dec472973cc9662f647))
- add timeout feature ([f0ed42f](https://togithub.com/socketio/socket.io/commit/f0ed42f18cabef20ad976aeec37077b6bf3837a5))
- add type information to `socket.data` ([#4159](https://togithub.com/socketio/socket.io/issues/4159)) ([fe8730c](https://togithub.com/socketio/socket.io/commit/fe8730ca0f15bc92d5de81cf934c89c76d6af329))
#### [4.3.2](https://togithub.com/socketio/socket.io/compare/4.3.1...4.3.2) (2021-11-08)
##### Bug Fixes
- fix race condition in dynamic namespaces ([#4137](https://togithub.com/socketio/socket.io/issues/4137)) ([9d86397](https://togithub.com/socketio/socket.io/commit/9d86397243bcbb5775a29d96e5ef03e17148a8e7))
#### [4.3.1](https://togithub.com/socketio/socket.io/compare/4.3.0...4.3.1) (2021-10-16)
##### Bug Fixes
- fix server attachment ([#4127](https://togithub.com/socketio/socket.io/issues/4127)) ([0ef2a4d](https://togithub.com/socketio/socket.io/commit/0ef2a4d02c9350aff163df9cb61aece89c4dac0f))
### [`v4.3.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#432-2021-11-08)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.3.1...4.3.2)
##### Bug Fixes
- fix race condition in dynamic namespaces ([#4137](https://togithub.com/socketio/socket.io/issues/4137)) ([9d86397](https://togithub.com/socketio/socket.io/commit/9d86397243bcbb5775a29d96e5ef03e17148a8e7))
### [`v4.3.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#431-2021-10-16)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.3.0...4.3.1)
##### Bug Fixes
- fix server attachment ([#4127](https://togithub.com/socketio/socket.io/issues/4127)) ([0ef2a4d](https://togithub.com/socketio/socket.io/commit/0ef2a4d02c9350aff163df9cb61aece89c4dac0f))
### [`v4.3.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#430-2021-10-14)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.2.0...4.3.0)
##### Bug Fixes
- **typings:** add name field to cookie option ([#4099](https://togithub.com/socketio/socket.io/issues/4099)) ([033c5d3](https://togithub.com/socketio/socket.io/commit/033c5d399a2b985afad32c1e4b0c16d764e248cd))
- send volatile packets with binary attachments ([dc81fcf](https://togithub.com/socketio/socket.io/commit/dc81fcf461cfdbb5b34b1a5a96b84373754047d5))
##### Features
- serve ESM bundle ([60edecb](https://togithub.com/socketio/socket.io/commit/60edecb3bd33801803cdcba0aefbafa381a2abb3))
### [`v4.2.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#420-2021-08-30)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.1.3...4.2.0)
##### Bug Fixes
- **typings:** allow async listener in typed events ([ccfd8ca](https://togithub.com/socketio/socket.io/commit/ccfd8caba6d38b7ba6c5114bd8179346ed07671c))
##### Features
- ignore the query string when serving client JavaScript ([#4024](https://togithub.com/socketio/socket.io/issues/4024)) ([24fee27](https://togithub.com/socketio/socket.io/commit/24fee27ba36485308f8e995879c10931532c814e))
#### [4.1.3](https://togithub.com/socketio/socket.io/compare/4.1.2...4.1.3) (2021-07-10)
##### Bug Fixes
- fix io.except() method ([94e27cd](https://togithub.com/socketio/socket.io/commit/94e27cd072c8a4eeb9636f6ffbb7a21d382f36b0))
- remove x-sourcemap header ([a4dffc6](https://togithub.com/socketio/socket.io/commit/a4dffc6527f412d51a786ae5bf2e9080fe1ca63c))
#### [4.1.2](https://togithub.com/socketio/socket.io/compare/4.1.1...4.1.2) (2021-05-17)
##### Bug Fixes
- **typings:** ensure compatibility with TypeScript 3.x ([0cb6ac9](https://togithub.com/socketio/socket.io/commit/0cb6ac95b49a27483b6f1b6402fa54b35f82e36f))
- ensure compatibility with previous versions of the adapter ([a2cf248](https://togithub.com/socketio/socket.io/commit/a2cf2486c366cb62293101c10520c57f6984a3fc))
#### [4.1.1](https://togithub.com/socketio/socket.io/compare/4.1.0...4.1.1) (2021-05-11)
##### Bug Fixes
- **typings:** properly type server-side events ([b84ed1e](https://togithub.com/socketio/socket.io/commit/b84ed1e41c9053792caf58974c5de9395bfd509f))
- **typings:** properly type the adapter attribute ([891b187](https://togithub.com/socketio/socket.io/commit/891b1870e92d1ec38910f03bb839817e2d6be65a))
### [`v4.1.3`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#413-2021-07-10)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.1.2...4.1.3)
##### Bug Fixes
- fix io.except() method ([94e27cd](https://togithub.com/socketio/socket.io/commit/94e27cd072c8a4eeb9636f6ffbb7a21d382f36b0))
- remove x-sourcemap header ([a4dffc6](https://togithub.com/socketio/socket.io/commit/a4dffc6527f412d51a786ae5bf2e9080fe1ca63c))
### [`v4.1.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#412-2021-05-17)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.1.1...4.1.2)
##### Bug Fixes
- **typings:** ensure compatibility with TypeScript 3.x ([0cb6ac9](https://togithub.com/socketio/socket.io/commit/0cb6ac95b49a27483b6f1b6402fa54b35f82e36f))
- ensure compatibility with previous versions of the adapter ([a2cf248](https://togithub.com/socketio/socket.io/commit/a2cf2486c366cb62293101c10520c57f6984a3fc))
### [`v4.1.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#411-2021-05-11)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.1.0...4.1.1)
##### Bug Fixes
- **typings:** properly type server-side events ([b84ed1e](https://togithub.com/socketio/socket.io/commit/b84ed1e41c9053792caf58974c5de9395bfd509f))
- **typings:** properly type the adapter attribute ([891b187](https://togithub.com/socketio/socket.io/commit/891b1870e92d1ec38910f03bb839817e2d6be65a))
### [`v4.1.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#410-2021-05-11)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.0.2...4.1.0)
##### Features
- add support for inter-server communication ([93cce05](https://togithub.com/socketio/socket.io/commit/93cce05fb3faf91f21fa71212275c776aa161107))
- notify upon namespace creation ([499c892](https://togithub.com/socketio/socket.io/commit/499c89250d2db1ab7725ab2b74840e188c267c46))
- add a "connection_error" event ([7096e98](https://togithub.com/socketio/engine.io/commit/7096e98a02295a62c8ea2aa56461d4875887092d), from `engine.io`)
- add the "initial_headers" and "headers" events ([2527543](https://togithub.com/socketio/engine.io/commit/252754353a0e88eb036ebb3082e9d6a9a5f497db), from `engine.io`)
##### Performance Improvements
- add support for the "wsPreEncoded" writing option ([dc381b7](https://togithub.com/socketio/socket.io/commit/dc381b72c6b2f8172001dedd84116122e4cc95b3))
#### [4.0.2](https://togithub.com/socketio/socket.io/compare/4.0.1...4.0.2) (2021-05-06)
##### Bug Fixes
- **typings:** make "engine" attribute public ([b81ce4c](https://togithub.com/socketio/socket.io/commit/b81ce4c9d0b00666361498e2ba5e0d007d5860b8))
- properly export the Socket class ([d65b6ee](https://togithub.com/socketio/socket.io/commit/d65b6ee84c8e91deb61c3c1385eb19afa196a909))
#### [4.0.1](https://togithub.com/socketio/socket.io/compare/4.0.0...4.0.1) (2021-03-31)
##### Bug Fixes
- **typings:** add fallback to untyped event listener ([#3834](https://togithub.com/socketio/socket.io/issues/3834)) ([a11152f](https://togithub.com/socketio/socket.io/commit/a11152f42b281df83409313962f60f230239c79e))
- **typings:** update return type from emit ([#3843](https://togithub.com/socketio/socket.io/issues/3843)) ([1a72ae4](https://togithub.com/socketio/socket.io/commit/1a72ae4fe27a14cf60916f991a2c94da91d9e54a))
### [`v4.0.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#402-2021-05-06)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.0.1...4.0.2)
##### Bug Fixes
- **typings:** make "engine" attribute public ([b81ce4c](https://togithub.com/socketio/socket.io/commit/b81ce4c9d0b00666361498e2ba5e0d007d5860b8))
- properly export the Socket class ([d65b6ee](https://togithub.com/socketio/socket.io/commit/d65b6ee84c8e91deb61c3c1385eb19afa196a909))
### [`v4.0.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#401-2021-03-31)
[Compare Source](https://togithub.com/socketio/socket.io/compare/4.0.0...4.0.1)
##### Bug Fixes
- **typings:** add fallback to untyped event listener ([#3834](https://togithub.com/socketio/socket.io/issues/3834)) ([a11152f](https://togithub.com/socketio/socket.io/commit/a11152f42b281df83409313962f60f230239c79e))
- **typings:** update return type from emit ([#3843](https://togithub.com/socketio/socket.io/issues/3843)) ([1a72ae4](https://togithub.com/socketio/socket.io/commit/1a72ae4fe27a14cf60916f991a2c94da91d9e54a))
### [`v4.0.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#400-2021-03-10)
[Compare Source](https://togithub.com/socketio/socket.io/compare/3.1.2...4.0.0)
##### Bug Fixes
- make io.to(...) immutable ([ac9e8ca](https://togithub.com/socketio/socket.io/commit/ac9e8ca6c71e00d4af45ee03f590fe56f3951186))
##### Features
- add some utility methods ([b25495c](https://togithub.com/socketio/socket.io/commit/b25495c069031674da08e19aed68922c7c7a0e28))
- add support for typed events ([#3822](https://togithub.com/socketio/socket.io/issues/3822)) ([0107510](https://togithub.com/socketio/socket.io/commit/0107510ba8a0f148c78029d8be8919b350feb633))
- allow to exclude specific rooms when broadcasting ([#3789](https://togithub.com/socketio/socket.io/issues/3789)) ([7de2e87](https://togithub.com/socketio/socket.io/commit/7de2e87e888d849eb2dfc5e362af4c9e86044701))
- allow to pass an array to io.to(...) ([085d1de](https://togithub.com/socketio/socket.io/commit/085d1de9df909651de8b313cc6f9f253374b702e))
#### [3.1.2](https://togithub.com/socketio/socket.io/compare/3.1.1...3.1.2) (2021-02-26)
##### Bug Fixes
- ignore packets received after disconnection ([494c64e](https://togithub.com/socketio/socket.io/commit/494c64e44f645cbd24c645f1186d203789e84af0))
#### [3.1.1](https://togithub.com/socketio/socket.io/compare/3.1.0...3.1.1) (2021-02-03)
##### Bug Fixes
- properly parse the CONNECT packet in v2 compatibility mode ([6f4bd7f](https://togithub.com/socketio/socket.io/commit/6f4bd7f8e7c41a075a8014565330a77c38b03a8d))
- **typings:** add return types and general-case overload signatures ([#3776](https://togithub.com/socketio/socket.io/issues/3776)) ([9e8f288](https://togithub.com/socketio/socket.io/commit/9e8f288ca9f14f91064b8d3cce5946f7d23d407c))
- **typings:** update the types of "query", "auth" and "headers" ([4f2e9a7](https://togithub.com/socketio/socket.io/commit/4f2e9a716d9835b550c8fd9a9b429ebf069c2895))
### [`v3.1.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#312-2021-02-26)
[Compare Source](https://togithub.com/socketio/socket.io/compare/3.1.1...3.1.2)
##### Bug Fixes
- ignore packets received after disconnection ([494c64e](https://togithub.com/socketio/socket.io/commit/494c64e44f645cbd24c645f1186d203789e84af0))
### [`v3.1.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#311-2021-02-03)
[Compare Source](https://togithub.com/socketio/socket.io/compare/3.1.0...3.1.1)
##### Bug Fixes
- properly parse the CONNECT packet in v2 compatibility mode ([6f4bd7f](https://togithub.com/socketio/socket.io/commit/6f4bd7f8e7c41a075a8014565330a77c38b03a8d))
- **typings:** add return types and general-case overload signatures ([#3776](https://togithub.com/socketio/socket.io/issues/3776)) ([9e8f288](https://togithub.com/socketio/socket.io/commit/9e8f288ca9f14f91064b8d3cce5946f7d23d407c))
- **typings:** update the types of "query", "auth" and "headers" ([4f2e9a7](https://togithub.com/socketio/socket.io/commit/4f2e9a716d9835b550c8fd9a9b429ebf069c2895))
### [`v3.1.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#310-2021-01-15)
[Compare Source](https://togithub.com/socketio/socket.io/compare/3.0.5...3.1.0)
##### Features
- confirm a weak but matching ETag ([#3485](https://togithub.com/socketio/socket.io/issues/3485)) ([161091d](https://togithub.com/socketio/socket.io/commit/161091dd4c9e1b1610ac3d45d964195e63d92b94))
- **esm:** export the Namespace and Socket class ([#3699](https://togithub.com/socketio/socket.io/issues/3699)) ([233650c](https://togithub.com/socketio/socket.io/commit/233650c22209708b5fccc4349c38d2fa1b465d8f))
- add support for Socket.IO v2 clients ([9925746](https://togithub.com/socketio/socket.io/commit/9925746c8ee3a6522bd640b5d586c83f04f2f1ba))
- add room events ([155fa63](https://togithub.com/socketio/socket.io-adapter/commit/155fa6333a504036e99a33667dc0397f6aede25e))
##### Bug Fixes
- allow integers as event names ([1c220dd](https://togithub.com/socketio/socket.io-parser/commit/1c220ddbf45ea4b44bc8dbf6f9ae245f672ba1b9))
#### [2.4.1](https://togithub.com/socketio/socket.io/compare/2.4.0...2.4.1) (2021-01-07)
##### Reverts
- fix(security): do not allow all origins by default ([a169050](https://togithub.com/socketio/socket.io/commit/a1690509470e9dd5559cec4e60908ca6c23e9ba0))
#### [3.0.5](https://togithub.com/socketio/socket.io/compare/3.0.4...3.0.5) (2021-01-05)
##### Bug Fixes
- properly clear timeout on connection failure ([170b739](https://togithub.com/socketio/socket.io/commit/170b739f147cb6c92b423729b877e242e376927d))
##### Reverts
- restore the socket middleware functionality ([bf54327](https://togithub.com/socketio/socket.io/commit/bf5432742158e4d5ba2722cff4a614967dffa5b9))
### [`v3.0.5`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#305-2021-01-05)
[Compare Source](https://togithub.com/socketio/socket.io/compare/3.0.4...3.0.5)
##### Bug Fixes
- properly clear timeout on connection failure ([170b739](https://togithub.com/socketio/socket.io/commit/170b739f147cb6c92b423729b877e242e376927d))
##### Reverts
- restore the socket middleware functionality ([bf54327](https://togithub.com/socketio/socket.io/commit/bf5432742158e4d5ba2722cff4a614967dffa5b9))
### [`v3.0.4`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#304-2020-12-07)
[Compare Source](https://togithub.com/socketio/socket.io/compare/3.0.3...3.0.4)
### [`v3.0.3`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#303-2020-11-19)
[Compare Source](https://togithub.com/socketio/socket.io/compare/3.0.2...3.0.3)
### [`v3.0.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#302-2020-11-17)
[Compare Source](https://togithub.com/socketio/socket.io/compare/3.0.1...3.0.2)
##### Bug Fixes
- merge Engine.IO options ([43705d7](https://togithub.com/socketio/socket.io/commit/43705d7a9149833afc69edc937ea7f8c9aabfeef))
### [`v3.0.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#301-2020-11-09)
[Compare Source](https://togithub.com/socketio/socket.io/compare/3.0.0...3.0.1)
##### Bug Fixes
- export ServerOptions and Namespace types ([#3684](https://togithub.com/socketio/socket.io/issues/3684)) ([f62f180](https://togithub.com/socketio/socket.io/commit/f62f180edafdd56d8a8a277e092bc66df0c5f07f))
- **typings:** update the signature of the emit method ([50671d9](https://togithub.com/socketio/socket.io/commit/50671d984a81535a6a15c704546ca7465e2ea295))
### [`v3.0.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#300-2020-11-05)
[Compare Source](https://togithub.com/socketio/socket.io/compare/2.5.1...3.0.0)
##### Bug Fixes
- close clients with no namespace ([91cd255](https://togithub.com/socketio/socket.io/commit/91cd255ba76ff6a780c62740f9f5cd3a76f5d7c7))
##### Features
- emit an Error object upon middleware error ([54bf4a4](https://togithub.com/socketio/socket.io/commit/54bf4a44e9e896dfb64764ee7bd4e8823eb7dc7b))
- serve msgpack bundle ([aa7574f](https://togithub.com/socketio/socket.io/commit/aa7574f88471aa30ae472a5cddf1000a8baa70fd))
- add support for catch-all listeners ([5c73733](https://togithub.com/socketio/socket.io/commit/5c737339858d59eab4b5ee2dd6feff0e82c4fe5a))
- make Socket#join() and Socket#leave() synchronous ([129c641](https://togithub.com/socketio/socket.io/commit/129c6417bd818bc8b4e1b831644323876e627c13))
- remove prod dependency to socket.io-client ([7603da7](https://togithub.com/socketio/socket.io/commit/7603da71a535481e3fc60e38b013abf78516d322))
- move binary detection back to the parser ([669592d](https://togithub.com/socketio/socket.io/commit/669592d120409a5cf00f128070dee6d22259ba4f))
- add ES6 module export ([8b6b100](https://togithub.com/socketio/socket.io/commit/8b6b100c284ccce7d85e55659e3397f533916847))
- do not reuse the Engine.IO id ([2875d2c](https://togithub.com/socketio/socket.io/commit/2875d2cfdfa463e64cb520099749f543bbc4eb15))
- remove Server#set() method ([029f478](https://togithub.com/socketio/socket.io/commit/029f478992f59b1eb5226453db46363a570eea46))
- remove Socket#rooms object ([1507b41](https://togithub.com/socketio/socket.io/commit/1507b416d584381554d1ed23c9aaf3b650540071))
- remove the 'origins' option ([a8c0600](https://togithub.com/socketio/socket.io/commit/a8c06006098b512ba1b8b8df82777349db486f41))
- remove the implicit connection to the default namespace ([3289f7e](https://togithub.com/socketio/socket.io/commit/3289f7ec376e9ec88c2f90e2735c8ca8d01c0e97))
- throw upon reserved event names ([4bd5b23](https://togithub.com/socketio/socket.io/commit/4bd5b2339a66a5a675e20f689fff2e70ff12d236))
##### BREAKING CHANGES
- the Socket#use() method is removed (see [5c73733](https://togithub.com/socketio/socket.io/commit/5c737339858d59eab4b5ee2dd6feff0e82c4fe5a))
- Socket#join() and Socket#leave() do not accept a callback argument anymore.
Before:
```js
socket.join("room1", () => {
io.to("room1").emit("hello");
});
```
After:
```js
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:
```js
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:
```js
new Server(3000, {
cors: {
origin: "https://example.com",
methods: ["GET", "POST"],
allowedHeaders: ["content-type"]
}
});
```
The already existing 'allowRequest' option can be used for validation:
```js
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:
```js
// client-side
const socket = io("/admin");
// server-side
io.on("connection", 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.
### [`v2.5.1`](https://togithub.com/socketio/socket.io/releases/tag/2.5.1)
[Compare Source](https://togithub.com/socketio/socket.io/compare/2.5.0...2.5.1)
##### Bug Fixes
- add a noop handler for the error event ([d30630b](https://togithub.com/socketio/socket.io/commit/d30630ba10562bf987f4d2b42440fc41a828119c))
##### Links:
- Diff: https://github.com/socketio/socket.io/compare/2.5.0...2.5.1
- Client release: `-`
- engine.io version: `~3.6.0` (no change)
- ws version: `~7.5.10`
### [`v2.5.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#250-2022-06-26)
[Compare Source](https://togithub.com/socketio/socket.io/compare/2.4.1...2.5.0)
⚠️ WARNING ⚠️
The default value of the `maxHttpBufferSize` option has been decreased from 100 MB to 1 MB, in order to prevent attacks by denial of service.
Security advisory: [GHSA-j4f2-536g-r55m](https://togithub.com/advisories/GHSA-j4f2-536g-r55m)
##### Bug Fixes
- fix race condition in dynamic namespaces ([05e1278](https://togithub.com/socketio/socket.io/commit/05e1278cfa99f3ecf3f8f0531ffe57d850e9a05b))
- ignore packet received after disconnection ([22d4bdf](https://togithub.com/socketio/socket.io/commit/22d4bdf00d1a03885dc0171125faddfaef730066))
- only set 'connected' to true after middleware execution ([226cc16](https://togithub.com/socketio/socket.io/commit/226cc16165f9fe60f16ff4d295fb91c8971cde35))
- prevent the socket from joining a room after disconnection ([f223178](https://togithub.com/socketio/socket.io/commit/f223178eb655a7713303b21a78f9ef9e161d6458))
##### Dependencies
- [`engine.io@~3.6.0`](https://togithub.com/socketio/engine.io/releases/tag/3.6.0) (https://github.com/socketio/engine.io/compare/3.5.0...3.6.0)
- [`ws@~7.4.2`](https://togithub.com/websockets/ws/releases/tag/7.4.2) (no change)
#### [4.5.1](https://togithub.com/socketio/socket.io/compare/4.5.0...4.5.1) (2022-05-17)
##### Bug Fixes
- forward the local flag to the adapter when using fetchSockets() ([30430f0](https://togithub.com/socketio/socket.io/commit/30430f0985f8e7c49394543d4c84913b6a15df60))
- **typings:** add HTTPS server to accepted types ([#4351](https://togithub.com/socketio/socket.io/issues/4351)) ([9b43c91](https://togithub.com/socketio/socket.io/commit/9b43c9167cff817c60fa29dbda2ef7cd938aff51))
##### Dependencies
- [`engine.io@~6.2.0`](https://togithub.com/socketio/engine.io/releases/tag/6.2.0) (no change)
- [`ws@~8.2.3`](https://togithub.com/websockets/ws/releases/tag/8.2.3) (no change)
### [`v2.4.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#241-2021-01-07)
[Compare Source](https://togithub.com/socketio/socket.io/compare/2.4.0...2.4.1)
##### Reverts
- fix(security): do not allow all origins by default ([a169050](https://togithub.com/socketio/socket.io/commit/a1690509470e9dd5559cec4e60908ca6c23e9ba0))
### [`v2.4.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#240-2021-01-04)
[Compare Source](https://togithub.com/socketio/socket.io/compare/2.3.0...2.4.0)
##### Bug Fixes
- **security:** do not allow all origins by default ([f78a575](https://togithub.com/socketio/socket.io/commit/f78a575f66ab693c3ea96ea88429ddb1a44c86c7))
- properly overwrite the query sent in the handshake ([d33a619](https://togithub.com/socketio/socket.io/commit/d33a619905a4905c153d4fec337c74da5b533a9e))
#### [3.0.4](https://togithub.com/socketio/socket.io/compare/3.0.3...3.0.4) (2020-12-07)
#### [3.0.3](https://togithub.com/socketio/socket.io/compare/3.0.2...3.0.3) (2020-11-19)
#### [3.0.2](https://togithub.com/socketio/socket.io/compare/3.0.1...3.0.2) (2020-11-17)
##### Bug Fixes
- merge Engine.IO options ([43705d7](https://togithub.com/socketio/socket.io/commit/43705d7a9149833afc69edc937ea7f8c9aabfeef))
#### [3.0.1](https://togithub.com/socketio/socket.io/compare/3.0.0...3.0.1) (2020-11-09)
##### Bug Fixes
- export ServerOptions and Namespace types ([#3684](https://togithub.com/socketio/socket.io/issues/3684)) ([f62f180](https://togithub.com/socketio/socket.io/commit/f62f180edafdd56d8a8a277e092bc66df0c5f07f))
- **typings:** update the signature of the emit method ([50671d9](https://togithub.com/socketio/socket.io/commit/50671d984a81535a6a15c704546ca7465e2ea295))
### [`v2.3.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#230-2019-09-20)
[Compare Source](https://togithub.com/socketio/socket.io/compare/2.2.0...2.3.0)
This release mainly contains a bump of the `engine.io` and `ws` packages, but no additional features.
### [`v2.2.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#220-2018-11-29)
[Compare Source](https://togithub.com/socketio/socket.io/compare/2.1.1...2.2.0)
##### Features
- add cache-control header when serving the client source ([#2907](https://togithub.com/socketio/socket.io/pull/2907)) ([b00ae50](https://togithub.com/socketio/socket.io/commit/b00ae50be65d1bc88fa95145f1c486a6886a6b76))
##### Bug fixes
- throw an error when trying to access the clients of a dynamic namespace ([#3355](https://togithub.com/socketio/socket.io/pull/3355)) ([a7fbd1a](https://togithub.com/socketio/socket.io/commit/a7fbd1ac4a47cafd832fc62e371754df924c5903))
### [`v2.1.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#211-2018-05-17)
[Compare Source](https://togithub.com/socketio/socket.io/compare/2.1.0...2.1.1)
##### Features
- add local flag to the socket object ([#3129](https://togithub.com/socketio/socket.io/pull/3219)) ([1decae3](https://togithub.com/socketio/socket.io/commit/1decae341c80c0417b32d3124ca30c005240b48a))
```js
socket.local.to('room101').emit(/* */);
```
### [`v2.1.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#210-2018-03-29)
[Compare Source](https://togithub.com/socketio/socket.io/compare/2.0.4...2.1.0)
##### Features
- add a 'binary' flag ([#3185](https://togithub.com/socketio/socket.io/pull/3185)) ([f48a06c](https://togithub.com/socketio/socket.io/commit/f48a06c040280b44f90fd225c888910544fd63b5))
```js
// 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);
```
- add support for dynamic namespaces ([#3195](https://togithub.com/socketio/socket.io/pull/3195)) ([c0c79f0](https://togithub.com/socketio/socket.io/commit/c0c79f019e7138194e438339f8192705957c8ec3))
```js
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](https://togithub.com/socketio/socket.io/pull/3197)) ([f4fc517](https://togithub.com/socketio/socket.io/commit/f4fc517e0fe25866c95b584291487b8cbdff889d))
- include the protocol in the origins check ([#3198](https://togithub.com/socketio/socket.io/pull/3198)) ([1f1d64b](https://togithub.com/socketio/socket.io/commit/1f1d64bab61a273712a199591a3f76210d8c0959))
##### Important note :warning: from Engine.IO [3.2.0 release](https://togithub.com/socketio/engine.io/releases/tag/3.2.0)
There are two non-breaking changes that are somehow quite important:
- `ws` was reverted as the default wsEngine ([https://github.com/socketio/engine.io/pull/550](https://togithub.com/socketio/engine.io/pull/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:
```js
var engine = require('engine.io');
var server = engine.listen(3000, {
wsEngine: 'uws'
});
```
- `pingTimeout` now defaults to 5 seconds (instead of 60 seconds): [https://github.com/socketio/engine.io/pull/551](https://togithub.com/socketio/engine.io/pull/551)
### [`v2.0.4`](https://togithub.com/socketio/socket.io/releases/tag/2.0.4)
[Compare Source](https://togithub.com/socketio/socket.io/compare/2.0.3...2.0.4)
#### Bug fixes
- do not throw when receiving an unhandled error packet ([#3038](https://togithub.com/socketio/socket.io/issues/3038))
- reset rooms object before broadcasting from namespace ([#3039](https://togithub.com/socketio/socket.io/issues/3039))
##### Links:
- Milestone: [2.0.4](https://togithub.com/socketio/socket.io/milestone/13)
- Diff: [2.0.3...2.0.4](https://togithub.com/socketio/socket.io/compare/2.0.3...2.0.4)
- Client release: [2.0.4](https://togithub.com/socketio/socket.io-client/releases/tag/2.0.4)
- Diff `engine.io`: -
- Diff `ws`: -
### [`v2.0.3`](https://togithub.com/socketio/socket.io/releases/tag/2.0.3)
[Compare Source](https://togithub.com/socketio/socket.io/compare/2.0.2...2.0.3)
#### Bug fixes
- reset rooms object before broadcasting ([#2970](https://togithub.com/socketio/socket.io/issues/2970))
- fix middleware initialization ([#2969](https://togithub.com/socketio/socket.io/issues/2969))
##### Links:
- Milestone: [2.0.3](https://togithub.com/socketio/socket.io/milestone/12)
- Diff: [2.0.2...2.0.3](https://togithub.com/socketio/socket.io/compare/2.0.2...2.0.3)
- Client release: [2.0.3](https://togithub.com/socketio/socket.io-client/releases/tag/2.0.3)
- Diff `engine.io`: -
- Diff `ws`: -
### [`v2.0.2`](https://togithub.com/socketio/socket.io/releases/tag/2.0.2)
[Compare Source](https://togithub.com/socketio/socket.io/compare/2.0.1...2.0.2)
#### Bug fixes
- fix timing issues with middleware ([#2948](https://togithub.com/socketio/socket.io/issues/2948))
##### Links:
- Milestone: [2.0.2](https://togithub.com/socketio/socket.io/milestone/11)
- Diff: [2.0.1...2.0.2](https://togithub.com/socketio/socket.io/compare/2.0.1...2.0.2)
- Client release: [2.0.2](https://togithub.com/socketio/socket.io-client/releases/tag/2.0.2)
- Diff `engine.io`: -
- Diff `ws`: -
### [`v2.0.1`](https://togithub.com/socketio/socket.io/releases/tag/2.0.1)
[Compare Source](https://togithub.com/socketio/socket.io/compare/2.0.0...2.0.1)
#### Bug fixes
\- update path of client file ([#2934](https://togithub.com/socketio/socket.io/issues/2934))
##### Links:
- Milestone: [2.0.1](https://togithub.com/socketio/socket.io/milestone/9)
- Diff: [2.0.0...2.0.1](https://togithub.com/socketio/socket.io/compare/2.0.0...2.0.1)
- Client release: [2.0.1](https://togithub.com/socketio/socket.io-client/releases/tag/2.0.1)
- Diff `engine.io`: -
- Diff `ws`: -
### [`v2.0.0`](https://togithub.com/socketio/socket.io/releases/tag/2.0.0)
[Compare Source](https://togithub.com/socketio/socket.io/compare/1.7.4...2.0.0)
This major release brings several performance improvements:
- [uws](https://togithub.com/uWebSockets/uWebSockets) is now the default Websocket engine. It should bring significant improvement in performance (particularly in terms of memory consumption) (https://github.com/socketio/engine.io/releases/tag/2.0.0)
- the Engine.IO and Socket.IO handshake packets were merged, reducing the number of roundtrips necessary to establish a connection. ([#2833](https://togithub.com/socketio/socket.io/issues/2833))
- it is now possible to provide a custom parser according to the needs of your application ([#2829](https://togithub.com/socketio/socket.io/issues/2829)). Please take a look at the [example](https://togithub.com/socketio/socket.io/tree/master/examples/custom-parsers) for more information.
Please note that this release is not backward-compatible, due to:
- a breaking change related to utf-8 encoding in engine.io-parser ([https://github.com/socketio/engine.io-parser/pull/81](https://togithub.com/socketio/engine.io-parser/pull/81))
- an update to make the socket id on the client match the id on the server-side ([https://github.com/socketio/socket.io-client/pull/1058](https://togithub.com/socketio/socket.io-client/pull/1058))
Please also note that if you are using a self-signed certificate, `rejectUnauthorized` now defaults to `true` ([https://github.com/socketio/engine.io-client/pull/558](https://togithub.com/socketio/engine.io-client/pull/558)).
Finally, the API documentation is now in the repository ([here](https://togithub.com/socketio/socket.io/blob/master/docs/API.md)), and the content of the website [here](https://togithub.com/socketio/socket.io-website). Do not hesitate if you see something wrong or missing!
The full list of changes:
- \[feat] Move binary detection to the parser ([#2923](https://togithub.com/socketio/socket.io/issues/2923))
- \[feat] Allow to join several rooms at once ([#2879](https://togithub.com/socketio/socket.io/issues/2879))
- \[feat] Merge Engine.IO and Socket.IO handshake packets ([#2833](https://togithub.com/socketio/socket.io/issues/2833))
- \[feat] Allow the use of custom parsers ([#2829](https://togithub.com/socketio/socket.io/issues/2829))
- \[fix] Use path.resolve by default and require.resolve as a fallback ([#2797](https://togithub.com/socketio/socket.io/issues/2797)) (by [@a-lucas](https://togithub.com/a-lucas))
- \[fix] Properly close the connection on error ([#2681](https://togithub.com/socketio/socket.io/issues/2681)) (by [@Nibbler999](https://togithub.com/Nibbler999))
- \[fix] Prevent null from being accepted as argument ([#2606](https://togithub.com/socketio/socket.io/issues/2606)) (by [@ianbrode](https://togithub.com/ianbrode))
- \[perf] Use shared instance of the encoder ([#2825](https://togithub.com/socketio/socket.io/issues/2825)) (by [@Nibbler999](https://togithub.com/Nibbler999))
- \[perf] Reset properties instead of deleting them ([#2826](https://togithub.com/socketio/socket.io/issues/2826)) (by [@Nibbler999](https://togithub.com/Nibbler999))
- \[perf] micro-optimisations ([#2793](https://togithub.com/socketio/socket.io/issues/2793)) (by [@billouboq](https://togithub.com/billouboq))
- \[chore] Merge history of 1.7.x and 0.9.x branches ([#2930](https://togithub.com/socketio/socket.io/issues/2930))
- \[chore] Added backers and sponsors on the README ([#2933](https://togithub.com/socketio/socket.io/issues/2933)) (by [@xdamman](https://togithub.com/xdamman))
- \[chore] Bump dependencies ([#2926](https://togithub.com/socketio/socket.io/issues/2926))
- \[chore] Bump socket.io-adapter to version 1.0.0 ([#2867](https://togithub.com/socketio/socket.io/issues/2867))
- \[chore] Bump engine.io to version 2.0.2 ([#2864](https://togithub.com/socketio/socket.io/issues/2864))
- \[chore] Bump engine.io to version 2.0.0 ([#2832](https://togithub.com/socketio/socket.io/issues/2832)) (by [@sgress454](https://togithub.com/sgress454))
- \[chore] Update issue template with fiddle ([#2811](https://togithub.com/socketio/socket.io/issues/2811))
- \[chore] Update copyright year LICENSE to 2017 ([#2803](https://togithub.com/socketio/socket.io/issues/2803)) (by [@isabellatea](https://togithub.com/isabellatea))
- \[docs] Add an example of custom parser ([#2929](https://togithub.com/socketio/socket.io/issues/2929))
- \[docs] Replace non-breaking space with proper whitespace ([#2913](https://togithub.com/socketio/socket.io/issues/2913)) (by [@epicTCK](https://togithub.com/epicTCK))
- \[docs] Update emit cheatsheet ([#2906](https://togithub.com/socketio/socket.io/issues/2906)) (by [@FarazPatankar](https://togithub.com/FarazPatankar))
- \[docs] Explicitly document that Server extends EventEmitter ([#2874](https://togithub.com/socketio/socket.io/issues/2874)) (by [@i8-pi](https://togithub.com/i8-pi))
- \[docs] Add server.engine.generateId attribute ([#2880](https://togithub.com/socketio/socket.io/issues/2880)) (by [@efkan](https://togithub.com/efkan))
- \[docs] Fix wrong space character in README ([#2900](https://togithub.com/socketio/socket.io/issues/2900)) (by [@SimenB](https://togithub.com/SimenB))
- \[docs] Fix documentation for 'connect' event ([#2898](https://togithub.com/socketio/socket.io/issues/2898)) (by [@swhgoon](https://togithub.com/swhgoon))
- \[docs] Add webpack build example ([#2828](https://togithub.com/socketio/socket.io/issues/2828))
- \[docs] Update the wording to match the code example ([#2853](https://togithub.com/socketio/socket.io/issues/2853)) (by [@timruffles](https://togithub.com/timruffles))
- \[docs] Small addition to the Express Readme Part ([#2846](https://togithub.com/socketio/socket.io/issues/2846)) (by [@H3rby7](https://togithub.com/H3rby7))
- \[docs] Add a 'Features' section in the README ([#2824](https://togithub.com/socketio/socket.io/issues/2824))
- \[docs] Add httpd cluster example ([#2819](https://togithub.com/socketio/socket.io/issues/2819))
- \[docs] Add haproxy cluster example ([#2818](https://togithub.com/socketio/socket.io/issues/2818))
- \[docs] Add nginx cluster example ([#2817](https://togithub.com/socketio/socket.io/issues/2817))
- \[docs] Implement whiteboard example ([#2810](https://togithub.com/socketio/socket.io/issues/2810))
- \[docs] Fix documentation for `local` flag ([#2816](https://togithub.com/socketio/socket.io/issues/2816))
- \[docs] Add emit cheatsheet ([#2815](https://togithub.com/socketio/socket.io/issues/2815))
- \[docs] Add pingInterval/pingTimeout/transports options in the API documentation ([#2814](https://togithub.com/socketio/socket.io/issues/2814))
- \[docs] Add an example for socket.join() method ([#2813](https://togithub.com/socketio/socket.io/issues/2813))
- \[docs] Fix a typo on `clients` method in the API documentation ([#2812](https://togithub.com/socketio/socket.io/issues/2812))
- \[docs] Fix wrong argument name in API.md ([#2802](https://togithub.com/socketio/socket.io/issues/2802)) (by [@andrea11](https://togithub.com/andrea11))
- \[docs] Add install script on Readme.md ([#2780](https://togithub.com/socketio/socket.io/issues/2780)) (by [@bananaappletw](https://togithub.com/bananaappletw))
- \[docs] API documentation ([#2784](https://togithub.com/socketio/socket.io/issues/2784))
Besides, we are proud to announce that Socket.IO is now a part of open collective: https://opencollective.com/socketio. More on that later.
### [`v1.7.4`](https://togithub.com/socketio/socket.io/releases/tag/1.7.4)
[Compare Source](https://togithub.com/socketio/socket.io/compare/1.7.3...1.7.4)
- \[chore] Bump engine.io to version 1.8.4
### [`v1.7.3`](https://togithub.com/socketio/socket.io/releases/tag/1.7.3)
[Compare Source](https://togithub.com/socketio/socket.io/compare/1.7.2...1.7.3)
- \[chore] Bump engine.io-client to version 1.8.3
### [`v1.7.2`](https://togithub.com/socketio/socket.io/releases/tag/1.7.2)
[Compare Source](https://togithub.com/socketio/socket.io/compare/1.7.1...1.7.2)
- \[chore] Bump engine.io to version 1.8.2 ([#2782](https://togithub.com/socketio/socket.io/issues/2782))
- \[fix] Fixes socket.use error packet ([#2772](https://togithub.com/socketio/socket.io/issues/2772))
### [`v1.7.1`](https://togithub.com/socketio/socket.io/releases/tag/1.7.1)
[Compare Source](https://togithub.com/socketio/socket.io/compare/1.7.0...1.7.1)
(following `socket.io-client` update)
### [`v1.7.0`](https://togithub.com/socketio/socket.io/releases/tag/1.7.0)
[Compare Source](https://togithub.com/socketio/socket.io/compare/1.6.0...1.7.0)
- \[docs] Comment connected socket availability for adapters ([#2081](https://togithub.com/socketio/socket.io/issues/2081))
- \[docs] Fixed grammar issues in the README.md ([#2159](https://togithub.com/socketio/socket.io/issues/2159))
- \[feature] serve sourcemap for socket.io-client ([#2482](https://togithub.com/socketio/socket.io/issues/2482))
- \[feature] Add a `local` flag ([#2628](https://togithub.com/socketio/socket.io/issues/2628))
- \[chore] Bump engine.io to version 1.8.1 ([#2765](https://togithub.com/socketio/socket.io/issues/2765))
- \[chore] Update client location and serve minified file ([#2766](https://togithub.com/socketio/socket.io/issues/2766))
### [`v1.6.0`](https://togithub.com/socketio/socket.io/releases/tag/1.6.0)
[Compare Source](https://togithub.com/socketio/socket.io/compare/1.5.1...1.6.0)
- \[fix] Make ETag header comply with standard. ([#2603](https://togithub.com/socketio/socket.io/issues/2603))
- \[feature] Loading client script on demand. ([#2567](https://togithub.com/socketio/socket.io/issues/2567))
- \[test] Fix leaking clientSocket ([#2721](https://togithub.com/socketio/socket.io/issues/2721))
- \[feature] Add support for all event emitter methods ([#2601](https://togithub.com/socketio/socket.io/issues/2601))
- \[chore] Update year to 2016 ([#2456](https://togithub.com/socketio/socket.io/issues/2456))
- \[feature] Add support for socket middleware ([#2306](https://togithub.com/socketio/socket.io/issues/2306))
- \[feature] add support for Server#close(callback) ([#2748](https://togithub.com/socketio/socket.io/issues/2748))
- \[fix] Don't drop query variables on handshake ([#2745](https://togithub.com/socketio/socket.io/issues/2745))
- \[example] Add disconnection/reconnection logs to the chat example ([#2675](https://togithub.com/socketio/socket.io/issues/2675))
- \[perf] Minor code optimizations ([#2219](https://togithub.com/socketio/socket.io/issues/2219))
- \[chore] Bump debug to version 2.3.3 ([#2754](https://togithub.com/socketio/socket.io/issues/2754))
- \[chore] Bump engine.io to version 1.8.0 ([#2755](https://togithub.com/socketio/socket.io/issues/2755))
- \[chore] Bump socket.io-adapter to version 0.5.0 ([#2756](https://togithub.com/socketio/socket.io/issues/2756))
### [`v1.5.1`](https://togithub.com/socketio/socket.io/releases/tag/1.5.1)
[Compare Source](https://togithub.com/socketio/socket.io/compare/1.5.0...1.5.1)
- \[fix] Avoid swallowing exceptions thrown by user event handlers ([#2682](https://togithub.com/socketio/socket.io/issues/2682))
- \[test] Use client function to unify `client` in test script ([#2731](https://togithub.com/socketio/socket.io/issues/2731))
- \[docs] Add link to LICENSE ([#2221](https://togithub.com/socketio/socket.io/issues/2221))
- \[docs] Fix JSDoc of optional parameters ([#2465](https://togithub.com/socketio/socket.io/issues/2465))
- \[docs] Fix typo ([#2724](https://togithub.com/socketio/socket.io/issues/2724))
- \[docs] Link readme npm package badge to npm registry page ([#2612](https://togithub.com/socketio/socket.io/issues/2612))
- \[docs] Minor fixes ([#2526](https://togithub.com/socketio/socket.io/issues/2526))
- \[chore] Bump socket.io-parser to 2.3.
This PR contains the following updates:
^1.4.8
->^4.6.2
By merging this PR, the below issues will be automatically resolved and closed:
Release Notes
socketio/socket.io (socket.io)
### [`v4.6.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#462-2023-05-31) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.6.1...4.6.2) ##### Bug Fixes - **exports:** move `types` condition to the top ([#4698](https://togithub.com/socketio/socket.io/issues/4698)) ([3d44aae](https://togithub.com/socketio/socket.io/commit/3d44aae381af38349fdb808d510d9f47a0c2507e)) ##### Dependencies - [`engine.io@~6.4.2`](https://togithub.com/socketio/engine.io/releases/tag/6.4.0) ([diff](https://togithub.com/socketio/engine.io/compare/6.4.1...6.4.2)) - [`ws@~8.11.0`](https://togithub.com/websockets/ws/releases/tag/8.11.0) (no change) ### [`v4.6.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#461-2023-02-20) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.6.0...4.6.1) ##### Bug Fixes - properly handle manually created dynamic namespaces ([0d0a7a2](https://togithub.com/socketio/socket.io/commit/0d0a7a22b5ff95f864216c529114b7dd41738d1e)) - **types:** fix nodenext module resolution compatibility ([#4625](https://togithub.com/socketio/socket.io/issues/4625)) ([d0b22c6](https://togithub.com/socketio/socket.io/commit/d0b22c630208669aceb7ae013180c99ef90279b0)) ##### Dependencies - [`engine.io@~6.4.1`](https://togithub.com/socketio/engine.io/releases/tag/6.4.1) ([diff](https://togithub.com/socketio/engine.io/compare/6.4.0...6.4.1)) - [`ws@~8.11.0`](https://togithub.com/websockets/ws/releases/tag/8.11.0) (no change) ### [`v4.6.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#460-2023-02-07) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.5.4...4.6.0) ##### Bug Fixes - add timeout method to remote socket ([#4558](https://togithub.com/socketio/socket.io/issues/4558)) ([0c0eb00](https://togithub.com/socketio/socket.io/commit/0c0eb0016317218c2be3641e706cfaa9bea39a2d)) - **typings:** properly type emits with timeout ([f3ada7d](https://togithub.com/socketio/socket.io/commit/f3ada7d8ccc02eeced2b9b9ac8e4bc921eb630d2)) ##### Features ##### Promise-based acknowledgements This commit adds some syntactic sugar around acknowledgements: - `emitWithAck()` ```js try { const responses = await io.timeout(1000).emitWithAck("some-event"); console.log(responses); // one response per client } catch (e) { // some clients did not acknowledge the event in the given delay } io.on("connection", async (socket) => { // without timeout const response = await socket.emitWithAck("hello", "world"); // with a specific timeout try { const response = await socket.timeout(1000).emitWithAck("hello", "world"); } catch (err) { // the client did not acknowledge the event in the given delay } }); ``` - `serverSideEmitWithAck()` ```js try { const responses = await io.timeout(1000).serverSideEmitWithAck("some-event"); console.log(responses); // one response per server (except itself) } catch (e) { // some servers did not acknowledge the event in the given delay } ``` Added in [184f3cf](https://togithub.com/socketio/socket.io/commit/184f3cf7af57acc4b0948eee307f25f8536eb6c8). ##### Connection state recovery This feature allows a client to reconnect after a temporary disconnection and restore its state: - id - rooms - data - missed packets Usage: ```js import { Server } from "socket.io"; const io = new Server({ connectionStateRecovery: { // default values maxDisconnectionDuration: 2 * 60 * 1000, skipMiddlewares: true, }, }); io.on("connection", (socket) => { console.log(socket.recovered); // whether the state was recovered or not }); ``` Here's how it works: - the server sends a session ID during the handshake (which is different from the current `id` attribute, which is public and can be freely shared) - the server also includes an offset in each packet (added at the end of the data array, for backward compatibility) - upon temporary disconnection, the server stores the client state for a given delay (implemented at the adapter level) - upon reconnection, the client sends both the session ID and the last offset it has processed, and the server tries to restore the state The in-memory adapter already supports this feature, and we will soon update the Postgres and MongoDB adapters. We will also create a new adapter based on [Redis Streams](https://redis.io/docs/data-types/streams/), which will support this feature. Added in [54d5ee0](https://togithub.com/socketio/socket.io/commit/54d5ee05a684371191e207b8089f09fc24eb5107). ##### Compatibility (for real) with Express middlewares This feature implements middlewares at the Engine.IO level, because Socket.IO middlewares are meant for namespace authorization and are not executed during a classic HTTP request/response cycle. Syntax: ```js io.engine.use((req, res, next) => { // do something next(); }); // with express-session import session from "express-session"; io.engine.use(session({ secret: "keyboard cat", resave: false, saveUninitialized: true, cookie: { secure: true } })); // with helmet import helmet from "helmet"; io.engine.use(helmet()); ``` A workaround was possible by using the allowRequest option and the "headers" event, but this feels way cleaner and works with upgrade requests too. Added in [24786e7](https://togithub.com/socketio/engine.io/commit/24786e77c5403b1c4b5a2bc84e2af06f9187f74a). ##### Error details in the disconnecting and disconnect events The `disconnect` event will now contain additional details about the disconnection reason. ```js io.on("connection", (socket) => { socket.on("disconnect", (reason, description) => { console.log(description); }); }); ``` Added in [8aa9499](https://togithub.com/socketio/socket.io/commit/8aa94991cee5518567d6254eec04b23f81510257). ##### Automatic removal of empty child namespaces This commit adds a new option, "cleanupEmptyChildNamespaces". With this option enabled (disabled by default), when a socket disconnects from a dynamic namespace and if there are no other sockets connected to it then the namespace will be cleaned up and its adapter will be closed. ```js import { createServer } from "node:http"; import { Server } from "socket.io"; const httpServer = createServer(); const io = new Server(httpServer, { cleanupEmptyChildNamespaces: true }); ``` Added in [5d9220b](https://togithub.com/socketio/socket.io/commit/5d9220b69adf73e086c27bbb63a4976b348f7c4c). ##### A new "addTrailingSlash" option The trailing slash which was added by default can now be disabled: ```js import { createServer } from "node:http"; import { Server } from "socket.io"; const httpServer = createServer(); const io = new Server(httpServer, { addTrailingSlash: false }); ``` In the example above, the clients can omit the trailing slash and use `/socket.io` instead of `/socket.io/`. Added in [d0fd474](https://togithub.com/socketio/engine.io/commit/d0fd4746afa396297f07bb62e539b0c1c4018d7c). ##### Performance Improvements - precompute the WebSocket frames when broadcasting ([da2b542](https://togithub.com/socketio/socket.io/commit/da2b54279749adc5279c9ac4742b01b36c01cff0)) ##### Dependencies - [`engine.io@~6.4.0`](https://togithub.com/socketio/engine.io/releases/tag/6.4.0) (https://github.com/socketio/engine.io/compare/6.2.1...6.4.0) - [`ws@~8.11.0`](https://togithub.com/websockets/ws/releases/tag/8.11.0) (https://github.com/websockets/ws/compare/8.2.3...8.11.0) ### [`v4.5.4`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#454-2022-11-22) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.5.3...4.5.4) This release contains a bump of: - `engine.io` in order to fix [CVE-2022-41940](https://togithub.com/socketio/engine.io/security/advisories/GHSA-r7qp-cfhv-p84w) - `socket.io-parser` in order to fix [CVE-2022-2421](https://togithub.com/advisories/GHSA-qm95-pgcg-qqfq). ##### Dependencies - [`engine.io@~6.2.1`](https://togithub.com/socketio/engine.io/releases/tag/6.2.1) ([diff](https://togithub.com/socketio/engine.io/compare/6.2.0...6.2.1)) - [`ws@~8.2.3`](https://togithub.com/websockets/ws/releases/tag/8.2.3) (no change) ### [`v4.5.3`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#453-2022-10-15) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.5.2...4.5.3) ##### Bug Fixes - **typings:** accept an HTTP2 server in the constructor ([d3d0a2d](https://togithub.com/socketio/socket.io/commit/d3d0a2d5beaff51fd145f810bcaf6914213f8a06)) - **typings:** apply types to "io.timeout(...).emit()" calls ([e357daf](https://togithub.com/socketio/socket.io/commit/e357daf5858560bc84e7e50cd36f0278d6721ea1)) ##### Dependencies - [`engine.io@~6.2.0`](https://togithub.com/socketio/engine.io/releases/tag/6.2.1) (no change) - [`ws@~8.2.3`](https://togithub.com/websockets/ws/releases/tag/8.2.3) (no change) ### [`v4.5.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#452-2022-09-02) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.5.1...4.5.2) ##### Bug Fixes - prevent the socket from joining a room after disconnection ([18f3fda](https://togithub.com/socketio/socket.io/commit/18f3fdab12947a9fee3e9c37cfc1da97027d1473)) - **uws:** prevent the server from crashing after upgrade ([ba497ee](https://togithub.com/socketio/socket.io/commit/ba497ee3eb52c4abf1464380d015d8c788714364)) ##### Dependencies - [`engine.io@~6.2.0`](https://togithub.com/socketio/engine.io/releases/tag/6.2.0) (no change) - [`ws@~8.2.3`](https://togithub.com/websockets/ws/releases/tag/8.2.3) (no change) ### [`v4.5.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#451-2022-05-17) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.5.0...4.5.1) ##### Bug Fixes - forward the local flag to the adapter when using fetchSockets() ([30430f0](https://togithub.com/socketio/socket.io/commit/30430f0985f8e7c49394543d4c84913b6a15df60)) - **typings:** add HTTPS server to accepted types ([#4351](https://togithub.com/socketio/socket.io/issues/4351)) ([9b43c91](https://togithub.com/socketio/socket.io/commit/9b43c9167cff817c60fa29dbda2ef7cd938aff51)) ##### Dependencies - [`engine.io@~6.2.0`](https://togithub.com/socketio/engine.io/releases/tag/6.2.0) (no change) - [`ws@~8.2.3`](https://togithub.com/websockets/ws/releases/tag/8.2.3) (no change) ### [`v4.5.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#450-2022-04-23) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.4.1...4.5.0) ##### Bug Fixes - **typings:** ensure compatibility with TypeScript 3.x ([#4259](https://togithub.com/socketio/socket.io/issues/4259)) ([02c87a8](https://togithub.com/socketio/socket.io/commit/02c87a85614e217b8e7b93753f315790ae9d99f6)) ##### Features ##### Catch-all listeners for outgoing packets This is similar to `onAny()`, but for outgoing packets. Syntax: ```js socket.onAnyOutgoing((event, ...args) => { console.log(event); }); ``` Added in [531104d](https://togithub.com/socketio/socket.io/commit/531104d332690138b7aab84d5583d6204132c8b4). ##### Broadcast and expect multiple acknowledgements Syntax: ```js io.timeout(1000).emit("some-event", (err, responses) => { // ... }); ``` Added in [8b20457](https://togithub.com/socketio/socket.io/commit/8b204570a94979bbec307f23ca078f30f5cf07b0). ##### `maxHttpBufferSize` value negotiation A "maxPayload" field is now included in the Engine.IO handshake, 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} Added in [088dcb4](https://togithub.com/socketio/engine.io/commit/088dcb4dff60df39785df13d0a33d3ceaa1dff38). ##### Dependencies - [`engine.io@~6.2.0`](https://togithub.com/socketio/engine.io/releases/tag/6.2.0) (https://github.com/socketio/engine.io/compare/6.1.0...6.2.0) - [`ws@~8.2.3`](https://togithub.com/websockets/ws/releases/tag/8.2.3) (no change) #### [4.4.1](https://togithub.com/socketio/socket.io/compare/4.4.0...4.4.1) (2022-01-06) ##### Bug Fixes - **types:** make `RemoteSocket.data` type safe ([#4234](https://togithub.com/socketio/socket.io/issues/4234)) ([770ee59](https://togithub.com/socketio/socket.io/commit/770ee5949fb47c2556876c622f06c862573657d6)) - **types:** pass `SocketData` type to custom namespaces ([#4233](https://togithub.com/socketio/socket.io/issues/4233)) ([f2b8de7](https://togithub.com/socketio/socket.io/commit/f2b8de71919e1b4d3e57f15a459972c1d1064787)) ### [`v4.4.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#441-2022-01-06) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.4.0...4.4.1) ##### Bug Fixes - **types:** make `RemoteSocket.data` type safe ([#4234](https://togithub.com/socketio/socket.io/issues/4234)) ([770ee59](https://togithub.com/socketio/socket.io/commit/770ee5949fb47c2556876c622f06c862573657d6)) - **types:** pass `SocketData` type to custom namespaces ([#4233](https://togithub.com/socketio/socket.io/issues/4233)) ([f2b8de7](https://togithub.com/socketio/socket.io/commit/f2b8de71919e1b4d3e57f15a459972c1d1064787)) ### [`v4.4.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#440-2021-11-18) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.3.2...4.4.0) ##### Bug Fixes - only set 'connected' to true after middleware execution ([02b0f73](https://togithub.com/socketio/socket.io/commit/02b0f73e2c64b09c72c5fbf7dc5f059557bdbe50)) ##### Features - add an implementation based on uWebSockets.js ([c0d8c5a](https://togithub.com/socketio/socket.io/commit/c0d8c5ab234d0d2bef0d0dec472973cc9662f647)) - add timeout feature ([f0ed42f](https://togithub.com/socketio/socket.io/commit/f0ed42f18cabef20ad976aeec37077b6bf3837a5)) - add type information to `socket.data` ([#4159](https://togithub.com/socketio/socket.io/issues/4159)) ([fe8730c](https://togithub.com/socketio/socket.io/commit/fe8730ca0f15bc92d5de81cf934c89c76d6af329)) #### [4.3.2](https://togithub.com/socketio/socket.io/compare/4.3.1...4.3.2) (2021-11-08) ##### Bug Fixes - fix race condition in dynamic namespaces ([#4137](https://togithub.com/socketio/socket.io/issues/4137)) ([9d86397](https://togithub.com/socketio/socket.io/commit/9d86397243bcbb5775a29d96e5ef03e17148a8e7)) #### [4.3.1](https://togithub.com/socketio/socket.io/compare/4.3.0...4.3.1) (2021-10-16) ##### Bug Fixes - fix server attachment ([#4127](https://togithub.com/socketio/socket.io/issues/4127)) ([0ef2a4d](https://togithub.com/socketio/socket.io/commit/0ef2a4d02c9350aff163df9cb61aece89c4dac0f)) ### [`v4.3.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#432-2021-11-08) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.3.1...4.3.2) ##### Bug Fixes - fix race condition in dynamic namespaces ([#4137](https://togithub.com/socketio/socket.io/issues/4137)) ([9d86397](https://togithub.com/socketio/socket.io/commit/9d86397243bcbb5775a29d96e5ef03e17148a8e7)) ### [`v4.3.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#431-2021-10-16) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.3.0...4.3.1) ##### Bug Fixes - fix server attachment ([#4127](https://togithub.com/socketio/socket.io/issues/4127)) ([0ef2a4d](https://togithub.com/socketio/socket.io/commit/0ef2a4d02c9350aff163df9cb61aece89c4dac0f)) ### [`v4.3.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#430-2021-10-14) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.2.0...4.3.0) ##### Bug Fixes - **typings:** add name field to cookie option ([#4099](https://togithub.com/socketio/socket.io/issues/4099)) ([033c5d3](https://togithub.com/socketio/socket.io/commit/033c5d399a2b985afad32c1e4b0c16d764e248cd)) - send volatile packets with binary attachments ([dc81fcf](https://togithub.com/socketio/socket.io/commit/dc81fcf461cfdbb5b34b1a5a96b84373754047d5)) ##### Features - serve ESM bundle ([60edecb](https://togithub.com/socketio/socket.io/commit/60edecb3bd33801803cdcba0aefbafa381a2abb3)) ### [`v4.2.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#420-2021-08-30) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.1.3...4.2.0) ##### Bug Fixes - **typings:** allow async listener in typed events ([ccfd8ca](https://togithub.com/socketio/socket.io/commit/ccfd8caba6d38b7ba6c5114bd8179346ed07671c)) ##### Features - ignore the query string when serving client JavaScript ([#4024](https://togithub.com/socketio/socket.io/issues/4024)) ([24fee27](https://togithub.com/socketio/socket.io/commit/24fee27ba36485308f8e995879c10931532c814e)) #### [4.1.3](https://togithub.com/socketio/socket.io/compare/4.1.2...4.1.3) (2021-07-10) ##### Bug Fixes - fix io.except() method ([94e27cd](https://togithub.com/socketio/socket.io/commit/94e27cd072c8a4eeb9636f6ffbb7a21d382f36b0)) - remove x-sourcemap header ([a4dffc6](https://togithub.com/socketio/socket.io/commit/a4dffc6527f412d51a786ae5bf2e9080fe1ca63c)) #### [4.1.2](https://togithub.com/socketio/socket.io/compare/4.1.1...4.1.2) (2021-05-17) ##### Bug Fixes - **typings:** ensure compatibility with TypeScript 3.x ([0cb6ac9](https://togithub.com/socketio/socket.io/commit/0cb6ac95b49a27483b6f1b6402fa54b35f82e36f)) - ensure compatibility with previous versions of the adapter ([a2cf248](https://togithub.com/socketio/socket.io/commit/a2cf2486c366cb62293101c10520c57f6984a3fc)) #### [4.1.1](https://togithub.com/socketio/socket.io/compare/4.1.0...4.1.1) (2021-05-11) ##### Bug Fixes - **typings:** properly type server-side events ([b84ed1e](https://togithub.com/socketio/socket.io/commit/b84ed1e41c9053792caf58974c5de9395bfd509f)) - **typings:** properly type the adapter attribute ([891b187](https://togithub.com/socketio/socket.io/commit/891b1870e92d1ec38910f03bb839817e2d6be65a)) ### [`v4.1.3`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#413-2021-07-10) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.1.2...4.1.3) ##### Bug Fixes - fix io.except() method ([94e27cd](https://togithub.com/socketio/socket.io/commit/94e27cd072c8a4eeb9636f6ffbb7a21d382f36b0)) - remove x-sourcemap header ([a4dffc6](https://togithub.com/socketio/socket.io/commit/a4dffc6527f412d51a786ae5bf2e9080fe1ca63c)) ### [`v4.1.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#412-2021-05-17) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.1.1...4.1.2) ##### Bug Fixes - **typings:** ensure compatibility with TypeScript 3.x ([0cb6ac9](https://togithub.com/socketio/socket.io/commit/0cb6ac95b49a27483b6f1b6402fa54b35f82e36f)) - ensure compatibility with previous versions of the adapter ([a2cf248](https://togithub.com/socketio/socket.io/commit/a2cf2486c366cb62293101c10520c57f6984a3fc)) ### [`v4.1.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#411-2021-05-11) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.1.0...4.1.1) ##### Bug Fixes - **typings:** properly type server-side events ([b84ed1e](https://togithub.com/socketio/socket.io/commit/b84ed1e41c9053792caf58974c5de9395bfd509f)) - **typings:** properly type the adapter attribute ([891b187](https://togithub.com/socketio/socket.io/commit/891b1870e92d1ec38910f03bb839817e2d6be65a)) ### [`v4.1.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#410-2021-05-11) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.0.2...4.1.0) ##### Features - add support for inter-server communication ([93cce05](https://togithub.com/socketio/socket.io/commit/93cce05fb3faf91f21fa71212275c776aa161107)) - notify upon namespace creation ([499c892](https://togithub.com/socketio/socket.io/commit/499c89250d2db1ab7725ab2b74840e188c267c46)) - add a "connection_error" event ([7096e98](https://togithub.com/socketio/engine.io/commit/7096e98a02295a62c8ea2aa56461d4875887092d), from `engine.io`) - add the "initial_headers" and "headers" events ([2527543](https://togithub.com/socketio/engine.io/commit/252754353a0e88eb036ebb3082e9d6a9a5f497db), from `engine.io`) ##### Performance Improvements - add support for the "wsPreEncoded" writing option ([dc381b7](https://togithub.com/socketio/socket.io/commit/dc381b72c6b2f8172001dedd84116122e4cc95b3)) #### [4.0.2](https://togithub.com/socketio/socket.io/compare/4.0.1...4.0.2) (2021-05-06) ##### Bug Fixes - **typings:** make "engine" attribute public ([b81ce4c](https://togithub.com/socketio/socket.io/commit/b81ce4c9d0b00666361498e2ba5e0d007d5860b8)) - properly export the Socket class ([d65b6ee](https://togithub.com/socketio/socket.io/commit/d65b6ee84c8e91deb61c3c1385eb19afa196a909)) #### [4.0.1](https://togithub.com/socketio/socket.io/compare/4.0.0...4.0.1) (2021-03-31) ##### Bug Fixes - **typings:** add fallback to untyped event listener ([#3834](https://togithub.com/socketio/socket.io/issues/3834)) ([a11152f](https://togithub.com/socketio/socket.io/commit/a11152f42b281df83409313962f60f230239c79e)) - **typings:** update return type from emit ([#3843](https://togithub.com/socketio/socket.io/issues/3843)) ([1a72ae4](https://togithub.com/socketio/socket.io/commit/1a72ae4fe27a14cf60916f991a2c94da91d9e54a)) ### [`v4.0.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#402-2021-05-06) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.0.1...4.0.2) ##### Bug Fixes - **typings:** make "engine" attribute public ([b81ce4c](https://togithub.com/socketio/socket.io/commit/b81ce4c9d0b00666361498e2ba5e0d007d5860b8)) - properly export the Socket class ([d65b6ee](https://togithub.com/socketio/socket.io/commit/d65b6ee84c8e91deb61c3c1385eb19afa196a909)) ### [`v4.0.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#401-2021-03-31) [Compare Source](https://togithub.com/socketio/socket.io/compare/4.0.0...4.0.1) ##### Bug Fixes - **typings:** add fallback to untyped event listener ([#3834](https://togithub.com/socketio/socket.io/issues/3834)) ([a11152f](https://togithub.com/socketio/socket.io/commit/a11152f42b281df83409313962f60f230239c79e)) - **typings:** update return type from emit ([#3843](https://togithub.com/socketio/socket.io/issues/3843)) ([1a72ae4](https://togithub.com/socketio/socket.io/commit/1a72ae4fe27a14cf60916f991a2c94da91d9e54a)) ### [`v4.0.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#400-2021-03-10) [Compare Source](https://togithub.com/socketio/socket.io/compare/3.1.2...4.0.0) ##### Bug Fixes - make io.to(...) immutable ([ac9e8ca](https://togithub.com/socketio/socket.io/commit/ac9e8ca6c71e00d4af45ee03f590fe56f3951186)) ##### Features - add some utility methods ([b25495c](https://togithub.com/socketio/socket.io/commit/b25495c069031674da08e19aed68922c7c7a0e28)) - add support for typed events ([#3822](https://togithub.com/socketio/socket.io/issues/3822)) ([0107510](https://togithub.com/socketio/socket.io/commit/0107510ba8a0f148c78029d8be8919b350feb633)) - allow to exclude specific rooms when broadcasting ([#3789](https://togithub.com/socketio/socket.io/issues/3789)) ([7de2e87](https://togithub.com/socketio/socket.io/commit/7de2e87e888d849eb2dfc5e362af4c9e86044701)) - allow to pass an array to io.to(...) ([085d1de](https://togithub.com/socketio/socket.io/commit/085d1de9df909651de8b313cc6f9f253374b702e)) #### [3.1.2](https://togithub.com/socketio/socket.io/compare/3.1.1...3.1.2) (2021-02-26) ##### Bug Fixes - ignore packets received after disconnection ([494c64e](https://togithub.com/socketio/socket.io/commit/494c64e44f645cbd24c645f1186d203789e84af0)) #### [3.1.1](https://togithub.com/socketio/socket.io/compare/3.1.0...3.1.1) (2021-02-03) ##### Bug Fixes - properly parse the CONNECT packet in v2 compatibility mode ([6f4bd7f](https://togithub.com/socketio/socket.io/commit/6f4bd7f8e7c41a075a8014565330a77c38b03a8d)) - **typings:** add return types and general-case overload signatures ([#3776](https://togithub.com/socketio/socket.io/issues/3776)) ([9e8f288](https://togithub.com/socketio/socket.io/commit/9e8f288ca9f14f91064b8d3cce5946f7d23d407c)) - **typings:** update the types of "query", "auth" and "headers" ([4f2e9a7](https://togithub.com/socketio/socket.io/commit/4f2e9a716d9835b550c8fd9a9b429ebf069c2895)) ### [`v3.1.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#312-2021-02-26) [Compare Source](https://togithub.com/socketio/socket.io/compare/3.1.1...3.1.2) ##### Bug Fixes - ignore packets received after disconnection ([494c64e](https://togithub.com/socketio/socket.io/commit/494c64e44f645cbd24c645f1186d203789e84af0)) ### [`v3.1.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#311-2021-02-03) [Compare Source](https://togithub.com/socketio/socket.io/compare/3.1.0...3.1.1) ##### Bug Fixes - properly parse the CONNECT packet in v2 compatibility mode ([6f4bd7f](https://togithub.com/socketio/socket.io/commit/6f4bd7f8e7c41a075a8014565330a77c38b03a8d)) - **typings:** add return types and general-case overload signatures ([#3776](https://togithub.com/socketio/socket.io/issues/3776)) ([9e8f288](https://togithub.com/socketio/socket.io/commit/9e8f288ca9f14f91064b8d3cce5946f7d23d407c)) - **typings:** update the types of "query", "auth" and "headers" ([4f2e9a7](https://togithub.com/socketio/socket.io/commit/4f2e9a716d9835b550c8fd9a9b429ebf069c2895)) ### [`v3.1.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#310-2021-01-15) [Compare Source](https://togithub.com/socketio/socket.io/compare/3.0.5...3.1.0) ##### Features - confirm a weak but matching ETag ([#3485](https://togithub.com/socketio/socket.io/issues/3485)) ([161091d](https://togithub.com/socketio/socket.io/commit/161091dd4c9e1b1610ac3d45d964195e63d92b94)) - **esm:** export the Namespace and Socket class ([#3699](https://togithub.com/socketio/socket.io/issues/3699)) ([233650c](https://togithub.com/socketio/socket.io/commit/233650c22209708b5fccc4349c38d2fa1b465d8f)) - add support for Socket.IO v2 clients ([9925746](https://togithub.com/socketio/socket.io/commit/9925746c8ee3a6522bd640b5d586c83f04f2f1ba)) - add room events ([155fa63](https://togithub.com/socketio/socket.io-adapter/commit/155fa6333a504036e99a33667dc0397f6aede25e)) ##### Bug Fixes - allow integers as event names ([1c220dd](https://togithub.com/socketio/socket.io-parser/commit/1c220ddbf45ea4b44bc8dbf6f9ae245f672ba1b9)) #### [2.4.1](https://togithub.com/socketio/socket.io/compare/2.4.0...2.4.1) (2021-01-07) ##### Reverts - fix(security): do not allow all origins by default ([a169050](https://togithub.com/socketio/socket.io/commit/a1690509470e9dd5559cec4e60908ca6c23e9ba0)) #### [3.0.5](https://togithub.com/socketio/socket.io/compare/3.0.4...3.0.5) (2021-01-05) ##### Bug Fixes - properly clear timeout on connection failure ([170b739](https://togithub.com/socketio/socket.io/commit/170b739f147cb6c92b423729b877e242e376927d)) ##### Reverts - restore the socket middleware functionality ([bf54327](https://togithub.com/socketio/socket.io/commit/bf5432742158e4d5ba2722cff4a614967dffa5b9)) ### [`v3.0.5`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#305-2021-01-05) [Compare Source](https://togithub.com/socketio/socket.io/compare/3.0.4...3.0.5) ##### Bug Fixes - properly clear timeout on connection failure ([170b739](https://togithub.com/socketio/socket.io/commit/170b739f147cb6c92b423729b877e242e376927d)) ##### Reverts - restore the socket middleware functionality ([bf54327](https://togithub.com/socketio/socket.io/commit/bf5432742158e4d5ba2722cff4a614967dffa5b9)) ### [`v3.0.4`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#304-2020-12-07) [Compare Source](https://togithub.com/socketio/socket.io/compare/3.0.3...3.0.4) ### [`v3.0.3`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#303-2020-11-19) [Compare Source](https://togithub.com/socketio/socket.io/compare/3.0.2...3.0.3) ### [`v3.0.2`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#302-2020-11-17) [Compare Source](https://togithub.com/socketio/socket.io/compare/3.0.1...3.0.2) ##### Bug Fixes - merge Engine.IO options ([43705d7](https://togithub.com/socketio/socket.io/commit/43705d7a9149833afc69edc937ea7f8c9aabfeef)) ### [`v3.0.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#301-2020-11-09) [Compare Source](https://togithub.com/socketio/socket.io/compare/3.0.0...3.0.1) ##### Bug Fixes - export ServerOptions and Namespace types ([#3684](https://togithub.com/socketio/socket.io/issues/3684)) ([f62f180](https://togithub.com/socketio/socket.io/commit/f62f180edafdd56d8a8a277e092bc66df0c5f07f)) - **typings:** update the signature of the emit method ([50671d9](https://togithub.com/socketio/socket.io/commit/50671d984a81535a6a15c704546ca7465e2ea295)) ### [`v3.0.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#300-2020-11-05) [Compare Source](https://togithub.com/socketio/socket.io/compare/2.5.1...3.0.0) ##### Bug Fixes - close clients with no namespace ([91cd255](https://togithub.com/socketio/socket.io/commit/91cd255ba76ff6a780c62740f9f5cd3a76f5d7c7)) ##### Features - emit an Error object upon middleware error ([54bf4a4](https://togithub.com/socketio/socket.io/commit/54bf4a44e9e896dfb64764ee7bd4e8823eb7dc7b)) - serve msgpack bundle ([aa7574f](https://togithub.com/socketio/socket.io/commit/aa7574f88471aa30ae472a5cddf1000a8baa70fd)) - add support for catch-all listeners ([5c73733](https://togithub.com/socketio/socket.io/commit/5c737339858d59eab4b5ee2dd6feff0e82c4fe5a)) - make Socket#join() and Socket#leave() synchronous ([129c641](https://togithub.com/socketio/socket.io/commit/129c6417bd818bc8b4e1b831644323876e627c13)) - remove prod dependency to socket.io-client ([7603da7](https://togithub.com/socketio/socket.io/commit/7603da71a535481e3fc60e38b013abf78516d322)) - move binary detection back to the parser ([669592d](https://togithub.com/socketio/socket.io/commit/669592d120409a5cf00f128070dee6d22259ba4f)) - add ES6 module export ([8b6b100](https://togithub.com/socketio/socket.io/commit/8b6b100c284ccce7d85e55659e3397f533916847)) - do not reuse the Engine.IO id ([2875d2c](https://togithub.com/socketio/socket.io/commit/2875d2cfdfa463e64cb520099749f543bbc4eb15)) - remove Server#set() method ([029f478](https://togithub.com/socketio/socket.io/commit/029f478992f59b1eb5226453db46363a570eea46)) - remove Socket#rooms object ([1507b41](https://togithub.com/socketio/socket.io/commit/1507b416d584381554d1ed23c9aaf3b650540071)) - remove the 'origins' option ([a8c0600](https://togithub.com/socketio/socket.io/commit/a8c06006098b512ba1b8b8df82777349db486f41)) - remove the implicit connection to the default namespace ([3289f7e](https://togithub.com/socketio/socket.io/commit/3289f7ec376e9ec88c2f90e2735c8ca8d01c0e97)) - throw upon reserved event names ([4bd5b23](https://togithub.com/socketio/socket.io/commit/4bd5b2339a66a5a675e20f689fff2e70ff12d236)) ##### BREAKING CHANGES - the Socket#use() method is removed (see [5c73733](https://togithub.com/socketio/socket.io/commit/5c737339858d59eab4b5ee2dd6feff0e82c4fe5a)) - Socket#join() and Socket#leave() do not accept a callback argument anymore. Before: ```js socket.join("room1", () => { io.to("room1").emit("hello"); }); ``` After: ```js 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: ```js 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: ```js new Server(3000, { cors: { origin: "https://example.com", methods: ["GET", "POST"], allowedHeaders: ["content-type"] } }); ``` The already existing 'allowRequest' option can be used for validation: ```js 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: ```js // client-side const socket = io("/admin"); // server-side io.on("connection", 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. ### [`v2.5.1`](https://togithub.com/socketio/socket.io/releases/tag/2.5.1) [Compare Source](https://togithub.com/socketio/socket.io/compare/2.5.0...2.5.1) ##### Bug Fixes - add a noop handler for the error event ([d30630b](https://togithub.com/socketio/socket.io/commit/d30630ba10562bf987f4d2b42440fc41a828119c)) ##### Links: - Diff: https://github.com/socketio/socket.io/compare/2.5.0...2.5.1 - Client release: `-` - engine.io version: `~3.6.0` (no change) - ws version: `~7.5.10` ### [`v2.5.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#250-2022-06-26) [Compare Source](https://togithub.com/socketio/socket.io/compare/2.4.1...2.5.0) ⚠️ WARNING ⚠️ The default value of the `maxHttpBufferSize` option has been decreased from 100 MB to 1 MB, in order to prevent attacks by denial of service. Security advisory: [GHSA-j4f2-536g-r55m](https://togithub.com/advisories/GHSA-j4f2-536g-r55m) ##### Bug Fixes - fix race condition in dynamic namespaces ([05e1278](https://togithub.com/socketio/socket.io/commit/05e1278cfa99f3ecf3f8f0531ffe57d850e9a05b)) - ignore packet received after disconnection ([22d4bdf](https://togithub.com/socketio/socket.io/commit/22d4bdf00d1a03885dc0171125faddfaef730066)) - only set 'connected' to true after middleware execution ([226cc16](https://togithub.com/socketio/socket.io/commit/226cc16165f9fe60f16ff4d295fb91c8971cde35)) - prevent the socket from joining a room after disconnection ([f223178](https://togithub.com/socketio/socket.io/commit/f223178eb655a7713303b21a78f9ef9e161d6458)) ##### Dependencies - [`engine.io@~3.6.0`](https://togithub.com/socketio/engine.io/releases/tag/3.6.0) (https://github.com/socketio/engine.io/compare/3.5.0...3.6.0) - [`ws@~7.4.2`](https://togithub.com/websockets/ws/releases/tag/7.4.2) (no change) #### [4.5.1](https://togithub.com/socketio/socket.io/compare/4.5.0...4.5.1) (2022-05-17) ##### Bug Fixes - forward the local flag to the adapter when using fetchSockets() ([30430f0](https://togithub.com/socketio/socket.io/commit/30430f0985f8e7c49394543d4c84913b6a15df60)) - **typings:** add HTTPS server to accepted types ([#4351](https://togithub.com/socketio/socket.io/issues/4351)) ([9b43c91](https://togithub.com/socketio/socket.io/commit/9b43c9167cff817c60fa29dbda2ef7cd938aff51)) ##### Dependencies - [`engine.io@~6.2.0`](https://togithub.com/socketio/engine.io/releases/tag/6.2.0) (no change) - [`ws@~8.2.3`](https://togithub.com/websockets/ws/releases/tag/8.2.3) (no change) ### [`v2.4.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#241-2021-01-07) [Compare Source](https://togithub.com/socketio/socket.io/compare/2.4.0...2.4.1) ##### Reverts - fix(security): do not allow all origins by default ([a169050](https://togithub.com/socketio/socket.io/commit/a1690509470e9dd5559cec4e60908ca6c23e9ba0)) ### [`v2.4.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#240-2021-01-04) [Compare Source](https://togithub.com/socketio/socket.io/compare/2.3.0...2.4.0) ##### Bug Fixes - **security:** do not allow all origins by default ([f78a575](https://togithub.com/socketio/socket.io/commit/f78a575f66ab693c3ea96ea88429ddb1a44c86c7)) - properly overwrite the query sent in the handshake ([d33a619](https://togithub.com/socketio/socket.io/commit/d33a619905a4905c153d4fec337c74da5b533a9e)) #### [3.0.4](https://togithub.com/socketio/socket.io/compare/3.0.3...3.0.4) (2020-12-07) #### [3.0.3](https://togithub.com/socketio/socket.io/compare/3.0.2...3.0.3) (2020-11-19) #### [3.0.2](https://togithub.com/socketio/socket.io/compare/3.0.1...3.0.2) (2020-11-17) ##### Bug Fixes - merge Engine.IO options ([43705d7](https://togithub.com/socketio/socket.io/commit/43705d7a9149833afc69edc937ea7f8c9aabfeef)) #### [3.0.1](https://togithub.com/socketio/socket.io/compare/3.0.0...3.0.1) (2020-11-09) ##### Bug Fixes - export ServerOptions and Namespace types ([#3684](https://togithub.com/socketio/socket.io/issues/3684)) ([f62f180](https://togithub.com/socketio/socket.io/commit/f62f180edafdd56d8a8a277e092bc66df0c5f07f)) - **typings:** update the signature of the emit method ([50671d9](https://togithub.com/socketio/socket.io/commit/50671d984a81535a6a15c704546ca7465e2ea295)) ### [`v2.3.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#230-2019-09-20) [Compare Source](https://togithub.com/socketio/socket.io/compare/2.2.0...2.3.0) This release mainly contains a bump of the `engine.io` and `ws` packages, but no additional features. ### [`v2.2.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#220-2018-11-29) [Compare Source](https://togithub.com/socketio/socket.io/compare/2.1.1...2.2.0) ##### Features - add cache-control header when serving the client source ([#2907](https://togithub.com/socketio/socket.io/pull/2907)) ([b00ae50](https://togithub.com/socketio/socket.io/commit/b00ae50be65d1bc88fa95145f1c486a6886a6b76)) ##### Bug fixes - throw an error when trying to access the clients of a dynamic namespace ([#3355](https://togithub.com/socketio/socket.io/pull/3355)) ([a7fbd1a](https://togithub.com/socketio/socket.io/commit/a7fbd1ac4a47cafd832fc62e371754df924c5903)) ### [`v2.1.1`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#211-2018-05-17) [Compare Source](https://togithub.com/socketio/socket.io/compare/2.1.0...2.1.1) ##### Features - add local flag to the socket object ([#3129](https://togithub.com/socketio/socket.io/pull/3219)) ([1decae3](https://togithub.com/socketio/socket.io/commit/1decae341c80c0417b32d3124ca30c005240b48a)) ```js socket.local.to('room101').emit(/* */); ``` ### [`v2.1.0`](https://togithub.com/socketio/socket.io/blob/HEAD/CHANGELOG.md#210-2018-03-29) [Compare Source](https://togithub.com/socketio/socket.io/compare/2.0.4...2.1.0) ##### Features - add a 'binary' flag ([#3185](https://togithub.com/socketio/socket.io/pull/3185)) ([f48a06c](https://togithub.com/socketio/socket.io/commit/f48a06c040280b44f90fd225c888910544fd63b5)) ```js // 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); ``` - add support for dynamic namespaces ([#3195](https://togithub.com/socketio/socket.io/pull/3195)) ([c0c79f0](https://togithub.com/socketio/socket.io/commit/c0c79f019e7138194e438339f8192705957c8ec3)) ```js 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](https://togithub.com/socketio/socket.io/pull/3197)) ([f4fc517](https://togithub.com/socketio/socket.io/commit/f4fc517e0fe25866c95b584291487b8cbdff889d)) - include the protocol in the origins check ([#3198](https://togithub.com/socketio/socket.io/pull/3198)) ([1f1d64b](https://togithub.com/socketio/socket.io/commit/1f1d64bab61a273712a199591a3f76210d8c0959)) ##### Important note :warning: from Engine.IO [3.2.0 release](https://togithub.com/socketio/engine.io/releases/tag/3.2.0) There are two non-breaking changes that are somehow quite important: - `ws` was reverted as the default wsEngine ([https://github.com/socketio/engine.io/pull/550](https://togithub.com/socketio/engine.io/pull/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: ```js var engine = require('engine.io'); var server = engine.listen(3000, { wsEngine: 'uws' }); ``` - `pingTimeout` now defaults to 5 seconds (instead of 60 seconds): [https://github.com/socketio/engine.io/pull/551](https://togithub.com/socketio/engine.io/pull/551) ### [`v2.0.4`](https://togithub.com/socketio/socket.io/releases/tag/2.0.4) [Compare Source](https://togithub.com/socketio/socket.io/compare/2.0.3...2.0.4) #### Bug fixes - do not throw when receiving an unhandled error packet ([#3038](https://togithub.com/socketio/socket.io/issues/3038)) - reset rooms object before broadcasting from namespace ([#3039](https://togithub.com/socketio/socket.io/issues/3039)) ##### Links: - Milestone: [2.0.4](https://togithub.com/socketio/socket.io/milestone/13) - Diff: [2.0.3...2.0.4](https://togithub.com/socketio/socket.io/compare/2.0.3...2.0.4) - Client release: [2.0.4](https://togithub.com/socketio/socket.io-client/releases/tag/2.0.4) - Diff `engine.io`: - - Diff `ws`: - ### [`v2.0.3`](https://togithub.com/socketio/socket.io/releases/tag/2.0.3) [Compare Source](https://togithub.com/socketio/socket.io/compare/2.0.2...2.0.3) #### Bug fixes - reset rooms object before broadcasting ([#2970](https://togithub.com/socketio/socket.io/issues/2970)) - fix middleware initialization ([#2969](https://togithub.com/socketio/socket.io/issues/2969)) ##### Links: - Milestone: [2.0.3](https://togithub.com/socketio/socket.io/milestone/12) - Diff: [2.0.2...2.0.3](https://togithub.com/socketio/socket.io/compare/2.0.2...2.0.3) - Client release: [2.0.3](https://togithub.com/socketio/socket.io-client/releases/tag/2.0.3) - Diff `engine.io`: - - Diff `ws`: - ### [`v2.0.2`](https://togithub.com/socketio/socket.io/releases/tag/2.0.2) [Compare Source](https://togithub.com/socketio/socket.io/compare/2.0.1...2.0.2) #### Bug fixes - fix timing issues with middleware ([#2948](https://togithub.com/socketio/socket.io/issues/2948)) ##### Links: - Milestone: [2.0.2](https://togithub.com/socketio/socket.io/milestone/11) - Diff: [2.0.1...2.0.2](https://togithub.com/socketio/socket.io/compare/2.0.1...2.0.2) - Client release: [2.0.2](https://togithub.com/socketio/socket.io-client/releases/tag/2.0.2) - Diff `engine.io`: - - Diff `ws`: - ### [`v2.0.1`](https://togithub.com/socketio/socket.io/releases/tag/2.0.1) [Compare Source](https://togithub.com/socketio/socket.io/compare/2.0.0...2.0.1) #### Bug fixes \- update path of client file ([#2934](https://togithub.com/socketio/socket.io/issues/2934)) ##### Links: - Milestone: [2.0.1](https://togithub.com/socketio/socket.io/milestone/9) - Diff: [2.0.0...2.0.1](https://togithub.com/socketio/socket.io/compare/2.0.0...2.0.1) - Client release: [2.0.1](https://togithub.com/socketio/socket.io-client/releases/tag/2.0.1) - Diff `engine.io`: - - Diff `ws`: - ### [`v2.0.0`](https://togithub.com/socketio/socket.io/releases/tag/2.0.0) [Compare Source](https://togithub.com/socketio/socket.io/compare/1.7.4...2.0.0) This major release brings several performance improvements: - [uws](https://togithub.com/uWebSockets/uWebSockets) is now the default Websocket engine. It should bring significant improvement in performance (particularly in terms of memory consumption) (https://github.com/socketio/engine.io/releases/tag/2.0.0) - the Engine.IO and Socket.IO handshake packets were merged, reducing the number of roundtrips necessary to establish a connection. ([#2833](https://togithub.com/socketio/socket.io/issues/2833)) - it is now possible to provide a custom parser according to the needs of your application ([#2829](https://togithub.com/socketio/socket.io/issues/2829)). Please take a look at the [example](https://togithub.com/socketio/socket.io/tree/master/examples/custom-parsers) for more information. Please note that this release is not backward-compatible, due to: - a breaking change related to utf-8 encoding in engine.io-parser ([https://github.com/socketio/engine.io-parser/pull/81](https://togithub.com/socketio/engine.io-parser/pull/81)) - an update to make the socket id on the client match the id on the server-side ([https://github.com/socketio/socket.io-client/pull/1058](https://togithub.com/socketio/socket.io-client/pull/1058)) Please also note that if you are using a self-signed certificate, `rejectUnauthorized` now defaults to `true` ([https://github.com/socketio/engine.io-client/pull/558](https://togithub.com/socketio/engine.io-client/pull/558)). Finally, the API documentation is now in the repository ([here](https://togithub.com/socketio/socket.io/blob/master/docs/API.md)), and the content of the website [here](https://togithub.com/socketio/socket.io-website). Do not hesitate if you see something wrong or missing! The full list of changes: - \[feat] Move binary detection to the parser ([#2923](https://togithub.com/socketio/socket.io/issues/2923)) - \[feat] Allow to join several rooms at once ([#2879](https://togithub.com/socketio/socket.io/issues/2879)) - \[feat] Merge Engine.IO and Socket.IO handshake packets ([#2833](https://togithub.com/socketio/socket.io/issues/2833)) - \[feat] Allow the use of custom parsers ([#2829](https://togithub.com/socketio/socket.io/issues/2829)) - \[fix] Use path.resolve by default and require.resolve as a fallback ([#2797](https://togithub.com/socketio/socket.io/issues/2797)) (by [@a-lucas](https://togithub.com/a-lucas)) - \[fix] Properly close the connection on error ([#2681](https://togithub.com/socketio/socket.io/issues/2681)) (by [@Nibbler999](https://togithub.com/Nibbler999)) - \[fix] Prevent null from being accepted as argument ([#2606](https://togithub.com/socketio/socket.io/issues/2606)) (by [@ianbrode](https://togithub.com/ianbrode)) - \[perf] Use shared instance of the encoder ([#2825](https://togithub.com/socketio/socket.io/issues/2825)) (by [@Nibbler999](https://togithub.com/Nibbler999)) - \[perf] Reset properties instead of deleting them ([#2826](https://togithub.com/socketio/socket.io/issues/2826)) (by [@Nibbler999](https://togithub.com/Nibbler999)) - \[perf] micro-optimisations ([#2793](https://togithub.com/socketio/socket.io/issues/2793)) (by [@billouboq](https://togithub.com/billouboq)) - \[chore] Merge history of 1.7.x and 0.9.x branches ([#2930](https://togithub.com/socketio/socket.io/issues/2930)) - \[chore] Added backers and sponsors on the README ([#2933](https://togithub.com/socketio/socket.io/issues/2933)) (by [@xdamman](https://togithub.com/xdamman)) - \[chore] Bump dependencies ([#2926](https://togithub.com/socketio/socket.io/issues/2926)) - \[chore] Bump socket.io-adapter to version 1.0.0 ([#2867](https://togithub.com/socketio/socket.io/issues/2867)) - \[chore] Bump engine.io to version 2.0.2 ([#2864](https://togithub.com/socketio/socket.io/issues/2864)) - \[chore] Bump engine.io to version 2.0.0 ([#2832](https://togithub.com/socketio/socket.io/issues/2832)) (by [@sgress454](https://togithub.com/sgress454)) - \[chore] Update issue template with fiddle ([#2811](https://togithub.com/socketio/socket.io/issues/2811)) - \[chore] Update copyright year LICENSE to 2017 ([#2803](https://togithub.com/socketio/socket.io/issues/2803)) (by [@isabellatea](https://togithub.com/isabellatea)) - \[docs] Add an example of custom parser ([#2929](https://togithub.com/socketio/socket.io/issues/2929)) - \[docs] Replace non-breaking space with proper whitespace ([#2913](https://togithub.com/socketio/socket.io/issues/2913)) (by [@epicTCK](https://togithub.com/epicTCK)) - \[docs] Update emit cheatsheet ([#2906](https://togithub.com/socketio/socket.io/issues/2906)) (by [@FarazPatankar](https://togithub.com/FarazPatankar)) - \[docs] Explicitly document that Server extends EventEmitter ([#2874](https://togithub.com/socketio/socket.io/issues/2874)) (by [@i8-pi](https://togithub.com/i8-pi)) - \[docs] Add server.engine.generateId attribute ([#2880](https://togithub.com/socketio/socket.io/issues/2880)) (by [@efkan](https://togithub.com/efkan)) - \[docs] Fix wrong space character in README ([#2900](https://togithub.com/socketio/socket.io/issues/2900)) (by [@SimenB](https://togithub.com/SimenB)) - \[docs] Fix documentation for 'connect' event ([#2898](https://togithub.com/socketio/socket.io/issues/2898)) (by [@swhgoon](https://togithub.com/swhgoon)) - \[docs] Add webpack build example ([#2828](https://togithub.com/socketio/socket.io/issues/2828)) - \[docs] Update the wording to match the code example ([#2853](https://togithub.com/socketio/socket.io/issues/2853)) (by [@timruffles](https://togithub.com/timruffles)) - \[docs] Small addition to the Express Readme Part ([#2846](https://togithub.com/socketio/socket.io/issues/2846)) (by [@H3rby7](https://togithub.com/H3rby7)) - \[docs] Add a 'Features' section in the README ([#2824](https://togithub.com/socketio/socket.io/issues/2824)) - \[docs] Add httpd cluster example ([#2819](https://togithub.com/socketio/socket.io/issues/2819)) - \[docs] Add haproxy cluster example ([#2818](https://togithub.com/socketio/socket.io/issues/2818)) - \[docs] Add nginx cluster example ([#2817](https://togithub.com/socketio/socket.io/issues/2817)) - \[docs] Implement whiteboard example ([#2810](https://togithub.com/socketio/socket.io/issues/2810)) - \[docs] Fix documentation for `local` flag ([#2816](https://togithub.com/socketio/socket.io/issues/2816)) - \[docs] Add emit cheatsheet ([#2815](https://togithub.com/socketio/socket.io/issues/2815)) - \[docs] Add pingInterval/pingTimeout/transports options in the API documentation ([#2814](https://togithub.com/socketio/socket.io/issues/2814)) - \[docs] Add an example for socket.join() method ([#2813](https://togithub.com/socketio/socket.io/issues/2813)) - \[docs] Fix a typo on `clients` method in the API documentation ([#2812](https://togithub.com/socketio/socket.io/issues/2812)) - \[docs] Fix wrong argument name in API.md ([#2802](https://togithub.com/socketio/socket.io/issues/2802)) (by [@andrea11](https://togithub.com/andrea11)) - \[docs] Add install script on Readme.md ([#2780](https://togithub.com/socketio/socket.io/issues/2780)) (by [@bananaappletw](https://togithub.com/bananaappletw)) - \[docs] API documentation ([#2784](https://togithub.com/socketio/socket.io/issues/2784)) Besides, we are proud to announce that Socket.IO is now a part of open collective: https://opencollective.com/socketio. More on that later. ### [`v1.7.4`](https://togithub.com/socketio/socket.io/releases/tag/1.7.4) [Compare Source](https://togithub.com/socketio/socket.io/compare/1.7.3...1.7.4) - \[chore] Bump engine.io to version 1.8.4 ### [`v1.7.3`](https://togithub.com/socketio/socket.io/releases/tag/1.7.3) [Compare Source](https://togithub.com/socketio/socket.io/compare/1.7.2...1.7.3) - \[chore] Bump engine.io-client to version 1.8.3 ### [`v1.7.2`](https://togithub.com/socketio/socket.io/releases/tag/1.7.2) [Compare Source](https://togithub.com/socketio/socket.io/compare/1.7.1...1.7.2) - \[chore] Bump engine.io to version 1.8.2 ([#2782](https://togithub.com/socketio/socket.io/issues/2782)) - \[fix] Fixes socket.use error packet ([#2772](https://togithub.com/socketio/socket.io/issues/2772)) ### [`v1.7.1`](https://togithub.com/socketio/socket.io/releases/tag/1.7.1) [Compare Source](https://togithub.com/socketio/socket.io/compare/1.7.0...1.7.1) (following `socket.io-client` update) ### [`v1.7.0`](https://togithub.com/socketio/socket.io/releases/tag/1.7.0) [Compare Source](https://togithub.com/socketio/socket.io/compare/1.6.0...1.7.0) - \[docs] Comment connected socket availability for adapters ([#2081](https://togithub.com/socketio/socket.io/issues/2081)) - \[docs] Fixed grammar issues in the README.md ([#2159](https://togithub.com/socketio/socket.io/issues/2159)) - \[feature] serve sourcemap for socket.io-client ([#2482](https://togithub.com/socketio/socket.io/issues/2482)) - \[feature] Add a `local` flag ([#2628](https://togithub.com/socketio/socket.io/issues/2628)) - \[chore] Bump engine.io to version 1.8.1 ([#2765](https://togithub.com/socketio/socket.io/issues/2765)) - \[chore] Update client location and serve minified file ([#2766](https://togithub.com/socketio/socket.io/issues/2766)) ### [`v1.6.0`](https://togithub.com/socketio/socket.io/releases/tag/1.6.0) [Compare Source](https://togithub.com/socketio/socket.io/compare/1.5.1...1.6.0) - \[fix] Make ETag header comply with standard. ([#2603](https://togithub.com/socketio/socket.io/issues/2603)) - \[feature] Loading client script on demand. ([#2567](https://togithub.com/socketio/socket.io/issues/2567)) - \[test] Fix leaking clientSocket ([#2721](https://togithub.com/socketio/socket.io/issues/2721)) - \[feature] Add support for all event emitter methods ([#2601](https://togithub.com/socketio/socket.io/issues/2601)) - \[chore] Update year to 2016 ([#2456](https://togithub.com/socketio/socket.io/issues/2456)) - \[feature] Add support for socket middleware ([#2306](https://togithub.com/socketio/socket.io/issues/2306)) - \[feature] add support for Server#close(callback) ([#2748](https://togithub.com/socketio/socket.io/issues/2748)) - \[fix] Don't drop query variables on handshake ([#2745](https://togithub.com/socketio/socket.io/issues/2745)) - \[example] Add disconnection/reconnection logs to the chat example ([#2675](https://togithub.com/socketio/socket.io/issues/2675)) - \[perf] Minor code optimizations ([#2219](https://togithub.com/socketio/socket.io/issues/2219)) - \[chore] Bump debug to version 2.3.3 ([#2754](https://togithub.com/socketio/socket.io/issues/2754)) - \[chore] Bump engine.io to version 1.8.0 ([#2755](https://togithub.com/socketio/socket.io/issues/2755)) - \[chore] Bump socket.io-adapter to version 0.5.0 ([#2756](https://togithub.com/socketio/socket.io/issues/2756)) ### [`v1.5.1`](https://togithub.com/socketio/socket.io/releases/tag/1.5.1) [Compare Source](https://togithub.com/socketio/socket.io/compare/1.5.0...1.5.1) - \[fix] Avoid swallowing exceptions thrown by user event handlers ([#2682](https://togithub.com/socketio/socket.io/issues/2682)) - \[test] Use client function to unify `client` in test script ([#2731](https://togithub.com/socketio/socket.io/issues/2731)) - \[docs] Add link to LICENSE ([#2221](https://togithub.com/socketio/socket.io/issues/2221)) - \[docs] Fix JSDoc of optional parameters ([#2465](https://togithub.com/socketio/socket.io/issues/2465)) - \[docs] Fix typo ([#2724](https://togithub.com/socketio/socket.io/issues/2724)) - \[docs] Link readme npm package badge to npm registry page ([#2612](https://togithub.com/socketio/socket.io/issues/2612)) - \[docs] Minor fixes ([#2526](https://togithub.com/socketio/socket.io/issues/2526)) - \[chore] Bump socket.io-parser to 2.3.