Commit Graph

20 Commits

Author SHA1 Message Date
Damien Arrachequesne
6404391143 refactor: allow transportOptions to override all other options
Related: https://github.com/socketio/socket.io/issues/4719
2023-06-27 14:59:09 +02:00
Damien Arrachequesne
4abc2ca3df chore(release): 6.5.0
Diff: https://github.com/socketio/engine.io-client/compare/6.4.0...6.5.0
2023-06-16 11:05:41 +02:00
Damien Arrachequesne
9d37b16e6a feat: favor WebTransport over WebSocket
This commit ensures that when there are multiple possible upgrades
(like WebSocket and WebTransport), then the WebTransport is favored and
the other upgrades are delayed.

Following 7195c0f305
2023-06-16 10:24:51 +02:00
Damien Arrachequesne
c36883d243 refactor: use "import type" syntax
For some reason, "import { type A }" does not work in some cases:

> node_modules/engine.io-client/build/esm/socket.d.ts:2:15 - error TS1005: ',' expected.

> 2 import { type Packet, type BinaryType, RawData } from "engine.io-parser";

References: https://www.typescriptlang.org/docs/handbook/modules.html#importing-types
2023-02-03 09:22:36 +01:00
Damien Arrachequesne
1eaeeece35 refactor: remove unused option
This option was added by error during the TypeScript migration.

Related: 587ccf3380
2022-12-14 06:56:05 +01:00
Damien Arrachequesne
ec5a596680 refactor: improve typings
Note: `readyState` and `writeBuffer` are set to public, as they might
be useful for the end user.
2022-12-14 06:49:23 +01:00
Damien Arrachequesne
528a61f86f refactor: bump prettier to version 2.8.1
This major bump creates a lot of noise, but it is necessary for
prettier to be able to parse new syntax such as:

- typed imports: `import { type xxx } from ...`
- private attributes: `class A { #b; #c() {} }`
2022-12-13 15:36:28 +01:00
iifawzi
21a6e1219a feat: add the "addTrailingSlash" option (#694)
The "addTrailingSlash" option allows to control whether a trailing
slash is added to the path of the HTTP requests created by the library:

- true (default): "/engine.io/"
- false: "/engine.io"

Related: https://github.com/socketio/socket.io-client/issues/1550

Signed-off-by: iifawzi <iifawzie@gmail.com>
2022-12-09 08:50:03 +01:00
Damien Arrachequesne
99925a4775 fix: properly clear "beforeunload" event listener
Related: https://github.com/socketio/engine.io-client/issues/693
2022-10-13 12:20:03 +02:00
Damien Arrachequesne
e2ab447d63 refactor: add missing .js extension for ESM usage 2022-04-18 00:43:40 +02:00
Damien Arrachequesne
bc3cefb57b refactor: replace custom clone method by Object.assign() 2022-04-17 23:35:52 +02:00
Damien Arrachequesne
df32277c3f refactor: import single-file 3rd party modules
This commit allows to:

- provide an ESM version of those modules ([1])
- reduce the attack surface in case of supply chain attacks
- reduce the size of the bundle with tree-shaking

As a downside, we won't receive security updates for those modules
anymore.

[1]: https://github.com/socketio/socket.io-client/issues/1536
2022-04-13 08:31:02 +02:00
Damien Arrachequesne
b9252e2074 feat: add details to the "close" event
The close event will now include additional details to help debugging
if anything has gone wrong.

Example when a payload is over the maxHttpBufferSize value in HTTP
long-polling mode:

```js
socket.on("close", (reason, details) => {
  console.log(reason); // "transport error"

  // in that case, details is an error object
  console.log(details.message); "xhr post error"
  console.log(details.description); // 413 (the HTTP status of the response)

  // details.context refers to the XMLHttpRequest object
  console.log(details.context.status); // 413
  console.log(details.context.responseText); // ""
});
```

Note: the error object was already included before this commit and is
kept for backward compatibility

Example when a payload is over the maxHttpBufferSize value with
WebSockets:

```js
socket.on("close", (reason, details) => {
  console.log(reason); // "transport close"

  // in that case, details is a plain object
  console.log(details.description); // "websocket connection closed"

  // details.context is a CloseEvent object
  console.log(details.context.code); // 1009 (which means "Message Too Big")
  console.log(details.context.reason); // ""
});
```

Example within a cluster without sticky sessions:

```js
socket.on("close", (reason, details) => {
  console.log(details.context.status); // 400
  console.log(details.context.responseText); // '{"code":1,"message":"Session ID unknown"}'
});
```

Note: we could also print some warnings in development for the "usual"
errors:

- CORS error
- HTTP 400 with multiple nodes
- HTTP 413 with maxHttpBufferSize

but that would require an additional step when going to production
(i.e. setting NODE_ENV variable to "production"). This is open to
discussion!

Related:

- https://github.com/socketio/socket.io/issues/3946
- https://github.com/socketio/socket.io/issues/1979
- https://github.com/socketio/socket.io-client/issues/1518
2022-04-11 17:15:08 +02:00
Damien Arrachequesne
46fdc2f0ed feat: slice write buffer according to the maxPayload value
The server will now include a "maxPayload" field in the handshake
details, allowing the clients to decide how many packets they have to
send to stay under the maxHttpBufferSize value.

Related:

- https://github.com/socketio/socket.io-client/issues/1531
- 088dcb4dff
2022-03-12 11:11:17 +01:00
Damien Arrachequesne
018e1afcc5 fix(typings): allow any value in the query option
Related: https://github.com/socketio/engine.io-client/issues/679
2021-11-05 07:26:32 +01:00
Kaan Gökdemir
8f68f77825 fix(typings): allow port to be a number (#680)
`string` is kept for backward compatibility (and `location.port` is a
string).

Reference: https://developer.mozilla.org/en-US/docs/Web/API/Location/port

Related: https://github.com/socketio/socket.io-client/issues/1444
2021-11-05 07:22:58 +01:00
Damien Arrachequesne
b3bb73aac7 chore: bump @socket.io/component-emitter to version 3.0.0
The typed events have been moved from [1] to [2] in order to remove
the intermediary class and reduce the bundle size.

Diff: https://github.com/socketio/emitter/compare/2.0.0...3.0.0

[1]: https://github.com/socketio/socket.io-client
[2]: https://github.com/socketio/emitter/
2021-10-14 13:46:08 +02:00
Damien Arrachequesne
c6561928be refactor: remove XDomainRequest support
This was used in IE8 (but behind a flag).

BREAKING CHANGE: the enableXDR option is removed

Related: https://github.com/socketio/engine.io-client/issues/674
2021-10-08 13:11:19 +02:00
Damien Arrachequesne
b2c73812e9 refactor: remove JSONP polling
JSONP polling was only used in IE7/8, which are not supported anymore.

BREAKING CHANGE: the jsonp and forceJSONP options are removed.
2021-10-08 11:49:15 +02:00
Damien Arrachequesne
7245b803e0 chore: migrate to TypeScript
This change introduces an ESM build which will allow tree shaking. A
CJS build is also provided for backward compatibility.
2021-10-04 23:12:09 +02:00