
Research
/Security News
Weaponizing Discord for Command and Control Across npm, PyPI, and RubyGems.org
Socket researchers uncover how threat actors weaponize Discord across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.
@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 1 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.
Research
/Security News
Socket researchers uncover how threat actors weaponize Discord across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.
Security News
Socket now integrates with Bun 1.3’s Security Scanner API to block risky packages at install time and enforce your organization’s policies in local dev and CI.
Research
The Socket Threat Research Team is tracking weekly intrusions into the npm registry that follow a repeatable adversarial playbook used by North Korean state-sponsored actors.