Ocelot-Social/src/index.js
2018-10-17 20:07:58 +02:00

97 lines
2.4 KiB
JavaScript

import { GraphQLServer } from 'graphql-yoga'
import { makeExecutableSchema } from 'apollo-server'
import { augmentSchema } from 'neo4j-graphql-js'
import { typeDefs, resolvers } from './graphql-schema'
import { v1 as neo4j } from 'neo4j-driver'
import dotenv from 'dotenv'
import mocks from './mocks'
import middleware from './middleware'
import passport from 'passport'
import jwtStrategy from './jwt/strategy'
import jwt from 'jsonwebtoken'
// import {
// GraphQLLowerCaseDirective,
// GraphQLTrimDirective,
// GraphQLDefaultToDirective
// } from 'graphql-custom-directives';
dotenv.config()
const schema = makeExecutableSchema({
typeDefs,
resolvers
})
// augmentSchema will add auto generated mutations based on types in schema
// const augmentedSchema = augmentSchema(schema)
// add custom directives
// const directives = [
// GraphQLLowerCaseDirective,
// GraphQLTrimDirective,
// GraphQLDefaultToDirective
// ]
// augmentedSchema._directives.push.apply(augmentedSchema._directives, directives)
const driver = neo4j.driver(
process.env.NEO4J_URI || 'bolt://localhost:7687',
neo4j.auth.basic(
process.env.NEO4J_USER || 'neo4j',
process.env.NEO4J_PASSWORD || 'neo4j'
)
)
const MOCK = (process.env.MOCK === 'true')
console.log('MOCK:', MOCK)
const server = new GraphQLServer({
context: async (req) => {
const payload = {
driver,
user: null,
req: req.request
}
try {
const token = payload.req.headers.authorization.replace('Bearer ', '')
payload.user = await jwt.verify(token, process.env.JWT_SECRET)
} catch (err) {}
return payload
},
schema: augmentSchema(schema),
tracing: true,
middlewares: middleware,
mocks: MOCK ? mocks : false
})
passport.use('jwt', jwtStrategy())
server.express.use(passport.initialize())
server.express.post('/graphql', passport.authenticate(['jwt'], { session: false }))
// session middleware
// server.express.use(session({
// name: 'qid',
// secret: process.env.JWT_SECRET,
// resave: true,
// saveUninitialized: true,
// cookie: {
// secure: process.env.NODE_ENV === 'production',
// maxAge: ms('1d')
// }
// }))
const serverConfig = {
port: 4000
// cors: {
// credentials: true,
// origin: [process.env.CLIENT_URI] // your frontend url.
// }
}
server.start(serverConfig, options => {
console.log(`Server ready at ${process.env.GRAPHQL_URI} 🚀`);
})