server.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import http from 'http'
  2. import metrics from '@overleaf/metrics'
  3. import logger from '@overleaf/logger'
  4. import express from 'express'
  5. import exegesisExpress from 'exegesis-express'
  6. import path from 'path'
  7. import { fileURLToPath } from 'url'
  8. import * as messagesController from './Features/Messages/MessageHttpController.js'
  9. const __dirname = fileURLToPath(new URL('.', import.meta.url))
  10. logger.initialize('chat')
  11. metrics.open_sockets.monitor()
  12. metrics.leaked_sockets.monitor(logger)
  13. export async function createServer() {
  14. const app = express()
  15. app.use(metrics.http.monitor(logger))
  16. metrics.injectMetricsRoute(app)
  17. // See https://github.com/exegesis-js/exegesis/blob/master/docs/Options.md
  18. const options = {
  19. controllers: { messagesController },
  20. ignoreServers: true,
  21. allowMissingControllers: false,
  22. }
  23. // const exegesisMiddleware = await exegesisExpress.middleware(
  24. const exegesisMiddleware = await exegesisExpress.middleware(
  25. path.resolve(__dirname, '../../chat.yaml'),
  26. options
  27. )
  28. // If you have any body parsers, this should go before them.
  29. app.use(exegesisMiddleware)
  30. // Return a 404
  31. app.use((req, res) => {
  32. res.status(404).json({ message: `Not found` })
  33. })
  34. // Handle any unexpected errors
  35. app.use((err, req, res, next) => {
  36. res.status(500).json({ message: `Internal error: ${err.message}` })
  37. })
  38. const server = http.createServer(app)
  39. return { app, server }
  40. }