UNPKG

@schamane/small-graphql-mongoose-middleware

Version:

![Check Code](https://github.com/schamane/small-graphql-mongoose-middleware/workflows/Check%20Code/badge.svg)

50 lines 2.37 kB
"use strict"; 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