FilestoreApp.js 998 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import ObjectPersistor from '@overleaf/object-persistor'
  2. import Settings from '@overleaf/settings'
  3. import { promisify } from 'node:util'
  4. import App from '../../../app.js'
  5. import FileHandler from '../../../app/js/FileHandler.js'
  6. class FilestoreApp {
  7. async runServer() {
  8. if (!this.server) {
  9. await new Promise((resolve, reject) => {
  10. this.server = App.listen(
  11. Settings.internal.filestore.port,
  12. '127.0.0.1',
  13. err => {
  14. if (err) {
  15. return reject(err)
  16. }
  17. resolve()
  18. }
  19. )
  20. })
  21. }
  22. this.persistor = ObjectPersistor({
  23. ...Settings.filestore,
  24. paths: Settings.path,
  25. })
  26. FileHandler._TESTONLYSwapPersistorManager(this.persistor)
  27. }
  28. async stop() {
  29. if (!this.server) return
  30. const closeServer = promisify(this.server.close).bind(this.server)
  31. try {
  32. await closeServer()
  33. } finally {
  34. delete this.server
  35. }
  36. }
  37. }
  38. export default FilestoreApp