aboutsummaryrefslogtreecommitdiff
path: root/src/handlers/apollo.js
blob: 45746e09be1941e65d15f1aa8fc9e457e2dd9bd0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const { ApolloServer } = require("apollo-server-cloudflare");
const {
  graphqlCloudflare,
} = require("apollo-server-cloudflare/dist/cloudflareApollo");

const KVCache = require("../kv-cache");
const SenpyAPI = require("../datasources/senpy");
const resolvers = require("../resolvers");
const typeDefs = require("../schema");

const dataSources = () => ({
  senpyAPI: new SenpyAPI(),
});

const kvCache = { cache: new KVCache() };

const createServer = (graphQLOptions) =>
  new ApolloServer({
    typeDefs,
    resolvers,
    introspection: true,
    dataSources,
    ...(graphQLOptions.kvCache ? kvCache : {}),
  });

const handler = async (request, graphQLOptions) => {
  const server = createServer(graphQLOptions);

  await server.start();

  return graphqlCloudflare(() => server.createGraphQLServerOptions(request))(
    request
  );
};

module.exports = handler;