server.js 1.4 KB

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