server.js 1.3 KB

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