|
@@ -1 +1,55 @@
|
|
|
"use strict";
|
|
"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));
|