Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/graphql / dist / app.js
Size: Mime:
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable import/first */
/* eslint-disable import/no-namespace */
// @hack @fixme
require("./typings");
// ===
require("./bootstrapper/setup");
const express_1 = __importDefault(require("express"));
const compression_1 = __importDefault(require("compression"));
const cookie_parser_1 = __importDefault(require("cookie-parser"));
const body_parser_1 = __importDefault(require("body-parser"));
const apollo_server_express_1 = require("apollo-server-express");
// import { formatError } from 'apollo-errors'
// import { makeExecutableSchema } from 'graphql-tools'
// import resolvers from './resolvers'
// import proxyMiddleware from './proxy'
// import typeDefs from './schema.graphql'
// import * as endpoints from './endpoints'
const correlationId_1 = require("./bootstrapper/api/correlationId");
const cookieMiddleware_1 = require("./deps/cookieMiddleware");
const security_1 = require("./deps/security");
const keyValueCache_1 = require("./deps/keyValueCache");
const config_1 = require("./bootstrapper/api/config");
const graphql_modules_1 = require("./graphql-modules");
// @todo
const { schema, context, dataSources, mergedContextBuilder } = graphql_modules_1.AppModules;
exports.schema = schema;
const pino = require('express-pino-logger')();
exports.log = pino;
exports.pino = pino;
// const schema = makeExecutableSchema({ typeDefs, resolvers })
function createServer() {
    // ecomreact-redis.mrmotd.ng.0001.use1.cache.amazonaws.com 6379
    const debugCache = new keyValueCache_1.KeyValueCache();
    return new apollo_server_express_1.ApolloServer({
        schema,
        playground: !!process.env.SHOULD_USE_PLAYGROUND,
        /**
         * @todo add `inspect` for better log?
         */
        context(apollo) {
            const { req, res } = apollo;
            const correlationId = correlationId_1.toCorrelationId(req);
            // const sessionId = toSessionId(req)
            req.correlationId = correlationId;
            // req.sessionId = sessionId
            // req['x-sk-session-id'] = sessionId
            const moreContext = Object.assign({ req,
                res, log: req.log, correlationId }, context);
            // Object.assign(moreContext, endpoints)
            /**
             * @todo this was probably removed for a reason, didn't note it
             * @todo split this out
             */
            // Object.keys(endpoints)
            //   // example [catalog, cart, checkout]
            //   .forEach(key => {
            //     const bloatedEndpoint = endpoints[key]
            //     const endpoint = {}
            //     moreContext[key] = endpoint
            //     // go through the REQUESTS for each ENDPOINT
            //     // (catalog.getProductList, etc)
            //     Object.keys(bloatedEndpoint)
            //       .filter(requestKey => !!bloatedEndpoint[requestKey].toApollo)
            //       // example: [getProductDetail, getProductList]
            //       .forEach(requestKey => {
            //         const request = bloatedEndpoint[requestKey]
            //         // could also scope here
            //         endpoint[requestKey] = request
            //       })
            //   })
            const computedContext = mergedContextBuilder(context);
            // console.log('___context___', Object.keys(computedContext))
            Object.assign(moreContext, computedContext);
            return moreContext;
        },
        /**
         * @see https://github.com/apollographql/apollo-server/blob/c4d3a93e7bc8a9ffb1692c50a4f766422f30e665/packages/apollo-server-core/src/runHttpQuery.ts#L343
         */
        dataSources() {
            return dataSources();
            // const mergedDataSources = {}
            // endpoints...
            // Object.keys(endpoints).forEach(key => {
            //   const endpointGroup = endpoints[key]
            //
            //   // requests...
            //   Object.keys(endpointGroup).forEach(endpointName => {
            //     if (mergedDataSources[endpointName]) {
            //       return
            //     }
            //
            //     const endpoint = endpointGroup[endpointName]
            //     if (endpoint.toApollo) {
            //       // endpoint.toApollo()
            //       mergedDataSources[endpointName] = endpoint
            //
            //       /**
            //        * @see https://github.com/apollographql/apollo-server/blob/master/packages/apollo-server-core/src/runHttpQuery.ts#L343
            //        * issue here is Object.values
            //        */
            //       // Object.defineProperty(mergedDataSources, endpointName, {
            //       //   // enumerable: true,
            //       //   // value: endpoint,
            //       //   get() {
            //       //     return endpoint
            //       //   },
            //       // })
            //     }
            //   })
            // })
            // require('fliplog').quick(mergedDataSources)
            // return mergedDataSources
        },
        tracing: process.env.NODE_ENV !== 'production',
        introspection: process.env.NODE_ENV !== 'production',
        cache: debugCache,
        debug: config_1.shouldShowStackTrace,
        cacheControl: {
            defaultMaxAge: 60,
            stripFormattedExtensions: false,
        },
        formatError(error) {
            console.error(error);
            // require('fliplog').quick(error)
            return error;
        },
        // formatResponse(response) {
        //   if (process.env.NODE_ENV === 'production') {
        //     pino.logger.info('formatResponse: ', response)
        //   } else {
        //     console.log('formatResponse: ', response)
        //   }
        //   // console.log(
        //   //   'cacheControl: ',
        //   //   JSON.stringify(response.extensions.cacheControl, undefined, 2)
        //   // )
        //   // debugCache.set(response.url)
        //   return response
        // },
        engine: {
            apiKey: process.env.APOLLO_ENGINE_KEY ||
                'service:skava-engine:_oygzZUWfir8gDOh7kpgAQ',
        },
    });
}
function createApp() {
    // @todo re-enable continue when starting mocks
    // if (process.env.MOCK_GRAPHQL) {
    //   addMockFunctionsToSchema({
    //     schema,
    //   })
    // }
    const server = createServer();
    // Initialize the app and proxy
    const app = express_1.default();
    // @karthikeyan
    // app.use((req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
    //   // can put error handlers here as the first step
    // })
    app.use(compression_1.default());
    app.use(cookie_parser_1.default());
    app.use(body_parser_1.default.json());
    app.use((error, req, res, next) => {
        if (error instanceof SyntaxError) {
            console.log({ error });
            res.sendStatus(406).send('Sorry, that resource was not found.');
        }
        else {
            next();
        }
    });
    /**
     * @see https://www.npmjs.com/package/cors
     * @see https://stackoverflow.com/questions/19743396/cors-cannot-use-wildcard-in-access-control-allow-origin-when-credentials-flag-i
     * @see https://www.npmjs.com/package/cors#enabling-cors-pre-flight
     */
    // app.options('/graphql', securityOriginMiddleware)
    // const apolloMiddlewareBuilt = createApolloMiddleware()
    app.use(cookieMiddleware_1.cookieMiddleware);
    app.use(pino);
    /**
     * Added methods without POST to ['access-control-allow-methods ']
     * @see https://jira.skava.net/browse/SECTEM-5402
     */
    const corsOptions = {
        origin: security_1.toHostWithProtocol(),
        credentials: true,
        methods: ['GET', 'POST'],
    };
    server.applyMiddleware({ app, cors: corsOptions });
    return app;
}
exports.createApp = createApp;
exports.default = createApp;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlDQUFpQztBQUNqQyx3Q0FBd0M7QUFDeEMsZUFBZTtBQUNmLHFCQUFrQjtBQUNsQixNQUFNO0FBQ04sZ0NBQTZCO0FBQzdCLHNEQUE2QjtBQUM3Qiw4REFBcUM7QUFDckMsa0VBQXdDO0FBQ3hDLDhEQUFvQztBQUNwQyxpRUFBb0Q7QUFNcEQsOENBQThDO0FBQzlDLHVEQUF1RDtBQUN2RCxzQ0FBc0M7QUFDdEMsd0NBQXdDO0FBQ3hDLDBDQUEwQztBQUMxQywyQ0FBMkM7QUFDM0Msb0VBQWtFO0FBQ2xFLDhEQUEwRDtBQUMxRCw4Q0FBb0Q7QUFDcEQsd0RBQW9EO0FBQ3BELHNEQUFnRTtBQUVoRSx1REFBOEM7QUFFOUMsUUFBUTtBQUNSLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLDRCQUFVLENBQUE7QUEwTnZFLHdCQUFNO0FBeE5SLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUE7QUEwTm5DLG1CQUFHO0FBQ1gsb0JBQUk7QUF6Tk4sK0RBQStEO0FBRS9ELFNBQVMsWUFBWTtJQUNuQiwrREFBK0Q7SUFDL0QsTUFBTSxVQUFVLEdBQUcsSUFBSSw2QkFBYSxFQUFFLENBQUE7SUFDdEMsT0FBTyxJQUFJLG9DQUFZLENBQUM7UUFDdEIsTUFBTTtRQUNOLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUI7UUFFL0M7O1dBRUc7UUFDSCxPQUFPLENBQUMsTUFBTTtZQUNaLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFBO1lBRTNCLE1BQU0sYUFBYSxHQUFHLCtCQUFlLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDMUMscUNBQXFDO1lBQ3JDLEdBQUcsQ0FBQyxh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