{"version":3,"file":"static/js/service-game-runner.b0a9e760.chunk.js","mappings":"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","sources":["app-react/basic-components/loading-dots/boxes/loading-dot.box.ts","app-react/basic-components/loading-dots/boxes/loading-dots.box.ts","app-react/basic-components/loading-dots/loading-dots.component.tsx","app-react/components/game-window/game-css-constants.ts","app-react/components/game-window/header-bar/common/boxes/close-game-button/game-header-bar-close-button.box.ts","app-react/services/game-runner/running-game-browser-tab-controller.ts","app-react/services/game-runner/loading-indicators/game-loading-indicator-base.model.ts","app-react/components/game-window/loading-indicators/hybrid-embedded/boxes/root/hybrid-embedded-game-loading-indicator-root.box.ts","app-react/components/game-window/loading-indicators/hybrid-embedded/boxes/header/hybrid-embedded-game-loading-indicator-header.box.ts","app-react/components/game-window/loading-indicators/hybrid-embedded/boxes/content/hybrid-embedded-game-loading-indicator-content.box.ts","app-react/components/game-window/loading-indicators/hybrid-embedded/boxes/spinner/hybrid-embedded-game-loading-indicator-spinner.box.ts","app-react/components/game-window/loading-indicators/hybrid-embedded/boxes/progress/hybrid-embedded-game-loading-indicator-progress.box.ts","app-react/themes/defaults/icons/loading-circle-large.icon.tsx","app-react/components/game-window/loading-indicators/hybrid-embedded/hybrid-embedded-game-loading-indicator.component.tsx","app-react/services/game-runner/loading-indicators/hybrid-embedded-game-loading-indicator.model.tsx","app-react/components/game-window/loading-indicators/web-app/web-app-game-loading-indicator.component.tsx","app-react/services/game-runner/loading-indicators/web-app-game-loading-indicator.model.tsx","app-react/services/game-runner/last-game-played.model.ts","app-react/services/game-runner/game-runner.service.ts","app-react/services/storage/session-storage-keys.ts"],"sourcesContent":["import styled, {keyframes} from \"styled-components\";\r\n\r\nconst Load = keyframes`\r\n 0%,\r\n 80%,\r\n 100% {\r\n box-shadow: 0 1.5em 0 -1.3em;\r\n }\r\n 40% {\r\n box-shadow: 0 1.5em 0 0;\r\n }\r\n`;\r\n\r\nexport const LoadingDotBox = styled.div<{animationDelay: string}>`\r\n border-radius: 50%;\r\n width: 1.6rem;\r\n height: 1.5rem;\r\n margin-left: 25px;\r\n animation: ${Load} 1.7s infinite ease-in-out;\r\n animation-delay: ${props => props.animationDelay};\r\n`","import styled from \"styled-components\";\r\n\r\n\r\nexport const LoadingDotsBox = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n align-items: center;\r\n align-content: center;\r\n`","import React from \"react\";\r\nimport {OrbitComponent} from \"../../components/base-components/orbit-component/orbit-component\";\r\nimport {observer} from \"mobx-react\";\r\nimport {LoadingDotBox} from \"./boxes/loading-dot.box\";\r\nimport {LoadingDotsBox} from \"./boxes/loading-dots.box\";\r\n\r\nexport const LoadingDotsComponent = observer(class LoadingDotsComponent extends OrbitComponent {\r\n render() {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n});","\r\nexport const GAME_PC_BUTTON_WIDTH = '20px';\r\nexport const GAME_PC_BUTTON_HEIGHT = '20px';\r\n\r\n\r\nexport const GAME_MOBILE_BUTTON_WIDTH = '14px';\r\nexport const GAME_MOBILE_BUTTON_HEIGHT = '14px';","import styled from \"styled-components\";\r\nimport {XCloseButtonBox} from \"../../../../../../basic-ui-components/x-close-button/x-close-button.box\";\r\nimport {\r\n GAME_MOBILE_BUTTON_HEIGHT,\r\n GAME_MOBILE_BUTTON_WIDTH, GAME_PC_BUTTON_HEIGHT, GAME_PC_BUTTON_WIDTH\r\n} from \"../../../../game-css-constants\";\r\n\r\nexport const GameHeaderBarCloseButtonBox = styled(XCloseButtonBox)`\r\n width: ${GAME_PC_BUTTON_WIDTH};\r\n height: ${GAME_PC_BUTTON_HEIGHT};\r\n\r\n @media ${props => props.theme.mediaQuery.sAndBelow} {\r\n width: ${GAME_MOBILE_BUTTON_WIDTH};\r\n height: ${GAME_MOBILE_BUTTON_HEIGHT};\r\n }\r\n`\r\n\r\n","import {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\r\nimport {GameRunnerService} from \"./game-runner.service\";\r\nimport {reaction} from \"mobx\";\r\nimport {GameInfo} from \"../games/game-info\";\r\nimport {Check} from \"@sparkware/app-utils\";\r\nimport {IRunningGameBrowserTabController} from \"./running-game-browser-tab-controller.interface\";\r\nimport {NullableString} from \"../../../common/types/nullable-types\";\r\nimport {LocalStorageKeys} from \"../storage/local-storage-keys\";\r\n\r\nexport class RunningGameBrowserTabController implements IRunningGameBrowserTabController {\r\n constructor(private readonly gameRunner: GameRunnerService,\r\n private readonly services: IServiceFactoryExtended) {\r\n reaction(() => gameRunner.currentRunningGame,\r\n (runningGame) => {\r\n if(runningGame) {\r\n this._setActiveGame(runningGame.gameContext.gameInfo.gameType);\r\n this._activeGameInAnotherTabDetectionTimer = setInterval(this._detectActiveGameInAnotherTab, 1000);\r\n } else {\r\n clearTimeout(this._activeGameInAnotherTabDetectionTimer);\r\n this._onGameClosed();\r\n }\r\n },{fireImmediately:true});\r\n }\r\n\r\n private _activeGameInAnotherTabDetectionTimer: any = null;\r\n\r\n private _detectActiveGameInAnotherTab = () => {\r\n if(this.isGameRunningInAnotherTab) {\r\n this.gameRunner.currentRunningGame.closeGame({\r\n shouldSuggestNextGame: false\r\n });\r\n }\r\n }\r\n\r\n get isGameRunningInAnotherTab(): boolean {\r\n if(!this.activeGame) {\r\n return false;\r\n }\r\n\r\n return this._currentBrowserTabId !== this._activeGameTabId;\r\n }\r\n\r\n private get _currentBrowserTabId(): string {\r\n return this.services.sdk.getCurrentBrowserTabId();\r\n }\r\n\r\n private get _activeGameTabId(): NullableString {\r\n return this.services.localStorage.getItem(LocalStorageKeys.currentRunningGameTab);\r\n }\r\n\r\n private _setActiveGame(gameType: number): void {\r\n this.services.localStorage.setItem(LocalStorageKeys.currentRunningGameType, gameType);\r\n this.services.localStorage.setItem(LocalStorageKeys.currentRunningGameTab, this._currentBrowserTabId);\r\n }\r\n\r\n private _onGameClosed(): void {\r\n if(!this.isGameRunningInAnotherTab) {\r\n // On game close we clear local storage only if the closed game was in the current tab otherwise\r\n // we might also kill the game that was just opened in another tab\r\n this.services.localStorage.removeItem(LocalStorageKeys.currentRunningGameType);\r\n this.services.localStorage.removeItem(LocalStorageKeys.currentRunningGameTab);\r\n }\r\n }\r\n\r\n\r\n get activeGame(): GameInfo | null {\r\n const gameType = parseInt(this.services.localStorage.getItem(LocalStorageKeys.currentRunningGameType));\r\n if(Check.isNumber(gameType)) {\r\n return this.services.games.gamesMap[gameType];\r\n }\r\n\r\n return null;\r\n }\r\n}","import React from \"react\";\r\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\r\nimport {IGameLoadingIndicatorModel} from \"./game-loading-indicator-model.interface\";\r\n\r\nexport abstract class GameLoadingIndicatorBaseModel implements IGameLoadingIndicatorModel {\r\n constructor(protected readonly services: IServiceFactoryExtended) {\r\n }\r\n\r\n abstract render(): React.ReactElement;\r\n\r\n get isHidden(): boolean {\r\n return this.services.dialog.hasOpenDialogs;\r\n }\r\n\r\n dispose(): void {\r\n\r\n }\r\n}","import styled from \"styled-components\";\r\n\r\nexport const HybridEmbeddedGameLoadingIndicatorRootBox = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n align-content: center;\r\n justify-content: center;\r\n width: 100%;\r\n height: 100%;\r\n`","import styled from \"styled-components\";\r\nimport {PC_HORIZONTAL_SPACE_BETWEEN_ITEMS} from \"../../../../../../basic-components/space-between-items-consts\";\r\n\r\n\r\nexport const HybridEmbeddedGameLoadingIndicatorHeaderBox = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: flex-end;\r\n justify-content: flex-end;\r\n align-content: flex-end;\r\n width: 100%;\r\n padding: 4px ${PC_HORIZONTAL_SPACE_BETWEEN_ITEMS()} 4px 4px;\r\n \r\n`","import styled from \"styled-components\";\r\n\r\nexport const HybridEmbeddedGameLoadingIndicatorContentBox = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n align-content: center;\r\n height: 100%;\r\n width: 100%;\r\n font-size: 1.3rem;\r\n`","import styled from \"styled-components\";\r\n\r\nexport const HybridEmbeddedGameLoadingIndicatorSpinnerBox = styled.div`\r\n width: 100px;\r\n height: 100px;\r\n border-radius: 50%;\r\n margin-top: 10px;\r\n`","import styled from \"styled-components\";\r\n\r\nexport const HybridEmbeddedGameLoadingIndicatorProgressCircle1Box = styled.div`\r\n height:100px;\r\n width:100px;\r\n border-radius: 50%;\r\n background: ${props => props.theme.colors.boxBorderContrast};\r\n margin-top: 10px;\r\n`\r\n\r\nexport const HybridEmbeddedGameLoadingIndicatorProgressCircle2Box = styled.div<{angle: number}>`\r\n height: 100%;\r\n width: 100%;\r\n border-radius: 50%;\r\n background: conic-gradient(${props => props.theme.colors.brandPrimary} ${props => props.angle}deg, transparent ${props => props.angle}deg 100%);\r\n`\r\n\r\nexport const HybridEmbeddedGameLoadingIndicatorProgressCircle3Box = styled.div`\r\n position:relative;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n align-content: center;\r\n height:92%;\r\n width:92%;\r\n top:4%;\r\n left:4%;\r\n border-radius: 50%;\r\n background-color: ${props => props.theme.colors.backgroundDark};\r\n color: ${props => props.theme.colors.brandPrimary};\r\n`\r\n","import * as React from \"react\";\r\nimport {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\r\n\r\nexport class LoadingCircleLargeIcon extends React.Component {\r\n render() {\r\n return \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","import React from \"react\";\r\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\r\nimport {observer} from \"mobx-react\";\r\nimport {\r\n IHybridEmbeddedGameLoadingIndicatorViewModel\r\n} from \"../../../../services/game-runner/loading-indicators/hybrid-embedded-game-loading-indicator-view-model.interface\";\r\nimport {HybridEmbeddedGameLoadingIndicatorRootBox} from \"./boxes/root/hybrid-embedded-game-loading-indicator-root.box\";\r\nimport {\r\n HybridEmbeddedGameLoadingIndicatorHeaderBox\r\n} from \"./boxes/header/hybrid-embedded-game-loading-indicator-header.box\";\r\nimport {\r\n HybridEmbeddedGameLoadingIndicatorContentBox\r\n} from \"./boxes/content/hybrid-embedded-game-loading-indicator-content.box\";\r\nimport {\r\n HybridEmbeddedGameLoadingIndicatorSpinnerBox\r\n} from \"./boxes/spinner/hybrid-embedded-game-loading-indicator-spinner.box\";\r\nimport {\r\n HybridEmbeddedGameLoadingIndicatorProgressCircle1Box,\r\n HybridEmbeddedGameLoadingIndicatorProgressCircle2Box, HybridEmbeddedGameLoadingIndicatorProgressCircle3Box\r\n} from \"./boxes/progress/hybrid-embedded-game-loading-indicator-progress.box\";\r\nimport {LoadingCircleLargeIcon} from \"../../../../themes/defaults/icons/loading-circle-large.icon\";\r\nimport {\r\n GameHeaderBarCloseButtonBox\r\n} from \"../../header-bar/common/boxes/close-game-button/game-header-bar-close-button.box\";\r\n\r\ninterface HybridEmbeddedGameLoadingIndicatorComponentProps {\r\n viewModel: IHybridEmbeddedGameLoadingIndicatorViewModel;\r\n}\r\n\r\nexport const HybridEmbeddedGameLoadingIndicatorComponent = observer(\r\n class HybridEmbeddedGameLoadingIndicatorComponent extends OrbitComponent {\r\n\r\n private _onCloseButtonClick = () => {\r\n this.props.viewModel.closeLoadingIndicator();\r\n }\r\n\r\n private _renderPackageDownloadStatusLabel() {\r\n if(this.props.viewModel.totalPackages > 1) {\r\n return (\r\n
\r\n {this.services.translation.translate('HYBRID_EMBEDDED_GAME_LOADING_PACKAGES_PROGRESS', {packagesStatus: `${this.props.viewModel.currentPackage}/${this.props.viewModel.totalPackages}`})}\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderConnectingSpinner() {\r\n return (\r\n <>\r\n
\r\n {this.services.translation.translate('HYBRID_EMBEDDED_GAME_LOADING_SPINNER_LABEL')}\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private _renderProgressIndicator() {\r\n return (\r\n <>\r\n {this._renderPackageDownloadStatusLabel()}\r\n \r\n \r\n \r\n {`${this.props.viewModel.downloadPercentage}%`}\r\n \r\n \r\n \r\n \r\n\r\n )\r\n }\r\n\r\n private _renderContent() {\r\n if(this.props.viewModel.downloadPercentage === 0 && this.props.viewModel.currentPackage === 1) {\r\n return this._renderConnectingSpinner();\r\n } else {\r\n return this._renderProgressIndicator();\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {this._renderContent()}\r\n \r\n \r\n )\r\n }\r\n }\r\n);","import React from \"react\";\r\nimport {GameLoadingIndicatorBaseModel} from \"./game-loading-indicator-base.model\";\r\nimport {\r\n HybridEmbeddedGameLoadingIndicatorComponent\r\n} from \"../../../components/game-window/loading-indicators/hybrid-embedded/hybrid-embedded-game-loading-indicator.component\";\r\nimport {\r\n IHybridEmbeddedGameLoadingIndicatorViewModel\r\n} from \"./hybrid-embedded-game-loading-indicator-view-model.interface\";\r\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\r\nimport {CGPEventSubscription} from \"../../sdk/cgp-sdk.interface\";\r\nimport { observable, runInAction, makeObservable } from \"mobx\";\r\nimport {GameRunnerService} from \"../game-runner.service\";\r\nimport {ON_DEMAND} from \"../../../../sdk/src/services/hybrid/native/native_const\";\r\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\r\n\r\n\r\nconst TOASTER_TIMEOUT = TimeSpan.fromSeconds(15);\r\n\r\nexport class HybridEmbeddedGameLoadingIndicatorModel extends GameLoadingIndicatorBaseModel implements IHybridEmbeddedGameLoadingIndicatorViewModel {\r\n constructor(services: IServiceFactoryExtended, private readonly gameRunner: GameRunnerService) {\r\n super(services);\r\n\r\n makeObservable(this, {\r\n downloadPercentage: observable.ref,\r\n currentPackage: observable.ref,\r\n totalPackages: observable.ref\r\n });\r\n\r\n this._sdkEventsSubscriptions.push(services.sdk.events.onHybridEmbeddedGameLoadingIndicatorUpdateV1(percentage => {\r\n this._updateProgress({\r\n percentage: percentage,\r\n numberOfPackages: '1/1'\r\n });\r\n }));\r\n\r\n this._sdkEventsSubscriptions.push(services.sdk.events.onHybridEmbeddedGameLoadingIndicatorUpdateV2(data => {\r\n this._updateProgress({\r\n percentage: data.statusBar,\r\n numberOfPackages: data.numberOfPackages\r\n });\r\n }));\r\n\r\n\r\n this._slowConnectionToasterTimer = setTimeout(this._showToaster, TOASTER_TIMEOUT.totalMilliseconds);\r\n\r\n this.services.analytics.sendAnalytics(ON_DEMAND.ON_DEMAND_CATEGORY, 'show_hybrid_loader');\r\n }\r\n\r\n\r\n private _sdkEventsSubscriptions: CGPEventSubscription[] = [];\r\n private _slowConnectionToasterTimer: any = null;\r\n\r\n private _showToaster = () => {\r\n this.services.toaster.showStandardToast({\r\n id: 'hybrid_embedded_game_loading_indicator_toaster',\r\n toastOptions: {\r\n timeout: TimeSpan.fromSeconds(10)\r\n },\r\n contentProps: {\r\n title: this.services.translation.translate('HYBRID_EMBEDDED_GAME_LOADING_SLOW_CONNECTION_TOASTER_TITLE'),\r\n message: this.services.translation.translate('HYBRID_EMBEDDED_GAME_LOADING_SLOW_CONNECTION_TOASTER_SUBTITLE'),\r\n },\r\n onToastShown: () => {\r\n this.services.analytics.sendAnalytics(ON_DEMAND.ON_DEMAND_CATEGORY, 'slow_internet_toaster', TOASTER_TIMEOUT.totalSeconds.toString(), this.downloadPercentage);\r\n }\r\n })\r\n\r\n }\r\n\r\n private _clearToasterTimer(): void {\r\n if(this._slowConnectionToasterTimer) {\r\n clearTimeout(this._slowConnectionToasterTimer);\r\n this._slowConnectionToasterTimer = null;\r\n }\r\n }\r\n\r\n private _updateProgress = (data: {percentage: number | string; numberOfPackages: string}) => {\r\n runInAction(() => {\r\n if(Check.isNumber(data.percentage)) {\r\n this.downloadPercentage = data.percentage\r\n } else {\r\n const percentage = parseInt(data.percentage);\r\n if(!Check.isNumber(percentage)) {\r\n this.services.logger.error('Hybrid embedded game download percentage is not a number!');\r\n this.downloadPercentage = 50; // just put something there\r\n } else {\r\n this.downloadPercentage = percentage;\r\n }\r\n }\r\n\r\n const parts = data.numberOfPackages.split('/');\r\n this.currentPackage = parseInt(parts[0]?.trim());\r\n this.totalPackages = parseInt(parts[1]?.trim());\r\n\r\n if(!Check.isNumber(this.currentPackage)) {\r\n this.currentPackage = 1;\r\n }\r\n\r\n if(!Check.isNumber(this.totalPackages)) {\r\n this.totalPackages = this.currentPackage;\r\n }\r\n\r\n //if download percentage is more than 10% then we don't show the slow connection toaster anymore\r\n if(this.downloadPercentage >= 10) {\r\n this._clearToasterTimer();\r\n }\r\n });\r\n }\r\n\r\n downloadPercentage: number = 0;\r\n\r\n currentPackage: number = 1;\r\n\r\n totalPackages: number = 1;\r\n\r\n\r\n dispose() {\r\n super.dispose();\r\n this._sdkEventsSubscriptions.forEach(s => s.off());\r\n this._sdkEventsSubscriptions = [];\r\n this._clearToasterTimer();\r\n }\r\n\r\n render(): React.ReactElement {\r\n return (\r\n \r\n );\r\n }\r\n\r\n closeLoadingIndicator(): void {\r\n\r\n this.gameRunner.closeGameLoadingIndicator();\r\n this.services.sdk.eventsTrigger.hybridGameLoadingIndicatorClosed();\r\n\r\n }\r\n}","import React from \"react\";\r\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\r\nimport {LoadingDotsComponent} from \"../../../../basic-components/loading-dots/loading-dots.component\";\r\nimport {observer} from \"mobx-react\";\r\n\r\nexport const WebAppGameLoadingIndicatorComponent = observer(class WebAppGameLoadingIndicatorComponent extends OrbitComponent {\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n});","import React from \"react\";\r\nimport {GameLoadingIndicatorBaseModel} from \"./game-loading-indicator-base.model\";\r\nimport {\r\n WebAppGameLoadingIndicatorComponent\r\n} from \"../../../components/game-window/loading-indicators/web-app/web-app-game-loading-indicator.component\";\r\n\r\nexport class WebAppGameLoadingIndicatorModel extends GameLoadingIndicatorBaseModel {\r\n render(): React.ReactElement {\r\n return (\r\n \r\n );\r\n }\r\n}","import {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\r\nimport {ILastGamePlayedViewModel} from \"./last-game-played.view-model.interface\";\r\nimport {action, makeObservable, observable} from \"mobx\";\r\nimport {GameInfo} from \"../games/game-info\";\r\nimport {OnGameCloseParams, OnGameOpenParams} from \"../sdk/sdk-events\";\r\n\r\nexport class LastGamePlayedModel implements ILastGamePlayedViewModel{\r\n constructor(private readonly services: IServiceFactoryExtended) {\r\n makeObservable(this);\r\n }\r\n\r\n @observable.ref\r\n lastPlayedRealGame: GameInfo = null;\r\n\r\n @observable.ref\r\n correlatedGamesForLastPlayedRealGame: GameInfo[] = [];\r\n\r\n private _listenForLastRealGame = false;\r\n\r\n @action.bound\r\n _setLastPlayedRealGame(lastGameInfo: GameInfo) {\r\n this.lastPlayedRealGame = lastGameInfo;\r\n }\r\n\r\n @action.bound\r\n _setCorrelatedGamesForLastPlayedRealGame(gameInfos: GameInfo[]) {\r\n this.correlatedGamesForLastPlayedRealGame = gameInfos;\r\n }\r\n\r\n listenForLastPlayedRealGame() {\r\n if (this._listenForLastRealGame) {\r\n return;\r\n }\r\n\r\n this.services.sdk.events.onGameClose((closeOptions: OnGameCloseParams) => {\r\n // showNextGameSuggestion should be filled as true when player itself closes the game (press on X button)\r\n if (closeOptions.isReal && closeOptions.isGamePlayed && closeOptions.showNextGameSuggestion) {\r\n this.setLastPlayedRealGame(closeOptions.gameType);\r\n }\r\n });\r\n\r\n this._listenForLastRealGame = true;\r\n }\r\n\r\n async setLastPlayedRealGame(gameType: number): Promise {\r\n const lastGameInfo = await this.services.games.getGameInfo(gameType);\r\n const correlatedGames = await this.services.games.getCorrelatedGames(gameType, 50);\r\n let gameInfosArray = (await this.services.games.getGamesInfoArray(correlatedGames)) || [];\r\n\r\n this._setLastPlayedRealGame(lastGameInfo);\r\n this._setCorrelatedGamesForLastPlayedRealGame(gameInfosArray);\r\n }\r\n\r\n private _listenForLastOpenDemoGame = false;\r\n\r\n @observable.ref\r\n lastOpenDemoGame: GameInfo = null;\r\n\r\n listenForLastOpenDemoGame() {\r\n if (this._listenForLastOpenDemoGame) {\r\n return;\r\n }\r\n\r\n this.services.sdk.events.onGameOpen((options: OnGameOpenParams) => {\r\n if (!options.isReal) {\r\n this.setLastOpenDemoGame(options.gameType);\r\n }\r\n });\r\n\r\n this._listenForLastOpenDemoGame = true;\r\n }\r\n\r\n async setLastOpenDemoGame(gameType: number): Promise {\r\n const gameInfo = await this.services.games.getGameInfo(gameType);\r\n this._setLastOpenDemoGame(gameInfo);\r\n }\r\n\r\n @action.bound\r\n _setLastOpenDemoGame(lastGameInfo: GameInfo) {\r\n this.lastOpenDemoGame = lastGameInfo;\r\n }\r\n}","import {\r\n IGameRunnerService,\r\n IInitialOpenGameParams,\r\n IPersistedInitialOpenGameParams\r\n} from \"./game-runner.service.interface\";\r\nimport {ServiceBase} from \"../ServiceBase\";\r\nimport {\r\n ICloseGameParams,\r\n IRunningGameController,\r\n IRunningGameControllerViewModel\r\n} from \"./interfaces/game-controller/running-game-controller.interface\";\r\nimport { observable, runInAction, makeObservable } from \"mobx\";\r\nimport {IRegulatedCompanyModel} from \"../companies/regulated-company-model.interface\";\r\nimport {GameModeEnum} from \"./interfaces/game-context/game-context-view-model.interface\";\r\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\r\nimport {SessionStorageKeys} from \"../storage/session-storage-keys\";\r\nimport {GNWP_SOURCES} from \"../gnwp/gnwp-consts\";\r\nimport {IGameRunnerProxy} from \"../../../common/interfaces/game-runner-proxy.interface\";\r\nimport {Check} from \"@sparkware/app-utils\";\r\nimport {DialogButtonClickHandleResultEnum} from \"../dialog/dialog.service.interface\";\r\nimport {UndefinedString} from \"../../../common/types/nullable-types\";\r\nimport {RunningGameBrowserTabController} from \"./running-game-browser-tab-controller\";\r\nimport {\r\n HybridEmbeddedGameLoadingIndicatorModel\r\n} from \"./loading-indicators/hybrid-embedded-game-loading-indicator.model\";\r\nimport {WebAppGameLoadingIndicatorModel} from \"./loading-indicators/web-app-game-loading-indicator.model\";\r\nimport {IGameLoadingIndicatorModel} from \"./loading-indicators/game-loading-indicator-model.interface\";\r\nimport {GameStepsExecutionResultEnum} from \"./interfaces/game-step/game-run-step.interface\";\r\nimport {OpenGameParameters} from \"../games/game-info\";\r\nimport {LastGamePlayedModel} from \"./last-game-played.model\";\r\n\r\nexport class GameRunnerService extends ServiceBase implements IGameRunnerService, IGameRunnerProxy {\r\n constructor(services: IServiceFactoryExtended) {\r\n super(services);\r\n\r\n makeObservable(this);\r\n\r\n this.gameTabController = new RunningGameBrowserTabController(this, this.services);\r\n\r\n this._reOpenPendingGame();\r\n\r\n this._subscribeToSdkEvents();\r\n\r\n this.reaction(() => this.services.user.isAuthorized,\r\n async () => {\r\n await this.currentRunningGame?.closeGame({\r\n shouldSuggestNextGame: false\r\n });\r\n });\r\n\r\n this.lastPlayedGame = new LastGamePlayedModel(this.services);\r\n }\r\n\r\n readonly gameTabController: RunningGameBrowserTabController;\r\n\r\n readonly lastPlayedGame: LastGamePlayedModel;\r\n\r\n get gameFrameZIndex(): number {\r\n return this.services.sdk.overlayZIndex.GAME_FRAME;\r\n }\r\n\r\n get shouldShowRealityCheckMessage(): boolean {\r\n if(this.currentRunningGame) {\r\n return (this.currentRunningGame.gameContext.gameInternalRealityCheckInterval.getRealityCheckExpectedByTheGame().expectedValueByTheGame === 0\r\n || this.currentRunningGame.company.shouldShowRealityCheckMessageWhileGameIsOpen());\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private async _reOpenPendingGame(): Promise {\r\n const persistedGameParams = this.services.sessionStorage.getJson(SessionStorageKeys.currentGameParams);\r\n if (!persistedGameParams) {\r\n return;\r\n }\r\n\r\n try {\r\n const {gameType, ...initialGameParams} = persistedGameParams;\r\n\r\n const gameInfo = await this.services.games.getGameInfo(gameType);\r\n\r\n if (!gameInfo) {\r\n return;\r\n }\r\n\r\n await this.openGame({\r\n ...initialGameParams,\r\n gameInfo: gameInfo\r\n });\r\n } finally {\r\n this.services.sessionStorage.removeItem(SessionStorageKeys.currentGameParams);\r\n }\r\n\r\n }\r\n\r\n private _subscribeToSdkEvents(): void {\r\n this.services.sdk.events.onDepositWidgetClosed(() => {\r\n this._refreshCurrentGameBalance();\r\n });\r\n\r\n this.services.sdk.events.onExternalLinkClosed((linkSource) => {\r\n if (GNWP_SOURCES.CASHIER === linkSource) {\r\n this._refreshCurrentGameBalance();\r\n }\r\n });\r\n }\r\n\r\n private _refreshCurrentGameBalance(): void {\r\n if (this.currentRunningGame && this.currentRunningGame.gameCommunicationChannel.supportsBalanceRefresh) {\r\n this.currentRunningGame.gameCommunicationChannel.refreshBalance();\r\n }\r\n }\r\n\r\n\r\n async openGame(initialRunGameParams: IInitialOpenGameParams): Promise {\r\n\r\n\r\n try {\r\n switch (initialRunGameParams.gameMode) {\r\n case GameModeEnum.Real:\r\n return await this._openRealGame(initialRunGameParams);\r\n case GameModeEnum.Demo:\r\n return await this._openDemoGame(initialRunGameParams);\r\n case GameModeEnum.History:\r\n return await this._openHistoryGame(initialRunGameParams);\r\n default:\r\n throw new Error(`Invalid gameMode ${initialRunGameParams.gameInfo}`);\r\n }\r\n } catch (err) {\r\n this.services.logger.error(`Failed to open game ${initialRunGameParams.gameInfo.gameType} in mode ${initialRunGameParams.gameMode}`, err);\r\n this._logOpenGameError(err, initialRunGameParams);\r\n this._showGameOpenError(err);\r\n }\r\n }\r\n\r\n async closeCurrentGame(params: ICloseGameParams): Promise {\r\n if(this.currentRunningGame) {\r\n await this.currentRunningGame.closeGame(params);\r\n }\r\n }\r\n\r\n private _showGameOpenError(err: any): void {\r\n let messageText = null;\r\n if (err?.error_code) {\r\n messageText = this.services.regulation.getErrorMessage(err.error_code);\r\n }\r\n\r\n if (!messageText) {\r\n messageText = this.services.regulation.getGeneralErrorMessage();\r\n }\r\n\r\n this.services.dialog.showSimpleTextModal({\r\n text: messageText,\r\n showEmptyTitle: true,\r\n buttons: [\r\n {\r\n text: this.services.translation.translate('OK'),\r\n buttonPreset: 'primary',\r\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\r\n }\r\n ]\r\n });\r\n\r\n }\r\n\r\n private _logOpenGameError(err: any, initialRunGameParams: IInitialOpenGameParams): void {\r\n try {\r\n let errMsgToLog: string;\r\n if (Check.isObject(err)) {\r\n errMsgToLog = JSON.stringify(err);\r\n } else {\r\n errMsgToLog = err?.toString();\r\n }\r\n this.services.analytics.sendAnalytics(\"game_load_error\", errMsgToLog, initialRunGameParams.gameInfo.gameType.toString());\r\n } catch (logError) {\r\n this.services.logger.error('Failed to log game error', logError);\r\n }\r\n\r\n }\r\n\r\n private async _openRealGame(initialRunGameParams: IInitialOpenGameParams): Promise {\r\n return await this._runGame(initialRunGameParams, company => company.openRealGame(initialRunGameParams));\r\n }\r\n\r\n private async _openDemoGame(initialRunGameParams: IInitialOpenGameParams): Promise {\r\n return await this._runGame(initialRunGameParams, company => company.openDemoGame(initialRunGameParams));\r\n }\r\n\r\n private async _openHistoryGame(initialRunGameParams: IInitialOpenGameParams): Promise {\r\n if (!initialRunGameParams.historyGameParams) {\r\n throw new Error('Missing history game params');\r\n }\r\n return await this._runGame(initialRunGameParams, company => company.openHistoryGame(initialRunGameParams));\r\n }\r\n\r\n @observable.ref\r\n gameLoadingIndicator: IGameLoadingIndicatorModel | null = null;\r\n\r\n private _setGameLoadingIndicator(loadingIndicator: IGameLoadingIndicatorModel | null): void {\r\n runInAction(() => {\r\n this.gameLoadingIndicator?.dispose();\r\n this.gameLoadingIndicator = loadingIndicator;\r\n })\r\n }\r\n\r\n private _createGameLoadingIndicator(): IGameLoadingIndicatorModel {\r\n if (this.services.device.hybrid.isEmbedded) {\r\n return new HybridEmbeddedGameLoadingIndicatorModel(this.services, this);\r\n } else {\r\n return new WebAppGameLoadingIndicatorModel(this.services);\r\n }\r\n }\r\n\r\n private async _closeCurrentRunningGame(): Promise {\r\n if(this.currentRunningGame) {\r\n return await this.currentRunningGame.closeGame({\r\n shouldSuggestNextGame: false\r\n });\r\n }\r\n\r\n return GameStepsExecutionResultEnum.Continue;\r\n }\r\n\r\n private _runGameStarted = false;\r\n private async _runGame(initialRunGameParams: IInitialOpenGameParams, openGame: (company: IRegulatedCompanyModel) => Promise): Promise {\r\n if (this._runGameStarted) { //to prevent the case when the user double-click on the game\r\n return;\r\n }\r\n\r\n try {\r\n this._runGameStarted = true;\r\n const closeCurrentGameResult = await this._closeCurrentRunningGame()\r\n\r\n if (closeCurrentGameResult !== GameStepsExecutionResultEnum.Continue) {\r\n return;\r\n }\r\n\r\n this._setGameLoadingIndicator(this._createGameLoadingIndicator());\r\n\r\n\r\n const company = await (await this.services.companies).getRegulatedCompany(initialRunGameParams.gameInfo.companyName);\r\n const gameController = await openGame(company);\r\n\r\n if (!gameController) {\r\n return null;\r\n }\r\n this._setCurrentRunningGame(gameController);\r\n return gameController;\r\n } finally {\r\n this._runGameStarted = false;\r\n this._setGameLoadingIndicator(null);\r\n }\r\n }\r\n\r\n @observable.ref\r\n currentRunningGame: IRunningGameController | null = null;\r\n\r\n private _setCurrentRunningGame(gameController: IRunningGameController): void {\r\n gameController.createWaitForClosePromise();\r\n\r\n runInAction(() => {\r\n this.currentRunningGame = gameController;\r\n });\r\n\r\n gameController.triggerLegacyGameOpenEvent();\r\n this.services.overlay.disableScrolling();\r\n gameController.waitForGameToClose().then(() => {\r\n runInAction(() => {\r\n this.currentRunningGame = null\r\n });\r\n gameController.triggerLegacyGameCloseEvent();\r\n this.services.overlay.enableScrolling();\r\n });\r\n }\r\n\r\n closeGameLoadingIndicator(): void {\r\n this._setGameLoadingIndicator(null);\r\n }\r\n\r\n\r\n /**\r\n * Legacy adapter implementations\r\n */\r\n\r\n /**\r\n * This should not be used in Orbit code it is only for old SDK use\r\n * @deprecated\r\n */\r\n async closeRunningGame(): Promise {\r\n if (this.currentRunningGame) {\r\n await this.currentRunningGame.closeGame({\r\n shouldSuggestNextGame: false\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * This should not be used in Orbit code it is only for old SDK use\r\n * @deprecated\r\n */\r\n get isGameRunningLegacy(): Promise {\r\n return Promise.resolve(Boolean(this.currentRunningGame) && this.currentRunningGame.gameContext.gameMode !== GameModeEnum.History);\r\n }\r\n\r\n /**\r\n * This should not be used in Orbit code it is only for old SDK use\r\n * @deprecated\r\n */\r\n get isGameRunningInFreePlayModeLegacy(): Promise {\r\n return Promise.resolve(Boolean(this.currentRunningGame?.gameContext.freePlayContext.isFreePlay));\r\n }\r\n\r\n /**\r\n * This should not be used in Orbit code it is only for old SDK use\r\n * @deprecated\r\n */\r\n get currentRunningGameCompanyNameLegacy(): Promise {\r\n return Promise.resolve(this.currentRunningGame?.gameContext.company.companyName);\r\n }\r\n\r\n /**\r\n * This should not be used in Orbit code it is only for old SDK use\r\n * @deprecated\r\n */\r\n async stopCurrentGameAutoplayLegacy(): Promise {\r\n await this.currentRunningGame?.gameCommunicationChannel.stopAutoplay();\r\n }\r\n /**\r\n * This should not be used in Orbit code it is only for old SDK use\r\n * @deprecated\r\n */\r\n async continuePlayCurrentGameLegacy(): Promise {\r\n await this.currentRunningGame?.gameCommunicationChannel.resumeGamePlay();\r\n }\r\n\r\n /**\r\n * This should not be used in Orbit code it is only for old SDK use\r\n * @deprecated\r\n */\r\n async shouldShowRealityCheckMessageWhileGameIsOpenLegacy(): Promise {\r\n if(this.currentRunningGame) {\r\n return (this.currentRunningGame.gameContext.gameInternalRealityCheckInterval.getRealityCheckExpectedByTheGame().expectedValueByTheGame === 0\r\n || this.currentRunningGame.company.shouldShowRealityCheckMessageWhileGameIsOpen());\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * This should not be used in Orbit code it is only for old SDK use\r\n * @deprecated\r\n */\r\n async shouldShowTimeLimitMessageWhileGameIsOpenLegacy(): Promise {\r\n return Boolean(this.currentRunningGame?.company.shouldShowTimeLimitMessageWhileGameIsOpen());\r\n }\r\n\r\n /**\r\n * This should not be used in Orbit code it is only for old SDK use\r\n * @deprecated\r\n */\r\n get isOpenGameInProgress(): Promise\r\n {\r\n return Promise.resolve(Boolean(this.gameLoadingIndicator));\r\n }\r\n\r\n /**\r\n * This should not be used in Orbit code it is only for old SDK use\r\n * @deprecated\r\n */\r\n async openRealGameFromSdkRequest(gameType: number, options?: OpenGameParameters): Promise {\r\n const gameInfo = await this.services.games.getGameInfo(gameType);\r\n if(!gameInfo) {\r\n throw new Error(`There is no game in layout with gameType ${gameType}`);\r\n }\r\n\r\n await gameInfo.open({\r\n isRealMode: true,\r\n ...options\r\n });\r\n }\r\n\r\n /**\r\n * This should not be used in Orbit code it is only for old SDK use\r\n * @deprecated\r\n */\r\n async openDemoGameFromSdkRequest(gameType: number, options?: OpenGameParameters): Promise {\r\n const gameInfo = await this.services.games.getGameInfo(gameType);\r\n if(!gameInfo) {\r\n throw new Error(`There is no game in layout with gameType ${gameType}`);\r\n }\r\n\r\n await gameInfo.open({\r\n isRealMode: false,\r\n ...options\r\n });\r\n }\r\n}\r\n","export enum SessionStorageKeys {\r\n currentGameParams = 'OrbitCurrentGameParams',\r\n retryGeoOnLoad = \"OrbitRetryGeoOnLoad\"\r\n}"],"names":["Load","keyframes","LoadingDotBox","styled","props","animationDelay","LoadingDotsBox","LoadingDotsComponent","observer","OrbitComponent","GAME_PC_BUTTON_WIDTH","GAME_PC_BUTTON_HEIGHT","GAME_MOBILE_BUTTON_WIDTH","GAME_MOBILE_BUTTON_HEIGHT","GameHeaderBarCloseButtonBox","XCloseButtonBox","theme","mediaQuery","sAndBelow","RunningGameBrowserTabController","gameRunner","services","_activeGameInAnotherTabDetectionTimer","_detectActiveGameInAnotherTab","isGameRunningInAnotherTab","currentRunningGame","closeGame","shouldSuggestNextGame","reaction","runningGame","_setActiveGame","gameContext","gameInfo","gameType","setInterval","clearTimeout","_onGameClosed","fireImmediately","this","activeGame","_currentBrowserTabId","_activeGameTabId","sdk","getCurrentBrowserTabId","localStorage","getItem","LocalStorageKeys","setItem","removeItem","parseInt","Check","games","gamesMap","GameLoadingIndicatorBaseModel","dialog","hasOpenDialogs","HybridEmbeddedGameLoadingIndicatorRootBox","HybridEmbeddedGameLoadingIndicatorHeaderBox","PC_HORIZONTAL_SPACE_BETWEEN_ITEMS","HybridEmbeddedGameLoadingIndicatorContentBox","HybridEmbeddedGameLoadingIndicatorSpinnerBox","HybridEmbeddedGameLoadingIndicatorProgressCircle1Box","colors","boxBorderContrast","HybridEmbeddedGameLoadingIndicatorProgressCircle2Box","brandPrimary","angle","HybridEmbeddedGameLoadingIndicatorProgressCircle3Box","backgroundDark","LoadingCircleLargeIcon","viewBox","d","id","gradientUnits","x1","y1","x2","y2","gradientTransform","offset","stopColor","stopOpacity","className","fill","accumulate","additive","attributeName","attributeType","calcMode","dur","from","repeatCount","restart","to","type","React","HybridEmbeddedGameLoadingIndicatorComponent","_onCloseButtonClick","viewModel","closeLoadingIndicator","totalPackages","translation","translate","packagesStatus","currentPackage","size","_renderPackageDownloadStatusLabel","downloadPercentage","_renderConnectingSpinner","_renderProgressIndicator","onClick","_renderContent","TOASTER_TIMEOUT","TimeSpan","HybridEmbeddedGameLoadingIndicatorModel","_sdkEventsSubscriptions","_slowConnectionToasterTimer","_showToaster","toaster","showStandardToast","toastOptions","timeout","contentProps","title","message","onToastShown","analytics","sendAnalytics","ON_DEMAND","totalSeconds","toString","_updateProgress","data","runInAction","percentage","logger","error","parts","numberOfPackages","split","trim","_clearToasterTimer","makeObservable","observable","push","events","onHybridEmbeddedGameLoadingIndicatorUpdateV1","onHybridEmbeddedGameLoadingIndicatorUpdateV2","statusBar","setTimeout","totalMilliseconds","forEach","s","off","closeGameLoadingIndicator","eventsTrigger","hybridGameLoadingIndicatorClosed","WebAppGameLoadingIndicatorComponent","WebAppGameLoadingIndicatorModel","LastGamePlayedModel","action","_listenForLastRealGame","_listenForLastOpenDemoGame","lastGameInfo","lastPlayedRealGame","gameInfos","correlatedGamesForLastPlayedRealGame","onGameClose","closeOptions","isReal","isGamePlayed","showNextGameSuggestion","setLastPlayedRealGame","getGameInfo","getCorrelatedGames","correlatedGames","getGamesInfoArray","gameInfosArray","_setLastPlayedRealGame","_setCorrelatedGamesForLastPlayedRealGame","onGameOpen","options","setLastOpenDemoGame","_setLastOpenDemoGame","lastOpenDemoGame","GameRunnerService","gameTabController","lastPlayedGame","_runGameStarted","_reOpenPendingGame","_subscribeToSdkEvents","user","isAuthorized","overlayZIndex","GAME_FRAME","gameInternalRealityCheckInterval","getRealityCheckExpectedByTheGame","expectedValueByTheGame","company","shouldShowRealityCheckMessageWhileGameIsOpen","persistedGameParams","sessionStorage","getJson","SessionStorageKeys","initialGameParams","openGame","onDepositWidgetClosed","_refreshCurrentGameBalance","onExternalLinkClosed","linkSource","GNWP_SOURCES","gameCommunicationChannel","supportsBalanceRefresh","refreshBalance","initialRunGameParams","gameMode","GameModeEnum","_openRealGame","_openDemoGame","_openHistoryGame","Error","_logOpenGameError","_showGameOpenError","params","err","messageText","error_code","regulation","getErrorMessage","getGeneralErrorMessage","showSimpleTextModal","text","showEmptyTitle","buttons","buttonPreset","DialogButtonClickHandleResultEnum","errMsgToLog","JSON","stringify","logError","_runGame","openRealGame","openDemoGame","historyGameParams","openHistoryGame","loadingIndicator","gameLoadingIndicator","dispose","device","hybrid","isEmbedded","GameStepsExecutionResultEnum","_closeCurrentRunningGame","_setGameLoadingIndicator","_createGameLoadingIndicator","companies","getRegulatedCompany","companyName","gameController","_setCurrentRunningGame","createWaitForClosePromise","triggerLegacyGameOpenEvent","overlay","disableScrolling","waitForGameToClose","then","triggerLegacyGameCloseEvent","enableScrolling","Promise","resolve","Boolean","freePlayContext","isFreePlay","stopAutoplay","resumeGamePlay","shouldShowTimeLimitMessageWhileGameIsOpen","open","isRealMode","ServiceBase"],"sourceRoot":""}