aboutsummaryrefslogtreecommitdiff
path: root/src/handlers/apollo.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/handlers/apollo.js')
-rw-r--r--src/handlers/apollo.js36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/handlers/apollo.js b/src/handlers/apollo.js
new file mode 100644
index 0000000..45746e0
--- /dev/null
+++ b/src/handlers/apollo.js
@@ -0,0 +1,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;