@frontegg/redux-store 4.40.1 → 4.42.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/audits/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { b as auditsStoreName } from '../constants-f7891ee3.js';
2
- export { b as auditsStoreName } from '../constants-f7891ee3.js';
1
+ import { b as auditsStoreName } from '../constants-4d9682b2.js';
2
+ export { b as auditsStoreName } from '../constants-4d9682b2.js';
3
3
  import { createAction, createSlice } from '@reduxjs/toolkit';
4
4
  import { takeEvery, select as select$1, put, call, all } from 'redux-saga/effects';
5
5
  import { api } from '@frontegg/rest-api';
@@ -1,5 +1,5 @@
1
1
  import { ILogin, ILoginWithMfa, IPasswordlessPostLogin, IPasswordlessPreLogin, IPostLogin, IPreLogin, IRecoverMFAToken } from '@frontegg/rest-api';
2
- import { LoginState } from './interfaces';
2
+ import { HostedLoginCallback, LoginState } from './interfaces';
3
3
  import { WithCallback } from '../../interfaces';
4
4
  import { IVerifyInviteToken } from '@frontegg/rest-api';
5
5
  declare const loginState: LoginState;
@@ -71,6 +71,8 @@ declare const reducers: {
71
71
  };
72
72
  declare const actions: {
73
73
  requestAuthorize: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[(boolean | undefined)?], boolean, string, never, never>;
74
+ requestHostedLoginAuthorize: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>;
75
+ handleHostedLoginCallback: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[HostedLoginCallback], HostedLoginCallback, string, never, never>;
74
76
  afterAuthNavigation: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>;
75
77
  preLogin: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[WithCallback<IPreLogin & {
76
78
  recaptchaToken?: string | undefined;
@@ -100,6 +102,8 @@ declare type DispatchedActions = {
100
102
  setLoginState: (state: Partial<LoginState>) => void;
101
103
  resetLoginState: () => void;
102
104
  requestAuthorize: (payload?: boolean) => void;
105
+ requestHostedLoginAuthorize: () => void;
106
+ handleHostedLoginCallback: (payload: HostedLoginCallback) => void;
103
107
  afterAuthNavigation: () => void;
104
108
  preLogin: (payload: WithCallback<IPreLogin & {
105
109
  recaptchaToken?: string;
@@ -28,3 +28,8 @@ export interface LoginState {
28
28
  inviteTokenError?: string;
29
29
  isNewUser?: boolean;
30
30
  }
31
+ export interface HostedLoginCallback {
32
+ code: string;
33
+ state?: string;
34
+ nonce?: string;
35
+ }
@@ -1,5 +1,5 @@
1
1
  import { CallEffect } from 'redux-saga/effects';
2
- import { ILoginResponse, ISamlMetadata, IAllowedToRememberMfaDevice } from '@frontegg/rest-api';
2
+ import { IAllowedToRememberMfaDevice, ILoginResponse, ISamlMetadata } from '@frontegg/rest-api';
3
3
  import { AuthState } from '../interfaces';
4
4
  import { LoginStep } from './interfaces';
5
5
  export declare function afterAuthNavigation(): Generator<import("redux-saga/effects").SelectEffect | CallEffect<true>, void, {
package/auth/index.d.ts CHANGED
@@ -170,6 +170,8 @@ declare const _default: {
170
170
  loginViaSocialLogin: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[import("@frontegg/rest-api").ILoginViaSocialLogin], import("@frontegg/rest-api").ILoginViaSocialLogin, string, never, never>;
171
171
  setSocialLoginError: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[import("@frontegg/rest-api").ISetSocialLoginError], import("@frontegg/rest-api").ISetSocialLoginError, string, never, never>;
172
172
  requestAuthorize: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[(boolean | undefined)?], boolean, string, never, never>;
173
+ requestHostedLoginAuthorize: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>;
174
+ handleHostedLoginCallback: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[import("./LoginState/interfaces").HostedLoginCallback], import("./LoginState/interfaces").HostedLoginCallback, string, never, never>;
173
175
  afterAuthNavigation: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>;
174
176
  preLogin: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[import("../interfaces").WithCallback<import("@frontegg/rest-api").IPreLogin & {
175
177
  recaptchaToken?: string | undefined;
package/auth/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { createAction, createSlice } from '@reduxjs/toolkit';
2
- import { a as authStoreName, F as FRONTEGG_AFTER_AUTH_REDIRECT_URL } from '../constants-f7891ee3.js';
3
- export { a as authStoreName } from '../constants-f7891ee3.js';
4
- import { __rest } from 'tslib';
2
+ import { a as authStoreName, F as FRONTEGG_AFTER_AUTH_REDIRECT_URL, H as HOSTED_LOGIN_VERIFIER_KEY } from '../constants-4d9682b2.js';
3
+ export { a as authStoreName } from '../constants-4d9682b2.js';
4
+ import { __awaiter, __rest } from 'tslib';
5
5
  import { takeLeading, put, select, call, takeEvery, delay as delay$1, all, retry, takeLatest } from 'redux-saga/effects';
6
6
  import { AuthStrategyEnum, api, ContextHolder } from '@frontegg/rest-api';
7
7
  export { AuthStrategyEnum } from '@frontegg/rest-api';
8
- import { l as loadVendorPublicInfo } from '../saga-afaced62.js';
8
+ import { l as loadVendorPublicInfo } from '../saga-b6529ffb.js';
9
9
  import { v4 } from 'uuid';
10
10
 
11
11
  const resetStateByKey = (key, initialState) => (state) => (Object.assign(Object.assign({}, state), { [key]: initialState[key] }));
@@ -65,6 +65,8 @@ const reducers$e = {
65
65
  };
66
66
  const actions$f = {
67
67
  requestAuthorize: createAction(`${authStoreName}/requestAuthorize`, (payload = false) => ({ payload })),
68
+ requestHostedLoginAuthorize: createAction(`${authStoreName}/requestHostedLoginAuthorize`),
69
+ handleHostedLoginCallback: createAction(`${authStoreName}/handleHostedLoginCallback`, (payload) => ({ payload })),
68
70
  afterAuthNavigation: createAction(`${authStoreName}/afterAuthNavigation`),
69
71
  preLogin: createAction(`${authStoreName}/preLogin`, (payload) => ({ payload })),
70
72
  postLogin: createAction(`${authStoreName}/postLogin`, (payload) => ({ payload })),
@@ -479,7 +481,8 @@ const initialState = Object.assign({ routes: {
479
481
  socialLoginCallbackUrl: '/account/social/success',
480
482
  signUpUrl: '/account/sign-up',
481
483
  oidcRedirectUrl: '/account/oidc/callback',
482
- magicLinkCallbackUrl: '/account/login/magic-link'
484
+ magicLinkCallbackUrl: '/account/login/magic-link',
485
+ hostedLoginRedirectUrl: '/oauth/callback'
483
486
  }, onRedirectTo: () => { } }, reinitializeState);
484
487
 
485
488
  const { reducer, actions: sliceActions } = createSlice({
@@ -505,6 +508,24 @@ function omitProps(props, keys) {
505
508
  });
506
509
  return newProps;
507
510
  }
511
+ function generateCodeChallenge(codeVerifier) {
512
+ return __awaiter(this, void 0, void 0, function* () {
513
+ const digest = yield crypto.subtle.digest('SHA-256', new TextEncoder().encode(codeVerifier));
514
+ // @ts-ignore
515
+ return btoa(String.fromCharCode(...new Uint8Array(digest)))
516
+ .replace(/=/g, '')
517
+ .replace(/\+/g, '-')
518
+ .replace(/\//g, '_');
519
+ });
520
+ }
521
+ function createRandomString(length = 16) {
522
+ let text = '';
523
+ const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
524
+ for (let i = 0; i < length; i++) {
525
+ text += possible.charAt(Math.floor(Math.random() * possible.length));
526
+ }
527
+ return text;
528
+ }
508
529
  const readFileAsText = (file) => new Promise((resolve, reject) => {
509
530
  const reader = new FileReader();
510
531
  reader.readAsText(file);
@@ -1098,6 +1119,47 @@ function* requestAuthorize({ payload: firstTime }) {
1098
1119
  yield all(calls);
1099
1120
  yield put(actions.setState({ isLoading: false }));
1100
1121
  }
1122
+ function* requestHostedLoginAuthorize() {
1123
+ const { routes, baseUrl, clientId, onRedirectTo } = yield select((state) => (Object.assign({ routes: state.auth.routes, onRedirectTo: state.auth.onRedirectTo }, state.root.context)));
1124
+ // Generate the relevant params for the redirect
1125
+ const nonce = createRandomString();
1126
+ const code_verifier = createRandomString();
1127
+ const code_challenge = yield call(generateCodeChallenge, code_verifier);
1128
+ // We are saving the verifier in session storage to be able to validate the response
1129
+ sessionStorage.setItem(HOSTED_LOGIN_VERIFIER_KEY, code_verifier);
1130
+ const redirectUrl = `${window.location.origin}${routes.hostedLoginRedirectUrl}`;
1131
+ // Hard coded for now
1132
+ const oauthUrl = `${baseUrl}/oauth/authorize`;
1133
+ const params = {
1134
+ response_type: 'code',
1135
+ client_id: clientId || 'INVALID-CLIENT-ID',
1136
+ scope: 'openid email profile',
1137
+ redirect_uri: redirectUrl,
1138
+ code_challenge: code_challenge,
1139
+ code_challenge_method: 'S256',
1140
+ nonce,
1141
+ };
1142
+ const searchParams = new URLSearchParams(params);
1143
+ const url = `${oauthUrl}?${searchParams.toString()}`;
1144
+ onRedirectTo(url, { refresh: true });
1145
+ }
1146
+ function* handleHostedLoginCallback({ payload }) {
1147
+ // Hard coded for now
1148
+ const code_verifier = sessionStorage.getItem(HOSTED_LOGIN_VERIFIER_KEY) || 'INVALID-CODE-VERIFIER';
1149
+ const routes = yield select((state) => state.auth.routes);
1150
+ const redirectUrl = `${window.location.origin}${routes.hostedLoginRedirectUrl}`;
1151
+ const body = {
1152
+ code: payload.code,
1153
+ redirect_uri: redirectUrl,
1154
+ code_verifier,
1155
+ grant_type: 'authorization_code',
1156
+ };
1157
+ const user = yield call(api.auth.exchangeOAuthTokens, body);
1158
+ // TODO: Validate nonce and aud
1159
+ yield put(actions.setState({ user, isAuthenticated: true }));
1160
+ yield put(actions.loadTenants());
1161
+ yield afterAuthNavigation();
1162
+ }
1101
1163
  function* passwordlessPreLogin(_a) {
1102
1164
  var _b = _a.payload, { callback } = _b, payload = __rest(_b, ["callback"]);
1103
1165
  try {
@@ -1330,6 +1392,8 @@ function* silentLogout({ payload }) {
1330
1392
  }
1331
1393
  function* loginSagas() {
1332
1394
  yield takeLeading(actions.requestAuthorize, requestAuthorize);
1395
+ yield takeLeading(actions.requestHostedLoginAuthorize, requestHostedLoginAuthorize);
1396
+ yield takeLeading(actions.handleHostedLoginCallback, handleHostedLoginCallback);
1333
1397
  yield takeLeading(actions.preLogin, preLogin);
1334
1398
  yield takeLeading(actions.postLogin, postLogin);
1335
1399
  yield takeLeading(actions.login, login);
@@ -106,5 +106,9 @@ export declare type AuthPageRoutes = {
106
106
  * after sign up success url
107
107
  */
108
108
  signUpSuccessUrl?: string;
109
+ /**
110
+ * hosted login callback redirect url
111
+ */
112
+ hostedLoginRedirectUrl?: string;
109
113
  };
110
114
  export {};
package/auth/reducer.d.ts CHANGED
@@ -144,6 +144,8 @@ declare const actions: {
144
144
  loginViaSocialLogin: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[import("@frontegg/rest-api").ILoginViaSocialLogin], import("@frontegg/rest-api").ILoginViaSocialLogin, string, never, never>;
145
145
  setSocialLoginError: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[import("@frontegg/rest-api").ISetSocialLoginError], import("@frontegg/rest-api").ISetSocialLoginError, string, never, never>;
146
146
  requestAuthorize: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[(boolean | undefined)?], boolean, string, never, never>;
147
+ requestHostedLoginAuthorize: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>;
148
+ handleHostedLoginCallback: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[import(".").HostedLoginCallback], import(".").HostedLoginCallback, string, never, never>;
147
149
  afterAuthNavigation: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>;
148
150
  preLogin: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[import("../interfaces").WithCallback<import("@frontegg/rest-api").IPreLogin & {
149
151
  recaptchaToken?: string | undefined;
@@ -1,5 +1,5 @@
1
- import { c as connectivityStoreName } from '../constants-f7891ee3.js';
2
- export { c as connectivityStoreName } from '../constants-f7891ee3.js';
1
+ import { c as connectivityStoreName } from '../constants-4d9682b2.js';
2
+ export { c as connectivityStoreName } from '../constants-4d9682b2.js';
3
3
  import { createAction, createSlice } from '@reduxjs/toolkit';
4
4
  import { __rest } from 'tslib';
5
5
  import { takeEvery, takeLatest, put, all, call, select } from 'redux-saga/effects';
@@ -1,8 +1,9 @@
1
1
  const FRONTEGG_AFTER_AUTH_REDIRECT_URL = 'FRONTEGG_AFTER_AUTH_REDIRECT_URL';
2
+ const HOSTED_LOGIN_VERIFIER_KEY = 'HOSTED_LOGIN_VERIFIER_KEY';
2
3
  const authStoreName = 'auth';
3
4
  const connectivityStoreName = 'connectivity';
4
5
  const auditsStoreName = 'auditLogs';
5
6
  const subscriptionsStoreName = 'subscriptions';
6
7
  const vendorStoreName = 'vendor';
7
8
 
8
- export { FRONTEGG_AFTER_AUTH_REDIRECT_URL as F, authStoreName as a, auditsStoreName as b, connectivityStoreName as c, subscriptionsStoreName as s, vendorStoreName as v };
9
+ export { FRONTEGG_AFTER_AUTH_REDIRECT_URL as F, HOSTED_LOGIN_VERIFIER_KEY as H, authStoreName as a, auditsStoreName as b, connectivityStoreName as c, subscriptionsStoreName as s, vendorStoreName as v };
package/constants.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export declare const FRONTEGG_AFTER_AUTH_REDIRECT_URL = "FRONTEGG_AFTER_AUTH_REDIRECT_URL";
2
+ export declare const HOSTED_LOGIN_VERIFIER_KEY = "HOSTED_LOGIN_VERIFIER_KEY";
2
3
  export declare const authStoreName = "auth";
3
4
  export declare const connectivityStoreName = "connectivity";
4
5
  export declare const auditsStoreName = "auditLogs";
package/helpers.d.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  export declare function omitProps<T>(props: any, keys: string[]): T;
2
2
  export declare function generateActionCreator(storeName: string): <Payload>(key: string, withPayload?: boolean | undefined) => import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[Payload], Payload, string, never, never> | import("@reduxjs/toolkit").ActionCreatorWithoutPayload<string>;
3
+ export declare function generateCodeChallenge(codeVerifier: any): Promise<string>;
4
+ export declare function createRandomString(length?: number): string;
3
5
  export declare const readFileAsText: (file: File) => Promise<string>;
package/index.js CHANGED
@@ -5,9 +5,9 @@ export { CheckoutEvent, CheckoutStatus, PaymentMethodType, PaymentProvider, Subs
5
5
  export { default as vendor } from './vendor/index.js';
6
6
  export { createFronteggStore } from './toolkit/index.js';
7
7
  export { AuthStrategyEnum } from '@frontegg/rest-api';
8
- export { b as auditsStoreName, a as authStoreName, c as connectivityStoreName, s as subscriptionsStoreName, v as vendorStoreName } from './constants-f7891ee3.js';
8
+ export { b as auditsStoreName, a as authStoreName, c as connectivityStoreName, s as subscriptionsStoreName, v as vendorStoreName } from './constants-4d9682b2.js';
9
9
  export { a as actions, d as defaultItemsPerPage, i as initialState, r as reducer, b as sagas, s as storeName } from './saga-7a267fe0.js';
10
- export { a as vendorActions, i as vendorInitialState, r as vendorReducers, s as vendorSagas } from './saga-afaced62.js';
10
+ export { a as vendorActions, i as vendorInitialState, r as vendorReducers, s as vendorSagas } from './saga-b6529ffb.js';
11
11
  export { bindActionCreators, combineReducers, configureStore, createSelector, createSlice, getDefaultMiddleware } from '@reduxjs/toolkit';
12
12
  export { all, call, delay, put, select, takeEvery, takeLatest } from 'redux-saga/effects';
13
13
  export { default as createSagaMiddleware } from 'redux-saga';
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var constants = require('../constants-b305f261.js');
5
+ var constants = require('../constants-52e37c08.js');
6
6
  var toolkit = require('@reduxjs/toolkit');
7
7
  var effects = require('redux-saga/effects');
8
8
  var restApi = require('@frontegg/rest-api');
@@ -4,10 +4,10 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var toolkit = require('@reduxjs/toolkit');
6
6
  var restApi = require('@frontegg/rest-api');
7
- var constants = require('../constants-b305f261.js');
7
+ var constants = require('../constants-52e37c08.js');
8
8
  var tslib = require('tslib');
9
9
  var effects = require('redux-saga/effects');
10
- var saga = require('../saga-508b308b.js');
10
+ var saga = require('../saga-633c17d2.js');
11
11
  var uuid = require('uuid');
12
12
 
13
13
  const resetStateByKey = (key, initialState) => (state) => (Object.assign(Object.assign({}, state), { [key]: initialState[key] }));
@@ -67,6 +67,8 @@ const reducers$e = {
67
67
  };
68
68
  const actions$f = {
69
69
  requestAuthorize: toolkit.createAction(`${constants.authStoreName}/requestAuthorize`, (payload = false) => ({ payload })),
70
+ requestHostedLoginAuthorize: toolkit.createAction(`${constants.authStoreName}/requestHostedLoginAuthorize`),
71
+ handleHostedLoginCallback: toolkit.createAction(`${constants.authStoreName}/handleHostedLoginCallback`, (payload) => ({ payload })),
70
72
  afterAuthNavigation: toolkit.createAction(`${constants.authStoreName}/afterAuthNavigation`),
71
73
  preLogin: toolkit.createAction(`${constants.authStoreName}/preLogin`, (payload) => ({ payload })),
72
74
  postLogin: toolkit.createAction(`${constants.authStoreName}/postLogin`, (payload) => ({ payload })),
@@ -481,7 +483,8 @@ const initialState = Object.assign({ routes: {
481
483
  socialLoginCallbackUrl: '/account/social/success',
482
484
  signUpUrl: '/account/sign-up',
483
485
  oidcRedirectUrl: '/account/oidc/callback',
484
- magicLinkCallbackUrl: '/account/login/magic-link'
486
+ magicLinkCallbackUrl: '/account/login/magic-link',
487
+ hostedLoginRedirectUrl: '/oauth/callback'
485
488
  }, onRedirectTo: () => { } }, reinitializeState);
486
489
 
487
490
  const { reducer, actions: sliceActions } = toolkit.createSlice({
@@ -507,6 +510,24 @@ function omitProps(props, keys) {
507
510
  });
508
511
  return newProps;
509
512
  }
513
+ function generateCodeChallenge(codeVerifier) {
514
+ return tslib.__awaiter(this, void 0, void 0, function* () {
515
+ const digest = yield crypto.subtle.digest('SHA-256', new TextEncoder().encode(codeVerifier));
516
+ // @ts-ignore
517
+ return btoa(String.fromCharCode(...new Uint8Array(digest)))
518
+ .replace(/=/g, '')
519
+ .replace(/\+/g, '-')
520
+ .replace(/\//g, '_');
521
+ });
522
+ }
523
+ function createRandomString(length = 16) {
524
+ let text = '';
525
+ const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
526
+ for (let i = 0; i < length; i++) {
527
+ text += possible.charAt(Math.floor(Math.random() * possible.length));
528
+ }
529
+ return text;
530
+ }
510
531
  const readFileAsText = (file) => new Promise((resolve, reject) => {
511
532
  const reader = new FileReader();
512
533
  reader.readAsText(file);
@@ -1100,6 +1121,47 @@ function* requestAuthorize({ payload: firstTime }) {
1100
1121
  yield effects.all(calls);
1101
1122
  yield effects.put(actions.setState({ isLoading: false }));
1102
1123
  }
1124
+ function* requestHostedLoginAuthorize() {
1125
+ const { routes, baseUrl, clientId, onRedirectTo } = yield effects.select((state) => (Object.assign({ routes: state.auth.routes, onRedirectTo: state.auth.onRedirectTo }, state.root.context)));
1126
+ // Generate the relevant params for the redirect
1127
+ const nonce = createRandomString();
1128
+ const code_verifier = createRandomString();
1129
+ const code_challenge = yield effects.call(generateCodeChallenge, code_verifier);
1130
+ // We are saving the verifier in session storage to be able to validate the response
1131
+ sessionStorage.setItem(constants.HOSTED_LOGIN_VERIFIER_KEY, code_verifier);
1132
+ const redirectUrl = `${window.location.origin}${routes.hostedLoginRedirectUrl}`;
1133
+ // Hard coded for now
1134
+ const oauthUrl = `${baseUrl}/oauth/authorize`;
1135
+ const params = {
1136
+ response_type: 'code',
1137
+ client_id: clientId || 'INVALID-CLIENT-ID',
1138
+ scope: 'openid email profile',
1139
+ redirect_uri: redirectUrl,
1140
+ code_challenge: code_challenge,
1141
+ code_challenge_method: 'S256',
1142
+ nonce,
1143
+ };
1144
+ const searchParams = new URLSearchParams(params);
1145
+ const url = `${oauthUrl}?${searchParams.toString()}`;
1146
+ onRedirectTo(url, { refresh: true });
1147
+ }
1148
+ function* handleHostedLoginCallback({ payload }) {
1149
+ // Hard coded for now
1150
+ const code_verifier = sessionStorage.getItem(constants.HOSTED_LOGIN_VERIFIER_KEY) || 'INVALID-CODE-VERIFIER';
1151
+ const routes = yield effects.select((state) => state.auth.routes);
1152
+ const redirectUrl = `${window.location.origin}${routes.hostedLoginRedirectUrl}`;
1153
+ const body = {
1154
+ code: payload.code,
1155
+ redirect_uri: redirectUrl,
1156
+ code_verifier,
1157
+ grant_type: 'authorization_code',
1158
+ };
1159
+ const user = yield effects.call(restApi.api.auth.exchangeOAuthTokens, body);
1160
+ // TODO: Validate nonce and aud
1161
+ yield effects.put(actions.setState({ user, isAuthenticated: true }));
1162
+ yield effects.put(actions.loadTenants());
1163
+ yield afterAuthNavigation();
1164
+ }
1103
1165
  function* passwordlessPreLogin(_a) {
1104
1166
  var _b = _a.payload, { callback } = _b, payload = tslib.__rest(_b, ["callback"]);
1105
1167
  try {
@@ -1332,6 +1394,8 @@ function* silentLogout({ payload }) {
1332
1394
  }
1333
1395
  function* loginSagas() {
1334
1396
  yield effects.takeLeading(actions.requestAuthorize, requestAuthorize);
1397
+ yield effects.takeLeading(actions.requestHostedLoginAuthorize, requestHostedLoginAuthorize);
1398
+ yield effects.takeLeading(actions.handleHostedLoginCallback, handleHostedLoginCallback);
1335
1399
  yield effects.takeLeading(actions.preLogin, preLogin);
1336
1400
  yield effects.takeLeading(actions.postLogin, postLogin);
1337
1401
  yield effects.takeLeading(actions.login, login);
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var constants = require('../constants-b305f261.js');
5
+ var constants = require('../constants-52e37c08.js');
6
6
  var toolkit = require('@reduxjs/toolkit');
7
7
  var tslib = require('tslib');
8
8
  var effects = require('redux-saga/effects');
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const FRONTEGG_AFTER_AUTH_REDIRECT_URL = 'FRONTEGG_AFTER_AUTH_REDIRECT_URL';
4
+ const HOSTED_LOGIN_VERIFIER_KEY = 'HOSTED_LOGIN_VERIFIER_KEY';
4
5
  const authStoreName = 'auth';
5
6
  const connectivityStoreName = 'connectivity';
6
7
  const auditsStoreName = 'auditLogs';
@@ -8,6 +9,7 @@ const subscriptionsStoreName = 'subscriptions';
8
9
  const vendorStoreName = 'vendor';
9
10
 
10
11
  exports.FRONTEGG_AFTER_AUTH_REDIRECT_URL = FRONTEGG_AFTER_AUTH_REDIRECT_URL;
12
+ exports.HOSTED_LOGIN_VERIFIER_KEY = HOSTED_LOGIN_VERIFIER_KEY;
11
13
  exports.auditsStoreName = auditsStoreName;
12
14
  exports.authStoreName = authStoreName;
13
15
  exports.connectivityStoreName = connectivityStoreName;
package/node/index.js CHANGED
@@ -10,8 +10,8 @@ var vendor_index = require('./vendor/index.js');
10
10
  var saga = require('./saga-b0d1a607.js');
11
11
  var toolkit_index = require('./toolkit/index.js');
12
12
  var restApi = require('@frontegg/rest-api');
13
- var constants = require('./constants-b305f261.js');
14
- var saga$1 = require('./saga-508b308b.js');
13
+ var constants = require('./constants-52e37c08.js');
14
+ var saga$1 = require('./saga-633c17d2.js');
15
15
  var toolkit = require('@reduxjs/toolkit');
16
16
  var effects = require('redux-saga/effects');
17
17
  var createSagaMiddleware = require('redux-saga');
@@ -2,7 +2,7 @@
2
2
 
3
3
  var effects = require('redux-saga/effects');
4
4
  var restApi = require('@frontegg/rest-api');
5
- var constants = require('./constants-b305f261.js');
5
+ var constants = require('./constants-52e37c08.js');
6
6
  var toolkit = require('@reduxjs/toolkit');
7
7
 
8
8
  const reducers = {
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var constants = require('../constants-b305f261.js');
5
+ var constants = require('../constants-52e37c08.js');
6
6
  var toolkit = require('@reduxjs/toolkit');
7
7
  var effects = require('redux-saga/effects');
8
8
  var restApi = require('@frontegg/rest-api');
@@ -12,9 +12,9 @@ var saga = require('../saga-b0d1a607.js');
12
12
  var connectivity_index = require('../connectivity/index.js');
13
13
  var subscriptions_index = require('../subscriptions/index.js');
14
14
  var vendor_index = require('../vendor/index.js');
15
- require('../constants-b305f261.js');
15
+ require('../constants-52e37c08.js');
16
16
  require('tslib');
17
- require('../saga-508b308b.js');
17
+ require('../saga-633c17d2.js');
18
18
  require('uuid');
19
19
 
20
20
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -2,8 +2,8 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var saga = require('../saga-508b308b.js');
6
- var constants = require('../constants-b305f261.js');
5
+ var saga = require('../saga-633c17d2.js');
6
+ var constants = require('../constants-52e37c08.js');
7
7
  require('redux-saga/effects');
8
8
  require('@frontegg/rest-api');
9
9
  require('@reduxjs/toolkit');
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@frontegg/redux-store",
3
3
  "libName": "FronteggReduxStore",
4
- "version": "4.40.1",
4
+ "version": "4.42.2",
5
5
  "author": "Frontegg LTD",
6
6
  "main": "./node/index.js",
7
7
  "module": "./index.js",
8
8
  "types": "./index.d.ts",
9
9
  "dependencies": {
10
- "@frontegg/rest-api": "2.10.46",
10
+ "@frontegg/rest-api": "2.10.47",
11
11
  "@reduxjs/toolkit": "^1.5.0",
12
12
  "redux-saga": "^1.1.0",
13
13
  "tslib": "^2.3.1",
@@ -1,6 +1,6 @@
1
1
  import { takeEvery, put } from 'redux-saga/effects';
2
2
  import { api } from '@frontegg/rest-api';
3
- import { v as vendorStoreName } from './constants-f7891ee3.js';
3
+ import { v as vendorStoreName } from './constants-4d9682b2.js';
4
4
  import { createAction, createSlice } from '@reduxjs/toolkit';
5
5
 
6
6
  const reducers = {
@@ -1,5 +1,5 @@
1
- import { s as subscriptionsStoreName } from '../constants-f7891ee3.js';
2
- export { s as subscriptionsStoreName } from '../constants-f7891ee3.js';
1
+ import { s as subscriptionsStoreName } from '../constants-4d9682b2.js';
2
+ export { s as subscriptionsStoreName } from '../constants-4d9682b2.js';
3
3
  import { createSlice, createAction, combineReducers } from '@reduxjs/toolkit';
4
4
  import { takeEvery, select, put, call, delay, all } from 'redux-saga/effects';
5
5
  import { ISubscriptionStatus, PaymentMethodType as PaymentMethodType$1, api, ProviderType } from '@frontegg/rest-api';
package/toolkit/index.js CHANGED
@@ -11,9 +11,9 @@ import connectivityStore from '../connectivity/index.js';
11
11
  import subscriptionsStore from '../subscriptions/index.js';
12
12
  import vendorStore from '../vendor/index.js';
13
13
  import { s as storeName, i as initialState$1, r as reducer, b as sagas } from '../saga-7a267fe0.js';
14
- import '../constants-f7891ee3.js';
14
+ import '../constants-4d9682b2.js';
15
15
  import 'tslib';
16
- import '../saga-afaced62.js';
16
+ import '../saga-b6529ffb.js';
17
17
  import 'uuid';
18
18
 
19
19
  const initialState = {
package/vendor/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import { s as sagas, i as initialState, r as reducer, a as actions } from '../saga-afaced62.js';
2
- export { a as vendorActions, i as vendorInitialState, r as vendorReducers, s as vendorSagas } from '../saga-afaced62.js';
3
- import { v as vendorStoreName } from '../constants-f7891ee3.js';
4
- export { v as vendorStoreName } from '../constants-f7891ee3.js';
1
+ import { s as sagas, i as initialState, r as reducer, a as actions } from '../saga-b6529ffb.js';
2
+ export { a as vendorActions, i as vendorInitialState, r as vendorReducers, s as vendorSagas } from '../saga-b6529ffb.js';
3
+ import { v as vendorStoreName } from '../constants-4d9682b2.js';
4
+ export { v as vendorStoreName } from '../constants-4d9682b2.js';
5
5
  import 'redux-saga/effects';
6
6
  import '@frontegg/rest-api';
7
7
  import '@reduxjs/toolkit';