{\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 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 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}"],"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","hasOpenOverlays","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","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","company","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","gameInternalRealityCheckInterval","getRealityCheckExpectedByTheGame","expectedValueByTheGame","shouldShowRealityCheckMessageWhileGameIsOpen","shouldShowTimeLimitMessageWhileGameIsOpen","open","isRealMode","ServiceBase"],"sourceRoot":""}