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 };
};
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
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 graphql_tools_1 = require("graphql-tools");
const compression_1 = __importDefault(require("compression"));
const cookie_parser_1 = __importDefault(require("cookie-parser"));
const apollo_server_express_1 = require("apollo-server-express");
const resolvers_1 = __importDefault(require("./resolvers"));
const endpoints = __importStar(require("./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 schema_graphql_1 = __importDefault(require("./schema.graphql"));
const pino = require('express-pino-logger')();
exports.log = pino;
exports.pino = pino;
const schema = graphql_tools_1.makeExecutableSchema({ typeDefs: schema_graphql_1.default, resolvers: resolvers_1.default });
exports.schema = schema;
function createServer() {
    const debugCache = new keyValueCache_1.KeyValueCache();
    return new apollo_server_express_1.ApolloServer({
        typeDefs: schema_graphql_1.default,
        resolvers: resolvers_1.default,
        playground: !!process.env.SHOULD_USE_PLAYGROUND,
        /**
         * @todo add `inspect` for better log?
         */
        context(apollo) {
            const { req, res } = apollo;
            const correlationId = correlationId_1.toCorrelationId(req);
            req.correlationId = correlationId;
            const context = {
                req,
                res,
                log: req.log,
                correlationId,
            };
            Object.assign(context, endpoints);
            /**
             * @todo split this out
             */
            // Object
            //   .keys(endpoints)
            //   // example [catalog, cart, checkout]
            //   .forEach(key => {
            //     const bloatedEndpoint = endpoints[key]
            //     const endpoint = {}
            //     context[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
            //       })
            //   })
            return context;
        },
        /**
         * @see https://github.com/apollographql/apollo-server/blob/c4d3a93e7bc8a9ffb1692c50a4f766422f30e665/packages/apollo-server-core/src/runHttpQuery.ts#L343
         */
        dataSources() {
            const dataSources = {};
            // endpoints...
            Object.keys(endpoints).forEach(key => {
                const endpointGroup = endpoints[key];
                // requests...
                Object.keys(endpointGroup).forEach(endpointName => {
                    if (dataSources[endpointName]) {
                        return;
                    }
                    const endpoint = endpointGroup[endpointName];
                    if (endpoint.toApollo) {
                        // endpoint.toApollo()
                        dataSources[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(dataSources, endpointName, {
                        //   // enumerable: true,
                        //   // value: endpoint,
                        //   get() {
                        //     return endpoint
                        //   },
                        // })
                    }
                });
            });
            // require('fliplog').quick(dataSources)
            return dataSources;
        },
        tracing: true,
        introspection: true,
        cache: debugCache,
        debug: true,
        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();
    app.use(compression_1.default());
    app.use(cookie_parser_1.default());
    /**
     * @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);
    const corsOptions = {
        origin: security_1.toHostWithProtocol(),
        credentials: true,
    };
    server.applyMiddleware({ app, cors: corsOptions });
    return app;
}
exports.createApp = createApp;
exports.default = createApp;
//# sourceMappingURL=app.js.map