server.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. metrics.initialize('chat')
  11. logger.initialize('chat')
  12. export async function createServer() {
  13. const app = express()
  14. app.use(metrics.http.monitor(logger))
  15. metrics.injectMetricsRoute(app)
  16. // See https://github.com/exegesis-js/exegesis/blob/master/docs/Options.md
  17. const options = {
  18. controllers: { messagesController },
  19. ignoreServers: true,
  20. allowMissingControllers: false,
  21. }
  22. // const exegesisMiddleware = await exegesisExpress.middleware(
  23. const exegesisMiddleware = await exegesisExpress.middleware(
  24. path.resolve(__dirname, '../../chat.yaml'),
  25. options
  26. )
  27. // If you have any body parsers, this should go before them.
  28. app.use(exegesisMiddleware)
  29. // Return a 404
  30. app.use((req, res) => {
  31. res.status(404).json({ message: `Not found` })
  32. })
  33. // Handle any unexpected errors
  34. app.use((err, req, res, next) => {
  35. res.status(500).json({ message: `Internal error: ${err.message}` })
  36. })
  37. const server = http.createServer(app)
  38. return { app, server }
  39. }