DocstoreManager.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. const request = require('request')
  2. const logger = require('@overleaf/logger')
  3. const Settings = require('@overleaf/settings')
  4. const Errors = require('./Errors')
  5. function peekDocument(projectId, docId, callback) {
  6. const url = `${Settings.apis.docstore.url}/project/${projectId}/doc/${docId}/peek`
  7. logger.debug({ projectId, docId }, 'getting doc from docstore')
  8. request.get(url, function (error, res, body) {
  9. if (error != null) {
  10. return callback(error)
  11. }
  12. if (res.statusCode >= 200 && res.statusCode < 300) {
  13. try {
  14. body = JSON.parse(body)
  15. } catch (error) {
  16. return callback(error)
  17. }
  18. logger.debug(
  19. { projectId, docId, version: body.version },
  20. 'got doc from docstore'
  21. )
  22. return callback(null, body.lines.join('\n'), body.version)
  23. } else if (res.statusCode === 404) {
  24. return callback(
  25. new Errors.NotFoundError('doc not found', { projectId, docId })
  26. )
  27. } else {
  28. return callback(
  29. new Error(
  30. `docstore returned a non-success status code: ${res.statusCode}`
  31. )
  32. )
  33. }
  34. })
  35. }
  36. module.exports = {
  37. promises: {
  38. peekDocument: (projectId, docId) => {
  39. return new Promise((resolve, reject) => {
  40. peekDocument(projectId, docId, (err, content, version) => {
  41. if (err) {
  42. reject(err)
  43. } else {
  44. resolve([content, version])
  45. }
  46. })
  47. })
  48. },
  49. },
  50. }