/** * Configure dotenv: * https://www.npmjs.com/package/dotenv * * Configure file updates with multer: * https://github.com/expressjs/multer * * Configure CORS for use with localhost. */ const quickMiddleware = (req, res, next) => { if ( req.body && req.body.operationName && req.body.operationName !== 'IntrospectionQuery' && req.body.variables && req.body.query ) { console.log(req.body.operationName, req.body.variables) } next() } require('dotenv').config() const { GraphQLServer } = require('graphql-yoga') const cookieParser = require('cookie-parser') const bodyParser = require('body-parser') const cors = require('cors') const express = require('express') const { merge } = require('lodash') const { db, populateUser } = require('./src/db') const { uploadMiddleware, handleFile } = require('./src/file') const { authenticate } = require('./src/authenticate') const prismaResolvers = require('./src/resolvers') const system = require('./src/system') const interfaces = require('./src/interfaces') const typeDefs = ['./schema.graphql', system.typeDefs, interfaces.typeDefs] const resolvers = merge( system.resolvers, interfaces.resolvers, prismaResolvers.resolvers ) const server = new GraphQLServer({ typeDefs, resolvers, context: req => ({ ...req, db, debug: true }) }) server.express.use(cookieParser()) server.express.use(bodyParser.json()) server.express.use(quickMiddleware) server.express.use(authenticate) server.express.use(populateUser) server.express.use( cors({ origin: process.env.FRONTEND_URL, credentials: true }) ) server.express.use('/static', express.static('static')) server.express.post('/upload', uploadMiddleware.single('file'), handleFile) server.start( { cors: { credentials: true, origin: process.env.FRONTEND_URL } }, server => console.log(`Server is running on http://localhost:${server.port}`) )