DocstoreManager.js 1.5 KB

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