{"version":3,"file":"async-module-casino-betgames-i-dn.d.m.'C4C7UAoG'.js","sources":["../../../../../../src/modules/casino/submodules/betgames/prefetch/CasinoBetgamesPagePrefetch.ts","../../../../../../src/modules/casino/submodules/betgames/components/CasinoBetgamesIframeWidget/composables/useCasinoBetgamesIframeWidget.ts","../../../../../../src/modules/casino/submodules/betgames/components/CasinoBetgamesIframeWidget/CasinoBetgamesIframeWidget.vue","../../../../../../src/modules/casino/submodules/betgames/store/useCasinoBetgamesStore.ts","../../../../../../src/modules/casino/submodules/betgames/pages/CasinoBetgamesRoutePage/composables/useCasinoBetgamesRoutePage.ts","../../../../../../src/modules/casino/submodules/betgames/pages/CasinoBetgamesRoutePage/CasinoBetgamesRoutePage.vue"],"sourcesContent":["import { logger } from '@leon-hub/logging';\n\nimport type { AsyncAbstractPrefetchResult } from '@core/router';\nimport { AbstractPrefetch } from '@core/router';\n\nimport { useCmsStore } from 'web/src/modules/cms/store';\n\nexport default class CasinoBetgamesPagePrefetch extends AbstractPrefetch {\n async prefetch(): AsyncAbstractPrefetchResult {\n try {\n await useCmsStore().fetchCmsContentTranslation({\n key: 'WEB2_BETGAMES_DESCRIPTION',\n silent: true,\n });\n } catch (error) {\n logger.warn('CasinoBetgamesPagePrefetch error', error);\n }\n }\n}\n","import type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nimport { PostMessageBus } from '@leon-hub/postmessage-bus';\n\nimport type {\n CasinoBetgamesIframeWidgetEmits,\n CasinoBetgamesIframeWidgetProps,\n} from 'web/src/modules/casino/submodules/betgames/components/CasinoBetgamesIframeWidget/types';\nimport type { IFrameWidgetName } from 'web/src/modules/framed-app/types';\nimport { requireContentWindowByIFrameName } from 'web/src/components/Iframe/VIframe/utils';\nimport BetgamesWidgetPostMessageEvent, {\n BetgamesWidgetPostMessageBusInitiator,\n} from 'web/src/modules/framed-app/components/BetgamesFramedWidget/utils/BetgamesWidgetPostMessageEvent';\nimport { betGamesIframeWidgetName } from 'web/src/modules/framed-app/constants';\nimport { useFramedWidgetUrl } from 'web/src/modules/widgets/composables/useFramedWidgetUrl';\n\ninterface CasinoBetgamesIframeWidgetComposable {\n iframeName: IFrameWidgetName;\n iframeHeight: Ref;\n gameUrl: Ref;\n iframeMounted(): void;\n emitLoad(): void;\n}\n\nexport default function useCasinoBetgamesIframeWidget(\n props: CasinoBetgamesIframeWidgetProps,\n emits: CasinoBetgamesIframeWidgetEmits,\n): CasinoBetgamesIframeWidgetComposable {\n const iframeName = betGamesIframeWidgetName;\n const iframeHeight = ref(500);\n\n let postMessageBus: PostMessageBus | null = null;\n\n const gameUrl = useFramedWidgetUrl(iframeName);\n\n function iframeMounted(): void {\n const iframeContentWindow = requireContentWindowByIFrameName(iframeName);\n postMessageBus = new PostMessageBus({\n target: iframeContentWindow,\n targetOrigin: '*',\n initiator: BetgamesWidgetPostMessageBusInitiator,\n });\n postMessageBus.emit(BetgamesWidgetPostMessageEvent.init, {\n gameHtml: props.gameHtml,\n });\n\n postMessageBus.on(BetgamesWidgetPostMessageEvent.stateChanged, () => {\n postMessageBus?.emit(BetgamesWidgetPostMessageEvent.init, {\n gameHtml: props.gameHtml,\n });\n });\n\n postMessageBus.on(BetgamesWidgetPostMessageEvent.changeHeight, ({ height }) => {\n iframeHeight.value = height;\n });\n\n if (!process.env.VUE_APP_LAYOUT_DESKTOP) {\n postMessageBus.on(BetgamesWidgetPostMessageEvent.scrollTop, ({ scrollTop }) => {\n emitScrollTop(scrollTop);\n });\n }\n }\n\n function emitScrollTop(scrollTop: number): void {\n emits('scroll-top', scrollTop);\n }\n\n function emitLoad(): void {\n emits('load');\n }\n\n return {\n iframeName,\n iframeHeight,\n gameUrl,\n iframeMounted,\n emitLoad,\n };\n}\n","\n\n\n","import { defineStore } from 'pinia';\nimport { ref } from 'vue';\n\nimport { useIsLoggedIn } from '@core/auth';\n\nimport type { StartGameData } from 'web/src/modules/egs/types';\nimport { useEgsApi } from 'web/src/modules/egs/composables';\n\nconst useCasinoBetgamesStore = defineStore('casino-betgames', () => {\n const { isLoggedIn } = useIsLoggedIn();\n\n const {\n startGame: startGameApi,\n } = useEgsApi();\n\n const startGameData = ref();\n\n async function startGame(): Promise {\n startGameData.value = await startGameApi({\n id: 'betgames',\n isDemo: !isLoggedIn.value,\n });\n }\n\n function clearStartGameData(): void {\n startGameData.value = undefined;\n }\n\n return {\n startGameData,\n startGame,\n clearStartGameData,\n };\n});\n\nexport default useCasinoBetgamesStore;\n","import type {\n ComputedRef,\n Ref,\n} from 'vue';\nimport {\n computed,\n nextTick,\n onBeforeUnmount,\n onMounted,\n ref,\n toRef,\n watch,\n} from 'vue';\nimport { useRouter } from 'vue-router';\n\nimport { isGeneralApiError } from '@leon-hub/api';\nimport { StartCodeType } from '@leon-hub/api-sdk';\nimport { BusEvent, useEventsBus } from '@leon-hub/event-bus';\nimport { CasinoRouteName } from '@leon-hub/routing-config-names';\nimport { Events as AnalyticsEvent } from '@leon-hub/yandex-metrika';\n\nimport { useAnalytics } from '@core/analytics';\nimport { useAppsflyer } from '@core/appsflyer';\nimport { useIsLoggedIn } from '@core/auth';\nimport { useCustomerDataStore } from '@core/customer';\nimport { AnalyticsModalType, DialogAction, PresetName, useDialogs } from '@core/dialogs';\nimport { useErrorsConverter } from '@core/errors';\n\nimport { useCasinoBetgamesStore } from 'web/src/modules/casino/submodules/betgames/store';\n\ninterface CasinoBetgamesRoutePageComposable {\n wrapper: Ref;\n errorMessage: Ref;\n isFrameLoaded: Ref;\n isHtmlInjection: ComputedRef;\n gameUrl: ComputedRef;\n setFrameLoaded(): void;\n onClose(): void;\n onScrollTop(scrollTop: number): void;\n}\n\nexport default function useCasinoBetgamesRoutePage(): CasinoBetgamesRoutePageComposable {\n let modalId = '';\n\n const wrapper = ref();\n const isFrameLoaded = ref(false);\n const errorMessage = ref('');\n const casinoBetgamesStore = useCasinoBetgamesStore();\n const router = useRouter();\n const analytics = useAnalytics();\n const bus = useEventsBus();\n const { convertToBaseError } = useErrorsConverter();\n\n const { isLoggedIn } = useIsLoggedIn();\n const { closeDialog, showDialog } = useDialogs();\n\n const startGameData = toRef(casinoBetgamesStore, 'startGameData');\n\n const gameUrl = computed(() => startGameData.value?.gameUrl);\n const isHtmlInjection = computed(() => startGameData.value?.startCode === StartCodeType.HTML_INJECTION);\n\n if (process.env.VUE_APP_PLATFORM_CORDOVA) {\n onMounted(() => {\n const { trackOpenGame } = useAppsflyer();\n\n void trackOpenGame({\n login: useCustomerDataStore().login,\n game: 'betgames',\n provider: '',\n });\n });\n }\n\n onBeforeUnmount(() => {\n casinoBetgamesStore.clearStartGameData();\n\n if (modalId) {\n closeDialog(modalId);\n modalId = '';\n }\n });\n\n watch(isLoggedIn, () => {\n void fetchData();\n }, { immediate: true });\n\n function setFrameLoaded(): void {\n isFrameLoaded.value = true;\n }\n\n function onScrollTop(scrollTop: number): void {\n bus.emit(BusEvent.LAYOUT_CONTENT_SET_SCROLL, {\n scrollTop: scrollTop > 0 && wrapper.value ? scrollTop + wrapper.value.offsetTop : scrollTop,\n });\n }\n\n function onClose(): void {\n router.back(CasinoRouteName.CASINO_LOBBY);\n }\n\n async function fetchData(): Promise {\n isFrameLoaded.value = false;\n errorMessage.value = '';\n casinoBetgamesStore.clearStartGameData();\n await nextTick();\n\n try {\n await casinoBetgamesStore.startGame();\n } catch (rawError) {\n const error = convertToBaseError(rawError);\n if (isGeneralApiError(error)) {\n throw rawError;\n } else {\n showError(error.message);\n }\n }\n }\n\n function showError(message: string): void {\n if (process.env.VUE_APP_LAYOUT_DESKTOP) {\n analytics.push(AnalyticsEvent.MODAL_ERROR_MESSAGES, {\n [AnalyticsModalType.WARNING_EGS]: message,\n });\n errorMessage.value = message;\n return;\n }\n\n const { subscribe, id } = showDialog({\n presetName: PresetName.ALERT_WARNING,\n options: {\n title: '',\n confirmMessage: message,\n analyticsModalType: AnalyticsModalType.WARNING_EGS,\n dataTestId: 'bet-game-error',\n },\n });\n\n modalId = id;\n\n subscribe({\n [DialogAction.MODAL_CLOSE]: () => {\n onClose();\n },\n });\n }\n\n return {\n wrapper,\n errorMessage,\n isFrameLoaded,\n isHtmlInjection,\n gameUrl,\n setFrameLoaded,\n onClose,\n onScrollTop,\n };\n}\n","\n\n\n\n\n"],"names":["CasinoBetgamesPagePrefetch","AbstractPrefetch","useCmsStore","error","logger","useCasinoBetgamesIframeWidget","props","emits","iframeName","betGamesIframeWidgetName","iframeHeight","ref","postMessageBus","gameUrl","useFramedWidgetUrl","iframeMounted","iframeContentWindow","requireContentWindowByIFrameName","PostMessageBus","BetgamesWidgetPostMessageBusInitiator","BetgamesWidgetPostMessageEvent","height","emitLoad","__props","__emit","useCasinoBetgamesStore","defineStore","isLoggedIn","useIsLoggedIn","startGameApi","useEgsApi","startGameData","startGame","clearStartGameData","useCasinoBetgamesRoutePage","wrapper","isFrameLoaded","errorMessage","casinoBetgamesStore","router","useRouter","analytics","useAnalytics","bus","useEventsBus","convertToBaseError","useErrorsConverter","useDialogs","toRef","computed","isHtmlInjection","StartCodeType","onBeforeUnmount","watch","fetchData","setFrameLoaded","onScrollTop","scrollTop","BusEvent","onClose","CasinoRouteName","nextTick","rawError","isGeneralApiError","showError","message","AnalyticsEvent","AnalyticsModalType"],"mappings":"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"}