"use strict"; require("dotenv").config(); const cors = require("cors"); const express = require("express"); const helmet = require("helmet"); const http = require("http"); const { ApolloServer, gql } = require("apollo-server-express"); const { ApolloServerPluginDrainHttpServer } = require("apollo-server-core"); const corsOrigins = process.env.APP_CORS_ORIGINS.split(","); const app = express(); app.enable("trust proxy"); app.use(cors({ origin: corsOrigins })); if (app.get("env") === "production") { app.use(helmet()); app.use(helmet.contentSecurityPolicy()); } const httpServer = http.createServer(app); const typeDefs = gql` type Hello { message: String } type Query { hello: Hello } `; const resolvers = { Query: { hello: _ => ({ message: "Hello World!" }) } }; const apollo = new ApolloServer({ typeDefs, resolvers, plugin: [ApolloServerPluginDrainHttpServer({ httpServer })] }); apollo.start().then(_ => { apollo.applyMiddleware({ app }); app.all("*", (request, response) => response.send("")); httpServer.listen(process.env.APP_PORT); let apolloData = httpServer.address(); console.log(`GraphQL service listening on ${apolloData.address}:${apolloData.port}${apollo.graphqlPath}`); }).catch(error => console.log(error.message));