@frontegg/redux-store 7.124.0 → 7.125.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.
@@ -55,7 +55,8 @@ export default ((store, api, sharedActions) => {
55
55
  const sendPasswordRecoveryEmail = async () => {
56
56
  const {
57
57
  identifier,
58
- identifierType
58
+ identifierType,
59
+ recaptchaToken
59
60
  } = store.auth.forgotPasswordState;
60
61
  setForgotPasswordState({
61
62
  loading: true
@@ -63,7 +64,8 @@ export default ((store, api, sharedActions) => {
63
64
  try {
64
65
  await api.auth.resetPasswordViaEmail({
65
66
  identifier,
66
- identifierType
67
+ identifierType,
68
+ recaptchaToken
67
69
  });
68
70
  setForgotPasswordState({
69
71
  loading: false,
@@ -144,7 +146,8 @@ export default ((store, api, sharedActions) => {
144
146
  loading: true,
145
147
  error: undefined,
146
148
  identifier: payload.identifier,
147
- identifierType: payload.identifierType
149
+ identifierType: payload.identifierType,
150
+ recaptchaToken: payload.recaptchaToken
148
151
  });
149
152
  try {
150
153
  const strategies = await api.auth.getPasswordRecoveryStrategies();
@@ -21,6 +21,7 @@ export interface ForgotPasswordState {
21
21
  passwordConfig: Partial<TestConfig> | null;
22
22
  identifier: string;
23
23
  identifierType: EIdentifierType;
24
+ recaptchaToken?: string;
24
25
  loading: boolean;
25
26
  sessionId?: string;
26
27
  userId?: string;
@@ -38,6 +39,7 @@ export interface IResetPasswordPayload extends WithCallback<IResetPassword> {
38
39
  export interface IDeterminePasswordRecoveryStrategyPayload {
39
40
  identifier: string;
40
41
  identifierType: EIdentifierType;
42
+ recaptchaToken?: string;
41
43
  }
42
44
  export type IVerifyPasswordViaSmsPayload = {
43
45
  otcToken: string;
@@ -1,6 +1,6 @@
1
1
  import { IAuthStrategiesConfig, IVendorConfig, TestConfig } from '@frontegg/rest-api';
2
2
  import { FronteggState, RestApi, RetryConfig, SharedActions, WithCallback, WithRetryConfig } from '../../../interfaces';
3
- import { CaptchaPolicyState, GlobalPolicyState, LockoutPolicyState, MfaPolicyState, PasswordHistoryPolicyState, PasswordPolicyState, PasswordRotationPolicyState, PublicAuthStrategyPolicyState, PublicPolicyState, SaveSecurityPolicyLockoutPayload, SaveSecurityPolicyMfaPayload, SaveSecurityPolicyPasswordHistoryPayload, SaveSecurityPolicyPasswordRotationPayload, SecurityPolicyState } from './interfaces';
3
+ import { CaptchaPolicyState, GlobalPolicyState, LockoutPolicyState, MfaPolicyState, PasswordHistoryPolicyState, PasswordPolicyState, PasswordRotationPolicyState, PublicAuthStrategyPolicyState, PublicPolicyState, RoleAssignmentPolicyState, SaveSecurityPolicyLockoutPayload, SaveSecurityPolicyMfaPayload, SaveSecurityPolicyPasswordHistoryPayload, SaveSecurityPolicyPasswordRotationPayload, SecurityPolicyState } from './interfaces';
4
4
  declare const _default: (store: FronteggState, api: RestApi, sharedActions: SharedActions) => {
5
5
  setSecurityPolicyState: (state: Partial<SecurityPolicyState>) => void;
6
6
  setSecurityPolicyGlobalState: (state: Partial<GlobalPolicyState>) => void;
@@ -16,9 +16,11 @@ declare const _default: (store: FronteggState, api: RestApi, sharedActions: Shar
16
16
  resetSecurityPolicyState: () => void;
17
17
  setSecurityPolicyPasswordState: (state: Partial<PasswordPolicyState>) => void;
18
18
  setSecurityPolicyAuthStrategyPublicState: (state: Partial<PublicAuthStrategyPolicyState>) => void;
19
+ setRoleAssignmentPolicyState: (state: Partial<RoleAssignmentPolicyState>) => void;
19
20
  loadSecurityPolicy: (payload?: WithRetryConfig<{}>) => Promise<void>;
20
21
  loadGlobalSecurityPolicy: (payload?: WithRetryConfig<{}>) => Promise<void>;
21
22
  loadPublicSecurityPolicy: (payload?: WithRetryConfig<{}>) => Promise<void>;
23
+ loadRoleAssignmentPolicy: (payload?: WithRetryConfig<{}>) => Promise<void>;
22
24
  loadVendorPasswordConfig: (payload?: WithCallback<WithRetryConfig<{}>, Partial<TestConfig>>) => Promise<void>;
23
25
  loadSecurityPolicyMfa: (payload?: WithRetryConfig<{}>) => Promise<void>;
24
26
  loadSecurityPolicyVendorMfa: (payload?: WithRetryConfig<{}>) => Promise<void>;
@@ -9,6 +9,7 @@ import { getTenantRotationPeriod } from './helpers/helpers';
9
9
  import { initialState } from './state';
10
10
  export default ((store, api, sharedActions) => {
11
11
  const actions = sharedActions;
12
+ let pendingRoleAssignmentPolicyRequest = null;
12
13
 
13
14
  /**
14
15
  * @protected
@@ -102,6 +103,9 @@ export default ((store, api, sharedActions) => {
102
103
  const setSecurityPolicyAuthStrategyPublicState = state => {
103
104
  Object.assign(store.auth.securityPolicyState.publicAuthStrategyPolicy, state);
104
105
  };
106
+ const setRoleAssignmentPolicyState = state => {
107
+ Object.assign(store.auth.securityPolicyState.roleAssignmentPolicy, state);
108
+ };
105
109
  const resetSecurityPolicyState = () => {
106
110
  deepResetState(store, ['auth', 'securityPolicyState'], initialState);
107
111
  };
@@ -154,6 +158,34 @@ export default ((store, api, sharedActions) => {
154
158
  });
155
159
  }
156
160
  };
161
+ const loadRoleAssignmentPolicy = async payload => {
162
+ // Several role pickers can mount at once, all before the first response lands.
163
+ // Share the in-flight request so they do not each trigger their own call.
164
+ if (pendingRoleAssignmentPolicyRequest) {
165
+ return pendingRoleAssignmentPolicyRequest;
166
+ }
167
+ setRoleAssignmentPolicyState({
168
+ loading: true,
169
+ error: null
170
+ });
171
+ pendingRoleAssignmentPolicyRequest = (async () => {
172
+ try {
173
+ const policy = await retryIfNeeded(() => api.auth.getRoleAssignmentPolicy(), payload == null ? void 0 : payload.retryConfig);
174
+ setRoleAssignmentPolicyState({
175
+ policy,
176
+ loading: false
177
+ });
178
+ } catch (e) {
179
+ setRoleAssignmentPolicyState({
180
+ error: errorHandler(e),
181
+ loading: false
182
+ });
183
+ } finally {
184
+ pendingRoleAssignmentPolicyRequest = null;
185
+ }
186
+ })();
187
+ return pendingRoleAssignmentPolicyRequest;
188
+ };
157
189
  const loadVendorPasswordConfig = async payload => {
158
190
  setSecurityPolicyPasswordState({
159
191
  loading: true,
@@ -468,10 +500,12 @@ export default ((store, api, sharedActions) => {
468
500
  resetSecurityPolicyState,
469
501
  setSecurityPolicyPasswordState,
470
502
  setSecurityPolicyAuthStrategyPublicState,
503
+ setRoleAssignmentPolicyState,
471
504
  // actions
472
505
  loadSecurityPolicy,
473
506
  loadGlobalSecurityPolicy,
474
507
  loadPublicSecurityPolicy,
508
+ loadRoleAssignmentPolicy,
475
509
  loadVendorPasswordConfig,
476
510
  loadSecurityPolicyMfa,
477
511
  loadSecurityPolicyVendorMfa,
@@ -1,4 +1,4 @@
1
- import { IAuthStrategiesConfig, ISaveSecurityPolicyLockout, ISaveSecurityPolicyMfa, ISaveSecurityPolicyPasswordHistory, ISecurityPolicy, ISecurityPolicyCaptcha, ISecurityPolicyLockout, ISecurityPolicyMfa, ISecurityPolicyPasswordConfig, ISecurityPolicyPasswordHistory, ISecurityPolicyPasswordRotation, IVendorConfig } from '@frontegg/rest-api';
1
+ import { IAuthStrategiesConfig, ISaveSecurityPolicyLockout, ISaveSecurityPolicyMfa, ISaveSecurityPolicyPasswordHistory, ISecurityPolicy, ISecurityPolicyCaptcha, ISecurityPolicyLockout, ISecurityPolicyMfa, ISecurityPolicyPasswordConfig, ISecurityPolicyPasswordHistory, ISecurityPolicyPasswordRotation, IRoleAssignmentPolicy, IVendorConfig } from '@frontegg/rest-api';
2
2
  import { WithCallback, WithStatus } from '../../../interfaces';
3
3
  type PolicyState<T> = WithStatus & {
4
4
  policy?: T;
@@ -12,9 +12,11 @@ export type PasswordHistoryPolicyState = PolicyState<ISecurityPolicyPasswordHist
12
12
  export type PasswordRotationPolicyState = PolicyState<ISecurityPolicyPasswordRotation>;
13
13
  export type PasswordPolicyState = PolicyState<ISecurityPolicyPasswordConfig>;
14
14
  export type PublicAuthStrategyPolicyState = PolicyState<IAuthStrategiesConfig>;
15
+ export type RoleAssignmentPolicyState = PolicyState<IRoleAssignmentPolicy>;
15
16
  export interface SecurityPolicyState {
16
17
  globalPolicy: GlobalPolicyState;
17
18
  publicPolicy: PublicPolicyState;
19
+ roleAssignmentPolicy: RoleAssignmentPolicyState;
18
20
  mfaPolicy: MfaPolicyState;
19
21
  vendorMfaPolicy: MfaPolicyState;
20
22
  lockoutPolicy: LockoutPolicyState;
@@ -6,6 +6,9 @@ export const initialState = {
6
6
  publicPolicy: {
7
7
  loading: false
8
8
  },
9
+ roleAssignmentPolicy: {
10
+ loading: false
11
+ },
9
12
  vendorMfaPolicy: {
10
13
  loading: true
11
14
  },
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- /** @license Frontegg v7.124.0
1
+ /** @license Frontegg v7.125.0
2
2
  *
3
3
  * This source code is licensed under the MIT license found in the
4
4
  * LICENSE file in the root directory of this source tree.
@@ -15,9 +15,11 @@ declare const _default: (store: FronteggState, api: RestApi, actions: SharedActi
15
15
  resetSecurityPolicyState: () => void;
16
16
  setSecurityPolicyPasswordState: (state: Partial<import("../../../auth").PasswordPolicyState>) => void;
17
17
  setSecurityPolicyAuthStrategyPublicState: (state: Partial<import("../../../auth").PublicAuthStrategyPolicyState>) => void;
18
+ setRoleAssignmentPolicyState: (state: Partial<import("../../../auth").RoleAssignmentPolicyState>) => void;
18
19
  loadSecurityPolicy: (payload?: import("../../../interfaces").WithRetryConfig<{}>) => Promise<void>;
19
20
  loadGlobalSecurityPolicy: (payload?: import("../../../interfaces").WithRetryConfig<{}>) => Promise<void>;
20
21
  loadPublicSecurityPolicy: (payload?: import("../../../interfaces").WithRetryConfig<{}>) => Promise<void>;
22
+ loadRoleAssignmentPolicy: (payload?: import("../../../interfaces").WithRetryConfig<{}>) => Promise<void>;
21
23
  loadVendorPasswordConfig: (payload?: import("../../../interfaces").WithCallback<import("../../../interfaces").WithRetryConfig<{}>, Partial<import("@frontegg/rest-api").TestConfig>>) => Promise<void>;
22
24
  loadSecurityPolicyMfa: (payload?: import("../../../interfaces").WithRetryConfig<{}>) => Promise<void>;
23
25
  loadSecurityPolicyVendorMfa: (payload?: import("../../../interfaces").WithRetryConfig<{}>) => Promise<void>;
@@ -9,7 +9,7 @@ import { policyDemo, policyLockoutDemo, policyMfaDemo, policyPasswordHistoryDemo
9
9
  import { mockActionsExpect } from '../../helpers';
10
10
  export default ((store, api, actions) => {
11
11
  const originalActions = buildSecurityPolicyActions(store, api, actions);
12
- const mockedActions = mockActionsExpect(originalActions, ['setSecurityPolicyState', 'setSecurityPolicyGlobalState', 'setSecurityPolicyPublicState', 'setSecurityPolicyMfaState', 'setSecurityPolicyVendorMfaState', 'setSecurityPolicyLockoutState', 'setSecurityPolicyVendorLockoutState', 'setSecurityPolicyCaptchaState', 'setSecurityPolicyPasswordHistoryState', 'setSecurityPolicyVendorPasswordHistoryState', 'resetSecurityPolicyState', 'setSecurityPolicyPasswordState', 'setSecurityPolicyAuthStrategyPublicState']);
12
+ const mockedActions = mockActionsExpect(originalActions, ['setSecurityPolicyState', 'setSecurityPolicyGlobalState', 'setSecurityPolicyPublicState', 'setSecurityPolicyMfaState', 'setSecurityPolicyVendorMfaState', 'setSecurityPolicyLockoutState', 'setSecurityPolicyVendorLockoutState', 'setSecurityPolicyCaptchaState', 'setSecurityPolicyPasswordHistoryState', 'setSecurityPolicyVendorPasswordHistoryState', 'resetSecurityPolicyState', 'setSecurityPolicyPasswordState', 'setSecurityPolicyAuthStrategyPublicState', 'setRoleAssignmentPolicyState']);
13
13
  mockedActions.loadSecurityPolicy = async () => {
14
14
  mockedActions.setSecurityPolicyGlobalState({
15
15
  loading: true,
@@ -39,6 +39,25 @@ export default ((store, api, actions) => {
39
39
  });
40
40
  }
41
41
  };
42
+ mockedActions.loadRoleAssignmentPolicy = async () => {
43
+ mockedActions.setRoleAssignmentPolicyState({
44
+ loading: true,
45
+ error: null
46
+ });
47
+ try {
48
+ mockedActions.setRoleAssignmentPolicyState({
49
+ policy: {
50
+ restrictEqualLevelRoleAssignment: false
51
+ },
52
+ loading: false
53
+ });
54
+ } catch (e) {
55
+ mockedActions.setRoleAssignmentPolicyState({
56
+ error: errorHandler(e),
57
+ loading: false
58
+ });
59
+ }
60
+ };
42
61
  mockedActions.saveSecurityPolicyMfa = async payload => {
43
62
  var _newSecurityPolicy$id;
44
63
  const {
package/mocks/dummy.js CHANGED
@@ -126,6 +126,7 @@ export const publicSecurityPolicy = {
126
126
  allowNotVerifiedUsersLogin: false,
127
127
  apiTokensEnabled: true,
128
128
  forcePermissions: false,
129
+ restrictEqualLevelRoleAssignment: false,
129
130
  authStrategy: AuthStrategyEnum.EmailAndPassword,
130
131
  machineToMachineAuthStrategy: MachineToMachineAuthStrategy.ClientCredentials
131
132
  };
@@ -62,7 +62,8 @@ var _default = (store, api, sharedActions) => {
62
62
  const sendPasswordRecoveryEmail = async () => {
63
63
  const {
64
64
  identifier,
65
- identifierType
65
+ identifierType,
66
+ recaptchaToken
66
67
  } = store.auth.forgotPasswordState;
67
68
  setForgotPasswordState({
68
69
  loading: true
@@ -70,7 +71,8 @@ var _default = (store, api, sharedActions) => {
70
71
  try {
71
72
  await api.auth.resetPasswordViaEmail({
72
73
  identifier,
73
- identifierType
74
+ identifierType,
75
+ recaptchaToken
74
76
  });
75
77
  setForgotPasswordState({
76
78
  loading: false,
@@ -151,7 +153,8 @@ var _default = (store, api, sharedActions) => {
151
153
  loading: true,
152
154
  error: undefined,
153
155
  identifier: payload.identifier,
154
- identifierType: payload.identifierType
156
+ identifierType: payload.identifierType,
157
+ recaptchaToken: payload.recaptchaToken
155
158
  });
156
159
  try {
157
160
  const strategies = await api.auth.getPasswordRecoveryStrategies();
@@ -16,6 +16,7 @@ const _excluded = ["callback"],
16
16
  _excluded4 = ["callback"];
17
17
  var _default = (store, api, sharedActions) => {
18
18
  const actions = sharedActions;
19
+ let pendingRoleAssignmentPolicyRequest = null;
19
20
 
20
21
  /**
21
22
  * @protected
@@ -109,6 +110,9 @@ var _default = (store, api, sharedActions) => {
109
110
  const setSecurityPolicyAuthStrategyPublicState = state => {
110
111
  Object.assign(store.auth.securityPolicyState.publicAuthStrategyPolicy, state);
111
112
  };
113
+ const setRoleAssignmentPolicyState = state => {
114
+ Object.assign(store.auth.securityPolicyState.roleAssignmentPolicy, state);
115
+ };
112
116
  const resetSecurityPolicyState = () => {
113
117
  (0, _helpers.deepResetState)(store, ['auth', 'securityPolicyState'], _state.initialState);
114
118
  };
@@ -161,6 +165,34 @@ var _default = (store, api, sharedActions) => {
161
165
  });
162
166
  }
163
167
  };
168
+ const loadRoleAssignmentPolicy = async payload => {
169
+ // Several role pickers can mount at once, all before the first response lands.
170
+ // Share the in-flight request so they do not each trigger their own call.
171
+ if (pendingRoleAssignmentPolicyRequest) {
172
+ return pendingRoleAssignmentPolicyRequest;
173
+ }
174
+ setRoleAssignmentPolicyState({
175
+ loading: true,
176
+ error: null
177
+ });
178
+ pendingRoleAssignmentPolicyRequest = (async () => {
179
+ try {
180
+ const policy = await (0, _helpers.retryIfNeeded)(() => api.auth.getRoleAssignmentPolicy(), payload == null ? void 0 : payload.retryConfig);
181
+ setRoleAssignmentPolicyState({
182
+ policy,
183
+ loading: false
184
+ });
185
+ } catch (e) {
186
+ setRoleAssignmentPolicyState({
187
+ error: (0, _helpers.errorHandler)(e),
188
+ loading: false
189
+ });
190
+ } finally {
191
+ pendingRoleAssignmentPolicyRequest = null;
192
+ }
193
+ })();
194
+ return pendingRoleAssignmentPolicyRequest;
195
+ };
164
196
  const loadVendorPasswordConfig = async payload => {
165
197
  setSecurityPolicyPasswordState({
166
198
  loading: true,
@@ -475,10 +507,12 @@ var _default = (store, api, sharedActions) => {
475
507
  resetSecurityPolicyState,
476
508
  setSecurityPolicyPasswordState,
477
509
  setSecurityPolicyAuthStrategyPublicState,
510
+ setRoleAssignmentPolicyState,
478
511
  // actions
479
512
  loadSecurityPolicy,
480
513
  loadGlobalSecurityPolicy,
481
514
  loadPublicSecurityPolicy,
515
+ loadRoleAssignmentPolicy,
482
516
  loadVendorPasswordConfig,
483
517
  loadSecurityPolicyMfa,
484
518
  loadSecurityPolicyVendorMfa,
@@ -12,6 +12,9 @@ const initialState = {
12
12
  publicPolicy: {
13
13
  loading: false
14
14
  },
15
+ roleAssignmentPolicy: {
16
+ loading: false
17
+ },
15
18
  vendorMfaPolicy: {
16
19
  loading: true
17
20
  },
package/node/index.js CHANGED
@@ -1,4 +1,4 @@
1
- /** @license Frontegg v7.124.0
1
+ /** @license Frontegg v7.125.0
2
2
  *
3
3
  * This source code is licensed under the MIT license found in the
4
4
  * LICENSE file in the root directory of this source tree.
@@ -16,7 +16,7 @@ const _excluded = ["callback"],
16
16
  _excluded3 = ["callback"];
17
17
  var _default = (store, api, actions) => {
18
18
  const originalActions = (0, _SecurityPolicyState.buildSecurityPolicyActions)(store, api, actions);
19
- const mockedActions = (0, _helpers2.mockActionsExpect)(originalActions, ['setSecurityPolicyState', 'setSecurityPolicyGlobalState', 'setSecurityPolicyPublicState', 'setSecurityPolicyMfaState', 'setSecurityPolicyVendorMfaState', 'setSecurityPolicyLockoutState', 'setSecurityPolicyVendorLockoutState', 'setSecurityPolicyCaptchaState', 'setSecurityPolicyPasswordHistoryState', 'setSecurityPolicyVendorPasswordHistoryState', 'resetSecurityPolicyState', 'setSecurityPolicyPasswordState', 'setSecurityPolicyAuthStrategyPublicState']);
19
+ const mockedActions = (0, _helpers2.mockActionsExpect)(originalActions, ['setSecurityPolicyState', 'setSecurityPolicyGlobalState', 'setSecurityPolicyPublicState', 'setSecurityPolicyMfaState', 'setSecurityPolicyVendorMfaState', 'setSecurityPolicyLockoutState', 'setSecurityPolicyVendorLockoutState', 'setSecurityPolicyCaptchaState', 'setSecurityPolicyPasswordHistoryState', 'setSecurityPolicyVendorPasswordHistoryState', 'resetSecurityPolicyState', 'setSecurityPolicyPasswordState', 'setSecurityPolicyAuthStrategyPublicState', 'setRoleAssignmentPolicyState']);
20
20
  mockedActions.loadSecurityPolicy = async () => {
21
21
  mockedActions.setSecurityPolicyGlobalState({
22
22
  loading: true,
@@ -46,6 +46,25 @@ var _default = (store, api, actions) => {
46
46
  });
47
47
  }
48
48
  };
49
+ mockedActions.loadRoleAssignmentPolicy = async () => {
50
+ mockedActions.setRoleAssignmentPolicyState({
51
+ loading: true,
52
+ error: null
53
+ });
54
+ try {
55
+ mockedActions.setRoleAssignmentPolicyState({
56
+ policy: {
57
+ restrictEqualLevelRoleAssignment: false
58
+ },
59
+ loading: false
60
+ });
61
+ } catch (e) {
62
+ mockedActions.setRoleAssignmentPolicyState({
63
+ error: (0, _helpers.errorHandler)(e),
64
+ loading: false
65
+ });
66
+ }
67
+ };
49
68
  mockedActions.saveSecurityPolicyMfa = async payload => {
50
69
  var _newSecurityPolicy$id;
51
70
  const {
@@ -142,6 +142,7 @@ const publicSecurityPolicy = {
142
142
  allowNotVerifiedUsersLogin: false,
143
143
  apiTokensEnabled: true,
144
144
  forcePermissions: false,
145
+ restrictEqualLevelRoleAssignment: false,
145
146
  authStrategy: _restApi.AuthStrategyEnum.EmailAndPassword,
146
147
  machineToMachineAuthStrategy: _restApi.MachineToMachineAuthStrategy.ClientCredentials
147
148
  };
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@frontegg/redux-store",
3
- "version": "7.124.0",
3
+ "version": "7.125.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.124.0",
10
+ "@frontegg/rest-api": "7.125.0",
11
11
  "fast-deep-equal": "3.1.3",
12
12
  "get-value": "^3.0.1",
13
13
  "proxy-compare": "^3.0.0",