fastify / fastify/fastify-websocket

Full declaration syntax is not typed correctly for `websocket: true`

Open
#314 7 comments 5 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
468
Forks
84
PR merge metrics
No merged PRs in 30d

Description

### Prerequisites

- [X] I have written a descriptive issue title
- [X] I have searched existing issues to ensure the bug has not already been reported

### Fastify version

5.2.0

### Plugin version

11.0.1

### Node.js version

22.12

### Operating system

macOS

### Operating system version (i.e. 20.04, 11.3, 10)

Sonoma 14.5

### Description

It seems that the full declaration syntax is not supported by `@fastify/websocket` types.

Also, when the `wsHandler` property is set, the behaviour is the following:
- the `handler` property is still required and typescript throws error when it is not in place;
- when the `handler` property is also set, the ws connection is handled by the `handler` property while `wsHandler` is ignored.

Is this the expected behaviour?

```typescript
import Fastify from 'fastify';
import FastifyWebsocket from '@fastify/websocket';

const app = Fastify();
app.register(FastifyWebsocket);

app.route({
method: 'GET',
url: '/',
websocket: true,
handler: async (websocket, request) => {
// 'websocket' is typed as FastifyRequest, not WebSocket
// 'request' is typed as FastifyReply, not FastifyRequest
},
});

app.route({
method: 'GET',
url: '/',
websocket: true,
wsHandler: (socket, request) => {
console.log('WS'); // not printed
},
handler: (socket, request) => {
console.log(socket.constructor.name === 'WebSocket'); // prints true (when executing "new WebSocket('ws://localhost:3000/')" in the browser)
},
});
```

Somewhat related issue: https://github.com/fastify/fastify-websocket/issues/133

### Expected Behavior

1. The full declaration syntax (`RouteOptions` type) is typed correctly.
2. wsHandler is executed for ws connection when both `handler` and `wsHandler` are defined.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.