The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/app/graphql/server/api.js

79 lines
2.0 KiB

import { graphqlExpress, graphiqlExpress } from 'apollo-server-express';
import { JSAccountsContext as jsAccountsContext } from '@accounts/graphql-api';
import { SubscriptionServer } from 'subscriptions-transport-ws';
import { execute, subscribe } from 'graphql';
import { Meteor } from 'meteor/meteor';
import { WebApp } from 'meteor/webapp';
import bodyParser from 'body-parser';
import express from 'express';
import cors from 'cors';
import { executableSchema } from './schema';
import { settings } from '../../settings';
const subscriptionPort = settings.get('Graphql_Subscription_Port') || 3100;
// the Meteor GraphQL server is an Express server
const graphQLServer = express();
graphQLServer.disable('x-powered-by');
if (settings.get('Graphql_CORS')) {
graphQLServer.use(cors());
}
graphQLServer.use('/api/graphql', (req, res, next) => {
if (settings.get('Graphql_Enabled')) {
next();
} else {
res.status(400).send('Graphql is not enabled in this server');
}
});
graphQLServer.use(
'/api/graphql',
bodyParser.json(),
graphqlExpress((request) => ({
schema: executableSchema,
context: jsAccountsContext(request),
formatError: (e) => ({
message: e.message,
locations: e.locations,
path: e.path,
}),
debug: Meteor.isDevelopment,
}))
);
graphQLServer.use(
'/graphiql',
graphiqlExpress({
endpointURL: '/api/graphql',
subscriptionsEndpoint: `ws://localhost:${ subscriptionPort }`,
})
);
const startSubscriptionServer = () => {
if (settings.get('Graphql_Enabled')) {
SubscriptionServer.create({
schema: executableSchema,
execute,
subscribe,
onConnect: (connectionParams) => ({ authToken: connectionParams.Authorization }),
},
{
port: subscriptionPort,
host: process.env.BIND_IP || '0.0.0.0',
});
console.log('GraphQL Subscription server runs on port:', subscriptionPort);
}
};
WebApp.onListening(() => {
startSubscriptionServer();
});
// this binds the specified paths to the Express server running Apollo + GraphiQL
WebApp.connectHandlers.use(graphQLServer);