Merge branch 'hotfix/21.56.9' into master
[gitter.git] / modules / github / lib / github-issue-service.js
blob99b8d8c5e81e18bebec2edb136e9b4be6c020e06
1 'use strict';
3 var StatusError = require('statuserror');
4 var wrap = require('./github-cache-wrapper');
5 var tentacles = require('./tentacles-client');
6 var userTokenSelector = require('./user-token-selector').full;
8 function standardizeResponse(response) {
9   return {
10     id: response.id,
11     iid: response.number,
12     title: response.title,
13     body: response.body,
14     state: response.state,
15     labels: (response.labels || []).map(function(label) {
16       return label.name;
17     }),
18     author: response.user && {
19       id: response.user.id,
20       username: response.user.login,
21       //displayName: n/a,
22       avatarUrl: response.user.avatar_url
23     },
24     assignee: response.assignee && {
25       id: response.assignee.id,
26       username: response.assignee.login,
27       //displayName: n/a,
28       avatarUrl: response.assignee.avatar_url
29     },
30     createdAt: response.created_at,
31     updatedAt: response.updated_at
32   };
35 function GitHubIssueService(user) {
36   this.user = user;
37   this.accessToken = userTokenSelector(user);
40 GitHubIssueService.prototype.getIssue = function(repo, issueNumber) {
41   return tentacles.issue
42     .get(repo, issueNumber, { accessToken: this.accessToken })
43     .then(response => {
44       if (response) {
45         return standardizeResponse(response);
46       }
48       throw new StatusError(404, `Unable to fetch GitHub issue ${repo}#${issueNumber}`);
49     });
52 module.exports = wrap(GitHubIssueService, function() {
53   return [this.accessToken || ''];
54 });