@graphql-mesh/cli
Version:
32 lines (31 loc) • 1.17 kB
JavaScript
import { makeBehavior } from 'graphql-ws/lib/use/uWebSockets';
import { getGraphQLWSOptions } from './getGraphQLWSOpts.js';
export async function startuWebSocketsServer({ meshHTTPHandler, getBuiltMesh, sslCredentials, graphqlPath, hostname, port, }) {
let uWebSocketsApp;
if (sslCredentials) {
const { SSLApp } = await import('uWebSockets.js');
uWebSocketsApp = SSLApp({
key_file_name: sslCredentials.key,
cert_file_name: sslCredentials.cert,
});
}
else {
const { App } = await import('uWebSockets.js');
uWebSocketsApp = App();
}
uWebSocketsApp.any('/*', meshHTTPHandler);
const wsHandler = makeBehavior(getGraphQLWSOptions(getBuiltMesh));
uWebSocketsApp.ws(graphqlPath, wsHandler);
return new Promise(function (resolve, reject) {
uWebSocketsApp.listen(hostname, port, listenSocket => {
if (!listenSocket) {
reject(new Error(`Failed to listen ${port} on ${hostname}`));
}
resolve({
stop() {
uWebSocketsApp?.close?.();
},
});
});
});
}