ChatApiHandler.coffee 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. request = require("request")
  2. settings = require("settings-sharelatex")
  3. logger = require("logger-sharelatex")
  4. module.exports = ChatApiHandler =
  5. _apiRequest: (opts, callback = (error, data) ->) ->
  6. request opts, (error, response, data) ->
  7. return callback(error) if error?
  8. if 200 <= response.statusCode < 300
  9. return callback null, data
  10. else
  11. error = new Error("chat api returned non-success code: #{response.statusCode}")
  12. error.statusCode = response.statusCode
  13. logger.error {err: error, opts}, "error sending request to chat api"
  14. return callback error
  15. sendGlobalMessage: (project_id, user_id, content, callback)->
  16. ChatApiHandler._apiRequest {
  17. url: "#{settings.apis.chat.internal_url}/project/#{project_id}/messages"
  18. method: "POST"
  19. json: {user_id, content}
  20. }, callback
  21. getGlobalMessages: (project_id, limit, before, callback)->
  22. qs = {}
  23. qs.limit = limit if limit?
  24. qs.before = before if before?
  25. ChatApiHandler._apiRequest {
  26. url: "#{settings.apis.chat.internal_url}/project/#{project_id}/messages"
  27. method: "GET"
  28. qs: qs
  29. json: true
  30. }, callback
  31. sendComment: (project_id, thread_id, user_id, content, callback = (error) ->) ->
  32. ChatApiHandler._apiRequest {
  33. url: "#{settings.apis.chat.internal_url}/project/#{project_id}/thread/#{thread_id}/messages"
  34. method: "POST"
  35. json: {user_id, content}
  36. }, callback
  37. getThreads: (project_id, callback = (error) ->) ->
  38. ChatApiHandler._apiRequest {
  39. url: "#{settings.apis.chat.internal_url}/project/#{project_id}/threads"
  40. method: "GET"
  41. json: true
  42. }, callback
  43. resolveThread: (project_id, thread_id, user_id, callback = (error) ->) ->
  44. ChatApiHandler._apiRequest {
  45. url: "#{settings.apis.chat.internal_url}/project/#{project_id}/thread/#{thread_id}/resolve"
  46. method: "POST"
  47. json: {user_id}
  48. }, callback
  49. reopenThread: (project_id, thread_id, callback = (error) ->) ->
  50. ChatApiHandler._apiRequest {
  51. url: "#{settings.apis.chat.internal_url}/project/#{project_id}/thread/#{thread_id}/reopen"
  52. method: "POST"
  53. }, callback
  54. deleteThread: (project_id, thread_id, callback = (error) ->) ->
  55. ChatApiHandler._apiRequest {
  56. url: "#{settings.apis.chat.internal_url}/project/#{project_id}/thread/#{thread_id}"
  57. method: "DELETE"
  58. }, callback
  59. editMessage: (project_id, thread_id, message_id, content, callback = (error) ->) ->
  60. ChatApiHandler._apiRequest {
  61. url: "#{settings.apis.chat.internal_url}/project/#{project_id}/thread/#{thread_id}/messages/#{message_id}/edit"
  62. method: "POST"
  63. json:
  64. content: content
  65. }, callback
  66. deleteMessage: (project_id, thread_id, message_id, callback = (error) ->) ->
  67. ChatApiHandler._apiRequest {
  68. url: "#{settings.apis.chat.internal_url}/project/#{project_id}/thread/#{thread_id}/messages/#{message_id}"
  69. method: "DELETE"
  70. }, callback