@frontegg/redux-store 6.185.0-alpha.1 → 6.185.0-alpha.2
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/AcceptInvitationState/index.d.ts +2 -0
- package/auth/AccountSettingsState/index.d.ts +2 -0
- package/auth/ActivateState/index.d.ts +3 -0
- package/auth/ApiTokensState/index.d.ts +2 -0
- package/auth/ApplicationsState/index.d.ts +83 -0
- package/auth/ApplicationsState/index.js +35 -0
- package/auth/ApplicationsState/interfaces.d.ts +11 -0
- package/auth/ApplicationsState/interfaces.js +1 -0
- package/auth/ApplicationsState/saga.d.ts +39 -0
- package/auth/ApplicationsState/saga.js +250 -0
- package/auth/CustomLoginState/index.d.ts +2 -0
- package/auth/Entitlements/saga.js +5 -2
- package/auth/Entitlements/utils.d.ts +10 -9
- package/auth/Entitlements/utils.js +56 -11
- package/auth/ForgotPasswordState/index.d.ts +2 -0
- package/auth/GroupsState/groupsDialogsState.d.ts +12 -0
- package/auth/GroupsState/index.d.ts +2 -0
- package/auth/ImpersonationState/index.d.ts +2 -0
- package/auth/LoginState/index.d.ts +2 -0
- package/auth/LoginState/saga.js +1 -1
- package/auth/MSP/AllAccountsState/allAccountsDialogsState.d.ts +14 -0
- package/auth/MSP/AllAccountsState/index.d.ts +3 -0
- package/auth/MfaState/index.d.ts +2 -0
- package/auth/PasskeysState/index.d.ts +2 -0
- package/auth/ProfileState/index.d.ts +2 -0
- package/auth/Provisioning/index.d.ts +2 -0
- package/auth/ResetPhoneNumberState/index.d.ts +2 -0
- package/auth/RolesState/index.d.ts +2 -0
- package/auth/SSOState/index.d.ts +2 -0
- package/auth/Security/RestrictionsState/index.d.ts +3 -0
- package/auth/Security/SecurityCenterState/index.d.ts +2 -0
- package/auth/Security/SecurityPolicyState/index.d.ts +13 -0
- package/auth/Security/SessionsPolicyState/index.d.ts +2 -0
- package/auth/SessionsState/index.d.ts +2 -0
- package/auth/SignUp/index.d.ts +2 -0
- package/auth/SmsState/index.d.ts +2 -0
- package/auth/SocialLogins/index.d.ts +2 -0
- package/auth/StepUpState/index.d.ts +2 -0
- package/auth/TeamState/index.d.ts +6 -4
- package/auth/TeamState/interfaces.d.ts +7 -1
- package/auth/TeamState/saga.js +47 -9
- package/auth/TenantsState/index.d.ts +2 -0
- package/auth/index.d.ts +9 -2
- package/auth/index.js +2 -0
- package/auth/initialState.js +2 -0
- package/auth/interfaces.d.ts +2 -0
- package/auth/reducer.d.ts +9 -3
- package/auth/reducer.js +3 -2
- package/auth/saga.js +2 -1
- package/auth/utils.d.ts +6 -0
- package/index.js +1 -1
- package/node/auth/ApplicationsState/index.js +42 -0
- package/node/auth/ApplicationsState/interfaces.js +5 -0
- package/node/auth/ApplicationsState/saga.js +262 -0
- package/node/auth/Entitlements/saga.js +3 -1
- package/node/auth/Entitlements/utils.js +55 -10
- package/node/auth/LoginState/saga.js +1 -1
- package/node/auth/TeamState/saga.js +45 -7
- package/node/auth/index.js +24 -0
- package/node/auth/initialState.js +2 -0
- package/node/auth/reducer.js +3 -2
- package/node/auth/saga.js +2 -1
- package/node/index.js +1 -1
- package/package.json +2 -2
- package/toolkit/index.d.ts +1 -1
|
@@ -55,6 +55,7 @@ declare const reducers: {
|
|
|
55
55
|
securityCenterState?: import("..").SecurityCenterState | undefined;
|
|
56
56
|
smsState?: import("..").SmsState | undefined;
|
|
57
57
|
stepUpState?: import("..").StepUpState | undefined;
|
|
58
|
+
applicationsState?: import("..").ApplicationsState | undefined;
|
|
58
59
|
routes: import("..").AuthPageRoutes;
|
|
59
60
|
header?: any;
|
|
60
61
|
loaderComponent?: any;
|
|
@@ -106,6 +107,7 @@ declare const reducers: {
|
|
|
106
107
|
securityCenterState?: import("..").SecurityCenterState | undefined;
|
|
107
108
|
smsState?: import("..").SmsState | undefined;
|
|
108
109
|
stepUpState?: import("..").StepUpState | undefined;
|
|
110
|
+
applicationsState?: import("..").ApplicationsState | undefined;
|
|
109
111
|
routes: import("..").AuthPageRoutes;
|
|
110
112
|
header?: any;
|
|
111
113
|
loaderComponent?: any;
|
|
@@ -56,6 +56,7 @@ declare const reducers: {
|
|
|
56
56
|
securityCenterState?: import("..").SecurityCenterState | undefined;
|
|
57
57
|
smsState?: import("..").SmsState | undefined;
|
|
58
58
|
stepUpState?: import("..").StepUpState | undefined;
|
|
59
|
+
applicationsState?: import("..").ApplicationsState | undefined;
|
|
59
60
|
routes: import("..").AuthPageRoutes;
|
|
60
61
|
header?: any;
|
|
61
62
|
loaderComponent?: any;
|
|
@@ -107,6 +108,7 @@ declare const reducers: {
|
|
|
107
108
|
securityCenterState?: import("..").SecurityCenterState | undefined;
|
|
108
109
|
smsState?: import("..").SmsState | undefined;
|
|
109
110
|
stepUpState?: import("..").StepUpState | undefined;
|
|
111
|
+
applicationsState?: import("..").ApplicationsState | undefined;
|
|
110
112
|
routes: import("..").AuthPageRoutes;
|
|
111
113
|
header?: any;
|
|
112
114
|
loaderComponent?: any;
|
|
@@ -56,6 +56,7 @@ declare const reducers: {
|
|
|
56
56
|
securityCenterState?: import("..").SecurityCenterState | undefined;
|
|
57
57
|
smsState?: import("..").SmsState | undefined;
|
|
58
58
|
stepUpState?: import("..").StepUpState | undefined;
|
|
59
|
+
applicationsState?: import("..").ApplicationsState | undefined;
|
|
59
60
|
routes: import("..").AuthPageRoutes;
|
|
60
61
|
header?: any;
|
|
61
62
|
loaderComponent?: any;
|
|
@@ -107,6 +108,7 @@ declare const reducers: {
|
|
|
107
108
|
securityCenterState?: import("..").SecurityCenterState | undefined;
|
|
108
109
|
smsState?: import("..").SmsState | undefined;
|
|
109
110
|
stepUpState?: import("..").StepUpState | undefined;
|
|
111
|
+
applicationsState?: import("..").ApplicationsState | undefined;
|
|
110
112
|
routes: import("..").AuthPageRoutes;
|
|
111
113
|
header?: any;
|
|
112
114
|
loaderComponent?: any;
|
|
@@ -164,6 +166,7 @@ declare const reducers: {
|
|
|
164
166
|
securityCenterState?: import("..").SecurityCenterState | undefined;
|
|
165
167
|
smsState?: import("..").SmsState | undefined;
|
|
166
168
|
stepUpState?: import("..").StepUpState | undefined;
|
|
169
|
+
applicationsState?: import("..").ApplicationsState | undefined;
|
|
167
170
|
routes: import("..").AuthPageRoutes;
|
|
168
171
|
header?: any;
|
|
169
172
|
loaderComponent?: any;
|
|
@@ -73,6 +73,7 @@ declare const reducers: {
|
|
|
73
73
|
securityCenterState?: import("..").SecurityCenterState | undefined;
|
|
74
74
|
smsState?: import("..").SmsState | undefined;
|
|
75
75
|
stepUpState?: import("..").StepUpState | undefined;
|
|
76
|
+
applicationsState?: import("..").ApplicationsState | undefined;
|
|
76
77
|
routes: import("..").AuthPageRoutes;
|
|
77
78
|
header?: any;
|
|
78
79
|
loaderComponent?: any;
|
|
@@ -124,6 +125,7 @@ declare const reducers: {
|
|
|
124
125
|
securityCenterState?: import("..").SecurityCenterState | undefined;
|
|
125
126
|
smsState?: import("..").SmsState | undefined;
|
|
126
127
|
stepUpState?: import("..").StepUpState | undefined;
|
|
128
|
+
applicationsState?: import("..").ApplicationsState | undefined;
|
|
127
129
|
routes: import("..").AuthPageRoutes;
|
|
128
130
|
header?: any;
|
|
129
131
|
loaderComponent?: any;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { ApplicationsState, UserAppsAssignmentPayload } from './interfaces';
|
|
2
|
+
import { WithCallback } from '../../interfaces';
|
|
3
|
+
declare const applicationsState: ApplicationsState;
|
|
4
|
+
declare const reducers: {
|
|
5
|
+
setApplicationsState: {
|
|
6
|
+
prepare: (payload: Partial<ApplicationsState>) => {
|
|
7
|
+
payload: Partial<ApplicationsState>;
|
|
8
|
+
};
|
|
9
|
+
reducer: (state: import("..").AuthState, { payload }: {
|
|
10
|
+
payload: Partial<ApplicationsState>;
|
|
11
|
+
type: string;
|
|
12
|
+
}) => {
|
|
13
|
+
onRedirectTo: (path: string, opts?: import("@frontegg/rest-api").RedirectOptions | undefined) => void;
|
|
14
|
+
error?: any;
|
|
15
|
+
isAuthenticated: boolean;
|
|
16
|
+
userIp?: string | undefined;
|
|
17
|
+
isLoading: boolean;
|
|
18
|
+
keepSessionAlive?: boolean | undefined;
|
|
19
|
+
socialLoginOptions?: {
|
|
20
|
+
promptConsent?: boolean | undefined;
|
|
21
|
+
} | undefined;
|
|
22
|
+
user?: import("..").User | null | undefined;
|
|
23
|
+
isSSOAuth: boolean;
|
|
24
|
+
ssoACS?: string | undefined;
|
|
25
|
+
includeQueryParam?: boolean | undefined;
|
|
26
|
+
loginState: import("..").LoginState;
|
|
27
|
+
activateState: import("..").ActivateAccountState;
|
|
28
|
+
acceptInvitationState: import("..").AcceptInvitationState;
|
|
29
|
+
forgotPasswordState: import("..").ForgotPasswordState;
|
|
30
|
+
resetPhoneNumberState: import("..").ResetPhoneNumberState;
|
|
31
|
+
ssoState: import("..").SSOState;
|
|
32
|
+
profileState: import("..").ProfileState;
|
|
33
|
+
mfaState: import("..").MFAState;
|
|
34
|
+
teamState: import("..").TeamState;
|
|
35
|
+
groupsState: import("..").GroupsState;
|
|
36
|
+
groupsDialogsState: import("..").GroupsDialogsState;
|
|
37
|
+
socialLoginState: import("..").SocialLoginState;
|
|
38
|
+
signUpState: import("..").SignUpState;
|
|
39
|
+
apiTokensState: import("..").ApiTokensState;
|
|
40
|
+
securityPolicyState: import("..").SecurityPolicyState;
|
|
41
|
+
restrictionsState: import("..").RestrictionsState;
|
|
42
|
+
provisioningState: import("..").ProvisioningState;
|
|
43
|
+
accountSettingsState: import("..").AccountSettingsState;
|
|
44
|
+
tenantsState: import("..").TenantsState;
|
|
45
|
+
rolesState: import("..").RolesState;
|
|
46
|
+
sessionsState: import("..").SessionsState;
|
|
47
|
+
hostedLoginBox?: boolean | undefined;
|
|
48
|
+
disableSilentRefresh?: boolean | undefined;
|
|
49
|
+
sessionsPolicyState: import("..").SessionsPolicyState;
|
|
50
|
+
impersonateState?: import("..").ImpersonateState | undefined;
|
|
51
|
+
passkeysState?: import("..").PasskeysState | undefined;
|
|
52
|
+
customLoginState?: import("..").CustomLoginState | undefined;
|
|
53
|
+
allAccountsState?: import("..").IAllAccountsState | undefined;
|
|
54
|
+
allAccountsDialogsState?: import("..").IAllAccountsDialogsState | undefined;
|
|
55
|
+
securityCenterState?: import("..").SecurityCenterState | undefined;
|
|
56
|
+
smsState?: import("..").SmsState | undefined;
|
|
57
|
+
stepUpState?: import("..").StepUpState | undefined;
|
|
58
|
+
applicationsState?: ApplicationsState | undefined;
|
|
59
|
+
routes: import("..").AuthPageRoutes;
|
|
60
|
+
header?: any;
|
|
61
|
+
loaderComponent?: any;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
declare const actions: {
|
|
66
|
+
loadUserApplications: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>;
|
|
67
|
+
loadAccountApplications: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>;
|
|
68
|
+
assignUserToApps: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[WithCallback<Pick<import("@frontegg/rest-api").IAssignUserToApplicationsBody, "userId" | "appIds">, boolean>], WithCallback<Pick<import("@frontegg/rest-api").IAssignUserToApplicationsBody, "userId" | "appIds">, boolean>, string, never, never>;
|
|
69
|
+
unassignUserFromApps: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[WithCallback<Pick<import("@frontegg/rest-api").IAssignUserToApplicationsBody, "userId" | "appIds">, boolean>], WithCallback<Pick<import("@frontegg/rest-api").IAssignUserToApplicationsBody, "userId" | "appIds">, boolean>, string, never, never>;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* To be used for actions types after dispatch, and should contains
|
|
73
|
+
* the reducers and actions as standalone function
|
|
74
|
+
*/
|
|
75
|
+
declare type DispatchedActions = {
|
|
76
|
+
setApplicationsState: (state: Partial<ApplicationsState>) => void;
|
|
77
|
+
loadUserApplications: () => void;
|
|
78
|
+
loadAccountApplications: () => void;
|
|
79
|
+
assignUserToApps: (payload: WithCallback<UserAppsAssignmentPayload>) => void;
|
|
80
|
+
unassignUserFromApps: (payload: WithCallback<UserAppsAssignmentPayload>) => void;
|
|
81
|
+
};
|
|
82
|
+
export declare type ApplicationsActions = DispatchedActions;
|
|
83
|
+
export { applicationsState, reducers as applicationsReducers, actions as applicationsActions };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createAction } from '@reduxjs/toolkit';
|
|
2
|
+
import { typeReducerForKey } from '../utils';
|
|
3
|
+
import { authStoreName } from '../../constants';
|
|
4
|
+
const applicationsState = {
|
|
5
|
+
loading: true,
|
|
6
|
+
error: null,
|
|
7
|
+
userApplications: [],
|
|
8
|
+
accountApplications: []
|
|
9
|
+
};
|
|
10
|
+
const reducers = {
|
|
11
|
+
setApplicationsState: typeReducerForKey('applicationsState')
|
|
12
|
+
};
|
|
13
|
+
const actions = {
|
|
14
|
+
loadUserApplications: createAction(`${authStoreName}/loadUserApplications`),
|
|
15
|
+
loadAccountApplications: createAction(`${authStoreName}/loadAccountApplications`),
|
|
16
|
+
assignUserToApps: createAction(`${authStoreName}/assignUserToApps`, payload => ({
|
|
17
|
+
payload
|
|
18
|
+
})),
|
|
19
|
+
unassignUserFromApps: createAction(`${authStoreName}/unassignUserFromApps`, payload => ({
|
|
20
|
+
payload
|
|
21
|
+
}))
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* To be used for actions types after dispatch, and should contains
|
|
26
|
+
* the reducers and actions as standalone function
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
// noinspection JSUnusedLocalSymbols
|
|
30
|
+
/**
|
|
31
|
+
* if you see error in matcher that's mean the DispatchAction does not
|
|
32
|
+
* contains the same functions in reducers and actions
|
|
33
|
+
*/
|
|
34
|
+
const Matcher = {};
|
|
35
|
+
export { applicationsState, reducers as applicationsReducers, actions as applicationsActions };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IApplicationsResponse, IAssignUserToApplicationsBody } from '@frontegg/rest-api';
|
|
2
|
+
export interface ApplicationsState {
|
|
3
|
+
error?: string | null;
|
|
4
|
+
loading?: boolean;
|
|
5
|
+
saving?: boolean;
|
|
6
|
+
userApplications?: IApplicationsResponse[];
|
|
7
|
+
accountApplications?: (IApplicationsResponse & {
|
|
8
|
+
userIds: string[];
|
|
9
|
+
})[];
|
|
10
|
+
}
|
|
11
|
+
export declare type UserAppsAssignmentPayload = Pick<IAssignUserToApplicationsBody, 'userId' | 'appIds'>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { IApplicationsResponse, IUsersOfApplicationsResponse, ITenantApplicationsResponse } from '@frontegg/rest-api';
|
|
2
|
+
import { ApplicationsState, UserAppsAssignmentPayload } from './interfaces';
|
|
3
|
+
import { WithCallback } from '../../interfaces';
|
|
4
|
+
import { PayloadAction } from '@reduxjs/toolkit';
|
|
5
|
+
import { ITeamStateUser } from '../TeamState/interfaces';
|
|
6
|
+
export declare function loadUserApplications(): Generator<import("redux-saga/effects").SelectEffect | import("redux-saga/effects").CallEffect<string[]> | import("redux-saga/effects").PutEffect<{
|
|
7
|
+
payload: Partial<ApplicationsState>;
|
|
8
|
+
type: string;
|
|
9
|
+
}> | import("redux-saga/effects").CallEffect<IApplicationsResponse[]>, void, string & string[] & IApplicationsResponse[]>;
|
|
10
|
+
export declare function loadAccountApplications(): Generator<import("redux-saga/effects").PutEffect<{
|
|
11
|
+
payload: Partial<ApplicationsState>;
|
|
12
|
+
type: string;
|
|
13
|
+
}> | import("redux-saga/effects").CallEffect<IApplicationsResponse[]> | import("redux-saga/effects").CallEffect<ITenantApplicationsResponse[]> | import("redux-saga/effects").CallEffect<IUsersOfApplicationsResponse[]>, void, ITenantApplicationsResponse[] & IApplicationsResponse[] & IUsersOfApplicationsResponse[]>;
|
|
14
|
+
export declare function loadMultipleUsersApplications({ userIds }: {
|
|
15
|
+
userIds: string[];
|
|
16
|
+
}): Generator<import("redux-saga/effects").PutEffect<{
|
|
17
|
+
payload: Partial<ApplicationsState>;
|
|
18
|
+
type: string;
|
|
19
|
+
}> | import("redux-saga/effects").CallEffect<IApplicationsResponse[]> | import("redux-saga/effects").CallEffect<Record<string, string[]>>, {} | undefined, {
|
|
20
|
+
userId: string;
|
|
21
|
+
appIds: string[];
|
|
22
|
+
}[] & IApplicationsResponse[]>;
|
|
23
|
+
export declare function assignUserToApps({ payload }: PayloadAction<WithCallback<UserAppsAssignmentPayload>>): Generator<import("redux-saga/effects").SelectEffect | import("redux-saga/effects").CallEffect<void> | import("redux-saga/effects").PutEffect<{
|
|
24
|
+
payload: Partial<import("../TeamState/interfaces").TeamState>;
|
|
25
|
+
type: string;
|
|
26
|
+
}> | import("redux-saga/effects").PutEffect<{
|
|
27
|
+
payload: Partial<ApplicationsState>;
|
|
28
|
+
type: string;
|
|
29
|
+
}>, void, string & (IApplicationsResponse & {
|
|
30
|
+
userIds: string[];
|
|
31
|
+
})[] & ITeamStateUser[]>;
|
|
32
|
+
export declare function unassignUserFromApps({ payload }: PayloadAction<WithCallback<UserAppsAssignmentPayload>>): Generator<import("redux-saga/effects").SelectEffect | import("redux-saga/effects").CallEffect<void> | import("redux-saga/effects").PutEffect<{
|
|
33
|
+
payload: Partial<import("../TeamState/interfaces").TeamState>;
|
|
34
|
+
type: string;
|
|
35
|
+
}> | import("redux-saga/effects").PutEffect<{
|
|
36
|
+
payload: Partial<ApplicationsState>;
|
|
37
|
+
type: string;
|
|
38
|
+
}>, void, string & ITeamStateUser[]>;
|
|
39
|
+
export declare function applicationsSaga(): Generator<import("redux-saga/effects").ForkEffect<never>, void, unknown>;
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import { api, ApplicationAccessType } from '@frontegg/rest-api';
|
|
3
|
+
import { call, put, select, takeLeading } from 'redux-saga/effects';
|
|
4
|
+
import { errorHandler } from '../../utils';
|
|
5
|
+
import { actions } from '../reducer';
|
|
6
|
+
const smallUserApps = [{
|
|
7
|
+
id: '1',
|
|
8
|
+
appURL: 'https://frontegg.com',
|
|
9
|
+
name: 'Frontegg',
|
|
10
|
+
isDefault: true,
|
|
11
|
+
logoURL: 'data:image/png;base64,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'
|
|
12
|
+
}, {
|
|
13
|
+
id: '2',
|
|
14
|
+
appURL: 'https://www.fiverr.com/',
|
|
15
|
+
name: 'Fiverr',
|
|
16
|
+
logoURL: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTBz6gKpHY4meThBsk-wOnXyX3gKKridZCg8hQwzbCltQ&s'
|
|
17
|
+
}];
|
|
18
|
+
const userApps = [{
|
|
19
|
+
id: '3',
|
|
20
|
+
appURL: 'https://www.idf.il/',
|
|
21
|
+
name: 'Intelligence forces',
|
|
22
|
+
logoURL: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAA81BMVEX///8AlioAkRcAjQCjzqmmz6wAlSYAjAAAmCoAlCMAkx8Akx0AkRQAmSoAjwAAkA7h4eHw+PKoqKi5ubmzs7MAegBxuX75/frw8PCjo6OXl5es1LOtra3G4svk8ufb7d8AZQCLxJXR0dEAgQDr6+s2o0y527+CwI1Pq2Dd2NzExMTU6dhBplRXrmf79/qRkZEjnT1ltHMNaiIAaABvuHzL5NDMzMxOdlQAcwAAXwAZmzfDv8OYy6GIw5J4lnwAaBEnbTM6dENRgVhiiGhwh3N8i35aeF4iYS0vYzdhd2QWaieJnIyZopseZitAa0dygXR/iIHUu4ZkAAAYwUlEQVR4nNVdCV/bxtO2JSPLlmzFXDYBbMBgE44GEqCEwL9Jc/RK0vf7f5p3D620x+xpO0mf/tqCbSw92tm5dna20Vg5jo82NvfQP5t7e3ubG//77dXf797//uHjP1823744Xv3lV4nR0eb6+t7m3fEv3ItreQ+jk2VZHk3vD959+LLx4hftd/y8OFpfX994BryxFjVrpGna62b51uv3n/ZefPd7DAdmB5EjEBhWRHuI5psPO/8FlqONnT0tOwyIYUkTsfzt48ZPLbHH6ztnthvUMmQsX/+6N/oud+uN0d7OmcPHjAwJyw4iufnzjeTZzobbB60MMclefvDxbrU37IfRzo6zYXNhiElm0687P8tAPnMdPgLCMHHhiAby08+gXO+eH7l+dID/QxieuFDEA3n/2fnbV4Sz50bTIGC4i/+LGXafHtwoIo5b337khLx77uNXXpL/kjHsnPfdGGJhnX77UeN45DF+CNtkCCnD6HG/7UoRcdz6/CPm47H7/CPYTej/qS7tDw8LZ4p4Pv773fWql/5EOJ/u0x8ow2y7ce1mNhjHg53lkzDgzPdyg+Ki/Km0h+1x46TrQbHZy79+P5Uzeuk1ATEe2uflTyXDzmVj2HVUqIzj1vcS1Y097z85LS7Zj8ynic8bY2eFSpFmb94ulQmM0Uv/zMN2Ho/Zz4xhB4ntfuxHsdmb/rXyYQwYwEarjxQLQ+WX9pHqefSluPph9DOBFLftZjyofqsYJlfotxsfhUqHcev/lkdHwbPnAX80LprRU/1rHVsUM/TrhZdCJcOY/7myDN2Gpw0kGDaTJB/Wv9cMkyZ925dis3ewIkkNkVAySPkj9zsXH+Yt9Pu4H0Bx6+VyKAkYhX0pmmhJwr/AR8AZHltvhYqQFp+XrlODpiBVlsUu/wrPMDrEr7Q8zSKhmP2x5Ml4txn0ZziCSB6El4QsRp9M0O3cn2Kz92ap8caGSxZNBXFa4n3hNYFhNievXWQhFF8vUd+sh4WgwwQpkc6J+OKjMGB94usMHzohFO8DvA8YO0FKtNE4wffdPxdeG7SEHE33mr4aIqdIpYYpBwVeqQoOJADsnIovHrZ2BTbxhLx87h7yc0inS7EaLwNz7I8kiG9PxFeRDRRUJ3sCuwE2A1NcggsXSnBGbrmUwvrVdqsxF/RKfEvfmXtkNTiK7YUpPg8kOKEj1R+IL18UrcZYGK5KE12GKNTFBdU9Wy9ikBF9UlqDCuN+hDy1U0FzxrPyzSCFiigupG70C50WXNG7LYbiy9sZZrgvCGTlEZRPxZvi1gJGYyM0FVtKHPXKagxRIIW9bTHjXXl150HaBtnFYNN/F+bJNBpP5SDl0uutnDJsiXFvl70/C7IZyLsJdOCehfmitebP16Q3UCxIGA5FX7uOrnzSxDzFN0HqYhQ6g5mwkQiXB55/hCGajyLFarp6pYk5in+EBFOhWniQl7OsmEnvYB1KGU7EGcdlOU6CFGoz+8v/RoN1MFP6JNPEg9hByrBxIRKpzaZvmrhEWngPCFjt44JTllrq70vvEF+mZDgTJ1x2U31qEhAPY4pbngr1WUjSidBgfnXnQn6LvFMybCTiULWrjHHp7nmjd+CnbUJldK26vVhyuRu7AsNHyWBc1h/0ThOXFP/0udFQLXNbGTT+limomWcMhxKNmAsjAxVq7uGEh07CcT276oWKErd0fjGGjWsxFSwItd+6G4PHVBwFOnpcdpdbqChx2RUZyi4ar5hC0sRNbPhdrWKojHIZ+liKmhqDUkVWDGXLJxiXcVxEUdbx5elqFTd9XaDhYLI/ax2e1o4Kv1BBcRjJDCWDIToIk9na4fblRSeO+0WRI7JObNOpk5w6yuhwfL6/+zi/Pn3os7uoL5UP5Y8z5VEzbEgRr+LkEQzGt/tr6DIXD1l5ma6BrJucmmR0MD6f7ZLr5abrCQsVBLtswDiGh5LKzFvyX4kon+nN6VWn34/hi2f/2gmeKXqUyuD25Ukz7/eL3C4z4kIFwRX7A47hQI6VIvvdKfcUtQWy6Za9nIFWWQzxYOFvSNvTaZsADxrihxERZBRdhA5GQtCUFyow6hIojqFsMJSA2Q3DAZ0uFw9ETr+6EWwMhwOG8XgymZyfn9/e7u/PZrNdhLW11uPj4eHTfD7f3t6+ub68PL24OEG4enhoJtmD8q01F57hreyCIgd8iEGuOiZX5S4LXpVeFuHh4YHKuqUQ5jjUHzViUFPhGdayy8Q7ypGc9CniOC5KSJLTBSWnRO/ArGyWlCaXwOkUgeFuUDLfArOyOVpNFSBnRwSGjTzIdzEjvTdlbVYzhLxtFxnOg7LAFmSf9beiWoql4EQ7huOw5JoZ6ZZeElczhEJSRmTYuAxLy5jR+6a7lbPV1Kls82ZPYhhSpmBFOtWZ/dUMoZgclRg2XAu+vaAbxLvVzEIxXyEzbK3CYKRbsDpdzRA2xGhWZjgMy3JbAKvTF6uxheJCk8JwNQYjvYfksfbn5BTLQpByvwrD8RJ1TeeK/ZR9Uu9kVHuk50ukKBNQGErrpYsguaiMTwp4p7xLrqSRwiGtwQAM95c2E/uc8wSEGPwru/KyWDAURaIybIQl1lTkj4f141TjRNHaywUGwVCMAcDwMSwBLCO5anCPU7X64qA+KosOgVAMOsBQTn8HIh4LwVj2UbzKSIx8B1MlEREE1SkDGCpzNQj5oRhQy7pGziDetJcip6qehBhOljCIyUPjVvyaXFyklzXPeVuqRwsCEBxBDGWbGYJ4wtYNGDq/8pc4VqouTuIlyCngr4AM5fS3P5CMypY3fc2L6Tpw0WJxOQW8apBhY1F7gRc9nuTHmfNTD8jARdnCcgolmmCGixoMXAGpyEGXE9MRUBp0GC0sp3KyUM9wELZ4z4BkFHicvJhCpUGDuLmgnCoJXz1DJf3tBbIwp24PT4t6JQpME193u4vJ6SV01xqG7jufAeCSAegLOKMPrqehv1lITpWFFxNDYAicgWUUFILeK/btR3D6Ak0jZSnXA/LimZlhuMEgMgpO5DqZodoKAjR35Tp0H8DqUcewEWz0SVkL/DirEErDEOvfcDnVzCwtw+tAikRG5fXkEtmH8st1y9rYJQnXpxE4s7QMhUFwZ0sLHDQy3ntDv1szDWkGwkdOxSoo2ADoGN7y95idOkcbdLeDpqKRTUSdkNKcu7ucDsR4BF460zHkJ1LnxLkIk8qottqvdNz0DEl45yyn17mwxQlOorlYi/5YjoR0KItwbnRDXqbc9AxJiO4qpyjKK4QaDDBhr2E45IwnkRq3DBwtDxxq3YXee/z+yLCwTdIsjnKKXRhhDxCY69UwnNUiTT0pp6iYyqjBb6eBvlbRYJCn45SXInVqwm5KME2oYcglMqJh9cAsYIViidYfoqrGWJFPxsFJTmmcHnGpVlB4NAzT6gNsQ6bD4mlZwmpyh3IsoIZpyNSFg5zu98UbxIDmEsywVob1I7Lmp0oZNeZAsi82huVd2vVpXfRUl7S1gPkBM6w+yRW32WJGJqPG/iFd7NWYC/XoZFKLtiXUksIVB0NmCmZYjTZfKjw3B/5MqxnHuveuYZmHLOduk1POMnAfdY7x2fPJ+bov89Ii+6j5U+lBo3FsKXUrVbFZTnf5y9Sqd1vVhyBDpnWlXdGm7E2HFdyaF5HT++PGkaU8ocy5m/WpICj1fc7Uq4MMWZpMNksGhlUduXldJ52+aFj7hZZybpJTcQd6LWtAmA8yLGVcuYR+fKoKVtvaXPTWNg1r70Jv94dy8Va110LNTUAMB/QK6gYG7QDVReE27y7ftKhSjNLe6PNST7I0Va6NGnpDDMsoJFNKp7XGvHqE1jVyZBDtmwzZZdTCWArAcDG7favcIcSQRpKxvE8KA0q58lXW1jqH7B+HMaxSKBp9ChkkdrvKRIIYZvxDEbEPmfNOvXHBWo2TfXQYw0prd0G7DzuQOv8ZYKj67BygULjeBmYvUO18cGE4YMIOyimcrSjVhnILulXu+Fx5nQAIhbmdAPaasd7vLlJakwDkVBfIUdWvOI0AQ6zJcm0Ru6IsORkF1w0khu+dGFaZQUCfatU1tcnyU1YZ4iBLbvHCQXmC3J4xh9pN5Jg6bdiu7Foh16Ho99DTu5aVHVxP0zfUKEmzgJNRlxWr3t9uDGu/U7b7hqQYkTzZ51AZomdg9OtFTcbJqCbRLTF81XDbflCNhBRHgdqcAWsPuZREZZgmgDPDQ7BG/L5Gl6SqM8O62kiUU9gilyDhrLVyr88HzRB4YYy4bN6uy2KOM8Pz6tuSDveyZcUIW3EpBFIYruWgM8OD8wr5TXEOuSrC0K01RD3dWcccAltJGrp5KdBXGF4W1jrBYW1UuW3tLrbCnWEtKBHfcWbN6lIgAbRIaaFxZnhw0VnM7cN0WVVFutRpP2Wl80Xnyq7LkAG9EYRJZng7lXe1Q+B0CienLquqyB66MKxzIcIue3GKZeCAxrv7wusyw7nTjry1mgvvdDjUbSKfxkVKKyqGTFE8h5shFOdGhpqgcy51DYEzXQ6F/sgvdWHIhER0rvjAt1sghdiCKHZOhekiMRzDMtqKY1H/8ALJFRfYxRTFFg5SWgUIQhsB3kwVp2R2gB3JOsbdCCBwr6HoQSDPGV7uOdu9Grf4kIlIIdxd7WokcdUowXpFF4Y0Ykpifq2Od57qRTz9ulrF0CXGZ66lGFjU7iL/tK1tgR0YVhFXKRkUvANcy5J1ccMpT1P6XYkYHFY+gDhjriwU7Qy5pmbdvHZ3+CCmTrVZm57nm/Z8KQsO+4J6Y2FbJxK1nq2lhZWh2OmTe3y8k5ZXfoetIC56a815s2/OxA6IZeBbXMhR/7gwUrQylPqaRFdMIoVQuGrTb+nxhnPetnWLcr4lHSEAgJQBuxOj4NgYXiq51zbU7yVJ2R+YK6jT+5F17Ykl9cUAgMx7SaEzGHdNWhhCLYWZwhHWCCLmgpv3aOK1J4syLa2elM3EX5vEN5q/MfUiNTM8BP+yG9HHK4bC7JEbQ1RSjGFeA6aOi9x3BH1rV2nHZrtRO8Nd3dp9TDTLQPha5oIbA2FS2WZmSKVGamuFvlRVMTz0/atNDA0CRxWO4MJUuQ99KUa5jm+ch9S3lbOZzU4bUDE8FIXhwNCoojr9NXmRi7ngULkAA6nFMNbTEEUlZzNb7aY1qNM1s9IztJiZZowUjtQquxQj/ZOh9TSmmijq0st9u9o6FcND01FWy9De/aqb3YoJA5b3U1b3aoZ085NhIhI9VchBq1MVmKajrJbhlT1/ncRPM4FM6YLrM8O0rs1Wm6is4DvuoYVdRh1Dt8bz0Yn4eyldWv/bWpuI/YUkuEoYrKDU7bdw3DQjyUWZAdeuBJf717SqhniCfb3ZswFqmgsz5ELnxGszYk7bpmlSp1Wxvm4QsSOYmTPuKit+xIGTK0CGVfojifonllIoCdQF15TNszpvHUPscyddc8ZdxqAdX6zVJNW0BsSwHOskiq8ex56bS0pvC14gqloraBjiJKk14y4BzflO3j/dZc9FmV8AQzJfk6zfPKRW1rjao4B6zHDqtNpvAU9EnAOBywf0KN3/Tt6+nFGSclpDZYh1LqL3VC9z++0QooMArXdzDUDA8OIx0jT6M6BW22gkKUkpraEwHGRRnMyFVXy/QaRLV1DNQr3vCd67lunLB3QQTWC3KK5n8tNVept0i/mt/D1+DaGpMgRUMLd3DTpBeS03lA9ooOwK6Bb97V0jw0NoojutKtXoYydLLWTk9x9Ce0ibSUduV20DaHi7lvVDEJ5dvbFToqZOha3Oqpgi5dT2bXGi3djhzdBzJhIXXCkA4/cBA/biJJEdbiucWpO5MfQexJacAWhKe7mV/fi3fbjEy4Qbl1VnR4aeM5GUq0ipU3E/viKmp11vh9vtzE1Hhr5tFrDOkGqLBCFVLOIk9ne46yFE3uWDbkoaGIoJWc9BxC64WJ4l9cWQAv2bwtPh5hRp1n9A3qUuUaNnOGmfcB6td68M5IILT0XpoySI6aAN1OtaQGdBt8jm1Ls89dwHPCkS7NFWouM7iLjCgE+dyv1pxB5D87anw00Vaacobuo/hCnqGE5icneI5E3p4vgOIvKhOf8b6CzIDeKw7d8K6zrCjqjwEkhRw5BLtHWLDhED30HELnidAwD6CXMMHz2aMpeYTIVJRHHhvO9pLFb7Z30cKHq3Ocu4Ah+g1xena9qeDjfCDPR/gPQSyHCs9KJNovYFsOPGwvCyqvBJodblFem1ufpmIFSKEMMxuLG9498MpD9j/jfUc6/um6iv1/WHkvoGGI7DzuoCkOSl2wH3TWS9L3ddyrDcKVprhAMPIwPRvaRloppWwmX/0uX0MdNRVGN87zMeTIjmWD3p+pfSQVxWt70KV8bKvUGy5E7CuP1l71f4VlbVR1igKDEceLTAcIa+j/CqGgnzFEWGKyFo6AW9qk7CQ25dSWC4GoKmft6raiWsPTlgkf5XWph6sq+qr355rqzMsLWSLsnmvvqrGkT4jBLVtc6LftyOCdgREIVwBETEHR5CDoDoVidAVENoPoiFnW8xJGdo4LM78PEd5Ska5CCNFjlG4/DpaT7fvrm+xudonJ5e4MM7mmmG7rAdtzP1e6sMA8dQXRLrs7foASLkDvAZHujy9BiPtRa+PLoBfHVyeXJ9epAHPcHDdr5FdUbJYHJbHi7T505hkU5gYadoSE9RObuyUbcPqBmqGUP1AB4XsCNnLtzOKAEz/GN2bE1Oj62JMsshhcAgNkrXpWaolsF0gD8zszppRtLhPvZzZiwnQAzGaGgft6/pV+uOQ4qAwZhJ566pC6G6fcYM+EE/Pt2cXhVtTAt80C5nBTmfSTZkZz9dlWdNcdNKPgcYgx79yBhOlPQxuE+WnZtVXcR4oJXbeU8h58oNyePlVkPls5wxqOpkDNWkNr8bpnEuCErXTKuG49lyG6HuKXeyNtSGmJi/kqFqChM+LJ208WiZCtZAOJ67Fn52Hlf1I5+pTt9OGMOBauv5HWOhIaPzibKh5x/yd6Yc0tmgc48yVE2hUJfkUB8Fwf38w/CDZOulA7DHBNKfhCFQZsk/kbBz5P2Okw123uq9T7Gydt3ARpEwVCcYL9XgzhsH+JxDugDF6mRtcAP6rI8ZAjVB3GqsqYbaBL+zZMPPA64raMBSnMu4BfUo4KxL4BHy3ucBh0/FKoGonFqNMWi3oPXderES0LJO8D7TeQE5HTLrDHphjy2g8pw7+FBTeGsl6H8u9wJWkdVrA0dZYopQ4Uvl5Lk3LpW+IeBs9cYvwaO4X/qcYDQE7I6uDyDV1/ib0fvD2RLyeBZq+KuTtQuIoaJI67FeC+zq3XsT6GjeAYVEbrihNNRjgSGG1daU28CT9HqvjZkZEzaCE1NlSSLQH0xhWOnccaAa7d17q9Ea66E2o9xb0FUXkxWG1YHcgWcGpVvBswljJzSSKgdEOWJdYVg1S7FusNUQnC6YH3w+CvxD6l2rjVlkhqzC8yZMjabTYKvGEEyRlrErJaoSw84l/2l/gm0vdxtGMEVi3JTOpxLDUoz3w9RoOl0CQUQxdC6SVfy+5ICLDDOqigIP0FuCiFLshGpU7GTKDrjIkJqTYRqkRntbS1uEWA+0iyRQkPaaCgxLl0C3lc9C8H4hMyFiI9C7wVsppIJ/gSHNq7puepIIvl7A0Ku4C3xcazHvWJNXODrUNX8M8mV6b4JdNRjPAkV+nkvLGBxD2lQL2v9lRZr9sfSig18C1RaK+IRlDI4hCZGDjpVLi89B4ZIFz8NU6lVHWMaoGZKFiqBymt7WkqyEjI2g9NQgSvhljJohWagISf72DpaqY3iETcbzmG98VDEkCxXaXe16pPmfq6n7oQiS1N2YS/hWDHHK+NBfjfa2luKo6bERYjaeijppzxjihQr/5G+avVmZhDKMXgbIyGVRLWMwhoizf/K3N/1rFTpURsgwXrXZMkbJEMntQKkM/gkGkGL00ns2DiK2jFEybA+81Whv69/vMYAUZ9aSDhmTaemAU4bIfngmf3v5V4cihCVix9c2znL6f8qw8FxDS7MD74e6KI6fe4ZUT9QBJwyjFtxkUcvv/jsKaI0jT+NIbSIdQ5/tImlv6/OS4whn3PklOMhaFGbYfUrtxCp+028rqph0wpnPOBLXjYyhsXuVKJ9b376vglFx5zkf1XULE7/7zz9y/BieeelVZ4ZpLz/49KPmn4zRjnv235Fhmk2/7vwI/anFmetAujDEw/fxR08/FaO9HZeMnJVh2slf/wp1efgZcLy+c2a7NSPDNM0Qvb2flB7FaGNnz2hAtAzTXpZvvfr49qemV+JofV2/tAoxTAm7Nx92fhbV6QLMEqw6EhimiFsXkXv9/tPef4kdw+hoc319b/PumBe8tbyH0cmyLI+m9wfvPnzZePFfkEwDjo82NvfQP5t76N+N//326u9373//8PGfL5tvX6wya1bi/wHu6fK8C+0A9QAAAABJRU5ErkJggg=='
|
|
23
|
+
}, {
|
|
24
|
+
id: '5',
|
|
25
|
+
appURL: 'https://www.att.com/',
|
|
26
|
+
name: 'AT&T',
|
|
27
|
+
logoURL: 'data:image/png;base64,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'
|
|
28
|
+
}, {
|
|
29
|
+
id: '4',
|
|
30
|
+
appURL: 'https://www.appsflyer.com',
|
|
31
|
+
name: 'AppsFlyer',
|
|
32
|
+
logoURL: 'https://pbs.twimg.com/profile_images/1744333107384172544/YrEGkrvp_400x400.png'
|
|
33
|
+
}, {
|
|
34
|
+
id: '2',
|
|
35
|
+
appURL: 'https://www.fiverr.com/',
|
|
36
|
+
name: 'Fiverr',
|
|
37
|
+
logoURL: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTBz6gKpHY4meThBsk-wOnXyX3gKKridZCg8hQwzbCltQ&s'
|
|
38
|
+
}, {
|
|
39
|
+
id: '1',
|
|
40
|
+
appURL: 'https://frontegg.com',
|
|
41
|
+
name: 'Frontegg',
|
|
42
|
+
isDefault: true,
|
|
43
|
+
logoURL: 'data:image/png;base64,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'
|
|
44
|
+
}];
|
|
45
|
+
const accountApps = [...userApps, {
|
|
46
|
+
id: '6',
|
|
47
|
+
appURL: 'https://google.com',
|
|
48
|
+
name: 'Google',
|
|
49
|
+
logoURL: 'https://cdn1.iconfinder.com/data/icons/google-s-logo/150/Google_Icons-09-512.png'
|
|
50
|
+
}, {
|
|
51
|
+
id: '7',
|
|
52
|
+
appURL: 'https://facebook.com/',
|
|
53
|
+
name: 'Facebook',
|
|
54
|
+
logoURL: 'data:image/png;base64,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'
|
|
55
|
+
}, {
|
|
56
|
+
id: '8',
|
|
57
|
+
appURL: 'https://www.siemens.com/global/en.html',
|
|
58
|
+
name: 'Siemens',
|
|
59
|
+
logoURL: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS_-ziawSkvHZRsvfSh3S6UdwIRAb3HwSf4zH3E1yMXJQ&s'
|
|
60
|
+
}];
|
|
61
|
+
const mockUserIds = ['1', '2', '3', '4', '5'];
|
|
62
|
+
const flattenAppIds = listWithAppIds => {
|
|
63
|
+
var _listWithAppIds$map$r;
|
|
64
|
+
return (_listWithAppIds$map$r = listWithAppIds.map(({
|
|
65
|
+
appIds
|
|
66
|
+
}) => appIds).reduce((allAppIds, currentAppIds) => {
|
|
67
|
+
currentAppIds == null ? void 0 : currentAppIds.forEach(item => {
|
|
68
|
+
if (allAppIds && !allAppIds.includes(item)) {
|
|
69
|
+
allAppIds.push(item);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return allAppIds;
|
|
73
|
+
}, [])) != null ? _listWithAppIds$map$r : [];
|
|
74
|
+
};
|
|
75
|
+
export function* loadUserApplications() {
|
|
76
|
+
yield put(actions.setApplicationsState({
|
|
77
|
+
loading: true
|
|
78
|
+
}));
|
|
79
|
+
try {
|
|
80
|
+
const userId = yield select(state => {
|
|
81
|
+
var _state$auth, _state$auth$user;
|
|
82
|
+
return (_state$auth = state.auth) == null ? void 0 : (_state$auth$user = _state$auth.user) == null ? void 0 : _state$auth$user.id;
|
|
83
|
+
});
|
|
84
|
+
const appIds = yield call(api.applications.getUserApplicationsId, {
|
|
85
|
+
userId
|
|
86
|
+
});
|
|
87
|
+
const userApplications = yield call(api.applications.getApplicationsData, {
|
|
88
|
+
appIds
|
|
89
|
+
});
|
|
90
|
+
// const userApplications = userApps;
|
|
91
|
+
|
|
92
|
+
//@ts-ignore
|
|
93
|
+
yield put(actions.setApplicationsState({
|
|
94
|
+
userApplications,
|
|
95
|
+
loading: false
|
|
96
|
+
}));
|
|
97
|
+
} catch (e) {
|
|
98
|
+
yield put(actions.setApplicationsState({
|
|
99
|
+
loading: false,
|
|
100
|
+
error: errorHandler(e)
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export function* loadAccountApplications() {
|
|
105
|
+
yield put(actions.setApplicationsState({
|
|
106
|
+
loading: true
|
|
107
|
+
}));
|
|
108
|
+
try {
|
|
109
|
+
const tenantAppIds = yield call(api.applications.getTenantsApplications);
|
|
110
|
+
const appIds = flattenAppIds(tenantAppIds);
|
|
111
|
+
const accountApplications = yield call(api.applications.getApplicationsData, {
|
|
112
|
+
appIds
|
|
113
|
+
});
|
|
114
|
+
// const accountApplications = accountApps;
|
|
115
|
+
const usersOfApplications = yield call(api.applications.getUsersOfApplications, {
|
|
116
|
+
appIds: []
|
|
117
|
+
});
|
|
118
|
+
const accountApplicationsWithUsers = accountApplications.map(app => {
|
|
119
|
+
var _usersOfApplications$;
|
|
120
|
+
return _extends({}, app, {
|
|
121
|
+
userIds: ((_usersOfApplications$ = usersOfApplications.find(u => u.appId === app.id)) == null ? void 0 : _usersOfApplications$.userIds) || []
|
|
122
|
+
// userIds: mockUserIds,
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
//@ts-ignore
|
|
126
|
+
yield put(actions.setApplicationsState({
|
|
127
|
+
accountApplications: accountApplicationsWithUsers,
|
|
128
|
+
loading: false
|
|
129
|
+
}));
|
|
130
|
+
} catch (e) {
|
|
131
|
+
yield put(actions.setApplicationsState({
|
|
132
|
+
loading: false,
|
|
133
|
+
error: errorHandler(e)
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export function* loadMultipleUsersApplications({
|
|
138
|
+
userIds
|
|
139
|
+
}) {
|
|
140
|
+
try {
|
|
141
|
+
const usersAppIds = yield call(api.applications.getUsersApplicationsId, {
|
|
142
|
+
userIds
|
|
143
|
+
});
|
|
144
|
+
const appIds = flattenAppIds(usersAppIds);
|
|
145
|
+
const accountApplications = yield call(api.applications.getApplicationsData, {
|
|
146
|
+
appIds
|
|
147
|
+
});
|
|
148
|
+
return userIds.reduce((acc, userId) => {
|
|
149
|
+
var _usersAppIds$find, _userAppIds$map;
|
|
150
|
+
const userAppIds = (_usersAppIds$find = usersAppIds.find(app => app.userId == userId)) == null ? void 0 : _usersAppIds$find.appIds;
|
|
151
|
+
acc[userId] = [...accountApplications.filter(app => app.accessType === ApplicationAccessType.FREE_ACCESS), ...((_userAppIds$map = userAppIds == null ? void 0 : userAppIds.map(appId => accountApplications.find(app => appId === app.id))) != null ? _userAppIds$map : [])];
|
|
152
|
+
return acc;
|
|
153
|
+
}, {});
|
|
154
|
+
} catch (e) {
|
|
155
|
+
yield put(actions.setApplicationsState({
|
|
156
|
+
error: errorHandler(e)
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
export function* assignUserToApps({
|
|
161
|
+
payload
|
|
162
|
+
}) {
|
|
163
|
+
const {
|
|
164
|
+
userId,
|
|
165
|
+
appIds,
|
|
166
|
+
callback
|
|
167
|
+
} = payload;
|
|
168
|
+
try {
|
|
169
|
+
var _select, _accountApps$filter;
|
|
170
|
+
const tenantId = yield select(state => {
|
|
171
|
+
var _state$auth2, _state$auth2$user;
|
|
172
|
+
return (_state$auth2 = state.auth) == null ? void 0 : (_state$auth2$user = _state$auth2.user) == null ? void 0 : _state$auth2$user.tenantId;
|
|
173
|
+
});
|
|
174
|
+
yield call(api.applications.assignUserToApplications, {
|
|
175
|
+
userId,
|
|
176
|
+
appIds,
|
|
177
|
+
tenantId
|
|
178
|
+
});
|
|
179
|
+
const accountApps = yield (_select = select(state => {
|
|
180
|
+
var _state$auth3, _state$auth3$applicat;
|
|
181
|
+
return (_state$auth3 = state.auth) == null ? void 0 : (_state$auth3$applicat = _state$auth3.applicationsState) == null ? void 0 : _state$auth3$applicat.accountApplications;
|
|
182
|
+
})) != null ? _select : [];
|
|
183
|
+
const users = yield select(state => {
|
|
184
|
+
var _state$auth4, _state$auth4$teamStat;
|
|
185
|
+
return (_state$auth4 = state.auth) == null ? void 0 : (_state$auth4$teamStat = _state$auth4.teamState) == null ? void 0 : _state$auth4$teamStat.users;
|
|
186
|
+
});
|
|
187
|
+
const newApps = (_accountApps$filter = accountApps == null ? void 0 : accountApps.filter(app => appIds.includes(app.id))) != null ? _accountApps$filter : [];
|
|
188
|
+
if (userApps != null && userApps.length) {
|
|
189
|
+
yield put(actions.setTeamState({
|
|
190
|
+
users: users.map(user => {
|
|
191
|
+
var _user$applications;
|
|
192
|
+
return user.id === userId ? _extends({}, user, {
|
|
193
|
+
applications: [...((_user$applications = user.applications) != null ? _user$applications : []), ...newApps]
|
|
194
|
+
}) : user;
|
|
195
|
+
})
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
callback == null ? void 0 : callback(true);
|
|
199
|
+
} catch (e) {
|
|
200
|
+
yield put(actions.setApplicationsState({
|
|
201
|
+
error: errorHandler(e)
|
|
202
|
+
}));
|
|
203
|
+
callback == null ? void 0 : callback(false);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
export function* unassignUserFromApps({
|
|
207
|
+
payload
|
|
208
|
+
}) {
|
|
209
|
+
const {
|
|
210
|
+
userId,
|
|
211
|
+
appIds,
|
|
212
|
+
callback
|
|
213
|
+
} = payload;
|
|
214
|
+
try {
|
|
215
|
+
var _users$find;
|
|
216
|
+
const tenantId = yield select(state => {
|
|
217
|
+
var _state$auth5, _state$auth5$user;
|
|
218
|
+
return (_state$auth5 = state.auth) == null ? void 0 : (_state$auth5$user = _state$auth5.user) == null ? void 0 : _state$auth5$user.tenantId;
|
|
219
|
+
});
|
|
220
|
+
yield call(api.applications.unassignUserFromApplications, {
|
|
221
|
+
userId,
|
|
222
|
+
appIds,
|
|
223
|
+
tenantId
|
|
224
|
+
});
|
|
225
|
+
const users = yield select(state => {
|
|
226
|
+
var _state$auth6, _state$auth6$teamStat;
|
|
227
|
+
return (_state$auth6 = state.auth) == null ? void 0 : (_state$auth6$teamStat = _state$auth6.teamState) == null ? void 0 : _state$auth6$teamStat.users;
|
|
228
|
+
});
|
|
229
|
+
const userApps = (_users$find = users.find(user => user.id === userId)) == null ? void 0 : _users$find.applications;
|
|
230
|
+
if (userApps != null && userApps.length) {
|
|
231
|
+
yield put(actions.setTeamState({
|
|
232
|
+
users: users.map(user => user.id === userId ? _extends({}, user, {
|
|
233
|
+
applications: userApps.filter(app => !appIds.includes(app.id))
|
|
234
|
+
}) : user)
|
|
235
|
+
}));
|
|
236
|
+
}
|
|
237
|
+
callback == null ? void 0 : callback(true);
|
|
238
|
+
} catch (e) {
|
|
239
|
+
yield put(actions.setApplicationsState({
|
|
240
|
+
error: errorHandler(e)
|
|
241
|
+
}));
|
|
242
|
+
callback == null ? void 0 : callback(false);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
export function* applicationsSaga() {
|
|
246
|
+
yield takeLeading(actions.loadUserApplications, loadUserApplications);
|
|
247
|
+
yield takeLeading(actions.loadAccountApplications, loadAccountApplications);
|
|
248
|
+
yield takeLeading(actions.assignUserToApps, assignUserToApps);
|
|
249
|
+
yield takeLeading(actions.unassignUserFromApps, unassignUserFromApps);
|
|
250
|
+
}
|
|
@@ -55,6 +55,7 @@ declare const reducers: {
|
|
|
55
55
|
securityCenterState?: import("..").SecurityCenterState | undefined;
|
|
56
56
|
smsState?: import("..").SmsState | undefined;
|
|
57
57
|
stepUpState?: import("..").StepUpState | undefined;
|
|
58
|
+
applicationsState?: import("..").ApplicationsState | undefined;
|
|
58
59
|
routes: import("..").AuthPageRoutes;
|
|
59
60
|
header?: any;
|
|
60
61
|
loaderComponent?: any;
|
|
@@ -106,6 +107,7 @@ declare const reducers: {
|
|
|
106
107
|
securityCenterState?: import("..").SecurityCenterState | undefined;
|
|
107
108
|
smsState?: import("..").SmsState | undefined;
|
|
108
109
|
stepUpState?: import("..").StepUpState | undefined;
|
|
110
|
+
applicationsState?: import("..").ApplicationsState | undefined;
|
|
109
111
|
routes: import("..").AuthPageRoutes;
|
|
110
112
|
header?: any;
|
|
111
113
|
loaderComponent?: any;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import isEqual from 'fast-deep-equal';
|
|
2
2
|
import { call, put, takeLeading, select } from 'redux-saga/effects';
|
|
3
|
-
import { api } from '@frontegg/rest-api';
|
|
3
|
+
import { USE_ENTITLEMENTS_V2_ENDPOINT_FF, api } from '@frontegg/rest-api';
|
|
4
4
|
import { actions } from '../reducer';
|
|
5
|
+
import { getFeatureFlags } from '../../helpers';
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* @param oldEntitlements
|
|
7
9
|
* @param newEntitlements
|
|
@@ -38,8 +40,9 @@ export function* loadEntitlements({
|
|
|
38
40
|
payload
|
|
39
41
|
}) {
|
|
40
42
|
const callback = payload == null ? void 0 : payload.callback;
|
|
43
|
+
const [useEntitlementsV2] = yield call(getFeatureFlags, [USE_ENTITLEMENTS_V2_ENDPOINT_FF]);
|
|
41
44
|
try {
|
|
42
|
-
const entitlements = yield call(api.entitlements.loadEntitlementsV2);
|
|
45
|
+
const entitlements = yield call(useEntitlementsV2 ? api.entitlements.loadEntitlementsV2 : api.entitlements.loadEntitlements);
|
|
43
46
|
yield handleFetchedEntitlements(entitlements);
|
|
44
47
|
callback == null ? void 0 : callback(true);
|
|
45
48
|
} catch (e) {
|
|
@@ -1,30 +1,31 @@
|
|
|
1
|
+
import { UserEntitlementsResponse } from '@frontegg/rest-api';
|
|
1
2
|
import { EntitledToOptions, Entitlement } from './interfaces';
|
|
2
3
|
import { UserEntitlementsContext as UserEntitlementsResponseV2 } from '@frontegg/entitlements-javascript-commons';
|
|
3
4
|
import { Attributes } from '@frontegg/entitlements-javascript-commons';
|
|
4
5
|
/**
|
|
5
6
|
@param entitlements
|
|
6
7
|
@param key permission key
|
|
7
|
-
@param attributes entitlements query attributes including
|
|
8
|
-
@param isV2
|
|
8
|
+
@param attributes entitlements query attributes including comnsumer and frontegg attributes
|
|
9
|
+
@param isV2 true when need to use entitlements API V2
|
|
9
10
|
@returns if the user is entitled to the given permission. Attaching the justification if not
|
|
10
11
|
@throws when entitlement is not enabled via frontegg options
|
|
11
12
|
*/
|
|
12
|
-
export declare const getPermissionEntitlements: (entitlements: UserEntitlementsResponseV2 | undefined, key: string, attributes?: Attributes | undefined, isV2?: boolean | undefined) => Entitlement;
|
|
13
|
+
export declare const getPermissionEntitlements: (entitlements: UserEntitlementsResponseV2 | UserEntitlementsResponse | undefined, key: string, attributes?: Attributes | undefined, isV2?: boolean | undefined) => Entitlement;
|
|
13
14
|
/**
|
|
14
15
|
@param entitlements
|
|
15
16
|
@param key feature key
|
|
16
|
-
@param attributes entitlements query attributes including
|
|
17
|
-
@param isV2
|
|
17
|
+
@param attributes entitlements query attributes including comnsumer and frontegg attributes
|
|
18
|
+
@param isV2 true when need to use entitlements API V2
|
|
18
19
|
@returns if the user is entitled to the given feature. Attaching the justification if not
|
|
19
20
|
@throws when entitlement is not enabled via frontegg options
|
|
20
21
|
*/
|
|
21
|
-
export declare const getFeatureEntitlements: (entitlements: UserEntitlementsResponseV2 | undefined, key: string, attributes?: Attributes | undefined, isV2?: boolean | undefined) => Entitlement;
|
|
22
|
+
export declare const getFeatureEntitlements: (entitlements: UserEntitlementsResponseV2 | UserEntitlementsResponse | undefined, key: string, attributes?: Attributes | undefined, isV2?: boolean | undefined) => Entitlement;
|
|
22
23
|
/**
|
|
23
24
|
@param entitlements
|
|
24
25
|
@param options including permission or feature
|
|
25
|
-
@param attributes entitlements query attributes including
|
|
26
|
-
@param isV2
|
|
26
|
+
@param attributes entitlements query attributes including comnsumer and frontegg attributes
|
|
27
|
+
@param isV2 true when need to use entitlements API V2
|
|
27
28
|
@returns if the user is entitled to the given feature or permission (check only one). Attaching the justification if not
|
|
28
29
|
@throws when entitlement is not enabled via frontegg options
|
|
29
30
|
*/
|
|
30
|
-
export declare const getEntitlements: (entitlements: UserEntitlementsResponseV2 | undefined, options: EntitledToOptions, attributes?: Attributes | undefined, isV2?: boolean | undefined) => Entitlement;
|
|
31
|
+
export declare const getEntitlements: (entitlements: UserEntitlementsResponseV2 | UserEntitlementsResponse | undefined, options: EntitledToOptions, attributes?: Attributes | undefined, isV2?: boolean | undefined) => Entitlement;
|