{"version":3,"sources":["assets/images/logo/logo-wayun.png","assets/images/logo/logo-wayun-plus.png","assets/images/logo/logo-wayun-privacy-plus.png","redux/navbar.js","redux/rootReducer.js","redux/store.js","configs/acl/ability.js","configs/acl/initialAbility.js","utility/context/ThemeColors.js","@core/components/spinner/Fallback-spinner.js","@core/components/ripple-button/index.js","serviceWorker.js","graphql/index.js","index.js","configs/themeConfig.js","assets/images/logo/lofty-logo.svg","redux/layout.js","@core/auth/jwt/jwtDefaultConfig.js","@core/auth/jwt/jwtService.js","auth/jwt/useJwt.js","redux/authenticate.js","@core/auth/jwt/useJwt.js","utility/context/Can.js"],"names":["getBookmarks","createAsyncThunk","axios","get","response","data","suggestions","bookmarks","updateBookmarked","id","post","layoutSlice","createSlice","name","initialState","query","reducers","handleSearchQuery","state","action","payload","extraReducers","builder","addCase","fulfilled","find","item","isBookmarked","objectToUpdate","bookmarkIndex","findIndex","x","push","splice","actions","rootReducer","navbar","layout","auth","store","configureStore","reducer","middleware","getDefaultMiddleware","serializableCheck","userData","JSON","parse","localStorage","getItem","fullName","username","avatar","email","ability","subject","existingAbility","Ability","ThemeColors","createContext","ThemeContext","children","useState","colors","setColors","useEffect","window","getHex","color","getComputedStyle","document","body","getPropertyValue","trim","obj","primary","light","concat","main","secondary","success","danger","warning","info","dark","Provider","value","SpinnerComponent","className","src","logo","alt","style","aspectRatio","width","Button","Ripple","onClick","rest","mounted","setMounted","isRippling","setIsRippling","y","coords","setCoords","setTimeout","classnames","e","rect","target","getBoundingClientRect","clientX","left","clientY","top","Boolean","location","hostname","match","wsLink","GraphQLWsLink","createClient","url","process","connectionParams","token","accessToken","authorization","httpLink","createHttpLink","uri","authLink","setContext","_","headers","Authorization","Platform","splitLink","split","definition","getMainDefinition","kind","operation","client","ApolloClient","link","cache","InMemoryCache","LazyApp","lazy","container","getElementById","createRoot","render","ApolloProvider","fallback","position","themeConfig","toastPosition","toastOptions","navigator","serviceWorker","ready","then","registration","unregister","app","appName","appLogoImage","require","default","appLogoImageText","appLogoPremiumImageText","appLogoPremiumPrivacyImageText","isRTL","skin","type","contentWidth","menu","isHidden","isCollapsed","backgroundColor","footer","customizer","scrollTop","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","jwtOverrideConfig","jwtConfig","jwtDefaultConfig","isAlreadyFetchingAccessToken","subscribers","this","interceptors","request","use","config","getToken","error","Promise","reject","originalRequest","status","refreshToken","r","setToken","setRefreshToken","onAccessTokenFetched","resolve","addSubscriber","filter","callback","args","getRefreshToken","jwt","authSlice","initialUser","handleLogin","handleUpdateUser","handleLogout","removeItem","AbilityContext","createContextualCan","Consumer"],"mappings":"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","file":"static/js/main.0962756a.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/logo-wayun.667ac9fc.png\";","export default __webpack_public_path__ + \"static/media/logo-wayun-plus.9efbc45a.png\";","export default __webpack_public_path__ + \"static/media/logo-wayun-privacy-plus.35ba1af1.png\";","// ** 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 layout from './layout';\nimport navbar from './navbar';\nimport auth from './authenticate';\n\nconst rootReducer = { navbar, layout, auth };\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","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 testUser = {\n id: 1,\n fullName: 'John Doe',\n username: 'johndoe',\n avatar: '/img/13-small.d796bffd.png',\n email: 'admin@demo.com',\n ability: [\n {\n action: 'manage',\n subject: 'all',\n },\n ],\n // more...\n};\nconst userData = JSON.parse(localStorage.getItem('userData')) || testUser;\nconst existingAbility = userData ? userData.ability : null;\n\nexport default new Ability(existingAbility || initialAbility);\n","// ** Initial user ability\nexport const initialAbility = [\n {\n action: 'read',\n subject: 'Auth'\n }\n]\n\nexport const _ = undefined\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 (\n {children}\n )\n}\n\nexport { ThemeColors, ThemeContext }\n","// ** Logo\nimport logo from '@src/assets/images/logo/lofty-logo.svg'\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(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\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 (\n response.status === 404 ||\n (contentType !== null && contentType.indexOf(\"javascript\") === -1)\n ) {\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(\n \"No internet connection found. App is running in offline mode.\"\n );\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister();\n });\n }\n}\n","import {\n ApolloClient,\n InMemoryCache,\n // ApolloProvider,\n createHttpLink,\n split,\n // gql,\n} from '@apollo/client';\n// import { typeDefs } from './typeDefs';\nimport { setContext } from '@apollo/client/link/context';\nimport { getMainDefinition } from '@apollo/client/utilities';\nimport { GraphQLWsLink } from '@apollo/client/link/subscriptions';\nimport { createClient } from 'graphql-ws';\n\n// console.log('🚀 ~ file: index.js:15 ~ token', token);\n\n// console.log(process.env.REACT_APP_GRAPHQL_URI);\nconst wsLink = new GraphQLWsLink(\n createClient({\n url: process.env.REACT_APP_GRAPHQL_SUBSCRIPTION,\n connectionParams: () => {\n const token = JSON.parse(localStorage.getItem('userData'))?.accessToken || '';\n return {\n authorization: token ? `Bearer ${token}` : '',\n }\n },\n })\n);\nconst httpLink = createHttpLink({\n uri: process.env.REACT_APP_GRAPHQL_URI,\n});\n\nconst authLink = setContext((_, { headers }) => {\n // get the authentication token from local storage if it exists\n // const token = localStorage.getItem('token');\n // const token = JSON.parse(\n // JSON.parse(localStorage.getItem('persist:nextjs')).auth\n // ).accessToken;\n // const token = localToken();\n const token = JSON.parse(localStorage.getItem('userData'))?.accessToken || '';\n // console.log(token);\n // return the headers to the context so httpLink can read them\n return {\n headers: {\n ...headers,\n Authorization: token ? `Bearer ${token}` : '',\n Platform: 'web',\n },\n };\n});\n// The split function takes three parameters:\n//\n// * A function that's called for each operation to execute\n// * The Link to use for an operation if the function returns a \"truthy\" value\n// * The Link to use for an operation if the function returns a \"falsy\" value\nconst splitLink = split(\n ({ query }) => {\n const definition = getMainDefinition(query);\n return (\n definition.kind === 'OperationDefinition' &&\n definition.operation === 'subscription'\n );\n },\n wsLink,\n httpLink\n);\nconst client = new ApolloClient({\n link: authLink.concat(splitLink),\n cache: new InMemoryCache(),\n});\n\nexport default client;\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'\n// ** ThemeColors Context\n\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// ** 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// ** Apollo Setup\nimport * as serviceWorker from './serviceWorker'\nimport { ApolloProvider } from '@apollo/client'\nimport client from './graphql'\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)\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","// You can customize the template with the help of this file\n\n//Template config options\nconst themeConfig = {\n app: {\n appName: 'Wayun',\n appLogoImage: require('@src/assets/images/logo/lofty-logo.svg').default,\n appLogoImageText: require('@src/assets/images/logo/logo-wayun.png').default,\n appLogoPremiumImageText: require('@src/assets/images/logo/logo-wayun-plus.png').default,\n appLogoPremiumPrivacyImageText: require('@src/assets/images/logo/logo-wayun-privacy-plus.png').default,\n // appLogoImage: require('@src/assets/images/logo/logo.svg').default,\n },\n layout: {\n isRTL: false,\n skin: 'light', // light, dark, bordered, semi-dark\n type: 'vertical', // vertical, horizontal\n contentWidth: 'boxed', // full, boxed\n menu: {\n isHidden: false,\n isCollapsed: false,\n },\n navbar: {\n // ? For horizontal menu, navbar type will work for navMenu type\n type: 'floating', // static , sticky , floating, hidden\n backgroundColor: 'white', // BS color options [primary, success, etc]\n },\n footer: {\n type: 'static', // static, sticky, hidden\n },\n customizer: false,\n scrollTop: true, // Enable scroll to top button\n toastPosition: 'top-right', // top-left, top-center, top-right, bottom-left, bottom-center, bottom-right\n },\n}\n\nexport default themeConfig\n","export default __webpack_public_path__ + \"static/media/lofty-logo.99b1b10a.svg\";","// ** 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(\n \"menuCollapsed\",\n JSON.stringify(action.payload)\n )\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","// ** 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\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.tokenType} ${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) =>\n callback(accessToken)\n );\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","// ** 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.parse(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 handleUpdateUser: (state, action) => {\n state.userData = { ...state.userData, ...action.payload }\n localStorage.setItem('userData', JSON.stringify({ ...state.userData, ...action.payload }))\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, handleUpdateUser } = authSlice.actions\n\nexport default authSlice.reducer\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","// ** 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"],"sourceRoot":""}