Function: makeHandler()
makeHandler<
P
,E
>(options
):WebSocketHandler
Defined in: src/use/bun.ts:67
Use the server with Bun. This is a basic starter, feel free to copy the code over and adjust it to your needs
The WebSocket subprotocol is not available on the established socket and therefore needs to be checked during the request handling.
Additionally, the keep-alive logic seems to be handled by Bun seeing that
they default sendPingsAutomatically
to true
.
import { makeHandler, handleProtocols } from 'graphql-ws/lib/use/lib/bun';
import { schema } from './my-schema';
Bun.serve({
fetch(req, server) {
const [path, _search] = req.url.split('?');
if (!path.endsWith('/graphql')) {
return new Response('Not Found', { status: 404 });
}
if (req.headers.get('upgrade') != 'websocket') {
return new Response('Upgrade Required', { status: 426 });
}
if (!handleProtocols(req.headers.get('sec-websocket-protocol') || '')) {
return new Response('Bad Request', { status: 404 });
}
if (!server.upgrade(req)) {
return new Response('Internal Server Error', { status: 500 });
}
return new Response();
},
websocket: makeHandler({ schema }),
port: 4000,
});
console.log('Listening to port 4000');
Type Parameters
• P extends undefined
| Record
<string
, unknown
> = undefined
| Record
<string
, unknown
>
• E extends Record
<PropertyKey
, unknown
> = Record
<PropertyKey
, never
>
Parameters
options
ServerOptions
<P
, Extra
& Partial
<E
>>
Returns
WebSocketHandler