@frontegg/redux-store 7.92.0 → 7.93.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth/TeamState/actions/index.d.ts +3 -0
- package/auth/TeamState/actions/users.actions.d.ts +4 -1
- package/auth/TeamState/actions/users.actions.js +244 -79
- package/auth/TeamState/interfaces.d.ts +20 -0
- package/index.js +1 -1
- package/mocks/auth-mocks/teamActions.mocks.d.ts +3 -0
- package/node/auth/TeamState/actions/users.actions.js +244 -79
- package/node/index.js +1 -1
- package/package.json +2 -2
|
@@ -20,6 +20,9 @@ declare const _default: (store: FronteggState, api: RestApi, sharedActions: Shar
|
|
|
20
20
|
loadUsers: (payload: WithCallback<import("../../../interfaces").WithSilentLoad<import("@frontegg/rest-api").ILoadUsers>, import("@frontegg/rest-api").ITeamUser[]>) => Promise<void>;
|
|
21
21
|
loadUsersV2: (payload: WithCallback<import("../../../interfaces").WithRetryConfig<import("../../../interfaces").WithSilentLoad<import("../interfaces").IGetUsersV2Payload>>, import("@frontegg/rest-api").ITeamUser[]>) => Promise<void>;
|
|
22
22
|
loadUsersV3: (payload: WithCallback<import("../../../interfaces").WithRetryConfig<import("../../../interfaces").WithSilentLoad<import("../interfaces").IGetUsersV3Payload>>, import("@frontegg/rest-api").ITeamUser[]>) => Promise<void>;
|
|
23
|
+
loadUsersByGetUsersPhoneNumberV2: (payload: WithCallback<import("../../../interfaces").WithRetryConfig<import("../../../interfaces").WithSilentLoad<import("../interfaces").ILoadUsersByGetPhoneNumberV2Payload>>, import("@frontegg/rest-api").ITeamUser[]>) => Promise<void>;
|
|
24
|
+
loadUsersByGetUsernamesV1: (payload: WithCallback<import("../../../interfaces").WithRetryConfig<import("../../../interfaces").WithSilentLoad<import("../interfaces").ILoadUsersByGetUsernamesV1Payload>>, import("@frontegg/rest-api").ITeamUser[]>) => Promise<void>;
|
|
25
|
+
loadUsersByGetEmailsV1: (payload: WithCallback<import("../../../interfaces").WithRetryConfig<import("../../../interfaces").WithSilentLoad<import("../interfaces").ILoadUsersByGetEmailsV1Payload>>, import("@frontegg/rest-api").ITeamUser[]>) => Promise<void>;
|
|
23
26
|
addUser: (payload: WithCallback<import("../interfaces").AddUserPayload, import("@frontegg/rest-api").ITeamUser>) => Promise<void>;
|
|
24
27
|
addUsersBulk: (payload: WithCallback<import("../interfaces").IAddUsers, import("../interfaces").BulkInvintationData>) => Promise<void>;
|
|
25
28
|
updateUser: (payload: WithCallback<import("@frontegg/rest-api").IUpdateUser, import("@frontegg/rest-api").ITeamUser>) => Promise<void>;
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { IDeleteUser, ILoadUsers, ITeamUser, IUpdateUser, IUpdateUserExpiration } from '@frontegg/rest-api';
|
|
2
2
|
import { FronteggState, RestApi, SharedActions, WithCallback, WithRetryConfig, WithSilentLoad } from '../../../interfaces';
|
|
3
|
-
import { AddUserPayload, BulkInvintationData, IAddUsers, IGetUsersV2Payload, IGetUsersV3Payload, LoadRolesAndPermissionsPayload } from '../interfaces';
|
|
3
|
+
import { AddUserPayload, BulkInvintationData, IAddUsers, IGetUsersV2Payload, IGetUsersV3Payload, ILoadUsersByGetPhoneNumberV2Payload, ILoadUsersByGetUsernamesV1Payload, ILoadUsersByGetEmailsV1Payload, LoadRolesAndPermissionsPayload } from '../interfaces';
|
|
4
4
|
declare const _default: (store: FronteggState, api: RestApi, sharedActions: SharedActions) => {
|
|
5
5
|
loadRoles: (payload?: WithRetryConfig<LoadRolesAndPermissionsPayload>) => Promise<void>;
|
|
6
6
|
loadUsers: (payload: WithCallback<WithSilentLoad<ILoadUsers>, ITeamUser[]>) => Promise<void>;
|
|
7
7
|
loadUsersV2: (payload: WithCallback<WithRetryConfig<WithSilentLoad<IGetUsersV2Payload>>, ITeamUser[]>) => Promise<void>;
|
|
8
8
|
loadUsersV3: (payload: WithCallback<WithRetryConfig<WithSilentLoad<IGetUsersV3Payload>>, ITeamUser[]>) => Promise<void>;
|
|
9
|
+
loadUsersByGetUsersPhoneNumberV2: (payload: WithCallback<WithRetryConfig<WithSilentLoad<ILoadUsersByGetPhoneNumberV2Payload>>, ITeamUser[]>) => Promise<void>;
|
|
10
|
+
loadUsersByGetUsernamesV1: (payload: WithCallback<WithRetryConfig<WithSilentLoad<ILoadUsersByGetUsernamesV1Payload>>, ITeamUser[]>) => Promise<void>;
|
|
11
|
+
loadUsersByGetEmailsV1: (payload: WithCallback<WithRetryConfig<WithSilentLoad<ILoadUsersByGetEmailsV1Payload>>, ITeamUser[]>) => Promise<void>;
|
|
9
12
|
addUser: (payload: WithCallback<AddUserPayload, ITeamUser>) => Promise<void>;
|
|
10
13
|
addUsersBulk: (payload: WithCallback<IAddUsers, BulkInvintationData>) => Promise<void>;
|
|
11
14
|
updateUser: (payload: WithCallback<IUpdateUser, ITeamUser>) => Promise<void>;
|
|
@@ -28,6 +28,186 @@ export default ((store, api, sharedActions) => {
|
|
|
28
28
|
return [];
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @private
|
|
34
|
+
* Enriches users with roles, groups, permissions, and application data
|
|
35
|
+
*/
|
|
36
|
+
const __enrichUsersWithRolesGroupsAndPermissions = async (users, options) => {
|
|
37
|
+
const {
|
|
38
|
+
shouldLoadRoles = true,
|
|
39
|
+
shouldLoadApps,
|
|
40
|
+
retryConfig
|
|
41
|
+
} = options;
|
|
42
|
+
|
|
43
|
+
// Get user IDs for fetching roles and groups
|
|
44
|
+
const userIds = users.map(user => user.id);
|
|
45
|
+
|
|
46
|
+
// Fetch roles, permissions, user roles, user groups, and all groups in parallel
|
|
47
|
+
const [{
|
|
48
|
+
items: userUsernames
|
|
49
|
+
}, {
|
|
50
|
+
items: roles
|
|
51
|
+
}, permissions, userRoles, userGroups, groups] = await Promise.all([userIds.length > 0 ? api.users.getUsersUsernames({
|
|
52
|
+
userIds
|
|
53
|
+
}) : {
|
|
54
|
+
items: []
|
|
55
|
+
}, api.teams.loadAvailableRoles(), api.teams.loadAvailablePermissions(), userIds.length > 0 ? api.users.getUsersRoles({
|
|
56
|
+
ids: userIds
|
|
57
|
+
}) : [], userIds.length > 0 ? api.users.getUsersGroups({
|
|
58
|
+
ids: userIds
|
|
59
|
+
}) : [], __getGroupsForUsers(retryConfig), shouldLoadRoles ? loadRoles({
|
|
60
|
+
retryConfig
|
|
61
|
+
}) : undefined]);
|
|
62
|
+
|
|
63
|
+
// Map user roles and groups to users
|
|
64
|
+
const usersWithRolesAndGroups = users.map(user => {
|
|
65
|
+
var _userUsernames$find;
|
|
66
|
+
// Find user's role IDs
|
|
67
|
+
const userRoleData = userRoles.find(ur => ur.userId === user.id);
|
|
68
|
+
const userRoleIds = (userRoleData == null ? void 0 : userRoleData.roleIds) || [];
|
|
69
|
+
const userRolesFull = roles.filter(role => userRoleIds.includes(role.id));
|
|
70
|
+
|
|
71
|
+
// Find user's group IDs
|
|
72
|
+
const userGroupData = userGroups.find(ug => ug.userId === user.id);
|
|
73
|
+
const userGroupIds = (userGroupData == null ? void 0 : userGroupData.groupIds) || [];
|
|
74
|
+
const userGroupsFull = groups.filter(g => userGroupIds.includes(g.id));
|
|
75
|
+
|
|
76
|
+
// Find user's username
|
|
77
|
+
const userUsername = userUsernames == null ? void 0 : (_userUsernames$find = userUsernames.find(username => username.userId === user.id)) == null ? void 0 : _userUsernames$find.username;
|
|
78
|
+
if (!user.name) {
|
|
79
|
+
user.name = userUsername;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
//@ts-ignore
|
|
83
|
+
return _extends({}, user, {
|
|
84
|
+
roles: userRolesFull,
|
|
85
|
+
roleIds: userRoleIds,
|
|
86
|
+
groups: userGroupsFull,
|
|
87
|
+
permissions: userRolesFull.flatMap(role => role.permissions)
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// Add application data if needed
|
|
92
|
+
const enrichedUsers = await sharedActions.mapUsersWithApplicationData({
|
|
93
|
+
shouldLoadApps,
|
|
94
|
+
users: usersWithRolesAndGroups,
|
|
95
|
+
retryConfig
|
|
96
|
+
});
|
|
97
|
+
return {
|
|
98
|
+
enrichedUsers,
|
|
99
|
+
roles,
|
|
100
|
+
permissions
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @private
|
|
106
|
+
* Sets team state with users data and invokes callback
|
|
107
|
+
*/
|
|
108
|
+
const __setUsersStateAndCallback = (enrichedUsers, roles, permissions, totalPages, totalItems, callback) => {
|
|
109
|
+
sharedActions.setTeamState({
|
|
110
|
+
users: enrichedUsers,
|
|
111
|
+
totalPages,
|
|
112
|
+
totalItems,
|
|
113
|
+
roles,
|
|
114
|
+
permissions
|
|
115
|
+
});
|
|
116
|
+
actions.setTeamLoader({
|
|
117
|
+
key: TeamStateKeys.USERS,
|
|
118
|
+
value: false
|
|
119
|
+
});
|
|
120
|
+
callback == null ? void 0 : callback(enrichedUsers);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* @private
|
|
125
|
+
* Handles errors for user loading operations
|
|
126
|
+
*/
|
|
127
|
+
const __handleUsersLoadError = (error, callback, errorMessage) => {
|
|
128
|
+
if (errorMessage) {
|
|
129
|
+
console.error(errorMessage, error);
|
|
130
|
+
}
|
|
131
|
+
actions.setTeamError({
|
|
132
|
+
key: TeamStateKeys.USERS,
|
|
133
|
+
value: errorHandler(error)
|
|
134
|
+
});
|
|
135
|
+
actions.setTeamState({
|
|
136
|
+
totalPages: 0,
|
|
137
|
+
users: []
|
|
138
|
+
});
|
|
139
|
+
actions.setTeamLoader({
|
|
140
|
+
key: TeamStateKeys.USERS,
|
|
141
|
+
value: false
|
|
142
|
+
});
|
|
143
|
+
callback == null ? void 0 : callback(null, error);
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @private
|
|
148
|
+
* Generic function to load users by search criteria (phone number, username, email)
|
|
149
|
+
*/
|
|
150
|
+
const __loadUsersBySearchCriteria = async (payload, fetchFunction, shouldLoadRoles = true, shouldLoadApps) => {
|
|
151
|
+
var _payload$_limit, _payload$_offset, _payload$shouldShowSu;
|
|
152
|
+
const {
|
|
153
|
+
silentLoading,
|
|
154
|
+
callback,
|
|
155
|
+
retryConfig
|
|
156
|
+
} = payload;
|
|
157
|
+
const teamState = store.auth.teamState;
|
|
158
|
+
const pageSize = (_payload$_limit = payload._limit) != null ? _payload$_limit : teamState.pageSize;
|
|
159
|
+
const pageOffset = (_payload$_offset = payload._offset) != null ? _payload$_offset : teamState.pageOffset;
|
|
160
|
+
const shouldIncludeSubTenants = (_payload$shouldShowSu = payload == null ? void 0 : payload.shouldShowSubTenantUsersIfReseller) != null ? _payload$shouldShowSu : teamState == null ? void 0 : teamState.shouldShowSubTenantUsersIfReseller;
|
|
161
|
+
actions.setTeamLoader({
|
|
162
|
+
key: TeamStateKeys.USERS,
|
|
163
|
+
value: !silentLoading
|
|
164
|
+
});
|
|
165
|
+
actions.setTeamState({
|
|
166
|
+
pageSize,
|
|
167
|
+
pageOffset
|
|
168
|
+
});
|
|
169
|
+
try {
|
|
170
|
+
const response = await fetchFunction(pageOffset, pageSize);
|
|
171
|
+
if (!response.items || response.items.length === 0) {
|
|
172
|
+
sharedActions.setTeamState({
|
|
173
|
+
users: [],
|
|
174
|
+
totalPages: 0,
|
|
175
|
+
totalItems: 0
|
|
176
|
+
});
|
|
177
|
+
actions.setTeamLoader({
|
|
178
|
+
key: TeamStateKeys.USERS,
|
|
179
|
+
value: false
|
|
180
|
+
});
|
|
181
|
+
callback == null ? void 0 : callback([]);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Extract user IDs
|
|
186
|
+
const userIds = response.items.map(item => item.userId);
|
|
187
|
+
|
|
188
|
+
// Fetch users by IDs (no pagination here - we already have the filtered IDs)
|
|
189
|
+
const {
|
|
190
|
+
items: users
|
|
191
|
+
} = await api.users.getUsersV3({
|
|
192
|
+
ids: userIds.join(','),
|
|
193
|
+
_includeSubTenants: shouldIncludeSubTenants
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
// Enrich users with roles, groups, permissions, and application data
|
|
197
|
+
const {
|
|
198
|
+
enrichedUsers,
|
|
199
|
+
roles,
|
|
200
|
+
permissions
|
|
201
|
+
} = await __enrichUsersWithRolesGroupsAndPermissions(users, {
|
|
202
|
+
shouldLoadRoles,
|
|
203
|
+
shouldLoadApps,
|
|
204
|
+
retryConfig
|
|
205
|
+
});
|
|
206
|
+
__setUsersStateAndCallback(enrichedUsers, roles, permissions, response._metadata.totalPages, response._metadata.totalItems, callback);
|
|
207
|
+
} catch (e) {
|
|
208
|
+
__handleUsersLoadError(e, callback, `Failed to load users by search criteria in fetch function: ${fetchFunction.name}`);
|
|
209
|
+
}
|
|
210
|
+
};
|
|
31
211
|
const loadRoles = async payload => {
|
|
32
212
|
actions.setTeamLoader({
|
|
33
213
|
key: TeamStateKeys.ROLES_AND_PERMISSIONS,
|
|
@@ -123,7 +303,7 @@ export default ((store, api, sharedActions) => {
|
|
|
123
303
|
|
|
124
304
|
/*** @deprecated loadUsersV2 is deprecated, use loadUsersV3 instead */
|
|
125
305
|
const loadUsersV2 = async payload => {
|
|
126
|
-
var _payload$pageSize2, _payload$pageOffset2, _payload$filter2, _payload$sort2, _payload$
|
|
306
|
+
var _payload$pageSize2, _payload$pageOffset2, _payload$filter2, _payload$sort2, _payload$shouldShowSu2;
|
|
127
307
|
const {
|
|
128
308
|
silentLoading,
|
|
129
309
|
callback,
|
|
@@ -136,7 +316,7 @@ export default ((store, api, sharedActions) => {
|
|
|
136
316
|
const pageOffset = (_payload$pageOffset2 = payload.pageOffset) != null ? _payload$pageOffset2 : teamState.pageOffset;
|
|
137
317
|
const filter = (_payload$filter2 = payload.filter) != null ? _payload$filter2 : teamState.filterV2;
|
|
138
318
|
const sort = (_payload$sort2 = payload.sort) != null ? _payload$sort2 : teamState.sortV2;
|
|
139
|
-
const shouldIncludeSubTenants = (_payload$
|
|
319
|
+
const shouldIncludeSubTenants = (_payload$shouldShowSu2 = payload == null ? void 0 : payload.shouldShowSubTenantUsersIfReseller) != null ? _payload$shouldShowSu2 : teamState == null ? void 0 : teamState.shouldShowSubTenantUsersIfReseller;
|
|
140
320
|
actions.setTeamLoader({
|
|
141
321
|
key: TeamStateKeys.USERS,
|
|
142
322
|
value: !silentLoading
|
|
@@ -214,7 +394,7 @@ export default ((store, api, sharedActions) => {
|
|
|
214
394
|
});
|
|
215
395
|
};
|
|
216
396
|
const loadUsersV3 = async payload => {
|
|
217
|
-
var _payload$pageSize3, _payload$pageOffset3, _payload$sort3, _payload$
|
|
397
|
+
var _payload$pageSize3, _payload$pageOffset3, _payload$sort3, _payload$shouldShowSu3;
|
|
218
398
|
const {
|
|
219
399
|
silentLoading,
|
|
220
400
|
callback,
|
|
@@ -226,7 +406,7 @@ export default ((store, api, sharedActions) => {
|
|
|
226
406
|
const pageSize = (_payload$pageSize3 = payload.pageSize) != null ? _payload$pageSize3 : teamState.pageSize;
|
|
227
407
|
const pageOffset = (_payload$pageOffset3 = payload.pageOffset) != null ? _payload$pageOffset3 : teamState.pageOffset;
|
|
228
408
|
const sort = (_payload$sort3 = payload.sort) != null ? _payload$sort3 : teamState.sortV2;
|
|
229
|
-
const shouldIncludeSubTenants = (_payload$
|
|
409
|
+
const shouldIncludeSubTenants = (_payload$shouldShowSu3 = payload == null ? void 0 : payload.shouldShowSubTenantUsersIfReseller) != null ? _payload$shouldShowSu3 : teamState == null ? void 0 : teamState.shouldShowSubTenantUsersIfReseller;
|
|
230
410
|
actions.setTeamLoader({
|
|
231
411
|
key: TeamStateKeys.USERS,
|
|
232
412
|
value: !silentLoading
|
|
@@ -253,96 +433,42 @@ export default ((store, api, sharedActions) => {
|
|
|
253
433
|
_includeSubTenants: shouldIncludeSubTenants
|
|
254
434
|
}, getIdentifierFilterForUsersV3(payload)));
|
|
255
435
|
|
|
256
|
-
//
|
|
257
|
-
const
|
|
258
|
-
|
|
259
|
-
// Fetch roles, permissions, user roles, user groups, and all groups in parallel
|
|
260
|
-
const [{
|
|
261
|
-
items: userUsernames
|
|
262
|
-
}, {
|
|
263
|
-
items: roles
|
|
264
|
-
}, permissions, userRoles, userGroups, groups] = await Promise.all([userIds.length > 0 ? api.users.getUsersUsernames({
|
|
265
|
-
userIds
|
|
266
|
-
}) : [], api.teams.loadAvailableRoles(), api.teams.loadAvailablePermissions(), userIds.length > 0 ? api.users.getUsersRoles({
|
|
267
|
-
ids: userIds
|
|
268
|
-
}) : [], userIds.length > 0 ? api.users.getUsersGroups({
|
|
269
|
-
ids: userIds
|
|
270
|
-
}) : [], __getGroupsForUsers(retryConfig), shouldLoadRoles ? loadRoles({
|
|
271
|
-
retryConfig
|
|
272
|
-
}) : undefined]);
|
|
273
|
-
|
|
274
|
-
// Map user roles and groups to users
|
|
275
|
-
const usersWithRolesAndGroups = users.map(user => {
|
|
276
|
-
var _userUsernames$find;
|
|
277
|
-
// Find user's role IDs
|
|
278
|
-
const userRoleData = userRoles.find(ur => ur.userId === user.id);
|
|
279
|
-
const userRoleIds = (userRoleData == null ? void 0 : userRoleData.roleIds) || [];
|
|
280
|
-
const userRolesFull = roles.filter(role => userRoleIds.includes(role.id));
|
|
281
|
-
|
|
282
|
-
// Find user's group IDs
|
|
283
|
-
const userGroupData = userGroups.find(ug => ug.userId === user.id);
|
|
284
|
-
const userGroupIds = (userGroupData == null ? void 0 : userGroupData.groupIds) || [];
|
|
285
|
-
const userGroupsFull = groups.filter(g => userGroupIds.includes(g.id));
|
|
286
|
-
|
|
287
|
-
// Find user's username
|
|
288
|
-
const userUsername = userUsernames == null ? void 0 : (_userUsernames$find = userUsernames.find(username => username.userId === user.id)) == null ? void 0 : _userUsernames$find.username;
|
|
289
|
-
if (!user.name) {
|
|
290
|
-
user.name = userUsername;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
//@ts-ignore
|
|
294
|
-
return _extends({}, user, {
|
|
295
|
-
roles: userRolesFull,
|
|
296
|
-
roleIds: userRoleIds,
|
|
297
|
-
groups: userGroupsFull,
|
|
298
|
-
permissions: userRolesFull.flatMap(role => role.permissions)
|
|
299
|
-
});
|
|
300
|
-
});
|
|
301
|
-
const mappedUsers = await sharedActions.mapUsersWithApplicationData({
|
|
302
|
-
shouldLoadApps,
|
|
303
|
-
users: usersWithRolesAndGroups,
|
|
304
|
-
retryConfig
|
|
305
|
-
});
|
|
306
|
-
sharedActions.setTeamState({
|
|
307
|
-
users: mappedUsers,
|
|
308
|
-
totalPages,
|
|
309
|
-
totalItems,
|
|
436
|
+
// Enrich users with roles, groups, permissions, and application data
|
|
437
|
+
const {
|
|
438
|
+
enrichedUsers,
|
|
310
439
|
roles,
|
|
311
440
|
permissions
|
|
441
|
+
} = await __enrichUsersWithRolesGroupsAndPermissions(users, {
|
|
442
|
+
shouldLoadRoles,
|
|
443
|
+
shouldLoadApps,
|
|
444
|
+
retryConfig
|
|
312
445
|
});
|
|
313
|
-
|
|
446
|
+
__setUsersStateAndCallback(enrichedUsers, roles, permissions, totalPages, totalItems, callback);
|
|
314
447
|
} catch (e) {
|
|
315
|
-
|
|
316
|
-
actions.setTeamError({
|
|
317
|
-
key: TeamStateKeys.USERS,
|
|
318
|
-
value: errorHandler(e)
|
|
319
|
-
});
|
|
320
|
-
actions.setTeamState({
|
|
321
|
-
totalPages: 0,
|
|
322
|
-
users: []
|
|
323
|
-
});
|
|
324
|
-
callback == null ? void 0 : callback(null, e);
|
|
448
|
+
__handleUsersLoadError(e, callback, 'Failed to load users v3');
|
|
325
449
|
}
|
|
326
|
-
actions.setTeamLoader({
|
|
327
|
-
key: TeamStateKeys.USERS,
|
|
328
|
-
value: false
|
|
329
|
-
});
|
|
330
450
|
};
|
|
331
451
|
const getIdentifierFilterForUsersV3 = payload => {
|
|
332
452
|
const {
|
|
333
453
|
identifier,
|
|
334
454
|
identifierType,
|
|
335
|
-
email
|
|
455
|
+
email,
|
|
456
|
+
namePrefix
|
|
336
457
|
} = payload;
|
|
337
|
-
if (
|
|
458
|
+
if (email != null && email.length) {
|
|
338
459
|
return {
|
|
339
|
-
|
|
340
|
-
_identifierType: 'username'
|
|
460
|
+
_email: email
|
|
341
461
|
};
|
|
342
462
|
}
|
|
343
|
-
if (
|
|
463
|
+
if (namePrefix != null && namePrefix.length) {
|
|
344
464
|
return {
|
|
345
|
-
|
|
465
|
+
_namePrefix: namePrefix
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
if (identifierType === 'username' && identifier != null && identifier.length) {
|
|
469
|
+
return {
|
|
470
|
+
_identifier: identifier,
|
|
471
|
+
_identifierType: 'username'
|
|
346
472
|
};
|
|
347
473
|
}
|
|
348
474
|
return {};
|
|
@@ -702,11 +828,50 @@ export default ((store, api, sharedActions) => {
|
|
|
702
828
|
});
|
|
703
829
|
}
|
|
704
830
|
};
|
|
831
|
+
const loadUsersByGetUsersPhoneNumberV2 = async payload => {
|
|
832
|
+
const {
|
|
833
|
+
_phoneNumber,
|
|
834
|
+
shouldLoadRoles = true,
|
|
835
|
+
shouldLoadApps
|
|
836
|
+
} = payload;
|
|
837
|
+
return __loadUsersBySearchCriteria(payload, (pageOffset, pageSize) => api.userPhoneNumbers.getUsersPhoneNumberV2({
|
|
838
|
+
_phoneNumber,
|
|
839
|
+
_offset: pageOffset,
|
|
840
|
+
_limit: pageSize
|
|
841
|
+
}), shouldLoadRoles, shouldLoadApps);
|
|
842
|
+
};
|
|
843
|
+
const loadUsersByGetUsernamesV1 = async payload => {
|
|
844
|
+
const {
|
|
845
|
+
_usernamePrefix,
|
|
846
|
+
shouldLoadRoles = true,
|
|
847
|
+
shouldLoadApps
|
|
848
|
+
} = payload;
|
|
849
|
+
return __loadUsersBySearchCriteria(payload, (pageOffset, pageSize) => api.usernames.getUsernamesV1({
|
|
850
|
+
_usernamePrefix,
|
|
851
|
+
_offset: pageOffset,
|
|
852
|
+
_limit: pageSize
|
|
853
|
+
}), shouldLoadRoles, shouldLoadApps);
|
|
854
|
+
};
|
|
855
|
+
const loadUsersByGetEmailsV1 = async payload => {
|
|
856
|
+
const {
|
|
857
|
+
_email,
|
|
858
|
+
shouldLoadRoles = true,
|
|
859
|
+
shouldLoadApps
|
|
860
|
+
} = payload;
|
|
861
|
+
return __loadUsersBySearchCriteria(payload, (pageOffset, pageSize) => api.usersEmails.getUsersEmailsV1({
|
|
862
|
+
_email,
|
|
863
|
+
_offset: pageOffset,
|
|
864
|
+
_limit: pageSize
|
|
865
|
+
}), shouldLoadRoles, shouldLoadApps);
|
|
866
|
+
};
|
|
705
867
|
return {
|
|
706
868
|
loadRoles,
|
|
707
869
|
loadUsers,
|
|
708
870
|
loadUsersV2,
|
|
709
871
|
loadUsersV3,
|
|
872
|
+
loadUsersByGetUsersPhoneNumberV2,
|
|
873
|
+
loadUsersByGetUsernamesV1,
|
|
874
|
+
loadUsersByGetEmailsV1,
|
|
710
875
|
addUser,
|
|
711
876
|
addUsersBulk,
|
|
712
877
|
updateUser,
|
|
@@ -117,6 +117,7 @@ export interface IGetUsersV3Payload {
|
|
|
117
117
|
pageSize?: ISearchUserQueryParamsV3['_limit'];
|
|
118
118
|
pageOffset?: ISearchUserQueryParamsV3['_offset'];
|
|
119
119
|
email?: ISearchUserQueryParamsV3['_email'];
|
|
120
|
+
namePrefix?: ISearchUserQueryParamsV3['_namePrefix'];
|
|
120
121
|
sort?: ISearchUserQueryParamsV3['_sortBy'];
|
|
121
122
|
order?: ISearchUserQueryParamsV3['_order'];
|
|
122
123
|
shouldShowSubTenantUsersIfReseller?: ISearchUserQueryParamsV3['_includeSubTenants'];
|
|
@@ -125,6 +126,25 @@ export interface IGetUsersV3Payload {
|
|
|
125
126
|
identifier?: ISearchUserQueryParamsV3['_identifier'];
|
|
126
127
|
identifierType?: ISearchUserQueryParamsV3['_identifierType'];
|
|
127
128
|
}
|
|
129
|
+
export interface IBaseUserSearchPayload {
|
|
130
|
+
_limit?: number;
|
|
131
|
+
_offset?: number;
|
|
132
|
+
shouldLoadApps?: boolean;
|
|
133
|
+
shouldLoadRoles?: boolean;
|
|
134
|
+
shouldShowSubTenantUsersIfReseller?: boolean;
|
|
135
|
+
}
|
|
136
|
+
export interface ILoadUsersByGetPhoneNumberV2Payload extends IBaseUserSearchPayload {
|
|
137
|
+
_phoneNumber: string;
|
|
138
|
+
}
|
|
139
|
+
export interface ILoadUsersByGetUsernamesV1Payload extends IBaseUserSearchPayload {
|
|
140
|
+
_usernamePrefix: string;
|
|
141
|
+
}
|
|
142
|
+
export interface ILoadUsersByGetEmailsV1Payload extends IBaseUserSearchPayload {
|
|
143
|
+
_email: string;
|
|
144
|
+
}
|
|
145
|
+
export interface ISearchUsersByAnyFieldPayload extends Partial<IGetUsersV3Payload> {
|
|
146
|
+
callback?: (users: ITeamUser[] | null, error?: any) => void;
|
|
147
|
+
}
|
|
128
148
|
export interface IUserV3 extends IUsersV3Data {
|
|
129
149
|
roles?: IRole[];
|
|
130
150
|
}
|
package/index.js
CHANGED
|
@@ -20,6 +20,9 @@ declare const _default: (store: FronteggState, api: RestApi, actions: SharedActi
|
|
|
20
20
|
loadUsers: (payload: WithCallback<WithSilentLoad<import("@frontegg/rest-api").ILoadUsers>, ITeamUser[]>) => Promise<void>;
|
|
21
21
|
loadUsersV2: (payload: WithCallback<import("../../interfaces").WithRetryConfig<WithSilentLoad<IGetUsersV2Payload>>, ITeamUser[]>) => Promise<void>;
|
|
22
22
|
loadUsersV3: (payload: WithCallback<import("../../interfaces").WithRetryConfig<WithSilentLoad<import("../../auth").IGetUsersV3Payload>>, ITeamUser[]>) => Promise<void>;
|
|
23
|
+
loadUsersByGetUsersPhoneNumberV2: (payload: WithCallback<import("../../interfaces").WithRetryConfig<WithSilentLoad<import("../../auth").ILoadUsersByGetPhoneNumberV2Payload>>, ITeamUser[]>) => Promise<void>;
|
|
24
|
+
loadUsersByGetUsernamesV1: (payload: WithCallback<import("../../interfaces").WithRetryConfig<WithSilentLoad<import("../../auth").ILoadUsersByGetUsernamesV1Payload>>, ITeamUser[]>) => Promise<void>;
|
|
25
|
+
loadUsersByGetEmailsV1: (payload: WithCallback<import("../../interfaces").WithRetryConfig<WithSilentLoad<import("../../auth").ILoadUsersByGetEmailsV1Payload>>, ITeamUser[]>) => Promise<void>;
|
|
23
26
|
addUser: (payload: WithCallback<import("../../auth").AddUserPayload, ITeamUser>) => Promise<void>;
|
|
24
27
|
addUsersBulk: (payload: WithCallback<import("../../auth").IAddUsers, import("../../auth").BulkInvintationData>) => Promise<void>;
|
|
25
28
|
updateUser: (payload: WithCallback<IUpdateUser, ITeamUser>) => Promise<void>;
|
|
@@ -35,6 +35,186 @@ var _default = (store, api, sharedActions) => {
|
|
|
35
35
|
return [];
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @private
|
|
41
|
+
* Enriches users with roles, groups, permissions, and application data
|
|
42
|
+
*/
|
|
43
|
+
const __enrichUsersWithRolesGroupsAndPermissions = async (users, options) => {
|
|
44
|
+
const {
|
|
45
|
+
shouldLoadRoles = true,
|
|
46
|
+
shouldLoadApps,
|
|
47
|
+
retryConfig
|
|
48
|
+
} = options;
|
|
49
|
+
|
|
50
|
+
// Get user IDs for fetching roles and groups
|
|
51
|
+
const userIds = users.map(user => user.id);
|
|
52
|
+
|
|
53
|
+
// Fetch roles, permissions, user roles, user groups, and all groups in parallel
|
|
54
|
+
const [{
|
|
55
|
+
items: userUsernames
|
|
56
|
+
}, {
|
|
57
|
+
items: roles
|
|
58
|
+
}, permissions, userRoles, userGroups, groups] = await Promise.all([userIds.length > 0 ? api.users.getUsersUsernames({
|
|
59
|
+
userIds
|
|
60
|
+
}) : {
|
|
61
|
+
items: []
|
|
62
|
+
}, api.teams.loadAvailableRoles(), api.teams.loadAvailablePermissions(), userIds.length > 0 ? api.users.getUsersRoles({
|
|
63
|
+
ids: userIds
|
|
64
|
+
}) : [], userIds.length > 0 ? api.users.getUsersGroups({
|
|
65
|
+
ids: userIds
|
|
66
|
+
}) : [], __getGroupsForUsers(retryConfig), shouldLoadRoles ? loadRoles({
|
|
67
|
+
retryConfig
|
|
68
|
+
}) : undefined]);
|
|
69
|
+
|
|
70
|
+
// Map user roles and groups to users
|
|
71
|
+
const usersWithRolesAndGroups = users.map(user => {
|
|
72
|
+
var _userUsernames$find;
|
|
73
|
+
// Find user's role IDs
|
|
74
|
+
const userRoleData = userRoles.find(ur => ur.userId === user.id);
|
|
75
|
+
const userRoleIds = (userRoleData == null ? void 0 : userRoleData.roleIds) || [];
|
|
76
|
+
const userRolesFull = roles.filter(role => userRoleIds.includes(role.id));
|
|
77
|
+
|
|
78
|
+
// Find user's group IDs
|
|
79
|
+
const userGroupData = userGroups.find(ug => ug.userId === user.id);
|
|
80
|
+
const userGroupIds = (userGroupData == null ? void 0 : userGroupData.groupIds) || [];
|
|
81
|
+
const userGroupsFull = groups.filter(g => userGroupIds.includes(g.id));
|
|
82
|
+
|
|
83
|
+
// Find user's username
|
|
84
|
+
const userUsername = userUsernames == null ? void 0 : (_userUsernames$find = userUsernames.find(username => username.userId === user.id)) == null ? void 0 : _userUsernames$find.username;
|
|
85
|
+
if (!user.name) {
|
|
86
|
+
user.name = userUsername;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
//@ts-ignore
|
|
90
|
+
return (0, _extends2.default)({}, user, {
|
|
91
|
+
roles: userRolesFull,
|
|
92
|
+
roleIds: userRoleIds,
|
|
93
|
+
groups: userGroupsFull,
|
|
94
|
+
permissions: userRolesFull.flatMap(role => role.permissions)
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// Add application data if needed
|
|
99
|
+
const enrichedUsers = await sharedActions.mapUsersWithApplicationData({
|
|
100
|
+
shouldLoadApps,
|
|
101
|
+
users: usersWithRolesAndGroups,
|
|
102
|
+
retryConfig
|
|
103
|
+
});
|
|
104
|
+
return {
|
|
105
|
+
enrichedUsers,
|
|
106
|
+
roles,
|
|
107
|
+
permissions
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* @private
|
|
113
|
+
* Sets team state with users data and invokes callback
|
|
114
|
+
*/
|
|
115
|
+
const __setUsersStateAndCallback = (enrichedUsers, roles, permissions, totalPages, totalItems, callback) => {
|
|
116
|
+
sharedActions.setTeamState({
|
|
117
|
+
users: enrichedUsers,
|
|
118
|
+
totalPages,
|
|
119
|
+
totalItems,
|
|
120
|
+
roles,
|
|
121
|
+
permissions
|
|
122
|
+
});
|
|
123
|
+
actions.setTeamLoader({
|
|
124
|
+
key: _interfaces.TeamStateKeys.USERS,
|
|
125
|
+
value: false
|
|
126
|
+
});
|
|
127
|
+
callback == null ? void 0 : callback(enrichedUsers);
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* @private
|
|
132
|
+
* Handles errors for user loading operations
|
|
133
|
+
*/
|
|
134
|
+
const __handleUsersLoadError = (error, callback, errorMessage) => {
|
|
135
|
+
if (errorMessage) {
|
|
136
|
+
console.error(errorMessage, error);
|
|
137
|
+
}
|
|
138
|
+
actions.setTeamError({
|
|
139
|
+
key: _interfaces.TeamStateKeys.USERS,
|
|
140
|
+
value: (0, _helpers.errorHandler)(error)
|
|
141
|
+
});
|
|
142
|
+
actions.setTeamState({
|
|
143
|
+
totalPages: 0,
|
|
144
|
+
users: []
|
|
145
|
+
});
|
|
146
|
+
actions.setTeamLoader({
|
|
147
|
+
key: _interfaces.TeamStateKeys.USERS,
|
|
148
|
+
value: false
|
|
149
|
+
});
|
|
150
|
+
callback == null ? void 0 : callback(null, error);
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @private
|
|
155
|
+
* Generic function to load users by search criteria (phone number, username, email)
|
|
156
|
+
*/
|
|
157
|
+
const __loadUsersBySearchCriteria = async (payload, fetchFunction, shouldLoadRoles = true, shouldLoadApps) => {
|
|
158
|
+
var _payload$_limit, _payload$_offset, _payload$shouldShowSu;
|
|
159
|
+
const {
|
|
160
|
+
silentLoading,
|
|
161
|
+
callback,
|
|
162
|
+
retryConfig
|
|
163
|
+
} = payload;
|
|
164
|
+
const teamState = store.auth.teamState;
|
|
165
|
+
const pageSize = (_payload$_limit = payload._limit) != null ? _payload$_limit : teamState.pageSize;
|
|
166
|
+
const pageOffset = (_payload$_offset = payload._offset) != null ? _payload$_offset : teamState.pageOffset;
|
|
167
|
+
const shouldIncludeSubTenants = (_payload$shouldShowSu = payload == null ? void 0 : payload.shouldShowSubTenantUsersIfReseller) != null ? _payload$shouldShowSu : teamState == null ? void 0 : teamState.shouldShowSubTenantUsersIfReseller;
|
|
168
|
+
actions.setTeamLoader({
|
|
169
|
+
key: _interfaces.TeamStateKeys.USERS,
|
|
170
|
+
value: !silentLoading
|
|
171
|
+
});
|
|
172
|
+
actions.setTeamState({
|
|
173
|
+
pageSize,
|
|
174
|
+
pageOffset
|
|
175
|
+
});
|
|
176
|
+
try {
|
|
177
|
+
const response = await fetchFunction(pageOffset, pageSize);
|
|
178
|
+
if (!response.items || response.items.length === 0) {
|
|
179
|
+
sharedActions.setTeamState({
|
|
180
|
+
users: [],
|
|
181
|
+
totalPages: 0,
|
|
182
|
+
totalItems: 0
|
|
183
|
+
});
|
|
184
|
+
actions.setTeamLoader({
|
|
185
|
+
key: _interfaces.TeamStateKeys.USERS,
|
|
186
|
+
value: false
|
|
187
|
+
});
|
|
188
|
+
callback == null ? void 0 : callback([]);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Extract user IDs
|
|
193
|
+
const userIds = response.items.map(item => item.userId);
|
|
194
|
+
|
|
195
|
+
// Fetch users by IDs (no pagination here - we already have the filtered IDs)
|
|
196
|
+
const {
|
|
197
|
+
items: users
|
|
198
|
+
} = await api.users.getUsersV3({
|
|
199
|
+
ids: userIds.join(','),
|
|
200
|
+
_includeSubTenants: shouldIncludeSubTenants
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
// Enrich users with roles, groups, permissions, and application data
|
|
204
|
+
const {
|
|
205
|
+
enrichedUsers,
|
|
206
|
+
roles,
|
|
207
|
+
permissions
|
|
208
|
+
} = await __enrichUsersWithRolesGroupsAndPermissions(users, {
|
|
209
|
+
shouldLoadRoles,
|
|
210
|
+
shouldLoadApps,
|
|
211
|
+
retryConfig
|
|
212
|
+
});
|
|
213
|
+
__setUsersStateAndCallback(enrichedUsers, roles, permissions, response._metadata.totalPages, response._metadata.totalItems, callback);
|
|
214
|
+
} catch (e) {
|
|
215
|
+
__handleUsersLoadError(e, callback, `Failed to load users by search criteria in fetch function: ${fetchFunction.name}`);
|
|
216
|
+
}
|
|
217
|
+
};
|
|
38
218
|
const loadRoles = async payload => {
|
|
39
219
|
actions.setTeamLoader({
|
|
40
220
|
key: _interfaces.TeamStateKeys.ROLES_AND_PERMISSIONS,
|
|
@@ -130,7 +310,7 @@ var _default = (store, api, sharedActions) => {
|
|
|
130
310
|
|
|
131
311
|
/*** @deprecated loadUsersV2 is deprecated, use loadUsersV3 instead */
|
|
132
312
|
const loadUsersV2 = async payload => {
|
|
133
|
-
var _payload$pageSize2, _payload$pageOffset2, _payload$filter2, _payload$sort2, _payload$
|
|
313
|
+
var _payload$pageSize2, _payload$pageOffset2, _payload$filter2, _payload$sort2, _payload$shouldShowSu2;
|
|
134
314
|
const {
|
|
135
315
|
silentLoading,
|
|
136
316
|
callback,
|
|
@@ -143,7 +323,7 @@ var _default = (store, api, sharedActions) => {
|
|
|
143
323
|
const pageOffset = (_payload$pageOffset2 = payload.pageOffset) != null ? _payload$pageOffset2 : teamState.pageOffset;
|
|
144
324
|
const filter = (_payload$filter2 = payload.filter) != null ? _payload$filter2 : teamState.filterV2;
|
|
145
325
|
const sort = (_payload$sort2 = payload.sort) != null ? _payload$sort2 : teamState.sortV2;
|
|
146
|
-
const shouldIncludeSubTenants = (_payload$
|
|
326
|
+
const shouldIncludeSubTenants = (_payload$shouldShowSu2 = payload == null ? void 0 : payload.shouldShowSubTenantUsersIfReseller) != null ? _payload$shouldShowSu2 : teamState == null ? void 0 : teamState.shouldShowSubTenantUsersIfReseller;
|
|
147
327
|
actions.setTeamLoader({
|
|
148
328
|
key: _interfaces.TeamStateKeys.USERS,
|
|
149
329
|
value: !silentLoading
|
|
@@ -221,7 +401,7 @@ var _default = (store, api, sharedActions) => {
|
|
|
221
401
|
});
|
|
222
402
|
};
|
|
223
403
|
const loadUsersV3 = async payload => {
|
|
224
|
-
var _payload$pageSize3, _payload$pageOffset3, _payload$sort3, _payload$
|
|
404
|
+
var _payload$pageSize3, _payload$pageOffset3, _payload$sort3, _payload$shouldShowSu3;
|
|
225
405
|
const {
|
|
226
406
|
silentLoading,
|
|
227
407
|
callback,
|
|
@@ -233,7 +413,7 @@ var _default = (store, api, sharedActions) => {
|
|
|
233
413
|
const pageSize = (_payload$pageSize3 = payload.pageSize) != null ? _payload$pageSize3 : teamState.pageSize;
|
|
234
414
|
const pageOffset = (_payload$pageOffset3 = payload.pageOffset) != null ? _payload$pageOffset3 : teamState.pageOffset;
|
|
235
415
|
const sort = (_payload$sort3 = payload.sort) != null ? _payload$sort3 : teamState.sortV2;
|
|
236
|
-
const shouldIncludeSubTenants = (_payload$
|
|
416
|
+
const shouldIncludeSubTenants = (_payload$shouldShowSu3 = payload == null ? void 0 : payload.shouldShowSubTenantUsersIfReseller) != null ? _payload$shouldShowSu3 : teamState == null ? void 0 : teamState.shouldShowSubTenantUsersIfReseller;
|
|
237
417
|
actions.setTeamLoader({
|
|
238
418
|
key: _interfaces.TeamStateKeys.USERS,
|
|
239
419
|
value: !silentLoading
|
|
@@ -260,96 +440,42 @@ var _default = (store, api, sharedActions) => {
|
|
|
260
440
|
_includeSubTenants: shouldIncludeSubTenants
|
|
261
441
|
}, getIdentifierFilterForUsersV3(payload)));
|
|
262
442
|
|
|
263
|
-
//
|
|
264
|
-
const
|
|
265
|
-
|
|
266
|
-
// Fetch roles, permissions, user roles, user groups, and all groups in parallel
|
|
267
|
-
const [{
|
|
268
|
-
items: userUsernames
|
|
269
|
-
}, {
|
|
270
|
-
items: roles
|
|
271
|
-
}, permissions, userRoles, userGroups, groups] = await Promise.all([userIds.length > 0 ? api.users.getUsersUsernames({
|
|
272
|
-
userIds
|
|
273
|
-
}) : [], api.teams.loadAvailableRoles(), api.teams.loadAvailablePermissions(), userIds.length > 0 ? api.users.getUsersRoles({
|
|
274
|
-
ids: userIds
|
|
275
|
-
}) : [], userIds.length > 0 ? api.users.getUsersGroups({
|
|
276
|
-
ids: userIds
|
|
277
|
-
}) : [], __getGroupsForUsers(retryConfig), shouldLoadRoles ? loadRoles({
|
|
278
|
-
retryConfig
|
|
279
|
-
}) : undefined]);
|
|
280
|
-
|
|
281
|
-
// Map user roles and groups to users
|
|
282
|
-
const usersWithRolesAndGroups = users.map(user => {
|
|
283
|
-
var _userUsernames$find;
|
|
284
|
-
// Find user's role IDs
|
|
285
|
-
const userRoleData = userRoles.find(ur => ur.userId === user.id);
|
|
286
|
-
const userRoleIds = (userRoleData == null ? void 0 : userRoleData.roleIds) || [];
|
|
287
|
-
const userRolesFull = roles.filter(role => userRoleIds.includes(role.id));
|
|
288
|
-
|
|
289
|
-
// Find user's group IDs
|
|
290
|
-
const userGroupData = userGroups.find(ug => ug.userId === user.id);
|
|
291
|
-
const userGroupIds = (userGroupData == null ? void 0 : userGroupData.groupIds) || [];
|
|
292
|
-
const userGroupsFull = groups.filter(g => userGroupIds.includes(g.id));
|
|
293
|
-
|
|
294
|
-
// Find user's username
|
|
295
|
-
const userUsername = userUsernames == null ? void 0 : (_userUsernames$find = userUsernames.find(username => username.userId === user.id)) == null ? void 0 : _userUsernames$find.username;
|
|
296
|
-
if (!user.name) {
|
|
297
|
-
user.name = userUsername;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
//@ts-ignore
|
|
301
|
-
return (0, _extends2.default)({}, user, {
|
|
302
|
-
roles: userRolesFull,
|
|
303
|
-
roleIds: userRoleIds,
|
|
304
|
-
groups: userGroupsFull,
|
|
305
|
-
permissions: userRolesFull.flatMap(role => role.permissions)
|
|
306
|
-
});
|
|
307
|
-
});
|
|
308
|
-
const mappedUsers = await sharedActions.mapUsersWithApplicationData({
|
|
309
|
-
shouldLoadApps,
|
|
310
|
-
users: usersWithRolesAndGroups,
|
|
311
|
-
retryConfig
|
|
312
|
-
});
|
|
313
|
-
sharedActions.setTeamState({
|
|
314
|
-
users: mappedUsers,
|
|
315
|
-
totalPages,
|
|
316
|
-
totalItems,
|
|
443
|
+
// Enrich users with roles, groups, permissions, and application data
|
|
444
|
+
const {
|
|
445
|
+
enrichedUsers,
|
|
317
446
|
roles,
|
|
318
447
|
permissions
|
|
448
|
+
} = await __enrichUsersWithRolesGroupsAndPermissions(users, {
|
|
449
|
+
shouldLoadRoles,
|
|
450
|
+
shouldLoadApps,
|
|
451
|
+
retryConfig
|
|
319
452
|
});
|
|
320
|
-
|
|
453
|
+
__setUsersStateAndCallback(enrichedUsers, roles, permissions, totalPages, totalItems, callback);
|
|
321
454
|
} catch (e) {
|
|
322
|
-
|
|
323
|
-
actions.setTeamError({
|
|
324
|
-
key: _interfaces.TeamStateKeys.USERS,
|
|
325
|
-
value: (0, _helpers.errorHandler)(e)
|
|
326
|
-
});
|
|
327
|
-
actions.setTeamState({
|
|
328
|
-
totalPages: 0,
|
|
329
|
-
users: []
|
|
330
|
-
});
|
|
331
|
-
callback == null ? void 0 : callback(null, e);
|
|
455
|
+
__handleUsersLoadError(e, callback, 'Failed to load users v3');
|
|
332
456
|
}
|
|
333
|
-
actions.setTeamLoader({
|
|
334
|
-
key: _interfaces.TeamStateKeys.USERS,
|
|
335
|
-
value: false
|
|
336
|
-
});
|
|
337
457
|
};
|
|
338
458
|
const getIdentifierFilterForUsersV3 = payload => {
|
|
339
459
|
const {
|
|
340
460
|
identifier,
|
|
341
461
|
identifierType,
|
|
342
|
-
email
|
|
462
|
+
email,
|
|
463
|
+
namePrefix
|
|
343
464
|
} = payload;
|
|
344
|
-
if (
|
|
465
|
+
if (email != null && email.length) {
|
|
345
466
|
return {
|
|
346
|
-
|
|
347
|
-
_identifierType: 'username'
|
|
467
|
+
_email: email
|
|
348
468
|
};
|
|
349
469
|
}
|
|
350
|
-
if (
|
|
470
|
+
if (namePrefix != null && namePrefix.length) {
|
|
351
471
|
return {
|
|
352
|
-
|
|
472
|
+
_namePrefix: namePrefix
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
if (identifierType === 'username' && identifier != null && identifier.length) {
|
|
476
|
+
return {
|
|
477
|
+
_identifier: identifier,
|
|
478
|
+
_identifierType: 'username'
|
|
353
479
|
};
|
|
354
480
|
}
|
|
355
481
|
return {};
|
|
@@ -709,11 +835,50 @@ var _default = (store, api, sharedActions) => {
|
|
|
709
835
|
});
|
|
710
836
|
}
|
|
711
837
|
};
|
|
838
|
+
const loadUsersByGetUsersPhoneNumberV2 = async payload => {
|
|
839
|
+
const {
|
|
840
|
+
_phoneNumber,
|
|
841
|
+
shouldLoadRoles = true,
|
|
842
|
+
shouldLoadApps
|
|
843
|
+
} = payload;
|
|
844
|
+
return __loadUsersBySearchCriteria(payload, (pageOffset, pageSize) => api.userPhoneNumbers.getUsersPhoneNumberV2({
|
|
845
|
+
_phoneNumber,
|
|
846
|
+
_offset: pageOffset,
|
|
847
|
+
_limit: pageSize
|
|
848
|
+
}), shouldLoadRoles, shouldLoadApps);
|
|
849
|
+
};
|
|
850
|
+
const loadUsersByGetUsernamesV1 = async payload => {
|
|
851
|
+
const {
|
|
852
|
+
_usernamePrefix,
|
|
853
|
+
shouldLoadRoles = true,
|
|
854
|
+
shouldLoadApps
|
|
855
|
+
} = payload;
|
|
856
|
+
return __loadUsersBySearchCriteria(payload, (pageOffset, pageSize) => api.usernames.getUsernamesV1({
|
|
857
|
+
_usernamePrefix,
|
|
858
|
+
_offset: pageOffset,
|
|
859
|
+
_limit: pageSize
|
|
860
|
+
}), shouldLoadRoles, shouldLoadApps);
|
|
861
|
+
};
|
|
862
|
+
const loadUsersByGetEmailsV1 = async payload => {
|
|
863
|
+
const {
|
|
864
|
+
_email,
|
|
865
|
+
shouldLoadRoles = true,
|
|
866
|
+
shouldLoadApps
|
|
867
|
+
} = payload;
|
|
868
|
+
return __loadUsersBySearchCriteria(payload, (pageOffset, pageSize) => api.usersEmails.getUsersEmailsV1({
|
|
869
|
+
_email,
|
|
870
|
+
_offset: pageOffset,
|
|
871
|
+
_limit: pageSize
|
|
872
|
+
}), shouldLoadRoles, shouldLoadApps);
|
|
873
|
+
};
|
|
712
874
|
return {
|
|
713
875
|
loadRoles,
|
|
714
876
|
loadUsers,
|
|
715
877
|
loadUsersV2,
|
|
716
878
|
loadUsersV3,
|
|
879
|
+
loadUsersByGetUsersPhoneNumberV2,
|
|
880
|
+
loadUsersByGetUsernamesV1,
|
|
881
|
+
loadUsersByGetEmailsV1,
|
|
717
882
|
addUser,
|
|
718
883
|
addUsersBulk,
|
|
719
884
|
updateUser,
|
package/node/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontegg/redux-store",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.93.0",
|
|
4
4
|
"main": "./node/index.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Frontegg LTD",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@babel/runtime": "^7.18.6",
|
|
9
9
|
"@frontegg/entitlements-javascript-commons": "1.1.2",
|
|
10
|
-
"@frontegg/rest-api": "7.
|
|
10
|
+
"@frontegg/rest-api": "7.93.0",
|
|
11
11
|
"fast-deep-equal": "3.1.3",
|
|
12
12
|
"get-value": "^3.0.1",
|
|
13
13
|
"proxy-compare": "^3.0.0",
|