Repository URL to install this package:
|
Version:
2.0.21 ▾
|
"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