/* eslint-disable handle-callback-err, standard/no-callback-literal, */ // TODO: This file was created by bulk-decaffeinate. // Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS101: Remove unnecessary use of Array.from * DS102: Remove unnecessary code created because of implicit returns * DS103: Rewrite code to no longer use __guard__ * DS205: Consider reworking code to avoid use of IIFEs * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ const app = require('../../../app') require('logger-sharelatex').logger.level('info') const logger = require('logger-sharelatex') const Settings = require('settings-sharelatex') const request = require('request') const S3_TRIES = 30 module.exports = { running: false, initing: false, callbacks: [], ensureRunning(callback) { if (callback == null) { callback = function(error) {} } if (this.running) { return callback() } else if (this.initing) { return this.callbacks.push(callback) } else { this.initing = true this.callbacks.push(callback) return app.listen( __guard__( Settings.internal != null ? Settings.internal.filestore : undefined, x => x.port ), 'localhost', error => { if (error != null) { throw error } this.running = true logger.log('filestore running in dev mode') return (() => { const result = [] for (callback of Array.from(this.callbacks)) { result.push(callback()) } return result })() } ) } }, waitForS3(callback, tries) { if ( !(Settings.filestore.s3 != null ? Settings.filestore.s3.endpoint : undefined) ) { return callback() } if (!tries) { tries = 1 } return request.get( `${Settings.filestore.s3.endpoint}/`, (err, response) => { console.log( err, response != null ? response.statusCode : undefined, tries ) if ( !err && [200, 404].includes( response != null ? response.statusCode : undefined ) ) { return callback() } if (tries === S3_TRIES) { return callback('timed out waiting for S3') } return setTimeout(() => { return this.waitForS3(callback, tries + 1) }, 1000) } ) } } function __guard__(value, transform) { return typeof value !== 'undefined' && value !== null ? transform(value) : undefined }