https://github.com/apollo-server-integrations/apollo-server-integration-hapi
https://github.com/apollo-server-integrations/apollo-server-integration-hapi
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/apollo-server-integrations/apollo-server-integration-hapi
- Owner: apollo-server-integrations
- License: mit
- Created: 2022-11-05T07:37:54.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-29T09:15:36.000Z (about 1 month ago)
- Last Synced: 2025-03-30T05:01:46.178Z (about 1 month ago)
- Language: TypeScript
- Size: 757 KB
- Stars: 3
- Watchers: 6
- Forks: 3
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
[](https://www.npmjs.com/package/@as-integrations/hapi)
[](https://www.npmjs.com/package/@as-integrations/hapi)# Apollo Server Integration for Hapi
## **Introduction**
**An Apollo Server integration for use with Hapi.**
This is a simple package that easily allows you to connect your own Hapi server implementation to an Apollo Server instance.
## **Requirements**
- **[Node.js v16](https://nodejs.org/)** or later
- **[Hapi v20.x](https://www.hapi.dev/)** or later
- **[GraphQL.js v16](https://graphql.org/graphql-js/)** or later
- **[Apollo Server v4](https://www.apollographql.com/docs/apollo-server/)** or later## **Installation**
```bash
npm install @as-integrations/hapi @apollo/server graphql @hapi/hapi
```## **Usage**
Setup [Hapi](https://www.hapi.dev/) & [Apollo Server](https://www.apollographql.com/docs/apollo-server/) like you usually would and then connect the two by using the `hapiApollo` plugin:
```typescript
import { Server } from '@hapi/hapi';
import { ApolloServer, BaseContext } from "@apollo/server";
import hapiApollo from "@as-integrations/hapi";
// ...// create the apollo server instance and start it
const apolloServer = new ApolloServer({
typeDefs,
resolvers,
});await apolloServer.start();
// create the hapi server
const hapi = new Server({
host: 'localhost',
port: 5000
});// ...
// register the plugin with the hapi server and provide the apollo instance in plugin config
await hapi.register({
plugin: hapiApollo,
options: {
apolloServer,
path: '/graphql'
}
});await hapi.start();
```Note: **You must call and await `apollo.start()` before using the integration.**
## **ES5 Usage**
If you are using ES5 or are otherwise using require() to use this module, you may need reference the default export like so:
```
const hapiApollo = require("@as-integrations/hapi").default;
```## **Context**
Apollo Server v4 has moved context setup outside of the `ApolloServer` constructor.
Define you're own context function and pass it in to the `context` option for the plugin.
For example:
```typescript
await hapi.register({
plugin: hapiPlugin,
options: {
context: async ({ request }) => ({
token: request.headers.token
}),
apolloServer
}
});
```## **Route Configuration**
Additional configuration for Hapi routes that are created by this module can be passed via
getRoute (get / options routes) or postRoute (post route). Both support options, rules, and vhost
configuration.For example, to add a max upload size to the post route:
```typescript
await hapi.register({
plugin: hapiPlugin,
options: {
context: async ({ request }) => ({
token: request.headers.token
}),
apolloServer,
postRoute: {
options: {
payload: {
maxBytes: 1024
}
}
}
}
});
```## **Contributors**
- David Castro ([arimus](https://github.com/arimus))
- Trevor Scheer ([trevor-scheer](https://github.com/trevor-scheer))
- GeekOffice ([GeekOffice](https://github.com/geekoffice))