@schamane/small-graphql-mongoose-middleware
Version:

50 lines • 2.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ApplicationPubSub = exports.isAllowedUser = exports.installGraphQlSubscriptions = exports.GraphQlServer = exports.makeSchema = void 0;
const lodash_1 = require("lodash");
const apollo_server_express_1 = require("apollo-server-express");
const passport_1 = require("passport");
const events_1 = require("events");
const makeSchema = (schemasDefs) => {
const typeDefs = (0, lodash_1.compact)((0, lodash_1.map)(schemasDefs, 'typeDef'));
const resolvers = (0, lodash_1.compact)((0, lodash_1.merge)((0, lodash_1.map)(schemasDefs, 'resolvers')));
return (0, apollo_server_express_1.makeExecutableSchema)({
typeDefs,
resolvers
});
};
exports.makeSchema = makeSchema;
const graphqlAuth = (authStrategy, createContextFn) => async ({ req, connection }) => {
if (connection) {
return (0, lodash_1.get)(connection, 'context');
}
return new Promise((resolve, reject) => (0, passport_1.authenticate)(authStrategy, { session: false }, async (err, user, authInfo) => err ? reject(err) : resolve(createContextFn ? await createContextFn(user, authInfo) : user))(req));
};
const GraphQlServer = (app, dataSources, graphQlOptions, schema, authStrategy, createContextFn) => {
const options = {
schema,
context: graphqlAuth(authStrategy, createContextFn),
dataSources,
playground: graphQlOptions.playground,
subscriptions: graphQlOptions.path
};
const server = new apollo_server_express_1.ApolloServer(options);
server.applyMiddleware({ app, ...graphQlOptions });
return server;
};
exports.GraphQlServer = GraphQlServer;
const installGraphQlSubscriptions = (graphQlServer, server) => {
graphQlServer.installSubscriptionHandlers(server);
};
exports.installGraphQlSubscriptions = installGraphQlSubscriptions;
const isAllowedUser = (user) => {
return !!user;
};
exports.isAllowedUser = isAllowedUser;
// TODO: rework pubSub instanciating
// export const ApplicationPubSub = new PubSub();
const biggerEventEmitter = new events_1.EventEmitter();
biggerEventEmitter.setMaxListeners(30);
exports.ApplicationPubSub = new apollo_server_express_1.PubSub({ eventEmitter: biggerEventEmitter });
// export type ResolverFn = (...params: unknown[]) => unknown;
//# sourceMappingURL=middleware.js.map