{"version":3,"file":"javascript/build1/app.25.1.3.js","mappings":"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","sources":["webpack://morpheus/./src/js/setup/themes.js","webpack://morpheus/./src/js/helpers/chunkLoader.js","webpack://morpheus/./src/js/hooks/ui/useGomTheme.js","webpack://morpheus/./src/js/components/Layouts/RouteLoadingSplashScreen/index.js","webpack://morpheus/./src/js/helpers/privateRoute.js","webpack://morpheus/./src/js/pages/Updates/index.js","webpack://morpheus/./src/js/pages/GeoBlockedPage/index.js","webpack://morpheus/./src/js/components/BankingEventListener/index.js","webpack://morpheus/./src/js/containers/routes.js","webpack://morpheus/./src/js/components/LazyLoadedComponents/LazyBedeNotifications/index.js","webpack://morpheus/./src/js/containers/app.js","webpack://morpheus/./src/js/hooks/api/usePing.js","webpack://morpheus/./src/js/setup/history.js","webpack://morpheus/./src/js/app.js","webpack://morpheus/./src/js/components/Button/index.js","webpack://morpheus/./src/js/components/DevTools/ThemeSwitcher/index.js","webpack://morpheus/./src/js/components/DevTools/ThemeSwitcher/themeswitcher.prod.js","webpack://morpheus/./src/js/components/ErrorBoundary/index.js","webpack://morpheus/./src/js/components/Modal/ModalRoot.js","webpack://morpheus/./src/js/components/Modal/Modals/standaloneModal.js","webpack://morpheus/./src/js/components/Modal/index.js","webpack://morpheus/./src/js/components/WrappedMUIComponents/RouterLink/index.js","webpack://morpheus/./src/js/constants/index.js","webpack://morpheus/./src/js/containers/lazyRoutes.js","webpack://morpheus/./src/js/helpers/async.js","webpack://morpheus/./src/js/helpers/dayjs.js","webpack://morpheus/./src/js/helpers/gaEvents.js","webpack://morpheus/./src/js/helpers/getConsentValueById.js","webpack://morpheus/./src/js/helpers/handledSentryError.js","webpack://morpheus/./src/js/helpers/index.js","webpack://morpheus/./src/js/helpers/loggly.js","webpack://morpheus/./src/js/helpers/microsoft.js","webpack://morpheus/./src/js/helpers/snapchat.js","webpack://morpheus/./src/js/helpers/storage.js","webpack://morpheus/./src/js/hooks/api/useAccount.js","webpack://morpheus/./src/js/hooks/api/useBanking.js","webpack://morpheus/./src/js/hooks/api/useMessages.js","webpack://morpheus/./src/js/hooks/api/usePromotions.js","webpack://morpheus/./src/js/hooks/api/useRecentGames.js","webpack://morpheus/./src/js/setup/routes.js","webpack://morpheus/./src/js/hooks/useAsync.js","webpack://morpheus/./src/js/hooks/api/useRedPill.js","webpack://morpheus/./src/js/hooks/useFreeSpins.js","webpack://morpheus/./src/js/hooks/useGames.js","webpack://morpheus/./src/js/hooks/useIsMounted.js","webpack://morpheus/./src/js/hooks/useLobby.js","webpack://morpheus/./src/js/hooks/useStorage.js","webpack://morpheus/./src/js/helpers/loadExternalScript.js","webpack://morpheus/./src/js/redux/actions/liveAgent.js","webpack://morpheus/./src/js/hooks/useZendesk.js","webpack://morpheus/./src/js/pages/GenericInfoPages/GenericPage.js","webpack://morpheus/./src/js/redux/actions/bingo.js","webpack://morpheus/./src/js/redux/actions/claims.js","webpack://morpheus/./src/js/redux/actions/freeSpins.js","webpack://morpheus/./src/js/redux/actions/limits.js","webpack://morpheus/./src/js/redux/actions/lobby.js","webpack://morpheus/./src/js/redux/actions/loyalty.js","webpack://morpheus/./src/js/redux/actions/messages.js","webpack://morpheus/./src/js/redux/actions/morpheus.js","webpack://morpheus/./src/js/redux/actions/promotions.js","webpack://morpheus/./src/js/redux/actions/responsibleGambling.js","webpack://morpheus/./src/js/redux/actions/ui.js","webpack://morpheus/./src/js/redux/actions/wallets.js","webpack://morpheus/./src/js/redux/reducers/uiReducer.js","webpack://morpheus/./src/js/redux/store.js","webpack://morpheus/./src/js/redux/reducers/morpheusReducer.js","webpack://morpheus/./src/js/redux/reducers/walletsReducer.js","webpack://morpheus/./src/js/redux/reducers/limitsReducer.js","webpack://morpheus/./src/js/redux/reducers/claimsReducer.js","webpack://morpheus/./src/js/redux/reducers/lobbyReducer.js","webpack://morpheus/./src/js/redux/reducers/promotionsReducer.js","webpack://morpheus/./src/js/redux/reducers/responsibleGamblingReducer.js","webpack://morpheus/./src/js/redux/reducers/messagesReducer.js","webpack://morpheus/./src/js/redux/reducers/liveAgentReducer.js","webpack://morpheus/./src/js/redux/reducers/loyaltyReducer.js","webpack://morpheus/./src/js/redux/reducers/bingoReducer.js","webpack://morpheus/./src/js/redux/reducers/freeSpinsReducer.js","webpack://morpheus/./src/js/redux/reducers/rootReducer.js","webpack://morpheus/./src/js/redux/store.prod.js","webpack://morpheus/./src/js/setup/analytics.js","webpack://morpheus/./src/js/setup/config.js","webpack://morpheus/./src/js/setup/urls.js","webpack://morpheus/./src/js/theme/breakpoints.js","webpack://morpheus/external var \"React\"","webpack://morpheus/external var \"ReactDOM\""],"sourcesContent":["// Bingo Themes\r\nconst butlersBingo = async () => await import(/* webpackChunkName: \"themes/butlersBingo\" */ `Theme/butlersBingo`).then(theme => theme.default);\r\nconst bingoDiamond = async () => await import(/* webpackChunkName: \"themes/bingoDiamond\" */ `Theme/bingoDiamond`).then(theme => theme.default);\r\nconst dottyBingo = async () => await import(/* webpackChunkName: \"themes/dottyBingo\" */ `Theme/dottyBingo`).then(theme => theme.default);\r\nconst glossyBingo = async () => await import(/* webpackChunkName: \"themes/glossyBingo\" */ `Theme/glossyBingo`).then(theme => theme.default);\r\nconst rosyBingo = async () => await import(/* webpackChunkName: \"themes/rosyBingo\" */ `Theme/rosyBingo`).then(theme => theme.default);\r\n\r\n// Casino Themes\r\nconst casinoFantastico = async () => await import(/* webpackChunkName: \"themes/casinoFantastico\" */ `Theme/casinoFantastico`).then(theme => theme.default);\r\nconst casinoOfDreams = async () => await import(/* webpackChunkName: \"themes/casinoOfDreams\" */ `Theme/casinoOfDreams`).then(theme => theme.default);\r\nconst lucky247 = async () => await import(/* webpackChunkName: \"themes/lucky247\" */ `Theme/lucky247`).then(theme => theme.default);\r\n\r\nexport const THEMES = {\r\n cf: casinoFantastico,\r\n cd: casinoOfDreams,\r\n bb: butlersBingo,\r\n bd: bingoDiamond,\r\n db: dottyBingo,\r\n gb: glossyBingo,\r\n l247: lucky247,\r\n rb: rosyBingo\r\n};\r\n","export default function componentLoader(lazyComponent, attemptsLeft) {\r\n return new Promise((resolve, reject) => {\r\n lazyComponent()\r\n .then(resolve)\r\n .catch((error) => {\r\n // let us retry after 1500 ms\r\n setTimeout(() => {\r\n if (attemptsLeft === 1) {\r\n reject(error);\r\n return;\r\n }\r\n componentLoader(lazyComponent, attemptsLeft - 1).then(resolve, reject);\r\n }, 1500);\r\n });\r\n });\r\n};\r\n","import {useEffect, useRef, useState} from \"react\";\r\nimport {BRAND_THEME, IS_STAGING} from \"Setup/config\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {THEMES} from \"Setup/themes\";\r\nimport useStorage from \"Hooks/useStorage\";\r\nimport {activeTheme} from \"Redux/reducers/uiReducer\";\r\nimport {updateTheme} from \"Redux/actions/ui\";\r\nimport componentLoader from \"Helpers/chunkLoader\";\r\n\r\nexport const useGomTheme = () => {\r\n const dispatch = useDispatch();\r\n const firstUpdate = useRef(true);\r\n const [themeReady, setThemeReady] = useState(false);\r\n const [theme, setTheme] = useState(BRAND_THEME);\r\n const {currentTheme} = useSelector(state => ({\r\n currentTheme: state.ui.currentTheme\r\n }));\r\n\r\n const {setValue, storedValue: storedTheme} = useStorage(\"activeTheme\", activeTheme, \"localStorage\");\r\n const setNewTheme = theme => {\r\n setValue(theme);\r\n dispatch(updateTheme(theme));\r\n }\r\n\r\n useEffect(() => {\r\n if (IS_STAGING) {\r\n if (firstUpdate.current) {\r\n firstUpdate.current = false;\r\n loadTheme(storedTheme);\r\n } else {\r\n loadTheme(currentTheme);\r\n }\r\n } else {\r\n loadTheme(currentTheme);\r\n }\r\n }, [storedTheme, currentTheme]);\r\n\r\n const loadTheme = async (theme) => {\r\n const t = THEMES[theme];\r\n // const res = await t();\r\n const res = await componentLoader(t, 3);\r\n console.log(res);\r\n setTheme(res);\r\n setThemeReady(true);\r\n };\r\n\r\n const appliedTheme = themeReady ? theme : false;\r\n\r\n return {appliedTheme, themeReady, setNewTheme, themeCode: storedTheme};\r\n};\r\n","const RouteLoadingSplash = () => {\r\n // React.useEffect(() => {\r\n // console.log(\"hello\")\r\n //\r\n // if (document.getElementById('app').classList.contains('loaded')) {\r\n // document.getElementById('app').classList.remove('loaded');\r\n // }\r\n //\r\n // return () => {\r\n // if (!document.getElementById('app').classList.contains('loaded')) {\r\n // document.getElementById('app').classList.add('loaded');\r\n // }\r\n // };\r\n // }, []);\r\n\r\n return null;\r\n};\r\n\r\nexport default RouteLoadingSplash;\r\n","import React from 'react';\r\nimport {Redirect, Route} from \"react-router-dom\";\r\nimport {IS_LOGGED_IN} from \"Setup/config\";\r\nimport {HOME_URL, LOGIN_URL} from \"Setup/urls\";\r\n\r\nexport const LoggedOutRoute = ({component, render, ...rest}) => {\r\n const Component = component || render;\r\n return !IS_LOGGED_IN ? }/> : ;\r\n};\r\n\r\nexport const LoggedInRoute = ({component, render, ...rest}) => {\r\n const Component = component || render;\r\n return IS_LOGGED_IN ? }/> : ;\r\n};\r\n","import {useLocation} from \"react-router-dom\";\r\nimport {Lazy404, LazyServerProvidedContentPage} from \"Containers/lazyRoutes\";\r\n\r\nconst UpdatesPage = () => {\r\n const location = useLocation();\r\n\r\n const updatesRoutesObj = window.MORPHEUS.routes.updates;\r\n const pageExists = Object.values(updatesRoutesObj).find(page => {\r\n return page === location.pathname;\r\n })\r\n\r\n console.log(window.PAGE.id, location.pathname);\r\n\r\n if (pageExists || (window.hasOwnProperty('PAGE') && location.pathname.includes(window.PAGE.id))) {\r\n return \r\n }\r\n\r\n return \r\n};\r\n\r\nexport default UpdatesPage;\r\n","import {Box, Grid, Typography} from \"@material-ui/core\";\r\n\r\nconst GeoBlockedPage = () => {\r\n React.useEffect(() => {\r\n if (!document.getElementById('app').classList.contains('loaded')) {\r\n document.getElementById('app').classList.add('loaded');\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n Restricted Country\r\n You are not allowed to access or create an account from your current location.\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default GeoBlockedPage;\r\n","import {IS_LOGGED_IN, IS_STAGING, PLAYER_ID, USE_NEW_BANKING_EVENT_LISTENER} from \"Setup/config\";\r\nimport {sendGA4Event} from \"Helpers/gaEvents\";\r\nimport {sendLogglyEvent} from \"Helpers/loggly\";\r\nimport ErrorBoundary from \"Components/ErrorBoundary\";\r\nimport {useEffect, useRef} from \"react\";\r\nimport useBanking from \"Hooks/api/useBanking\";\r\nimport {setHasDeposited} from \"Redux/actions/morpheus\";\r\nimport {useDispatch} from \"react-redux\";\r\n\r\nconst sendMessagesFromSafechargeToLoggly = true;\r\nconst sendLogglyEventBankingEventListener = (message, json) => sendMessagesFromSafechargeToLoggly ? sendLogglyEvent('Safecharge', message, json) : null;\r\n\r\nconst _BankingEventListener = ({hasError}) => {\r\n const dispatch = useDispatch();\r\n const {hasDeposited} = useBanking({});\r\n const isFTDRef = useRef(!hasDeposited);\r\n\r\n if (hasError) return null;\r\n if (!IS_LOGGED_IN || !USE_NEW_BANKING_EVENT_LISTENER) return null;\r\n\r\n const _setHasDeposited = () => {\r\n if(isFTDRef.current) {\r\n dispatch(setHasDeposited());\r\n isFTDRef.current = false;\r\n }\r\n };\r\n\r\n const listenForBankingWindowEvents = (evt) => {\r\n if (evt.origin.includes(\"safecharge\") && evt?.data) {\r\n try {\r\n const parsedMessage = JSON.parse(evt.data);\r\n\r\n if (parsedMessage) {\r\n if (parsedMessage?.payload?.action) {\r\n const newAction = parsedMessage.payload.action;\r\n const actionsToWatch = [\"made deposit\", \"made first deposit\"];\r\n\r\n if (actionsToWatch.includes(newAction)) {\r\n let depositValue = 0;\r\n if (parsedMessage?.payload?.deposit_amount) {\r\n depositValue = Number(parsedMessage.payload.deposit_amount).toFixed(2);\r\n\r\n console.log(`%cSuccessful Deposit : £${depositValue}`, 'color: green;');\r\n console.log(parsedMessage);\r\n }\r\n\r\n if (isFTDRef.current) {\r\n if (!IS_STAGING) {\r\n window.dataLayer.push({event: 'firstDeposit_v2'});\r\n\r\n sendGA4Event('purchase_FTD', {\r\n currency: 'GBP',\r\n player_id: PLAYER_ID,\r\n value: depositValue\r\n });\r\n }\r\n }\r\n\r\n sendGA4Event('purchase', {\r\n currency: 'GBP',\r\n player_id: PLAYER_ID,\r\n value: depositValue\r\n });\r\n\r\n // window.postMessage({type: \"successful-deposit\", value: depositValue});\r\n sendLogglyEventBankingEventListener(`${isFTDRef.current ? 'First ' : ''}Deposit from the banking client`, parsedMessage);\r\n _setHasDeposited();\r\n }\r\n }\r\n\r\n sendLogglyEventBankingEventListener('Message from the banking client', parsedMessage);\r\n }\r\n } catch (error) {\r\n sendLogglyEventBankingEventListener('Error in bankingModalListener', error);\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener('message', listenForBankingWindowEvents, false);\r\n\r\n return () => {\r\n window.removeEventListener('message', listenForBankingWindowEvents, false);\r\n }\r\n }, []);\r\n\r\n return null;\r\n};\r\n\r\nconst BankingEventListener = () => (\r\n \r\n <_BankingEventListener/>\r\n \r\n);\r\n\r\nexport default BankingEventListener;\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport RouteLoadingSplash from \"Components/Layouts/RouteLoadingSplashScreen\";\r\nimport {Redirect, Route, Switch, useLocation} from \"react-router-dom\";\r\nimport {LoggedInRoute, LoggedOutRoute} from \"Helpers/privateRoute\";\r\nimport {\r\n Lazy404,\r\n Lazy500,\r\n LazyAccountPendingAIDPage,\r\n LazyAgeAndIdentityCheck,\r\n LazyBingo,\r\n LazyChangePasswordPage,\r\n LazyContactCSPage,\r\n LazyDepositPage,\r\n LazyDesktopBingoGamePage,\r\n LazyDesktopGamePage,\r\n LazyDragonfishOperatedSites,\r\n LazyHomePage,\r\n LazyIdentityCheckInfoPage,\r\n LazyLobby,\r\n LazyLoginPage,\r\n LazyMaintenancePage,\r\n LazyMobileBingoGamePage,\r\n LazyMobileGamePage,\r\n LazyNewPlayerHomepage,\r\n LazyPayoutRates,\r\n LazyPrimaryLayout,\r\n LazyPromos,\r\n LazyRegistration,\r\n LazyRegistrationLayout,\r\n LazyRequestPasswordPage,\r\n LazyResponsibleGamblingApp,\r\n LazyResponsibleGamblingPage,\r\n LazyRewards,\r\n LazySaferGamblingWeekPage,\r\n LazyServerProvidedContentPage,\r\n LazySlots,\r\n LazySourceOfFunds,\r\n LazySpecialEventPromo,\r\n LazySupportPage,\r\n LazyTermsAndConditions,\r\n LazyTermsAndConditionsChangelog,\r\n LazyVerificationMessageReceiver,\r\n} from \"./lazyRoutes\";\r\n\r\nimport {\r\n ABOUT_US_URL,\r\n BINGO_RULES_URL,\r\n BINGO_URL,\r\n BONUS_MONEY_RULES_URL,\r\n BROADWAY_GAMING_GROUP_SITES_URL,\r\n COOKIE_POLICY_URL,\r\n FB_TERMS_URL,\r\n HOME_URL,\r\n LOGIN_URL,\r\n NEW_PLAYER_HOMEPAGE_URL,\r\n PAYOUT_RATES_URL,\r\n PLAYER_PROTECTION_URL,\r\n PRIVACY_POLICY_URL,\r\n PROMOS_URL,\r\n PROMOTIONAL_TERMS_URL,\r\n PROTECTION_OF_FUNDS_URL,\r\n REGISTER_URL,\r\n RESPONSIBLE_GAMBLING_INFO_URL,\r\n RESPONSIBLE_GAMBLING_URL,\r\n REWARDS_URL,\r\n SAFER_GAMBLING_URL,\r\n SECURITY_URL,\r\n SLOTS_URL,\r\n SOURCE_OF_FUNDS_URL,\r\n SUPPORT_URL,\r\n TERMS_AND_CONDITIONS_URL\r\n} from \"Setup/urls\";\r\n\r\nimport {\r\n CAN_LOGIN,\r\n CAN_REGISTER,\r\n FB_TERMS_ENABLED,\r\n IS_BRAND_IN_MAINTENANCE_MODE,\r\n IS_CLIENT_FROM_GEO_BLOCKED_COUNTRY,\r\n IS_HOT_RELOAD_ENABLED,\r\n IS_LOGGED_IN,\r\n IS_MOBILE,\r\n IS_PROD,\r\n IS_THEME_SWITCHER_ENABLED,\r\n LOAD_ACCOUNT_VERIFICATION_PAGES_FROM_FORGE,\r\n NEW_PLAYER_HOMEPAGE_ENABLED,\r\n PROMOS_ENABLED,\r\n RESTRICTED_COUNTRY_ROUTE,\r\n REWARDS_ENABLED,\r\n SPECIAL_EVENT_PROMO_ENABLED,\r\n SPECIAL_EVENT_PROMO_URL,\r\n VERIFICATION_MESSAGE_MODAL_ENABLED\r\n} from \"Setup/config\";\r\n\r\nimport UpdatesPage from \"Pages/Updates\";\r\nimport ErrorBoundary from \"Components/ErrorBoundary\";\r\nimport ModalRoot from \"Components/Modal/ModalRoot\";\r\nimport {useZendesk} from \"Hooks/useZendesk\";\r\nimport useIdleUntilUrgent from \"use-idle-until-urgent\";\r\nimport {sendGA4Event} from \"Helpers/gaEvents\";\r\nimport ThemeSwitcher from \"Components/DevTools/ThemeSwitcher\";\r\nimport {sanitizeUrl} from \"Helpers\";\r\nimport GeoBlockedPage from \"Pages/GeoBlockedPage\";\r\nimport {sendSnapchatPageview} from \"Helpers/snapchat\";\r\n\r\nimport BankingEventListener from \"Components/BankingEventListener\";\r\n\r\nfunction usePageViews() {\r\n const location = useLocation();\r\n const firstUpdate = useRef(true);\r\n\r\n useEffect(() => {\r\n if (firstUpdate.current) {\r\n firstUpdate.current = false;\r\n } else {\r\n // Scroll to the top of the page on route change\r\n if (!IS_HOT_RELOAD_ENABLED) {\r\n window.scrollTo(0, 0);\r\n }\r\n }\r\n\r\n const sanitizedSearch = sanitizeUrl(location.search);\r\n if (!IS_PROD) console.log(`${location.pathname}${sanitizedSearch}`);\r\n sendGA4Event('page_view', {page_location: `${location.pathname}${sanitizedSearch}`});\r\n\r\n sendSnapchatPageview();\r\n\r\n }, [location]);\r\n}\r\n\r\nconst LocationWrapper = ({children}) => {\r\n usePageViews();\r\n\r\n return children;\r\n};\r\n\r\nconst LiveAgent = () => {\r\n let chatInitDelay = IS_LOGGED_IN ? 2000 : IS_MOBILE ? 5000 : 3000;\r\n\r\n const {initZendesk} = useZendesk();\r\n const IdleUntilUrgentlyLoadedComponent = useIdleUntilUrgent(\r\n async () => {\r\n setTimeout(() => {\r\n initZendesk();\r\n }, chatInitDelay);\r\n\r\n return () => null;\r\n },\r\n {\r\n fallback: () => null\r\n }\r\n );\r\n\r\n return ;\r\n};\r\n\r\nconst Routes = () => {\r\n const location = useLocation();\r\n const [zendeskInitiated, setZendeskInitiated] = useState(false);\r\n\r\n useEffect(() => {\r\n if (!location.pathname.includes(\"/offer\") && !location.pathname.includes(\"/welcome-offer\") && !(NEW_PLAYER_HOMEPAGE_ENABLED && location.pathname === \"/\")) {\r\n setZendeskInitiated(true);\r\n }\r\n }, [location.pathname]);\r\n\r\n if (NEW_PLAYER_HOMEPAGE_ENABLED && location.pathname === \"/\") {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n \r\n }>\r\n {VERIFICATION_MESSAGE_MODAL_ENABLED &&\r\n \r\n \r\n \r\n }\r\n \r\n \r\n {IS_CLIENT_FROM_GEO_BLOCKED_COUNTRY &&\r\n \r\n }\r\n\r\n {IS_BRAND_IN_MAINTENANCE_MODE ?\r\n <>\r\n \r\n \r\n :\r\n \r\n }\r\n\r\n {(NEW_PLAYER_HOMEPAGE_ENABLED) ?\r\n :\r\n \r\n }\r\n\r\n \r\n\r\n {CAN_REGISTER ?\r\n \r\n \r\n \r\n \r\n :\r\n \r\n }\r\n\r\n {CAN_LOGIN ?\r\n :\r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n {PROMOS_ENABLED ? :\r\n \r\n \r\n \r\n }\r\n\r\n {REWARDS_ENABLED && }\r\n \r\n \r\n\r\n {SPECIAL_EVENT_PROMO_ENABLED ?\r\n :\r\n \r\n \r\n \r\n }\r\n\r\n \r\n \r\n\r\n {/* TODO: Temporary routes for updates page issue */}\r\n }/>\r\n }/>\r\n }/>\r\n\r\n \r\n \r\n \r\n\r\n {/* <------ FOOTER LINKS ------> */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }/>\r\n }/>\r\n \r\n }/>\r\n {FB_TERMS_ENABLED &&\r\n \r\n }/>\r\n }\r\n\r\n }/>\r\n }/>\r\n }/>\r\n\r\n \r\n (\r\n \r\n )}/>\r\n\r\n \r\n\r\n {/* <------ FOOTER LINKS ------> */}\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {IS_THEME_SWITCHER_ENABLED && }\r\n {zendeskInitiated && }\r\n {IS_LOGGED_IN && }\r\n \r\n );\r\n}\r\n\r\nexport default Routes;\r\n","import React from \"react\";\r\nimport {LazyLoad, LazyLoaderFactory} from \"Containers/lazyRoutes\";\r\n\r\nconst BedeNotificationsLazyLoadComponent = () => {\r\n return (\r\n
\r\n )\r\n}\r\n\r\nconst BedeNotifications = LazyLoaderFactory(() => import(/* webpackChunkName: \"LoggedInBundledComponents\" */ \"Components/BedeComponents/BedeNotifications\"), () =>\r\n );\r\nexport const LazyBedeNotifications = props => ;\r\n","import React, {useEffect} from \"react\";\r\nimport {BrowserRouter as Router} from \"react-router-dom\";\r\nimport {CssBaseline, MuiThemeProvider, Typography} from \"@material-ui/core\";\r\nimport {usePing} from \"Hooks/api/usePing\";\r\nimport {SnackbarProvider} from \"notistack\";\r\nimport useLobby from \"Hooks/useLobby\";\r\nimport {useMyAccount} from \"Hooks/api/useAccount\";\r\nimport {useGomTheme} from \"Hooks/ui/useGomTheme\";\r\nimport Routes from \"./routes\";\r\nimport {IS_LOGGED_IN} from \"Setup/config\";\r\nimport supportsWebP from \"supports-webp\";\r\nimport {LazyBedeNotifications} from \"Components/LazyLoadedComponents/LazyBedeNotifications\";\r\n\r\nconst App = (props) => {\r\n usePing();\r\n const {appliedTheme, themeReady} = useGomTheme();\r\n const {_getMyAccount} = useMyAccount();\r\n const {refreshAccount, refreshPromotions} = _getMyAccount();\r\n const {fetchLobby} = useLobby();\r\n\r\n useEffect(() => {\r\n try {\r\n (async () => {\r\n if (await supportsWebP) {\r\n document.body.classList.add(\"webp-supported\");\r\n } else {\r\n document.body.classList.add(\"webp-not-supported\");\r\n }\r\n })()\r\n } catch (e) {\r\n\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (!props.hasError) {\r\n initCalls();\r\n }\r\n }, [props.hasError]);\r\n\r\n const initCalls = async () => {\r\n if (IS_LOGGED_IN) {\r\n refreshAccount();\r\n refreshPromotions();\r\n fetchLobby();\r\n }\r\n }\r\n\r\n if (!themeReady) return null;\r\n\r\n if (props.hasError) {\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n\r\n return (\r\n \r\n \r\n
\r\n
\r\n

😔
We've hit a glitch!

\r\n \r\n Try refreshing the page. If the problem persists, get in touch with our Customer Support team.\r\n
\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {IS_LOGGED_IN && }\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default App;\r\n","import {useRedPill} from \"Hooks/api/useRedPill\";\r\nimport {useEffect} from \"react\";\r\n\r\nconst PING_INTERVAL = 1000 * 60 * 10;\r\nconst INITIAL_WAIT_PERIOD = 1000 * 15;\r\n\r\nexport function usePing() {\r\n let timer = null;\r\n const {execute} = useRedPill('ping');\r\n\r\n useEffect(() => {\r\n setTimeout(() => ping(), INITIAL_WAIT_PERIOD);\r\n\r\n return () => {\r\n if (timer) clearTimeout(timer);\r\n };\r\n }, [])\r\n\r\n const ping = async () => {\r\n if (timer) clearTimeout(timer);\r\n await execute();\r\n timer = setTimeout(() => ping(), PING_INTERVAL);\r\n }\r\n}\r\n","import {createBrowserHistory} from 'history';\r\n\r\nexport default createBrowserHistory();\r\n","import '../css/app.css';\r\nimport React from 'react';\r\nimport {render} from \"react-dom\";\r\nimport {Provider} from \"react-redux\";\r\nimport configureStore from \"./redux/store\";\r\nimport App from \"./containers/app\";\r\nimport {APP_VERSION, CDN_PATH, IS_DEV, IS_LOGGED_IN, IS_PROD, IS_STAGING} from \"Setup/config\";\r\nimport ErrorBoundary from \"Components/ErrorBoundary\";\r\nimport * as Sentry from \"@sentry/react\";\r\nimport {BrowserTracing} from \"@sentry/tracing\";\r\nimport history from \"Setup/history\";\r\nimport {initialiseMicrosoftTracking} from \"Helpers/microsoft\";\r\nimport {initialiseSnapchatTracking} from \"Helpers/snapchat\";\r\n\r\nif (IS_DEV) {\r\n __webpack_public_path__ = `${window.__webpack_public_path__}/`;\r\n} else {\r\n __webpack_public_path__ = `${CDN_PATH}/`;\r\n}\r\n\r\n\r\nconst elementExists = (domId) => {\r\n return document.getElementById(domId);\r\n};\r\n\r\nif (elementExists(\"app\")) {\r\n const store = configureStore();\r\n\r\n initialiseSnapchatTracking();\r\n initialiseMicrosoftTracking();\r\n\r\n if(window){\r\n window.dataLayer = window.dataLayer || [];\r\n }\r\n\r\n let initialScope = {};\r\n if (IS_LOGGED_IN) {\r\n initialScope.user = {};\r\n initialScope.user.id = window.MORPHEUS.core.playerId;\r\n initialScope.user.name = window.MORPHEUS.core.username;\r\n }\r\n\r\n let sentryIntegrations = [\r\n new BrowserTracing({\r\n routingInstrumentation: Sentry.reactRouterV5Instrumentation(history),\r\n })];\r\n\r\n Sentry.init({\r\n release: APP_VERSION,\r\n debug: false,\r\n dsn: \"https://dec5a4bcd373480d81ebaa478990b04f@o215877.ingest.sentry.io/5833912\",\r\n integrations: sentryIntegrations,\r\n environment: IS_DEV ? 'local' : IS_STAGING ? 'staging' : 'production',\r\n initialScope,\r\n\r\n // This sets the sample rate to be 10%. You may want this to be 100% while\r\n // in development and sample at a lower rate in production\r\n replaysSessionSampleRate: IS_PROD ? 0.1 : 1.0,\r\n\r\n // If the entire session is not sampled, use the below sample rate to sample\r\n // sessions when an error occurs.\r\n replaysOnErrorSampleRate: 1.0,\r\n\r\n // We recommend adjusting this value in production, or using tracesSampler for finer control\r\n tracesSampleRate: IS_PROD ? 0.1 : 1.0,\r\n blacklistUrls: [\"trustpilot.com\", \"zdassets.com\"],\r\n ignoreErrors: [\r\n // Error generated by a bug in auto-fill library from browser\r\n // https://github.com/getsentry/sentry/issues/5267\r\n /Blocked a frame with origin/,\r\n // Error generated by video elements - reason unknown\r\n /ResizeObserver loop limit exceeded/,\r\n /ResizeObserver loop completed with undelivered notifications./\r\n ]\r\n });\r\n\r\n render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById(\"app\")\r\n );\r\n}\r\n\r\nif (module.hot) {\r\n module.hot.accept();\r\n}\r\n","import React from 'react';\r\nimport {Button, CircularProgress, makeStyles, useTheme} from \"@material-ui/core\";\r\nimport RouterLink from \"Components/WrappedMUIComponents/RouterLink\";\r\nimport classNames from \"classnames\";\r\nimport clsx from \"clsx\";\r\n\r\nconst useButtonStyles = makeStyles(theme => ({\r\n root: {\r\n position: \"relative\",\r\n textTransform: 'none',\r\n fontWeight: theme.typography.button.fontWeight\r\n },\r\n spinner: {\r\n position: \"absolute\"\r\n },\r\n iconOnly: {\r\n lineHeight: 0,\r\n minWidth: 0,\r\n padding: theme.spacing(0.75)\r\n },\r\n fullWidth: {\r\n width: \"100%\"\r\n }\r\n}));\r\n\r\nexport const BaseButton = ({isLoading = false, to = false, iconOnly = false, fullWidth = false, children, className, innerStyles = {}, onClick, ...rest}) => {\r\n const classes = useButtonStyles();\r\n\r\n if (isLoading) {\r\n onClick = null;\r\n }\r\n\r\n if (to) {\r\n const routerButtonClasses = classNames(\r\n classes.root,\r\n {\r\n [classes.iconOnly]: iconOnly,\r\n [classes.fullWidth]: fullWidth,\r\n }\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n const buttonClasses = classNames(\r\n classes.root,\r\n className,\r\n {\r\n [classes.iconOnly]: iconOnly,\r\n [classes.fullWidth]: fullWidth,\r\n }\r\n );\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport const PrimaryButton = ({children, variant = \"contained\", strict = false, ...rest}) => {\r\n const theme = useTheme();\r\n\r\n return {children}\r\n};\r\n\r\nexport const SecondaryButton = ({children, variant = \"contained\", strict = false, ...rest}) => {\r\n const theme = useTheme();\r\n const isStrict = strict && theme.overrides.Buttons.strict;\r\n\r\n return {children}\r\n};\r\n\r\nexport const DefaultButton = ({children, variant = \"contained\", ...rest}) => {\r\n return {children}\r\n};\r\n\r\nexport const PlainButton = ({children, ...rest}) => {\r\n return {children}\r\n};\r\n\r\nconst usePlayerBarButtonStyles = makeStyles(theme => ({\r\n root: {\r\n background: theme.palette.layout.main,\r\n color: theme.palette.layout.contrastText,\r\n\r\n '&:hover': {\r\n background: theme.palette.layout.dark\r\n }\r\n }\r\n}));\r\n\r\nexport const PlayerBarButton = ({children, variant = \"contained\", className, ...rest}) => {\r\n const classes = usePlayerBarButtonStyles();\r\n\r\n return {children}\r\n};\r\n","if (process.env.NODE_ENV === 'production') {\r\n module.exports = require('./themeswitcher.prod');\r\n} else {\r\n module.exports = require('./themeswitcher.dev');\r\n}\r\n","const ThemeSwitcher = () => {\r\n return null;\r\n};\r\n\r\nexport default ThemeSwitcher;\r\n","import React from 'react';\r\nimport {GenericPageContainer} from \"Pages/GenericInfoPages/GenericPage\";\r\nimport {Typography} from \"@material-ui/core\";\r\nimport * as Sentry from \"@sentry/react\";\r\nimport {connect} from \"react-redux\";\r\nimport {closeAllModals} from \"Redux/actions/ui\";\r\n\r\nclass ErrorBoundary extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n error: null,\r\n errorInfo: null\r\n };\r\n }\r\n\r\n componentDidCatch(error, errorInfo) {\r\n // // Catch errors in any child components and re-renders with an error message\r\n this.setState({\r\n error: error,\r\n errorInfo: errorInfo\r\n });\r\n\r\n Sentry.withScope(scope => {\r\n Object.keys(errorInfo).forEach(key => {\r\n scope.setExtra(key, errorInfo[key]);\r\n });\r\n Sentry.captureException(error);\r\n });\r\n }\r\n\r\n render() {\r\n if (!React.Children.count(this.props.children)) return null;\r\n\r\n if (this.state.error) {\r\n // console.log('-------------');\r\n // console.log(\"%cComponent Error\", \"font-weight: bold\");\r\n // console.log(this.state.error);\r\n // console.log('-------------');\r\n\r\n if (this.props.hideOnError) {\r\n return null;\r\n }\r\n\r\n if (this.props.doNotRenderModalsWhenError) {\r\n this.props.closeAllModals();\r\n return null;\r\n }\r\n\r\n if (this.props.isRoute) {\r\n return (\r\n \r\n There was a problem loading this page. Please try again later.\r\n \r\n );\r\n }\r\n\r\n // Render the component but pass a hasError prop\r\n return React.Children.map(this.props.children, child => React.cloneElement(child, {hasError: true, error: this.state.error}));\r\n\r\n }\r\n // component normally just renders children\r\n return this.props.children;\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n closeAllModals: () => dispatch(closeAllModals())\r\n };\r\n};\r\n\r\nexport default connect(state => ({}), mapDispatchToProps)(ErrorBoundary);\r\n\r\n// export default ErrorBoundary;\r\n","import {useSelector} from \"react-redux\";\r\nimport React from \"react\";\r\nimport ErrorBoundary from \"Components/ErrorBoundary\";\r\nimport StandaloneModal from \"Components/Modal/Modals/standaloneModal\";\r\nimport {ErrorRetry} from \"Containers/lazyRoutes\";\r\nimport {Box} from \"@material-ui/core\";\r\n\r\nconst RetryModal = (props) => (\r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const LazyLoaderModalFactory = (promise, Loader = () => null, ErrorRetryView = ({retry}) => ) => {\r\n function LazyLoader(props) {\r\n const [loading, setLoading] = React.useState(true);\r\n const retry = React.useCallback(() => setLoading(true), []);\r\n\r\n const Lazy = React.useMemo(() => React.lazy(() => promise().catch(() => {\r\n setLoading(false);\r\n return {default: () => };\r\n })), [promise, loading]);\r\n\r\n return }>;\r\n }\r\n\r\n return LazyLoader;\r\n};\r\n\r\nconst LazyModal = ({component: Component, ...rest}) => ;\r\n\r\n// Deferred Modals, only required when logged in\r\nconst AcceptTerms = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/acceptTerms'));\r\nexport const AcceptTermsModal = props => ;\r\n\r\nconst Banking = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/bankingFull'));\r\nexport const BankingModal = props => ;\r\n\r\nconst BonusHistory = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/bonusHistory'));\r\nexport const BonusHistoryModal = props => ;\r\n\r\nconst TransactionHistory = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/transactionHistory'));\r\nexport const TransactionHistoryModal = props => ;\r\n\r\nconst PlayHistory = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/playHistory'));\r\nexport const PlayHistoryModal = props => ;\r\n\r\nconst Withdrawal = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/withdrawal'));\r\nexport const WithdrawalModal = props => ;\r\n\r\nconst DailyDeal = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ 'Components/SlideDownGame/DailyDeal'));\r\nexport const DailyDealModal = props => ;\r\n\r\nconst FreeSpinsGame = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ 'Components/SlideDownGame/FreeSpinsGame'));\r\nexport const FreeSpinsGameModal = props => ;\r\n\r\nconst LoyaltyTokens = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/loyaltyTokens'));\r\nexport const LoyaltyTokensModal = props => ;\r\n\r\nconst PlayingWithBonusFunds = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/playingWithBonusFunds'));\r\nexport const PlayingWithBonusFundsModal = props => ;\r\n\r\nconst ChangePassword = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/changePassword'));\r\nexport const ChangePasswordModal = props => ;\r\n\r\nconst Search = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/search'));\r\nexport const SearchModal = props => ;\r\n\r\nconst PromotionalTerms = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"LoggedOutModals\" */ './Modals/promotionalTerms'));\r\nexport const PromotionalTermsModal = props => ;\r\n\r\nconst Logout = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/logout'));\r\nexport const LogoutModal = props => ;\r\n\r\nconst Loading = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/loadingModal'));\r\nexport const LoadingModal = props => ;\r\n\r\nconst Promotion = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/promotion'));\r\nexport const PromotionModal = props => ;\r\n\r\nconst BingoHistory = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/bingoHistory'));\r\nexport const BingoHistoryModal = props => ;\r\n\r\nconst PostFreeSpinsClaimGameLaunch = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/postFreeSpinsClaimGameLaunch'));\r\nexport const PostFreeSpinsClaimGameLaunchModal = props => ;\r\n\r\nconst LoginLobby = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/loginLobby'));\r\nexport const LoginLobbyModal = props => ;\r\n\r\nconst PickYourBonus = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ 'Components/SlideDownGame/PickYourBonus'));\r\nexport const PickYourBonusModal = props => ;\r\n\r\nconst SpinTheWheel = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"SpinTheWheelModal\" */ 'Components/SlideDownGame/SpinTheWheel'));\r\nexport const SpinTheWheelModal = props => ;\r\n\r\nconst RiskTrigger = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/riskTrigger'));\r\nexport const RiskTriggerModal = props => ;\r\n\r\nconst ServiceAnnouncement = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/serviceAnnouncementModal'));\r\nexport const ServiceAnnouncementModal = props => ;\r\n\r\nconst ReturningLoginLightbox = LazyLoaderModalFactory(() => import(/* webpackChunkName: \"Modals\" */ './Modals/returningLoginLightbox'));\r\nexport const ReturningLoginLightboxModal = props => ;\r\n\r\nconst MODALS = {\r\n \"AcceptTerms\": AcceptTermsModal,\r\n // \"AgeAndIdentity\": AgeAndIdentityModal,\r\n \"Banking\": BankingModal,\r\n \"BingoHistory\": BingoHistoryModal,\r\n \"BonusHistory\": BonusHistoryModal,\r\n \"ChangePassword\": ChangePasswordModal,\r\n \"DailyDeal\": DailyDealModal,\r\n \"FreeSpinsGame\": FreeSpinsGameModal,\r\n \"Loading\": LoadingModal,\r\n \"Logout\": LogoutModal,\r\n // \"Login\": LoginModal,\r\n \"LoyaltyTokens\": LoyaltyTokensModal,\r\n \"PickYourBonus\": PickYourBonusModal,\r\n \"PlayHistory\": PlayHistoryModal,\r\n \"PlayingWithBonusFunds\": PlayingWithBonusFundsModal,\r\n \"PostFreeSpinsClaimGameLaunch\": PostFreeSpinsClaimGameLaunchModal,\r\n \"Promotion\": PromotionModal,\r\n // \"PreDepositPromotion\": PreDepositPromotionModal,\r\n \"PromotionalTerms\": PromotionalTermsModal,\r\n \"Search\": SearchModal,\r\n \"TransactionHistory\": TransactionHistoryModal,\r\n \"Withdrawal\": WithdrawalModal,\r\n \"WelcomeLightbox\": LoginLobbyModal,\r\n \"RiskTrigger\": RiskTriggerModal,\r\n \"SpinTheWheel\": SpinTheWheelModal,\r\n \"ServiceAnnouncement\": ServiceAnnouncementModal,\r\n \"ReturningLoginLightbox\": ReturningLoginLightboxModal,\r\n};\r\n\r\nexport default function (props) {\r\n const {modalQueue, pendingQueue} = useSelector(state => {\r\n const pendingQueue = state.ui.modals.queue.filter(m => m?.modalProps?.isPending && m.modalProps.isPending);\r\n const modalQueue = state.ui.modals.queue.filter(m => !m?.modalProps?.isPending || !m.modalProps.isPending);\r\n\r\n return {\r\n pendingQueue,\r\n modalQueue\r\n }\r\n });\r\n\r\n if (props.hasError) return null;\r\n\r\n return (\r\n <>\r\n {modalQueue.length === 0 && pendingQueue.map(modal => {\r\n const ModalComponent = MODALS[modal.modalId];\r\n return (\r\n \r\n \r\n \r\n );\r\n })}\r\n {modalQueue.map(modal => {\r\n const ModalComponent = MODALS[modal.modalId];\r\n return (\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n}\r\n","import ModalBase from \"../index\";\r\nimport {DialogContent} from \"@material-ui/core\";\r\nimport React from \"react\";\r\n\r\nconst StandaloneModal = ({title, children, ...rest}) => {\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default StandaloneModal;\r\n","import React from 'react';\r\nimport {makeStyles} from '@material-ui/core/styles';\r\nimport {CircularProgress, Dialog, DialogTitle as MuiDialogTitle, IconButton, Slide, Typography, useMediaQuery, useTheme} from \"@material-ui/core\";\r\nimport {useDispatch} from \"react-redux\";\r\nimport {closeModal} from \"Redux/actions/ui\";\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport {BP_MEDIUM} from \"Theme/breakpoints\";\r\nimport clsx from \"clsx\";\r\n\r\nconst useDialogTitleStyles = makeStyles(theme => {\r\n const ModalSettings = theme.overrides.Modal;\r\n\r\n return {\r\n root: {\r\n [theme.breakpoints.down(BP_MEDIUM)]: {\r\n padding: theme.spacing(1, 2),\r\n },\r\n background: ModalSettings.titleBackground,\r\n color: ModalSettings.titleColor,\r\n textAlign: \"left\",\r\n },\r\n closeButton: {\r\n position: 'absolute',\r\n right: theme.spacing(1),\r\n top: theme.spacing(1),\r\n color: ModalSettings.titleColor,\r\n [theme.breakpoints.down(BP_MEDIUM)]: {\r\n padding: theme.spacing(0.5)\r\n },\r\n },\r\n }\r\n});\r\n\r\nconst DialogTitle = (props) => {\r\n const classes = useDialogTitleStyles();\r\n const {children, showClose, onClose} = props;\r\n\r\n return (\r\n \r\n {children}\r\n {(showClose && onClose) ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return ;\r\n});\r\n\r\nconst useStyles = makeStyles((theme) => {\r\n const ModalSettings = theme.overrides.Modal;\r\n\r\n return {\r\n title: {\r\n overflow: \"hidden\",\r\n whiteSpace: \"nowrap\",\r\n textOverflow: \"ellipsis\",\r\n maxWidth: \"92.5%\"\r\n },\r\n paper: {\r\n width: \"100%\",\r\n borderColor: ModalSettings.borderColor\r\n },\r\n loadingOverlay: {\r\n position: \"absolute\",\r\n background: \"#ffffff94\",\r\n top: 64, // Title Height\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n zIndex: 1,\r\n backdropFilter: \"blur(2px)\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n },\r\n closeButton: {\r\n position: 'absolute',\r\n right: theme.spacing(1),\r\n top: theme.spacing(1),\r\n color: theme.palette.grey[500],\r\n },\r\n }\r\n});\r\n\r\nconst ModalBase = ({\r\n children,\r\n modalId,\r\n title,\r\n maxWidth = 'sm',\r\n closeOnClickOutside = true,\r\n showClose = true,\r\n isLoading = false,\r\n handleClose = null,\r\n paperStyles = false,\r\n fullscreen = true,\r\n ...rest\r\n }) => {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n\r\n const theme = useTheme();\r\n const fullScreen = fullscreen && useMediaQuery(theme.breakpoints.down(BP_MEDIUM));\r\n\r\n const onClose = () => {\r\n if (handleClose) {\r\n handleClose();\r\n } else {\r\n dispatch(closeModal(modalId))\r\n }\r\n };\r\n\r\n return (\r\n \r\n {title &&\r\n \r\n {title}\r\n \r\n }\r\n\r\n {isLoading &&\r\n
\r\n \r\n
\r\n }\r\n\r\n {children}\r\n \r\n );\r\n}\r\n\r\nexport default ModalBase;\r\n","import {NavLink as ReactRouterLink} from 'react-router-dom';\r\nimport Link from \"@material-ui/core/Link\";\r\nimport React from \"react\";\r\n\r\nconst RouterLink = ({children, underline = 'none', component = ReactRouterLink, ...rest}) => (\r\n {children}\r\n)\r\n\r\nexport default RouterLink;\r\n","export const PREFIXES = {\r\n DAILY_DEAL: \"DD_\",\r\n FREE_SPINS_GAME: \"FS_\",\r\n PICK_YOUR_BONUS: \"PYB_\",\r\n SPIN_THE_WHEEL: \"WHEEL_\"\r\n};\r\n\r\nconst MASTERGROUPS = {\r\n DAILY_DEAL: `${PREFIXES.DAILY_DEAL}MASTERGROUP`,\r\n FREE_SPINS_GAME: `${PREFIXES.FREE_SPINS_GAME}MASTERGROUP`,\r\n PICK_YOUR_BONUS: `${PREFIXES.PICK_YOUR_BONUS}MASTERGROUP`,\r\n SPIN_THE_WHEEL: `${PREFIXES.SPIN_THE_WHEEL}MASTERGROUP_ACCESS_GRANTED`\r\n};\r\n\r\nexport const EXCLUDER_PROMOCODES = {\r\n DAILY_DEAL: `${PREFIXES.DAILY_DEAL}EXCLUDER`,\r\n FREE_SPINS_GAME: `${PREFIXES.FREE_SPINS_GAME}EXCLUDER`,\r\n SPIN_WHE_WHEEL: \"WHEELCLAIMED_V2\",\r\n};\r\n\r\nexport const PROMO_PREFIXES = {\r\n NOTIFICATION: \"NOTIFICATION_\",\r\n\r\n LOBBY_BANNER: \"LOBBY_BANNER\",\r\n LOBBY_BANNER_ADDITIONAL: \"LOBBY_BANNER_ADDITIONAL\",\r\n\r\n REWARDS: \"REWARDS_LEVEL_\",\r\n REWARDS_INFO: \"REWARDS_INFO_\",\r\n\r\n DD_MASTERGROUP: MASTERGROUPS.DAILY_DEAL,\r\n DD_PRIZE: `${PREFIXES.DAILY_DEAL}PRIZE`,\r\n\r\n FREE_SPINS_GAME_MASTERGROUP: MASTERGROUPS.FREE_SPINS_GAME,\r\n FREE_SPINS_GAME_PREFIX: `${PREFIXES.FREE_SPINS_GAME}PRIZE_`,\r\n\r\n PYB_MASTERGROUP: MASTERGROUPS.PICK_YOUR_BONUS,\r\n PYB_OPTION: `${PREFIXES.PICK_YOUR_BONUS}OPTION_`,\r\n PYB_OPTION_ACTUAL: \"_ACTUALOFFER\",\r\n\r\n SPIN_THE_WHEEL_MASTERGROUP: MASTERGROUPS.SPIN_THE_WHEEL,\r\n SPIN_THE_WHEEL_SPUN: `${PREFIXES.SPIN_THE_WHEEL}SPUN_V2`,\r\n SPIN_THE_WHEEL_PRIZE: `${PREFIXES.SPIN_THE_WHEEL}PRIZE_`,\r\n SPIN_THE_WHEEL_PRIZE_CLAIMED: `${PREFIXES.SPIN_THE_WHEEL}CLAIMED_V2`\r\n};\r\n","import React from \"react\";\r\nimport {PrimaryButton} from \"Components/Button\";\r\nimport {Box, Typography} from \"@material-ui/core\";\r\nimport {GenericPageContainer} from \"Pages/GenericInfoPages/GenericPage\";\r\nimport ErrorBoundary from \"Components/ErrorBoundary\";\r\n\r\nconst LoadableRouteLoading = () => (\r\n
\r\n);\r\n\r\nexport const ErrorRetry = props => {\r\n return (\r\n \r\n Oops... Your connection seems off...\r\n Please check your internet and try again.\r\n \r\n Retry\r\n \r\n \r\n );\r\n};\r\n\r\nconst ErrorRetryPage = (props) => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LazyLoaderFactory = (promise, Loader = () => ) => {\r\n function LazyLoader(props) {\r\n const [loading, setLoading] = React.useState(true);\r\n const retry = React.useCallback(() => {\r\n setLoading(true);\r\n // setIsRetrying(true)\r\n }, []);\r\n // const [isRetrying, setIsRetrying] = React.useState(false);\r\n\r\n const RouteLoaderWithRetry = (lazyComponent, attemptsLeft) => {\r\n return new Promise((resolve, reject) => {\r\n lazyComponent()\r\n // Debugger\r\n // .then(response => {\r\n // if(attemptsLeft > 1) throw new Error();\r\n // // throw new Error();\r\n // return response;\r\n // })\r\n .then(response => {\r\n // if(response.default.name === \"PrimaryLayout\" || isRetrying) {\r\n // resolve(response);\r\n // return;\r\n // }\r\n // console.log(lazyComponent)\r\n // console.log(response);\r\n // reject();\r\n\r\n // Once we get a response from the lazyComponent, we can add the loaded\r\n // class to the #app which will remove the loading overlay.\r\n if (!document.getElementById('app').classList.contains('loaded')) {\r\n document.getElementById('app').classList.add('loaded');\r\n }\r\n\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n // let us retry after 1500 ms\r\n setTimeout(() => {\r\n if (attemptsLeft === 1) {\r\n // reject(error);\r\n return;\r\n }\r\n RouteLoaderWithRetry(lazyComponent, attemptsLeft - 1).then(resolve, reject);\r\n }, 1500);\r\n });\r\n });\r\n }\r\n\r\n const Lazy = React.useMemo(() => React.lazy(() => RouteLoaderWithRetry(promise, 3).catch(() => {\r\n setLoading(false);\r\n return {default: () => };\r\n })), [promise, loading]);\r\n\r\n return }>;\r\n }\r\n\r\n return LazyLoader;\r\n};\r\n\r\nexport const LazyLoad = ({component: Component, isRoute = true, ...rest}) => ;\r\n\r\nconst Registration = LazyLoaderFactory(() => import(/* webpackChunkName: \"Registration\" */ 'Pages/register'));\r\nexport const LazyRegistration = props => ;\r\n\r\nconst HomePage = LazyLoaderFactory(() => import(/* webpackChunkName: \"Homepage\" */ 'Pages/index'));\r\nexport const LazyHomePage = props => ;\r\n\r\nconst LoginPage = LazyLoaderFactory(() => import(/* webpackChunkName: \"LoginPage\" */ 'Pages/login'));\r\nexport const LazyLoginPage = props => ;\r\n\r\nconst DesktopGamePage = LazyLoaderFactory(() => import(/* webpackChunkName: \"DesktopGamePage\" */ 'Pages/GamePages/desktopGame'));\r\nexport const LazyDesktopGamePage = props => ;\r\n\r\nconst MobileGamePage = LazyLoaderFactory(() => import(/* webpackChunkName: \"MobileGamePage\" */ 'Pages/GamePages/mobileGame'));\r\nexport const LazyMobileGamePage = props => ;\r\n\r\nconst DesktopBingoGamePage = LazyLoaderFactory(() => import(/* webpackChunkName: \"DesktopBingoGamePage\" */ 'Pages/GamePages/desktopBingoGame'));\r\nexport const LazyDesktopBingoGamePage = props => ;\r\n\r\nconst MobileBingoGamePage = LazyLoaderFactory(() => import(/* webpackChunkName: \"MobileBingoGamePage\" */ 'Pages/GamePages/mobileBingoGame'));\r\nexport const LazyMobileBingoGamePage = props => ;\r\n\r\n// const OfferPage = LazyLoaderFactory(() => import(/* webpackChunkName: \"OfferPage\" */ 'Pages/LandingPage'));\r\n// export const LazyOfferPage = props => ;\r\n\r\nconst Lobby = LazyLoaderFactory(() => import(/* webpackChunkName: \"Lobby\" */ 'Pages/lobby'));\r\nexport const LazyLobby = props => ;\r\n\r\nconst Status404 = LazyLoaderFactory(() => import(/* webpackChunkName: \"404\" */ 'Pages/404'));\r\nexport const Lazy404 = props => ;\r\n\r\nconst Status500 = LazyLoaderFactory(() => import(/* webpackChunkName: \"500\" */ 'Pages/500'));\r\nexport const Lazy500 = props => ;\r\n\r\nconst Slots = LazyLoaderFactory(() => import(/* webpackChunkName: \"SlotsPage\" */ 'Pages/slots'));\r\nexport const LazySlots = props => ;\r\n\r\nconst Bingo = LazyLoaderFactory(() => import(/* webpackChunkName: \"BingoPage\" */ 'Pages/bingo'));\r\nexport const LazyBingo = props => ;\r\n\r\nconst Promos = LazyLoaderFactory(() => import(/* webpackChunkName: \"PromosPage\" */ 'Pages/promos'));\r\nexport const LazyPromos = props => ;\r\n\r\nconst SpecialEventPromo = LazyLoaderFactory(() => import(/* webpackChunkName: \"SpecialEventPromo\" */ 'Pages/SpecialEventPromo'));\r\nexport const LazySpecialEventPromo = props => ;\r\n\r\nconst Rewards = LazyLoaderFactory(() => import(/* webpackChunkName: \"RewardsPage\" */ 'Pages/rewards'));\r\nexport const LazyRewards = props => ;\r\n\r\nconst PayoutRates = LazyLoaderFactory(() => import(/* webpackChunkName: \"PayoutRates\" */ 'Pages/GenericInfoPages/payoutRates'));\r\nexport const LazyPayoutRates = props => ;\r\n\r\nconst DragonfishOperatedSites = LazyLoaderFactory(() => import(/* webpackChunkName: \"DragonfishOperatedSites\" */ 'Pages/GenericInfoPages/dragonfishOperatedSites'));\r\nexport const LazyDragonfishOperatedSites = props => ;\r\n\r\nconst TermsAndConditions = LazyLoaderFactory(() => import(/* webpackChunkName: \"TermsAndConditions\" */ 'Pages/GenericInfoPages/termsAndConditions'));\r\nexport const LazyTermsAndConditions = props => ;\r\n\r\nconst TermsAndConditionsChangelog = LazyLoaderFactory(() => import(/* webpackChunkName: \"TermsAndConditions\" */ 'Pages/GenericInfoPages/termsAndConditionsChangelog'));\r\nexport const LazyTermsAndConditionsChangelog = props => ;\r\n\r\nconst PromotionalTerms = LazyLoaderFactory(() => import(/* webpackChunkName: \"TermsAndConditions\" */ 'Pages/GenericInfoPages/promotionalTerms'));\r\nexport const LazyPromotionalTerms = props => ;\r\n\r\nconst AccountVerification = LazyLoaderFactory(() => import(/* webpackChunkName: \"AccountVerification\" */ 'Pages/GenericInfoPages/accountVerification'));\r\nexport const LazyAccountVerification = props => ;\r\n\r\nconst AgeAndIdentityCheck = LazyLoaderFactory(() => import(/* webpackChunkName: \"AccountVerification\" */ 'Pages/GenericInfoPages/ageAndIdentityCheck'));\r\nexport const LazyAgeAndIdentityCheck = props => ;\r\n\r\nconst IdentityCheckInfoPage = LazyLoaderFactory(() => import(/* webpackChunkName: \"AccountVerification\" */ 'Pages/GenericInfoPages/identityCheckInfoPage'));\r\nexport const LazyIdentityCheckInfoPage = props => ;\r\n\r\nconst SourceOfFunds = LazyLoaderFactory(() => import(/* webpackChunkName: \"SourceOfFunds\" */ 'Pages/GenericInfoPages/sourceOfFunds'));\r\nexport const LazySourceOfFunds = props => ;\r\n\r\n// const BingoRules = LazyLoaderFactory(() => import(/* webpackChunkName: \"BingoRules\" */ 'Pages/GenericInfoPages/bingoRules'));\r\n// export const LazyBingoRules = props => ;\r\n\r\nconst NewPlayerHomepage = LazyLoaderFactory(() => import(/* webpackChunkName: \"NewPlayerHomepage\" */ 'Pages/NewPlayerHomepage'));\r\nexport const LazyNewPlayerHomepage = props => ;\r\n\r\nconst ResponsibleGamblingApp = LazyLoaderFactory(() => import(/* webpackChunkName: \"ResponsibleGamblingApp\" */ 'Pages/rgapp'));\r\nexport const LazyResponsibleGamblingApp = props => ;\r\n\r\nconst ResponsibleGamblingPage = LazyLoaderFactory(() => import(/* webpackChunkName: \"ResponsibleGamblingPage\" */ 'Pages/ResponsibleGamblingPage'));\r\nexport const LazyResponsibleGamblingPage = props => ;\r\n\r\nconst SaferGamblingWeekPage = LazyLoaderFactory(() => import(/* webpackChunkName: \"SaferGamblingWeekPage\" */ 'Pages/SaferGamblingWeekPage'));\r\nexport const LazySaferGamblingWeekPage = props => ;\r\n\r\nconst SupportPage = LazyLoaderFactory(() => import(/* webpackChunkName: \"SupportPage\" */ 'Pages/GenericInfoPages/supportPage'));\r\nexport const LazySupportPage = props => ;\r\n\r\nconst ChangePasswordPage = LazyLoaderFactory(() => import(/* webpackChunkName: \"ChangePasswordPage\" */ 'Pages/ChangePassword'));\r\nexport const LazyChangePasswordPage = props => ;\r\n\r\nconst RequestPasswordPage = LazyLoaderFactory(() => import(/* webpackChunkName: \"RequestPasswordPage\" */ 'Pages/RequestPassword'));\r\nexport const LazyRequestPasswordPage = props => ;\r\n\r\nconst AccountPendingAIDPage = LazyLoaderFactory(() => import(/* webpackChunkName: \"AccountPendingAIDPage\" */ 'Pages/Updates/accountPendingAID'));\r\nexport const LazyAccountPendingAIDPage = props => ;\r\n\r\nconst ContactCSPage = LazyLoaderFactory(() => import(/* webpackChunkName: \"ContactCSPage\" */ 'Pages/GenericInfoPages/contactCs'));\r\nexport const LazyContactCSPage = props => ;\r\n\r\nconst MaintenancePage = LazyLoaderFactory(() => import(/* webpackChunkName: \"MaintenancePage\" */ 'Pages/holdingPage'));\r\nexport const LazyMaintenancePage = props => ;\r\n\r\nconst VerificationMessageReceiver = LazyLoaderFactory(() => import(/* webpackChunkName: \"VerificationMessagesLoginModal\" */ 'Components/VerificationMessageReceiver'));\r\nexport const LazyVerificationMessageReceiver = props => ;\r\n\r\nconst DepositPage = LazyLoaderFactory(() => import(/* webpackChunkName: \"DepositPage\" */ 'Pages/deposit'));\r\nexport const LazyDepositPage = props => ;\r\n\r\nconst ServerProvidedContentPage = LazyLoaderFactory(() => import(/* webpackChunkName: \"ServerProvidedContentPage\" */ 'Pages/ServerProvidedContentPage'));\r\nexport const LazyServerProvidedContentPage = props => ;\r\n\r\nconst RegistrationLayout = LazyLoaderFactory(() => import(/* webpackChunkName: \"RegistrationLayout\" */ 'Components/Layouts/Registration'));\r\nexport const LazyRegistrationLayout = props => ;\r\n\r\nconst PrimaryLayout = LazyLoaderFactory(() => import(/* webpackChunkName: \"PrimaryLayout\" */ 'Components/Layouts/Primary'));\r\nexport const LazyPrimaryLayout = props => ;\r\n","export const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\r\n","import * as dayjs from 'dayjs'\r\n\r\nconst customParseFormat = require('dayjs/plugin/customParseFormat');\r\nconst advancedFormat = require('dayjs/plugin/advancedFormat')\r\nconst utc = require('dayjs/plugin/utc')\r\nconst isSameOrAfter = require('dayjs/plugin/isSameOrAfter')\r\nconst isBetween = require('dayjs/plugin/isBetween')\r\n\r\nconst extendedDayjs = dayjs.extend(customParseFormat).extend(advancedFormat).extend(utc).extend(isSameOrAfter).extend(isBetween);\r\n\r\nexport default extendedDayjs;\r\n","import {GA4_ENABLED, GA4_ID, IS_STAGING} from \"Setup/config\";\r\nimport {gtag} from 'ga-gtag';\r\n\r\nexport const sendLaunchFirstDepositEvent = (bonusType, promoCode) => {\r\n sendGA4Event(`banking_launch`, {\r\n bonus_type: bonusType,\r\n promo_code: promoCode,\r\n });\r\n};\r\n\r\nexport const sendGAEvents = ({category = \"\", action = \"\", label = \"\"}) => {\r\n if (!category.length || !action.length) return;\r\n\r\n let ga4Obj = {action};\r\n if (label.length) ga4Obj.label = label;\r\n\r\n sendGA4Event(category, ga4Obj);\r\n};\r\n\r\nexport const sendGA4Event = (name, parameters) => {\r\n if(IS_STAGING){\r\n console.log(name, JSON.stringify(parameters));\r\n }\r\n\r\n if (GA4_ENABLED) {\r\n const DEFAULT_SEND_TO = [GA4_ID];\r\n\r\n gtag('event', name, {send_to: DEFAULT_SEND_TO, ...parameters});\r\n }\r\n}\r\n","const getConsentValueById = (id) => {\r\n try {\r\n const determineValue = (s) => (s == undefined ? \"\" : s ? \"granted\" : \"denied\");\r\n\r\n // Check if google_tag_data exists\r\n if (!window[\"google_tag_data\"]) {\r\n console.warn(\"No Consent Mode data found\");\r\n return;\r\n }\r\n\r\n // Retrieve entries from google_tag_data or set to null\r\n const consentEntries = \"ics\" in google_tag_data ? google_tag_data.ics.entries : null;\r\n let defaultStatus = \"\";\r\n let updateStatus = \"\";\r\n\r\n for (let key in consentEntries) {\r\n if (key === id) {\r\n defaultStatus = determineValue(consentEntries[key]['default']);\r\n updateStatus = determineValue(consentEntries[key]['update']);\r\n\r\n if (updateStatus) return updateStatus;\r\n if (defaultStatus) return defaultStatus;\r\n\r\n // Skip if both default and update statuses are empty\r\n if (defaultStatus === \"\" && updateStatus === \"\") return \"denied\";\r\n }\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport default getConsentValueById;","import * as Sentry from \"@sentry/react\";\r\n\r\nconst sendExceptionToSentry = (error) => {\r\n Sentry.captureException(error);\r\n}\r\n\r\nexport default sendExceptionToSentry;\r\n","import {HELP_CENTER_URL, IS_LOGGED_IN} from \"Setup/config\";\r\nimport {sendGA4Event} from \"Helpers/gaEvents\";\r\nimport {GA_EVENT_CATEGORIES} from \"Setup/analytics\";\r\n\r\nconst siteId = window.MORPHEUS.core.brandConfig.brandTheme;\r\n\r\nconst GADictionary = {\r\n bb: \"UA-11176070-1\",\r\n bd: \"UA-68967945-1\",\r\n cd: \"UA-65178797-1\",\r\n cf: \"UA-200344263-1\",\r\n db: \"UA-75582742-1\",\r\n gb: \"UA-37935519-1\",\r\n rb: \"UA-75530205-1\",\r\n l247: \"UA-101876639-1\",\r\n};\r\n\r\nexport const getGASiteId = () => {\r\n if (GADictionary.hasOwnProperty(siteId)) {\r\n return GADictionary[siteId];\r\n }\r\n\r\n return false;\r\n};\r\n\r\nconst GA4Dictionary = {\r\n bb: \"G-DRPC3KD3G7\",\r\n bd: \"G-6RRHGP9PCS\",\r\n cd: \"G-2N3H3HVSET\",\r\n cf: \"G-E0LLMFTKX1\",\r\n db: \"G-58961XWXS5\",\r\n gb: \"G-V6TJVJZ3NV\",\r\n rb: \"G-P95C6K9NQ2\",\r\n l247: \"G-0180JPDZKK\",\r\n};\r\n\r\nexport const getMeasurementId = () => {\r\n if (GA4Dictionary.hasOwnProperty(siteId)) {\r\n return GA4Dictionary[siteId];\r\n }\r\n\r\n return false;\r\n};\r\n\r\nconst siteCodeDictionary = {\r\n fantasticouk: \"Casino Fantastico\",\r\n butlersuk: \"Butlers Bingo\",\r\n dottyuk: \"Dotty Bingo\",\r\n diamonduk: \"Bingo Diamond\",\r\n glossyuk: \"Glossy Bingo\",\r\n rosyuk: \"Rosy Bingo\",\r\n luckyuk: \"Lucky 247\",\r\n coduk: \"Casino of Dreams\",\r\n};\r\n\r\nconst expressWithdrawalsArticleIdDictionary = {\r\n bb: \"4403793792785\",\r\n bd: \"4403793709585\",\r\n cd: \"4403793888401\",\r\n cf: \"4403793835281\",\r\n db: \"4403793926545\",\r\n gb: \"360019973778\",\r\n rb: \"4403785910673\",\r\n l247: \"4403794314385\",\r\n};\r\n\r\nexport const getExpressWithdrawalsUrl = () => {\r\n if (expressWithdrawalsArticleIdDictionary.hasOwnProperty(siteId)) {\r\n const articleId = expressWithdrawalsArticleIdDictionary[siteId];\r\n return `${HELP_CENTER_URL}hc/en-us/articles/${articleId}-What-is-Express-Withdrawals-`;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const getBrandNameFromSiteCode = siteCode => {\r\n if (siteCodeDictionary.hasOwnProperty(siteCode)) {\r\n return siteCodeDictionary[siteCode];\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const trackGameLaunchEvent = (gameId, gameCategory = \"Uncategorized\") => {\r\n if (IS_LOGGED_IN) {\r\n sendGA4Event('launch_game', {\r\n game_launched_from: gameCategory,\r\n game_id: gameId ?? \"\",\r\n });\r\n }\r\n}\r\n\r\nexport const sanitizeUrl = (url) => {\r\n try {\r\n const blockedParamsList = [\"firstname\", \"lastname\", \"email\"];\r\n const replaceWith = '[REDACTED]';\r\n\r\n return url.replace(/((\\?)|&)([^#&=]+)(?:=([^#&]*))?/g, function (input, delim, qmark, key, val) {\r\n if (-1 === blockedParamsList.indexOf(key.toLowerCase()))\r\n return input;\r\n else return replaceWith ? delim + key + '=' + replaceWith : qmark || '';\r\n }).replace(/\\?&*$|(\\?)&+/, '$1');\r\n } catch (e) {\r\n return url;\r\n }\r\n}\r\n","import {APP_VERSION, BRAND_NAME, IS_DEV, IS_STAGING, PLAYER_ID} from \"Setup/config\";\r\n\r\nexport const sendLogglyEvent = (category, message, json = {}) => {\r\n try {\r\n if (typeof _LTracker !== 'undefined') {\r\n json = {\r\n ...json,\r\n playerId: PLAYER_ID,\r\n site: BRAND_NAME,\r\n version: APP_VERSION,\r\n environment: IS_DEV ? 'local' : IS_STAGING ? 'staging' : 'production'\r\n };\r\n\r\n _LTracker.push({\r\n category,\r\n message,\r\n json\r\n });\r\n } else {\r\n // console.log('_LTracker() not defined');\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n};\r\n","import {IS_MICROSOFT_TRACKING_ENABLED, MICROSOFT_TRACKING_PIXEL_ID} from \"../setup/config\";\r\nimport getConsentValueById from \"Helpers/getConsentValueById\";\r\n\r\nconst MICROSOFT_PIXEL_ID = MICROSOFT_TRACKING_PIXEL_ID;\r\nconst MICROSOFT_TRACKING_ENABLED = MICROSOFT_PIXEL_ID && IS_MICROSOFT_TRACKING_ENABLED;\r\n\r\nconst hasUserGivenConsent = () => {\r\n return getConsentValueById('ad_user_data');\r\n};\r\n\r\nexport function initialiseMicrosoftTracking() {\r\n if(!MICROSOFT_TRACKING_ENABLED) return;\r\n if(!hasUserGivenConsent()) return;\r\n\r\n (function (w, d, t, r, u) {\r\n var f, n, i;\r\n w[u] = w[u] || [], f = function () {\r\n var o = {ti: MICROSOFT_PIXEL_ID, enableAutoSpaTracking: true};\r\n o.q = w[u], w[u] = new UET(o), w[u].push(\"pageLoad\")\r\n },\r\n n = d.createElement(t), n.src = r, n.async = 1, n.onload = n.onreadystatechange = function () {\r\n var s = this.readyState;\r\n s && s !== \"loaded\" && s !== \"complete\" || (f(), n.onload = n.onreadystatechange = null)\r\n },\r\n i = d.getElementsByTagName(t)[0], i.parentNode.insertBefore(n, i)\r\n })(window, document, \"script\", \"//bat.bing.com/bat.js\", \"uetq\");\r\n}\r\n\r\nexport function sendMicrosoftFTD({value, currency}){\r\n if(!MICROSOFT_TRACKING_ENABLED) return;\r\n\r\n window.uetq = window.uetq || [];\r\n window.uetq.push(\"event\", \"purchase\", {revenue_value: value, currency: currency});\r\n}","import {IS_LOGGED_IN, IS_SNAPCHAT_TRACKING_ENABLED, SNAPCHAT_TRACKING_PIXEL_ID} from \"../setup/config\";\r\nimport {sendLogglyEvent} from \"./loggly\";\r\nimport getConsentValueById from \"Helpers/getConsentValueById\";\r\n\r\nconst SNAPCHAT_PIXEL_ID = SNAPCHAT_TRACKING_PIXEL_ID;\r\nconst SNAPCHAT_TRACKING_ENABLED = IS_SNAPCHAT_TRACKING_ENABLED && SNAPCHAT_TRACKING_PIXEL_ID;\r\n\r\nconst hasUserGivenConsent = () => {\r\n return getConsentValueById('ad_user_data');\r\n};\r\n\r\nexport function addSnapchatPixelScript(){\r\n if(!SNAPCHAT_TRACKING_ENABLED) return false;\r\n if(!hasUserGivenConsent()) return false;\r\n\r\n (function(e,t,n){if(e.snaptr)return;var a=e.snaptr=function()\r\n {a.handleRequest?a.handleRequest.apply(a,arguments):a.queue.push(arguments)};\r\n a.queue=[];var s='script';var r=t.createElement(s);r.async=!0;\r\n r.src=n;var u=t.getElementsByTagName(s)[0];\r\n u.parentNode.insertBefore(r,u);})(window,document,\r\n 'https://sc-static.net/scevent.min.js');\r\n}\r\nexport function initialiseSnapchatTracking() {\r\n if (!SNAPCHAT_TRACKING_ENABLED) return false;\r\n if (!hasUserGivenConsent()) return false;\r\n\r\n addSnapchatPixelScript();\r\n\r\n let payload = {};\r\n try {\r\n if (IS_LOGGED_IN) {\r\n const MORPHEUS = window.MORPHEUS;\r\n if (MORPHEUS?.personal?.email) {\r\n payload.user_email = MORPHEUS.personal.email;\r\n }\r\n\r\n if (MORPHEUS?.personal?.mobile) {\r\n payload.user_phone_number = MORPHEUS.personal.mobile;\r\n }\r\n }\r\n } catch (e) {\r\n sendLogglyEvent('Snapchat pixel', 'Init fail', {error: e})\r\n }\r\n\r\n window.snaptr('init', SNAPCHAT_PIXEL_ID, payload);\r\n}\r\n\r\nexport function sendSnapchatPageview() {\r\n if (!SNAPCHAT_TRACKING_ENABLED || !IS_LOGGED_IN) return false;\r\n if (!hasUserGivenConsent()) return false;\r\n\r\n window.snaptr('track', 'PAGE_VIEW');\r\n}\r\n\r\nexport function sendSnapchatFTD({value, currency, transaction_id}) {\r\n if (!SNAPCHAT_TRACKING_ENABLED) return false;\r\n if (!hasUserGivenConsent()) return false;\r\n\r\n window.snaptr('track', 'PURCHASE', {\r\n price: value,\r\n currency,\r\n transaction_id\r\n });\r\n}\r\n\r\nexport function sendSnapchatRegistration({email}) {\r\n if (!SNAPCHAT_TRACKING_ENABLED) return false;\r\n if (!hasUserGivenConsent()) return false;\r\n\r\n window.snaptr('init', SNAPCHAT_PIXEL_ID, {\r\n user_email: email\r\n });\r\n\r\n window.snaptr('track', 'SIGN_UP');\r\n}","export const isValidJSON = str => {\r\n try {\r\n let test = JSON.parse(str);\r\n\r\n if (test && typeof test === 'object') {\r\n return true;\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n return false;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const getValueFromStorage = (key, storage = \"sessionStorage\") => {\r\n const s = storage === \"sessionStorage\" ? window.sessionStorage : window.localStorage;\r\n\r\n const isStorageAvailable = () => {\r\n const test = 'test';\r\n try {\r\n s.setItem(test, test);\r\n s.removeItem(test);\r\n return true;\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n return false;\r\n }\r\n };\r\n\r\n if (isStorageAvailable(s)) {\r\n if (s.getItem(key) === null) {\r\n console.log(`Could not find ${key} in ${storage}`);\r\n return null;\r\n }\r\n\r\n try {\r\n return JSON.parse(s.getItem(key));\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n return null;\r\n }\r\n }\r\n};\r\n","import {useEffect, useRef} from 'react'\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {useRedPill} from \"Hooks/api/useRedPill\";\r\nimport {useMessages} from \"Hooks/api/useMessages\";\r\nimport usePromotions from \"Hooks/api/usePromotions\";\r\nimport {updatePlayerWallets, updatePlayerWalletsStatus} from \"Redux/actions/wallets\";\r\nimport {updatePlayerLimits} from \"Redux/actions/limits\";\r\nimport {updatePlayerClaims, updatePlayerClaimsStatus} from \"Redux/actions/claims\";\r\nimport {IS_LOGGED_IN} from \"Setup/config\";\r\nimport {setHasQuickBanking, updateAccountLiteActive} from \"Redux/actions/morpheus\";\r\nimport {updateLoyaltyPointsConfig, updatePlayerLoyaltyPoints} from \"Redux/actions/loyalty\";\r\nimport {useSnackbar} from \"notistack\";\r\nimport {updateMessagesCount} from \"Redux/actions/messages\";\r\nimport useFreeSpins from \"Hooks/useFreeSpins\";\r\n\r\nconst ACCOUNT_REFRESH_INTERVAL = 1000 * 30;\r\nconst PROMOTIONS_REFRESH_INTERVAL = 1000 * 60 * 10;\r\n\r\nexport function useAccount() {\r\n let accountTimer = null;\r\n let promotionsTimer = null;\r\n\r\n const dispatch = useDispatch();\r\n const {_list: _listPromotions, _history} = usePromotions();\r\n const {_count} = useMessages();\r\n const {listPromotions} = _listPromotions();\r\n const {listUsersActivePromotions} = _history();\r\n const {countMessages} = _count();\r\n const {_getFreeSpins: getFreeSpins} = useFreeSpins();\r\n\r\n const getPath = 'authorizedPaths.myAccountObj.get';\r\n const {execute, status, value, error} = useRedPill(getPath);\r\n\r\n const isAccountLiteActive = useSelector(state => state.morpheus.isAccountLiteActive);\r\n const isAccountLiteActiveRef = useRef();\r\n isAccountLiteActiveRef.current = isAccountLiteActive;\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (accountTimer) clearTimeout(accountTimer);\r\n if (promotionsTimer) clearTimeout(promotionsTimer);\r\n };\r\n }, [])\r\n\r\n const singleAccountUpdate = async (forceUpdate = false) => {\r\n if (!IS_LOGGED_IN || (isAccountLiteActiveRef.current && !forceUpdate)) return;\r\n const res = await execute();\r\n\r\n try {\r\n const {code, data, redirect} = res;\r\n if (redirect) {\r\n window.location = redirect;\r\n return;\r\n }\r\n\r\n if (code === 200) {\r\n const {claims, loyalty, limits, messages, wallets} = data;\r\n\r\n if (messages) {\r\n const messagesCount = messages['x-total-count'];\r\n const unreadMessagesCount = messages['x-total-unread-count'];\r\n\r\n dispatch(updateMessagesCount(messagesCount, unreadMessagesCount));\r\n } else {\r\n countMessages();\r\n }\r\n\r\n if (loyalty) {\r\n dispatch(updatePlayerLoyaltyPoints(loyalty));\r\n }\r\n\r\n if (claims) {\r\n dispatch(updatePlayerClaims(claims));\r\n }\r\n\r\n if (limits) {\r\n dispatch(updatePlayerLimits(limits));\r\n }\r\n\r\n if (wallets) {\r\n dispatch(updatePlayerWallets(wallets));\r\n }\r\n\r\n if (data?.quickBanking) {\r\n dispatch(setHasQuickBanking(data.quickBanking));\r\n }\r\n }\r\n\r\n if (status !== \"idle\") {\r\n dispatch(updatePlayerClaimsStatus(status));\r\n // dispatch(updatePlayerLimitsStatus(status));\r\n dispatch(updatePlayerWalletsStatus(status));\r\n }\r\n\r\n\r\n return true;\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const refreshAccount = async () => {\r\n if (accountTimer) clearTimeout(accountTimer);\r\n await singleAccountUpdate();\r\n accountTimer = setTimeout(() => refreshAccount(), ACCOUNT_REFRESH_INTERVAL);\r\n };\r\n\r\n\r\n const singlePromotionsUpdate = async () => {\r\n getFreeSpins();\r\n listPromotions();\r\n listUsersActivePromotions({types: \"CashbackOnNetLosses\", statuses: \"Active,PartQualified\"});\r\n };\r\n\r\n const refreshPromotions = async () => {\r\n if (promotionsTimer) clearTimeout(promotionsTimer);\r\n await singlePromotionsUpdate();\r\n\r\n promotionsTimer = setTimeout(() => refreshPromotions(), PROMOTIONS_REFRESH_INTERVAL);\r\n };\r\n\r\n return {refreshAccount, refreshPromotions, singleAccountUpdate, singlePromotionsUpdate};\r\n}\r\n\r\nexport function useAccountLite() {\r\n let timer = null;\r\n const dispatch = useDispatch();\r\n const litePath = 'authorizedPaths.myAccountObj.lite';\r\n const {execute, status, value, error} = useRedPill(litePath);\r\n\r\n useEffect(() => {\r\n dispatch(updateAccountLiteActive(true));\r\n\r\n return () => {\r\n singleAccountUpdate();\r\n dispatch(updateAccountLiteActive(false));\r\n clearTimeout(timer);\r\n };\r\n }, []);\r\n\r\n const singleAccountUpdate = async () => {\r\n if (!IS_LOGGED_IN) return;\r\n\r\n const res = await execute();\r\n\r\n try {\r\n const {code, data, redirect} = res;\r\n if (redirect) {\r\n window.location = redirect;\r\n return;\r\n }\r\n\r\n if (code === 200) {\r\n const {wallets} = data;\r\n if (wallets) {\r\n dispatch(updatePlayerWallets(wallets));\r\n }\r\n }\r\n\r\n if (status !== \"idle\") {\r\n dispatch(updatePlayerWalletsStatus(status));\r\n }\r\n\r\n\r\n return true;\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const refreshAccount = async () => {\r\n if (timer) clearTimeout(timer);\r\n await singleAccountUpdate();\r\n timer = setTimeout(() => refreshAccount(), ACCOUNT_REFRESH_INTERVAL);\r\n\r\n return true;\r\n };\r\n\r\n return {refreshAccount, singleAccountUpdate};\r\n}\r\n\r\nconst useGetLoyaltyPointsConfig = () => {\r\n const dispatch = useDispatch();\r\n const getLoyaltyPointsPath = 'authorizedPaths.myAccountObj.loyalty';\r\n const {execute, status, value, error} = useRedPill(getLoyaltyPointsPath);\r\n\r\n const getLoyaltyPointsConfig = async () => {\r\n const res = await execute();\r\n\r\n try {\r\n if (res.code === 200 && res.data) {\r\n dispatch(updateLoyaltyPointsConfig(res.data));\r\n return true;\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n return false;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n return {getLoyaltyPointsConfig, status};\r\n};\r\n\r\nconst useRedeemLoyaltyPoints = () => {\r\n const {enqueueSnackbar} = useSnackbar();\r\n const getRedeemPointsPath = 'authorizedPaths.myAccountObj.loyalty';\r\n const {execute, status, value, error} = useRedPill(getRedeemPointsPath);\r\n\r\n const getRedeemPoints = async (data) => {\r\n const res = await execute({method: \"POST\", data});\r\n\r\n try {\r\n if (res.code === 200) {\r\n enqueueSnackbar(`Successfully redeemed ${data.redeemPoints} loyalty tokens!`, {variant: 'success'});\r\n } else {\r\n enqueueSnackbar(`Failed to redeem loyalty tokens`, {variant: 'error'});\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return res;\r\n };\r\n\r\n return {getRedeemPoints, status};\r\n};\r\n\r\nexport const useMyAccount = () => {\r\n const {loyaltyPoints, loyaltyPointsLoaded, loyaltyPointsConfig, loyaltyPointsConfigLoaded} = useSelector(state => ({\r\n loyaltyPoints: state.loyalty.pointsBalance,\r\n loyaltyPointsLoaded: state.loyalty.loyaltyLoaded,\r\n loyaltyPointsConfig: state.loyalty.config,\r\n loyaltyPointsConfigLoaded: state.loyalty.configLoaded\r\n }));\r\n\r\n return {\r\n _getMyAccount: useAccount,\r\n _getMyAccountLite: useAccountLite,\r\n _getLoyaltyPointsConfig: useGetLoyaltyPointsConfig,\r\n _redeemLoyaltyPoints: useRedeemLoyaltyPoints,\r\n loyaltyPoints,\r\n loyaltyPointsLoaded,\r\n loyaltyPointsConfig,\r\n loyaltyPointsConfigLoaded\r\n };\r\n}\r\n","import {useRedPill} from \"Hooks/api/useRedPill\";\r\nimport {useState} from \"react\";\r\nimport {useSelector} from \"react-redux\";\r\nimport {IS_LOGGED_IN, IS_QUICK_BANKING_ENABLED, IS_SLIM_BANKING_ENABLED, PLAYER_ID} from \"Setup/config\";\r\nimport {sendLogglyEvent} from \"Helpers/loggly\";\r\n\r\nexport default function useBanking({quickBanking = false, promoCode = false, specificAmount = false, slimBanking = false} = {}) {\r\n const [bankingErrorCode, setBankingErrorCode] = useState(null);\r\n\r\n let bp;\r\n let bankingPath = \"authorizedPaths.banking\";\r\n\r\n if (promoCode) {\r\n bp = `${bankingPath}.launchv2WithBonus`;\r\n\r\n if (quickBanking && IS_QUICK_BANKING_ENABLED) {\r\n bp = `${bankingPath}.launchv2WithBonusQuick`;\r\n }\r\n\r\n if (slimBanking && IS_SLIM_BANKING_ENABLED) {\r\n bp = `${bankingPath}.launchv2slimWithBonus`;\r\n if (specificAmount) {\r\n bp = `${bankingPath}.launchv2slimWithBonusAndAmount`;\r\n }\r\n }\r\n } else {\r\n bp = `${bankingPath}.launchv2`;\r\n\r\n if (quickBanking && IS_QUICK_BANKING_ENABLED) {\r\n bp = `${bankingPath}.launchv2Quick`\r\n }\r\n\r\n if (slimBanking && IS_SLIM_BANKING_ENABLED) {\r\n bp = `${bankingPath}.launchv2slim`;\r\n }\r\n }\r\n\r\n const {execute, status, value, error} = useRedPill(bp);\r\n\r\n const launchBanking = async () => {\r\n const sendMerchantUniqueIdToLoggly = true;\r\n setBankingErrorCode(null);\r\n\r\n const headers = {'Cache-Control': 'no-cache, no-store, must-revalidate'};\r\n let additionalUrl = promoCode ? promoCode : '';\r\n\r\n // If launching slim banking and there's a specific amount to use, add it to the request\r\n if (IS_SLIM_BANKING_ENABLED && slimBanking && specificAmount) {\r\n additionalUrl = `${additionalUrl}/${specificAmount}`;\r\n }\r\n\r\n const res = await execute({url: additionalUrl, additionalHeaders: headers});\r\n\r\n try {\r\n if (res.code === 200) {\r\n if (sendMerchantUniqueIdToLoggly) {\r\n try {\r\n let url = new URL(res.data.launchUrl);\r\n let urlSearch = url.search;\r\n let ps = new URLSearchParams(urlSearch);\r\n\r\n for (let [k, v] of ps) {\r\n if (k === \"merchant_unique_id\") {\r\n sendLogglyEvent('Safecharge', `Tracking merchant_unique_id`, {merchant_unique_id: v, playerId: PLAYER_ID});\r\n }\r\n }\r\n } catch (e) {\r\n sendLogglyEvent('Safecharge', `Error sending merchant_unique_id`);\r\n }\r\n }\r\n\r\n return res.data;\r\n }\r\n\r\n if (res?.data?.errors?.message) {\r\n setBankingErrorCode(res.data.errors.message);\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const {hasDeposited, isEligibleForQuickBanking} = useSelector(state => {\r\n let hasDeposited = false;\r\n let isEligibleForQuickBanking = false;\r\n\r\n if (IS_LOGGED_IN) {\r\n try {\r\n hasDeposited = state.morpheus.account.hasDeposited;\r\n isEligibleForQuickBanking = state.morpheus.account.quickBanking;\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n }\r\n\r\n return {\r\n hasDeposited,\r\n isEligibleForQuickBanking\r\n }\r\n });\r\n\r\n return {launchBanking, hasDeposited, bankingErrorCode, isEligibleForQuickBanking, status, value, error};\r\n}\r\n","import {useRedPill} from \"Hooks/api/useRedPill\";\r\nimport {shallowEqual, useDispatch, useSelector} from \"react-redux\";\r\nimport {updateMessagesCount, updateMessagesList} from \"Redux/actions/messages\";\r\nimport {IS_MOBILE} from \"Setup/config\";\r\n\r\nconst messagePath = \"authorizedPaths.messages\";\r\n\r\nfunction useCountMessages() {\r\n const dispatch = useDispatch();\r\n const {execute, status, value, error} = useRedPill(`${messagePath}.count`);\r\n\r\n const countMessages = async () => {\r\n const res = await execute();\r\n\r\n try {\r\n if (res.code === 200) {\r\n const messagesCount = res.data['x-total-count'];\r\n const unreadMessagesCount = res.data['x-total-unread-count'];\r\n\r\n dispatch(updateMessagesCount(messagesCount, unreadMessagesCount));\r\n return true;\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n return {countMessages, status, value, error};\r\n}\r\n\r\nfunction useGetMessage() {\r\n const {countMessages} = useCountMessages();\r\n const {execute, status, value, error} = useRedPill(`${messagePath}.get`);\r\n\r\n const getMessage = async (messageId) => {\r\n const res = await execute({url: `/${messageId}`});\r\n\r\n try {\r\n if (res.code === 200) {\r\n const count = countMessages();\r\n return res.data;\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n return {getMessage, status, value, error};\r\n}\r\n\r\n\r\nexport const MAX_MESSAGES_PER_PAGE = IS_MOBILE ? 5 : 8;\r\n\r\nfunction useListMessages() {\r\n const dispatch = useDispatch();\r\n const {execute, status, value, error} = useRedPill(`${messagePath}.list`);\r\n\r\n const listMessages = async ({page = 0, take = MAX_MESSAGES_PER_PAGE} = {}) => {\r\n const skip = page > 0 ? (page - 1) * MAX_MESSAGES_PER_PAGE : 0;\r\n const res = await execute({url: `?take=${take}&skip=${skip}`});\r\n\r\n try {\r\n if (res.code === 200) {\r\n dispatch(updateMessagesList(res.data.items));\r\n return true;\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n return {listMessages, status, value, error};\r\n}\r\n\r\nfunction useCategorySpecificMessages() {\r\n const {execute, status, value, error} = useRedPill(`${messagePath}.list`);\r\n\r\n const listCategoryMessages = async (category) => {\r\n const res = await execute({url: `?category=${category}`});\r\n\r\n try {\r\n if (res.code === 200) {\r\n return res.data;\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n return {listCategoryMessages, status, value, error};\r\n}\r\n\r\nfunction useDeleteMessage() {\r\n const {execute, status, value, error} = useRedPill(`${messagePath}.delete`);\r\n const {listMessages} = useListMessages();\r\n\r\n const deleteMessage = async (messageId, refreshListOnComplete = true) => {\r\n const res = await execute({url: `/${messageId}`});\r\n\r\n try {\r\n if (res.code === 200) {\r\n if (refreshListOnComplete) {\r\n await listMessages();\r\n }\r\n return true;\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n return {deleteMessage, status, value, error};\r\n}\r\n\r\nexport const useMessages = () => {\r\n const {messagesCount, unreadMessagesCount, messages, messagesLoaded} = useSelector(state => ({\r\n messagesCount: state.messages.messagesCount,\r\n unreadMessagesCount: state.messages.unreadMessagesCount,\r\n messages: state.messages.list,\r\n messagesLoaded: state.messages.isLoaded\r\n }), shallowEqual)\r\n\r\n return {\r\n messages,\r\n messagesLoaded,\r\n messagesCount,\r\n unreadMessagesCount,\r\n _count: useCountMessages,\r\n _get: useGetMessage,\r\n _list: useListMessages,\r\n _category: useCategorySpecificMessages,\r\n _delete: useDeleteMessage,\r\n };\r\n};\r\n","import useGames from \"Hooks/useGames\";\r\nimport useStorage from \"Hooks/useStorage\";\r\nimport {useRedPill} from \"Hooks/api/useRedPill\";\r\nimport {useMyAccount} from \"Hooks/api/useAccount\";\r\nimport {shallowEqual, useDispatch, useSelector} from \"react-redux\";\r\nimport {updatePromotionsList, updateUsersActiveNotifications, updateUsersPromotionsList} from \"Redux/actions/promotions\";\r\nimport {\r\n CAN_REGISTER,\r\n IS_DEV,\r\n IS_LOGGED_IN,\r\n NEW_SHARED_CDN_PATH,\r\n OLD_SHARED_CDN_PATH,\r\n SHARED_CDN_BRAND_ID,\r\n SPECIAL_EVENT_PROMO_ENABLED,\r\n SPECIAL_EVENT_PROMO_MASTERGROUP,\r\n SPECIAL_EVENT_PROMO_PREFIX,\r\n USE_NEW_CDN\r\n} from \"Setup/config\";\r\nimport {updateLobbyBannersList, updateRewardsList, updateSpecialEventPromoList} from \"Redux/actions/ui\";\r\nimport {PREFIXES, PROMO_PREFIXES} from \"Constants\";\r\nimport {sleep} from \"Helpers/async\";\r\nimport {sendGA4Event} from \"Helpers/gaEvents\";\r\nimport {sendLogglyEvent} from \"Helpers/loggly\";\r\n\r\nfunction compare(a, b) {\r\n const prop = 'priority';\r\n\r\n if (a[prop] < b[prop]) {\r\n return -1;\r\n }\r\n if (a[prop] > b[prop]) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nconst filterByCustomField = (promo) => {\r\n let showPromoToUser = true;\r\n\r\n if (IS_LOGGED_IN) {\r\n try {\r\n const playerId = MORPHEUS.core.playerId;\r\n const playerIdIsEven = playerId % 2 === 0;\r\n const playerIdIsOdd = playerId % 2 === 1;\r\n\r\n promo.customFields.forEach(cf => {\r\n if (cf?.key === \"excludeOddPlayerIds\" && cf.value === \"true\" && playerIdIsOdd) {\r\n showPromoToUser = false;\r\n }\r\n\r\n if (cf?.key === \"excludeEvenPlayerIds\" && cf.value === \"true\" && playerIdIsEven) {\r\n showPromoToUser = false;\r\n }\r\n });\r\n } catch (e) {\r\n console.log(e);\r\n return true;\r\n }\r\n }\r\n\r\n return showPromoToUser;\r\n}\r\n\r\nfunction useGetPromotion() {\r\n const getPromotionPath = \"authorizedPaths.promotions.get\";\r\n const {execute, status, value, error} = useRedPill(getPromotionPath);\r\n\r\n const getPromotion = async (bonusId) => {\r\n const res = await execute({url: '/' + bonusId});\r\n\r\n try {\r\n if (res.code === 200) {\r\n return res.data;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n return {getPromotionStatus: status, getPromotion};\r\n}\r\n\r\nfunction sendBonusResponseDetailsToGA(bonusResponse) {\r\n const CATEGORY = \"Bonuses\";\r\n\r\n try {\r\n const {itemsPerPage, totalItems, totalItemsToDisplay} = bonusResponse;\r\n\r\n if (IS_LOGGED_IN && itemsPerPage) {\r\n sendGA4Event(CATEGORY, {\r\n itemsPerPage,\r\n totalItems,\r\n totalItemsToDisplay,\r\n });\r\n }\r\n } catch (err) {\r\n sendLogglyEvent(CATEGORY, \"Failed to deconstruct a successful bonus response\", {error: err.message});\r\n }\r\n}\r\n\r\nfunction useListPromotions() {\r\n const userState = IS_LOGGED_IN ? \"LI\" : \"LO\";\r\n const {setValue} = useStorage(`lobbyBanners${userState}`, null, \"localStorage\");\r\n\r\n const {findGameByCatalogueGameId} = useGames();\r\n const dispatch = useDispatch();\r\n const listPromotionsPath = \"content.promotions\";\r\n const {execute, status, value, error} = useRedPill(listPromotionsPath);\r\n\r\n const organizeBanners = banners => {\r\n if (IS_LOGGED_IN) {\r\n banners = banners.filter(banner => !banner.isVisibleToLoggedOut);\r\n }\r\n\r\n if(!IS_LOGGED_IN && !CAN_REGISTER){\r\n banners = banners.filter(banner => !banner.customFields.some(cf => cf.key === \"SHOW_TO_RETURNING_PLAYERS\" && cf.value === \"false\"));\r\n }\r\n\r\n banners = banners.filter(banner => {\r\n if (!filterByCustomField(banner)) return false;\r\n\r\n if (banner.description === \"LAUNCH_GAME\") {\r\n banner.detailedDescription = banner.detailedDescription.replace(/^\\s+|\\s+$/g, '');\r\n\r\n if (IS_LOGGED_IN) {\r\n // Filter out banners with game launch if user doesn't have game in lobby\r\n if (!findGameByCatalogueGameId(banner.detailedDescription)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n });\r\n\r\n return banners.map(banner => ({\r\n id: banner.id,\r\n action: banner.description,\r\n param: banner.detailedDescription,\r\n imagePath: banner.images.default.url,\r\n altText: banner.images.default.alt\r\n }))\r\n };\r\n\r\n const maxRetriesPerListPromotionsCall = 2;\r\n const listPromotions = async (attempt = 0) => {\r\n let currentAttempt = attempt;\r\n const res = await execute({url: `/?take=180`});\r\n currentAttempt++;\r\n\r\n try {\r\n if (res.code === 200) {\r\n // sendBonusResponseDetailsToGA(res.data);\r\n\r\n const {items} = res.data;\r\n const filteredItemsByCustomFields = items.filter(filterByCustomField);\r\n\r\n const updateImages = filteredItemsByCustomFields.map(item => {\r\n if (item?.images?.default?.url) {\r\n let imageUrl = item.images.default.url;\r\n if (USE_NEW_CDN) imageUrl = imageUrl.replace(OLD_SHARED_CDN_PATH, NEW_SHARED_CDN_PATH);\r\n\r\n if (imageUrl.includes('{BRAND}')) {\r\n imageUrl = imageUrl.replace('{BRAND}', SHARED_CDN_BRAND_ID);\r\n }\r\n\r\n item.images.default.url = imageUrl;\r\n }\r\n return item;\r\n });\r\n\r\n const specialEventPromoMastergroup = updateImages.filter(p => p.internalName.toUpperCase().includes(SPECIAL_EVENT_PROMO_MASTERGROUP)).sort(compare);\r\n let specialEventPromoBonuses = updateImages.filter(p => p.internalName.toUpperCase().includes(SPECIAL_EVENT_PROMO_PREFIX)).sort((a, b) => {\r\n let aDay = a.internalName.substring(a.internalName.toUpperCase().indexOf(SPECIAL_EVENT_PROMO_PREFIX) + SPECIAL_EVENT_PROMO_PREFIX.length, a.internalName.toUpperCase().indexOf(SPECIAL_EVENT_PROMO_PREFIX) + SPECIAL_EVENT_PROMO_PREFIX.length + 2);\r\n let bDay = b.internalName.substring(b.internalName.toUpperCase().indexOf(SPECIAL_EVENT_PROMO_PREFIX) + SPECIAL_EVENT_PROMO_PREFIX.length, b.internalName.toUpperCase().indexOf(SPECIAL_EVENT_PROMO_PREFIX) + SPECIAL_EVENT_PROMO_PREFIX.length + 2);\r\n let cleanA = Number(aDay.replace('_', ''));\r\n let cleanB = Number(bDay.replace('_', ''));\r\n\r\n return cleanA - cleanB;\r\n });\r\n\r\n const filteredBanners = updateImages.filter(p => p.internalName.includes(PROMO_PREFIXES.LOBBY_BANNER) && !p.internalName.includes(PROMO_PREFIXES.LOBBY_BANNER_ADDITIONAL)).sort(compare);\r\n const filteredAdditionalItems = updateImages.filter(i => i.internalName.includes(PROMO_PREFIXES.LOBBY_BANNER_ADDITIONAL)).sort(compare);\r\n const filteredRewards = updateImages.filter(i => (i.internalName.includes(PROMO_PREFIXES.REWARDS) || i.internalName.includes(PROMO_PREFIXES.REWARDS_INFO))\r\n && !i.internalName.includes(PROMO_PREFIXES.FREE_SPINS_GAME_PREFIX)).sort(compare);\r\n\r\n const VISIBLE_NONCLAIMABLE_BONUS_TYPES = [\"Content\"];\r\n\r\n const filteredPromotions = updateImages.filter(i => {\r\n if ((i.internalName.includes(PROMO_PREFIXES.FREE_SPINS_GAME_PREFIX) && i.canBeClaimed)\r\n || i.internalName.includes(PROMO_PREFIXES.FREE_SPINS_GAME_MASTERGROUP)\r\n || i.internalName.includes(PROMO_PREFIXES.DD_MASTERGROUP)) {\r\n // || i.internalName.includes(PROMO_PREFIXES.DD_MASTERGROUP)) {\r\n return i;\r\n }\r\n\r\n if (i.internalName.startsWith(PROMO_PREFIXES.SPIN_THE_WHEEL_MASTERGROUP) ||\r\n i.internalName.startsWith(PROMO_PREFIXES.SPIN_THE_WHEEL_PRIZE_CLAIMED)) {\r\n return true;\r\n }\r\n\r\n if (!i.canBeClaimed && !VISIBLE_NONCLAIMABLE_BONUS_TYPES.includes(i.bonusType)) {\r\n return false;\r\n }\r\n\r\n if (i.internalName.includes(PROMO_PREFIXES.LOBBY_BANNER) ||\r\n i.internalName.includes(PROMO_PREFIXES.REWARDS) ||\r\n i.internalName.includes(PROMO_PREFIXES.REWARDS_INFO) ||\r\n (i.internalName.includes(PROMO_PREFIXES.DD_PRIZE) && !i.canBeClaimed && i.bonusType !== \"Content\")) {\r\n return false;\r\n }\r\n\r\n return i;\r\n }).sort(compare);\r\n\r\n console.log(filteredPromotions)\r\n\r\n let banners = [...filteredAdditionalItems, ...filteredBanners];\r\n const newBanners = organizeBanners(banners);\r\n\r\n setValue(newBanners);\r\n dispatch(updateLobbyBannersList(newBanners));\r\n dispatch(updatePromotionsList(filteredPromotions));\r\n dispatch(updateRewardsList(filteredRewards));\r\n\r\n if (specialEventPromoMastergroup && specialEventPromoBonuses) {\r\n dispatch(updateSpecialEventPromoList(specialEventPromoMastergroup[0], specialEventPromoBonuses));\r\n }\r\n\r\n return true;\r\n } else {\r\n if (currentAttempt <= maxRetriesPerListPromotionsCall) {\r\n setTimeout(() => listPromotions(currentAttempt), 30000);\r\n }\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n return {listPromotionsStatus: status, listPromotions, execute};\r\n}\r\n\r\nfunction useUsersPromotions() {\r\n const dispatch = useDispatch();\r\n const usersPromotionsPath = \"authorizedPaths.promotions.history\";\r\n const {execute, status, value, error} = useRedPill(usersPromotionsPath);\r\n\r\n const listUsersPromotions = async ({types = false, statuses = false} = {}) => {\r\n if (!IS_LOGGED_IN) return false;\r\n\r\n const promoStatuses = statuses ? `promoStatuses=${statuses}&` : '';\r\n const bonusTypes = types ? `bonusTypes=${types}&` : '';\r\n const res = await execute({url: `?${promoStatuses}${bonusTypes}`});\r\n\r\n try {\r\n if (res.code === 200) {\r\n const {items} = res.data;\r\n dispatch(updateUsersPromotionsList(items));\r\n\r\n return true;\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const maxRetriesPerListPromotionsCall = 2;\r\n const listUsersActivePromotions = async ({types = false, statuses = false} = {}, attempt = 0) => {\r\n if (!IS_LOGGED_IN) return false;\r\n let currentAttempt = attempt;\r\n\r\n const promoStatuses = statuses ? `promoStatuses=${statuses}&` : '';\r\n const bonusTypes = types ? `bonusTypes=${types}&` : '';\r\n const res = await execute({url: `?${promoStatuses}${bonusTypes}&take=20`});\r\n currentAttempt++;\r\n\r\n try {\r\n if (res.code === 200) {\r\n const {items} = res.data;\r\n\r\n const updatedItems = items.map(item => {\r\n if (item?.images?.default?.url) {\r\n let imageUrl = item.images.default.url;\r\n if (USE_NEW_CDN) imageUrl = imageUrl.replace(OLD_SHARED_CDN_PATH, NEW_SHARED_CDN_PATH);\r\n\r\n if (imageUrl.includes('{BRAND}')) {\r\n imageUrl = imageUrl.replace('{BRAND}', SHARED_CDN_BRAND_ID);\r\n }\r\n\r\n item.images.default.url = imageUrl;\r\n }\r\n return item;\r\n });\r\n\r\n dispatch(updateUsersActiveNotifications(updatedItems));\r\n\r\n return true;\r\n } else {\r\n if (currentAttempt <= maxRetriesPerListPromotionsCall) {\r\n setTimeout(() => listUsersActivePromotions({types, statuses}, currentAttempt), 30000);\r\n }\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n return {execute, status, listUsersPromotions, listUsersActivePromotions};\r\n}\r\n\r\nfunction useOptInPromotion() {\r\n const optInToPromotionPath = \"authorizedPaths.promotions.opt-in\";\r\n const {execute, status, value, error} = useRedPill(optInToPromotionPath);\r\n const {_getMyAccount} = useMyAccount();\r\n const {singleAccountUpdate, singlePromotionsUpdate} = _getMyAccount();\r\n\r\n const optInPromotion = async (promoCode, refreshAccountAndPromos = true, delaySubsequentCallsInMs = 0) => {\r\n const res = await execute({url: promoCode, method: 'POST'});\r\n\r\n try {\r\n if (res.code === 200) {\r\n if (delaySubsequentCallsInMs > 0) {\r\n await sleep(delaySubsequentCallsInMs);\r\n }\r\n\r\n if (refreshAccountAndPromos) {\r\n singleAccountUpdate();\r\n singlePromotionsUpdate();\r\n }\r\n\r\n return true;\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n return {optInPromotionStatus: status, optInPromotion};\r\n}\r\n\r\nfunction useBuyInPromotion() {\r\n const optInToPromotionPath = \"authorizedPaths.promotions.opt-in\";\r\n const {execute, status, value, error} = useRedPill(optInToPromotionPath);\r\n const {listPromotions} = useListPromotions();\r\n const {_getMyAccount} = useMyAccount();\r\n const {singleAccountUpdate} = _getMyAccount();\r\n\r\n const buyInPromotion = async (promoCode, buyInAmount) => {\r\n const res = await execute({url: promoCode, data: {buyInAmount}, method: 'POST'});\r\n\r\n try {\r\n if (res.code === 200) {\r\n listPromotions();\r\n singleAccountUpdate();\r\n\r\n return true;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n return {buyInPromotionStatus: status, buyInPromotion};\r\n}\r\n\r\n// Used to check if the user has played today\r\nconst selectedPromotionsData = () => useSelector(state => {\r\n // TODO: Renamed unclaimedPromotions, as we now include content bonuses in there.\r\n const unclaimedPromotions = state.promotions.list;\r\n const unclaimedPromotionsLoaded = state.promotions.isLoaded;\r\n\r\n const activePromotions = state.promotions.activePromotions;\r\n const activePromotionsLoaded = state.promotions.isActivePromotionsLoaded;\r\n\r\n const usersPromotions = state.promotions.history;\r\n const usersPromotionsLoaded = state.promotions.isHistoryLoaded;\r\n\r\n const rewardsPromotions = state.ui.rewardsPromos.list;\r\n const rewardsPromotionsLoaded = state.ui.rewardsPromos.isLoaded;\r\n\r\n let canClaimDailyDeal = false;\r\n let dailyDealPromo = false;\r\n let canClaimFreeSpinsGame = false;\r\n let freeSpinsGamePromo = false;\r\n\r\n if (unclaimedPromotionsLoaded) {\r\n unclaimedPromotions.forEach(promo => {\r\n let internalName = false;\r\n if (promo.hasOwnProperty('internalName')) {\r\n internalName = promo.internalName.toUpperCase();\r\n }\r\n\r\n if (IS_DEV || (internalName && internalName.startsWith(PROMO_PREFIXES.DD_MASTERGROUP) && promo.canBeClaimed)) {\r\n canClaimDailyDeal = true;\r\n }\r\n\r\n if (!dailyDealPromo && internalName && internalName.startsWith('DD_') && !internalName.startsWith(PROMO_PREFIXES.DD_MASTERGROUP)) {\r\n dailyDealPromo = promo;\r\n }\r\n\r\n if (IS_DEV || (internalName && internalName.includes(PROMO_PREFIXES.FREE_SPINS_GAME_MASTERGROUP) && promo.canBeClaimed)) {\r\n canClaimFreeSpinsGame = true;\r\n }\r\n\r\n if (!freeSpinsGamePromo && internalName && internalName.includes(PROMO_PREFIXES.FREE_SPINS_GAME_PREFIX)) {\r\n freeSpinsGamePromo = promo;\r\n }\r\n });\r\n }\r\n\r\n\r\n let isMemberOfFSGMastergroup = false;\r\n let isMemberOfDailyDealMastergroup = false;\r\n if (unclaimedPromotionsLoaded) {\r\n isMemberOfFSGMastergroup = unclaimedPromotions.some(p => p.internalName.includes(PROMO_PREFIXES.FREE_SPINS_GAME_MASTERGROUP));\r\n isMemberOfDailyDealMastergroup = unclaimedPromotions.some(p => p.internalName.includes(PROMO_PREFIXES.DD_MASTERGROUP));\r\n }\r\n\r\n const filteredUnclaimedPromotions = unclaimedPromotionsLoaded ? state.promotions.list.filter(promo => {\r\n const customFieldsFilterResult = filterByCustomField(promo);\r\n if (!customFieldsFilterResult) return false;\r\n\r\n if (promo.hasOwnProperty('internalName')) {\r\n let internalName = promo.internalName.toUpperCase();\r\n\r\n // Don't show unclaimable DD promotions\r\n if (internalName.includes(PROMO_PREFIXES.DD_PRIZE) && !promo.canBeClaimed) {\r\n return false;\r\n }\r\n\r\n // Don't show mastergroup promo\r\n if (internalName.startsWith(PROMO_PREFIXES.DD_MASTERGROUP)) {\r\n return false;\r\n }\r\n\r\n // If user hasn't claimed DD, don't show prizes\r\n if (canClaimDailyDeal && internalName.startsWith('DD_')) {\r\n return false;\r\n }\r\n\r\n if (internalName.includes(PROMO_PREFIXES.DD_PRIZE)) {\r\n if (!isMemberOfDailyDealMastergroup) {\r\n return false;\r\n }\r\n }\r\n\r\n if ((!canClaimFreeSpinsGame || !freeSpinsGamePromo) && internalName.includes(PROMO_PREFIXES.FREE_SPINS_GAME_MASTERGROUP)) {\r\n return false;\r\n }\r\n\r\n if (internalName.includes(PROMO_PREFIXES.FREE_SPINS_GAME_PREFIX)) {\r\n if (!isMemberOfFSGMastergroup) {\r\n return false;\r\n }\r\n }\r\n\r\n // If user hasn't claimed FS, don't show prizes\r\n if (canClaimFreeSpinsGame && internalName.includes(PROMO_PREFIXES.FREE_SPINS_GAME_PREFIX)) {\r\n return false;\r\n }\r\n\r\n // Don't show PYB options or mastergroup\r\n if ((internalName.includes(PROMO_PREFIXES.PYB_OPTION) && !internalName.includes(PROMO_PREFIXES.PYB_OPTION_ACTUAL)) || internalName.includes(PROMO_PREFIXES.PYB_MASTERGROUP)) {\r\n return false;\r\n }\r\n\r\n // Don't show mastergroup promo\r\n if (internalName.startsWith(PREFIXES.SPIN_THE_WHEEL)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }) : unclaimedPromotions;\r\n\r\n return {\r\n activePromotions,\r\n activePromotionsLoaded,\r\n unclaimedPromotions: filteredUnclaimedPromotions,\r\n unclaimedPromotionsLoaded,\r\n usersPromotions,\r\n usersPromotionsLoaded,\r\n dailyDealPromo,\r\n canClaimDailyDeal: canClaimDailyDeal && dailyDealPromo,\r\n freeSpinsGamePromo,\r\n canClaimFreeSpinsGame: (canClaimFreeSpinsGame && freeSpinsGamePromo),\r\n rewardsPromotions,\r\n rewardsPromotionsLoaded,\r\n };\r\n}, shallowEqual);\r\n\r\nexport default function usePromotions() {\r\n const {\r\n activePromotions,\r\n activePromotionsLoaded,\r\n unclaimedPromotions,\r\n unclaimedPromotionsLoaded,\r\n usersPromotions,\r\n usersPromotionsLoaded,\r\n dailyDealPromo,\r\n canClaimDailyDeal,\r\n freeSpinsGamePromo,\r\n canClaimFreeSpinsGame,\r\n rewardsPromotions,\r\n rewardsPromotionsLoaded\r\n } = selectedPromotionsData();\r\n\r\n const showSpecialEventPromoLink = SPECIAL_EVENT_PROMO_ENABLED && (unclaimedPromotionsLoaded && unclaimedPromotions.some(p => p.internalName.toUpperCase() === SPECIAL_EVENT_PROMO_MASTERGROUP));\r\n\r\n return {\r\n activePromotions,\r\n activePromotionsLoaded,\r\n unclaimedPromotions,\r\n unclaimedPromotionsLoaded,\r\n usersPromotions,\r\n usersPromotionsLoaded,\r\n rewardsPromotions,\r\n rewardsPromotionsLoaded,\r\n dailyDealPromo,\r\n canClaimDailyDeal,\r\n freeSpinsGamePromo,\r\n canClaimFreeSpinsGame,\r\n showSpecialEventPromoLink,\r\n _get: useGetPromotion,\r\n _history: useUsersPromotions,\r\n _list: useListPromotions,\r\n _optIn: useOptInPromotion,\r\n _buyIn: useBuyInPromotion,\r\n };\r\n}\r\n","import useStorage from \"Hooks/useStorage\";\r\nimport {useRedPill} from \"Hooks/api/useRedPill\";\r\nimport {shallowEqual, useDispatch, useSelector} from \"react-redux\";\r\nimport {updateRecentGames} from \"Redux/actions/lobby\";\r\n\r\nexport function useGetRecentGames() {\r\n const dispatch = useDispatch();\r\n const {setValue} = useStorage(\"recentGames\", null, \"localStorage\");\r\n const {execute, status, value, error} = useRedPill(\"authorizedPaths.recentGames\");\r\n\r\n const getRecentGames = async () => {\r\n if (status === \"pending\") return;\r\n\r\n const res = await execute();\r\n\r\n if (res.code === 200) {\r\n let games = res.data.map(game => game.catalogueGameId);\r\n setValue(games);\r\n dispatch(updateRecentGames(games));\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return {getRecentGames, status, value, error};\r\n}\r\n\r\nexport const useRecentGames = () => {\r\n const {isRecentGamesLoaded, isLoaded, recentGames, gamesData} = useSelector(state => {\r\n const {isRecentGamesLoaded, isLoaded, recentGames, games: gamesData} = state.lobby;\r\n return {isRecentGamesLoaded, isLoaded, recentGames, gamesData};\r\n }, shallowEqual);\r\n\r\n const [filteredGamed, setFilteredGames] = React.useState([]);\r\n\r\n React.useEffect(() => {\r\n try {\r\n if (isLoaded && gamesData) {\r\n // Temp remove fluffy favourites from recently played games list\r\n const games = recentGames.filter(g => gamesData.hasOwnProperty(g));\r\n setFilteredGames(games);\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }, [recentGames, gamesData, isLoaded]);\r\n\r\n return {\r\n recentGames: filteredGamed,\r\n isRecentGamesReady: isRecentGamesLoaded && isLoaded,\r\n _get: useGetRecentGames,\r\n };\r\n};\r\n","export function checkForNestedRoute(obj, level, ...rest) {\r\n if (obj === undefined) return false;\r\n if (rest.length === 0 && obj.hasOwnProperty(level)) return obj[level];\r\n return checkForNestedRoute(obj[level], ...rest);\r\n}\r\n\r\nexport const ROUTE_PARENT = \"morpheus.routes\";\r\n","import {useCallback, useEffect, useReducer, useRef} from \"react\";\r\n\r\nconst initialState = {status: 'idle', value: null, error: null};\r\n\r\nfunction init() {\r\n return initialState;\r\n}\r\n\r\nfunction reducer(state, action) {\r\n switch (action.type) {\r\n case 'PENDING':\r\n return {...state, status: 'pending'};\r\n case 'SUCCESS':\r\n return {...state, status: 'success', value: action.response};\r\n case 'ERROR':\r\n return {...state, status: 'error', error: action.error};\r\n default:\r\n throw new Error();\r\n }\r\n}\r\n\r\nexport const useAsync = (asyncFunction) => {\r\n const [state, dispatch] = useReducer(reducer, initialState, init);\r\n const isAlive = useRef(true);\r\n\r\n useEffect(() => {\r\n return () => isAlive.current = false;\r\n }, []);\r\n\r\n const execute = useCallback((params) => {\r\n if (state.status === \"pending\") return;\r\n\r\n if (isAlive.current) {\r\n dispatch({type: 'PENDING'});\r\n }\r\n\r\n return asyncFunction(params)\r\n .then((response) => {\r\n if (response.code === 200) {\r\n if (isAlive.current) {\r\n dispatch({type: 'SUCCESS', response});\r\n }\r\n return response;\r\n } else {\r\n if (isAlive.current) {\r\n dispatch({type: 'ERROR', response});\r\n }\r\n return response;\r\n }\r\n\r\n // if (isAlive.current) {\r\n // dispatch({type: 'ERROR', error});\r\n // }\r\n })\r\n .catch((error) => {\r\n //sendExceptionToSentry(error);\r\n\r\n if (isAlive.current) {\r\n dispatch({type: 'ERROR', error});\r\n }\r\n\r\n return false;\r\n });\r\n }, [asyncFunction]);\r\n\r\n return {execute, ...state};\r\n};\r\n","import {useSelector} from \"react-redux\";\r\nimport axios from \"axios\";\r\nimport {checkForNestedRoute, ROUTE_PARENT} from \"Setup/routes\";\r\nimport {useAsync} from \"Hooks/useAsync\";\r\nimport {IS_DEV, IS_STAGING} from \"Setup/config\";\r\n\r\nexport function useRedPill(urlRoute = \"\", method = \"GET\", overrideURL = false) {\r\n // Get tokens from the store and check for API route\r\n const {session, API_URL} = useSelector(state => {\r\n let API_URL = urlRoute.length ? checkForNestedRoute(state, ...`${ROUTE_PARENT}.${urlRoute}`.split('.')) : false;\r\n if (IS_DEV && API_URL && !API_URL.includes(\"http\")) {\r\n API_URL = `https://gameonmedia.broadwaygaming.com${API_URL}`;\r\n }\r\n\r\n if (overrideURL) {\r\n API_URL = overrideURL;\r\n }\r\n\r\n return {\r\n API_URL,\r\n session: state.morpheus.session\r\n }\r\n });\r\n\r\n // Check if we have the RedPill headers available to us.\r\n // These are required to make calls when logged in.\r\n const setRedPillHeaders = (additionalHeaders) => {\r\n let redPillHeaders = {...additionalHeaders}\r\n\r\n if (session.hasOwnProperty('store')) {\r\n redPillHeaders['X-RedPill-Store'] = session.store;\r\n\r\n if (session.hasOwnProperty('broker')) {\r\n redPillHeaders['X-RedPill-Broker'] = session.broker;\r\n\r\n if (session.hasOwnProperty('authenticator')) {\r\n redPillHeaders['X-RedPill-Authenticator'] = session.authenticator;\r\n }\r\n }\r\n }\r\n\r\n return redPillHeaders;\r\n }\r\n\r\n const fetchData = async ({url = \"\", method = \"GET\", data = {}, config = {}, additionalHeaders = {}} = {}) => {\r\n if (!API_URL) {\r\n if (IS_STAGING) {\r\n alert(`${urlRoute} is unavailable. Check whether the specified API route exists.`);\r\n }\r\n // return false;\r\n } else {\r\n url = `${API_URL}${url}`\r\n }\r\n\r\n try {\r\n let headers = setRedPillHeaders(additionalHeaders);\r\n\r\n // @ts-ignore\r\n return axios({url, method, data, headers, config})\r\n .then((res) => {\r\n return res.data;\r\n })\r\n .catch((error) => {\r\n //sendExceptionToSentry(error);\r\n\r\n if (error.response) {\r\n if (error.response.hasOwnProperty('data') && error.response.data) {\r\n // setResponse(error.response.data)\r\n }\r\n\r\n // if (error.response.data && error.response.data.hasOwnProperty('redirect') && error.response.data.redirect) {\r\n // const {redirect} = error.response.data;\r\n // console.log(redirect)\r\n // // window.location = redirect;\r\n // }\r\n\r\n // Request made and server responded\r\n // console.error(error.response.data);\r\n // console.error(error.response.status);\r\n // console.error(error.response.headers);\r\n\r\n return error.response.data;\r\n } else if (error.request) {\r\n // The request was made but no response was received\r\n // console.error(error.request);\r\n } else {\r\n // Something happened in setting up the request that triggered an Error\r\n // console.error('Error', error.message);\r\n }\r\n })\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n };\r\n\r\n const {execute, status, value, error} = useAsync(params => fetchData(params));\r\n\r\n return {API_URL, execute, status, value, error};\r\n}\r\n","import {useDispatch, useSelector} from \"react-redux\";\r\nimport {updateFreeSpinsGames} from \"Redux/actions/freeSpins\";\r\nimport {useRedPill} from \"./api/useRedPill\";\r\nimport {IS_FREE_SPINS_ENABLED, IS_MOBILE, MGS_FREE_SPINS_CONFIG, PLAYER_ID} from \"Setup/config\";\r\nimport {sendLogglyEvent} from \"Helpers/loggly\";\r\n\r\nconst findCgidByBundledGames = (bundledGames) => {\r\n const cidIndex = IS_MOBILE ? 1 : 0;\r\n let searchForGame = MGS_FREE_SPINS_CONFIG.find(g => g.mid === bundledGames.moduleId && g.cid[cidIndex] === bundledGames.clientId);\r\n\r\n if (searchForGame && searchForGame?.gcid) {\r\n console.log(searchForGame.gcid);\r\n return searchForGame.gcid;\r\n }\r\n};\r\n\r\nconst useFreeSpins = () => {\r\n const dispatch = useDispatch();\r\n const {execute, status, value, error} = useRedPill(\"authorizedPaths.promotions.mgs-free-spins\");\r\n\r\n const getUserFreeSpinsOffers = async () => {\r\n if (!IS_FREE_SPINS_ENABLED) return;\r\n\r\n let fsData = [];\r\n const res = await execute({url: PLAYER_ID});\r\n\r\n try {\r\n const {code, data, redirect} = res;\r\n if (redirect) {\r\n window.location = redirect;\r\n return;\r\n }\r\n\r\n if (code === 200) {\r\n const freeSpinsData = data.freeSpins;\r\n for (let fs in freeSpinsData) {\r\n let gameIds = [];\r\n for (let g in freeSpinsData[fs].bundledGames) {\r\n const bg = freeSpinsData[fs].bundledGames[g];\r\n const gameId = findCgidByBundledGames(bg);\r\n\r\n if (gameId && !gameIds.includes(gameId)) gameIds.push(gameId);\r\n }\r\n\r\n if (gameIds.length > 0) {\r\n fsData.push({\r\n gameIds,\r\n offerInstances: freeSpinsData[fs].offerInstances\r\n })\r\n }\r\n }\r\n\r\n console.log(fsData);\r\n\r\n dispatch(updateFreeSpinsGames(fsData));\r\n }\r\n\r\n return true;\r\n } catch (e) {\r\n sendLogglyEvent('Free Spins', 'Error parsing free spins data', {error: e})\r\n console.log(e);\r\n }\r\n };\r\n\r\n const {freeSpinsGamesLoaded, freeSpinsGames} = useSelector(state => ({\r\n freeSpinsGamesLoaded: state.freeSpins.isLoaded, freeSpinsGames: state.freeSpins.games,\r\n }));\r\n\r\n return {\r\n _getFreeSpins: getUserFreeSpinsOffers, isFreeSpinsLoaded: freeSpinsGamesLoaded, freeSpinsData: freeSpinsGames,\r\n };\r\n}\r\n\r\nexport default useFreeSpins;\r\n","import {useHistory} from \"react-router-dom\";\r\nimport {BINGO_GAME_PAGE, CASINO_GAME_PAGE, LOGIN_URL} from \"Setup/urls\";\r\nimport useLobby from \"Hooks/useLobby\";\r\nimport {IS_LOGGED_IN} from \"Setup/config\";\r\n\r\nconst useGames = () => {\r\n const history = useHistory();\r\n const {gamesData} = useLobby();\r\n\r\n const findGameByCatalogueGameId = catalogueGameId => {\r\n const filteredGame = gamesData.find(game => game['catalogueGameId'] === catalogueGameId);\r\n return filteredGame ? filteredGame : false;\r\n }\r\n\r\n const launchCasinoGame = (gameId, newWindow = false) => {\r\n if (!IS_LOGGED_IN) {\r\n history.push(LOGIN_URL);\r\n } else {\r\n if (gameId) {\r\n if (newWindow) {\r\n window.open(`/game/${CASINO_GAME_PAGE}/${gameId}`);\r\n } else {\r\n history.push(`/game/${CASINO_GAME_PAGE}/${gameId}`);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const launchBingoGame = gameId => {\r\n if (!IS_LOGGED_IN) {\r\n history.push(LOGIN_URL);\r\n } else {\r\n if (gameId) {\r\n history.push(`/game/${BINGO_GAME_PAGE}/${gameId}`);\r\n }\r\n }\r\n };\r\n\r\n return {\r\n launchCasinoGame,\r\n launchBingoGame,\r\n findGameByCatalogueGameId,\r\n };\r\n};\r\n\r\nexport default useGames;\r\n","import {useCallback, useEffect, useRef} from \"react\";\r\n\r\n// const useIsMounted = () => {\r\n// const [isMounted, setIsMounted] = useState(false);\r\n//\r\n// useEffect(() => {\r\n// setIsMounted(true);\r\n// return () => setIsMounted(false);\r\n// }, []);\r\n//\r\n// return isMounted;\r\n// };\r\n\r\nconst useIsMounted = () => {\r\n const isMounted = useRef(false);\r\n\r\n useEffect(() => {\r\n isMounted.current = true;\r\n return () => isMounted.current = false;\r\n }, [])\r\n\r\n const checker = useCallback(() => {\r\n return isMounted.current\r\n }, []);\r\n\r\n return checker;\r\n}\r\n\r\nexport default useIsMounted;\r\n","import {shallowEqual, useDispatch, useSelector} from \"react-redux\";\r\nimport {fetchLobbyFail, updateLobby} from \"Redux/actions/lobby\";\r\nimport useStorage from \"Hooks/useStorage\";\r\nimport {useRedPill} from \"Hooks/api/useRedPill\";\r\nimport {useRecentGames} from \"Hooks/api/useRecentGames\";\r\nimport {IS_LOGGED_IN, IS_PROD} from \"Setup/config\";\r\nimport sendExceptionToSentry from \"Helpers/handledSentryError\";\r\nimport extendedDayjs from \"Helpers/dayjs\";\r\n\r\nconst useLobby = () => {\r\n const dispatch = useDispatch();\r\n const {_get} = useRecentGames();\r\n const {getRecentGames} = _get();\r\n const userState = IS_LOGGED_IN ? \"LI\" : \"LO\";\r\n const getLobbyPath = \"smartLobby\";\r\n const {execute, status} = useRedPill(getLobbyPath);\r\n const {setValue, storedValue: storedSmartLobby} = useStorage(`smartLobby${userState}`, null, \"localStorage\");\r\n\r\n const {lobbyConfig, gamesData, isLoaded, fetchLobbyFailed} = useSelector(state => {\r\n const fetchLobbyFailed = state.lobby.fetchLobbyFailed ?? false;\r\n const isLoaded = state.lobby.isLoaded && !fetchLobbyFailed;\r\n\r\n return {\r\n lobbyConfig: isLoaded ? state.lobby.navigation : [],\r\n gamesData: isLoaded ? Object.values(state.lobby.games) : [],\r\n fetchLobbyFailed,\r\n isLoaded\r\n }\r\n }, shallowEqual);\r\n\r\n const fetchLobby = async (ignoreLobbyAge = true) => {\r\n const LOBBY_REFRESH_MIN_AGE_IN_MINUTES = IS_PROD ? 15 : 1;\r\n const LOBBY_REFRESH_MIN_AGE_IN_SECONDS = 60 * LOBBY_REFRESH_MIN_AGE_IN_MINUTES;\r\n\r\n try {\r\n if (!ignoreLobbyAge && storedSmartLobby && storedSmartLobby?.lobbySaveTimestamp) {\r\n const now = extendedDayjs().unix();\r\n const ageDifference = now - storedSmartLobby.lobbySaveTimestamp;\r\n\r\n console.log(ageDifference);\r\n if (ageDifference < LOBBY_REFRESH_MIN_AGE_IN_SECONDS) {\r\n const ageInFullMins = Math.floor(ageDifference / 60);\r\n const ageInRemainingSeconds = (ageDifference - (ageInFullMins * 60));\r\n\r\n console.log(`Lobby update ignored, only ${ageInFullMins} min, ${ageInRemainingSeconds} sec old.`);\r\n return;\r\n } else {\r\n console.log(`Lobby is over ${LOBBY_REFRESH_MIN_AGE_IN_MINUTES} mins old, refreshing.`);\r\n }\r\n }\r\n } catch (e) {\r\n console.log(\"Couldn't calculate lobby age!\");\r\n }\r\n\r\n const saveLobby = (data) => {\r\n data.lobbySaveTimestamp = extendedDayjs().unix();\r\n\r\n //No saved lobby or out of date, save it and update store.\r\n setValue(data);\r\n dispatch(updateLobby(data));\r\n };\r\n\r\n const res = await execute();\r\n\r\n if (IS_LOGGED_IN) {\r\n getRecentGames();\r\n }\r\n\r\n try {\r\n if (res && res.code === 200 && res.data && res.data.length > 0) {\r\n saveLobby(res.data[0]);\r\n } else {\r\n if (!storedSmartLobby) {\r\n dispatch(fetchLobbyFail());\r\n }\r\n }\r\n } catch (e) {\r\n dispatch(fetchLobbyFail());\r\n\r\n sendExceptionToSentry(e);\r\n console.log(\"Failed to load lobby\");\r\n }\r\n };\r\n\r\n return {\r\n fetchLobby,\r\n lobbyConfig,\r\n gamesData,\r\n isLoaded,\r\n fetchLobbyFailed\r\n };\r\n};\r\n\r\nexport default useLobby;\r\n","// Hook\r\nimport {useState} from \"react\";\r\nimport useIsMounted from \"Hooks/useIsMounted\";\r\n\r\nexport default function useStorage(key, initialValue, storage = \"sessionStorage\") {\r\n const s = storage === \"sessionStorage\" ? window.sessionStorage : window.localStorage;\r\n const isMounted = useIsMounted();\r\n\r\n // State to store our value\r\n // Pass initial state function to useState so logic is only executed once\r\n const [storedValue, setStoredValue] = useState(() => {\r\n try {\r\n // Get from local storage by key\r\n const item = s.getItem(key);\r\n // Parse stored json or if none return initialValue\r\n return item ? JSON.parse(item) : initialValue;\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n // If error also return initialValue\r\n console.log(e);\r\n return initialValue;\r\n }\r\n });\r\n\r\n // Return a wrapped version of useState's setter function that ...\r\n // ... persists the new value to localStorage.\r\n const setValue = (value) => {\r\n try {\r\n // Allow value to be a function so we have same API as useState\r\n const valueToStore = value instanceof Function ? value(storedValue) : value;\r\n // Save state\r\n if (isMounted()) {\r\n setStoredValue(valueToStore);\r\n }\r\n // Save to local storage\r\n s.setItem(key, JSON.stringify(valueToStore));\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n // A more advanced implementation would handle the error case\r\n console.log(e);\r\n }\r\n };\r\n\r\n const deleteItem = () => {\r\n try {\r\n s.removeItem(key);\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n // A more advanced implementation would handle the error case\r\n console.log(e);\r\n }\r\n };\r\n\r\n return {storedValue, setValue, deleteItem};\r\n}\r\n","const scriptSettingsDefault = {\r\n callbackOnSuccess: () => {\r\n },\r\n callbackOnError: () => {\r\n },\r\n id: '',\r\n defer: true\r\n};\r\n\r\nconst loadExternalScript = (src, settings) => {\r\n if (!src) {\r\n console.log('Script path invalid.');\r\n return false;\r\n }\r\n\r\n const scriptSettings = {...scriptSettingsDefault, ...settings};\r\n console.log('script settings::');\r\n console.log(scriptSettings);\r\n\r\n let script = document.createElement('script');\r\n script.src = src;\r\n script.defer = scriptSettings.defer;\r\n script.type = 'text/javascript';\r\n script.async = true;\r\n if (scriptSettings.id && typeof scriptSettings.id === 'string') {\r\n script.id = scriptSettings.id;\r\n }\r\n\r\n script.onerror = (err) => {\r\n console.log('Error loading script:');\r\n console.log(err);\r\n scriptSettings.callbackOnError();\r\n }\r\n\r\n script.onload = scriptSettings.callbackOnSuccess;\r\n\r\n document.head.appendChild(script);\r\n};\r\n\r\nexport default loadExternalScript;\r\n","import React from 'react';\r\n\r\nexport const updateLiveAgentStatus = (isLoaded = false) => {\r\n return {\r\n type: 'UPDATE_LIVE_AGENT_STATUS',\r\n isLoaded: isLoaded\r\n }\r\n};\r\n","import {useDispatch, useSelector} from \"react-redux\";\r\nimport {IS_GOOGLE_BOT, IS_LOGGED_IN, ZENDESK_API_VERSION, ZENDESK_SCRIPT_URL} from \"Setup/config\";\r\nimport loadExternalScript from \"Helpers/loadExternalScript\";\r\nimport {updateLiveAgentStatus} from \"Redux/actions/liveAgent\";\r\nimport {useRedPill} from \"Hooks/api/useRedPill\";\r\n\r\nexport const useZendesk = () => {\r\n const liveChatAvailable = useSelector(state => state.liveAgent.isLoaded);\r\n const dispatch = useDispatch();\r\n\r\n const getZendeskTokenPath = ZENDESK_API_VERSION === \"v2\" ? \"authorizedPaths.zendeskTokenV2\" : \"authorizedPaths.zendeskToken\";\r\n const {execute, status, value, error} = useRedPill(getZendeskTokenPath);\r\n\r\n const getZendeskJWT = async () => {\r\n const res = await execute();\r\n\r\n try {\r\n if (res.code === 200) {\r\n return res.data.jwt;\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log(e);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const initZendesk = () => {\r\n if (ZENDESK_API_VERSION === \"v2\") {\r\n initZendeskV2();\r\n } else {\r\n initZendeskV1();\r\n }\r\n };\r\n\r\n const initZendeskV1 = () => {\r\n if (IS_GOOGLE_BOT) return false;\r\n\r\n let userDetails = {name: \"\", email: \"\"};\r\n\r\n if (IS_LOGGED_IN) {\r\n const email = window?.MORPHEUS?.personal?.email;\r\n const username = window?.MORPHEUS?.core?.username;\r\n userDetails.email = email;\r\n userDetails.name = username;\r\n } else {\r\n userDetails = false;\r\n }\r\n\r\n window.zESettings = {\r\n \"webWidget\": {\r\n \"analytics\": true\r\n }\r\n };\r\n\r\n // Whenever JWT is ready to set authentication in the chat widget\r\n if (IS_LOGGED_IN) {\r\n window.zESettings.webWidget.authenticate = {\r\n chat: {\r\n jwtFn: callback => {\r\n getZendeskJWT().then(response => callback(response)).catch(e => {\r\n //sendExceptionToSentry(e);\r\n console.log(e)\r\n });\r\n }\r\n }\r\n };\r\n }\r\n\r\n const callbackOnSuccess = () => {\r\n const zE = window.zE;\r\n\r\n zE(function () {\r\n if (typeof zE === 'undefined') {\r\n return false;\r\n }\r\n\r\n try {\r\n if (userDetails) {\r\n zE('webWidget', 'identify', userDetails);\r\n } else {\r\n zE('webWidget', 'logout');\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n // sendLogglyEvent('Zendesk', 'Error');\r\n }\r\n\r\n dispatch(updateLiveAgentStatus(true));\r\n });\r\n }\r\n\r\n loadExternalScript(ZENDESK_SCRIPT_URL, {callbackOnSuccess, id: 'ze-snippet'});\r\n };\r\n\r\n const initZendeskV2 = () => {\r\n if (IS_GOOGLE_BOT) return false;\r\n\r\n window.zESettings = {\r\n \"webWidget\": {\r\n \"analytics\": true\r\n }\r\n };\r\n\r\n const callbackOnSuccess = () => {\r\n const zE = window.zE;\r\n\r\n try {\r\n if (IS_LOGGED_IN) {\r\n zE(\"messenger\", \"loginUser\", function (callback) {\r\n getZendeskJWT().then(response => callback(response)).catch(e => {\r\n console.log(e)\r\n });\r\n })\r\n } else {\r\n zE(\"messenger\", \"logoutUser\");\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n // sendLogglyEvent('Zendesk', 'Error');\r\n }\r\n\r\n dispatch(updateLiveAgentStatus(true));\r\n }\r\n\r\n loadExternalScript(ZENDESK_SCRIPT_URL, {callbackOnSuccess, id: 'ze-snippet'});\r\n };\r\n\r\n const launchLiveChat = () => {\r\n try {\r\n if (window.hasOwnProperty('zE')) {\r\n window.zE.activate();\r\n } else {\r\n console.log('Chat error');\r\n }\r\n } catch (e) {\r\n //sendExceptionToSentry(e);\r\n console.log('Live agent loading...');\r\n }\r\n };\r\n\r\n return {\r\n initZendesk,\r\n launchLiveChat,\r\n liveChatAvailable,\r\n };\r\n};\r\n","import {Box, makeStyles, Paper, Typography} from \"@material-ui/core\";\r\nimport clsx from \"clsx\";\r\nimport React from \"react\";\r\nimport {BP_MEDIUM} from \"Theme/breakpoints\";\r\n\r\nexport const useGenericPageContainerStyles = makeStyles(theme => ({\r\n centerColumn: {\r\n margin: \"0 auto\",\r\n [theme.breakpoints.down(BP_MEDIUM)]: {\r\n width: \"100%\",\r\n }\r\n },\r\n paper: {\r\n padding: theme.spacing(4, 2),\r\n color: theme.palette.neutral.dark,\r\n border: 'none',\r\n borderRadius: 0,\r\n boxShadow: 'none',\r\n background: '#FFFFFF',\r\n [theme.breakpoints.up(BP_MEDIUM)]: {\r\n padding: theme.spacing(4, 1),\r\n marginTop: theme.spacing(8),\r\n marginBottom: theme.spacing(8),\r\n boxShadow: '0px 1px 3px rgba(0, 0, 0, 0.12), 0px 1px 2px rgba(0, 0, 0, 0.24)',\r\n borderRadius: theme.shape.borderRadius\r\n },\r\n '& h3': {\r\n fontSize: '1.5rem',\r\n marginTop: '0',\r\n [theme.breakpoints.up(BP_MEDIUM)]: {\r\n fontSize: '2rem',\r\n textAlign: 'center'\r\n }\r\n },\r\n '& h2': {\r\n fontSize: '1rem',\r\n [theme.breakpoints.up(BP_MEDIUM)]: {\r\n fontSize: '1.5rem',\r\n }\r\n },\r\n '& p h2, .MuiTypography-h5': {\r\n fontSize: '1rem',\r\n },\r\n '& p .subheader': {\r\n fontSize: '1rem',\r\n },\r\n '& img': {\r\n width: '100%'\r\n },\r\n '& .MuiTypography-body1': {\r\n fontSize: '0.875rem'\r\n }\r\n },\r\n title: {\r\n textAlign: \"center\",\r\n '&.MuiTypography-gutterBottom': {\r\n marginBottom: theme.spacing(4)\r\n }\r\n },\r\n subheader: {\r\n marginTop: theme.spacing(4),\r\n '&.MuiTypography-gutterBottom': {\r\n marginBottom: theme.spacing(2)\r\n }\r\n },\r\n paragraph: {\r\n textAlign: 'justify',\r\n\r\n '&.MuiTypography-gutterBottom': {\r\n marginBottom: \"1em\"\r\n },\r\n },\r\n button: {\r\n margin: theme.spacing(2, 'auto', 5),\r\n display: \"flex\",\r\n justifyContent: \"center\"\r\n }\r\n}))\r\n\r\nexport const GenericPageContainer = ({title, children, isReady = true, customHeaderTagVariant = \"h4\", columnOverrideMedium = 11, columnOverrideXlarge = 8}) => {\r\n const classes = useGenericPageContainerStyles();\r\n\r\n if (!isReady) {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n {title && {title}}\r\n \r\n {children}\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport const Subheader = ({children, className}) => {\r\n const classes = useGenericPageContainerStyles();\r\n\r\n return (\r\n {children}\r\n )\r\n};\r\n\r\nexport const Paragraph = ({children}) => {\r\n const classes = useGenericPageContainerStyles();\r\n\r\n return (\r\n {children}\r\n )\r\n};\r\n","// Action Types\r\nexport const UPDATE_BINGO_FEED = \"UPDATE_BINGO_FEED\";\r\nexport const UPDATE_DF_BINGO_FEED = \"UPDATE_DF_BINGO_FEED\";\r\n\r\n// Action Creator\r\nexport const updateBingoFeed = (newRooms, newSpecials, roomDictionary) => ({\r\n type: UPDATE_BINGO_FEED,\r\n newRooms,\r\n newSpecials,\r\n roomDictionary\r\n});\r\n\r\nexport const updateDFBingoFeed = (dfRooms) => ({\r\n type: UPDATE_DF_BINGO_FEED,\r\n dfRooms\r\n});\r\n","// Action Types\r\nexport const UPDATE_PLAYER_CLAIMS = \"UPDATE_PLAYER_CLAIMS\";\r\nexport const UPDATE_PLAYER_CLAIMS_STATUS = \"UPDATE_PLAYER_CLAIMS_STATUS\";\r\nexport const UPDATE_AVAILABLE_CLAIMS = \"UPDATE_AVAILABLE_CLAIMS\";\r\nexport const UPDATE_AVAILABLE_CLAIMS_STATUS = \"UPDATE_AVAILABLE_CLAIMS_STATUS\";\r\n\r\n// Action Creator\r\nexport const updatePlayerClaims = (newPlayerClaims) => ({\r\n type: UPDATE_PLAYER_CLAIMS,\r\n newPlayerClaims,\r\n});\r\n\r\nexport const updatePlayerClaimsStatus = (status, error) => ({\r\n type: UPDATE_PLAYER_CLAIMS_STATUS,\r\n status,\r\n error\r\n});\r\n\r\nexport const updateAvailableClaims = (newAvailableClaims) => ({\r\n type: UPDATE_AVAILABLE_CLAIMS,\r\n newAvailableClaims,\r\n});\r\n\r\nexport const updateAvailableClaimsStatus = (status, error) => ({\r\n type: UPDATE_AVAILABLE_CLAIMS_STATUS,\r\n status,\r\n error\r\n});\r\n","export const FREE_SPINS_REMAINING = \"FREE_SPINS_REMAINING\";\r\n\r\nexport const updateFreeSpinsGames = (freeSpinsGames) => ({\r\n type: FREE_SPINS_REMAINING,\r\n freeSpinsGames,\r\n});\r\n","// Action Types\r\nexport const UPDATE_PLAYER_LIMITS = \"UPDATE_PLAYER_LIMITS\";\r\nexport const UPDATE_PLAYER_LIMIT = \"UPDATE_PLAYER_LIMIT\";\r\nexport const UPDATE_SESSION_REMINDER = \"UPDATE_SESSION_REMINDER\";\r\n\r\n// Action Creator\r\n\r\n// Limits from my-account\r\nexport const updatePlayerLimits = (newPlayerLimits) => ({\r\n type: UPDATE_PLAYER_LIMITS,\r\n newPlayerLimits,\r\n});\r\n\r\n// Individual limit on get deposit limits\r\nexport const updatePlayerLimit = (interval, setting) => ({\r\n type: UPDATE_PLAYER_LIMIT,\r\n interval,\r\n setting\r\n});\r\n\r\n// Session reminder\r\nexport const updateSessionReminder = (interval) => ({\r\n type: UPDATE_SESSION_REMINDER,\r\n interval\r\n});\r\n","// Action Types\r\nexport const UPDATE_LOBBY = \"UPDATE_LOBBY\";\r\nexport const FETCH_LOBBY_FAIL = \"FETCH_LOBBY_FAIL\";\r\nexport const FETCH_LOBBY = \"FETCH_LOBBY\";\r\nexport const UPDATE_RECENT_GAMES = \"UPDATE_RECENT_GAMES\";\r\n\r\n// Action Creator\r\nexport const updateLobby = (newLobby) => ({\r\n type: UPDATE_LOBBY,\r\n newLobby,\r\n});\r\n\r\nexport const fetchLobbyFail = () => ({\r\n type: FETCH_LOBBY_FAIL,\r\n});\r\n\r\nexport const fetchLobby = () => ({\r\n type: FETCH_LOBBY,\r\n});\r\n\r\nexport const updateRecentGames = (newRecentGames) => ({\r\n type: UPDATE_RECENT_GAMES,\r\n newRecentGames,\r\n});\r\n","// Action Types\r\nexport const UPDATE_PLAYER_LOYALTY_POINTS = \"UPDATE_PLAYER_LOYALTY_POINTS\";\r\nexport const UPDATE_LOYALTY_POINTS_CONFIG = \"UPDATE_LOYALTY_POINTS_CONFIG\";\r\n\r\n// Action Creator\r\nexport const updatePlayerLoyaltyPoints = (data) => ({\r\n type: UPDATE_PLAYER_LOYALTY_POINTS,\r\n data,\r\n});\r\n\r\nexport const updateLoyaltyPointsConfig = (config) => ({\r\n type: UPDATE_LOYALTY_POINTS_CONFIG,\r\n config,\r\n});\r\n","// Action Types\r\nexport const UPDATE_MESSAGES_COUNT = \"UPDATE_MESSAGES_COUNT\";\r\nexport const UPDATE_MESSAGE = \"UPDATE_MESSAGE\";\r\nexport const UPDATE_MESSAGES_LIST = \"UPDATE_MESSAGES_LIST\";\r\n\r\n// Action Creator\r\nexport const updateMessagesCount = (messageCount, unreadMessagesCount) => ({\r\n type: UPDATE_MESSAGES_COUNT,\r\n messageCount,\r\n unreadMessagesCount\r\n});\r\n\r\nexport const updateMessagesList = (newMessagesList) => ({\r\n type: UPDATE_MESSAGES_LIST,\r\n newMessagesList,\r\n});\r\n\r\nexport const updateMessage = (newMessage) => ({\r\n type: UPDATE_MESSAGE,\r\n newMessage,\r\n});\r\n","// Action Types\r\nexport const UPDATE_MORPHEUS_SESSION = \"UPDATE_MORPHEUS_SESSION\";\r\nexport const UPDATE_ACCOUNT_LITE_ACTIVE = \"UPDATE_ACCOUNT_LITE_ACTIVE\";\r\nexport const UPDATE_USER_COMMUNICATION_PREFERENCES = \"UPDATE_USER_COMMUNICATION_PREFERENCES\";\r\nexport const UPDATE_HAS_DEPOSITED = \"UPDATE_HAS_DEPOSITED\";\r\nexport const UPDATE_HAS_QUICK_BANKING = \"UPDATE_HAS_QUICK_BANKING\";\r\n\r\n// Action Creator\r\n// export const updateMorpheusSession = (newMorpheusSession) => {\r\n// console.log(newMorpheusSession);\r\n//\r\n// return {\r\n// type: UPDATE_MORPHEUS_SESSION,\r\n// newMorpheusSession,\r\n// }\r\n// };\r\n\r\nexport const updateAccountLiteActive = (isActive) => {\r\n return {\r\n type: UPDATE_ACCOUNT_LITE_ACTIVE,\r\n isActive,\r\n }\r\n};\r\n\r\nexport const updateUserCommunicatonPreferences = (newComms) => {\r\n return {\r\n type: UPDATE_USER_COMMUNICATION_PREFERENCES,\r\n newComms,\r\n }\r\n};\r\n\r\nexport const setHasDeposited = () => {\r\n return {\r\n type: UPDATE_HAS_DEPOSITED,\r\n }\r\n};\r\n\r\nexport const setHasQuickBanking = (quickBanking) => {\r\n return {\r\n type: UPDATE_HAS_QUICK_BANKING,\r\n quickBanking\r\n }\r\n};\r\n","// Action Types\r\nexport const UPDATE_PROMOTIONS_LIST = \"UPDATE_PROMOTIONS_LIST\";\r\nexport const UPDATE_USERS_PROMOTIONS_LIST = \"UPDATE_USERS_PROMOTIONS_LIST\";\r\nexport const UPDATE_USERS_ACTIVE_NOTIFICATIONS = \"UPDATE_USERS_ACTIVE_NOTIFICATIONS\";\r\n\r\n// Action Creator\r\nexport const updatePromotionsList = (newPromotionsList) => ({\r\n type: UPDATE_PROMOTIONS_LIST,\r\n newPromotionsList,\r\n});\r\n\r\nexport const updateUsersPromotionsList = (newUsersPromotionsList) => ({\r\n type: UPDATE_USERS_PROMOTIONS_LIST,\r\n newUsersPromotionsList,\r\n});\r\n\r\nexport const updateUsersActiveNotifications = (newUsersActiveNotifications) => ({\r\n type: UPDATE_USERS_ACTIVE_NOTIFICATIONS,\r\n newUsersActiveNotifications,\r\n});\r\n","// Action Types\r\nexport const UPDATE_RG_CONFIG = \"UPDATE_RG_CONFIG\";\r\n\r\n// Action Creator\r\nexport const updateRGConfig = (newConfig) => ({\r\n type: UPDATE_RG_CONFIG,\r\n newConfig,\r\n});\r\n","// Action Types\r\nexport const UPDATE_THEME = \"UPDATE_THEME\";\r\nexport const TOGGLE_DRAWER = \"TOGGLE_DRAWER\";\r\nexport const TOGGLE_PANEL = \"TOGGLE_PANEL\";\r\nexport const OPEN_MODAL = \"OPEN_MODAL\";\r\nexport const CLOSE_MODAL = \"CLOSE_MODAL\";\r\nexport const CLOSE_ALL_MODALS = \"CLOSE_ALL_MODALS\";\r\nexport const UPDATE_FREE_SPINS_SHUFFLE_STATUS = \"UPDATE_FREE_SPINS_SHUFFLE_STATUS\";\r\nexport const UPDATE_LOBBY_BANNERS_LIST = \"UPDATE_LOBBY_BANNERS_LIST\";\r\nexport const UPDATE_REWARDS_LIST = \"UPDATE_REWARDS_LIST\";\r\nexport const UPDATE_SPECIAL_EVENT_PROMO_LIST = \"UPDATE_SPECIAL_EVENT_PROMO_LIST\";\r\nexport const SET_LOGIN_ERROR = \"SET_LOGIN_ERROR\";\r\nexport const CLEAR_LOGIN_ERROR = \"CLEAR_LOGIN_ERROR\";\r\n\r\n// Action Creator\r\nexport const updateTheme = (newTheme) => ({\r\n type: UPDATE_THEME,\r\n newTheme,\r\n});\r\n\r\nexport const toggleDrawer = (drawer, isOpen) => {\r\n return {\r\n type: TOGGLE_DRAWER,\r\n drawer,\r\n isOpen\r\n }\r\n};\r\n\r\nexport const toggleNotificationsPanel = () => {\r\n return {\r\n type: TOGGLE_PANEL,\r\n panel: 'notifications'\r\n }\r\n};\r\n\r\nexport const openModal = (modalId, modalProps, clearExistingModals) => {\r\n return {\r\n type: OPEN_MODAL,\r\n modalId,\r\n modalProps,\r\n clearExistingModals\r\n }\r\n}\r\n\r\nexport const closeModal = (modalId) => {\r\n return {\r\n type: CLOSE_MODAL,\r\n modalId\r\n }\r\n}\r\n\r\nexport const closeAllModals = () => {\r\n return {\r\n type: CLOSE_ALL_MODALS,\r\n }\r\n}\r\n\r\nexport const updateFreeSpinsShuffleStatus = (data) => {\r\n return {\r\n type: 'UPDATE_FREE_SPINS_SHUFFLE_STATUS',\r\n data: {...data}\r\n }\r\n};\r\n\r\nexport const updateLobbyBannersList = (data) => {\r\n return {\r\n type: UPDATE_LOBBY_BANNERS_LIST,\r\n data\r\n }\r\n};\r\n\r\nexport const updateRewardsList = (data) => {\r\n return {\r\n type: UPDATE_REWARDS_LIST,\r\n data\r\n }\r\n};\r\n\r\nexport const updateSpecialEventPromoList = (mastergroup, data) => {\r\n return {\r\n type: UPDATE_SPECIAL_EVENT_PROMO_LIST,\r\n mastergroup,\r\n data\r\n }\r\n};\r\n\r\nexport function setLoginError(errorMessage = false) {\r\n if (!errorMessage) errorMessage = \"We couldn't log you in. Please check your username and password are correct and try again.\";\r\n\r\n return {\r\n type: SET_LOGIN_ERROR,\r\n errorMessage\r\n }\r\n}\r\n\r\nexport function clearLoginError() {\r\n return {\r\n type: CLEAR_LOGIN_ERROR\r\n }\r\n}\r\n","// Action Types\r\nexport const UPDATE_PLAYER_WALLETS = \"UPDATE_PLAYER_WALLETS\";\r\nexport const UPDATE_PLAYER_WALLETS_STATUS = \"UPDATE_PLAYER_WALLETS_STATUS\";\r\n\r\n// Action Creator\r\nexport const updatePlayerWallets = (newPlayerWallets) => ({\r\n type: UPDATE_PLAYER_WALLETS,\r\n newPlayerWallets,\r\n});\r\n\r\nexport const updatePlayerWalletsStatus = (status) => ({\r\n type: UPDATE_PLAYER_WALLETS_STATUS,\r\n status,\r\n});\r\n","import {getValueFromStorage} from \"Helpers/storage\";\r\nimport {\r\n CLEAR_LOGIN_ERROR,\r\n CLOSE_ALL_MODALS,\r\n CLOSE_MODAL,\r\n OPEN_MODAL,\r\n SET_LOGIN_ERROR,\r\n TOGGLE_DRAWER,\r\n TOGGLE_PANEL,\r\n UPDATE_FREE_SPINS_SHUFFLE_STATUS,\r\n UPDATE_LOBBY_BANNERS_LIST,\r\n UPDATE_REWARDS_LIST,\r\n UPDATE_SPECIAL_EVENT_PROMO_LIST,\r\n UPDATE_THEME\r\n} from \"Redux/actions/ui\";\r\nimport {\r\n BRAND_THEME,\r\n IS_LOGGED_IN,\r\n IS_LOGIN_LIGHTBOX_ENABLED,\r\n IS_RETURNING_PLAYER_LIGHTBOX_ENABLED,\r\n IS_THEME_SWITCHER_ENABLED,\r\n JUST_LOGGED_IN,\r\n PROMOS_ENABLED,\r\n RETURNING_PLAYER_LIGHTBOX_CLAIM_NAME,\r\n RISK_CATEGORY,\r\n RISK_CATEGORY_TRIGGERS,\r\n RISK_RATING,\r\n RISK_RATING_TRIGGERS,\r\n RISK_STATUS_ON_MODAL_TRIGGERED_CLAIM_NAME,\r\n // SERVICE_ANNOUNCEMENT_ENABLED,\r\n // SERVICE_ANNOUNCEMENT_MESSAGE,\r\n SHOW_WELCOME_LIGHTBOX,\r\n WELCOME_LIGHTBOX_PROMOCODE\r\n} from \"Setup/config\";\r\nimport {UPDATE_PROMOTIONS_LIST} from \"Redux/actions/promotions\";\r\nimport extendedDayjs from \"Helpers/dayjs\";\r\n\r\nexport let activeTheme = BRAND_THEME;\r\nif (IS_THEME_SWITCHER_ENABLED) {\r\n activeTheme = getValueFromStorage('activeTheme', 'localStorage');\r\n if (!activeTheme) activeTheme = BRAND_THEME;\r\n}\r\n\r\nlet initialBannersState = {isLoaded: false, isUpdated: false, list: []};\r\nlet initialRewardsState = {isLoaded: false, isUpdated: false, list: []};\r\nlet initialSpecialEventPromosState = {isLoaded: false, mastergroup: false, list: []};\r\n\r\nconst userState = IS_LOGGED_IN ? \"LI\" : \"LO\";\r\nlet savedBanners = getValueFromStorage(`lobbyBanners${userState}`, 'localStorage');\r\nif (savedBanners) {\r\n initialBannersState = {isLoaded: true, isUpdated: false, list: savedBanners};\r\n}\r\n\r\n// Create the modal queue and add any modals that need to be shown on boot.\r\nlet modalQueue = [];\r\nconst addLoginModalsToModalQueue = (modalQueue) => {\r\n let claimsAvailableOnLogin = window?.MORPHEUS?.account?.claims ?? [];\r\n let riskStatusOnModalTriggeredClaimId = false;\r\n let riskStatusOnModalTriggeredClaimValue = false;\r\n\r\n let returningPlayerLightboxClaimId = false;\r\n let returningPlayerLightboxClaimValue = false;\r\n\r\n if (Array.isArray(claimsAvailableOnLogin)) {\r\n claimsAvailableOnLogin.forEach(claimObj => {\r\n if (riskStatusOnModalTriggeredClaimId && returningPlayerLightboxClaimId) return;\r\n\r\n if (claimObj.type === RISK_STATUS_ON_MODAL_TRIGGERED_CLAIM_NAME) {\r\n riskStatusOnModalTriggeredClaimId = claimObj.id;\r\n riskStatusOnModalTriggeredClaimValue = Number(claimObj.value);\r\n }\r\n\r\n if (claimObj.type === RETURNING_PLAYER_LIGHTBOX_CLAIM_NAME) {\r\n returningPlayerLightboxClaimId = claimObj.id;\r\n returningPlayerLightboxClaimValue = claimObj.value;\r\n }\r\n });\r\n }\r\n\r\n // const showServiceAnnouncementLightbox = SERVICE_ANNOUNCEMENT_ENABLED && JUST_LOGGED_IN; // RP-1162 (Add ability to trigger modal once per session)\r\n const showRiskTriggersLightbox = RISK_CATEGORY_TRIGGERS.includes(RISK_CATEGORY) && RISK_RATING_TRIGGERS.includes(RISK_RATING) && RISK_RATING !== riskStatusOnModalTriggeredClaimValue;\r\n const showWelcomeNewPlayerLightbox = IS_LOGIN_LIGHTBOX_ENABLED && SHOW_WELCOME_LIGHTBOX && WELCOME_LIGHTBOX_PROMOCODE;\r\n const showReturningPlayerLightbox = IS_RETURNING_PLAYER_LIGHTBOX_ENABLED && (!returningPlayerLightboxClaimValue || returningPlayerLightboxClaimValue !== extendedDayjs().format(\"DD-MM-YYYY\"));\r\n\r\n // if (showServiceAnnouncementLightbox) {\r\n // modalQueue.push({modalId: \"ServiceAnnouncement\", modalProps: {message: SERVICE_ANNOUNCEMENT_MESSAGE}});\r\n // }\r\n\r\n if (showRiskTriggersLightbox) {\r\n modalQueue.push({modalId: \"RiskTrigger\", modalProps: {existingClaimId: riskStatusOnModalTriggeredClaimId}});\r\n }\r\n\r\n if (!showRiskTriggersLightbox && PROMOS_ENABLED) {\r\n if (showWelcomeNewPlayerLightbox) {\r\n modalQueue.push({modalId: \"WelcomeLightbox\", modalProps: {promocode: WELCOME_LIGHTBOX_PROMOCODE}});\r\n } else {\r\n if (showReturningPlayerLightbox) {\r\n modalQueue.push({modalId: \"ReturningLoginLightbox\", modalProps: {isPending: true, existingClaimId: returningPlayerLightboxClaimId}})\r\n }\r\n }\r\n }\r\n\r\n return modalQueue;\r\n}\r\n\r\nif (IS_LOGGED_IN && JUST_LOGGED_IN) {\r\n modalQueue = addLoginModalsToModalQueue(modalQueue);\r\n}\r\n\r\nconst initialState = {\r\n currentTheme: activeTheme,\r\n drawers: {\r\n leftDrawer: {\r\n isOpen: false\r\n },\r\n rightDrawer: {\r\n isOpen: false\r\n },\r\n freeSpinsGameDrawer: {\r\n isOpen: false\r\n }\r\n },\r\n panels: {\r\n notifications: {\r\n isOpen: false\r\n }\r\n },\r\n modals: {\r\n queue: modalQueue\r\n },\r\n slideDownGames: {\r\n freeSpinsShuffle: {\r\n // slideDownActive: false,\r\n isLoaded: true,\r\n isLoading: false,\r\n hasError: false,\r\n playedAlready: false,\r\n prizeLoading: false,\r\n data: false\r\n }\r\n },\r\n lobbyBanners: initialBannersState,\r\n rewardsPromos: initialRewardsState,\r\n specialEventPromos: initialSpecialEventPromosState,\r\n loginError: false,\r\n loginErrorMessage: \"\"\r\n};\r\n\r\nconst uiReducer = (state = initialState, action) => {\r\n let updatedQueue;\r\n switch (action.type) {\r\n case UPDATE_THEME:\r\n return {...state, currentTheme: action.newTheme};\r\n case TOGGLE_DRAWER:\r\n return {\r\n ...state,\r\n drawers: {\r\n ...state.drawers,\r\n [action.drawer]: {\r\n isOpen: action.isOpen\r\n }\r\n }\r\n };\r\n case TOGGLE_PANEL:\r\n return {\r\n ...state,\r\n panels: {\r\n ...state.panels,\r\n [action.panel]: {\r\n isOpen: !state.panels[action.panel].isOpen\r\n }\r\n }\r\n };\r\n case OPEN_MODAL:\r\n updatedQueue = action.clearExistingModals ? [] : [...state.modals.queue];\r\n updatedQueue.push({modalId: action.modalId, modalProps: action.modalProps});\r\n\r\n updatedQueue = updatedQueue.filter((m, index, self) =>\r\n index === self.findIndex((t) => (\r\n t.modalId === m.modalId\r\n ))\r\n )\r\n\r\n return {\r\n ...state,\r\n modals: {\r\n ...state.modals,\r\n queue: updatedQueue\r\n }\r\n };\r\n case CLOSE_MODAL:\r\n updatedQueue = [...state.modals.queue];\r\n if (updatedQueue.some(item => item.modalId === action.modalId)) {\r\n updatedQueue = updatedQueue.filter(item => item.modalId !== action.modalId);\r\n }\r\n\r\n return {\r\n ...state,\r\n modals: {\r\n ...state.modals,\r\n queue: updatedQueue\r\n }\r\n };\r\n case CLOSE_ALL_MODALS:\r\n return {\r\n ...state,\r\n modals: {\r\n ...state.modals,\r\n queue: []\r\n }\r\n };\r\n case UPDATE_PROMOTIONS_LIST:\r\n // When the promotions are updated, we need to check whether there's an open\r\n // promotion modal and close it if it's no longer available to the user.\r\n\r\n const promoIds = action.newPromotionsList.map(p => p.id);\r\n const currentOpenModals = state.modals.queue.filter(modal => modal.modalId === \"Promotion\");\r\n const currentOpenPromoModal = currentOpenModals.map(m => m.modalProps.promoId);\r\n\r\n if (currentOpenPromoModal.length) {\r\n if (!promoIds.includes(currentOpenPromoModal[0])) {\r\n const updatedQueue = state.modals.queue.filter(modal => modal.modalId !== \"Promotion\");\r\n\r\n return {\r\n ...state,\r\n modals: {\r\n ...state.modals,\r\n queue: updatedQueue\r\n }\r\n };\r\n }\r\n }\r\n\r\n return state;\r\n\r\n case UPDATE_FREE_SPINS_SHUFFLE_STATUS:\r\n return {\r\n ...state,\r\n slideDownGames: {\r\n freeSpinsShuffle: {\r\n ...state.slideDownGames.freeSpinsShuffle,\r\n ...action.data\r\n }\r\n }\r\n };\r\n case UPDATE_LOBBY_BANNERS_LIST:\r\n return {\r\n ...state,\r\n lobbyBanners: {\r\n isLoaded: true,\r\n isUpdated: true,\r\n list: action.data\r\n }\r\n };\r\n case UPDATE_REWARDS_LIST:\r\n return {\r\n ...state,\r\n rewardsPromos: {\r\n isLoaded: true,\r\n isUpdated: true,\r\n list: action.data\r\n }\r\n };\r\n case UPDATE_SPECIAL_EVENT_PROMO_LIST:\r\n return {\r\n ...state,\r\n specialEventPromos: {\r\n isLoaded: true,\r\n mastergroup: action.mastergroup,\r\n list: action.data\r\n }\r\n };\r\n case SET_LOGIN_ERROR:\r\n return Object.assign({}, state, {\r\n loginError: true,\r\n loginErrorMessage: action.errorMessage\r\n });\r\n case CLEAR_LOGIN_ERROR:\r\n return Object.assign({}, state, {\r\n loginError: false,\r\n loginErrorMessage: \"\"\r\n });\r\n default:\r\n return {...state};\r\n }\r\n};\r\n\r\nexport default uiReducer;\r\n","if (process.env.NODE_ENV === 'production') {\r\n module.exports = require('./store.prod');\r\n} else {\r\n module.exports = require('./store.dev');\r\n}","import {UPDATE_ACCOUNT_LITE_ACTIVE, UPDATE_HAS_DEPOSITED, UPDATE_HAS_QUICK_BANKING, UPDATE_MORPHEUS_SESSION, UPDATE_USER_COMMUNICATION_PREFERENCES} from \"Redux/actions/morpheus\";\r\n\r\nconst morpheusReducer = (state = {isLoaded: true, isAccountLiteActive: false, ...window.MORPHEUS}, action) => {\r\n let newSession;\r\n\r\n switch (action.type) {\r\n case UPDATE_MORPHEUS_SESSION:\r\n return {...state, isLoaded: true, ...action.newMorpheusSession};\r\n case UPDATE_ACCOUNT_LITE_ACTIVE:\r\n return {...state, isAccountLiteActive: action.isActive};\r\n case UPDATE_USER_COMMUNICATION_PREFERENCES:\r\n newSession = Object.assign({}, state);\r\n\r\n if (newSession?.personal?.marketing) {\r\n newSession.personal.marketing = Object.assign({}, newSession.personal.marketing, {...action.newComms});\r\n }\r\n\r\n return {...newSession};\r\n case UPDATE_HAS_DEPOSITED:\r\n newSession = Object.assign({}, state);\r\n\r\n if (newSession?.account) {\r\n newSession.account.hasDeposited = true;\r\n }\r\n\r\n return {...newSession};\r\n case UPDATE_HAS_QUICK_BANKING:\r\n newSession = Object.assign({}, state);\r\n\r\n if (newSession?.account) {\r\n newSession.account.quickBanking = action.quickBanking;\r\n }\r\n\r\n return {...newSession};\r\n default:\r\n return {...state};\r\n }\r\n};\r\n\r\nexport default morpheusReducer;\r\n","import {UPDATE_PLAYER_WALLETS, UPDATE_PLAYER_WALLETS_STATUS} from \"Redux/actions/wallets\";\r\n\r\nconst walletsLoaded = !!window?.MORPHEUS?.account?.wallet;\r\nconst initialPlayerWallets = walletsLoaded ? window.MORPHEUS.account.wallet : [];\r\n\r\nconst initialWallets = {\r\n status: \"idle\",\r\n isLoaded: walletsLoaded,\r\n wallets: initialPlayerWallets\r\n};\r\n\r\n\r\nconst walletsReducer = (state = initialWallets, action) => {\r\n switch (action.type) {\r\n case UPDATE_PLAYER_WALLETS:\r\n return {...state, isLoaded: true, wallets: action.newPlayerWallets};\r\n case UPDATE_PLAYER_WALLETS_STATUS:\r\n return {...state, status: action.status};\r\n default:\r\n return {...state};\r\n }\r\n};\r\n\r\nexport default walletsReducer;\r\n","import {UPDATE_PLAYER_LIMIT, UPDATE_PLAYER_LIMITS, UPDATE_SESSION_REMINDER} from \"Redux/actions/limits\";\r\n\r\nconst limitsReducer = (state = {isLoaded: false}, action) => {\r\n switch (action.type) {\r\n case UPDATE_PLAYER_LIMITS:\r\n return {...state, isLoaded: true, ...action.newPlayerLimits};\r\n case UPDATE_PLAYER_LIMIT:\r\n if (state.isLoaded) {\r\n return Object.assign({}, state, {\r\n depositLimitsConfirmed: true,\r\n [action.interval]: action.setting\r\n });\r\n }\r\n\r\n return state;\r\n case UPDATE_SESSION_REMINDER:\r\n if (state.isLoaded) {\r\n return Object.assign({}, state, {\r\n sessionReminder: {\r\n ...state.sessionReminder,\r\n activeValue: action.interval\r\n }\r\n });\r\n }\r\n\r\n return state;\r\n default:\r\n return {...state};\r\n }\r\n};\r\n\r\nexport default limitsReducer;\r\n","import {UPDATE_AVAILABLE_CLAIMS, UPDATE_AVAILABLE_CLAIMS_STATUS, UPDATE_PLAYER_CLAIMS, UPDATE_PLAYER_CLAIMS_STATUS} from \"Redux/actions/claims\";\r\n\r\nconst claimsLoaded = !!window?.MORPHEUS?.account?.claims;\r\nconst initialPlayerClaims = claimsLoaded ? window.MORPHEUS.account.claims : [];\r\n\r\nconst initialState = {\r\n availableClaims: {\r\n claims: [],\r\n error: null,\r\n status: \"idle\",\r\n isLoaded: false\r\n },\r\n playerClaims: {\r\n claims: initialPlayerClaims,\r\n error: null,\r\n status: \"idle\",\r\n isLoaded: claimsLoaded\r\n }\r\n};\r\n\r\nconst claimsReducer = (state = initialState, action) => {\r\n let playerClaims\r\n\r\n switch (action.type) {\r\n case UPDATE_PLAYER_CLAIMS:\r\n playerClaims = {...state.playerClaims, isLoaded: true, claims: Object.values(action.newPlayerClaims)};\r\n\r\n return {...state, playerClaims};\r\n case UPDATE_AVAILABLE_CLAIMS:\r\n const availableClaims = {...state.availableClaims, isLoaded: true, claims: action.newAvailableClaims};\r\n\r\n return {...state, availableClaims};\r\n case UPDATE_PLAYER_CLAIMS_STATUS:\r\n return {...state, playerClaims: {...state.playerClaims, status: action.status, error: action.error}};\r\n case UPDATE_AVAILABLE_CLAIMS_STATUS:\r\n return {...state, availableClaims: {...state.availableClaims, status: action.status, error: action.error}};\r\n default:\r\n return {...state};\r\n }\r\n};\r\n\r\nexport default claimsReducer;\r\n","import {FETCH_LOBBY, FETCH_LOBBY_FAIL, UPDATE_LOBBY, UPDATE_RECENT_GAMES} from \"Redux/actions/lobby\";\r\nimport {getValueFromStorage} from \"Helpers/storage\";\r\nimport {IS_LOGGED_IN} from \"Setup/config\";\r\n\r\nlet initialState = {isLoaded: false, recentGames: [], isRecentGamesLoaded: false, fetchLobbyFailed: false};\r\n\r\nconst userState = IS_LOGGED_IN ? \"LI\" : \"LO\";\r\nlet savedLobby = getValueFromStorage(`smartLobby${userState}`, 'localStorage');\r\nif (savedLobby) {\r\n initialState = {...initialState, isLoaded: true, ...savedLobby};\r\n\r\n let savedRecentGames = getValueFromStorage('recentGames', 'localStorage');\r\n if (savedRecentGames) {\r\n initialState = {...initialState, isLoaded: true, isRecentGamesLoaded: true, recentGames: savedRecentGames};\r\n }\r\n}\r\n\r\nconst lobbyReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case UPDATE_LOBBY:\r\n return {\r\n ...state,\r\n ...action.newLobby,\r\n fetchLobbyFailed: false,\r\n isLoaded: true,\r\n };\r\n case UPDATE_RECENT_GAMES:\r\n return {\r\n ...state,\r\n recentGames: action.newRecentGames,\r\n isRecentGamesLoaded: true\r\n };\r\n case FETCH_LOBBY:\r\n return {\r\n ...state,\r\n fetchLobbyFailed: false,\r\n isLoaded: false,\r\n };\r\n case FETCH_LOBBY_FAIL:\r\n return {\r\n ...state,\r\n fetchLobbyFailed: true,\r\n isLoaded: true,\r\n };\r\n default:\r\n return {\r\n ...state\r\n };\r\n }\r\n};\r\n\r\nexport default lobbyReducer;\r\n","import {UPDATE_PROMOTIONS_LIST, UPDATE_USERS_ACTIVE_NOTIFICATIONS, UPDATE_USERS_PROMOTIONS_LIST} from \"Redux/actions/promotions\";\r\n\r\nlet initialState = {\r\n list: null,\r\n history: null,\r\n activePromotions: null,\r\n isLoaded: false,\r\n isHistoryLoaded: false,\r\n isActivePromotionsLoaded: null\r\n};\r\n\r\nconst promotionsReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case UPDATE_PROMOTIONS_LIST:\r\n return {...state, isLoaded: true, list: action.newPromotionsList};\r\n case UPDATE_USERS_PROMOTIONS_LIST:\r\n return {...state, isHistoryLoaded: true, history: action.newUsersPromotionsList};\r\n case UPDATE_USERS_ACTIVE_NOTIFICATIONS:\r\n return {...state, isActivePromotionsLoaded: true, activePromotions: action.newUsersActiveNotifications};\r\n default:\r\n return {...state};\r\n }\r\n};\r\n\r\nexport default promotionsReducer;\r\n","import {UPDATE_RG_CONFIG} from \"Redux/actions/responsibleGambling\";\r\n\r\nconst initialState = {\r\n isLoaded: false,\r\n config: null\r\n};\r\n\r\nconst responsibleGamblingReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case UPDATE_RG_CONFIG:\r\n return {...state, isLoaded: true, config: action.newConfig};\r\n default:\r\n return {...state};\r\n }\r\n};\r\n\r\nexport default responsibleGamblingReducer;\r\n","import {UPDATE_MESSAGE, UPDATE_MESSAGES_COUNT, UPDATE_MESSAGES_LIST} from \"Redux/actions/messages\";\r\n\r\nlet initialState = {\r\n list: null,\r\n messagesCount: null,\r\n unreadMessagesCount: null,\r\n isLoaded: false\r\n};\r\n\r\nconst messagesReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case UPDATE_MESSAGES_COUNT:\r\n return {...state, messagesCount: action.messageCount, unreadMessagesCount: action.unreadMessagesCount};\r\n case UPDATE_MESSAGES_LIST:\r\n return {...state, isLoaded: true, list: action.newMessagesList};\r\n case UPDATE_MESSAGE:\r\n let list = state.list;\r\n const updatedList = list.map(message => {\r\n if (message.id === action.newMessage.id) {\r\n return action.newMessage;\r\n }\r\n\r\n return message;\r\n });\r\n\r\n return {...state, list: updatedList};\r\n default:\r\n return {...state};\r\n }\r\n};\r\n\r\nexport default messagesReducer;\r\n","const liveAgentReducer = (state = {isLoaded: false}, action) => {\r\n switch (action.type) {\r\n case 'UPDATE_LIVE_AGENT_STATUS':\r\n return Object.assign({}, state, {\r\n isLoaded: action.isLoaded\r\n });\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default liveAgentReducer;\r\n","import {UPDATE_LOYALTY_POINTS_CONFIG, UPDATE_PLAYER_LOYALTY_POINTS} from \"Redux/actions/loyalty\";\r\n\r\nconst initialState = {\r\n config: [],\r\n configLoaded: false,\r\n loyaltyLoaded: false\r\n};\r\n\r\nconst loyaltyReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case UPDATE_PLAYER_LOYALTY_POINTS:\r\n return {...state, loyaltyLoaded: true, ...action.data};\r\n case UPDATE_LOYALTY_POINTS_CONFIG:\r\n return {...state, configLoaded: true, config: action.config};\r\n default:\r\n return {...state};\r\n }\r\n};\r\n\r\nexport default loyaltyReducer;\r\n","import {UPDATE_BINGO_FEED, UPDATE_DF_BINGO_FEED} from \"Redux/actions/bingo\";\r\n\r\nlet initialState = {isLoaded: false, rooms: [], specials: [], dfRooms: {isLoaded: false, rooms: []}};\r\n\r\nconst bingoReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case UPDATE_BINGO_FEED:\r\n return {\r\n ...state,\r\n isLoaded: true,\r\n rooms: action.newRooms,\r\n specials: action.newSpecials,\r\n dictionary: action.roomDictionary\r\n };\r\n case UPDATE_DF_BINGO_FEED:\r\n return {\r\n ...state,\r\n dfRooms:{\r\n isLoaded: true,\r\n rooms: action.dfRooms\r\n }\r\n };\r\n default:\r\n return {\r\n ...state\r\n };\r\n }\r\n};\r\n\r\nexport default bingoReducer;\r\n","import {FREE_SPINS_REMAINING} from \"Redux/actions/freeSpins\";\r\n\r\nlet initialState = {isLoaded: false, games: []};\r\n\r\nconst freeSpinsReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case FREE_SPINS_REMAINING:\r\n return {\r\n ...state,\r\n isLoaded: true,\r\n games: action.freeSpinsGames,\r\n };\r\n default:\r\n return {\r\n ...state\r\n };\r\n }\r\n};\r\n\r\nexport default freeSpinsReducer;\r\n","import {combineReducers} from \"redux\";\r\nimport morpheusReducer from \"./morpheusReducer\";\r\nimport walletsReducer from \"./walletsReducer\";\r\nimport limitsReducer from \"./limitsReducer\";\r\nimport claimsReducer from \"./claimsReducer\";\r\nimport uiReducer from \"./uiReducer\";\r\nimport lobbyReducer from \"./lobbyReducer\";\r\nimport promotionsReducer from \"./promotionsReducer\";\r\nimport responsibleGamblingReducer from \"./responsibleGamblingReducer\";\r\nimport messagesReducer from \"./messagesReducer\";\r\nimport liveAgentReducer from \"./liveAgentReducer\";\r\nimport loyaltyReducer from \"./loyaltyReducer\";\r\nimport bingoReducer from \"./bingoReducer\";\r\nimport freeSpinsReducer from \"Redux/reducers/freeSpinsReducer\";\r\n\r\nconst rootReducer = combineReducers({\r\n bingo: bingoReducer,\r\n claims: claimsReducer,\r\n limits: limitsReducer,\r\n lobby: lobbyReducer,\r\n messages: messagesReducer,\r\n morpheus: morpheusReducer,\r\n promotions: promotionsReducer,\r\n responsibleGambling: responsibleGamblingReducer,\r\n ui: uiReducer,\r\n wallets: walletsReducer,\r\n liveAgent: liveAgentReducer,\r\n loyalty: loyaltyReducer,\r\n freeSpins: freeSpinsReducer\r\n});\r\n\r\nexport default rootReducer;\r\n","import {applyMiddleware, createStore} from \"redux\";\r\nimport thunk from \"redux-thunk\";\r\nimport rootReducer from \"./reducers/rootReducer\";\r\n\r\nfunction configureStore(initialState) {\r\n return createStore(\r\n rootReducer,\r\n applyMiddleware(thunk)\r\n );\r\n}\r\n\r\nexport default configureStore;\r\n","export const GA_EVENT_CATEGORIES = {\r\n registration: \"Registration\",\r\n banking: \"Banking\",\r\n gameLaunch: \"Game Launch\",\r\n spinTheWheel: \"Spin the Wheel\",\r\n};\r\n","//Some environment settings\r\nimport {getMeasurementId} from \"Helpers\";\r\n\r\nconst MORPHEUS = window.MORPHEUS;\r\nconst {enviroment: environment} = MORPHEUS;\r\n\r\n//Placing it here for now\r\nconst BRAND_CONFIG = MORPHEUS.core.brandConfig;\r\nconst BRAND_FEATURES = BRAND_CONFIG.features;\r\n\r\nexport const GEO_IP_COUNTRY_CODE = environment.geoIp ?? \"\";\r\nexport const IS_MOBILE = environment.isMobile;\r\nexport const IS_DEV = environment.reactDev;\r\nexport const IS_STAGING = environment.isStaging;\r\nexport const IS_PROD = !IS_STAGING;\r\nexport const IS_HOT_RELOAD_ENABLED = IS_DEV && window.hot ? window.hot : false;\r\nexport const HOT_RELOAD_PATH = \"https://localhost:9001\";\r\n\r\nexport const IS_LOGGED_IN = environment.isLoggedIn;\r\nexport const CAN_LOGIN = MORPHEUS?.core?.extended?.lf ?? true;\r\nexport const CAN_REGISTER = MORPHEUS?.core?.extended?.sf ?? true;\r\nexport const STORED_USERNAME = MORPHEUS?.core?.username ?? '';\r\nexport const PLAYER_ID = MORPHEUS?.core?.playerId ?? false;\r\n\r\nconst BINGO_BRANDS = [\"bb\", \"db\", \"gb\", \"rb\", \"bd\"];\r\nexport const MULTI_TIME_BINGO_ROOMS = BRAND_FEATURES?.bingoRooms?.multiTimeRooms ?? false;\r\n\r\n// Risk Scores\r\nexport const RISK_CATEGORY_TRIGGERS = [\"medium\"];\r\nexport const RISK_RATING_TRIGGERS = [5, 6, 9];\r\nexport const RISK_CATEGORY = MORPHEUS?.account?.riskCategory ?? \"\";\r\nexport const RISK_RATING = MORPHEUS?.account?.riskRating ?? 0;\r\nexport const RISK_STATUS_ON_MODAL_TRIGGERED_CLAIM_NAME = \"RiskStatusOnModalTriggered\";\r\n\r\nexport let IS_GOOGLE_BOT = false;\r\nif (window?.navigator?.userAgent) {\r\n const knownBots = [\"googlebot, lighthouse\"];\r\n const ua = window.navigator.userAgent;\r\n\r\n knownBots.forEach(bot => {\r\n if (ua.toLowerCase().indexOf(bot) >= 0) {\r\n IS_GOOGLE_BOT = true;\r\n }\r\n })\r\n}\r\n\r\nif (IS_DEV && IS_LOGGED_IN) {\r\n MORPHEUS.bootEnviroment = {\r\n ftdPlayer: false,\r\n justLoggedIn: true,\r\n // promoCode: \"Test_Sig_Terms\",\r\n showWelcomeLightbox: true\r\n }\r\n}\r\n\r\n// WELCOME LIGHTBOX\r\nexport const FTD_PLAYER = MORPHEUS?.bootEnviroment?.ftdPlayer ?? false;\r\nexport const JUST_LOGGED_IN = MORPHEUS?.bootEnviroment?.justLoggedIn ?? false;\r\nexport const WELCOME_LIGHTBOX_PROMOCODE = MORPHEUS?.bootEnviroment?.promoCode ?? false;\r\nexport const SHOW_WELCOME_LIGHTBOX = MORPHEUS?.bootEnviroment?.showWelcomeLightbox ?? false;\r\nexport const IS_LOGIN_LIGHTBOX_ENABLED = IS_LOGGED_IN && true && WELCOME_LIGHTBOX_PROMOCODE;\r\n\r\n// Returning Player Lightbox Settings\r\nexport const IS_RETURNING_PLAYER_LIGHTBOX_ENABLED = true;\r\nexport const RETURNING_PLAYER_LIGHTBOX_CLAIM_NAME = \"ReturningPlayerLightboxLastShownDate\";\r\n\r\nexport const IS_RESPONSIBLE_GAMING_APP_ENABLED = true;\r\nexport const SERVE_WEBP_IMAGES = true;\r\n\r\nexport const APP_VERSION = BRAND_CONFIG.jsVersion ?? 'N/A';\r\nexport const BRAND_NAME = BRAND_CONFIG.brandName;\r\nexport const BRAND_THEME = BRAND_CONFIG.brandTheme;\r\nexport const BRAND_SUPPORT_EMAIL = BRAND_CONFIG.supportEmail;\r\nexport const CDN_PATH = BRAND_CONFIG.cdnUrl;\r\nexport const CDN_BRAND_PATH = BRAND_CONFIG.cdnBrandPath;\r\n\r\n//BANKING SETTINGS\r\nexport const IS_QUICK_BANKING_ENABLED = true;\r\nexport const IS_SLIM_BANKING_ENABLED = true;\r\nexport const DEBIT_CARD_DEPOSIT_MESSAGE = \"Only debit card deposits are eligible for bonuses\";\r\nexport const SHOW_DEBIT_CARD_DEPOSIT_MESSAGE = true;\r\nexport const USE_NEW_BANKING_EVENT_LISTENER = true;\r\n\r\nexport const IS_APPLE_PAY_ENABLED = BRAND_CONFIG?.features?.applePay?.enabled ?? false;\r\n\r\nexport const IMAGES_PATH = IS_DEV ? (IS_HOT_RELOAD_ENABLED ? `${HOT_RELOAD_PATH}/images/${CDN_BRAND_PATH}` : `/css-js/images/${CDN_BRAND_PATH}`) : `${CDN_PATH}/images/${CDN_BRAND_PATH}`;\r\nexport const SHARED_IMAGES_PATH = IS_DEV ? (IS_HOT_RELOAD_ENABLED ? `${HOT_RELOAD_PATH}/images/shared` : \"/css-js/images/shared\") : `${CDN_PATH}/images/shared`;\r\nexport const USE_NEW_CDN = !!BRAND_FEATURES?.imageCdn?.useNewCdn;\r\nexport const OLD_SHARED_CDN_PATH = 'https://images.broadwaygaming.com';\r\nexport const NEW_SHARED_CDN_PATH = 'https://images2.broadwaygaming.com/content';\r\nexport const SHARED_CDN_PATH = USE_NEW_CDN ? NEW_SHARED_CDN_PATH : OLD_SHARED_CDN_PATH;\r\nexport const SHARED_CDN_BRAND_ID = BRAND_CONFIG.sharedImagesId;\r\n\r\n//IMAGE PATH CONSTANTS\r\nexport const BINGO_ROOMS_IMAGES = `${SHARED_CDN_PATH}/BingoRooms/${SHARED_CDN_BRAND_ID}`;\r\nexport const BINGO_ROOMS_SHARED_IMAGES = `${SHARED_CDN_PATH}/BingoRooms/Shared`;\r\nexport const SPIN_THE_WHEEL_IMAGES_PATH = `${SHARED_CDN_PATH}/Promotions/Shared/SpinTheWheel`;\r\n\r\nexport const CASINO_ICON_PATH = `${SHARED_CDN_PATH}/CasinoIcons`;\r\nexport const CASINO_ICON_SIZE_DIRECTORIES = ['horizontal', 'vertical', 'large'];\r\nexport const ALLOW_RETINA_CASINO_ICONS = false;\r\n\r\n//REGISTRATION\r\nexport const IS_OCCUPATION_FIELD_ENABLED = BRAND_FEATURES?.registration?.occupation?.enabled ?? true;\r\nexport const IS_NATIONALITY_FIELD_ENABLED = true;\r\n\r\n// FEATURES\r\nexport const REWARDS_ENABLED = BRAND_FEATURES?.rewards?.enabled ?? false;\r\nexport const REWARDS_SCHEME_NAME = BRAND_FEATURES?.rewards?.schemeName ?? \"Rewards\";\r\nexport const BINGO_ENABLED = BINGO_BRANDS.includes(BRAND_THEME);\r\nexport const ANIMATED_BINGO_CARD_ENABLED = !IS_MOBILE;\r\nexport const ANIMATED_GAME_ICONS_ENABLED = !IS_MOBILE;\r\nexport const ACTIVATED_GAME_ICONS_ENABLED = true;\r\nexport const DISPLAY_NET_POSITION_AND_SESSION = false;\r\nexport const SG_WEEK_ENABLED = BRAND_FEATURES?.sgWeekEnabled ?? false;\r\nexport const SG_WEEK_DATES_STRING = \"18 - 24 November 2024\";\r\nexport const SHOW_PJP_ON_BINGO_CARDS = true;\r\nexport const PICK_YOUR_BONUS_ENABLED = IS_LOGGED_IN;\r\nexport const SPIN_THE_WHEEL_ENABLED = (IS_LOGGED_IN && BRAND_FEATURES?.spinTheWheel?.enabled) ?? false;\r\nexport const IS_CAMPAIGN_MANAGER_PUSH_NOTIFICATIONS_ENABLED = true;\r\nexport const IS_FREE_SPINS_ENABLED = BRAND_FEATURES?.freeSpins?.enabled ?? false;\r\nexport const MGS_FREE_SPINS_CONFIG = BRAND_FEATURES?.freeSpins?.mgs ?? [];\r\n\r\nexport const DF_ROOMS_ROOM_SETTINGS = BRAND_FEATURES?.bingoRooms?.dfRoomSettings ?? [];\r\nexport const IS_DF_BINGO_ENABLED = (BRAND_FEATURES?.bingoRooms?.isDFRoomsEnabled && DF_ROOMS_ROOM_SETTINGS.length > 0) ?? false;\r\nexport const USE_DRAGONFISH_BINGO_FEED = IS_DF_BINGO_ENABLED;\r\n\r\nexport const MAX_GAMES_IN_RECENTLY_PLAYED = 9;\r\n// export const MAX_GAMES_IN_FAVOURITES = 16;\r\nexport const USER_PREFERRED_GAMES_TAB_ENABLED = true && IS_LOGGED_IN;\r\nexport const IS_FAVOURITE_GAMES_ENABLED = false && IS_LOGGED_IN;\r\n\r\nconst UNIX_NOW = Math.floor(Date.now() / 1000);\r\n\r\nconst START_SPECIAL_EVENT = Math.floor(new Date('12/09/2024 00:00') / 1000);\r\nconst END_SPECIAL_EVENT = Math.floor(new Date('12/20/2024 23:59') / 1000);\r\n\r\nexport const SPECIAL_EVENT_PROMO_ENABLED = IS_LOGGED_IN && ![\"cf\"].includes(BRAND_THEME) && (IS_STAGING || (UNIX_NOW > START_SPECIAL_EVENT && UNIX_NOW < END_SPECIAL_EVENT));\r\nexport const SPECIAL_EVENT_PROMO_NAME = \"Xmas Deals\";\r\nexport const SPECIAL_EVENT_PROMO_MASTERGROUP = \"XMAS24_MASTERGROUP\";\r\nexport const SPECIAL_EVENT_PROMO_PREFIX = \"XMAS24_DAY\";\r\nexport const SPECIAL_EVENT_PROMO_URL = \"/12-deals-of-xmas\";\r\nexport const SPECIAL_EVENT_PROMO_CLASS = \"xmas-deals\";\r\n\r\nconst START_OUTAGE = Math.floor(new Date('11/29/2023 05:00') / 1000);\r\nconst END_OUTAGE = Math.floor(new Date('11/29/2023 07:00') / 1000);\r\nconst IS_OUTAGE = (UNIX_NOW > START_OUTAGE && UNIX_NOW < END_OUTAGE);\r\n\r\nexport const PROMOS_ENABLED = true;\r\nexport const DISABLED_GAME_PROVIDERS = (IS_LOGGED_IN && IS_OUTAGE) ? [\"PragmaticBingo\"] : [];\r\nexport const BINGO_MAINTENANCE = DISABLED_GAME_PROVIDERS.includes(\"PragmaticBingo\");\r\n\r\nexport const SERVICE_ANNOUNCEMENT_ENABLED = IS_OUTAGE;\r\nexport const SERVICE_ANNOUNCEMENT_MESSAGE = \"Maintenance is currently being carried out on some games until 7am. The Bingo Rooms are closed for now, please enjoy slot games in the meantime or pop back after 7am, when the rooms will be available again.\";\r\n\r\nexport const BINGO_SERVICE_ANNOUNCEMENT_ENABLED = IS_OUTAGE && BINGO_MAINTENANCE;\r\nexport const BINGO_SERVICE_ANNOUNCEMENT_MESSAGE = \"Maintenance is currently being carried out on some games until 7am. The Bingo Rooms are closed for now, please enjoy slot games in the meantime or pop back after 7am, when the rooms will be available again.\";\r\n\r\nexport const LOAD_ACCOUNT_VERIFICATION_PAGES_FROM_FORGE = true;\r\n\r\n// BINGO\r\nexport const LOAD_MINI_GAMES_FROM_MORPHEUS = true;\r\n\r\n// CUSTOM SKINS\r\nconst SKINS_UNIX_NOW = Math.floor(Date.now() / 1000);\r\nconst SKINS_START_DATE = Math.floor(new Date('10/28/2023 00:00') / 1000);\r\nconst SKINS_END_DATE = Math.floor(new Date('10/31/2023 23:59') / 1000);\r\nconst SKINS_IS_ENABLED = (SKINS_UNIX_NOW > SKINS_START_DATE && SKINS_UNIX_NOW < SKINS_END_DATE);\r\nexport const CUSTOM_SITE_SKIN_ENABLED = false;\r\nexport const CUSTOM_SITE_SKIN_NAME = \"xmas-2022\";\r\n\r\n// LANDING PAGE SETTINGS\r\nconst LANDING_PAGE_SETTINGS = BRAND_CONFIG.landingPages;\r\nexport const LANDING_PAGES_ENABLED = (LANDING_PAGE_SETTINGS?.landingPagesEnabled ?? false) && CAN_REGISTER;\r\nexport const NEW_PLAYER_HOMEPAGE_ENABLED = (LANDING_PAGE_SETTINGS?.newPlayerHomepageEnabled ?? false) && CAN_REGISTER;\r\nexport const DEFAULT_LANDING_PAGE_ROUTE = LANDING_PAGE_SETTINGS?.defaultLandingPage ?? \"/\";\r\n// export const REDIRECT_ALL_LANDING_PAGES_TO_DEFAULT = LANDING_PAGES_ENABLED ? LANDING_PAGE_SETTINGS?.redirectAllToDefault ?? false : false;\r\n// export const REDIRECT_MISSING_LANDING_PAGES_TO_HOMEPAGE = LANDING_PAGE_SETTINGS?.redirectNonExistentLPsToHomepage ?? false;\r\n\r\n// REGISTRATION\r\nexport const IS_WELCOME_BONUS_CHECKED_BY_DEFAULT = true;\r\n\r\n// MAINTENANCE MODE\r\nexport const IS_BRAND_IN_MAINTENANCE_MODE = BRAND_CONFIG?.maintenanceMode?.brand ?? false;\r\n\r\n// EXTERNAL SERVICES\r\nconst BRAND_EXTERNAL_SERVICES = BRAND_CONFIG.externalServices;\r\nexport const ZENDESK_CHAT_ENABLED = BRAND_EXTERNAL_SERVICES.zendesk.chat.enabled ?? false;\r\nexport const ZENDESK_SCRIPT_URL = BRAND_EXTERNAL_SERVICES.zendesk.chat.externalCodeURL;\r\nexport const ZENDESK_API_VERSION = BRAND_EXTERNAL_SERVICES.zendesk.chat.version ?? \"v1\";\r\nexport const HELP_CENTER_ENABLED = BRAND_EXTERNAL_SERVICES.zendesk.helpCenter.enabled ?? false;\r\nexport const HELP_CENTER_URL = BRAND_EXTERNAL_SERVICES.zendesk.helpCenter.helpCenterURL;\r\nexport const TRUSTPILOT_ENABLED = BRAND_EXTERNAL_SERVICES.trustPilot.enabled ?? false;\r\nexport const TRUSTPILOT_SETTINGS = {\r\n templateId: BRAND_EXTERNAL_SERVICES.trustPilot.templateId ?? false,\r\n businessUnitId: BRAND_EXTERNAL_SERVICES.trustPilot.businessUnitId ?? false,\r\n theme: BRAND_EXTERNAL_SERVICES.trustPilot.theme ?? false\r\n};\r\n\r\nexport const IS_SNAPCHAT_TRACKING_ENABLED = BRAND_EXTERNAL_SERVICES?.tracking?.snapchat?.enabled ?? false;\r\nexport const SNAPCHAT_TRACKING_PIXEL_ID = BRAND_EXTERNAL_SERVICES?.tracking?.snapchat?.pixelId ?? null;\r\n\r\nexport const IS_MICROSOFT_TRACKING_ENABLED = BRAND_EXTERNAL_SERVICES?.tracking?.microsoft?.enabled ?? false;\r\nexport const MICROSOFT_TRACKING_PIXEL_ID = BRAND_EXTERNAL_SERVICES?.tracking?.microsoft?.pixelId ?? null;\r\n\r\n// export const GA_ENABLED = false;\r\n// export const GA_ID = getGASiteId();\r\nexport const GTM_ENABLED = BRAND_EXTERNAL_SERVICES.google.gtm.enabled ?? false;\r\n// export const GTM_ID = GTM_ENABLED ? BRAND_EXTERNAL_SERVICES.google.gtm.id : false;\r\nexport const GA4_ENABLED = true;\r\nexport const GA4_ID = getMeasurementId();\r\n// export const SEND_PLAYER_ID_AS_CUSTOM_DIMENSION = true;\r\nexport const SEND_DATA_TO_S2S_FB_PIXEL = [...BINGO_BRANDS, \"cd\"].includes(BRAND_THEME);\r\nexport const SEND_CONSENT_VALUE_IN_REGISTRATION_PAYLOAD = BRAND_EXTERNAL_SERVICES?.google?.sendConsentInRegistration ?? false;\r\n\r\n// LICENSE DETAILS\r\nconst BRAND_LICENSE_DETAILS = BRAND_CONFIG.licenseDetails;\r\nexport const UKGC_LICENSE_NUMBER = BRAND_LICENSE_DETAILS.ukgcLicenseNumber;\r\nexport const UKGC_LICENSE_URL = BRAND_LICENSE_DETAILS.ukgcLicenseURL;\r\n\r\n// REGULATED\r\nconst REGULATED = BRAND_CONFIG.regulated;\r\nexport const BONUS_MONEY_RULES_STRAPLINE = REGULATED.bonusMoneyRulesStrapline;\r\nexport const BONUS_MONEY_RULES_STRAPLINE_NEW_PLAYER = REGULATED.bonusMoneyRulesStraplineNewPlayer;\r\nexport const BONUS_MONEY_RULES_STRAPLINE_LANDING_PAGE = REGULATED.bonusMoneyRulesStraplineLandingPage;\r\nexport const FB_TERMS_ENABLED = ![\"cf\"].includes(BRAND_THEME);\r\n\r\n// Not allowed view any content, show full block message on all pages.\r\nconst GEO_BLOCKED_COUNTRY_LIST = [\"CA\"];\r\nexport const IS_CLIENT_FROM_GEO_BLOCKED_COUNTRY = GEO_BLOCKED_COUNTRY_LIST.includes(GEO_IP_COUNTRY_CODE.toUpperCase());\r\nexport const RESTRICTED_COUNTRY_ROUTE = \"/restricted-country\";\r\n\r\n// User stuff\r\nexport const COOKIE_BANNER_ENABLED = !BRAND_EXTERNAL_SERVICES?.onetrust?.enabled ?? true;\r\nexport const HAS_ACCEPTED_COOKIES = !MORPHEUS.core.cookieBanner || IS_LOGGED_IN;\r\n\r\n// Check for messages under the category 'Verification' on login?\r\nexport const VERIFICATION_MESSAGE_MODAL_ENABLED = JUST_LOGGED_IN && (BRAND_FEATURES?.checkforVerificationMessagesOnLogin ?? false);\r\nexport const VERIFICATION_MESSAGE_MODAL_CATEGORY = IS_STAGING ? \"Important\" : \"Verification\";\r\n\r\n//Dev Stuff\r\nexport const IS_THEME_SWITCHER_ENABLED = IS_DEV && true;\r\n\r\nfunction canUseWebP() {\r\n try {\r\n var elem = document.createElement('canvas');\r\n if (!!(elem.getContext && elem.getContext('2d'))) {\r\n // was able or not to get WebP representation\r\n return elem.toDataURL('image/webp').indexOf('data:image/webp') == 0;\r\n }\r\n } catch (e) {\r\n return false;\r\n }\r\n\r\n // very old browser like IE 8, canvas not supported\r\n return false;\r\n}\r\n\r\nexport const SUPPORTS_WEBP = canUseWebP();\r\n","import {IS_LOGGED_IN, IS_MOBILE, NEW_PLAYER_HOMEPAGE_ENABLED} from \"./config\";\r\n\r\nconst HOME = '/';\r\nconst LOBBY = '/lobby'\r\nexport const NEW_PLAYER_HOMEPAGE_URL = `/welcome-offer`;\r\n\r\nexport const HOME_URL = IS_LOGGED_IN ? LOBBY : NEW_PLAYER_HOMEPAGE_ENABLED ? NEW_PLAYER_HOMEPAGE_URL : HOME;\r\nexport const REGISTER_URL = '/register';\r\nexport const LOGIN_URL = '/login';\r\nexport const BINGO_URL = '/bingo';\r\nexport const SLOTS_URL = '/slots';\r\nexport const PROMOS_URL = '/promos';\r\nexport const REWARDS_URL = '/rewards';\r\nexport const LOST_DETAILS_URL = '/lost-details';\r\nexport const RESPONSIBLE_GAMBLING_INFO_URL = `/responsible-gambling`;\r\nexport const RESPONSIBLE_GAMBLING_URL = `/responsible-gambling-app`;\r\nexport const SAFER_GAMBLING_URL = `/safer-gambling-week`;\r\nexport const BROADWAY_GAMING_GROUP_SITES_URL = \"/broadway-gaming-group-sites\";\r\n\r\nexport const ABOUT_US_URL = '/about-us';\r\nexport const PROMOTIONAL_TERMS_URL = '/promotional-terms';\r\nexport const BONUS_MONEY_RULES_URL = '/bonus-money-rules';\r\nexport const TERMS_AND_CONDITIONS_URL = '/terms-and-conditions';\r\nexport const COOKIE_POLICY_URL = '/cookie-policy';\r\nexport const PRIVACY_POLICY_URL = '/privacy-policy';\r\nexport const BINGO_RULES_URL = '/bingo-rules';\r\nexport const PAYOUT_RATES_URL = '/payout-rates';\r\nexport const PROTECTION_OF_FUNDS_URL = '/protection-of-funds';\r\nexport const FB_TERMS_URL = '/fb-competitions-terms-and-conditions';\r\nexport const SOURCE_OF_FUNDS_URL = '/source-of-funds';\r\nexport const PLAYER_PROTECTION_URL = '/player-protection';\r\nexport const SECURITY_URL = '/security';\r\nexport const SUPPORT_URL = '/support';\r\n\r\nexport const BINGO_GAME_PAGE = IS_MOBILE ? 'mobile-bingo-game' : 'desktop-bingo-game';\r\nexport const CASINO_GAME_PAGE = IS_MOBILE ? 'mobile-casino-game' : 'desktop-casino-game';\r\n","export const BP_SMALL = 0;\r\nexport const BP_MEDIUM = 640;\r\nexport const BP_LARGE = 1024;\r\nexport const BP_XLARGE = 1280;\r\nexport const BP_XXLARGE = 1600;\r\n\r\nexport const breakpoints = {\r\n keys: [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\"],\r\n values: {\r\n small: 0,\r\n medium: 640,\r\n large: 1024,\r\n xlarge: 1280,\r\n xxlarge: 1600,\r\n },\r\n};\r\n","module.exports = React;","module.exports = ReactDOM;"],"names":["THEMES","cf","async","then","theme","default","cd","bb","bd","db","gb","l247","rb","componentLoader","lazyComponent","attemptsLeft","Promise","resolve","reject","catch","error","setTimeout","useGomTheme","dispatch","useDispatch","firstUpdate","useRef","themeReady","setThemeReady","useState","setTheme","BRAND_THEME","currentTheme","useSelector","state","ui","setValue","storedValue","storedTheme","useStorage","activeTheme","useEffect","IS_STAGING","current","loadTheme","t","res","appliedTheme","setNewTheme","updateTheme","themeCode","LoggedOutRoute","component","render","rest","Component","IS_LOGGED_IN","to","pathname","HOME_URL","path","match","LoggedInRoute","LOGIN_URL","location","useLocation","updatesRoutesObj","window","MORPHEUS","routes","updates","Object","values","find","page","hasOwnProperty","includes","PAGE","id","React","document","getElementById","classList","contains","add","Grid","container","alignItems","direction","style","textAlign","flex","justifyContent","item","xs","Box","Typography","variant","paragraph","maxWidth","sendLogglyEventBankingEventListener","message","json","sendLogglyEvent","_BankingEventListener","hasError","hasDeposited","useBanking","isFTDRef","USE_NEW_BANKING_EVENT_LISTENER","listenForBankingWindowEvents","evt","origin","data","parsedMessage","JSON","parse","payload","action","newAction","depositValue","deposit_amount","Number","toFixed","dataLayer","push","event","sendGA4Event","currency","player_id","PLAYER_ID","value","setHasDeposited","addEventListener","removeEventListener","ErrorBoundary","LocationWrapper","children","IS_HOT_RELOAD_ENABLED","scrollTo","sanitizedSearch","sanitizeUrl","search","IS_PROD","page_location","sendSnapchatPageview","usePageViews","LiveAgent","chatInitDelay","IS_MOBILE","initZendesk","useZendesk","IdleUntilUrgentlyLoadedComponent","useIdleUntilUrgent","fallback","zendeskInitiated","setZendeskInitiated","NEW_PLAYER_HOMEPAGE_ENABLED","NEW_PLAYER_HOMEPAGE_URL","VERIFICATION_MESSAGE_MODAL_ENABLED","LazyVerificationMessageReceiver","RESTRICTED_COUNTRY_ROUTE","GeoBlockedPage","IS_CLIENT_FROM_GEO_BLOCKED_COUNTRY","IS_BRAND_IN_MAINTENANCE_MODE","LazyMaintenancePage","LazyNewPlayerHomepage","CAN_REGISTER","REGISTER_URL","LazyRegistration","CAN_LOGIN","LazyLoginPage","LazyDesktopGamePage","LazyMobileGamePage","LazyDesktopBingoGamePage","LazyMobileBingoGamePage","RESPONSIBLE_GAMBLING_INFO_URL","LazyResponsibleGamblingPage","SAFER_GAMBLING_URL","LazySaferGamblingWeekPage","RESPONSIBLE_GAMBLING_URL","LazyResponsibleGamblingApp","LazyDepositPage","exact","LazyHomePage","LazyLobby","PROMOS_ENABLED","PROMOS_URL","LazyPromos","REWARDS_ENABLED","REWARDS_URL","LazyRewards","SLOTS_URL","LazySlots","BINGO_URL","LazyBingo","SPECIAL_EVENT_PROMO_ENABLED","SPECIAL_EVENT_PROMO_URL","LazySpecialEventPromo","LazyContactCSPage","LazyAccountPendingAIDPage","props","pathOverride","UpdatesPage","LazyChangePasswordPage","LazyRequestPasswordPage","ABOUT_US_URL","LazyServerProvidedContentPage","PLAYER_PROTECTION_URL","SECURITY_URL","LOAD_ACCOUNT_VERIFICATION_PAGES_FROM_FORGE","LazyAgeAndIdentityCheck","LazyIdentityCheckInfoPage","SOURCE_OF_FUNDS_URL","LazySourceOfFunds","BINGO_RULES_URL","title","TERMS_AND_CONDITIONS_URL","LazyTermsAndConditionsChangelog","PROMOTIONAL_TERMS_URL","BONUS_MONEY_RULES_URL","FB_TERMS_ENABLED","FB_TERMS_URL","PRIVACY_POLICY_URL","COOKIE_POLICY_URL","PROTECTION_OF_FUNDS_URL","PAYOUT_RATES_URL","LazyPayoutRates","pageContentRoute","BROADWAY_GAMING_GROUP_SITES_URL","LazyDragonfishOperatedSites","SUPPORT_URL","LazySupportPage","Lazy404","Lazy500","doNotRenderModalsWhenError","ModalRoot","IS_THEME_SWITCHER_ENABLED","ThemeSwitcher","BedeNotificationsLazyLoadComponent","BedeNotifications","LazyLoaderFactory","LazyBedeNotifications","isRoute","timer","execute","useRedPill","ping","clearTimeout","usePing","_getMyAccount","useMyAccount","refreshAccount","refreshPromotions","fetchLobby","useLobby","supportsWebP","body","e","initCalls","localStorage","clear","sessionStorage","CssBaseline","whiteSpace","dangerouslySetInnerHTML","__html","display","flexDirection","createBrowserHistory","IS_DEV","__webpack_public_path__","CDN_PATH","domId","store","configureStore","initialiseSnapchatTracking","initialiseMicrosoftTracking","initialScope","user","core","playerId","name","username","sentryIntegrations","BrowserTracing","routingInstrumentation","Sentry","history","release","APP_VERSION","debug","dsn","integrations","environment","replaysSessionSampleRate","replaysOnErrorSampleRate","tracesSampleRate","blacklistUrls","ignoreErrors","useButtonStyles","makeStyles","root","position","textTransform","fontWeight","typography","button","spinner","iconOnly","lineHeight","minWidth","padding","spacing","fullWidth","width","BaseButton","isLoading","className","innerStyles","onClick","classes","routerButtonClasses","classNames","buttonClasses","visibility","color","size","PrimaryButton","strict","useTheme","overrides","Buttons","primary","SecondaryButton","secondary","DefaultButton","PlainButton","usePlayerBarButtonStyles","background","palette","layout","main","contrastText","dark","PlayerBarButton","clsx","module","exports","constructor","super","this","errorInfo","componentDidCatch","setState","scope","keys","forEach","key","setExtra","hideOnError","closeAllModals","child","connect","RetryModal","retry","LazyLoaderModalFactory","promise","Loader","ErrorRetryView","LazyLoader","loading","setLoading","Lazy","LazyModal","AcceptTerms","Banking","BankingModal","BonusHistory","TransactionHistory","PlayHistory","Withdrawal","DailyDeal","FreeSpinsGame","LoyaltyTokens","PlayingWithBonusFunds","ChangePassword","Search","PromotionalTerms","Logout","Loading","Promotion","BingoHistory","PostFreeSpinsClaimGameLaunch","LoginLobby","PickYourBonus","SpinTheWheel","RiskTrigger","ServiceAnnouncement","ReturningLoginLightbox","MODALS","modalQueue","pendingQueue","modals","queue","filter","m","modalProps","isPending","length","map","modal","ModalComponent","modalId","handleClose","onClose","useDialogTitleStyles","ModalSettings","Modal","breakpoints","down","BP_MEDIUM","titleBackground","titleColor","closeButton","right","top","DialogTitle","showClose","disableTypography","Transition","ref","useStyles","overflow","textOverflow","paper","borderColor","loadingOverlay","bottom","left","zIndex","backdropFilter","grey","closeOnClickOutside","paperStyles","fullscreen","fullScreen","useMediaQuery","closeModal","disableBackdropClick","disableEscapeKeyDown","TransitionComponent","PaperProps","open","underline","ReactRouterLink","PREFIXES","DAILY_DEAL","FREE_SPINS_GAME","PICK_YOUR_BONUS","SPIN_THE_WHEEL","MASTERGROUPS","EXCLUDER_PROMOCODES","SPIN_WHE_WHEEL","PROMO_PREFIXES","NOTIFICATION","LOBBY_BANNER","LOBBY_BANNER_ADDITIONAL","REWARDS","REWARDS_INFO","DD_MASTERGROUP","DD_PRIZE","FREE_SPINS_GAME_MASTERGROUP","FREE_SPINS_GAME_PREFIX","PYB_MASTERGROUP","PYB_OPTION","PYB_OPTION_ACTUAL","SPIN_THE_WHEEL_MASTERGROUP","SPIN_THE_WHEEL_SPUN","SPIN_THE_WHEEL_PRIZE","SPIN_THE_WHEEL_PRIZE_CLAIMED","LoadableRouteLoading","height","ErrorRetry","my","ErrorRetryPage","RouteLoaderWithRetry","response","LazyLoad","Registration","HomePage","LoginPage","DesktopGamePage","MobileGamePage","DesktopBingoGamePage","MobileBingoGamePage","Lobby","Status404","Status500","Slots","Bingo","Promos","SpecialEventPromo","Rewards","PayoutRates","DragonfishOperatedSites","TermsAndConditions","LazyTermsAndConditions","TermsAndConditionsChangelog","AgeAndIdentityCheck","IdentityCheckInfoPage","SourceOfFunds","NewPlayerHomepage","ResponsibleGamblingApp","ResponsibleGamblingPage","SaferGamblingWeekPage","SupportPage","ChangePasswordPage","RequestPasswordPage","AccountPendingAIDPage","ContactCSPage","MaintenancePage","VerificationMessageReceiver","DepositPage","ServerProvidedContentPage","RegistrationLayout","LazyRegistrationLayout","PrimaryLayout","LazyPrimaryLayout","sleep","ms","customParseFormat","require","advancedFormat","utc","isSameOrAfter","isBetween","dayjs","extend","sendLaunchFirstDepositEvent","bonusType","promoCode","bonus_type","promo_code","sendGAEvents","category","label","ga4Obj","parameters","GA4_ENABLED","DEFAULT_SEND_TO","GA4_ID","gtag","send_to","determineValue","s","undefined","consentEntries","google_tag_data","ics","entries","defaultStatus","updateStatus","siteId","brandConfig","brandTheme","GA4Dictionary","getMeasurementId","siteCodeDictionary","fantasticouk","butlersuk","dottyuk","diamonduk","glossyuk","rosyuk","luckyuk","coduk","expressWithdrawalsArticleIdDictionary","getExpressWithdrawalsUrl","articleId","HELP_CENTER_URL","getBrandNameFromSiteCode","siteCode","trackGameLaunchEvent","gameId","gameCategory","game_launched_from","game_id","url","blockedParamsList","replaceWith","replace","input","delim","qmark","val","indexOf","toLowerCase","_LTracker","site","BRAND_NAME","version","MICROSOFT_PIXEL_ID","MICROSOFT_TRACKING_PIXEL_ID","MICROSOFT_TRACKING_ENABLED","IS_MICROSOFT_TRACKING_ENABLED","w","d","u","f","n","i","getConsentValueById","o","ti","enableAutoSpaTracking","q","UET","createElement","src","onload","onreadystatechange","readyState","getElementsByTagName","parentNode","insertBefore","sendMicrosoftFTD","uetq","revenue_value","SNAPCHAT_PIXEL_ID","SNAPCHAT_TRACKING_PIXEL_ID","SNAPCHAT_TRACKING_ENABLED","IS_SNAPCHAT_TRACKING_ENABLED","hasUserGivenConsent","snaptr","a","handleRequest","apply","arguments","r","personal","email","user_email","mobile","user_phone_number","sendSnapchatFTD","transaction_id","price","sendSnapchatRegistration","getValueFromStorage","storage","isStorageAvailable","test","setItem","removeItem","getItem","useAccount","accountTimer","promotionsTimer","_list","_listPromotions","_history","usePromotions","_count","useMessages","listPromotions","listUsersActivePromotions","countMessages","_getFreeSpins","getFreeSpins","useFreeSpins","status","isAccountLiteActive","morpheus","isAccountLiteActiveRef","singleAccountUpdate","forceUpdate","code","redirect","claims","loyalty","limits","messages","wallets","messagesCount","unreadMessagesCount","updateMessagesCount","updatePlayerLoyaltyPoints","updatePlayerClaims","updatePlayerLimits","updatePlayerWallets","quickBanking","setHasQuickBanking","updatePlayerClaimsStatus","updatePlayerWalletsStatus","singlePromotionsUpdate","types","statuses","useAccountLite","updateAccountLiteActive","useGetLoyaltyPointsConfig","getLoyaltyPointsConfig","updateLoyaltyPointsConfig","useRedeemLoyaltyPoints","enqueueSnackbar","useSnackbar","getRedeemPoints","method","redeemPoints","loyaltyPoints","loyaltyPointsLoaded","loyaltyPointsConfig","loyaltyPointsConfigLoaded","pointsBalance","loyaltyLoaded","config","configLoaded","_getMyAccountLite","_getLoyaltyPointsConfig","_redeemLoyaltyPoints","specificAmount","slimBanking","bankingErrorCode","setBankingErrorCode","bp","bankingPath","IS_QUICK_BANKING_ENABLED","IS_SLIM_BANKING_ENABLED","launchBanking","additionalUrl","additionalHeaders","urlSearch","URL","launchUrl","ps","URLSearchParams","k","v","merchant_unique_id","errors","isEligibleForQuickBanking","account","messagePath","useCountMessages","useGetMessage","getMessage","messageId","MAX_MESSAGES_PER_PAGE","useListMessages","listMessages","take","skip","updateMessagesList","items","useCategorySpecificMessages","listCategoryMessages","useDeleteMessage","deleteMessage","refreshListOnComplete","messagesLoaded","list","isLoaded","shallowEqual","_get","_category","_delete","compare","b","prop","filterByCustomField","promo","showPromoToUser","playerIdIsEven","playerIdIsOdd","customFields","useGetPromotion","getPromotionStatus","getPromotion","bonusId","useListPromotions","userState","findGameByCatalogueGameId","useGames","organizeBanners","banners","banner","isVisibleToLoggedOut","some","description","detailedDescription","param","imagePath","images","altText","alt","attempt","currentAttempt","updateImages","imageUrl","USE_NEW_CDN","OLD_SHARED_CDN_PATH","NEW_SHARED_CDN_PATH","SHARED_CDN_BRAND_ID","specialEventPromoMastergroup","p","internalName","toUpperCase","SPECIAL_EVENT_PROMO_MASTERGROUP","sort","specialEventPromoBonuses","SPECIAL_EVENT_PROMO_PREFIX","aDay","substring","bDay","filteredBanners","filteredAdditionalItems","filteredRewards","VISIBLE_NONCLAIMABLE_BONUS_TYPES","filteredPromotions","canBeClaimed","startsWith","newBanners","updateLobbyBannersList","updatePromotionsList","updateRewardsList","updateSpecialEventPromoList","listPromotionsStatus","useUsersPromotions","promoStatuses","bonusTypes","updatedItems","updateUsersActiveNotifications","listUsersPromotions","updateUsersPromotionsList","useOptInPromotion","optInPromotionStatus","optInPromotion","refreshAccountAndPromos","delaySubsequentCallsInMs","useBuyInPromotion","buyInPromotionStatus","buyInPromotion","buyInAmount","activePromotions","activePromotionsLoaded","unclaimedPromotions","unclaimedPromotionsLoaded","usersPromotions","usersPromotionsLoaded","dailyDealPromo","canClaimDailyDeal","freeSpinsGamePromo","canClaimFreeSpinsGame","rewardsPromotions","rewardsPromotionsLoaded","promotions","isActivePromotionsLoaded","isHistoryLoaded","rewardsPromos","isMemberOfFSGMastergroup","isMemberOfDailyDealMastergroup","showSpecialEventPromoLink","_optIn","_buyIn","useGetRecentGames","getRecentGames","games","game","catalogueGameId","updateRecentGames","useRecentGames","isRecentGamesLoaded","recentGames","gamesData","lobby","filteredGamed","setFilteredGames","g","isRecentGamesReady","checkForNestedRoute","obj","level","ROUTE_PARENT","initialState","init","reducer","type","Error","useAsync","asyncFunction","useReducer","isAlive","useCallback","params","urlRoute","overrideURL","session","API_URL","split","setRedPillHeaders","redPillHeaders","broker","authenticator","fetchData","alert","headers","axios","request","findCgidByBundledGames","bundledGames","cidIndex","searchForGame","MGS_FREE_SPINS_CONFIG","mid","moduleId","cid","clientId","gcid","freeSpinsGamesLoaded","freeSpinsGames","freeSpins","IS_FREE_SPINS_ENABLED","fsData","freeSpinsData","fs","gameIds","bg","offerInstances","updateFreeSpinsGames","isFreeSpinsLoaded","useHistory","launchCasinoGame","newWindow","CASINO_GAME_PAGE","launchBingoGame","BINGO_GAME_PAGE","filteredGame","isMounted","storedSmartLobby","lobbyConfig","fetchLobbyFailed","navigation","ignoreLobbyAge","LOBBY_REFRESH_MIN_AGE_IN_MINUTES","LOBBY_REFRESH_MIN_AGE_IN_SECONDS","lobbySaveTimestamp","ageDifference","extendedDayjs","unix","Math","floor","saveLobby","updateLobby","fetchLobbyFail","sendExceptionToSentry","initialValue","useIsMounted","setStoredValue","valueToStore","Function","stringify","deleteItem","scriptSettingsDefault","callbackOnSuccess","callbackOnError","defer","settings","scriptSettings","script","onerror","err","head","appendChild","updateLiveAgentStatus","liveChatAvailable","liveAgent","getZendeskTokenPath","ZENDESK_API_VERSION","getZendeskJWT","jwt","initZendeskV1","IS_GOOGLE_BOT","userDetails","zESettings","webWidget","authenticate","chat","jwtFn","callback","loadExternalScript","ZENDESK_SCRIPT_URL","zE","initZendeskV2","launchLiveChat","activate","useGenericPageContainerStyles","centerColumn","margin","neutral","border","borderRadius","boxShadow","up","marginTop","marginBottom","shape","fontSize","subheader","GenericPageContainer","isReady","customHeaderTagVariant","columnOverrideMedium","columnOverrideXlarge","gutterBottom","Subheader","Paragraph","UPDATE_BINGO_FEED","UPDATE_DF_BINGO_FEED","updateBingoFeed","newRooms","newSpecials","roomDictionary","updateDFBingoFeed","dfRooms","UPDATE_PLAYER_CLAIMS","UPDATE_PLAYER_CLAIMS_STATUS","UPDATE_AVAILABLE_CLAIMS","UPDATE_AVAILABLE_CLAIMS_STATUS","newPlayerClaims","updateAvailableClaims","newAvailableClaims","updateAvailableClaimsStatus","FREE_SPINS_REMAINING","UPDATE_PLAYER_LIMITS","UPDATE_PLAYER_LIMIT","UPDATE_SESSION_REMINDER","newPlayerLimits","updatePlayerLimit","interval","setting","updateSessionReminder","UPDATE_LOBBY","FETCH_LOBBY_FAIL","FETCH_LOBBY","UPDATE_RECENT_GAMES","newLobby","newRecentGames","UPDATE_PLAYER_LOYALTY_POINTS","UPDATE_LOYALTY_POINTS_CONFIG","UPDATE_MESSAGES_COUNT","UPDATE_MESSAGE","UPDATE_MESSAGES_LIST","messageCount","newMessagesList","UPDATE_MORPHEUS_SESSION","UPDATE_ACCOUNT_LITE_ACTIVE","UPDATE_USER_COMMUNICATION_PREFERENCES","UPDATE_HAS_DEPOSITED","UPDATE_HAS_QUICK_BANKING","isActive","updateUserCommunicatonPreferences","newComms","UPDATE_PROMOTIONS_LIST","UPDATE_USERS_PROMOTIONS_LIST","UPDATE_USERS_ACTIVE_NOTIFICATIONS","newPromotionsList","newUsersPromotionsList","newUsersActiveNotifications","UPDATE_RG_CONFIG","updateRGConfig","newConfig","UPDATE_THEME","TOGGLE_DRAWER","TOGGLE_PANEL","OPEN_MODAL","CLOSE_MODAL","CLOSE_ALL_MODALS","UPDATE_FREE_SPINS_SHUFFLE_STATUS","UPDATE_LOBBY_BANNERS_LIST","UPDATE_REWARDS_LIST","UPDATE_SPECIAL_EVENT_PROMO_LIST","SET_LOGIN_ERROR","CLEAR_LOGIN_ERROR","newTheme","toggleDrawer","drawer","isOpen","toggleNotificationsPanel","panel","openModal","clearExistingModals","updateFreeSpinsShuffleStatus","mastergroup","setLoginError","errorMessage","clearLoginError","UPDATE_PLAYER_WALLETS","UPDATE_PLAYER_WALLETS_STATUS","newPlayerWallets","initialBannersState","isUpdated","savedBanners","JUST_LOGGED_IN","claimsAvailableOnLogin","riskStatusOnModalTriggeredClaimId","riskStatusOnModalTriggeredClaimValue","returningPlayerLightboxClaimId","returningPlayerLightboxClaimValue","Array","isArray","claimObj","RISK_STATUS_ON_MODAL_TRIGGERED_CLAIM_NAME","RETURNING_PLAYER_LIGHTBOX_CLAIM_NAME","showRiskTriggersLightbox","RISK_CATEGORY_TRIGGERS","RISK_CATEGORY","RISK_RATING_TRIGGERS","RISK_RATING","showWelcomeNewPlayerLightbox","IS_LOGIN_LIGHTBOX_ENABLED","SHOW_WELCOME_LIGHTBOX","WELCOME_LIGHTBOX_PROMOCODE","showReturningPlayerLightbox","IS_RETURNING_PLAYER_LIGHTBOX_ENABLED","format","existingClaimId","promocode","addLoginModalsToModalQueue","drawers","leftDrawer","rightDrawer","freeSpinsGameDrawer","panels","notifications","slideDownGames","freeSpinsShuffle","playedAlready","prizeLoading","lobbyBanners","specialEventPromos","loginError","loginErrorMessage","updatedQueue","index","self","findIndex","promoIds","currentOpenPromoModal","promoId","assign","newSession","newMorpheusSession","marketing","walletsLoaded","wallet","initialWallets","depositLimitsConfirmed","sessionReminder","activeValue","claimsLoaded","availableClaims","playerClaims","savedLobby","savedRecentGames","updatedList","newMessage","rooms","specials","dictionary","combineReducers","bingo","bingoReducer","claimsReducer","limitsReducer","lobbyReducer","messagesReducer","morpheusReducer","promotionsReducer","responsibleGambling","responsibleGamblingReducer","uiReducer","walletsReducer","liveAgentReducer","loyaltyReducer","freeSpinsReducer","createStore","rootReducer","applyMiddleware","thunk","GA_EVENT_CATEGORIES","registration","banking","gameLaunch","spinTheWheel","enviroment","BRAND_CONFIG","BRAND_FEATURES","features","GEO_IP_COUNTRY_CODE","geoIp","isMobile","reactDev","isStaging","hot","HOT_RELOAD_PATH","isLoggedIn","extended","lf","sf","STORED_USERNAME","BINGO_BRANDS","MULTI_TIME_BINGO_ROOMS","bingoRooms","multiTimeRooms","riskCategory","riskRating","navigator","userAgent","knownBots","ua","bot","bootEnviroment","ftdPlayer","justLoggedIn","showWelcomeLightbox","FTD_PLAYER","IS_RESPONSIBLE_GAMING_APP_ENABLED","SERVE_WEBP_IMAGES","jsVersion","brandName","BRAND_SUPPORT_EMAIL","supportEmail","cdnUrl","CDN_BRAND_PATH","cdnBrandPath","DEBIT_CARD_DEPOSIT_MESSAGE","SHOW_DEBIT_CARD_DEPOSIT_MESSAGE","IS_APPLE_PAY_ENABLED","applePay","enabled","IMAGES_PATH","SHARED_IMAGES_PATH","imageCdn","useNewCdn","SHARED_CDN_PATH","sharedImagesId","BINGO_ROOMS_IMAGES","BINGO_ROOMS_SHARED_IMAGES","SPIN_THE_WHEEL_IMAGES_PATH","CASINO_ICON_PATH","CASINO_ICON_SIZE_DIRECTORIES","ALLOW_RETINA_CASINO_ICONS","IS_OCCUPATION_FIELD_ENABLED","occupation","IS_NATIONALITY_FIELD_ENABLED","rewards","REWARDS_SCHEME_NAME","schemeName","BINGO_ENABLED","ANIMATED_BINGO_CARD_ENABLED","ANIMATED_GAME_ICONS_ENABLED","ACTIVATED_GAME_ICONS_ENABLED","DISPLAY_NET_POSITION_AND_SESSION","SG_WEEK_ENABLED","sgWeekEnabled","SG_WEEK_DATES_STRING","SHOW_PJP_ON_BINGO_CARDS","PICK_YOUR_BONUS_ENABLED","SPIN_THE_WHEEL_ENABLED","IS_CAMPAIGN_MANAGER_PUSH_NOTIFICATIONS_ENABLED","mgs","DF_ROOMS_ROOM_SETTINGS","dfRoomSettings","IS_DF_BINGO_ENABLED","isDFRoomsEnabled","USE_DRAGONFISH_BINGO_FEED","MAX_GAMES_IN_RECENTLY_PLAYED","USER_PREFERRED_GAMES_TAB_ENABLED","UNIX_NOW","Date","now","START_SPECIAL_EVENT","END_SPECIAL_EVENT","SPECIAL_EVENT_PROMO_NAME","SPECIAL_EVENT_PROMO_CLASS","START_OUTAGE","END_OUTAGE","IS_OUTAGE","DISABLED_GAME_PROVIDERS","BINGO_MAINTENANCE","SERVICE_ANNOUNCEMENT_MESSAGE","BINGO_SERVICE_ANNOUNCEMENT_ENABLED","BINGO_SERVICE_ANNOUNCEMENT_MESSAGE","LOAD_MINI_GAMES_FROM_MORPHEUS","CUSTOM_SITE_SKIN_ENABLED","CUSTOM_SITE_SKIN_NAME","LANDING_PAGE_SETTINGS","landingPages","landingPagesEnabled","newPlayerHomepageEnabled","IS_WELCOME_BONUS_CHECKED_BY_DEFAULT","defaultLandingPage","maintenanceMode","brand","BRAND_EXTERNAL_SERVICES","externalServices","zendesk","externalCodeURL","helpCenter","helpCenterURL","TRUSTPILOT_ENABLED","trustPilot","TRUSTPILOT_SETTINGS","templateId","businessUnitId","tracking","snapchat","pixelId","microsoft","google","gtm","SEND_DATA_TO_S2S_FB_PIXEL","SEND_CONSENT_VALUE_IN_REGISTRATION_PAYLOAD","sendConsentInRegistration","BRAND_LICENSE_DETAILS","licenseDetails","UKGC_LICENSE_NUMBER","ukgcLicenseNumber","UKGC_LICENSE_URL","ukgcLicenseURL","REGULATED","regulated","BONUS_MONEY_RULES_STRAPLINE","bonusMoneyRulesStrapline","BONUS_MONEY_RULES_STRAPLINE_NEW_PLAYER","bonusMoneyRulesStraplineNewPlayer","bonusMoneyRulesStraplineLandingPage","onetrust","cookieBanner","checkforVerificationMessagesOnLogin","VERIFICATION_MESSAGE_MODAL_CATEGORY","SUPPORTS_WEBP","elem","getContext","toDataURL","canUseWebP","LOST_DETAILS_URL","BP_SMALL","BP_LARGE","BP_XLARGE","BP_XXLARGE","small","medium","large","xlarge","xxlarge","ReactDOM"],"sourceRoot":""}