Run Anywhere - Deploy your GatewayNode frameworks
Integration with Hapi
Hapi allows you to build powerful, scalable applications, with minimal overhead and full out-of-the-box functionality.
Hive Gateway can be integrated easily as a route to the existing Hapi application with a few lines of code.
Example
import http from "node:http";
import { Readable } from "node:stream";
import { createGatewayRuntime } from "@graphql-hive/gateway-runtime";
import Hapi from "@hapi/hapi";
import { schema } from "./my-graphql-schema";
interface ServerContext {
req: Hapi.Request;
h: Hapi.ResponseToolkit;
}
const hiveGateway =
createGatewayRuntime<ServerContext>(/* Your configuration */);
const server = Hapi.server({ port: 4000 });
server.route({
method: "*",
path: hiveGateway.graphqlEndpoint,
options: {
payload: {
// let hiveGateway handle the parsing
output: "stream",
},
},
handler: async (req, h) => {
const { status, headers, body } =
await hiveGateway.handleNodeRequestAndResponse(req.raw.req, req.raw.res, {
req,
h,
});
const res = h.response(
Readable.from(body, {
// hapi needs the stream not to be in object mode
objectMode: false,
}),
);
for (const [key, val] of headers) {
res.header(key, val);
}
return res.code(status);
},
});
server.start();Hive Gateway should now be available at http://localhost:4000/graphql.