@@ -6,17 +6,19 @@ const request = require('superagent');
6
6
const config = require ( './config' ) ;
7
7
const _ = require ( 'lodash' ) ;
8
8
9
+ let rolesCache = null ;
10
+
9
11
/**
10
12
* Get project details
11
13
*
12
14
* @param {String } projectId project id
13
15
*
14
16
* @return {Promise } promise resolved to project details
15
17
*/
16
- const getProject = ( projectId ) => {
17
- return M2m . getMachineToken ( config . AUTH0_CLIENT_ID , config . AUTH0_CLIENT_SECRET )
18
- . then ( ( token ) => {
19
- return request
18
+ const getProject = ( projectId ) => (
19
+ M2m . getMachineToken ( config . AUTH0_CLIENT_ID , config . AUTH0_CLIENT_SECRET )
20
+ . then ( ( token ) => (
21
+ request
20
22
. get ( `${ config . TC_API_V4_BASE_URL } /projects/${ projectId } ` )
21
23
. set ( 'accept' , 'application/json' )
22
24
. set ( 'authorization' , `Bearer ${ token } ` )
@@ -32,24 +34,68 @@ const getProject = (projectId) => {
32
34
`Failed to get project details of project id: ${ projectId } .` +
33
35
( errorDetails ? ' Server response: ' + errorDetails : '' )
34
36
) ;
35
- } ) ;
37
+ } )
38
+ ) )
39
+ . catch ( ( err ) => {
40
+ err . message = 'Error generating m2m token: ' + err . message ;
41
+ throw err ;
36
42
} )
43
+ ) ;
44
+
45
+ /**
46
+ * Get role id
47
+ *
48
+ * @param {String } role role
49
+ *
50
+ * @return {Promise } promise resolved to role members ids list
51
+ */
52
+ const getRoleId = ( role ) => {
53
+ if ( rolesCache ) {
54
+ const cachedRole = _ . find ( rolesCache , { roleName : role } ) ;
55
+ if ( cachedRole ) {
56
+ return Promise . resolve ( cachedRole . id ) ;
57
+ }
58
+ }
59
+ return M2m . getMachineToken ( config . AUTH0_CLIENT_ID , config . AUTH0_CLIENT_SECRET )
60
+ . then ( ( token ) => (
61
+ request
62
+ . get ( `${ config . TC_API_V3_BASE_URL } /roles` )
63
+ . set ( 'accept' , 'application/json' )
64
+ . set ( 'authorization' , `Bearer ${ token } ` )
65
+ . then ( ( res ) => {
66
+ if ( ! _ . get ( res , 'body.result.success' ) ) {
67
+ throw new Error ( 'Failed to get roles list' ) ;
68
+ }
69
+ const roles = _ . get ( res , 'body.result.content' ) ;
70
+ rolesCache = roles ;
71
+ return _ . find ( roles , { roleName : role } ) . id ;
72
+ } ) . catch ( ( err ) => {
73
+ const errorDetails = _ . get ( err , 'response.body.result.content.message' ) ;
74
+ throw new Error (
75
+ `Failed to get role id for role ${ role } .` +
76
+ ( errorDetails ? ' Server response: ' + errorDetails : '' )
77
+ ) ;
78
+ } )
79
+ ) )
37
80
. catch ( ( err ) => {
38
81
err . message = 'Error generating m2m token: ' + err . message ;
39
82
throw err ;
40
83
} ) ;
41
84
} ;
85
+
42
86
/**
43
87
* Get role members
44
88
*
45
- * @param {String } roleId role id
89
+ * @param {String } role role
46
90
*
47
91
* @return {Promise } promise resolved to role members ids list
48
92
*/
49
- const getRoleMembers = ( roleId ) => {
50
- return M2m . getMachineToken ( config . AUTH0_CLIENT_ID , config . AUTH0_CLIENT_SECRET )
51
- . then ( ( token ) => {
52
- return request
93
+ const getRoleMembers = ( role ) => (
94
+ M2m . getMachineToken ( config . AUTH0_CLIENT_ID , config . AUTH0_CLIENT_SECRET )
95
+ . then ( ( token ) => (
96
+ getRoleId ( role )
97
+ . then ( roleId => (
98
+ request
53
99
. get ( `${ config . TC_API_V3_BASE_URL } /roles/${ roleId } ?fields=subjects` )
54
100
. set ( 'accept' , 'application/json' )
55
101
. set ( 'authorization' , `Bearer ${ token } ` )
@@ -65,13 +111,14 @@ const getRoleMembers = (roleId) => {
65
111
`Failed to get role membrs of role id: ${ roleId } .` +
66
112
( errorDetails ? ' Server response: ' + errorDetails : '' )
67
113
) ;
68
- } ) ;
69
- } )
114
+ } )
115
+ ) )
116
+ ) )
70
117
. catch ( ( err ) => {
71
118
err . message = 'Error generating m2m token: ' + err . message ;
72
119
throw err ;
73
- } ) ;
74
- } ;
120
+ } )
121
+ ) ;
75
122
76
123
/**
77
124
* Get users details by ids
@@ -88,8 +135,9 @@ const getUsersById = (ids) => {
88
135
throw err ;
89
136
} )
90
137
. then ( ( token ) => {
138
+ const fields = 'fields=userId,email,handle,firstName,lastName,photoURL,status' ;
91
139
return request
92
- . get ( `${ config . TC_API_V3_BASE_URL } /members/_search?fields=userId,email,handle,firstName,lastName,photoURL,status &query=${ query } ` )
140
+ . get ( `${ config . TC_API_V3_BASE_URL } /members/_search?${ fields } &query=${ query } ` )
93
141
. set ( 'accept' , 'application/json' )
94
142
. set ( 'authorization' , `Bearer ${ token } ` )
95
143
. then ( ( res ) => {
@@ -125,8 +173,9 @@ const getUsersByHandle = (handles) => {
125
173
throw err ;
126
174
} )
127
175
. then ( ( token ) => {
176
+ const fields = 'fields=userId,handle,firstName,lastName,photoURL' ;
128
177
return request
129
- . get ( `${ config . TC_API_V3_BASE_URL } /members/_search?fields=userId,handle,firstName,lastName,photoURL &query=${ query } ` )
178
+ . get ( `${ config . TC_API_V3_BASE_URL } /members/_search?${ fields } &query=${ query } ` )
130
179
. set ( 'accept' , 'application/json' )
131
180
. set ( 'authorization' , `Bearer ${ token } ` )
132
181
. then ( ( res ) => {
@@ -154,10 +203,10 @@ const getUsersByHandle = (handles) => {
154
203
*
155
204
* @return {Promise } promise resolved to topic details
156
205
*/
157
- const getTopic = ( topicId , logger ) => {
158
- return M2m . getMachineToken ( config . AUTH0_CLIENT_ID , config . AUTH0_CLIENT_SECRET )
159
- . then ( ( token ) => {
160
- return request
206
+ const getTopic = ( topicId , logger ) => (
207
+ M2m . getMachineToken ( config . AUTH0_CLIENT_ID , config . AUTH0_CLIENT_SECRET )
208
+ . then ( ( token ) => (
209
+ request
161
210
. get ( `${ config . MESSAGE_API_BASE_URL } /topics/${ topicId } /read` )
162
211
. set ( 'accept' , 'application/json' )
163
212
. set ( 'authorization' , `Bearer ${ token } ` )
@@ -175,13 +224,13 @@ const getTopic = (topicId, logger) => {
175
224
`Failed to get topic details of topic id: ${ topicId } .` +
176
225
( errorDetails ? ' Server response: ' + errorDetails : '' )
177
226
) ;
178
- } ) ;
179
- } )
227
+ } )
228
+ ) )
180
229
. catch ( ( err ) => {
181
230
err . message = 'Error generating m2m token: ' + err . message ;
182
231
throw err ;
183
- } ) ;
184
- } ;
232
+ } )
233
+ ) ;
185
234
186
235
module . exports = {
187
236
getProject,
0 commit comments