Documentation
Use
Bun
Functions
makeHandler

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