123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import 'reflect-metadata';
- import express from 'express';
- import { ApolloServerPluginLandingPageGraphQLPlayground as Playground } from 'apollo-server-core';
- import { ApolloServer } from 'apollo-server-express';
- import { createSchema } from './schema';
- import { ApolloLogs } from './config/logger/apollo.logger';
- import { createServer } from 'http';
- import logger from './config/logger/logger';
- import getSessionMiddleware from './core/middlewares/sessionMiddleware';
- import { MyContext } from './types';
- import { __prod__ } from './config/constants/constants';
- import cors from 'cors';
- import datasource from './config/datasource';
- import appsService from './modules/apps/apps.service';
- import { runUpdates } from './core/updates/run';
- import recover from './core/updates/recover-migrations';
- import { cloneRepo, updateRepo } from './helpers/repo-helpers';
- import startJobs from './core/jobs/jobs';
- import { getConfig } from './core/config/TipiConfig';
- const { clientUrls, rootFolder, appsRepoId, appsRepoUrl } = getConfig();
- let corsOptions = {
- credentials: true,
- origin: function (origin: any, callback: any) {
- if (!__prod__) {
- return callback(null, true);
- }
- // disallow requests with no origin
- if (!origin) return callback(new Error('Not allowed by CORS'), false);
- if (clientUrls.includes(origin)) {
- return callback(null, true);
- }
- const message = "The CORS policy for this origin doesn't allow access from the particular origin.";
- return callback(new Error(message), false);
- },
- };
- const main = async () => {
- try {
- const app = express();
- const port = 3001;
- app.use(express.static(`${rootFolder}/repos/${appsRepoId}`));
- app.use(cors(corsOptions));
- app.use(getSessionMiddleware());
- await datasource.initialize();
- const schema = await createSchema();
- const httpServer = createServer(app);
- const plugins = [ApolloLogs];
- if (!__prod__) {
- plugins.push(Playground({ settings: { 'request.credentials': 'include' } }));
- }
- const apolloServer = new ApolloServer({
- schema,
- context: ({ req, res }): MyContext => ({ req, res }),
- plugins,
- });
- await apolloServer.start();
- apolloServer.applyMiddleware({ app, cors: corsOptions });
- try {
- await datasource.runMigrations();
- } catch (e) {
- logger.error(e);
- await recover();
- }
- // Run migrations
- await runUpdates();
- httpServer.listen(port, async () => {
- await cloneRepo(appsRepoUrl);
- await updateRepo(appsRepoId);
- startJobs();
- // Start apps
- appsService.startAllApps();
- console.info(`Server running on port ${port} 🚀 Production => ${__prod__}`);
- });
- } catch (error) {
- console.log(error);
- logger.error(error);
- }
- };
- main();
|