UNPKG

core-mvc

Version:

Simple but powerful MVC framework for NodeJS.

98 lines (97 loc) 3.86 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ApiServer = void 0; const express_1 = __importDefault(require("express")); const cookie_parser_1 = __importDefault(require("cookie-parser")); const cors_1 = __importDefault(require("cors")); const graphql_tag_1 = __importDefault(require("graphql-tag")); const server_1 = require("@apollo/server"); const express4_1 = require("@apollo/server/express4"); const merge_1 = require("@graphql-tools/merge"); const graphql_playground_html_1 = require("@apollographql/graphql-playground-html"); const gqlDefinitions_1 = require("./runtime/gqlDefinitions"); const decodeToken_1 = __importDefault(require("./jwt/decodeToken")); const userDataFromToken_1 = require("./jwt/userDataFromToken"); const express_2 = require("express"); class ApiServer { constructor(userClass) { this.userClass = userClass; } start() { const server = (0, express_1.default)(); server.disable('x-powered-by'); server.use((0, cors_1.default)({ exposedHeaders: ['Link'], })); server.use(express_1.default.urlencoded({ extended: true })); server.use(express_1.default.json()); server.use((0, cookie_parser_1.default)()); const port = process.env.PORT ? +process.env.PORT : 11111; const host = '0.0.0.0'; const schema = [ (0, graphql_tag_1.default) ` type Query { version: String } `, ...(0, gqlDefinitions_1.getTypeDefinitions)(), ]; const resolvers = [ { Query: {}, }, ...(0, gqlDefinitions_1.getResolvers)(), ]; server.use((request, _, next) => { const accessToken = request.cookies['access-token'] || request.cookies.accessToken || request.headers['x-access-token']; if (accessToken) { try { request.user = (0, userDataFromToken_1.userFromTokenData)(this.userClass, (0, decodeToken_1.default)(accessToken).user); } catch (error) { console.error(error); } } next(); }); server.get('/', (request, result) => { const playgroundRenderPageOptions = { endpoint: '/', cdnUrl: '/cdn', }; result.setHeader('Content-Type', 'text/html'); const playground = (0, graphql_playground_html_1.renderPlaygroundPage)(playgroundRenderPageOptions); result.write(playground); result.end(); }); server.use('/cdn/@apollographql/graphql-playground-react', express_1.default.static('./node_modules/apollo-playground-static-files/')); (async () => { const apolloServer = new server_1.ApolloServer({ typeDefs: (0, merge_1.mergeTypeDefs)(schema, {}), resolvers, rootValue: global, allowBatchedHttpRequests: true, }); await apolloServer.start(); server.use('/', (0, cors_1.default)({ maxAge: 3600, }), (0, express_2.json)(), (0, express4_1.expressMiddleware)(apolloServer, { context: async ({ req, res }) => ({ req, res, }), })); server.listen(port, host, () => { console.log(`Server listening ${host}:${port}`); }); })().catch(error => { throw error; }); } } exports.ApiServer = ApiServer;