@frontegg/redux-store 7.87.0 → 7.88.0-alpha.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/SignUpState/actions.d.ts +0 -1
- package/auth/SignUpState/actions.js +79 -3
- package/auth/SignUpState/state.js +4 -0
- package/auth/helpers.js +8 -2
- package/auth/interfaces.d.ts +2 -1
- package/auth/interfaces.js +1 -0
- package/index.js +1 -1
- package/mocks/auth-mocks/signUpActions.mocks.d.ts +0 -1
- package/node/auth/SignUpState/actions.js +79 -3
- package/node/auth/SignUpState/state.js +4 -0
- package/node/auth/helpers.js +8 -2
- package/node/auth/interfaces.js +1 -0
- package/node/index.js +1 -1
- package/package.json +2 -2
|
@@ -6,7 +6,6 @@ declare const _default: (store: FronteggState, api: RestApi, sharedActions: Shar
|
|
|
6
6
|
resetSignUpState: () => void;
|
|
7
7
|
resetSignUpStateSoft: () => void;
|
|
8
8
|
signUpUser: (_payload: ISignUpUserPayload) => Promise<void>;
|
|
9
|
-
signUpUserWithPhoneNumber: (_payload: ISignUpUserPayload) => Promise<void>;
|
|
10
9
|
loadAllowSignUps: (payload?: WithCallback<WithRetryConfig<{}>, IVendorConfig>) => Promise<void>;
|
|
11
10
|
loadSignUpStrategies: () => Promise<void>;
|
|
12
11
|
};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
3
|
const _excluded = ["events", "url"],
|
|
4
|
-
_excluded2 = ["events", "url"]
|
|
4
|
+
_excluded2 = ["events", "url"],
|
|
5
|
+
_excluded3 = ["events", "url"];
|
|
5
6
|
import { SignUpStage } from './interfaces';
|
|
6
7
|
import { deepResetState, errorHandler, retryIfNeeded } from '../../helpers';
|
|
7
8
|
import { initialState } from './state';
|
|
@@ -114,7 +115,7 @@ export default ((store, api, sharedActions) => {
|
|
|
114
115
|
});
|
|
115
116
|
}
|
|
116
117
|
};
|
|
117
|
-
const
|
|
118
|
+
const signUpUserWithUsername = async _payload => {
|
|
118
119
|
const {
|
|
119
120
|
events
|
|
120
121
|
} = _payload,
|
|
@@ -122,10 +123,86 @@ export default ((store, api, sharedActions) => {
|
|
|
122
123
|
setSignUpState({
|
|
123
124
|
loading: true
|
|
124
125
|
});
|
|
126
|
+
if (!payload.username) {
|
|
127
|
+
throw new Error('Username is required for username signup');
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
const {
|
|
131
|
+
routes,
|
|
132
|
+
onRedirectTo
|
|
133
|
+
} = store.auth;
|
|
134
|
+
const {
|
|
135
|
+
shouldActivate,
|
|
136
|
+
user,
|
|
137
|
+
tenantId,
|
|
138
|
+
userId,
|
|
139
|
+
tenants = [],
|
|
140
|
+
activeTenant,
|
|
141
|
+
activationToken
|
|
142
|
+
} = await api.auth.signUpUserWithUsername(prepareIdentifiersForSignup(payload));
|
|
143
|
+
if (!payload.invitationToken) {
|
|
144
|
+
reportSignupCompletion(payload, userId, tenantId, activationToken, events, AuthenticationTypes.USERNAME);
|
|
145
|
+
}
|
|
146
|
+
if (!shouldActivate && user && isMfaRequired(user, store.root.appName)) {
|
|
147
|
+
const mfaRequiredState = await actions.getMfaRequiredState(user, DEFAULT_RETRY_CONFIG, true, payload.email);
|
|
148
|
+
actions.setAuthState(mfaRequiredState);
|
|
149
|
+
onRedirectTo(routes.loginUrl);
|
|
150
|
+
} else if (shouldActivate && activationToken) {
|
|
151
|
+
const searchParams = new URLSearchParams({
|
|
152
|
+
userId: userId || '',
|
|
153
|
+
token: activationToken || ''
|
|
154
|
+
});
|
|
155
|
+
const url = `${routes.activateWithOTCUrl}?${searchParams.toString()}`;
|
|
156
|
+
setSignUpState({
|
|
157
|
+
loading: false,
|
|
158
|
+
shouldActivate,
|
|
159
|
+
stage: SignUpStage.SignUpSuccess
|
|
160
|
+
});
|
|
161
|
+
onRedirectTo(url);
|
|
162
|
+
} else {
|
|
163
|
+
const tenantsState = store.auth.tenantsState;
|
|
164
|
+
setSignUpState({
|
|
165
|
+
loading: false,
|
|
166
|
+
shouldActivate,
|
|
167
|
+
stage: SignUpStage.SignUpSuccess
|
|
168
|
+
});
|
|
169
|
+
actions.setAuthState({
|
|
170
|
+
user,
|
|
171
|
+
isAuthenticated: !!(user != null && user.accessToken),
|
|
172
|
+
tenantsState: _extends({}, tenantsState, {
|
|
173
|
+
tenants,
|
|
174
|
+
activeTenant
|
|
175
|
+
})
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
} catch (e) {
|
|
179
|
+
contextHolder.setAccessToken(null);
|
|
180
|
+
contextHolder.setUser(null);
|
|
181
|
+
setSignUpState({
|
|
182
|
+
error: errorHandler(e)
|
|
183
|
+
});
|
|
184
|
+
} finally {
|
|
185
|
+
setSignUpState({
|
|
186
|
+
loading: false
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
const signUpUser = async _payload => {
|
|
191
|
+
const {
|
|
192
|
+
events
|
|
193
|
+
} = _payload,
|
|
194
|
+
payload = _objectWithoutPropertiesLoose(_payload, _excluded3);
|
|
195
|
+
setSignUpState({
|
|
196
|
+
loading: true
|
|
197
|
+
});
|
|
125
198
|
const phoneNumberStrategy = store.auth.signUpState.strategies.phoneNumber;
|
|
126
199
|
if (phoneNumberStrategy != null && phoneNumberStrategy.required && phoneNumberStrategy != null && phoneNumberStrategy.enabled && payload.phoneNumber) {
|
|
127
200
|
return signUpUserWithPhoneNumber(_payload);
|
|
128
201
|
}
|
|
202
|
+
const usernameStrategy = store.auth.signUpState.strategies.username;
|
|
203
|
+
if (usernameStrategy != null && usernameStrategy.required && usernameStrategy != null && usernameStrategy.enabled && payload.username) {
|
|
204
|
+
return signUpUserWithUsername(_payload);
|
|
205
|
+
}
|
|
129
206
|
try {
|
|
130
207
|
const {
|
|
131
208
|
routes,
|
|
@@ -243,7 +320,6 @@ export default ((store, api, sharedActions) => {
|
|
|
243
320
|
resetSignUpState,
|
|
244
321
|
resetSignUpStateSoft,
|
|
245
322
|
signUpUser,
|
|
246
|
-
signUpUserWithPhoneNumber,
|
|
247
323
|
loadAllowSignUps,
|
|
248
324
|
loadSignUpStrategies
|
|
249
325
|
};
|
package/auth/helpers.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
-
const _excluded = ["phoneNumber", "email"],
|
|
3
|
+
const _excluded = ["phoneNumber", "email", "username"],
|
|
4
4
|
_excluded2 = ["authenticatedUrl"];
|
|
5
5
|
import { ContextHolder } from '@frontegg/rest-api';
|
|
6
6
|
import { defaultFronteggRoutes } from './LoginState/consts';
|
|
@@ -56,7 +56,8 @@ export const getUri = urlStrategy => {
|
|
|
56
56
|
export const prepareIdentifiersForSignup = payload => {
|
|
57
57
|
const {
|
|
58
58
|
phoneNumber,
|
|
59
|
-
email
|
|
59
|
+
email,
|
|
60
|
+
username
|
|
60
61
|
} = payload,
|
|
61
62
|
finalDto = _objectWithoutPropertiesLoose(payload, _excluded);
|
|
62
63
|
if (email != null && email.length) {
|
|
@@ -69,6 +70,11 @@ export const prepareIdentifiersForSignup = payload => {
|
|
|
69
70
|
phoneNumber
|
|
70
71
|
});
|
|
71
72
|
}
|
|
73
|
+
if (username != null && username.length) {
|
|
74
|
+
Object.assign(finalDto, {
|
|
75
|
+
username
|
|
76
|
+
});
|
|
77
|
+
}
|
|
72
78
|
return finalDto;
|
|
73
79
|
};
|
|
74
80
|
export const isAuthRoute = (path, routes) => {
|
package/auth/interfaces.d.ts
CHANGED
|
@@ -262,7 +262,8 @@ export declare enum UserVerifiedOriginTypes {
|
|
|
262
262
|
export declare enum AuthenticationTypes {
|
|
263
263
|
SOCIAL_LOGIN = "SOCIAL_LOGIN",
|
|
264
264
|
PASSWORD = "PASSWORD",
|
|
265
|
-
PHONE_NUMBER = "PHONE_NUMBER"
|
|
265
|
+
PHONE_NUMBER = "PHONE_NUMBER",
|
|
266
|
+
USERNAME = "USERNAME"
|
|
266
267
|
}
|
|
267
268
|
export declare enum AdminPortalPagesForEvents {
|
|
268
269
|
profile = "profile",
|
package/auth/interfaces.js
CHANGED
|
@@ -19,6 +19,7 @@ export let AuthenticationTypes;
|
|
|
19
19
|
AuthenticationTypes["SOCIAL_LOGIN"] = "SOCIAL_LOGIN";
|
|
20
20
|
AuthenticationTypes["PASSWORD"] = "PASSWORD";
|
|
21
21
|
AuthenticationTypes["PHONE_NUMBER"] = "PHONE_NUMBER";
|
|
22
|
+
AuthenticationTypes["USERNAME"] = "USERNAME";
|
|
22
23
|
})(AuthenticationTypes || (AuthenticationTypes = {}));
|
|
23
24
|
export let AdminPortalPagesForEvents;
|
|
24
25
|
|
package/index.js
CHANGED
|
@@ -4,7 +4,6 @@ declare const _default: (store: FronteggState, api: RestApi, actions: SharedActi
|
|
|
4
4
|
resetSignUpState: () => void;
|
|
5
5
|
resetSignUpStateSoft: () => void;
|
|
6
6
|
signUpUser: (_payload: import("../..").ISignUpUserPayload) => Promise<void>;
|
|
7
|
-
signUpUserWithPhoneNumber: (_payload: import("../..").ISignUpUserPayload) => Promise<void>;
|
|
8
7
|
loadAllowSignUps: (payload?: import("../../interfaces").WithCallback<import("../../interfaces").WithRetryConfig<{}>, import("dist/@frontegg/rest-api").IVendorConfig>) => Promise<void>;
|
|
9
8
|
loadSignUpStrategies: () => Promise<void>;
|
|
10
9
|
};
|
|
@@ -17,7 +17,8 @@ var _gtm = require("../../helpers/gtm");
|
|
|
17
17
|
var _constants = require("../../constants");
|
|
18
18
|
var _toolkit = require("../../toolkit");
|
|
19
19
|
const _excluded = ["events", "url"],
|
|
20
|
-
_excluded2 = ["events", "url"]
|
|
20
|
+
_excluded2 = ["events", "url"],
|
|
21
|
+
_excluded3 = ["events", "url"];
|
|
21
22
|
var _default = (store, api, sharedActions) => {
|
|
22
23
|
const actions = sharedActions;
|
|
23
24
|
const contextHolder = _restApi.ContextHolder.for(store.root.appName);
|
|
@@ -121,7 +122,7 @@ var _default = (store, api, sharedActions) => {
|
|
|
121
122
|
});
|
|
122
123
|
}
|
|
123
124
|
};
|
|
124
|
-
const
|
|
125
|
+
const signUpUserWithUsername = async _payload => {
|
|
125
126
|
const {
|
|
126
127
|
events
|
|
127
128
|
} = _payload,
|
|
@@ -129,10 +130,86 @@ var _default = (store, api, sharedActions) => {
|
|
|
129
130
|
setSignUpState({
|
|
130
131
|
loading: true
|
|
131
132
|
});
|
|
133
|
+
if (!payload.username) {
|
|
134
|
+
throw new Error('Username is required for username signup');
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const {
|
|
138
|
+
routes,
|
|
139
|
+
onRedirectTo
|
|
140
|
+
} = store.auth;
|
|
141
|
+
const {
|
|
142
|
+
shouldActivate,
|
|
143
|
+
user,
|
|
144
|
+
tenantId,
|
|
145
|
+
userId,
|
|
146
|
+
tenants = [],
|
|
147
|
+
activeTenant,
|
|
148
|
+
activationToken
|
|
149
|
+
} = await api.auth.signUpUserWithUsername((0, _helpers2.prepareIdentifiersForSignup)(payload));
|
|
150
|
+
if (!payload.invitationToken) {
|
|
151
|
+
reportSignupCompletion(payload, userId, tenantId, activationToken, events, _interfaces2.AuthenticationTypes.USERNAME);
|
|
152
|
+
}
|
|
153
|
+
if (!shouldActivate && user && (0, _helpers2.isMfaRequired)(user, store.root.appName)) {
|
|
154
|
+
const mfaRequiredState = await actions.getMfaRequiredState(user, _constants.DEFAULT_RETRY_CONFIG, true, payload.email);
|
|
155
|
+
actions.setAuthState(mfaRequiredState);
|
|
156
|
+
onRedirectTo(routes.loginUrl);
|
|
157
|
+
} else if (shouldActivate && activationToken) {
|
|
158
|
+
const searchParams = new URLSearchParams({
|
|
159
|
+
userId: userId || '',
|
|
160
|
+
token: activationToken || ''
|
|
161
|
+
});
|
|
162
|
+
const url = `${routes.activateWithOTCUrl}?${searchParams.toString()}`;
|
|
163
|
+
setSignUpState({
|
|
164
|
+
loading: false,
|
|
165
|
+
shouldActivate,
|
|
166
|
+
stage: _interfaces.SignUpStage.SignUpSuccess
|
|
167
|
+
});
|
|
168
|
+
onRedirectTo(url);
|
|
169
|
+
} else {
|
|
170
|
+
const tenantsState = store.auth.tenantsState;
|
|
171
|
+
setSignUpState({
|
|
172
|
+
loading: false,
|
|
173
|
+
shouldActivate,
|
|
174
|
+
stage: _interfaces.SignUpStage.SignUpSuccess
|
|
175
|
+
});
|
|
176
|
+
actions.setAuthState({
|
|
177
|
+
user,
|
|
178
|
+
isAuthenticated: !!(user != null && user.accessToken),
|
|
179
|
+
tenantsState: (0, _extends2.default)({}, tenantsState, {
|
|
180
|
+
tenants,
|
|
181
|
+
activeTenant
|
|
182
|
+
})
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
} catch (e) {
|
|
186
|
+
contextHolder.setAccessToken(null);
|
|
187
|
+
contextHolder.setUser(null);
|
|
188
|
+
setSignUpState({
|
|
189
|
+
error: (0, _helpers.errorHandler)(e)
|
|
190
|
+
});
|
|
191
|
+
} finally {
|
|
192
|
+
setSignUpState({
|
|
193
|
+
loading: false
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
const signUpUser = async _payload => {
|
|
198
|
+
const {
|
|
199
|
+
events
|
|
200
|
+
} = _payload,
|
|
201
|
+
payload = (0, _objectWithoutPropertiesLoose2.default)(_payload, _excluded3);
|
|
202
|
+
setSignUpState({
|
|
203
|
+
loading: true
|
|
204
|
+
});
|
|
132
205
|
const phoneNumberStrategy = store.auth.signUpState.strategies.phoneNumber;
|
|
133
206
|
if (phoneNumberStrategy != null && phoneNumberStrategy.required && phoneNumberStrategy != null && phoneNumberStrategy.enabled && payload.phoneNumber) {
|
|
134
207
|
return signUpUserWithPhoneNumber(_payload);
|
|
135
208
|
}
|
|
209
|
+
const usernameStrategy = store.auth.signUpState.strategies.username;
|
|
210
|
+
if (usernameStrategy != null && usernameStrategy.required && usernameStrategy != null && usernameStrategy.enabled && payload.username) {
|
|
211
|
+
return signUpUserWithUsername(_payload);
|
|
212
|
+
}
|
|
136
213
|
try {
|
|
137
214
|
const {
|
|
138
215
|
routes,
|
|
@@ -250,7 +327,6 @@ var _default = (store, api, sharedActions) => {
|
|
|
250
327
|
resetSignUpState,
|
|
251
328
|
resetSignUpStateSoft,
|
|
252
329
|
signUpUser,
|
|
253
|
-
signUpUserWithPhoneNumber,
|
|
254
330
|
loadAllowSignUps,
|
|
255
331
|
loadSignUpStrategies
|
|
256
332
|
};
|
package/node/auth/helpers.js
CHANGED
|
@@ -53,7 +53,7 @@ Object.keys(_helpers3).forEach(function (key) {
|
|
|
53
53
|
}
|
|
54
54
|
});
|
|
55
55
|
});
|
|
56
|
-
const _excluded = ["phoneNumber", "email"],
|
|
56
|
+
const _excluded = ["phoneNumber", "email", "username"],
|
|
57
57
|
_excluded2 = ["authenticatedUrl"];
|
|
58
58
|
const isMfaRequired = (user, appName) => {
|
|
59
59
|
const contextHolder = _restApi.ContextHolder.for(appName);
|
|
@@ -108,7 +108,8 @@ exports.getUri = getUri;
|
|
|
108
108
|
const prepareIdentifiersForSignup = payload => {
|
|
109
109
|
const {
|
|
110
110
|
phoneNumber,
|
|
111
|
-
email
|
|
111
|
+
email,
|
|
112
|
+
username
|
|
112
113
|
} = payload,
|
|
113
114
|
finalDto = (0, _objectWithoutPropertiesLoose2.default)(payload, _excluded);
|
|
114
115
|
if (email != null && email.length) {
|
|
@@ -121,6 +122,11 @@ const prepareIdentifiersForSignup = payload => {
|
|
|
121
122
|
phoneNumber
|
|
122
123
|
});
|
|
123
124
|
}
|
|
125
|
+
if (username != null && username.length) {
|
|
126
|
+
Object.assign(finalDto, {
|
|
127
|
+
username
|
|
128
|
+
});
|
|
129
|
+
}
|
|
124
130
|
return finalDto;
|
|
125
131
|
};
|
|
126
132
|
exports.prepareIdentifiersForSignup = prepareIdentifiersForSignup;
|
package/node/auth/interfaces.js
CHANGED
|
@@ -28,6 +28,7 @@ exports.AuthenticationTypes = AuthenticationTypes;
|
|
|
28
28
|
AuthenticationTypes["SOCIAL_LOGIN"] = "SOCIAL_LOGIN";
|
|
29
29
|
AuthenticationTypes["PASSWORD"] = "PASSWORD";
|
|
30
30
|
AuthenticationTypes["PHONE_NUMBER"] = "PHONE_NUMBER";
|
|
31
|
+
AuthenticationTypes["USERNAME"] = "USERNAME";
|
|
31
32
|
})(AuthenticationTypes || (exports.AuthenticationTypes = AuthenticationTypes = {}));
|
|
32
33
|
let AdminPortalPagesForEvents; // noinspection JSUnusedGlobalSymbols
|
|
33
34
|
exports.AdminPortalPagesForEvents = AdminPortalPagesForEvents;
|
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.88.0-alpha.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.88.0-alpha.0",
|
|
11
11
|
"fast-deep-equal": "3.1.3",
|
|
12
12
|
"get-value": "^3.0.1",
|
|
13
13
|
"proxy-compare": "^3.0.0",
|