DocumentUpdaterManager.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /* eslint-disable
  2. camelcase,
  3. no-unused-vars,
  4. */
  5. // TODO: This file was created by bulk-decaffeinate.
  6. // Fix any style issues and re-enable lint.
  7. /*
  8. * decaffeinate suggestions:
  9. * DS102: Remove unnecessary code created because of implicit returns
  10. * DS207: Consider shorter variations of null checks
  11. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  12. */
  13. let DocumentUpdaterManager
  14. const request = require('request')
  15. const logger = require('@overleaf/logger')
  16. const Settings = require('@overleaf/settings')
  17. const Errors = require('./Errors')
  18. module.exports = DocumentUpdaterManager = {
  19. _requestDocument(project_id, doc_id, url, callback) {
  20. if (callback == null) {
  21. callback = function () {}
  22. }
  23. logger.debug({ project_id, doc_id }, 'getting doc from document updater')
  24. return request.get(url, function (error, res, body) {
  25. if (error != null) {
  26. return callback(error)
  27. }
  28. if (res.statusCode >= 200 && res.statusCode < 300) {
  29. try {
  30. body = JSON.parse(body)
  31. } catch (error1) {
  32. error = error1
  33. return callback(error)
  34. }
  35. logger.debug(
  36. { project_id, doc_id, version: body.version },
  37. 'got doc from document updater'
  38. )
  39. return callback(null, body.lines.join('\n'), body.version)
  40. } else {
  41. error = new Error(
  42. `doc updater returned a non-success status code: ${res.statusCode}`
  43. )
  44. logger.error(
  45. { err: error, project_id, doc_id, url },
  46. 'error accessing doc updater'
  47. )
  48. if (res.statusCode === 404) {
  49. return callback(
  50. new Errors.NotFoundError('doc not found', {
  51. projectId: project_id,
  52. docId: doc_id,
  53. })
  54. )
  55. } else {
  56. return callback(error)
  57. }
  58. }
  59. })
  60. },
  61. getDocument(project_id, doc_id, callback) {
  62. const url = `${Settings.apis.documentupdater.url}/project/${project_id}/doc/${doc_id}`
  63. DocumentUpdaterManager._requestDocument(project_id, doc_id, url, callback)
  64. },
  65. peekDocument(project_id, doc_id, callback) {
  66. const url = `${Settings.apis.documentupdater.url}/project/${project_id}/doc/${doc_id}/peek`
  67. DocumentUpdaterManager._requestDocument(project_id, doc_id, url, callback)
  68. },
  69. setDocument(project_id, doc_id, content, user_id, callback) {
  70. if (callback == null) {
  71. callback = function () {}
  72. }
  73. const url = `${Settings.apis.documentupdater.url}/project/${project_id}/doc/${doc_id}`
  74. logger.debug({ project_id, doc_id }, 'setting doc in document updater')
  75. return request.post(
  76. {
  77. url,
  78. json: {
  79. lines: content.split('\n'),
  80. source: 'restore',
  81. user_id,
  82. undoing: true,
  83. },
  84. },
  85. function (error, res, body) {
  86. if (error != null) {
  87. return callback(error)
  88. }
  89. if (res.statusCode >= 200 && res.statusCode < 300) {
  90. return callback(null)
  91. } else {
  92. error = new Error(
  93. `doc updater returned a non-success status code: ${res.statusCode}`
  94. )
  95. logger.error(
  96. { err: error, project_id, doc_id, url },
  97. 'error accessing doc updater'
  98. )
  99. return callback(error)
  100. }
  101. }
  102. )
  103. },
  104. }
  105. module.exports.promises = {
  106. // peekDocument returns two arguments so we can't use util.promisify, which only handles a single argument, we need
  107. // to treat this it as a special case.
  108. peekDocument: (project_id, doc_id) => {
  109. return new Promise((resolve, reject) => {
  110. DocumentUpdaterManager.peekDocument(
  111. project_id,
  112. doc_id,
  113. (err, content, version) => {
  114. if (err) {
  115. reject(err)
  116. } else {
  117. resolve([content, version])
  118. }
  119. }
  120. )
  121. })
  122. },
  123. }