{"version":3,"sources":["configs/themeConfig.js","redux/navbar.js","redux/rootReducer.js","redux/store.js","configs/acl/initialAbility.js","configs/acl/ability.js","utility/context/ThemeColors.js","configs/i18n/index.js","@core/components/spinner/Fallback-spinner.js","@core/components/ripple-button/index.js","serviceWorker.js","index.js","utility/context/Can.js","redux/layout.js","assets/images/logo/logo.png","@core/auth/jwt/jwtDefaultConfig.js","@core/auth/jwt/jwtService.js","auth/jwt/useJwt.js","@core/auth/jwt/useJwt.js","redux/authentication.js","assets/images/logo/logo.svg"],"names":["user","JSON","parse","localStorage","getItem","themeConfig","app","appName","comName","appLogoImage","require","default","layout","isRTL","skin","type","contentWidth","menu","isHidden","isCollapsed","navbar","backgroundColor","footer","customizer","scrollTop","toastPosition","getBookmarks","createAsyncThunk","async","response","axios","get","data","suggestions","bookmarks","updateBookmarked","post","id","layoutSlice","createSlice","name","initialState","query","reducers","handleSearchQuery","state","action","payload","extraReducers","builder","addCase","fulfilled","objectToUpdate","find","item","isBookmarked","bookmarkIndex","findIndex","x","push","splice","actions","rootReducer","auth","store","configureStore","reducer","middleware","getDefaultMiddleware","serializableCheck","userData","existingAbility","ability","Ability","subject","ThemeColors","createContext","ThemeContext","_ref","children","colors","setColors","useState","useEffect","window","getHex","color","getComputedStyle","document","body","getPropertyValue","trim","obj","primary","light","concat","main","secondary","success","danger","warning","info","dark","_jsx","Provider","value","i18n","use","Backend","LanguageDetector","initReactI18next","init","lng","backend","loadPath","process","fallbackLng","debug","keySeparator","react","useSuspense","interpolation","escapeValue","formatSeparator","SpinnerComponent","_jsxs","className","src","logo","alt","Button","Ripple","onClick","rest","mounted","setMounted","isRippling","setIsRippling","coords","setCoords","y","setTimeout","classnames","e","rect","target","getBoundingClientRect","clientX","left","clientY","top","style","Boolean","location","hostname","match","LazyApp","lazy","container","getElementById","createRoot","render","BrowserRouter","Suspense","fallback","Spinner","AbilityContext","Toaster","position","toastOptions","navigator","serviceWorker","ready","then","registration","unregister","createContextualCan","Consumer","initialSkin","initialDirection","lastLayout","menuCollapsed","initialMenuCollapsed","footerType","navbarType","menuHidden","navbarColor","handleRTL","setItem","stringify","handleSkin","handleLayout","handleFooterType","handleNavbarType","handleMenuHidden","handleLastLayout","handleNavbarColor","handleContentWidth","handleMenuCollapsed","loginEndpoint","registerEndpoint","refreshEndpoint","logoutEndpoint","tokenType","storageTokenKeyName","storageRefreshTokenKeyName","JwtService","constructor","jwtOverrideConfig","jwtConfig","jwtDefaultConfig","isAlreadyFetchingAccessToken","subscribers","this","interceptors","request","config","accessToken","getToken","headers","Authorization","error","Promise","reject","originalRequest","status","refreshToken","r","setToken","setRefreshToken","onAccessTokenFetched","resolve","addSubscriber","cm","filter","callback","getRefreshToken","login","_len","arguments","length","args","Array","_key","register","_len2","_key2","jwt","authSlice","initialUser","handleLogin","handleLogout","removeItem"],"mappings":"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","file":"static/js/main.a6ca83de.chunk.js","sourcesContent":["// You can customize the template with the help of this file\r\n\r\n//Template config options\r\n \r\nconst user = JSON.parse(localStorage.getItem('userData'))\r\nconst themeConfig = {\r\n \r\n app: {\r\n appName: user && user[\"comi\"] ? user[\"comi\"].comName : \"Encash\",\r\n appLogoImage: require(\"@src/assets/images/logo/logo.svg\").default\r\n },\r\n layout: {\r\n isRTL: false,\r\n skin: \"bordered\", // light, dark, bordered, semi-dark\r\n type: \"horizontal\", // vertical, horizontal\r\n contentWidth: \"boxed\", // full, boxed\r\n menu: {\r\n isHidden: false,\r\n isCollapsed: false\r\n },\r\n navbar: {\r\n // ? For horizontal menu, navbar type will work for navMenu type\r\n type: \"floating\", // static , sticky , floating, hidden\r\n backgroundColor: \"success\" // BS color options [primary, success, etc]\r\n },\r\n footer: {\r\n type: \"static\" // static, sticky, hidden\r\n },\r\n customizer: true,\r\n scrollTop: true, // Enable scroll to top button\r\n toastPosition: \"top-right\"// top-left, top-center, top-right, bottom-left, bottom-center, bottom-right\r\n }\r\n}\r\n\r\nexport default themeConfig\r\n","// ** Redux Imports\nimport { createSlice, createAsyncThunk } from '@reduxjs/toolkit'\n\n// ** Axios Imports\nimport axios from 'axios'\n\nexport const getBookmarks = createAsyncThunk('layout/getBookmarks', async () => {\n const response = await axios.get('/api/bookmarks/data')\n return {\n data: response.data.suggestions,\n bookmarks: response.data.bookmarks\n }\n})\n\nexport const updateBookmarked = createAsyncThunk('layout/updateBookmarked', async id => {\n await axios.post('/api/bookmarks/update', { id })\n return id\n})\n\nexport const layoutSlice = createSlice({\n name: 'layout',\n initialState: {\n query: '',\n bookmarks: [],\n suggestions: []\n },\n reducers: {\n handleSearchQuery: (state, action) => {\n state.query = action.payload\n }\n },\n extraReducers: builder => {\n builder\n .addCase(getBookmarks.fulfilled, (state, action) => {\n state.suggestions = action.payload.data\n state.bookmarks = action.payload.bookmarks\n })\n .addCase(updateBookmarked.fulfilled, (state, action) => {\n let objectToUpdate\n\n // ** find & update object\n state.suggestions.find(item => {\n if (item.id === action.payload) {\n item.isBookmarked = !item.isBookmarked\n objectToUpdate = item\n }\n })\n\n // ** Get index to add or remove bookmark from array\n const bookmarkIndex = state.bookmarks.findIndex(x => x.id === action.payload)\n\n if (bookmarkIndex === -1) {\n state.bookmarks.push(objectToUpdate)\n } else {\n state.bookmarks.splice(bookmarkIndex, 1)\n }\n })\n }\n})\n\nexport const { handleSearchQuery } = layoutSlice.actions\n\nexport default layoutSlice.reducer\n","// ** Reducers Imports\nimport navbar from './navbar'\nimport layout from './layout'\nimport auth from './authentication'\n \nconst rootReducer = {\n auth, \n navbar,\n layout \n}\n\nexport default rootReducer\n","// ** Redux Imports\nimport rootReducer from './rootReducer'\nimport { configureStore } from '@reduxjs/toolkit'\n\nconst store = configureStore({\n reducer: rootReducer,\n middleware: getDefaultMiddleware => {\n return getDefaultMiddleware({\n serializableCheck: false\n })\n }\n})\n\nexport { store }\n","// ** Initial user ability\nexport const initialAbility = [\n {\n action: \"read\",\n subject: \"Auth\"\n }\n]\n\nexport const _ = undefined\n","import { Ability } from \"@casl/ability\"\nimport { initialAbility } from \"./initialAbility\"\n\n// Read ability from localStorage\n// * Handles auto fetching previous abilities if already logged in user\n// ? You can update this if you store user abilities to more secure place\n// ! Anyone can update localStorage so be careful and please update this\nconst userData = JSON.parse(localStorage.getItem(\"userData\"))\nconst existingAbility = userData ? userData.ability : null\n\nexport default new Ability(existingAbility || initialAbility)\n","// ** React Imports\nimport { useEffect, useState, createContext } from 'react'\n\n// ** Create Context\nconst ThemeColors = createContext()\n\nconst ThemeContext = ({ children }) => {\n // ** State\n const [colors, setColors] = useState({})\n\n //** ComponentDidMount\n useEffect(() => {\n if (window !== 'undefined') {\n //** Get variable value\n const getHex = color => window.getComputedStyle(document.body).getPropertyValue(color).trim()\n\n //** Colors obj\n const obj = {\n primary: {\n light: getHex('--bs-primary').concat('1a'),\n main: getHex('--bs-primary')\n },\n secondary: {\n light: getHex('--bs-secondary').concat('1a'),\n main: getHex('--bs-secondary')\n },\n success: {\n light: getHex('--bs-success').concat('1a'),\n main: getHex('--bs-success')\n },\n danger: {\n light: getHex('--bs-danger').concat('1a'),\n main: getHex('--bs-danger')\n },\n warning: {\n light: getHex('--bs-warning').concat('1a'),\n main: getHex('--bs-warning')\n },\n info: {\n light: getHex('--bs-info').concat('1a'),\n main: getHex('--bs-info')\n },\n dark: {\n light: getHex('--bs-dark').concat('1a'),\n main: getHex('--bs-dark')\n }\n }\n\n setColors({ ...obj })\n }\n }, [])\n\n return {children}\n}\n\nexport { ThemeColors, ThemeContext }\n","// ** I18n Imports\nimport i18n from 'i18next'\nimport Backend from 'i18next-xhr-backend'\nimport { initReactI18next } from 'react-i18next'\nimport LanguageDetector from 'i18next-browser-languagedetector'\n\ni18n\n\n // Enables the i18next backend\n .use(Backend)\n\n // Enable automatic language detection\n .use(LanguageDetector)\n\n // Enables the hook initialization module\n .use(initReactI18next)\n .init({\n lng: 'en',\n backend: {\n /* translation file path */\n loadPath: `${process.env.PUBLIC_URL}/assets/data/locales/{{lng}}.json`\n },\n fallbackLng: 'en',\n debug: false,\n keySeparator: false,\n react: {\n useSuspense: false\n },\n interpolation: {\n escapeValue: false,\n formatSeparator: ','\n }\n })\n\nexport default i18n\n","// ** Logo\nimport logo from '@src/assets/images/logo/logo.png'\n\nconst SpinnerComponent = () => {\n return (\n
\n logo\n
\n
\n
\n
\n
\n
\n )\n}\n\nexport default SpinnerComponent\n","// ** React Imports\nimport { useState, useEffect } from 'react'\n\n// ** Third Party Components\nimport classnames from 'classnames'\n\n// ** Reactstrap Imports\nimport { Button } from 'reactstrap'\n\n// ** Styles\nimport './ripple-button.scss'\n\nconst RippleButton = ({ className, children, onClick, ...rest }) => {\n // ** States\n const [mounted, setMounted] = useState(false)\n const [isRippling, setIsRippling] = useState(false)\n const [coords, setCoords] = useState({ x: -1, y: -1 })\n\n // ** Toggle mounted on mount & unmount\n useEffect(() => {\n setMounted(true)\n return () => setMounted(false)\n }, [])\n\n // ** Check for coords and set ripple\n useEffect(() => {\n if (mounted) {\n if (coords.x !== -1 && coords.y !== -1) {\n setIsRippling(true)\n setTimeout(() => setIsRippling(false), 500)\n } else {\n setIsRippling(false)\n }\n }\n }, [coords])\n\n // ** Reset Coords on ripple end\n useEffect(() => {\n if (mounted) {\n if (!isRippling) setCoords({ x: -1, y: -1 })\n }\n }, [isRippling])\n\n return (\n {\n const rect = e.target.getBoundingClientRect()\n setCoords({ x: e.clientX - rect.left, y: e.clientY - rect.top })\n if (onClick) {\n onClick(e)\n }\n }}\n {...rest}\n >\n {children}\n {isRippling ? (\n \n ) : null}\n \n )\n}\n\n// ** PropTypes\nRippleButton.propTypes = {\n ...Button.propTypes\n}\n\nButton.Ripple = RippleButton\n","/*eslint-disable */\n// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n)\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets see https://github.com/facebook/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config)\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n )\n })\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n if (installingWorker === null) {\n return\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n )\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration)\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.')\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration)\n }\n }\n }\n }\n }\n })\n .catch(error => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type')\n if (response.status === 404 || (contentType !== null && contentType.indexOf('javascript') === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config)\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.')\n })\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister()\n })\n }\n}\n","// ** React Imports\nimport { Suspense, lazy } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { BrowserRouter } from 'react-router-dom'\n\n// ** Redux Imports\nimport { store } from './redux/store'\nimport { Provider } from 'react-redux'\n\n// ** Intl, CASL & ThemeColors Context\nimport ability from './configs/acl/ability'\nimport { AbilityContext } from './utility/context/Can'\nimport { ThemeContext } from './utility/context/ThemeColors'\n\n// ** ThemeConfig\nimport themeConfig from './configs/themeConfig'\n\n// ** Toast\nimport { Toaster } from 'react-hot-toast'\n\n// ** i18n\nimport './configs/i18n'\n\n// ** Spinner (Splash Screen)\nimport Spinner from './@core/components/spinner/Fallback-spinner'\n\n// ** Ripple Button\nimport './@core/components/ripple-button' \n \n// ** PrismJS\nimport 'prismjs'\nimport 'prismjs/themes/prism-tomorrow.css'\nimport 'prismjs/components/prism-jsx.min'\n\n// ** React Perfect Scrollbar\nimport 'react-perfect-scrollbar/dist/css/styles.css'\n\n// ** React Hot Toast Styles\nimport '@styles/react/libs/react-hot-toasts/react-hot-toasts.scss'\n\n// ** Core styles\nimport './@core/assets/fonts/feather/iconfont.css'\nimport './@core/scss/core.scss'\nimport './assets/scss/style.scss'\n\n// ** Service Worker\nimport * as serviceWorker from './serviceWorker'\n\n// ** Lazy load app\nconst LazyApp = lazy(() => import('./App'))\n\nconst container = document.getElementById('root')\nconst root = createRoot(container)\n\nroot.render(\n \n \n }>\n \n \n \n \n \n \n \n \n \n)\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister()\n","// ** Imports createContext function\nimport { createContext } from 'react'\n\n// ** Imports createContextualCan function\nimport { createContextualCan } from '@casl/react'\n\n// ** Create Context\nexport const AbilityContext = createContext()\n\n// ** Init Can Context\nexport const Can = createContextualCan(AbilityContext.Consumer)\n","// ** Redux Imports\nimport { createSlice } from '@reduxjs/toolkit'\n\n// ** ThemeConfig Import\nimport themeConfig from '@configs/themeConfig'\n\nconst initialMenuCollapsed = () => {\n const item = window.localStorage.getItem('menuCollapsed')\n //** Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : themeConfig.layout.menu.isCollapsed\n}\n\nconst initialDirection = () => {\n const item = window.localStorage.getItem('direction')\n //** Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : themeConfig.layout.isRTL\n}\n\nconst initialSkin = () => {\n const item = window.localStorage.getItem('skin')\n //** Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : themeConfig.layout.skin\n}\n\nexport const layoutSlice = createSlice({\n name: 'layout',\n initialState: {\n skin: initialSkin(),\n isRTL: initialDirection(),\n layout: themeConfig.layout.type,\n lastLayout: themeConfig.layout.type,\n menuCollapsed: initialMenuCollapsed(),\n footerType: themeConfig.layout.footer.type,\n navbarType: themeConfig.layout.navbar.type,\n menuHidden: themeConfig.layout.menu.isHidden,\n contentWidth: themeConfig.layout.contentWidth,\n navbarColor: themeConfig.layout.navbar.backgroundColor\n },\n reducers: {\n handleRTL: (state, action) => {\n state.isRTL = action.payload\n window.localStorage.setItem('direction', JSON.stringify(action.payload))\n },\n handleSkin: (state, action) => {\n state.skin = action.payload\n window.localStorage.setItem('skin', JSON.stringify(action.payload))\n },\n handleLayout: (state, action) => {\n state.layout = action.payload\n },\n handleFooterType: (state, action) => {\n state.footerType = action.payload\n },\n handleNavbarType: (state, action) => {\n state.navbarType = action.payload\n },\n handleMenuHidden: (state, action) => {\n state.menuHidden = action.payload\n },\n handleLastLayout: (state, action) => {\n state.lastLayout = action.payload\n },\n handleNavbarColor: (state, action) => {\n state.navbarColor = action.payload\n },\n handleContentWidth: (state, action) => {\n state.contentWidth = action.payload\n },\n handleMenuCollapsed: (state, action) => {\n state.menuCollapsed = action.payload\n window.localStorage.setItem('menuCollapsed', JSON.stringify(action.payload))\n }\n }\n})\n\nexport const {\n handleRTL,\n handleSkin,\n handleLayout,\n handleLastLayout,\n handleMenuHidden,\n handleNavbarType,\n handleFooterType,\n handleNavbarColor,\n handleContentWidth,\n handleMenuCollapsed\n} = layoutSlice.actions\n\nexport default layoutSlice.reducer\n","export default __webpack_public_path__ + \"static/media/logo.3deac359.png\";","// ** Auth Endpoints\nexport default {\n loginEndpoint: '/jwt/login',\n registerEndpoint: '/jwt/register',\n refreshEndpoint: '/jwt/refresh-token',\n logoutEndpoint: '/jwt/logout',\n\n // ** This will be prefixed in authorization header with token\n // ? e.g. Authorization: Bearer \n tokenType: 'Bearer',\n\n // ** Value of this property will be used as key to store JWT token in storage\n storageTokenKeyName: 'accessToken',\n storageRefreshTokenKeyName: 'refreshToken'\n}\n","import axios from 'axios'\nimport jwtDefaultConfig from './jwtDefaultConfig'\n\nexport default class JwtService {\n // ** jwtConfig <= Will be used by this service\n jwtConfig = { ...jwtDefaultConfig }\n\n // ** For Refreshing Token\n isAlreadyFetchingAccessToken = false\n\n // ** For Refreshing Token\n subscribers = []\n\n constructor(jwtOverrideConfig) {\n this.jwtConfig = { ...this.jwtConfig, ...jwtOverrideConfig }\n\n // ** Request Interceptor\n axios.interceptors.request.use(\n config => {\n // ** Get token from localStorage\n const accessToken = this.getToken()\n\n // ** If token is present add it to request's Authorization Header\n if (accessToken) {\n // ** eslint-disable-next-line no-param-reassign\n config.headers.Authorization = `${this.jwtConfig.tokenType} ${accessToken}`\n }\n return config\n },\n error => Promise.reject(error)\n )\n\n // ** Add request/response interceptor\n axios.interceptors.response.use(\n response => response,\n error => {\n // ** const { config, response: { status } } = error\n const { config, response } = error\n const originalRequest = config\n\n // ** if (status === 401) {\n if (response && response.status === 401) {\n if (!this.isAlreadyFetchingAccessToken) {\n this.isAlreadyFetchingAccessToken = true\n this.refreshToken().then(r => {\n this.isAlreadyFetchingAccessToken = false\n\n // ** Update accessToken in localStorage\n this.setToken(r.data.accessToken)\n this.setRefreshToken(r.data.refreshToken)\n this.onAccessTokenFetched(r.data.accessToken)\n })\n }\n const retryOriginalRequest = new Promise(resolve => {\n this.addSubscriber(accessToken => {\n // ** Make sure to assign accessToken according to your response.\n // ** Check: https://pixinvent.ticksy.com/ticket/2413870\n // ** Change Authorization header\n originalRequest.headers.Authorization = `${this.jwtConfig.cm} ${accessToken}`\n resolve(this.axios(originalRequest))\n })\n })\n return retryOriginalRequest\n }\n return Promise.reject(error)\n }\n )\n }\n\n onAccessTokenFetched(accessToken) {\n this.subscribers = this.subscribers.filter(callback => callback(accessToken))\n }\n\n addSubscriber(callback) {\n this.subscribers.push(callback)\n }\n\n getToken() {\n return localStorage.getItem(this.jwtConfig.storageTokenKeyName)\n }\n\n getRefreshToken() {\n return localStorage.getItem(this.jwtConfig.storageRefreshTokenKeyName)\n }\n\n setToken(value) {\n localStorage.setItem(this.jwtConfig.storageTokenKeyName, value)\n }\n\n setRefreshToken(value) {\n localStorage.setItem(this.jwtConfig.storageRefreshTokenKeyName, value)\n }\n\n login(...args) {\n return axios.post(this.jwtConfig.loginEndpoint, ...args)\n }\n\n register(...args) {\n return axios.post(this.jwtConfig.registerEndpoint, ...args)\n }\n\n refreshToken() {\n return axios.post(this.jwtConfig.refreshEndpoint, {\n refreshToken: this.getRefreshToken()\n })\n }\n}\n","// ** Core JWT Import\nimport useJwt from '@src/@core/auth/jwt/useJwt'\n\nconst { jwt } = useJwt({})\n\nexport default jwt\n","// ** JWT Service Import\nimport JwtService from './jwtService'\n\n// ** Export Service as useJwt\nexport default function useJwt(jwtOverrideConfig) {\n const jwt = new JwtService(jwtOverrideConfig)\n\n return {\n jwt\n }\n}\n","// ** Redux Imports\nimport { createSlice } from '@reduxjs/toolkit'\n\n// ** UseJWT import to get config\nimport useJwt from '@src/auth/jwt/useJwt'\n\nconst config = useJwt.jwtConfig\n\nconst initialUser = () => {\n const item = window.localStorage.getItem('userData') \n //** Parse stored json or if none return initialValue\n return item ? JSON.stringify(item) : {}\n}\n\nexport const authSlice = createSlice({\n name: 'authentication',\n initialState: {\n userData: initialUser() \n },\n reducers: {\n handleLogin: (state, action) => {\n state.userData = action.payload \n state[config.storageTokenKeyName] = action.payload[config.storageTokenKeyName]\n state[config.storageRefreshTokenKeyName] = action.payload[config.storageRefreshTokenKeyName]\n localStorage.setItem('userData', JSON.stringify(action.payload))\n localStorage.setItem(config.storageTokenKeyName, JSON.stringify(action.payload.accessToken))\n localStorage.setItem(config.storageRefreshTokenKeyName, JSON.stringify(action.payload.refreshToken))\n },\n handleLogout: state => {\n state.userData = {}\n state[config.storageTokenKeyName] = null\n state[config.storageRefreshTokenKeyName] = null\n // ** Remove user, accessToken & refreshToken from localStorage\n localStorage.removeItem('userData')\n localStorage.removeItem(config.storageTokenKeyName)\n localStorage.removeItem(config.storageRefreshTokenKeyName)\n }\n }\n})\n\nexport const { handleLogin, handleLogout } = authSlice.actions\n\nexport default authSlice.reducer\n","export default __webpack_public_path__ + \"static/media/logo.e4c6f6a4.svg\";"],"sourceRoot":""}