FilestoreApp.js 1019 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. const ObjectPersistor = require('@overleaf/object-persistor')
  2. const Settings = require('@overleaf/settings')
  3. const { promisify } = require('node:util')
  4. const App = require('../../../app')
  5. const FileHandler = require('../../../app/js/FileHandler')
  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. module.exports = FilestoreApp