-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
69 lines (62 loc) · 1.78 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
const
base = process.cwd(),
express = require('express'),
bodyParser = require('body-parser'),
morgan = require('morgan'),
{
execute,
subscribe,
} = require('graphql'),
{
graphqlExpress,
graphiqlExpress,
} = require('apollo-server-express'),
{ createServer } = require('http'),
{ SubscriptionServer } = require('subscriptions-transport-ws'),
schema = require(`${base}/schema`),
connectMongo = require(`${base}/connectors/mongo`),
{ authenticate } = require(`${base}/authenticate`),
buildDataLoaders = require(`${base}/dataloader`),
{
SECRET_KEY,
TESTING_TOKEN,
} = require(`${base}/config/jwt`),
port = process.env.PORT || 3000,
start = async () => {
const
mongo = await connectMongo(),
app = express(),
buildOptions = async (req, res) => {
const user = await authenticate(req, mongo.Users, SECRET_KEY);
return {
context: {
dataloaders: buildDataLoaders(mongo),
mongo,
user,
SECRET_KEY,
},
schema,
}
}
app.use(morgan('dev'));
app.use('/graphql', bodyParser.json(), graphqlExpress(buildOptions));
app.use('/graphiql', graphiqlExpress({
endpointURL: '/graphql',
passHeader: `'Authorization': '${TESTING_TOKEN}'`,
subscriptionsEndpoint: `ws://localhost:${port}/subscriptions`,
}));
const server = createServer(app);
server.listen(port, () => {
new SubscriptionServer({
execute,
subscribe,
schema,
}, {
server,
path: '/subscriptions',
});
console.log(`Server Magic happens on port: ${port}`);
console.log(`GraphiQL Magic happens on: ${port}/graphiql`);
});
};
start();