@@ -6,17 +6,19 @@ const request = require('superagent');
66const config = require ( './config' ) ;
77const _ = require ( 'lodash' ) ;
88
9+ let rolesCache = null ;
10+
911/**
1012 * Get project details
1113 *
1214 * @param {String } projectId project id
1315 *
1416 * @return {Promise } promise resolved to project details
1517 */
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
2022 . get ( `${ config . TC_API_V4_BASE_URL } /projects/${ projectId } ` )
2123 . set ( 'accept' , 'application/json' )
2224 . set ( 'authorization' , `Bearer ${ token } ` )
@@ -32,24 +34,68 @@ const getProject = (projectId) => {
3234 `Failed to get project details of project id: ${ projectId } .` +
3335 ( errorDetails ? ' Server response: ' + errorDetails : '' )
3436 ) ;
35- } ) ;
37+ } )
38+ ) )
39+ . catch ( ( err ) => {
40+ err . message = 'Error generating m2m token: ' + err . message ;
41+ throw err ;
3642 } )
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+ ) )
3780 . catch ( ( err ) => {
3881 err . message = 'Error generating m2m token: ' + err . message ;
3982 throw err ;
4083 } ) ;
4184} ;
85+
4286/**
4387 * Get role members
4488 *
45- * @param {String } roleId role id
89+ * @param {String } role role
4690 *
4791 * @return {Promise } promise resolved to role members ids list
4892 */
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
5399 . get ( `${ config . TC_API_V3_BASE_URL } /roles/${ roleId } ?fields=subjects` )
54100 . set ( 'accept' , 'application/json' )
55101 . set ( 'authorization' , `Bearer ${ token } ` )
@@ -65,13 +111,14 @@ const getRoleMembers = (roleId) => {
65111 `Failed to get role membrs of role id: ${ roleId } .` +
66112 ( errorDetails ? ' Server response: ' + errorDetails : '' )
67113 ) ;
68- } ) ;
69- } )
114+ } )
115+ ) )
116+ ) )
70117 . catch ( ( err ) => {
71118 err . message = 'Error generating m2m token: ' + err . message ;
72119 throw err ;
73- } ) ;
74- } ;
120+ } )
121+ ) ;
75122
76123/**
77124 * Get users details by ids
@@ -88,8 +135,9 @@ const getUsersById = (ids) => {
88135 throw err ;
89136 } )
90137 . then ( ( token ) => {
138+ const fields = 'fields=userId,email,handle,firstName,lastName,photoURL,status' ;
91139 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 } ` )
93141 . set ( 'accept' , 'application/json' )
94142 . set ( 'authorization' , `Bearer ${ token } ` )
95143 . then ( ( res ) => {
@@ -125,8 +173,9 @@ const getUsersByHandle = (handles) => {
125173 throw err ;
126174 } )
127175 . then ( ( token ) => {
176+ const fields = 'fields=userId,handle,firstName,lastName,photoURL' ;
128177 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 } ` )
130179 . set ( 'accept' , 'application/json' )
131180 . set ( 'authorization' , `Bearer ${ token } ` )
132181 . then ( ( res ) => {
@@ -154,10 +203,10 @@ const getUsersByHandle = (handles) => {
154203 *
155204 * @return {Promise } promise resolved to topic details
156205 */
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
161210 . get ( `${ config . MESSAGE_API_BASE_URL } /topics/${ topicId } /read` )
162211 . set ( 'accept' , 'application/json' )
163212 . set ( 'authorization' , `Bearer ${ token } ` )
@@ -175,13 +224,13 @@ const getTopic = (topicId, logger) => {
175224 `Failed to get topic details of topic id: ${ topicId } .` +
176225 ( errorDetails ? ' Server response: ' + errorDetails : '' )
177226 ) ;
178- } ) ;
179- } )
227+ } )
228+ ) )
180229 . catch ( ( err ) => {
181230 err . message = 'Error generating m2m token: ' + err . message ;
182231 throw err ;
183- } ) ;
184- } ;
232+ } )
233+ ) ;
185234
186235module . exports = {
187236 getProject,
0 commit comments