@frontegg/redux-store 7.73.0 → 7.74.0-alpha.1
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/LoginState/actions/index.js +32 -13
- package/auth/LoginState/helpers.d.ts +2 -1
- package/auth/LoginState/helpers.js +3 -0
- package/index.js +1 -1
- package/node/auth/LoginState/actions/index.js +31 -12
- package/node/auth/LoginState/helpers.js +6 -1
- package/node/index.js +1 -1
- package/node/toolkit/FronteggNativeModule.js +3 -3
- package/package.json +2 -2
- package/toolkit/FronteggNativeModule.d.ts +1 -1
- package/toolkit/FronteggNativeModule.js +3 -3
|
@@ -25,7 +25,7 @@ import mfaWithWebAuthnActions from './mfaWithWebAuthn.actions';
|
|
|
25
25
|
import { LoginFlow, LoginStep } from '../interfaces';
|
|
26
26
|
import { base64urlDecode, deepResetState, delay, errorHandler, errorTraceId, GTMEventAction, publicKeyCredentialToJSON, reportGTMEvent, retryIfNeeded, withRetryConfig } from '../../../helpers';
|
|
27
27
|
import { initialState } from '../state';
|
|
28
|
-
import { getSearchParam, isEmailPayload, shouldShowPasswordRotationPromptFunc, TENANT_ID_PARAM_KEY } from '../helpers';
|
|
28
|
+
import { getSearchParam, isEmailPayload, isUsernamePayload, shouldShowPasswordRotationPromptFunc, TENANT_ID_PARAM_KEY } from '../helpers';
|
|
29
29
|
import { AuthStrategyEnum, ContextHolder, removeTabTenantFromSessionStorage, WebAuthnDeviceType } from '@frontegg/rest-api';
|
|
30
30
|
import hostedLoginAuthorizeActions from './hostedLoginAuthorize.actions';
|
|
31
31
|
import { FronteggNativeModule, isEntitlementsDeeplyEqual } from '../../../toolkit';
|
|
@@ -347,6 +347,7 @@ export default ((store, api, sharedActions) => {
|
|
|
347
347
|
const preLogin = async payload => {
|
|
348
348
|
const {
|
|
349
349
|
email,
|
|
350
|
+
username,
|
|
350
351
|
recaptchaToken,
|
|
351
352
|
invitationToken,
|
|
352
353
|
callback
|
|
@@ -357,10 +358,13 @@ export default ((store, api, sharedActions) => {
|
|
|
357
358
|
try {
|
|
358
359
|
const onRedirectTo = store.auth.onRedirectTo;
|
|
359
360
|
const tenantId = getSearchParam(TENANT_ID_PARAM_KEY);
|
|
360
|
-
const preLoginResult = await api.auth.preLoginV2({
|
|
361
|
-
email
|
|
361
|
+
const preLoginResult = await api.auth.preLoginV2(_extends({}, email ? {
|
|
362
|
+
email
|
|
363
|
+
} : {}, username ? {
|
|
364
|
+
username
|
|
365
|
+
} : {}, {
|
|
362
366
|
tenantId
|
|
363
|
-
});
|
|
367
|
+
}));
|
|
364
368
|
const {
|
|
365
369
|
address,
|
|
366
370
|
idpType
|
|
@@ -374,7 +378,8 @@ export default ((store, api, sharedActions) => {
|
|
|
374
378
|
ssoRedirectUrl += `&redirect_uri=${window.location.origin}${oidcRedirectUrl}`;
|
|
375
379
|
}
|
|
376
380
|
if (FronteggNativeModule.isLoginWithSSOAvailable()) {
|
|
377
|
-
|
|
381
|
+
var _ref4;
|
|
382
|
+
FronteggNativeModule.loginWithSSO((_ref4 = email != null ? email : username) != null ? _ref4 : '');
|
|
378
383
|
setLoginState({
|
|
379
384
|
loading: false
|
|
380
385
|
});
|
|
@@ -392,16 +397,18 @@ export default ((store, api, sharedActions) => {
|
|
|
392
397
|
}, 2000);
|
|
393
398
|
}
|
|
394
399
|
} else {
|
|
400
|
+
var _ref5;
|
|
395
401
|
await ssoPreloginFailed({
|
|
396
|
-
email,
|
|
402
|
+
email: (_ref5 = email != null ? email : username) != null ? _ref5 : '',
|
|
397
403
|
recaptchaToken,
|
|
398
404
|
callback,
|
|
399
405
|
invitationToken
|
|
400
406
|
});
|
|
401
407
|
}
|
|
402
408
|
} catch (e) {
|
|
409
|
+
var _ref6;
|
|
403
410
|
await ssoPreloginFailed({
|
|
404
|
-
email,
|
|
411
|
+
email: (_ref6 = email != null ? email : username) != null ? _ref6 : '',
|
|
405
412
|
recaptchaToken,
|
|
406
413
|
callback,
|
|
407
414
|
invitationToken,
|
|
@@ -437,6 +444,7 @@ export default ((store, api, sharedActions) => {
|
|
|
437
444
|
const login = async payload => {
|
|
438
445
|
const {
|
|
439
446
|
email,
|
|
447
|
+
username,
|
|
440
448
|
password,
|
|
441
449
|
recaptchaToken,
|
|
442
450
|
invitationToken,
|
|
@@ -450,12 +458,15 @@ export default ((store, api, sharedActions) => {
|
|
|
450
458
|
user,
|
|
451
459
|
tenants = [],
|
|
452
460
|
activeTenant
|
|
453
|
-
} = await api.auth.loginv2({
|
|
454
|
-
email
|
|
461
|
+
} = await api.auth.loginv2(_extends({}, email ? {
|
|
462
|
+
email
|
|
463
|
+
} : {}, username ? {
|
|
464
|
+
username
|
|
465
|
+
} : {}, {
|
|
455
466
|
password,
|
|
456
467
|
recaptchaToken,
|
|
457
468
|
invitationToken
|
|
458
|
-
});
|
|
469
|
+
}));
|
|
459
470
|
const {
|
|
460
471
|
onRedirectTo,
|
|
461
472
|
routes
|
|
@@ -695,6 +706,7 @@ export default ((store, api, sharedActions) => {
|
|
|
695
706
|
} = _payload,
|
|
696
707
|
payload = _objectWithoutPropertiesLoose(_payload, _excluded5);
|
|
697
708
|
try {
|
|
709
|
+
var _username;
|
|
698
710
|
setLoginState({
|
|
699
711
|
loading: true
|
|
700
712
|
});
|
|
@@ -702,9 +714,16 @@ export default ((store, api, sharedActions) => {
|
|
|
702
714
|
if (isEmailPayload(payload)) {
|
|
703
715
|
email = payload.email;
|
|
704
716
|
}
|
|
717
|
+
let username;
|
|
718
|
+
if (isUsernamePayload(payload)) {
|
|
719
|
+
username = payload.username;
|
|
720
|
+
}
|
|
705
721
|
// TODO: [Typescript 4.8] fix @frontegg/rest-api return value
|
|
706
722
|
// @ts-ignore
|
|
707
|
-
const preloginRes = await api.auth.passwordlessPreLogin(payload
|
|
723
|
+
const preloginRes = await api.auth.passwordlessPreLogin(_extends({}, payload, {
|
|
724
|
+
email,
|
|
725
|
+
username: (_username = username) != null ? _username : ''
|
|
726
|
+
}));
|
|
708
727
|
// @ts-ignore
|
|
709
728
|
const step = authStrategyLoginStepMap[payload.type];
|
|
710
729
|
setLoginState({
|
|
@@ -1296,11 +1315,11 @@ export default ((store, api, sharedActions) => {
|
|
|
1296
1315
|
preserveQueryParams: true
|
|
1297
1316
|
});
|
|
1298
1317
|
} else {
|
|
1299
|
-
var
|
|
1318
|
+
var _ref7;
|
|
1300
1319
|
if (user.id) {
|
|
1301
1320
|
localStorage.setItem('userId', user.id);
|
|
1302
1321
|
}
|
|
1303
|
-
const quickLoginToRegister = (
|
|
1322
|
+
const quickLoginToRegister = (_ref7 = localStorage.getItem('register-quick-login')) != null ? _ref7 : loginState.quickLoginToRegister;
|
|
1304
1323
|
const shouldNavigateToRegisterQuickLogin = __shouldNavigateToRegisterQuickLogin(user);
|
|
1305
1324
|
actions.afterAuthenticationStateUpdate({
|
|
1306
1325
|
user: updatedUser,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IEmailPasswordlessPreLogin, ILoginResponse, IPasswordlessPreLogin, MFAStrategyEnum, UserMFADevicesResponse } from '@frontegg/rest-api';
|
|
1
|
+
import { IEmailPasswordlessPreLogin, ILoginResponse, IPasswordlessPreLogin, IUsernamePasswordlessPreLogin, MFAStrategyEnum, UserMFADevicesResponse } from '@frontegg/rest-api';
|
|
2
2
|
import { FronteggState } from '../../interfaces';
|
|
3
3
|
import { User } from '../interfaces';
|
|
4
4
|
import { MFAStep } from '../MfaState/interfaces';
|
|
@@ -29,5 +29,6 @@ export declare const getMfaStepForEnrolledUsers: (mfaDevices: UserMFADevicesResp
|
|
|
29
29
|
export declare const getMfaStepForNotEnrolledUsers: (mfaStrategies: MFAStrategyEnum[]) => MFAStep.verify | MFAStep.authenticatorApp | MFAStep.smsSetPhoneNumber | MFAStep.emailVerifyCode;
|
|
30
30
|
export declare const isOauthCallbackRoute: (activeUri: string) => boolean;
|
|
31
31
|
export declare function isEmailPayload(payload: IPasswordlessPreLogin): payload is IEmailPasswordlessPreLogin;
|
|
32
|
+
export declare function isUsernamePayload(payload: IPasswordlessPreLogin): payload is IUsernamePasswordlessPreLogin;
|
|
32
33
|
export declare const getBaseNameWithoutSlashSuffix: (state: FronteggState) => string | null;
|
|
33
34
|
export declare const shouldShowPasswordRotationPromptFunc: (user: ILoginResponse | User) => boolean;
|
|
@@ -126,6 +126,9 @@ export const isOauthCallbackRoute = activeUri => {
|
|
|
126
126
|
export function isEmailPayload(payload) {
|
|
127
127
|
return 'email' in payload;
|
|
128
128
|
}
|
|
129
|
+
export function isUsernamePayload(payload) {
|
|
130
|
+
return 'username' in payload;
|
|
131
|
+
}
|
|
129
132
|
export const getBaseNameWithoutSlashSuffix = state => {
|
|
130
133
|
const basename = ContextHolder.for(state.root.appName).getBasename();
|
|
131
134
|
if (basename != null && basename.endsWith('/')) {
|
package/index.js
CHANGED
|
@@ -354,6 +354,7 @@ var _default = (store, api, sharedActions) => {
|
|
|
354
354
|
const preLogin = async payload => {
|
|
355
355
|
const {
|
|
356
356
|
email,
|
|
357
|
+
username,
|
|
357
358
|
recaptchaToken,
|
|
358
359
|
invitationToken,
|
|
359
360
|
callback
|
|
@@ -364,10 +365,13 @@ var _default = (store, api, sharedActions) => {
|
|
|
364
365
|
try {
|
|
365
366
|
const onRedirectTo = store.auth.onRedirectTo;
|
|
366
367
|
const tenantId = (0, _helpers2.getSearchParam)(_helpers2.TENANT_ID_PARAM_KEY);
|
|
367
|
-
const preLoginResult = await api.auth.preLoginV2({
|
|
368
|
-
email
|
|
368
|
+
const preLoginResult = await api.auth.preLoginV2((0, _extends2.default)({}, email ? {
|
|
369
|
+
email
|
|
370
|
+
} : {}, username ? {
|
|
371
|
+
username
|
|
372
|
+
} : {}, {
|
|
369
373
|
tenantId
|
|
370
|
-
});
|
|
374
|
+
}));
|
|
371
375
|
const {
|
|
372
376
|
address,
|
|
373
377
|
idpType
|
|
@@ -381,7 +385,8 @@ var _default = (store, api, sharedActions) => {
|
|
|
381
385
|
ssoRedirectUrl += `&redirect_uri=${window.location.origin}${oidcRedirectUrl}`;
|
|
382
386
|
}
|
|
383
387
|
if (_toolkit.FronteggNativeModule.isLoginWithSSOAvailable()) {
|
|
384
|
-
|
|
388
|
+
var _ref4;
|
|
389
|
+
_toolkit.FronteggNativeModule.loginWithSSO((_ref4 = email != null ? email : username) != null ? _ref4 : '');
|
|
385
390
|
setLoginState({
|
|
386
391
|
loading: false
|
|
387
392
|
});
|
|
@@ -399,16 +404,18 @@ var _default = (store, api, sharedActions) => {
|
|
|
399
404
|
}, 2000);
|
|
400
405
|
}
|
|
401
406
|
} else {
|
|
407
|
+
var _ref5;
|
|
402
408
|
await ssoPreloginFailed({
|
|
403
|
-
email,
|
|
409
|
+
email: (_ref5 = email != null ? email : username) != null ? _ref5 : '',
|
|
404
410
|
recaptchaToken,
|
|
405
411
|
callback,
|
|
406
412
|
invitationToken
|
|
407
413
|
});
|
|
408
414
|
}
|
|
409
415
|
} catch (e) {
|
|
416
|
+
var _ref6;
|
|
410
417
|
await ssoPreloginFailed({
|
|
411
|
-
email,
|
|
418
|
+
email: (_ref6 = email != null ? email : username) != null ? _ref6 : '',
|
|
412
419
|
recaptchaToken,
|
|
413
420
|
callback,
|
|
414
421
|
invitationToken,
|
|
@@ -444,6 +451,7 @@ var _default = (store, api, sharedActions) => {
|
|
|
444
451
|
const login = async payload => {
|
|
445
452
|
const {
|
|
446
453
|
email,
|
|
454
|
+
username,
|
|
447
455
|
password,
|
|
448
456
|
recaptchaToken,
|
|
449
457
|
invitationToken,
|
|
@@ -457,12 +465,15 @@ var _default = (store, api, sharedActions) => {
|
|
|
457
465
|
user,
|
|
458
466
|
tenants = [],
|
|
459
467
|
activeTenant
|
|
460
|
-
} = await api.auth.loginv2({
|
|
461
|
-
email
|
|
468
|
+
} = await api.auth.loginv2((0, _extends2.default)({}, email ? {
|
|
469
|
+
email
|
|
470
|
+
} : {}, username ? {
|
|
471
|
+
username
|
|
472
|
+
} : {}, {
|
|
462
473
|
password,
|
|
463
474
|
recaptchaToken,
|
|
464
475
|
invitationToken
|
|
465
|
-
});
|
|
476
|
+
}));
|
|
466
477
|
const {
|
|
467
478
|
onRedirectTo,
|
|
468
479
|
routes
|
|
@@ -702,6 +713,7 @@ var _default = (store, api, sharedActions) => {
|
|
|
702
713
|
} = _payload,
|
|
703
714
|
payload = (0, _objectWithoutPropertiesLoose2.default)(_payload, _excluded5);
|
|
704
715
|
try {
|
|
716
|
+
var _username;
|
|
705
717
|
setLoginState({
|
|
706
718
|
loading: true
|
|
707
719
|
});
|
|
@@ -709,9 +721,16 @@ var _default = (store, api, sharedActions) => {
|
|
|
709
721
|
if ((0, _helpers2.isEmailPayload)(payload)) {
|
|
710
722
|
email = payload.email;
|
|
711
723
|
}
|
|
724
|
+
let username;
|
|
725
|
+
if ((0, _helpers2.isUsernamePayload)(payload)) {
|
|
726
|
+
username = payload.username;
|
|
727
|
+
}
|
|
712
728
|
// TODO: [Typescript 4.8] fix @frontegg/rest-api return value
|
|
713
729
|
// @ts-ignore
|
|
714
|
-
const preloginRes = await api.auth.passwordlessPreLogin(payload
|
|
730
|
+
const preloginRes = await api.auth.passwordlessPreLogin((0, _extends2.default)({}, payload, {
|
|
731
|
+
email,
|
|
732
|
+
username: (_username = username) != null ? _username : ''
|
|
733
|
+
}));
|
|
715
734
|
// @ts-ignore
|
|
716
735
|
const step = _consts.authStrategyLoginStepMap[payload.type];
|
|
717
736
|
setLoginState({
|
|
@@ -1303,11 +1322,11 @@ var _default = (store, api, sharedActions) => {
|
|
|
1303
1322
|
preserveQueryParams: true
|
|
1304
1323
|
});
|
|
1305
1324
|
} else {
|
|
1306
|
-
var
|
|
1325
|
+
var _ref7;
|
|
1307
1326
|
if (user.id) {
|
|
1308
1327
|
localStorage.setItem('userId', user.id);
|
|
1309
1328
|
}
|
|
1310
|
-
const quickLoginToRegister = (
|
|
1329
|
+
const quickLoginToRegister = (_ref7 = localStorage.getItem('register-quick-login')) != null ? _ref7 : loginState.quickLoginToRegister;
|
|
1311
1330
|
const shouldNavigateToRegisterQuickLogin = __shouldNavigateToRegisterQuickLogin(user);
|
|
1312
1331
|
actions.afterAuthenticationStateUpdate({
|
|
1313
1332
|
user: updatedUser,
|
|
@@ -5,7 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.isAbsoluteUrl = exports.getSearchParamsFromUrl = exports.getSearchParam = exports.getRedirectUrl = exports.getPathAndSearchParamsFromUrl = exports.getNumberOfMfaDevices = exports.getMfaStepForNotEnrolledUsers = exports.getMfaStepForEnrolledUsers = exports.getBaseNameWithoutSlashSuffix = exports.TENANT_ID_PARAM_KEY = void 0;
|
|
7
7
|
exports.isEmailPayload = isEmailPayload;
|
|
8
|
-
exports.
|
|
8
|
+
exports.isOauthCallbackRoute = void 0;
|
|
9
|
+
exports.isUsernamePayload = isUsernamePayload;
|
|
10
|
+
exports.shouldShowPasswordRotationPromptFunc = void 0;
|
|
9
11
|
var _restApi = require("@frontegg/rest-api");
|
|
10
12
|
var _interfaces = require("../MfaState/interfaces");
|
|
11
13
|
const isAbsoluteUrl = path => {
|
|
@@ -144,6 +146,9 @@ exports.isOauthCallbackRoute = isOauthCallbackRoute;
|
|
|
144
146
|
function isEmailPayload(payload) {
|
|
145
147
|
return 'email' in payload;
|
|
146
148
|
}
|
|
149
|
+
function isUsernamePayload(payload) {
|
|
150
|
+
return 'username' in payload;
|
|
151
|
+
}
|
|
147
152
|
const getBaseNameWithoutSlashSuffix = state => {
|
|
148
153
|
const basename = _restApi.ContextHolder.for(state.root.appName).getBasename();
|
|
149
154
|
if (basename != null && basename.endsWith('/')) {
|
package/node/index.js
CHANGED
|
@@ -6,16 +6,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
class FronteggNativeModule {
|
|
8
8
|
constructor() {
|
|
9
|
-
this.loginWithSSO =
|
|
9
|
+
this.loginWithSSO = identifier => {
|
|
10
10
|
if (this.isIOSNativeBridgeAvailable()) {
|
|
11
11
|
var _window$webkit, _window$webkit$messag, _window$webkit$messag2;
|
|
12
12
|
(_window$webkit = window.webkit) == null ? void 0 : (_window$webkit$messag = _window$webkit.messageHandlers) == null ? void 0 : (_window$webkit$messag2 = _window$webkit$messag.FronteggNativeBridge) == null ? void 0 : _window$webkit$messag2.postMessage(JSON.stringify({
|
|
13
13
|
action: 'loginWithSSO',
|
|
14
|
-
payload:
|
|
14
|
+
payload: identifier
|
|
15
15
|
}));
|
|
16
16
|
} else if (this.isAndroidNativeBridgeAvailable()) {
|
|
17
17
|
var _window$FronteggNativ;
|
|
18
|
-
(_window$FronteggNativ = window.FronteggNativeBridge) == null ? void 0 : _window$FronteggNativ.loginWithSSO(
|
|
18
|
+
(_window$FronteggNativ = window.FronteggNativeBridge) == null ? void 0 : _window$FronteggNativ.loginWithSSO(identifier);
|
|
19
19
|
} else {
|
|
20
20
|
throw new Error('FronteggNativeBridge is not available');
|
|
21
21
|
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontegg/redux-store",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.74.0-alpha.1",
|
|
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.74.0-alpha.1",
|
|
11
11
|
"fast-deep-equal": "3.1.3",
|
|
12
12
|
"get-value": "^3.0.1",
|
|
13
13
|
"proxy-compare": "^3.0.0",
|
|
@@ -30,7 +30,7 @@ declare class FronteggNativeModule {
|
|
|
30
30
|
isLoginWithSSOAvailable(): boolean;
|
|
31
31
|
isSuggestSavePasswordAvailable(): boolean;
|
|
32
32
|
isAvailable(method: string): boolean;
|
|
33
|
-
loginWithSSO: (
|
|
33
|
+
loginWithSSO: (identifier: string) => void;
|
|
34
34
|
/**
|
|
35
35
|
*
|
|
36
36
|
* @deprecated use loginWithSocialLoginProvider instead for pkce flow in mobile
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
class FronteggNativeModule {
|
|
2
2
|
constructor() {
|
|
3
|
-
this.loginWithSSO =
|
|
3
|
+
this.loginWithSSO = identifier => {
|
|
4
4
|
if (this.isIOSNativeBridgeAvailable()) {
|
|
5
5
|
var _window$webkit, _window$webkit$messag, _window$webkit$messag2;
|
|
6
6
|
(_window$webkit = window.webkit) == null ? void 0 : (_window$webkit$messag = _window$webkit.messageHandlers) == null ? void 0 : (_window$webkit$messag2 = _window$webkit$messag.FronteggNativeBridge) == null ? void 0 : _window$webkit$messag2.postMessage(JSON.stringify({
|
|
7
7
|
action: 'loginWithSSO',
|
|
8
|
-
payload:
|
|
8
|
+
payload: identifier
|
|
9
9
|
}));
|
|
10
10
|
} else if (this.isAndroidNativeBridgeAvailable()) {
|
|
11
11
|
var _window$FronteggNativ;
|
|
12
|
-
(_window$FronteggNativ = window.FronteggNativeBridge) == null ? void 0 : _window$FronteggNativ.loginWithSSO(
|
|
12
|
+
(_window$FronteggNativ = window.FronteggNativeBridge) == null ? void 0 : _window$FronteggNativ.loginWithSSO(identifier);
|
|
13
13
|
} else {
|
|
14
14
|
throw new Error('FronteggNativeBridge is not available');
|
|
15
15
|
}
|