import { readFileSync } from "fs"; import { ApolloServer } from "@apollo/server"; import { startStandaloneServer } from "@apollo/server/standalone"; import { MergedResolvers } from "./MergedResolvers"; import { ServerContext } from "./ServerContext"; import { UnoptimizedInMemoryRepository } from "./repositories/UnoptimizedInMemoryRepository"; import { TimedApiBasedRepositoryLoader } from "./loaders/TimedApiBasedRepositoryLoader"; import { NotificationService } from "./services/NotificationService"; import { configDotenv } from "dotenv"; import { loadTestData } from "./loaders/loadTestData"; configDotenv(); const typeDefs = readFileSync("./schema.graphqls", "utf8"); async function main() { const server = new ApolloServer({ typeDefs, resolvers: MergedResolvers, introspection: process.env.NODE_ENV !== "production", }); const repository = new UnoptimizedInMemoryRepository(); if (process.argv.length > 2 && process.argv[2] == "mocks") { await loadTestData(repository); } else { const repositoryDataUpdater = new TimedApiBasedRepositoryLoader( repository ); await repositoryDataUpdater.start(); } const notificationService = new NotificationService(repository); notificationService.reloadAPNsTokenIfTimePassed(); const { url } = await startStandaloneServer(server, { listen: { port: process.env.PORT ? parseInt(process.env.PORT) : 4000, }, context: async ({ req, res }) => { return { repository, notificationService, } }, }); console.log(`Server ready at: ${url}`); } main();