import { use, server, schema, settings } from 'nexus' import { prisma } from 'nexus-plugin-prisma' import { prismaClient } from './prismaClient' import { auth } from 'nexus-plugin-jwt-auth' import { permissions } from './permissions' import { applyRoutes } from './routes' import { applyExpressMiddlewares } from './middlewares/express' import cors from 'cors' import { allEnvironmentHosts } from './config' import { logger } from './utils/logger' // import './tracer' if (process.env.DATABASE_URL?.includes('1EL')) { logger.warn("YOU'RE USING PROD DATABASE. BE CAREFUL!") } else if (process.env.DATABASE_URL?.includes('0kJ')) { logger.warn("YOU'RE USING STAGING DATABASE. BE CAREFUL!") } use( prisma({ features: { crud: true }, }) ) settings.change({ server: { playground: process.env.NODE_ENV === 'development' || process.env.ENABLE_PLAYGROUND === 'true', }, }) // Enables the JWT Auth plugin use( auth({ appSecret: process.env.APP_SECRET, }) ) // Enables the Shield plugin use(permissions) // add to the ctx object prisma and the request schema.addToContext(({ req, res }) => { return { prisma: prismaClient, request: req, } }) server.express.use( cors({ origin: [ allEnvironmentHosts.devHosts.devManagerWebHostName, allEnvironmentHosts.devHosts.devResidentWebHostName, allEnvironmentHosts.devHosts.devProviderWebHostName, allEnvironmentHosts.stagingHosts.stagingManagerWebHostName, allEnvironmentHosts.stagingHosts.stagingResidentWebHostName, allEnvironmentHosts.stagingHosts.stagingProviderWebHostName, allEnvironmentHosts.productionHosts.productionManagerWebHostName, allEnvironmentHosts.productionHosts.productionResidentWebHostName, allEnvironmentHosts.productionHosts.productionProviderWebHostName, ], }) ) applyExpressMiddlewares(server.express) applyRoutes(server.express) process .on('unhandledRejection', (reason, p) => { console.error(reason, 'Unhandled Rejection at Promise', p) }) .on('uncaughtException', (err) => { console.error(err, 'Uncaught Exception thrown') })