
Security News
PEP 810 Proposes Explicit Lazy Imports for Python 3.15
An opt-in lazy import keyword aims to speed up Python startups, especially CLIs, without the ecosystem-wide risks that sank PEP 690.
@oly_op/apollo-server-fastify
Advanced tools
A community-maintained package for connecting Fastify to Apollo GraphQL server.
This is a simple package that easily allows you to connect your own Fastify server implementation to an Apollo Server instance.
npm install @oly_op/apollo-server-fastify @apollo/server graphql fastify
Setup Fastify & Apollo Server like you usually would and then connect the two by using the fastifyApollo
plugin:
import Fastify from "fastify"
import { ApolloServer, BaseContext } from "@apollo/server"
import fastifyApollo, { fastifyApolloDrainPlugin } from "@oly_op/apollo-server-fastify"
// ...
const fastify = Fastify()
const apollo = new ApolloServer<BaseContext>({
typeDefs,
resolvers,
plugins: [
fastifyApolloDrainPlugin(fastify),
],
})
await apollo.start()
// ...
await fastify.register(fastifyApollo(apollo))
Alternatively you can use the exported function fastifyApolloHandler
which can be passed into any Fastify route handler.
This allows you to explicitly set all routing options, for example the URL path and accepted methods.
Examples shown below:
import { fastifyApolloHandler } from "@oly_op/apollo-server-fastify"
// ... setup Fastify & Apollo
fastify.post("/graphql", fastifyApolloHandler(apollo))
fastify.get("/api", fastifyApolloHandler(apollo))
fastify.route({
url: "/graphql",
method: ["GET", "POST", "OPTIONS"],
handler: fastifyApolloHandler(apollo),
})
Please see the example.
Apollo Server 4 (AS4) has moved context setup outside of the ApolloServer
constructor.
Define you're own context function and pass it in to the context
option. For example:
import { ApolloServer } from "@apollo/server"
import fastifyApollo, { fastifyApolloHandler, ApolloFastifyContextFunction } from "@oly_op/apollo-server-fastify"
// ...
interface MyContext {
authorization: JWTPayload | false;
}
const apollo = new ApolloServer<MyContext>({ resolvers, typeDefs })
const myContextFunction: ApolloFastifyContextFunction<MyContext> = async request => ({
authorization: await isAuthorized(request.headers.authorization),
})
await fastify.register(fastifyApollo(apollo), {
context: myContextFunction,
})
// OR
await fastify.post("/graphql", fastifyApolloHandler(apollo, {
context: myContextFunction,
}))
All options and generics are optional other than passing in the ApolloServer
instance.
fastifyApollo
export default function fastifyApollo<Context extends BaseContext = BaseContext>(
apollo: ApolloServer<Context>,
): FastifyPluginAsync<ApolloFastifyPluginOptions<Context>>;
fastifyApolloHandler
export function fastifyApolloHandler<Context extends BaseContext = BaseContext>(
apollo: ApolloServer<Context>,
options?: ApolloFastifyHandlerOptions<Context>,
): RouteHandlerMethod;
ApolloFastifyContextFunction
export type ApolloFastifyContextFunction<Context> =
(request: FastifyRequest, reply: FastifyReply) => Promise<Context>;
ApolloFastifyPluginOptions
:path
string | undefined
"/graphql"
method
HTTPMethod | HTTPMethod[]
["GET", "POST", "OPTIONS"]
context
async () => ({})
HTTPMethod
is exported from Fastify.
ApolloFastifyHandlerOptions
:context
async () => ({})
All functions and types optionally allow you to pass in a Server type to Fastify (the default is http.Server
).
Please pass in forceConnections: true
to Fastify to correctly shutdown you're server on close and not hang incoming requests.
FAQs
@oly_op/apollo-server-fastify
The npm package @oly_op/apollo-server-fastify receives a total of 0 weekly downloads. As such, @oly_op/apollo-server-fastify popularity was classified as not popular.
We found that @oly_op/apollo-server-fastify demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
An opt-in lazy import keyword aims to speed up Python startups, especially CLIs, without the ecosystem-wide risks that sank PEP 690.
Security News
Socket CEO Feross Aboukhadijeh discusses the recent npm supply chain attacks on PodRocket, covering novel attack vectors and how developers can protect themselves.
Security News
Maintainers back GitHub’s npm security overhaul but raise concerns about CI/CD workflows, enterprise support, and token management.