{"version":3,"sources":["sdk/src/events/events.ts","sdk/src/utils/event.ts","sdk/src/base/base_object.ts","sdk/src/base/base_service.ts","sdk/src/base/base_component.ts","sdk/src/services/game/game_steps/game_step_base.ts","sdk/src/components/external_links/external_links_consts.js","sdk/src/services/hybrid/native/native_const.js","sdk/src/services/service_factory.ts","sdk/src/services/overlay_manager/overlay_manager_levels.ts","sdk/src/base/base_model.ts","sdk/src/base/base_model_component.js","sdk/src/services/regulation/regulation_const.ts","sdk/src/services/regulation/helpers/session_timer_logic_helper.ts","sdk/src/services/regulation/helpers/generic_reality_check_message_handler.ts","sdk/src/services/regulation/regulations/base_regulation.ts","sdk/src/services/game/post_messages/demo_game_post_message_actions.js","sdk/src/services/game/post_messages/demo_game_post_message_handler.js","sdk/src/services/game/game_steps/build_game_post_message_handler_gamestep.js","sdk/src/components/external_links/handlers/external_links_base_handler.js","sdk/src/components/game_navigation_bar/navbar_const.js","sdk/src/services/game/post_messages/game_post_messages_listener_base.js","sdk/src/services/oauth/oauth_const.ts","sdk/src/components/session_timer/session_timer_controller.ts","sdk/src/exceptions/cgp_error_codes.ts","sdk/src/services/game/game_steps/reality_check_interval_appender_gamestep.js","sdk/src/base/base_model_service.js","sdk/src/services/hybrid/features/web_view_manager/web_view_manager_consts.js","sdk/src/components/last_login_component_wrapper/last_login_component_wrapper.js","sdk/src/components/free_play/indicator/fp_indicator_component_model.ts","sdk/src/components/free_play/indicator/fp_indicator_component_controller.ts","sdk/src/components/radio_button/radio_button_model.js","sdk/src/components/radio_button/radio_button_consts.js","sdk/src/components/radio_button/radio_button_component.js","sdk/src/components/loyalty/loyalty_consts.js","sdk/src/components/loyalty/loyalty_controller_component.js","sdk/src/base/component_renderer.ts","sdk/src/core/directive.js","sdk/src/components/options/options_component_controller.js","sdk/src/components/temp_account/temp_account_const.js","sdk/src/components/temp_account/temp_account_component.ts","sdk/src/services/regulation/helpers/temp_account_message_helper.ts","sdk/src/components/external_links/handlers/external_links_base_handler_consts.js","sdk/src/components/options/option_components/base_options_component_controller.js","sdk/src/services/game/game_sequence_builder/GameStepInstanceDescriptor.js","sdk/src/services/game/post_messages/game_common_post_message_handler.js","sdk/src/services/game/post_messages/game_common_post_message_actions.ts","sdk/src/services/geo_location/geo_consts.ts","sdk/src/services/web_login/action_handlers/action_handler_base.js","sdk/src/base/base_singleton.ts","sdk/src/components/message/message_consts.js","sdk/src/components/clock/clock_controller_component.ts","sdk/src/services/player_messages_service/player_messages_consts.js","sdk/src/components/regulation_components/base/game_stripe/stripe_component_model.js","sdk/src/components/regulation_components/base/game_stripe/stripe_component_controller.js","sdk/src/components/regulation_components/base/age/age_responsible_game_consts.js","sdk/src/components/regulation_components/base/age/age_responsible_game_component.js","sdk/src/events/post_actions.js","sdk/src/services/free_play/free_play_consts.ts","sdk/src/services/game/game_steps/login_gamestep.js","sdk/src/components/regulation_components/base/last_login/last_login_component_controller.ts","sdk/src/services/toaster/toaster_service_consts.js","sdk/src/components/external_links/external_links_component_model.js","sdk/src/components/external_links/external_links_component_controller.js","sdk/src/services/integration/integration_const.js","sdk/src/components/external_links/handlers/membership/external_links_membership_handler_consts.js","sdk/src/components/overlay/overlay_const.ts","sdk/src/components/responsible_gaming_icons_wrapper/responsible_gaming_icons_component_wrapper.js","sdk/src/utils/module_loader.js","sdk/src/services/clock/clock_service_consts.ts","sdk/src/components/options/option_components/touch_id/touch_id_component_consts.js","sdk/src/utils/date_time_utils.ts","sdk/src/services/games_information/game_information_service_consts.ts","sdk/src/services/player_messages_service/firebase/firebase_handler_base.ts","sdk/src/components/regulation_components/base/last_login/last_login_composite_controller.ts","sdk/src/components/scrollable_container/scrollable_container_consts.js","sdk/src/components/scrollable_container/scrollable_container_model.js","sdk/src/components/scrollable_container/scrollable_container_controller.js","sdk/src/components/loggedin/layout/base/base_layout.js","sdk/src/components/external_links/handlers/fyp/external_links_forgot_handler.js","sdk/src/components/free_play/voucher/free_play_voucher_consts.ts","sdk/src/components/free_play/indicator/fp_indicator_consts.js","sdk/src/components/game_host/game_host_component_controller.js","sdk/src/services/config/config_service.ts","sdk/src/base/toaster_base_component.ts","sdk/src/components/options/option_components/base_options_model.js","sdk/src/services/game/game_steps/restrictions_gamestep.js","sdk/src/services/restrictions/messages/restriction_messages.ts","sdk/src/services/pending_action/pending_action_consts.js","sdk/src/services/overlay_manager/overlay_manager_types.ts","sdk/src/components/regulation_components/uk/game_stripe/uk_game_stripe_component.ts","sdk/src/components/regulation_components/canada/ontario/responsible_gaming_icons/ontario_responsible_gaming_icons_controller.js","sdk/src/components/regulation_components/sweden/responsible_gaming_icons/sweden_responsible_gaming_consts.js","sdk/src/services/regulation/regulations/com/com_base_regulation.ts","sdk/src/services/regulation/regulations/us/us_base_regulation.ts","sdk/src/services/hybrid/native/native.js","sdk/src/services/hybrid/native/native_ios.js","sdk/src/services/hybrid/native/native_android.js","sdk/src/services/hybrid/native/native_ios_poker.js","sdk/src/services/hybrid/native/native_ios_sport.js","sdk/src/services/hybrid/hybrid_factory.js","sdk/src/services/hybrid/hybrid_service.js","sdk/src/components/options/option_components/touch_id/touch_id_model.js","sdk/src/components/options/option_components/touch_id/Screens/touch_id_screen_base.js","sdk/src/components/options/option_components/touch_id/Screens/touch_id_screen_init.js","sdk/src/components/options/option_components/touch_id/Screens/touch_id_screen_modify.js","sdk/src/components/options/option_components/touch_id/touch_id_component_controller.js","sdk/src/components/login_buttons/login_buttons_consts.js","sdk/src/components/login_buttons/dependencies_factory.js","sdk/src/components/login_buttons/login_buttons_component_controller.js","sdk/src/components/regulation_components/spain/game_stripe/pc/spain_game_stripe_pc.js","sdk/src/components/regulation_components/spain/game_stripe/mobile/spain_game_stripe_mobile.js","sdk/src/components/regulation_components/spain/game_stripe/spain_game_stripe_component.js","sdk/src/utils/observable.ts","sdk/src/utils/observable_factory.ts","sdk/src/services/services_registry.ts","sdk/src/components/external_links/handlers/my_account/external_links_my_account_handler_consts.js","sdk/src/components/external_links/handlers/omg/external_links_omg_handler_consts.js","sdk/src/services/gnwp/gnwp_consts.js","sdk/src/components/live_feeds/game_jackpot/game_jackpot_component_controller.js","sdk/src/components/screen_lock/screen_lock_component_controller.js","sdk/src/components/rich/rich_component_controller.js","sdk/src/components/affiliates_game_host/affiliates_game_host_component_controller.js","sdk/src/utils/reconnect_helper.ts","sdk/src/components/game_body/game_body_component_base.ts","sdk/src/services/free_play/free_play_voucher_list.ts","sdk/src/services/game/post_messages/game_post_message_handler_base.js","sdk/src/services/game/post_messages/void_game_post_message_listener.js","sdk/src/components/history/detail_history_component_controller.js","sdk/src/services/hybrid/features/on_demand/on_demand_hybrid_consts.js","sdk/src/components/game_session_timer/game_session_timer_controller.ts","sdk/src/components/net_position/net_position_controller.ts","sdk/src/components/regulation_components/canada/ontario/game_stripe/canada_ontario_game_stripe_component.ts","sdk/src/services/player_messages_service/fallback/fallback_service_consts.js","sdk/src/components/regulation_components/base/last_login/last_login_consts.ts","sdk/src/services/regulation/regulations/italy/italy_regulation.js","sdk/src/components/regulation_components/denmark/responsible_gaming_icons/dk_responsible_gaming_icons_controller.js","sdk/src/services/regulation/regulations/spain/spain_regulation.ts","sdk/src/services/regulation/regulations/portugal/portugal_regulation.ts","sdk/src/services/regulation/regulations/com/uk/uk_regulation.ts","sdk/src/services/regulation/regulations/romania/romania_regulation.ts","sdk/src/services/regulation/regulations/sh/sh.js","sdk/src/services/regulation/regulations/com/malta/malta_regulation.ts","sdk/src/services/regulation/regulations/com/gib/gib_regulation.js","sdk/src/services/regulation/regulations/us/new_jersey/new_jersey_regulation.ts","sdk/src/components/regulation_components/us/new_jersey/responsible_gaming_icons/new_jersey_responsilbe_gaming_icons_controller.js","sdk/src/services/regulation/regulations/us/delaware/delaware_regulation.ts","sdk/src/services/regulation/regulations/canada/ontario/canada_ontario_regulation.ts","sdk/src/sdk-version.ts","sdk/src/services/web_login/error_handlers/login_error_hadler_base.js","sdk/src/components/options/option_components/geo_location/view/geo_location_hybrid.html","sdk/src/components/options/option_components/inactivity_timeout_settings/inactivity_timeout_settings_controller.js","sdk/src/components/free_play/step_message/free_step_message_component_controller.js","sdk/src/components/game_navigation_bar/parts/close_button_navbar_part.js","sdk/src/components/free_play/free_play_component_consts.js","sdk/src/components/free_play/free_play_component_model.ts","sdk/src/components/free_play/vouchers/fp_vouchers_component_model.ts","sdk/src/components/free_play/voucher/free_play_voucher_component_model.ts","sdk/src/components/free_play/voucher/free_play_voucher_component_controller.ts","sdk/src/components/free_play/vouchers/fp_vouchers_component_controller.ts","sdk/src/components/free_play/games/fp_games_component_model.ts","sdk/src/components/free_play/games/fp_games_component_consts.js","sdk/src/components/free_play/games/fp_games_component_controller.ts","sdk/src/components/free_play/free_play_component_controller.ts","sdk/src/components/game_navigation_bar/parts/game_mode_toggle_navbar_part.js","sdk/src/components/game_navigation_bar/analytics_trigger.js","sdk/src/components/game_navigation_bar/parts/full_screen_button_navbar_part.js","sdk/src/components/game_navigation_bar/parts/game_session_id_navbar_part.js","sdk/src/components/game_navigation_bar/parts/free_play_toggle_navbar_part.js","sdk/src/components/game_navigation_bar/parts/free_play_indicator_navbar_part.js","sdk/src/components/game_navigation_bar/game_navigation_bar_component_controller.js","sdk/src/components/regulation_components/helpers/reality_check/generic_reality_check_component_model.js","sdk/src/components/regulation_components/helpers/reality_check/generic_reality_check_component.js","sdk/src/components/regulation_components/germany/germany_responsible_gaming_buttons_controller.ts","sdk/src/services/regulation/regulations/germany/germany_regulation.ts","sdk/src/components/welcome/welcome_const.js","sdk/src/components/welcome/welcome_model.js","sdk/src/components/welcome/welcome_component_controller.js","sdk/src/components/loggedin/loggedin_model.js","sdk/src/components/loggedin/loggedin_const.js","sdk/src/components/loggedin/loggedin_component_controller.js","sdk/src/components/game_item/game_item_component_model.ts","sdk/src/components/game_item/game_item_component_consts.ts","sdk/src/components/game_item/game_item_component_controller.ts","sdk/src/components/options/option_components/reminder_settings/reminder_settings_model.js","sdk/src/components/options/option_components/reminder_settings/reminder_settings_const.js","sdk/src/components/options/option_components/reminder_settings/reminder_settings_component_controller.js","sdk/src/services/hybrid/features/info/info_hybrid_model.js","sdk/src/services/hybrid/features/info/info_hybrid_consts.js","sdk/src/services/hybrid/features/info/info_hybrid_feature.js","sdk/src/components/regulation_components/sweden/responsible_gaming_icons/sweden_responsible_gaming_icons_model.js","sdk/src/components/regulation_components/sweden/responsible_gaming_icons/sweden_responsible_gaming_icons_controller.js","sdk/src/components/options/option_components/about/about_component_model.js","sdk/src/components/options/option_components/about/about_component_controller.js","sdk/src/components/options/option_components/geo_location/geo_location_component_consts.js","sdk/src/components/options/option_components/geo_location/geo_location_component_controller.js","sdk/src/services/oauth/states/user_scroll_detector.js","sdk/src/services/oauth/states/user_activity_detector.js","sdk/src/services/player_messages_service/fallback/base_fallback_handler.js","sdk/src/services/player_messages_service/fallback/handlers/wallet_fallback_handler.ts","sdk/src/services/regulation/regulations/denmark/logging/dk_structured_logging.js","sdk/src/services/regulation/regulations/denmark/dk_regulation.js","sdk/src/services/regulation/regulations/sweden/logging/sweden_structured_logging.js","sdk/src/services/regulation/regulations/sweden/sweden_regulation.js","sdk/src/components/regulation_components/netherlands/responsible_gaming_icons/netherlands_responsible_gaming_icons_controller.ts","sdk/src/services/regulation/regulations/netherlands/netherlands_regulation.ts","sdk/src/components/login_buttons/view/login-buttons.html","sdk/src/components/loggedin sync /^.*(layout)/.js$","sdk/src/components/loggedin/layout/cashier_only/view/cashier-btn.html","sdk/src/components/loggedin/layout/cashier_only/view/cashier-container.html","sdk/src/components/loggedin/layout/inline/view/balance.html","sdk/src/components/loggedin/layout/inline/view/user-badge.html","sdk/src/components/loggedin/layout/inline/view/cashier.html","sdk/src/components/loggedin/layout/inline/view/loggedin.html","sdk/src/components/external_links/handlers sync /^.*(handler)/.js$","sdk/src/components/external_links/handlers/cashier/external_links_cashier_handler.js","sdk/src/components/external_links/handlers/common/external_links_common_link_handler.js","sdk/src/components/external_links/handlers/document _upload/external_links_document_upload_handler.js","sdk/src/components/external_links/handlers/fyp/external_links_forgot_password_handler.js","sdk/src/components/external_links/handlers/fyp/external_links_forgot_username_handler.js","sdk/src/components/external_links/handlers/membership/external_links_membership_handler.js","sdk/src/components/external_links/handlers/my_account/external_links_my_account_handler.js","sdk/src/components/external_links/handlers/omg/external_links_omg_handler.js","sdk/src/components/external_links/handlers/pending_login/pending_login_handler.js","sdk/src/components/external_links/handlers/pending_play/pending_play_handler.js","sdk/src/components/external_links/handlers/rich/external_links_rich_handler.js","sdk/src/components/external_links/handlers/sport/external_links_sport_handler.js","sdk/src/components/external_links/view/external.html","sdk/src/components/live_feeds/game_jackpot/view/game_jackpot.html","sdk/src/components/free_play/voucher/view/free_play_voucher.html","sdk/src/components/scrollable_container/view/container.html","sdk/src/components/free_play/vouchers/view/fp_vouchers_component.html","sdk/src/components/game_item/view/game_item.html","sdk/src/components/free_play/games/view/fp_games_component.html","sdk/src/components/screen_lock/view/screen_lock.html","sdk/src/components/free_play/view/free_play_component.html","sdk/src/components/free_play/indicator/view/fp_indicator.html","sdk/src/components/regulation_components/base/game_stripe/view/stripe.html","sdk/src/components/regulation_components/base/game_stripe/view/session-id.html","sdk/src/components/radio_button/view/radio_button.html","sdk/src/components/session_timer/view/session_timer.html","sdk/src/components/regulation_components/base/age/view/age_responsible_game.html","sdk/src/services sync /^.*(service)/.(js|ts)$","sdk/src/services/ab_testing/ab_testing_service.ts","sdk/src/services/analytics/analytics_service.ts","sdk/src/components/blue_ribbon_jackpot_status_toaster/view/blue_ribbon_jp_status.html","sdk/src/components/blue_ribbon_jackpot_win_toaster/view/blue_ribbon_jp_win_view.html","sdk/src/components/blue_ribbon_jackpot_welcome/view/blue_ribbon_welcome_popup.html","sdk/src/components/blue_ribbon_jackpot_welcome/view/blue_ribbon_welcome_popup_footer.html","sdk/src/services/bonus_abuse/bonus_abuse_parking_money_in_sport_and_poker_service.ts","sdk/src/services/cashier_proxy/cashier_proxy_service.ts","sdk/src/services/clock/clock_service.ts","sdk/src/services/company_selector/company_selector_service.js","sdk/src/components/full_screen/view/container.html","sdk/src/services/component_tester/component_tester_service.js","sdk/src/components/options/option_components/touch_id/view/touch_id_init.html","sdk/src/components/options/option_components/touch_id/view/touch_id_modify.html","sdk/src/services/domain_detection/domain_detection_service.ts","sdk/src/services/evolution/evolution_service.ts","sdk/src/components/history/view/details.html","sdk/src/services/game/max_one_open_game_service.ts","sdk/src/services/games_correlation/games_correlation_service.js","sdk/src/services/history/history_service.ts","sdk/src/services/hybrid/features sync /^.*(_hybrid_feature)/.js$","sdk/src/services/hybrid/features/depositwidget/deposit_widget_hybrid_feature.js","sdk/src/services/hybrid/features/lobby_pop_up/lobby_pop_up_hybrid_feature.js","sdk/src/services/hybrid/features/on_demand/on_demand_nyx_hybrid_feature.js","sdk/src/components/game_session_timer/view/game_session_timer.html","sdk/src/components/net_position/view/view.html","sdk/src/components/regulation_components/uk/game_stripe/view/view.html","sdk/src/components/regulation_components/canada/ontario/responsible_gaming_icons/view/ontario_responsible_gaming_icons.html","sdk/src/components/regulation_components/canada/ontario/game_stripe/view/view.html","sdk/src/components/regulation_components/spain/game_stripe/pc/pc_layout.html","sdk/src/components/regulation_components/spain/game_stripe/mobile/mobile_layout.html","sdk/src/services/hybrid/features/rating_popup/rating_popup_hybrid_feature.js","sdk/src/components/idle-recommendations/view/idle_recommendations_view.html","sdk/src/services/language/language_service.ts","sdk/src/services/loyalty/loyalty_service.ts","sdk/src/components/message/view/message.html","sdk/src/components/message/view/title_template.html","sdk/src/services/net_position/net_position_service.ts","sdk/src/services/oauth/user/user_service.ts","sdk/src/services/observable_factory/observable_factory_service.ts","sdk/src/services/omg/omg_service.js","sdk/src/services/open_link/open_link_service.js","sdk/src/services/open_sessions/open_sessions_service.ts","sdk/src/services/orbit_component_renderer/orbit_component_render_service.ts","sdk/src/components/overlay/view/overlay-content.html","sdk/src/components/overlay/view/overlay-close-strip.html","sdk/src/services/pariplay/pariplay_service.ts","sdk/src/services/player_messages_service/fallback/handlers sync /^.*(handler)/.[jt]s$","sdk/src/services/player_messages_service/firebase/firebase_elastic_service.ts","sdk/src/services/player_messages_service/firebase/handlers sync /^.*(handler)/.[jt]s$","sdk/src/services/player_messages_service/firebase/handlers/bankroll_handler.ts","sdk/src/services/player_messages_service/firebase/handlers/freeplay_handler.ts","sdk/src/services/player_messages_service/firebase/handlers/netposition_handler.ts","sdk/src/services/post_message/post_message_service.js","sdk/src/services/query_string_detector/query_string_detector_service.js","sdk/src/services/recently_played/recently_played_service.ts","sdk/src/services/red_tiger/red_tiger_service.ts","sdk/src/components/regulation_components/base/last_login/view/last_login.html","sdk/src/components/temp_account/view/temp_account_days.html","sdk/src/components/temp_account/view/temp_account_verify.html","sdk/src/components/regulation_components/base/last_login/view/last_login_composite.html","sdk/src/components/regulation_components/denmark/responsible_gaming_icons/view/dk_responsible_gaming_icons.html","sdk/src/components/regulation_components/sweden/responsible_gaming_icons/view/sweden_responsible_gaming_icons.html","sdk/src/components/regulation_components/netherlands/responsible_gaming_icons/view/netherlands_responsible_gaming_icons.html","sdk/src/components/regulation_components/us/new_jersey/responsible_gaming_icons/view/new_jersey_responsible_gaming_icons.html","sdk/src/components/regulation_components/helpers/reality_check/view/generic_reality_check.html","sdk/src/components/regulation_components/helpers/reality_check/view/session_cooldown_reality_check.html","sdk/src/services/safezone_loader/safezone_loader_service.ts","sdk/src/services/script_loader/script_loader_service.ts","sdk/src/services/third_party_free_play/third_party_free_play_service.ts","sdk/src/services/time/time_service.ts","sdk/src/services/trackjs/trackjs_service.ts","sdk/src/services/triple_eight/triple_eight_service.ts","sdk/src/services/visibility_detector/visibility_detector_service.ts","sdk/src/services/wallet/wallet_service.js","sdk/src/services/web_login/action_handlers sync /^.*(_actionhandler)/.js$","sdk/src/services/web_login/action_handlers/close_actionhandler.js","sdk/src/services/web_login/action_handlers/externallink_actionhandler.js","sdk/src/services/web_login/action_handlers/forgot_your_password_actionhandler.js","sdk/src/services/web_login/action_handlers/forgot_your_username_actionhandler.js","sdk/src/services/web_login/action_handlers/playforfun_actionhandler.js","sdk/src/services/web_login/action_handlers/registration_actionhandler.js","sdk/src/services/web_login/action_handlers/submit_actionhandler.js","sdk/src/services/web_login/error_handlers sync /^.*(_errorhandler)/.js$","sdk/src/services/web_login/error_handlers/pending_action_errorhandler.js","sdk/src/services/web_login/error_handlers/token_not_valid_errorhandler.js","sdk/src/services/web_push/web_push_service.ts","sdk/src/services/window/window_service.ts","sdk/src/components/options/option_components sync /^.*(controller)/.js$","sdk/src/components/options/option_components/about/view/about.html","sdk/src/components/options/option_components/inactivity_timeout_settings/view/inactivity_timeout_settings.html","sdk/src/components/options/option_components/reminder_settings/view/reminder_settings.html","sdk/src/components sync /^.*(controller)/.js$","sdk/src/components/free_play/step_message/view/step_message.html","sdk/src/components/game_navigation_bar/view/gamemode-toggles.html","sdk/src/components/game_navigation_bar/view/close-button.html","sdk/src/components/game_navigation_bar/view/fullscreen-button.html","sdk/src/components/game_navigation_bar/view/session-id.html","sdk/src/components/game_navigation_bar/view/free-play-mode-toogles.html","sdk/src/components/game_navigation_bar/view/free-play-indicator.html","sdk/src/components/game_navigation_bar/view/navbar.html","sdk/src/components/regulation_components/spain/responsible_gaming_icons/spain_responsible_gaming_icons_controller.js","sdk/src/components/regulation_components/spain/responsible_gaming_icons/view/spain_responsible_gaming_icons.html","sdk/src/components/blue_ribbon_jackpot_status_toaster/blue_ribbon_jackpot_status_toaster_component.ts","sdk/src/components/blue_ribbon_jackpot_win_toaster/blue_ribbon_jp_win_toaster_component.ts","sdk/src/components/blue_ribbon_jackpot_welcome/blue_ribbon_welcome_component.ts","sdk/src/utils/stop_watch.ts","sdk/src/services/blue_ribbon/blue_ribbon_helpers.ts","sdk/src/services/blue_ribbon/jackpots/blue_ribbon_jackpot.ts","sdk/src/services/blue_ribbon/jackpots/blue_ribbon_personal_jackpot.ts","sdk/src/services/blue_ribbon/event_handlers/blue_ribbon_personal_jackpot_events_handler.ts","sdk/src/services/blue_ribbon/jackpots/blue_ribbon_party_jackpot.ts","sdk/src/services/blue_ribbon/event_handlers/blue_ribbon_party_jackpot_events_handler.ts","sdk/src/services/blue_ribbon/br-sdk-types.ts","sdk/src/services/blue_ribbon/event_handlers/blue_ribbon_events_dispatcher.ts","sdk/src/services/blue_ribbon/blue_ribbon_feeds_controller.ts","sdk/src/services/blue_ribbon/blue_ribbon_connection.ts","sdk/src/services/blue_ribbon/blue_ribbon_connection_proxy.ts","sdk/src/services/blue_ribbon/party_jackpot_open_game_flow_handler.ts","sdk/src/services/blue_ribbon/blue_ribbon_service.ts","sdk/src/services/game/game_sequence_builder/game_sequence_helper.js","sdk/src/services/game/game_sequence_builder/game_step_inserter.js","sdk/src/services/game/game_sequence_builder/game_step_replacer.js","sdk/src/services/game/game_sequence_builder/game_sequence_builder.js","sdk/src/services/game/dependencies/game_sequence_initializer_base.ts","sdk/src/services/game/dependencies/real_game_sequence_initializer.ts","sdk/src/services/game/dependencies/anonymous_game_sequence_initializer.ts","sdk/src/services/game/dependencies/history_game_sequence_initializer.ts","sdk/src/services/game/dependencies/game_service_sequence_runner.js","sdk/src/components/loading_indicator/loading_indicator.js","sdk/src/components/loading_indicator/loading_indicator_embedded.js","sdk/src/services/game/dependencies/game_service_dependencies_factory.js","sdk/src/services/game/post_messages/void_game_post_message_handler.js","sdk/src/services/game/game_service.js","sdk/src/services/oauth/states/login_time_analytics.js","sdk/src/services/oauth/oauth2_backend_proxy.ts","sdk/src/services/oauth/states/oauth2_state.js","sdk/src/services/oauth/tokens/empty_token.js","sdk/src/services/oauth/tokens/token.js","sdk/src/services/oauth/states/oauth2_authorized_state.js","sdk/src/services/oauth/states/oauth2_anonymous_state.js","sdk/src/services/oauth/states/oauth2_state_factory.js","sdk/src/services/oauth/inactivity_timeout_settings_persister.js","sdk/src/services/oauth/oauth2_service.js","sdk/src/services/skin/product_package/product_package.ts","sdk/src/services/hybrid/features/serial/serial_const.js","sdk/src/services/hybrid/features/serial/providers/appsflyer/app_flayer_const.js","sdk/src/services/hybrid/features/serial/providers/appsflyer/app_flayer_model.js","sdk/src/services/hybrid/features/serial/providers/appsflyer/app_flayer.js","sdk/src/services/hybrid/features/serial/providers/provider.js","sdk/src/services/skin/serial/serial.js","sdk/src/services/skin/info/info_model.js","sdk/src/services/skin/info/info.js","sdk/src/services/skin/skin_service.ts","sdk/src/services/restrictions/values/no_restriction_value.ts","sdk/src/services/restrictions/values/generic_restriction_value.ts","sdk/src/services/restrictions/pool/value_factory.ts","sdk/src/services/restrictions/pool/restrictions_pool.ts","sdk/src/services/restrictions/strategies/restrictions_strategy_base.ts","sdk/src/services/restrictions/strategies/anonymous_restrictions_strategy.ts","sdk/src/services/restrictions/strategies/authorized_restrictions_strategy.ts","sdk/src/services/restrictions/restrictions_service.ts","sdk/src/services/geo_location/geo_base.ts","sdk/src/services/geo_location/geo_hybrid.ts","sdk/src/services/geo_location/geo_data_formatter.ts","sdk/src/services/geo_location/geo_plugin_result.ts","sdk/src/services/geo_location/geo_pc.ts","sdk/src/services/geo_location/geo_oobee.ts","sdk/src/services/geo_location/geo_service.ts","sdk/src/components/overlay/overlay_component_controller.ts","sdk/src/components/overlay/overlay_wrapper_component_controller.ts","sdk/src/exceptions/base/extendable_error.js","sdk/src/exceptions/overlay/overlay_exception.js","sdk/src/services/overlay_manager/queue_model.ts","sdk/src/services/overlay_manager/overlay_manager_service.ts","sdk/src/services/overlay_manager/overlay_managers_const.ts","sdk/src/services/player_messages_service/main/main_proxy_consts.js","sdk/src/services/player_messages_service/main/main_restriction_parser.js","sdk/src/services/player_messages_service/main/main_proxy_strategy.js","sdk/src/services/player_messages_service/firebase/firebase_strategy.ts","sdk/src/services/player_messages_service/player_messages_factory.js","sdk/src/services/player_messages_service/player_messages_service.js","sdk/src/services/structured_logging/builders/log-event-header-builder.ts","sdk/src/services/structured_logging/builders/log-event-data-builder.ts","sdk/src/services/structured_logging/builders/log-device-data-builder.ts","sdk/src/services/structured_logging/builders/log-client-data-builder.ts","sdk/src/services/structured_logging/elastic_logger.ts","sdk/src/services/structured_logging/structured_logging_service.ts","sdk/src/services/web_login/web_login_component.js","sdk/src/services/web_login/events_object_builder.js","sdk/src/services/web_login/init_object_builder.js","sdk/src/services/web_login/login_error_handler.js","sdk/src/services/web_login/web_login_service_dependencies_factory.js","sdk/src/services/web_login/web_login_service.js","sdk/src/services/hybrid/features/web_view_manager/base_web_view.js","sdk/src/services/hybrid/features/web_view_manager/master_web_view.js","sdk/src/services/hybrid/features/web_view_manager/second_web_view.js","sdk/src/services/hybrid/features/web_view_manager/safari_web_view.js","sdk/src/services/hybrid/features/web_view_manager/web_view_manager_model.js","sdk/src/services/hybrid/features/web_view_manager/web_view_manager_hybrid_feature.js","sdk/src/components/full_screen/full_screen_tap_container_controller.ts","sdk/src/services/company_selector/companies/netent/components/netent_game_event_listener.ts","sdk/src/services/company_selector/companies/netent/components/netent_gamebody_component.ts","sdk/src/services/component_factory/component_factory_service.js","sdk/src/services/games_information/games_diagnostic_messages.js","sdk/src/services/games_information/games_information_service_interface.ts","sdk/src/services/games_information/games_info_cache.ts","sdk/src/services/games_information/games_information_service.ts","sdk/src/services/integration/integration_model.js","sdk/src/services/integration/vendors/base_integration.js","sdk/src/services/integration/vendors/b2c/integration_b2c.js","sdk/src/services/integration/integration_service.js","sdk/src/services/live_feeds/jackpots/games_jackpots_publisher.js","sdk/src/services/live_feeds/jackpots/jackpot_feeds_reader.ts","sdk/src/services/live_feeds/jackpots/jackpot_feeds_service_dependencies_factory.ts","sdk/src/services/live_feeds/jackpots/jackpot_feeds_service.ts","sdk/src/components/message/message_button.js","sdk/src/components/message/message_model.ts","sdk/src/components/message/message_component.ts","sdk/src/services/message_manager/message_manager_service.ts","sdk/src/services/regulation/regulation_model.js","sdk/src/services/regulation/regulations/default_regulation.js","sdk/src/services/regulation/regulations/regulation_factory.js","sdk/src/services/regulation/regulation_service.js","sdk/src/services/toaster/toaster_storage/toaster_storage.js","sdk/src/services/toaster/toaster_factory/toaster_factory.js","sdk/src/services/toaster/toaster_handler.ts","sdk/src/services/toaster/toaster_service.ts","sdk/src/services/hybrid/features/touch_id/touch_id_consts.js","sdk/src/services/hybrid/features/touch_id/touch_id_model.js","sdk/src/services/web_login/web_login_consts.js","sdk/src/services/hybrid/features/touch_id/touch_id_hybrid_feature.js","sdk/src/services/hybrid/features/url_scheme/url_scheme_consts.js","sdk/src/services/hybrid/features/url_scheme/url_scheme_model.js","sdk/src/services/hybrid/features/url_scheme/url_schema__params_map.js","sdk/src/services/hybrid/features/url_scheme/url_scheme_hybrid_feature.js","sdk/src/services/gnwp/gnwp_model.ts","sdk/src/services/gnwp/gnwp_service.ts","sdk/src/services/gnwp/gnwp_response.ts","sdk/src/services/themes/themes_consts.js","sdk/src/services/themes/themes_model.js","sdk/src/services/themes/themes_service.js","sdk/src/services/hybrid/features/3d_touch/three_d_touch_consts.js","sdk/src/services/hybrid/features/3d_touch/three_d_touch_model.js","sdk/src/services/hybrid/features/3d_touch/three_d_touch_hybrid_feature.js","sdk/src/services/hybrid/features/deep_link/deep_link_hybrid_consts.js","sdk/src/services/hybrid/features/deep_link/deep_link_model.js","sdk/src/services/hybrid/features/deep_link/deep_link_hybrid_feature.js","sdk/src/services/hybrid/features/fabric/fabric_hybrid_consts.js","sdk/src/services/hybrid/features/fabric/fabric_hybrid_model.js","sdk/src/services/hybrid/features/fabric/fabric_hybrid_feature.js","sdk/src/services/hybrid/features/geo/geo_hybrid_consts.js","sdk/src/services/hybrid/features/geo/geo_hybrid_model.js","sdk/src/services/hybrid/features/geo/geo_hybrid_feature.js","sdk/src/services/hybrid/features/push/push_hybrid_consts.js","sdk/src/services/hybrid/features/push/push_hybrid_model.js","sdk/src/services/hybrid/features/push/push_hybrid_feature.js","sdk/src/services/ai_list/ai_list_service_interface.ts","sdk/src/services/ai_list/ai_list_service.ts","sdk/src/services/country/country_consts.ts","sdk/src/services/country/country_service.ts","sdk/src/services/currency/currency_consts.ts","sdk/src/services/currency/currency_service.ts","sdk/src/services/free_play/Free_play_voucher.ts","sdk/src/services/free_play/free_play_service.ts","sdk/src/services/game_conversion/game_conversion_model.js","sdk/src/services/game_conversion/game_conversion_service.js","sdk/src/services/game_manager/game_manager_model.js","sdk/src/services/game_manager/game_manager_service.js","sdk/src/services/game_reason/game_reason_consts.js","sdk/src/services/game_reason/game_reason_service.js","sdk/src/utils/http_loader.ts","sdk/src/services/games_questionnaire/games_questionnaire_service.ts","sdk/src/services/http/client-ips-handler.ts","sdk/src/services/http/http2_service.ts","sdk/src/services/hybrid/hybrid_version_handler_model.js","sdk/src/services/hybrid/hybrid_version_handler_service.js","sdk/src/components/idle-recommendations/idle_recommendations_component.ts","sdk/src/services/idle_recommendations/idle_recommendations_service.ts","sdk/src/services/jackpot_toasters/jackpot_toasters_consts.ts","sdk/src/services/jackpot_toasters/jackpot_toasters_service.ts","sdk/src/services/live_tables/live_tables_store.ts","sdk/src/services/live_tables/live_tables_service.ts","sdk/src/services/menu/menu_model.js","sdk/src/services/menu/menu_service.js","sdk/src/services/netent/netent_extend.ts","sdk/src/services/netent/netent_service.ts","sdk/src/services/pending_action/pending_action_module.js","sdk/src/services/pending_action/pending_action_service.js","sdk/src/services/player_messages_service/fallback/fallback_handlers_dependencies_factory.js","sdk/src/services/player_messages_service/fallback/fallback_service.js","sdk/src/services/resize_detector/resize_detector_model.js","sdk/src/services/resize_detector/resize_detector_service.js","sdk/src/components/loggedin/layout/cashier_only/loggedin_cashier_only_layout_model.js","sdk/src/components/loggedin/layout/cashier_only/loggedin_cashier_only_layout.js","sdk/src/components/loggedin/layout/inline/loggedin_inline_layout_model.js","sdk/src/components/loggedin/layout/inline/loggedin_inline_layout.js","sdk/src/services/hybrid/features/firebase/firebase_hybrid_consts.js","sdk/src/services/hybrid/features/firebase/firebase_hybrid_feature.js","sdk/src/services/hybrid/features/lexis_nexis/lexis_nexis_hybrid_consts.js","sdk/src/services/hybrid/features/lexis_nexis/lexis_nexis_hybrid_feature.js","sdk/src/services/hybrid/features/native_logs/native_logs_hybrid_consts.js","sdk/src/services/hybrid/features/native_logs/native_logs_hybrid_feature.js","sdk/src/services/hybrid/features/on_demand/on_demand_hybrid_model.js","sdk/src/services/hybrid/features/on_demand/on_demand_hybrid_feature.js","sdk/src/services/player_messages_service/firebase/firebase_const.ts","sdk/src/services/player_messages_service/firebase/handlers/messages_handler.ts","sdk/src/core/initialize.js","sdk/src/core/debug.js","sdk/src/services/game/RunningGameHandler.ts","sdk/src/core/api.ts"],"names":["SYSTEM_EVENTS","ON_INIT_COMPLETE","ON_ORBIT_INIT_COMPLETE","RUN_AUTOLOGIN","RUN_AUTOLOGIN_TOUCH_ID","MESSAGE_OPEN","MESSAGE_CLOSE","ON_BEFORE_OAUTH_STATE_CHANGE","OAUTH_STATE_CHANGE","AUTOLOGIN_SUCCESS","AUTOLOGIN_FAILED","SUCCESSFULLY_LOGIN_RESPONSE","ON_RUN_AUTOLOGIN","FAIL_LOGIN_RESPONSE","CLOSE_GAME","LOGIN_FORM_OPEN","LOGIN_FORM_CLOSE","GET_NEW_TOUCH_TOKEN","SCREEN_CHANGE_STATE","POST_MESSAGE_ARRIVE","HYBRID_POST_MESSAGE_ARRIVE","EXTEND_USER_TIME_TO_LIVE","SCREEN_RESIZE_CHANGED","GAME_OPEN","OPEN_GAME_ERROR","FULL_SCREEN_CHANGE","OPEN_OVERLAY","CLOSE_OVERLAY","CLOSE_ALL_OVERLAY","EXTERNAL_LINK_OPEN","EXTERNAL_LINK_CLOSED","EXTERNAL_LINK_OPENED","APP_RESUMED","APP_PAUSED","ANALYTIC_TRIGGER_ACTIVATED","ANALYTIC_DATA_LAYER_UPDATE","ANALYTICS_EXPERIMENT_ACTIVATED","ANALYTICS_OPTIMIZE_TRIGGER","INCOMING_MARKETING_DATA","INCOMING_MARKETING_FLOW","CONVERSION_PRE_LOGIN_EVENT","CONVERSION_POST_LOGIN_EVENT","PLAYER_ACTION","BALANCE_UPDATED","CURRENCY_UPDATED","RECENTLY_PLAYED_GAMES_UPDATED","LIVE_FEEDS_LATEST_WINNERS_UPDATED","LIVE_FEEDS_WINNINGS_UPDATED","LIVE_FEEDS_TOTAL_JACKPOTS_UPDATED","LIVE_FEEDS_JACKPOT_AMOUNTS_UPDATED","LIVE_FEEDS_STATE_JACKPOTS_UPDATED","OMG_AWAITING_MESSAGES_UPDATED","OMG_OPEN_AWAITING_MESSAGES","OAUTH_REMOVE_FROM_LOCAL_STORAGE","LOCAL_STORAGE_CHANGED","ELEMENT_CREATED","FREE_PLAY_UPDATED","FREE_PLAY_VOUCHER_REMOVED","FREE_PLAY_OPEN_VOUCHERS_MSG","RESIZE_FORM","BEGIN_LOGIN_AFTER_REGISTRATION","LOGIN_COMPLETED_AFTER_REGISTERATION","LOGIN_FAILED_AFTER_REGISTRATION","REGISTRATION_COMPLETED","DETACH_REGISTER_EVENT","FREE_PLAY_VOUCHER_MSG_OPENED","FREE_PLAY_OPEN_INTERNAL_VOUCHERS_MESSAGE","TOAST_CREATED","TOAST_SHOW","TOAST_HIDE","TOAST_CLOSE_BUTTON","TOAST_USER_DISMISS","HYBRID_ALERT","HYBRID_OPEN_MAIL","HYBRID_UPDATE_INFO_KEY","FIREBASE_GOT_NEW_TOKEN","TOUCH_ID_GET_TOKEN_FROM_SRV","TOUCH_ID_INIT_SCREEN_SHOW","TOUCH_ID_TRY_AGAIN_SKIP","TOUCH_ID_CHECK_TOKEN_ENABLE","TOUCH_ID_TOKEN_ENABLE_RES","TOUCH_ID_CLEAR_TOKEN","TOUCH_ID_NATIVE_CANCEL","TOUCH_ID_LOGIN_ERROR","TOUCH_ID_AUTO_LOGIN","TOUCH_ID_STATE_CHANGED","WEB_VIEW_NAVIGATE_GAME","WEB_VIEW_NAVIGATE_DEPOSIT_WIDGET","WEB_VIEW_NAVIGATE_CASHIER","SECOND_WEB_VIEW_OLD_CALL","SECOND_WEB_VIEW_CLOSE","SECOND_WEB_VIEW_OPEN","SECOND_WEB_VIEW_CLOSE_ALL","MINI_CASHIER_HEIGHT_CHANGED","CONTENT_LOADED","OVERLAY_OPEN_AWAIT","OVERLAY_CLOSE_EXPIRED","INTERNAL_URL_NAVIGATION","FABRIC_ADD_EVENT","ADD_TAG_OPEN_APP_VER","ADD_TAG","REM_TAG","DEEPLINK_RECEIVED","WEB_LOGIN_OPEN_REGISTER","ROUTE_CHANGED","RESTRICTIONS_CHANGED","SESSION_TIMER_UPDATE","WINDOW_FOCUS_GAIN","WINDOW_FOCUS_LOSS","GEO_HYBRID_UPDATE_ENABLE","GEO_HYBRID_GT_CB","GEO_HYBRID_GET_LOCATION","GEO_HYBRID_GET_LOCATION_RES","GEO_LOCATION_FAILED","GEO_LOCATION_SUCCEED","GEO_KICK_EVENT","SESSION_EVENT_KICK","SESSION_EVENT_WALLET","SESSION_EVENT_OMG_RECEIVED","SESSION_EVENT_FREE_PLAY_RECEIVED","SESSION_EVENT_FREE_PLAY_REMOVED","SESSION_EVENT_THIRD_PARTY_FREE_PLAY_UPDATED","SESSION_EVENT_NET_POSITION_UPDATE","SESSION_EVENT_RECEIVED_TOASTER","SESSION_EVENT_UPDATERESTRICTION_RECEIVED","SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED","NET_POSITION_VALUE_UPDATE","SECOND_WEB_VIEW_NAVIGATE_SPORT","TIME_UPDATED_FROM_SERVER","ON_BROWSER_PAGE_HIDE","TOKEN_LIFETIME_EXPIRED","LIVE_TABLES_UPDATE","LOADING_INDICATOR_EMBEDDED_UPDATE","LOADING_INDICATOR_EMBEDDED_UPDATE_V2","LOADING_INDICATOR_EMBEDDED_CLOSED_BY_X","BLUE_RIBBON_PERSONAL_JP_STATE_CHANGED","BLUE_RIBBON_PARTY_JP_STATE_CHANGED","BLUE_RIBBON_PARTY_JACKPOT_WIN","BLUE_RIBBON_PARTY_JACKPOT_INSUFFICIENT_MONEY","BLUE_RIBBON_CONNECTION_COMPLETE","BLUE_RIBBON_IS_ENABLED_CHANGED","GAMES_QUESTIONNAIRE_COMPLETED","GAME_SEQUENCE_FINISH","GAME_POPUP_SHOW","USER_APPROVE_GAME_POPUP","BONUS_ABUSE_PARKING_MONEY","SHOW_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW","CLOSE_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW","DEPOSIT_WIDGET_CLOSED","DAILY_DEAL_REMOVE_INDICATION","LOCATION_POPUP_OPEN","LOCATION_POPUP_CLOSED","PLAYER_MESSAGES_STRATEGY_READY","CHANGE_OVERLAY_PRIORITY","OMG_DISPLAYED","LIVE_GAME_SWITCHED","PROMOTIONS_CHANGED","ODR_CLEAR_ALL_GAMES","CLIENT_EVENTS","MENU_CLICKED","LOGIN_BUTTON_CLICKED","REALITY_CHECK_OPENED","REALITY_CHECK_CLOSED","USER_EVENTS","ON_CLICK","ON_DOUBLE_CLICK","ON_SUBMIT","ON_MOUSE_MOVE","ON_MOUSE_DOWN","ON_KEY_PRESS","ON_DOM_MOUSE_SCROLL","ON_MOUSE_WHEEL","ON_TOUCH_START","ON_TOUCH_MOVE","ON_TOUCH_END","ON_MSPOINTER_MOVE","ON_RESIZE","ON_FOCUS","ON_CHANGE","ON_BLUR","USER_ACTIVITY_EVENTS_ALL","USER_ACTIVITY_EVENTS_FOR_HYBRID","Event","_subscriptions","this","name","callback","context","eName","eCallback","eContext","Error","Array","isArray","eventName","cleanFunctions","eventIdx","len","length","push","on","off","forEach","subscription","self","onceCallback","apply","arguments","_originalCallback","params","subscriptions","getAllSubscriptions","events","concat","event","call","ex","console","error","undefined","cb","splice","cleanFn","BaseObject","logger","_createLogger","Logger","getClassName","lineNumber","message","theError","className","stackTrace","stack","JSON","stringify","methodName","argumentName","throwError","innerError","thisProto","Object","getPrototypeOf","constructor","CLASS","$instance","_","isFunction","init","BaseService","featureEnabled","_isToggledAlready","_systemEventsSubscriptions","_createServiceFactoryFunction","shouldApplyFeatureToggleABTesting","applyABTestingLogic","toggleFeatureOn","serviceFactory","oAuth2Service","isAuthorized","abTestingParams","abTestingService","getAbTestingDataForFeature","Properties","_safeGetPropertyLowerCase","properties","propertyName","toLowerCase","Promise","resolve","isNullOrUndefined","dependencies","createServiceFactoryFunction","_detachSystemEvents","bind","_createEventSubscription","once","detachEvents","index","findIndex","item","BaseSingleton","BaseComponent","_selector","_isDirective","_styleSelectors","el","innerComponentsRef","_domEventsSubscriptions","_timeoutSubscriptions","_intervalSubscriptions","_model","ServiceFactory","create","isDirective","assign","getDefaultStyleSelectors","isObject","styleSelectors","safeJSON","createRootElement","bake","innerHtml","addClass","_getIsolationSelector","_setPropertiesSelectors","applyABTestingStyleClass","DOM","createElement","html","componentEl","isElement","append","bindingParams","string","Strings","bindingArray","getCurlyBracesBinding","bindingFunction","fn","replace","to","value","method","text","key","languageService","translation","inject","translate","isString","toString","childComponent","onAppendedToDOM","getStyleSelectors","keys","selectorKey","setClassSelectorToEl","getPropertiesStyleMapper","elClass","selector","contentElements","getEl","getElementsByClassName","i","_detachDOMEvents","_clearTimeouts","_shutDownChildComponents","remove","comp","shutDown","ref","clearTimeout","querySelector","querySelectorAll","containerSelector","parentElement","appendChild","childComponentIndex","removeElement","addStyle","removeStyle","hasClass","removeClass","attribute","addAttribute","element","handler","onDOMElementEvent","onDOMEvent","childElementSelector","timeout","timeoutRef","setInterval","clear","clearInterval","indexOfTimeoutRef","setTimeout","analyticsData","fire","category","hide","show","createGameFlowCancelResponse","reason","cancelGameFlow","reject","isCancelGameFlowResponse","err","GameStepBase","throwArgumentExpected","gameOptions","throwNotImplemented","NAVIGATION_VIEWS","WINDOW","IFRAME","REDIRECT","SECOND_WEB_VIEW","CASHIER_ACTIONS","CASHIER_SESSION_TYPES","LINK_DEFAULT_CONGIF","view","pc","mobile","allowedViews","dimensions","default","isAuthRequired","isCloseBtnAllowed","immediateShow","isMobileFullScreen","priorityLevel","PRIORITY_LEVEL","OMG","os","macos","browsers","safari","sessionType","CASHIER","isNotAuthRequired","MEMBERSHIP","backToView","SECONDARY_MESSAGE","COMPONENT_TYPES","DIRECTIVE","API","GNWP_SOURCES","FORGOT_PASSWORD","FORGOT_USERNAME","MY_ACCOUNT","SPORT","RICH","PENDING_LOGIN","PENDING_PLAY","DOCUMENT_UPLOAD","HELP","KEY_NAME","FUNC","FUNC_CB","HYBRID_CB","HYBRID_CB_GLOBAL_NAME","HYBRID_CB_FEATURE_FUNC","SRV","MSG","ERROR","DATA","ODR_DEL_GAMES","VERSION","LN_SERVER","LN_ORG_ID","LN_SESSION_ID","JS_LN_SERVER","TIME_OUT","TIME_OUT_BEFORE_DISPLAY","CLOSE_BY_TIME_OUT","CLOSE_BY_X","CLOSE_NO_CHILL","CLOSE_BY_LOW_DISK_SPACE","FOLDER_STRUCT","FOLDER_SHARED_NAME","CLOSE_X_POS_P","CLOSE_Y_POS_P","CLOSE_X_POS_L","CLOSE_Y_POS_L","MAIL_TO","ID","PORT","KEYBORD","ROTATION","FORCE","WEB_ID","TYPE","PROGRESS_BAR_FAKE","PROGRESS_BAR_REAL","RESOURCE_NAME","X_OF_MENY","GAME_ID","SHARED_FOLDER","URL","SERVICE","FEATURE_CB","ACTION","OPEN_LINK","DEBUG","RELOAD","AUTOLOGIN","SESSIONTIMER","HEADER_HEIGHT","BANK_ID","PHONE","LEFT","RIGHT","TOP","BOTTOM","SHOW","DP_TO_PX","LOG_CATEGORY","LOG_ACTION","LOG_LABLE","LOG_VALUE","ON_DEMAND","GAME_LOADING_START","GAME_LOADING_END","GAME_LOADING_CLOSE_BY_X","GAME_LOADING_CLOSE_BY_TIME_OUT","GAME_LOADING_CLOSE_BY_LOW_DISK_SPACE","GAME_LOADING_CLOSE_BY_NO_CHILL","GAME_LOADING_ERROR","CHILL_LOADING_ERROR","CHILL_LOADING","GAME_LOADING_REAL_ODR_STARTED","ON_DEMAND_CATEGORY","ON_DEMAND_DELETE_GAMES","LEXIS_NEXIS","SESSION_ID_LOAD_ERROR","SESSION_ID_LOAD_OK","SESSION_ID_REQUEST_SENT","SESSION_ID_CALL","SESSION_ID_LOAD_EMPTY","SESSION_ID_CLOSE_BY_TIME_OUT","LEXIS_NEXIS_CATEGORY","ODR_FOLDERS","SHARED_ONE_FOLDER","SHARED_MANY_FOLDER","SHARED_NONE","SHARED_GGP","ODR_SHARED_GAMES","EMPTY","RED_TIGER","PRAGMATIC_PLAY","PLAY_N_GO","FEATURE_CB_FUNC","HYBRID_WEB_CALL","HYBRID_URL_SCHEME_CALL","HYBRID_PUSH_CALL","HYBRID_GEO_CALL","HYBRID_ON_DEMAND_CALL","HYBRID_ON_DEMAND_NYX_CALL","HYBRID_LOBBY_POP_UP_CALL","HYBRID_FIRE_BASE","HYBRID_NATIVE_LOGS","SERIVCES_FUNC_LIST","WEB_VIEW_WEB_SHOW","WEB_VIEW_SAFARI","WEB_VIEW_SAFARI_PING","WEB_VIEW_ACCOMPLISHED","WEB_VIEW_IS_HTML_COMPILED_GAMES","WEB_VIEW_GET_DP_2_PX","GENERAL_INIT_HYBRID","GENERAL_ALERT","GENERAL_ALERT_D","GENERAL_SET_ROTATION","GENERAL_SET_CB","GENERAL_OPEN_MAIL","GENERAL_OPEN_EXTERNAL_LINK","SERIAL_GET_SERIAL","T3_D_TOUCH_INIT_SHORTCUTS","T3_D_TOUCH_UPDATE_SHORTCUT","T3_D_TOUCH_DELETE_SHORTCUT","T3_D_TOUCH_DEL_ALL_SHORTCUTS","T3_D_TOUCH_GET_LAUNCH_SHORTCUT","TOUCH_ID_GET_TOKEN","TOUCH_ID_OPEN","TOUCH_ID_SET_TOKEN","TOUCH_ID_IS_SUPORTED","TOUCH_ID_CLEAR_ALL","TOUCH_ID_PARAMS_FOR_TOKEN","WEB_SECOND_SET_CB","WEB_SECOND_NAVIFATE","WEB_DEPOSIT_WIDGET_NAVIFATE","WEB_SECOND_SHOW","WEB_SECOND_HIDE","WEB_SECOND_CLOSE","WEB_SECOND_UPDATE_SIZE","WEB_DEPOSIT_WIDGET_SUPPORTED","INFO_GET_ALL_INFO","INFO_SET_URL","URL_SCHEME_SET_CB","URL_SCHEME_GET_URL_SCHEME","URL_SCHEME_CLEAR","PUSH_IS_DEVICE_ENABLE","PUSH_SET_CB","PUSH_GET_ACTION","PUSH_ADD_TAG","PUSH_REM_TAG","PUSH_SET_ALIAS","GEO_SET_CB","GEO_GET_GEO_LOCATION","LEXIS_NEXIS_GET_INFO","LEXIS_NEXIS_IS_SUPPORTED","RATE_APP","ON_DEMAND_IS_READY","ON_DEMAND_CLOSE_GAME","ON_DEMAND_SET_CB","ON_DEMAND_LOAD_CHILL","ON_DEMAND_CLOSE_BY_X","ON_DEMAND_CLOSE_BY_TIME_OUT","ON_DEMAND_CLOSE_BY_LOW_DISK_SPACE","ON_DEMAND_DELETE_GAME_FOLDER","ON_DEMAND_NYX_SET_CB","ON_DEMAND_NYX_NAVIGATE","ON_DEMAND_NYX_CLOSE","ON_DEMAND_NYX_CHANGE_HEADER_HEIGHT","LOBBY_POPUP_IS_SUPPORTED","LOBBY_POPUP_SHOW","LOBBY_POPUP_CLOSE","LOBBY_POPUP_SET_CB","FIRE_BASE_GET_DATA","NATIVE_LOGS_SET_CB","SERIVCES_PARAMS_LIST","WEB_VIEW_SPLASH","WEB_VIEW_SPLASH_SHOW","WEB_VIEW_SPLASH_FADE","LOCAL_HOST","HTTP","HTTPS","servicesRegistry","ServicesRegistry","getService","BASE","POP_UP","OPEN_SESSION","FP","OMG_BEHIND","GAME_FRAME","NEXT_GAME","GAME_LOADING_INDICATOR","GAME_FRAME_LOADER","GAME_FRAME_FP","MINI_CASHIER","LOGIN","EXTERNAL_LINK","INTERNAL_OVER_EXTERNAL_LINK","GEO_FREEZE_WINDOW","TEMP_ACCOUNT","MESSAGE","TOUCH_ID","TOUCH_ID_POPUP","LOCK","SPAIN_SUMMARY_MESSAGE","GAMES_QUESTIONNAIRE","PRIORITY_LEVEL_ZINDEX_MAPPER","WRAPPER_DEFAULT_INDEX","BaseModel","BaseModelComponent","REGULATION_CODE_TYPES","COM","ITALY","SPAIN","NEVADA","GIB","DELAWARE","NJ","DK","ROMANIA","GERMANY","PORTUGAL","SWEDEN","MALTA","SH","CANADA_ONTARIO","NETHERLANDS","UK","REGULATION_NAMES","REGULATION_SUFFIX","TEMP_ACCOUNT_STATUS","APPROVED","DOCUMENTS_NOT_RECEIVED","PENDING_VERIFICATION","BRANDS","NJ888","CANADA","SESSION_TIMER_INCREMENT_INTERVAL","TimeSpan","fromSeconds","HEART_BEAT_INTERVAL","fromMinutes","SessionTimerLogicHelper","_sessionTime","_sessionTimerObservable","_heartBeatObservable","_serviceFactory","_focusGainSubscription","_readSessionTimeFromServer","stop","_startHeartBeat","_startSessionTime","_subscribe","_stopHeartBeat","_stopSessionTimer","_unsubscribe","getTimeSinceLogin","then","sessionTime","_fireUpdateEvent","observableFactoryService","fromInterval","totalMilliseconds","add","dispose","GenericRealityCheckMessageHandler","_initParams","SESSION_TIMER_UPDATE_SUBSCRIPTION","OAUTH_STATE_CHANGE_SUBSCRIPTION","_lastRealityCheckMessageIndexShown","data","_firstOnSessionTimerUpdate","_onSessionTimerUpdate","_onOAuthStateChange","eventData","Math","floor","realityCheckInterval","currentRealityCheckMessageIndexToBeShown","handleRealityCheckMessageCallback","BaseRegulation","cssSuffix","_sessionTimerHandler","_realityCheckMessageHandler","_realityCheckInterval","_parseRealityCheckInterval","interval","defaultValue","fromHours","timeSpan","parse","days","hours","minutes","totalMinutes","realityCheckEnabled","fromMilliseconds","realityCheckIntevalMin","getRealityCheckInterval","expectedValueByTheGame","round","sessionTimer","closeFunc","getSessionTime","sessionTimerEnabled","_handleRealityCheckMessage","start","LastLoginComponentController","kickParams","CLOCK_LOCALIZATION","LOCAL","errorCode","a","country","state","source","DemoGamePostMessageActions","openLinkService","goToLobby","GameCommonPostMessageActions","DemoGamePostMessageHandler","isReal","_isReal","GameCommonPostMessageHandler","BuildGamePostMessageHandlerGameStep","commonPostMessageHandler","skipShowGame","postMessageHandler","ExternalLinksBaseHandler","_acceptedSourcesMap","componentControllerRef","component","PRODUCT_PACKAGE_MAP","MY_ACCOUNT_PP_ID","MEMBERSHIP_PP_ID","CHANGE_PASSWORD_PP_ID","PENDING_APPLICATION_PP_ID","REDEEM_COMP_POINTS_PP_ID","postMessageData","ActionId","debug","productPackage","acceptedSources","getAcceptedSourcesMap","propertyChainExists","originInformation","originProductPackageID","isUndefined","SourceProductPackage","indexOf","display","sendAnalytics","label","postAction","closeLink","checkPostMessageData","isSourceValid","executePostMessageAction","executePostMessageActionFallback","analyticObject","action","getHandlerName","channel","TabId","warn","options","PromCode","cashierProxyService","openCashier","channelElement","isDepositSessionType","CHANNEL_ELEMENTS","depositButton","isCashoutSessionType","withdrawButton","CHANNEL_SOURCE","myAccount","area","AreaType","Header","openDeposit","close","gameType","referrerID","referrerId","gameService","openRealGame","openAnonymousGame","webLoginService","openLoginForm","openLink","ELEMENTS","NAME","SESSION","CLOSE","CLOSE_BUTTON","FS","FS_BUTTON","FAVORITE","TOGGLES","SWITCH_GAME_MODE","CHECKBOX","REAL","ANONYMOUS","CLOCK","SESSION_TIMER","TOGGLE_CIRCLE","CHECKBOX_LABEL","TOGGLE_REAL_TEXT","TOGGLE_ANNONYMOUS_TEXT","GAME_FRAME_BG_LEFT","GAME_FRAME_BG_RIGHT","NO_TOGGLE","RESPONSIBLE_GAME_ICONS","ANALYTICS","CATEGORY","GAME_NAME","SESSION_ID","RG","TIME","GAME_SOURCE","CHALLENGES","FP_MESSAGE_DATA","content","ctaOK","ctaCancel","analytics","RESPONSIBLE_GAMBLING_VIEW","GamePostMessageListenerBase","_prevGameBalance","_prevDiffBalance","messageData","TOKEN_PROPERTIES","OAUTH_STORAGE_KEY","OAUTH_EXPIRE_KEY_IN_STORAGE","OAUTH_LAST_REFRESH_TOKEN_TIMESTAMP","OAUTH_LAST_USER_DATA","OAUTH_LAST_SESSION_DATA","OAUTH_HAS_REMEMBER_ME","OAUTH_LAST_TIME_ACTIVITY","OAUTH_CUSTOM_SESSION_TIMEOUT","OAUTH_ACCESS_TOKEN","OAUTH_TOKEN_FIELDS_OVERRIDES","GRANT_TYPES","PASSWORD","REFRESH_TOKEN","OAUTH2_CSS","AUTHORIZED_USER_CLASS","LOGIN_TYPE","NEW_LOGIN","ID_VERIFICATION_STATUS","AGE_VERIFIED","ADDRESS_VERIFIDED","LOGOUT_REASONS","EXPLICIT_LOGOUT","USER_IDLE","REFRESH_TOKEN_FAILED","ACCESS_TOKEN_REMOVED","USER_KICKED","sessionTimerView","require","SessionTimerController","_htmlElementsReff","setHTML","navbar","container","mobileLarge","_onLogin","onSystemEvent","_updateTime","regulationService","getRegulation","getCurrentSessionTime","sessionTimerVisible","elapsedTime","timeString","String","padStart","innerText","Device","isMobile","CGP_ERROR_CODES","GENERAL_ERROR_SUPPORT","RESTRICTED_COUNTRY","INVALID_CREDENTIALS","LOGIN_RESTRICTION","INVALID_REFRESH_TOKEN","CAPTCHA_REQUIRED","TOUCH_ID_CHANGE_PASS","TOUCH_ID_EXPIRE","GENERAL_ERROR","OPENING_GAME_ERROR","UNSUPPORTED_ANONYMOUS","TIME_LIMIT_REACHED_DAILY","TIME_LIMIT_REACHED_WEEKLY","TIME_LIMIT_REACHED_MONTHLY","TOKEN_NOT_VALID","PENDING_ACTION_REQUIRED","INVALID_GRANT","isRefreshTokenError","RealityCheckIntervalAppenderGameStep","company","getRealityCheckIntervalExpectedByTheGame","BaseModelService","WEB_VIEW_TYPES","MASTER","SECOND","SAFARI","WEB_VIEW_IDS","MASTER_ID","SAFARI_ID","DEPOSIT_WIDGET_ID","WEB_VIEW_REASON","UN_DEFINED","WEB_SECOND_NOT_SUPPORTED","CLOSE_BUT_CLICKED","CLOSE_BY_WEB","CLIENT_TAPED_ON_VIEW","WEB_VIEW_INFO","ENAABLE_SNAP_SHOT","INJECT_FUNC","DEL_INJECT","FRAME_OFFSET_TOP_Y","FRAME_OFFSET_TOP_PORTRATE_Y","FRAME_TOP_LANDSCAPE_Y","FRAME_TOP_PORTRATE_Y","FRAME_TOP_PORTRATE_IPHONE_X","FRAME_OFFSET_BOTTOM_Y","DISPLAY_GAME_TIME_OUT","TAP_KEEP_ALIVE","BUT_INIT","BUT_RTL","BUT_W","BUT_H","BUT_X","BUT_Y","BUT_LANDSCARE_X","BUT_LANDSCARE_Y","CLOSE_CALLED_BY_WEB","TAP_ON_VIEW","ORIENTATION","LastLoginComponentWrapper","_lastLoginComponent","getLastLoginComponent","appendChildComponent","FPIndicatorComponentModel","_fpData","_isEnabledState","_gameTypeID","_indicatorIcons","_openMode","_openPriority","_openDirection","_displayConstraint","_freePlayID","_analytics","_onSelectedFn","_isSelected","_setGameTypeID","gameTypeID","_setIndicatorIcons","indicatorIcons","_setFreePlayOpenMode","openMode","_setOpenPriority","openPriority","_setOpenDirection","openDirection","_setDisplayConstraint","displayConstraint","_setFreePlayID","freePlayID","_setOnSelected","onSelected","setIsSelected","isSelected","_setAnalytics","fpData","isEnabled","defaultIcons","enabled","FP_INDICATOR_CLASSES","ICON_ENABLED_BACKGROUND","selected","disabled","ICON_DISABLED_BACKGROUND","DISPLAY_CONSTRAINT","active","ACTIVE","indicatorView","FPIndicatorComponentController","CyClass","subscribe","setFreePlayData","_updateContent","onRootElementEvent","getIsEnabledState","getIsSelected","_sendAnalytics","filter","getGameTypeID","excludeFreePlays","getFreePlayID","mode","getOpenMode","getOpenPriority","getOpenDirection","_updateSelection","getOnSelectedFn","getAnalytics","bakedHTML","iconDisabled","getIndicatorIcons","setIsEnabledState","_initFreePlays","freePlayService","getFreePlayVouchers","freePlays","stateFilteredFP","_filterFreePlayByConstraints","getDisplayConstraints","_updateState","fp","isNew","parseInt","games","gameID","displayConstraints","getFreePlayData","_filterByConstraint","constraint","filteredFreePlays","FREE_PLAY_FILTER_CONSTRAINTS","FREE_PLAY_EXIST","CONTAINS_GAME","_filterByGame","NEW","_filterByNewFreePlays","oldIsEnabled","iconEl","getDOMElementByClassName","ICON","_getIconClassByState","selectedClass","RadioButtonModel","_setID","id","_setName","_setChecked","checked","_setLabel","labelkey","_id","_name","_checked","labelKey","_label","RADIO_BUTTON_SELECTORS","radioButtonView","RadioButtonComponent","_elementMap","Model","_applyDeviceCSS","_mapElements","_configureRB","browser","isFirefox","firefoxVersion","version","isNaN","rbNormal","rbSelected","rbLabel","rbInput","getElementsByTagName","getID","getName","isChecked","getLabel","LOYALTY_STYLE_PROPERTIES","LoyaltyComponentController","_params","_firebaseToken","_updateLoyaltyToken","_onOAuthChange","_setParamsToLowerCase","_appendScript","param","originalParamValue","newParam","loyaltyScriptLink","loyaltyService","getScriptLink","loyaltyScriptElement","$$","isValidUrl","script","document","body","onload","_onScriptLoad","info","userService","renewLoginToken","userToken","innerHTML","currentFirebaseToken","getFirebaseLoginToken","window","myloyaltyindication","Terminate","skinService","loyaltyInitInfo","UserInfo","token","FirebaseToken","CID","getCID","LanguageCode","getISO3","ClientContext","getBrandID","getVersion","getProductPackageID","getSubBrandID","getClientPlatform","Style","styles","_setStyles","rlpfweb","LoyaltyIndication","_onClick","UpdateToken","styleProperty","stylePropertyLowerCase","_getProperValue","addEventListener","CGP","openExternalLink","tabId","ComponentRenderer","_componentPrototype","_hostElement","_componentInstance","hostElement","props","_disposeComponent","removeChild","Directive","_prefix","_cgpAllowedQuery","getValueSelector","cgpLoadedDirectives","CLEAN_DIRECTIVES_INTERVAL","_loadDirectives","render","_setTimeoutRemoveDirectives","_initDOMObserver","forceRender","directive","isReRenderable","_drawDirective","directiveInstance","isOnDOM","cgpElement","query","cgpDirectiveOptions","_makeDirectiveOptions","isNull","loadedDirective","configuration","_loadDirective","_cleanDirectives","elements","HTMLElement","_tryLoadDirective","_getCGPDirectiveQuery","componentSelector","_getDynamicDirectiveSelector","children","match","getAttribute","observerRoot","MutationObserver","WebKitMutationObserver","eventListenerSupported","_obs","mutations","record","addedNodes","_onElementsAdded","observe","childList","subtree","_onDOMNodeInserted","mutationEvent","target","cleanDirectivesTimeout","offsetParent","directiveName","split","table","parseDataAttributes","_shutDownDirectives","removeEventListener","disconnect","componentId","componentDescriptor","componentOptions","directiveRaw","welcome","Welcome","external_link","ExternalLinks","clock","Clock","last_login","LastLogin","game_jackpot","GameJackpot","free_play","FreePlay","fp_indicator","FreePlayIndicator","rich","Rich","stripe_component","Stripe","radiobutton","RadioButton","loyalty","Loyalty","login_buttons","LoginButtons","session_timer","SessionTimer","responsible_gaming_icons","ResponsibleGamingIconsComponentWrapper","age_responsible_game","AgeResponsibleGameComponent","game_host","GameHostComponent","affiliates_game_host","AffiliatesGameHostComponent","OptionsComponentController","optionComponentNameToLoad","findOptionComponentByName","Loader","optionComponents","find","optionComponent","_isOptionExist","optionComponentName","load","getOptions","reminder","CELL_CLASS_LIST","CELL_CONTENT_CLASS","CELL_CONTENT_BAR_CLASS","componentDaysView","componentVerifyView","TempAccountComponent","_getView","messageText","footerMessage","footerMessageText","hideDaysLeft","daysLeftEl","status","_addDaysLeft","cellContainer","cellContents","daysLeft","cellNo","_getCell","cell","cellContent","contentBar","TempAccountMessageRegulationHelper","getAccountData","DaysToUploadDocument","footerEl","msgParams","messageOptions","footerText","priority","closeButton","customCSSClassList","title","titleKey","documentVerifyOptions","hasDefaultButton","buttons","btnNameKey","getTempAccountGnwpSource","MOBILE_VERIFY_ID","VERIFY_ID","isClosable","btnCloseCallback","statusOptions","tempAccountParams","paramsFunc","_getDefaultAccountStatus","messageKey","footerComponent","footerMessageKey","messageManagerService","openMessage","_getMessageOptionsByStatus","structuredLoggingService","getLogger","OMG_PP_ID","RICH_PP_ID","DEEP_LINK_MAP","MY_ACCOUNT_DL_RESPONSIBLE_GAMING","MY_ACCOUNT_DL_CHANGE_PASSWORD","MY_ACCOUNT_DL_BONUSES","MY_ACCOUNT_DL_PERSONAL_DETAILS","MY_ACCOUNT_DL_INVITE_FRIEND","MY_ACCOUNT_DL_REPORTS","MY_ACCOUNT_DL_LC_CHALLENGES","MY_ACCOUNT_DL_LC_REDEMPTION","MY_ACCOUNT_DL_TOURNAMENT","MY_ACCOUNT_DL_FREE_PLAY","MY_ACCOUNT_DL_FREE_BETS","MY_ACCOUNT_DL_COMP_POINTS","MY_ACCOUNT_DL_MY_CHALLENGES","BaseOptionsComponentController","_openInMDP","getOverlayPriority","onCloseBtnClicked","closeCallback","onComponentClosed","additionalClasses","contentAdditionalClasses","openCallback","_onComponentOpened","contentEl","_getOptionTitle","_isCloseButtonEnabled","_getCustomCSSClassList","_getButtons","onComponentOpened","titleLangKey","_getTitleKey","type","MESSAGE_TYPE","GameStepInstanceDescriptor","stepPrototype","stepParams","actionName","actions","_createPostMessageActions","actionMethod","GamePostMessageHandlerBase","_gameOptions","closegame","showNextGameSuggestion","FULL_CASHIER","casinoClient","InGame","pendingAction","PENDING_ACTIONS","GAME","persistent","gameName","forceLogin","freePlayData","isThirdParty","pendingActionService","addPendingAction","_openCashier","supportsRefreshBalance","defaultAnalyticsData","_extractReloadGameOptions","skipFreePlay","marketing","gameNavigationBar","_updateSessionIdInNavigationBar","sessionId","setGameSessionId","regulationData","gameRegulationStripe","setRegulationData","gameSessionNotificationManager","updateRegulationData","gameSessionSummaryHandler","updateSummaryData","openResponsibleGamblingLink","responsibleGamblingView","integrationService","redirectToHistory","gameWindow","closeGameWindow","progress","endLoadingTime","Date","_reportGameLoadingTime","fullScreenTapComponent","startLoadingTime","gameLoadingTime","DateTimeUtils","millisecondsToSeconds","gameMode","reportanalytics","_backGameData","gameURLBuilderType","gameUrlBuilder","companyName","vendorName","soundOn","updateRealityCheckData","keepalive","_sendGameLauncherElasticData","gameUrl","isError","CGPEventCategory","CGPEventAction","CGPEventLabel","GEO_LOCATION","NUN","GEO_HYBRID_ANDROID","GEO_HYBRID_IOS","GEO_WEBAPP_ANDROID","GEO_WEBAPP_IOS","GEO_PC","GEO_MAC","RES_OK","RES_FAILED","USER_ID","REASON","LICENSE","SESSION_KEY","REASON_LOGIN","REASON_OPEN_REAL_GAME","REASON_PERIODIC","USER_ID_OK","REASON_OK","PHONE_OK","LICENSE_OK","SESSION_KEY_OK","ALL_DATA_OK","WIN","MAC","GC_PLATFORM","GC_VERSION","GC_DOWNLOAD_PAGE","GC_KEY","GC_BROWSER","PLUGIN_NOT_UPDATED_ERROR","ANTI_LOOP_DELAY","PLUGIN_INSTALLATION_MSG_TXT","PLUGIN_INSTALLATION_MSG_TITLE","PLUGIN_INSTALLATION_MSG_INSTALL_BTN","OOBEE_HINT_TITLE","OOBEE_HINT_TXT","OOBEE_HINT_INSTALL","OOBEE_HINT_WAKEUP","GA_GEO_START_GEO_PROCESS","GA_GEO_PLUGIN_ENABLE","GA_GEO_LOCATION_REQUEST_SENT","GA_GEO_LOCATION_VALIDATION","GA_GEO_LOCATION_FAIL_VALIDATE_GEO_LOCATION","GA_GEO_LOCATION_SUCCEEDED_VALIDATE_GEO_LOCATION","GA_GEO_LOCATION_POPUP_CLOSED","GA_GEO_LOCATION_RESET_WAITING_FOR_RESPONSE","GA_GEO_LOCATION_CATEGORY_SERVICE","GA_GEO_LOCATION_CATEGORY_WRAPPER","GA_GEO_LOCATION_KICK_EVENT","GA_GEO_LOCATION_KICK_EVENT_UN_KNOWN_REASON_ID","GA_GEO_DISABLED","GA_IS_GEO_LOCATION_IN_PROCESS_FALSE","GA_GEO_PLATFORM_ASK_GEO_VIA_LOGIN","GA_GEO_NOT_VALID_REQUEST_FROM_PLATFORM","TECHNICAL_PROBLEM_REASON","GEO_IN_PROCESS_MSG_TITLE","GENERIC_OK_BUTTON","GA_GEO_CLEAN_GEO_LOGIN_PROPERTY","GA_GEO_SHOW_GEO_IN_PROGRESS_POPUP","GA_GEO_GEO_COMPLY_RESULT_OK","GA_GEO_GEO_COMPLY_RESULT_FAILED","GEO_SET_LOCATION_TIMEOUT","GEO_SET_LOCATION_TIMEOUT_REACHED","LoginActionHandlerBase","INFO","WARNING","SUCCESS","TEXT_ALIGNMENT","CENTER","BUTTON_TYPE","MAIN","typeName","class","SECONDARY","CUSTOM","MDP_IMG_CSS_CLASS_SELECTORS","COMMON_ERROR","LOGIN_ERROR_CONTACT_SUPPORT","LOGIN_RESTRICTED_COUNTRY_ERROR","LOGIN_USERNAME_PASSWORD_WRONG","LOGIN_AGE_VERIFICATION_WARNING","LOGIN_CAPS_LOCK","GAME_LOW_RESOLUTION","GAME_RESTRICTED_ERROR","GAME_UNAVAILABLE","GAME_REAL_MONEY_ONLY","OAUTH_INACTIVITY_WARNING","OAUTH_DISCONNECT_NOTIFY","COOKIE_ENABLE_NOTIFY","ClockComponentController","_datetime","_timeClockInterval","_setInitParams","dateTimeFormat","getDateTimeFormat","datetime","clockService","currentDate","getCurrentDate","currentDateInRegulationTimeZone","convertToRegulationTimeZone","time","DateFormatter","format","date","isUTC","MESSAGES_SOURCE","MAIN_PROXY","FIREBASE","KICK_TYPE","FULL_KICK","SOFT_KICK","KICK_REASON","KickUserAlreadyLoggedIn","KickUserMobileLocation","KickUserNoWiFi","KickUserRDPDetected","KickUserOutsideCountry","KickUserTechProblem","KickUserPluginNotInstalled","KickUserPluginNotUpdated","KickUserLocationProcessTimeOut","KickUserWagerMobileFailed","KickUserOptInError","KickUserNetworkSwitch","KickUserGCTimeout","KickUserLocationDisabled","KickUserKnownProxy","KickUserRestrictedPlay","KickUserPendingAction","KickUserDailyReached","KickUserWeeklyReached","KickUserMonthlyReached","KICK_REASONS","GEO_LOCATION_KICK_REASONS","StripeComponentModel","_setShowClock","showClock","isBoolean","_showClock","stripeHTML","sessionHTML","StripeComponent","isEmpty","bakedStripeHTML","_onClock","_onCloseCallbacks","getShowClock","_clock","generate","getTimeFormat","sessionID","bakedSessionHTML","AGE_ICON_TYPE","AGE_ANALYTICS_DEFAULT","AGE_ICON_TYPE_CSS_SELECTOR","_iconType","iconType","_responsibleGamblingView","gameManagerService","rgLabel","getAgeResponsibleGamingLabel","minimumAge","_getAgeThemeClass","Check","withRgLabel","_openResponsibleGamblingLink","getMinimumAge","POST_ACTIONS","PLAY","DEPOSIT","AUTHORIZED","TERMINATE","FP_VOUCHER_TYPES","FP_MESSAGE_MODE","POPUP","EMBEDDED_INTERNAL","LoginGameStep","catch","lastLoginView","_textClass","_resultClass","_containerClass","textClass","resultClass","containerClass","renderComponent","_addInputClasses","lastLoginWithRegTimeZone","_getLastLoginWithRegTimeZone","LastLoginDateInTimeZone","lastLoginTextElem","LAST_LOGIN_SELECTORS","CONTAINER","lastLogin","formatToRegulationOffset","formattedText","_getFormattedText","lastLoginText","TITLE","LAST_LOGIN_TITLE_TRANSLATION_KEY","VALUE","_getDateTimeFormat","titleTextClass","resultTextClass","lastLoginTitle","classList","lastLoginElement","lastLoginContainer","getHistoryToken","getDateTimeHistoryFormat","PENDING_TOASTERS_KEY","DISPLAYED_TOASTERS_KEY","TOASTER_UI_CONFIG","globalClass","titleFont","titleSize","titleColor","messageFont","messageSize","messageColor","backgroundColor","progressColor","progressBackgroundColor","buttonColor","buttonFont","buttonTextColor","buttonCornerRadius","LIB_CSS_IDS","closeBtn","cover","toastBody","toastTexts","TOAST_TYPES","TIMED","ACKNOWLEDGE","TRANSITIONS","POSITION","BOTTOM_RIGHT","BOTTOM_LEFT","TOP_RIGHT","TOP_LEFT","TOP_CENTER","BOTTOM_CENTER","DEFAULT_CONFIG","imageWidth","layout","rtl","position","targetFirst","drag","pauseOnHover","resetOnHover","progressBar","animateInside","transitionIn","transitionOut","transitionInMobile","transitionOutMobile","ExternalLinksComponentModel","_handlersContext","_setForceHideCloseButton","forceHideCloseButton","_setLinkConfig","linkConfig","_setAddCloseOption","addCloseOption","_setHandlersContext","_setSource","_setConfigKey","configKey","_setView","_setBackToView","_setOptions","_setNonAuthRequred","_setForceAuth","forceAuth","_setType","_setSessionType","_setFrameLinkClass","_setFrameName","_setSourceLink","sourceLink","_setActionCallback","actionCallback","_setFrameScrolling","scrolling","_setCallbackUrl","callbackUrl","_setPriorityLevel","_initComponentId","EXTERNAL_LINKS_CONSTS","_linkConfig","_handlers","map","gnwpService","isGNWPTemplate","_actionCallback","url","_callbackUrl","_priorityLevel","_componentID","frameName","isRequired","forceAuthValue","getGuid","config","linkClass","viewValue","v","_getDefaultView","_forceHideCloseButton","viewName","srcView","deviceType","isPC","viewConfig","currentBrowser","hybrid","inCasino","isEmbedded","windowSize","height","viewport","screenHeight","width","screenWidth","_windowOptions","ExternalLinksComponentContoller","EXTERNAL_LINK_COMMON_CLASS","ADD_CLOSE_OPTION","_windowCurrentExecutionEventClick","_getRegulationExternalLinkConfig","_openLink","regulationConfig","getExternalLinksConfig","mergeDeep","runConditionsBeforeOpenLink","getSource","getSourceLink","getIsForceAuth","getIsNotAuthRequired","targetView","getCallbackUrl","getCallbackView","getTargetView","openInNewWindowHook","isHybrid","windowService","openInNewWindow","_getLinkURL","linkURLObject","_openInIframe","linkURL","gnwpResponse","_openInSecondWebView","_openInWindow","_forceAuth","_onClose","openOverlay","performGNWPNavigation","GNWP_CONSTS","POST","getFrameName","_subscribePostMsg","_getHandlerByConfig","frame","allow","getIframeAllowAttributeValue","allowFullscreen","getLinkConfig","getConfigKey","src","jsonToQueryString","getFrameLinkClass","_executeFrameGNWP","gnwpSources","GNWPSources","getType","getAddCloseOption","getComponentId","getPriorityLevel","getForceHideCloseButton","awaitForDisplay","onBtnCloseClicked","_getCallbackURL","_createLinkURLObject","_getSourceURL","getGNWPUrl","gnwpURL","tokenObj","_getError","isExternalPage","hybridService","redirect","location","_gnwpService","getGNWPResponse","_getGNWPRequestParams","_getGNWPTarget","GNWPResponse","getErrorMessage","error_code","templateName","getHandlers","h","HandlerName","postMessage","getTargetFrame","contentWindow","postData","handlePostMessage","attrName","setAttribute","overlayEl","getComponentOverlayEl","openAwaitOverlay","overlayContentEl","getComponentContentOverlayEl","OverlayConst","CLASS_NAME","avoidCloseOverlay","closeParams","performCallback","getActionCallback","_postMessageHandler","B2C","MARKETING_FLOWS","REGISTER","REGISTER_IN_LOGIN","MEMBERSHIP_POST_ACTIONS","BACK","UPLOAD_DOCUMENTS_CASHIER","OPEN_BANK_ID","DOWNLOAD_APP","STORE_REGISTRATION_COOKIES_DATA","SHOW_LOGIN","UPLOAD_DOCUMENTS_IV","REGISTRATION_DATA_KEY","OVERLAY_DOM_PROPERTIES","ID_NAME","CONTENT_CLASS_NAME","OVERLAY_COMPONENT_PROPERTIES","OVERLAY_CONTENT_PROPERTIES","TYPES_CLASS_MAP","FLAT","FULL_SCREEN","LIGHTBOX_BACKGROUND_COLOR_CLASS","_responsibleGamingIconsComponent","getResponsibleGamingIconsComponent","LOG_LEVEL","req","obj","getDefault","SERVER","CLOCK_CONSTS","TIMER_UPDATE_INTERVAL","DEFAULT_CLOCK_UPDATE_FROM_SERVER_INTERVAL","INIT_VIEW","MODIFY_VIEW","ACTIVATION_BUTTON_CONFIRM","ELEMENT_CHECKBOX_LABEL","ELEMENT_CHECKBOX","TOUCH_ID_SCREENS","INIT_SCREEN","MODIFY_SCREEN","TOUCH_ID_CTL_OPENED","TOUCH_ID_CTL_CLOSED","seconds","secondsToMilliseconds","milliseconds","GAME_GROUP","BACCARAT","BACKGAMMONN","BLACKJACK","CARRIBEAN_POKER","CRAPS","CRAZY_BLACKJACK","HEAD_TO_HEAD","HI_LO","KENO","LIVE_CASINO","PAI_GOW_POKER","POKER","POKER_TEMPLATE_GAMES","POOLS","POWER_VIDEO_POKER","ROULETTE","ROULETTE_LIKE","SCRATCH_CARD","SLOT","VIDEO_SLOT","VIDEO_POKER","VIDEO_SLOT_BONUS_GAME","FirebaseHandlerBase","firebaseMessaging","forceFallback","_subscriptionParams","_successCallback","getFallbackServiceName","fallbackService","successCallback","errorCallback","startFallback","firebaseElasticService","sendSubscriptionError","getFeatureLabel","optionalParams","getFeatureName","setFeatureParams","toBoolean","getSubscriptionParams","unSubscribe","sendFallbackStarted","LastLoginCompositeController","_switchToSessionTimerWaitInterval","_sessionTimerComponent","_switchToSessionTimerSubscription","lastLoginComponent","sessionTimerComponent","switchToSessionTimerWaitInterval","DEFAULT_SWITCH_TO_SESSION_TIMER_WAIT_INTERVAL","CONTAINER_IDS","LAST_LOGIN","_onLogout","CONTAINER_DIRECTION","SCROLLABLE_CONTAINER_CLASSES","PADDING_INDEX","SCROLL_DIRECTION","UP","DOWN","ScrollableContainerModel","_defaultArrowsPadding","_setComponentID","_setItems","items","_setDirection","direction","_setArrowsPadding","arrowsPadding","_setItemGap","itemGap","_setIsArrowVisible","isArrowVisible","_setScrollingStep","scrollingStep","_setScrollingDuration","scrollingDuration","_setGrid","grid","_setIsCenterItems","isCenterItems","_setIsSwiper","swipeScroll","_setIsDraggable","isDraggable","_setIsHasDots","isHasDots","_setIsExternalScroll","externalScroll","_setSwiperOffset","offset","_items","_isHTMLElementsArray","_direction","_arrowsPadding","_isIntegerArray","_itemGap","_isArrowVisible","_isCenterItems","_isSwipeScroll","_isDraggable","_isHasDots","_externalScroll","_swiperOffset","_scrollingStep","_scrollingDuration","defaultGrid","itemsInRow","gap","_grid","array","containerView","ScrollableContainerController","_swiper","startPosition","movePosition","endPosition","maxDistance","actualDistance","initTransform","transformBounders","leftBounder","rightBounder","activeItem","itemsBoundaries","onActiveChanged","_getContainerView","_appendItems","_getDOMElementByClassName","_touchEvents","e","_onTouchStart","_onTouchEnd","_onTouchMove","_subscribeToArrowsClick","_assignStyle","setStyle","_clearStyles","itemIndex","getGrid","scrollingStatus","_getScrollingStatus","isScrollExist","directions","getDirection","_scrollTo","_getItemsContainer","itemElements","getComponentID","getDimensions","inlineStyle","getItems","_prepareHorizontalView","_prepareVerticalView","_setScrollerStyles","getIsSwiper","_setSwiperView","getIsExternalScroll","getIsCenterItems","getIsArrowVisible","_assignArrowsPosition","_changeArrowVisibility","itemDimensions","_getItemDimensions","containerWrapper","_getContainerWrapper","wrapperWidth","fullWidth","marginRight","marginLeft","itemContainer","multiplier","isRTL","clientWidth","currentItemBoundaries","left","right","itemBoundaries","transform","getSwiperOffset","fullHeight","_getSwiperInitTransform","_setSwiperBoundaries","getIsHasDots","_appendDots","_activeDot","_setTransform","_subscribeToTouchEvents","paddings","getArrowsPadding","padding","join","rule","marginProperty","exceptFn","fullRows","partialRows","lastRowElements","isExcepted","parseFloat","_createItemMarginRule","marginBottom","_createPaddingStyle","getItemGap","_getContainerItemDimensions","_setArrowPositionByDirection","getIsRTL","scrollDirection","arrowPaddings","arrowEl","arrowDimensions","wrapperDimensions","style","top","_getComponentDimensions","bottom","dir","_changeElementVisibility","isVisible","visible","invisible","activeIndex","firstVisible","lastVisible","_getScrollDirectionValue","scrollLeft","scrollWidth","scrollTop","scrollHeight","clientHeight","_arrowDOMEvents","steps","getScrollingStep","scrollingSize","_getScrollingSize","_smoothScrolling","_getSwipeItemByDirection","_swipeToActive","_getItemBoundaries","scrollSize","res","stepInterval","ceil","getScrollingDuration","restSize","scrollStepSize","scrollStepFn","animationOn","removedItem","_removeItemHandler","itemEl","resolver","_removeItem","domEvent","_onItemRemoved","toggleClass","_removeSwiperView","clientX","touches","lastPosition","stopScrolling","_getActiveItemIndexByTransform","_swipeTo","itemBoundary","requestId","stepSize","stepFn","cancelAnimationFrame","step","nextPosition","requestAnimationFrame","moveDistance","abs","prevActualDistance","dotContainer","firstChild","dotEl","dots","BaseLayout","analyticObj","_stepParent","getEnvironment","getIsReal","getGameType","getGameName","ExternalLinksForgotHandler","_handleOpenWebLogin","VOUCHER_STATE","INIT","GAMES","VOUCHER_VIEW","EXPIRATION_TYPE","DAY","EXPIRED","CSS_CLASSES","VOUCHER_EXPIRATION_CLASS","VOUCHER_INFO_SELECTOR","VOUCHER_CLOSE_SELECTOR","VOUCHER_NEW_CLASS","VOUCHER_EXPIRATION_SOON_CLASS","VOUCHER_EXPIRATION_DAY","VOUCHER_EXPIRED_CLASS","VOUCHER_CONTAINER_CLASS","VOUCHER_CONTAINER_SELECTOR","TRANSLATIONS","VOUCHER_NAME","VOUCHER_DESC","VOUCHER_REWARDS_AMOUNT","VOUCHER_REWARDS_BALANCE","VOUCHER_BALANCE_PREFIX","VOUCHER_EXPIRATION","FP_VOUCHER_TYPE_NAMES","FreeSpin","FreeJackpotSpin","FreeJackpotPlay","FP_VOUCHER_ICONS_CLASSES","FP_VOUCHER_BACKGROUND_CLASSES","COMPONENT","STATE_TEMPLATE","STATE_DISABLED","STATE_ENABLED","ICON_SELECTED_BACKGROUND","_gameType","openGame","gameBody","STOP_CONFIGS","ConfigService","_configs","_pushQueryStringParameters","queryParams","_convertToObject","getQueryParameters","_pushConfig","_cleanConfig","val","miniObj","reduceRight","prev","idx","arr","newObj","level","_deleteByPath","object","path","currentObject","nestedProperties","lastProperty","pop","configValues","unshift","ToasterBaseComponent","_toasterHandler","mergedOptions","merge2Func","fn1","fn2","onOpened","_onOpened","onClosed","_onClosed","onClicked","_onClicked","toasterService","showToasterFromComponent","BaseOptionsModel","_options","RestrictionsGameStep","gamesInformationService","getGamesInfo","gamesInfo","gameInfo","_showGenericRestrictionMessage","restriction","isGameAllowedToPlayReal","showUserMessage","RestrictionMessages","showGenericMessage","analytic","expirationDate","restrictionExpirationDate","_formatDate","TYPES","templateView","UK_STRIP_COMPONENT_SELECTOR","UkGameStripeComponent","_netPositionController","NetPositionController","gameSessionTimer","GameSessionTimerController","isMobileOS","clockComponentWrapper","_getClockComponent","onGameRoundEnd","clockComponent","componentFactoryService","createComponent","OntarioResponsibleGamingIconsController","getSafeToPlayURL","ICON_TYPE","SYMBOL","TEXT","ICON_TYPE_CSS_SELECTOR","COMBaseRegulation","USBaseRegulation","_getRegulationType","shouldRefreshTokenOnAppOpen","logout","shouldShowLogoutMessage","isMiniOrbit","messages","Native","_idd","_parent","parent","getParams","onHybridDirectCall","serviceFuncName","jsonParams","serviceName","autoGeneratedCBID","allParams","safeJSONandDecode","extractFunctionName","_extractFunctionConvenstion","payloadForHybrid","service","callToHandler","NativeIOS","json","webkit","messageHandlers","METHOD_NAME_IOS","NativeAndroid","WrapperInterfaceCGP","encodeURIComponent","NativeIOSPoker","NativeIOSSport","HybridFactory","isAndroid","isIOS","inPoker","inSport","HybridService","_wrapper","_threedtouchfeature","_touchidfeature","_fabricfeature","_pushfeature","_ondemandfeature","_ondemandnyxfeature","_webviewmanagerfeature","_hybridinfofeature","_lexisnexisfeature","_depositwidgetfeature","_appflayerfeature","_firebasefeature","_bDisplayWebView","_allCompiledGamesMetadata","_nLocalHostPort","_strSmartLinkData","_initWrapper","_initFeatures","_updateHybridCompiledGames","initHybrid","onDisplayWebView","alert","openMail","_closeGame","_onStopProgressBar","tokenParams","queryStringDetectorService","tokenHandler","getTimeOut","gamesMetadata","port","setCompiledGamesMetadata","isHybridSuportHtmlCompiledGames","isCompiledHtmlGame","hasOwnProperty","ondemand","isOnDemandStandalone","navigate","isOnDemandStandAloneGameRunning","isOnDemandHtmlGame","canHandle","sharedFolder","saveOnDemandLoadedGame","isOnDemandLoadedGame","getCompiledGameMetadata","hostname","pathname","protocol","host","href","getLocalHostAndPortForOnDemand","reg","feature","fearureInstance","initFeatures","_saveFeature","getHybridWrapper","initHybridDirectCall","msgToHybrid","_getFeature","dataDecode","objParams","featureName","getPushFeature","isEnable","getPushActions","getThreeDTouchFeature","_checkThreeDTouch","_displayWebView","_clearHybridDisplayTimeOut","clearHybridDisplayTimeOut","getShortcutLaunch","shortcut","runAction","initOndemandfeature","str","alertProperties","rotation","bVal","txt","srcurl","convertToAbsoluteLink","buildExternalLinkForEmbeddedHybrid","includes","link","absoluteLink","isAbsoluteLink","getLocationOrigin","cbFuncName","privatedata","publicdata","ver","inidFeature","b","setStartOndemand","folderStruct","headerheight","dt","enable","xp","yp","xl","yl","webviewProperties","smartLinkData","appflayerfeature","shourtcutsLaunch","shortcutData","caption","isTouchIdSuported","getModel","setEnableRes","bEnable","isDeviceTouchEnable","testSafari","webId","webType","setEventType","addCustomData","depositWindowData","errorDetails","isWebviewmanagerfeature","isNativeSupportSecondWebView","isNativeSupportSafariCashier","getParamsForCasheir","getUrlSchemeToOpen","openCasheir","infoFeature","getInfoFeature","getUrlScheme","reload","getInfoForDisplay","isDebugMode","getAppleID","createEvName","addEvKeyVal","getEv","ev","marketingData","getLexisNexisInfo","setDepositWidgetSupported","isDepositWidgetSupported","appsFlayerData","getAppMareketingData","fireBaseData","isNotHybridConnection","wrapperIsNull","cmsSource","getCmsSourceIfValid","startsWith","removeLocalhost","strReplace","getReplaceLocalhost","redirectFullURL","getProtocol","getHost","dataforHybrid","isFirstShow","showHybridPopUp","TouchIdComponentModel","TouchIdBaseScreen","_html","screen","bChecked","TouchIdAutoInitScreen","_checkboxToggle","_butNext","_setHtml","onInitScreenShow","getTokenFromSrv","TouchIdModifyScreen","checkTouchEnable","strToggle","TouchIdController","_screenType","_currentScreen","_onTryAgainSkip","_onCheckTouchEnable","_onNativeCancel","onNativeCancel","onTryAgainSkip","onCheckTouchEnable","screenType","setParent","_setHtmlScreen","onClosedByClicked","LOGIN_BUTTONS_SELECTORS","LoginButtonsDependenciesFactory","button","_createButtonClickObservable","fromEvent","buttonsView","ENVIRONMENTS","LoginButtonsComponentController","_environment","_showRegisterButton","_gameName","_isRealGame","_marketingDataFunctions","_dependenciesFactory","_loginClickSubscription","_registerClickSubscription","env","showRegister","gametype","marketingDataFn","dependenciesFactory","DependenciesFactory","_renderComponent","_subscribeToLoginButtonClick","_subscribeToRegisterButtonClick","loginButtonHtmlElement","_getButton","createLoginButtonClickObservable","countryService","checkIfShouldRedirect","tryToRememberMe","marketingDataFunction","createRegisterButtonClickObservable","executeMarketingDataFunction","forceHideCloseButtonInMembership","buttonId","pcView","SpainGameStripePC","_setValueFor","sessionBalance","sessionTotalBet","sessionTotalWin","sectionName","currencyService","formatMoney","mobileView","SpainGameStripeMobile","_appendClock","_setBalanceValue","_onBalanceUpdate","walletService","getBalance","SPAIN_STRIP_COMPONENT_SELECTOR","SpainGameStripeComponent","_innerStripeComponent","Observable","publisher","_publisher","onNext","onError","onCompleted","observer","ObservableFactory","timeoutInMilliseconds","_getTimeInMilliseconds","intervalInMilliseconds","_services","servicePrototype","serviceDescriptor","serviceInstance","dependenciesInjected","injectDependencies","MY_ACCOUNT_POST_ACTIONS","QUICK_DEPOSIT","CASINO","EXTERNAL_URL","INTERNAL_URL","OMG_POST_ACTIONS","SHOW_ME","CLOSE_ME","OPEN_REAL_GAME","OPEN_ANONYMOUS_GAME","TARGET_VIEWS","REQUEST_METHODS","GET","gameJackpotView","GameJackpotComponentController","gametypeid","jackpotValue","jackpotFeedsService","getJackpotAmountInCentsByGame","_displayJackpotValue","_onJackpotsUpdated","gamesJackpots","_liveFeedContentElement","amount","screenLockView","ScreenLockComponent","RichComponentController","_campaignId","_setCampaignId","campaignid","externalLinkEl","_state","_isRichPageAllowed","_openRichExternalLinksHandler","externalLinkComponent","marketingCampaignId","_showMessageObservable","isAnonymousPlayAllowed","_startTimeout","_showRestrictedGameMessage","_goToLobby","getAffiliatesGoToLobbyInterval","fromTimeout","_clearTimeout","_showGoToLobbyMessage","ReconnectHelper","_retryFunc","_retryIntervals","_currentIntervalIdx","_currentRepeatCount","_numberOfRetries","_reconnectTimerObservable","_observableFactory","_serviceName","retryFunc","retryIntervals","_callConnectFunction","currentInterval","durationInSeconds","repeatTimes","GameBodyComponentBase","gameProviderCssClassName","_appendAdditionalClasses","additionalCssClasses","classes","cls","isResizable","_isGameResizable","_resizeGame","getComputedSize","availableSpace","_computeAvailableSpace","gameMax","gameSize","output","srcWidth","srcHeight","maxWidth","maxHeight","ratio","min","calculateAspectRatioFit","_setGameBodySize","_setGameInitialSize","FreePlayVoucherList","values","_vouchers","reset","newValues","_sort","voucher","delta","updated","_updateById","newValue","updatedValue","wasAdded","_findIndexByID","toDeleteEntry","voucherID","oldVoucher","updatedVoucher","prop","toAdd","sort","v1","v2","ExpirationDate","getTime","initial","merged","VoidGamePostMessageListener","DETAILS_VIEW","ANALYTICS_CATEGORY","DOM_OBJECTS_IDS","DetailHistoryComponentController","_gameBodyComponent","_analyticsLabel","historyRecordData","gameBodyComponent","gameBackgroundImageUrl","_gameInfo","_getAnalyticsLabel","backgroundImage","historyDate","DateInTimeZone","_injectAgeResponsibleGame","_injectResponsibleGameIcons","_injectSessionTimer","_analyticsBind","closeCurrentDetailHistory","showAgeResponsibleGameInDetailedHistory","ageResponsibleGame","showResponsibleIcons","responsibleIcons","placement","GermanyResponsibleGamingButtonPlacement","inDetailedHistory","closeLastOverlay","analytics_label","attachDetailHistoryCloseHandler","_closeDetails","CB_FN","STATUS_BAR_DATA","ODR_GAMES","gameSessionTimerView","_tickingInterval","_initUnixTime","_currentHMS","_valueDOM","_bakeHTML","_tickClock","namedSetInterval","currentHMS","_secondsToHMS","secs","z","n","_valueSelector","receivedFireBaseValueWithoutRoundEndCounter","FLAGS","FEATURE_ENABLED","ROUND_END_EXISTS_FOR_GAME","RECEIVED_ROUND_END","LAST_TIME_RECEIVED_ROUND_END","NET_POSITION_LAST_RECEIVED_VALUE","TOTAL_NET_POSITION_RECEIVED_COUNT","_setAmount","_resetFirebaseGameTypeForSessionAmount","_getCurrentFlags","_resetQueueValues","accountData","IsVip","_sendElasticEvent","_isLessThenTimeFromLastEndRound","_checkIfToSetAmount","netPosition","currentNetPositionValue","_receivedNetPosition","netPositionService","initializeNetPositionOnGameType","CGPEventValue","CANADA_ONTARIO_STRIP_COMPONENT_SELECTOR","CanadaOntarioGameStripeComponent","showNetPosition","clockComponentContainerSelector","responsibleGamingIcons","FALLBACK_HANDLERS","WALLET","FREE_PLAY","ItalyRegulation","_tempAccountMessageHelper","tempAccountMessageHelper","showTempAccountMessage","DKResponsibleGamingIconsController","openSelfExclusion","openSelfTest","TEMP_ACCOUNT_PARAMS","SpainRegulation","_msgParams","_selfExclusionLink","selfExclusionLink","isDocUploadRequired","IsDocUploadRequired","RegulationStatusId","getTempAccountParams","PortugalRegulation","_getTempAccountParams","UKRegulation","_getAccountData","IdVerificationStatus","AddressVerificationStatus","useControlCenterForReminderInterval","RealityCheckDataIntervalInMins","getReminderInterval","updateRealityCheckDataUrl","getUpdateRealityCheckDataUrl","http2Service","post","updateTokenData","set","controlCenterReminderInterval","localStorageReminderInterval","totalSeconds","isMiniCip","stopCurrentGameAutoplay","orbitComponentRenderService","showTimeSpentReminderWithDropdown","timerType","TSR_TYPE","playingTime","RomaniaRegulation","subTitleText","showToasterNotification","MessageID","now","Type","Title","SubTitle","DurationInSec","SHRegulation","MaltaRegulation","GibRegulation","NewJerseyRegulation","NewJerseyResponsibleGamingIconsController","onChildElementEvent","DelawareRegulation","CanadaOntarioRegulation","hybridVersionHandlerService","showUserWrongAppMessage","getSmartLinkData","getWrongLocationDetectionPath","STATE_POPUP_KEY","Store","get","showLocationPopup","onStateSelect","onStateNotInListClick","onStateNotInListClickHandler","onMessageClosed","stepsBeforeOpenLoginAndRegistration","SDK_VERSION","LoginErrorHandlerBase","errorProcessingResult","loginResponse","_handledErrorCode","module","exports","CSS","InactivityTimeoutSettingsController","_currentSessionTimeoutSettings","_oAuthService","getCurrentSessionTimeoutSettings","_bindOptions","_setSelectorLabelText","_languageService","possibleSessionTimeoutValues","possibleValues","_getPossibleSessionTimeouts","_getSelectorEl","option","currentSessionTimeout","selectedIndex","_onSaveBtnClicked","forceAnalytic","selectedValue","Number","setCustomSessionTimeout","messageView","FreeStepMessageComponentController","closeButtonHtml","CloseButtonNavbarPart","_onCloseCallback","onCloseCallback","setInnerHtml","DIRECTION","LAYOUT_BEHAVIOUR_CONFIG","vertical","vouchersLayout","scrollingOptions","gamesLayout","hasBack","horizontal","FP_CSS_CLASSES","FP_LAYOUT_STATE","FP_ANALYTICS","FreePlayComponentModel","_layoutConfig","_layoutState","_allowOpenGameFn","_selectedVoucher","_height","_setLayoutConfig","layoutConfig","setDirection","_setMessageHeight","_setVouchers","vouchers","setLayoutState","_setAllowOpenGame","allowOpenGameFn","FPVouchersComponentModel","_containerRef","_title","_scrollingOptions","setScrollingOptions","setVouchers","_setContainerRef","_setTitle","FreePlayVoucherComponentModel","_voucher","_setVoucher","setState","MILLIS_IN_MINUTE","MILLIS_IN_HOUR","MILLIS_IN_DAY","FreePlayVoucherComponentController","_expInterval","_bakeVoucher","_changeState","getVoucher","expiration","_getVoucherExpiration","showRemaining","precision","voucherValue","OriginAmount","CurrentBalance","voucherHTML","_formatVoucherUnit","FreePlayTypeId","SpinBetAmount","balance","_getVoucherBalanceText","voucherName","voucherDesc","fpIconClass","fpBgClass","_handleExpirationStyle","preventDefault","getContainerRef","onVoucherSelected","expContainer","onVoucherExpired","isInit","injectIntoCurly","fp_voucher_remaining_prefix","isNumber","_isDateInvalid","timeToLeft","_convertTimeToExpiration","restTime","spinBetAmount","currencyOptions","roundValueIfNoDecimals","result","vouchersView","FPVouchersComponentController","_vouchersContainer","voucherHtml","voucherTitle","getTitle","_injectVouchersList","onSizeChanged","getVouchers","voucherId","animation","deleteIndex","_getVoucherIndex","removeItem","newIndex","voucherIndex","rej","_getVouchers","voucherList","vouchersContainer","voucherComponent","VoucherComponentController","_createScrollableContainer","instance","ScrollableContainer","getScrollingOptions","activeChanged","getVoucherByVoucherID","FPGamesComponentModel","_games","_fpType","_hasLimit","setGames","setFPType","fpType","hasLimit","ScrollingContainerStyle","MOBILE","PC","FP_GAME_ITEM_CLASSES","FP_GAMES_CONTAINER_CLASS","FP_GAMES_SHOW_MORE_CLASS","gamesView","FPGamesComponentController","_gamesContainer","_gameComponents","gamesHtml","viewportDimensions","getWindowInnerDimensions","windowHeight","_injectVoucherGames","fpTypeID","FP_GAMES_LIST_CONSTS","isLoading","_onLoading","getGames","setHasLimit","mappedGames","_createGameComponents","gameComponents","gameComponent","_createScrollableGamesContainer","ts","performance","loadingFn","_appendScrollableGamesContainer","gamesContainer","shouldShow","getHasLimit","gameItemComp","GameItemComponentController","gameData","itemClass","getFPType","onGameSelected","buttonCaption","_getMoreOrLessCaption","btnEl","_toggleMoreLessBtn","oldHasLimit","updateDisplayState","translationKey","allItems","_createShowMoreLessButton","_createContainerStyle","FreePlayComponentController","_modeSetup","_initDirection","freePlayContainerHTML","onVoucherRemoved","FREE_PLAY_CONSTS","_updateDirection","_updateModeStyle","_removeContainers","_createVouchersContainer","handleLock","isTablet","isPortrait","screenLock","isHasHeader","_onBackBtnClicked","_isNoVouchers","_showNoRewards","isGameMode","getLayoutState","_getLayoutByConfig","removeVoucher","selectedVoucher","disableComponent","_subscribeUserEvents","gameKey","game","_createGamesContainer","_isVoucherExpired","gameTitle","_handleOpenGameRestrictions","freePlayId","freePlayType","CompanyID","freePlayOriginalAmount","allowGameFn","getAllowOpenGame","analyticsObj","curly","skipDefault","updateGames","_getVoucherContainerTitle","_onVoucherContainerCreated","device","directionLayoutConfig","getLayoutConfig","fpContainer","isVouchersOnly","vouchersListClass","gamesListClass","hasBackClass","gameModeTogglesHtml","GameModeToggleNavbarPart","_isFreePlay","isFreePlay","_switchGameModeCallback","switchGameModeCallback","_analyticsTrigger","analyticsTrigger","_setCheckboxElementValue","_subscribeToggleAction","NavbarConst","checkbox","_getCheckboxElement","elementSelector","send","navbarToggle","toggleCircle","realTextElem","demoTextElem","navbarCheckbox","toggleLeftBgElem","toggleRightBgElem","_cleanStyle","titleTextElem","_getFreePlayTitleById","getFreePlayTypeID","toggleEl","AnalyticsTrigger","getAnalyticsObject","fullScreenButtonHtml","FullScreenButtonNavbarPart","toggleFullScreen","isFullScreen","closeFullScreen","sessionIdHtml","GameSessionIdNavbarPart","onclick","freePlayModeToggleHtml","FreePlayToggleNavbarPart","_freePlayData","freePlayIndicatorHtml","FreePlayIndicatorNavbarPart","_referrerId","_createFreePlayIndicator","_openFreePlayDirective","removeChildComponent","_fpMessage","_fpIndicator","gameSource","_getGameReferrer","_handleFPOpenGame","langService","click","navbarHtml","GameNavigationBarComponentController","_setParameters","_buildView","_marketing","_showGameModeToggle","_defaultIfNullOrUndefined","showGameModeToggle","_showCloseButton","showCloseButton","_showAge","showAge","_showFullScreenButton","showFullScreenButton","_showLogin","showLogin","_loginProperties","loginProperties","_getDefaultLoginProps","_cashierOpenType","cashierOpenType","_showGameSessionId","showGameSessionId","_showFreePlaySelection","showFreePlaySelection","navBarProps","getNavbarProps","login","_createClock","_createAge","_createSessionTimer","_createGameModeToggle","_createFullScreenButton","_createCloseButton","_createGameSessionId","_createWelcome","_createResponsibleIcons","freePlayIndicator","_gameSessionId","silentMode","gameModeToggle","_switchGameMode","inGameModeSwitching","_fullScreenButton","exitFullScreen","age","navbarElement","GenericRealityCheckComponentModel","_setElapsedTime","_setSessionBalance","_elapsedTime","_sessionBalance","generic_view","session_cooldown_view","GenericRealityCheckComponent","isSessionCooldownEnabled","elapsed_time","_formatTime","getElapsedTime","session_balance","getSessionBalance","session_balance_description","getSessionBalanceDescription","GermanyResponsibleGamingIconsController","_placement","renderGermanyResponsibleGamingButtons","RegulationStatusIdMap","IS_GAME_POPUP_APPROVED_STORAGE_KEY","GermanyRegulation","_isGamePopupShown","_IsDocUploadRequired","_isGamePopupApproved","_shouldShowGamePopup","isLoginFromRegistration","recentlyPlayedService","getRecentlyPlayedList","recentlyPlayedGames","aiListService","getAIList","aiList","aiGameTypesArray","_gamePopupShownCallback","gamePopupApprovedCallback","_userApproveGamePopupCallback","continueGAObj","messageConfig","cssClass","continuePlayCurrentGame","isGameRunning","_realityCheckShouldBeDisplayedInGame","closeRunningGame","getRealityCheckData","_getRealityCheckMessageText","_openRealityCheckMessage","_initGamePopup","getCurrentRunningGameCompany","shouldShowRealityCheckMessageWhileGameIsOpen","realityCheckData","componentConfig","TotalNetLoss","del","WELCOME_DEFAULT_PROPERTIES","LAYOUT_PATTERN","BUTTONS","loggedin","FORM","LAYOUT_TYPE","LOGIN_KEY","LOGGEDIN_KEY","BOTH","WelcomeModel","_map","showBalance","showRememberme","showMenu","showCashier","showForgotUsername","showUsername","showUserBadge","postCTAClickedFn","postLoginShowGreeting","preLoginLayoutPC","preLoginLayoutMobile","postLoginLayoutPC","postLoginLayoutMobile","_setLayout","_setLayoutType","layoutType","_setShowBalance","_setShowRegister","_setShowMenu","_setGameType","_setGameName","_setGameIsReal","_setMarketingData","_setPostCTAClickedFn","postCtaClicked","_setEnvironment","_setShowRememberme","_setShowCashier","_setSilentMode","_setOverlayPriority","overlayPriority","_setShowUsername","_setShowUserBadge","_setCashierOpenType","_setIsDirective","_setShowForgotUsername","_setPostLoginShowGreeting","_setPreLoginStyleMobile","preLoginStyleMobile","_setPreLoginStylePC","preLoginStylePc","_setPreLoginLayoutPC","preLoginLayoutPc","_setPreLoginLayoutMobile","_setPostLoginLayoutPC","postLoginLayoutPc","_setPostLoginLayoutMobile","_setStyleSelectors","_layout","WelcomeConst","toUpperCase","fnName","_marketingDataFn","_postCTAClickedFn","_gametype","_silentMode","_overlayPriority","_isValidLayoutParam","_layoutType","_isValidShowParam","_showBalance","_showUsername","_showUserBadge","_showRegister","_showMenu","_showRememberme","_showCashier","_showForgotUsername","_postLoginShowGreeting","_preLoginStyleMobile","preLoginStylePC","_preLoginStylePC","_preLoginLayoutPC","_preLoginLayoutMobile","_postLoginLayoutPC","_postLoginLayoutMobile","showParam","getLayout","getLayoutType","_preLoginShowRegister","WelcomeComponentController","_activeComponent","_getPreLoginConfiguation","loginBtn","registerBtn","isMobileNotTablet","_addClassToElement","LoggedinComponentController","ComponentController","getMapByState","silly","_setActiveComponent","getPreLoginStylePC","getPreLoginStyleMobile","_clear","classToChange","loginBtnDimensions","registerBtnDimensions","injectStyleToDOM","INTEGRATION","elem","CASHIER_ONLY","INLINE","LoggedinModel","POST_LOGIN_LAYOUT_CLASSES","GREETING","DEFAULT","FULL","_layoutsContext","_layouts","_activeLayout","_initLayouts","fnLayout","_isLayoutExist","layoutName","_changeLayout","getPostLoginLayoutPC","LoggedinConsts","getPostLoginLayoutMobile","_getLayoutsContext","layoutInstance","stepParent","getSilentMode","getShowCashier","getShowMenu","getShowBalance","getShowUsername","getCashierOpenType","showGreeting","getPostLoginShowGreeting","getShowUserBadge","_setLayoutClass","GameItemComponentModel","_onClickFn","_itemClass","_playBtnText","_buttons","_show","_jackpotRef","setShow","_setGame","_setOnClickHandler","_setFPType","_setItemClass","_setPlayBtnText","playBtnText","_setButtons","jackpotRef","GAME_ITEM_CLASSES","GAME_ITEM_VIEW","_gameDefaultIcon","getGameDefaultIcon","getGame","_bakeGameItem","_injectButtons","_setGameThumbnail","_injectJackpot","getShow","cssClasses","getItemClass","gameItemHTML","gameId","_getFreePlayBindingProps","getButtons","btnOptions","_injectButton","textKey","getPlayBtnText","onClick","getOnClickHandler","btnAreaEl","fpThumbClass","jackpotComponent","setJackpotRef","img","_getResolvedGameImagePath","resolveGameImagePath","images","icon","ReminderSettingsModel","_initOptions","isStored","REMINDER_SETTINGS_SELECTORS","ELASTIC_ACTION_NAMES","ReminderSettingsController","_initModel","REMINDER_STORAGE_KEY","Cid","optionsObj","intervals","_getIntervals","storedReminderValue","_getReminderKey","reminderIntervalAsNumber","_subscribeDOMEvents","setOptions","getReminderIntervals","reminderIntervals","ddlReminder","optionItem","reminderValue","selectedReminder","reminderText","reminderInfo","openType","getComputedStyle","_sendElasticData","RegulationID","getRegulationCode","CGPEventValueAsNumber","setTarget","_getReminderValue","_onCancelBtnClicked","_onSaveReminder","reminderOptions","reminderIntervalInSeconds","HybridInfoModel","_debugMode","_autologinToken","_sessionTimerOffset","_reload","_url","_urlType","_ListInfo","checkData","_updateAllKeys","_addKeys","_addToList","defaultVal","HybridInfo","_HybridService","_initInfo","_updateKey","getAllInfo","updateData","setUrl","autologinToken","getAutologinToken","runAutologin","userinfo","getSessionTimerOffset","getUrl","getReload","getInfo","updateAllInfo","getFullVersion","hybridSrv","getBuild","getVal","count","SwedenResponsibleGamingIconsModel","_setIconType","SwedenResponsibleGamingIconsController","iconTypeClass","getIconType","openLimits","AboutComponentModel","_setTaxID","taxID","_setCID","cid","_setClientVersion","clientVersion","aboutView","AboutController","getTaxID","_prepareHelpText","showSessionBalanceInAboutBox","openSessionsService","getPlayerOpenSessionsBalance","showHelpInAboutWindow","_translateAboutHelp","aboutHelpTranslation","anchorStart","anchorEnd","GEO_LOCATION_COMPONENT_CONSTS","HYBRID","GeoLocationController","UserScrollDetector","_getScrollY","scrollY","_now","_scrollCheckingInterval","_lastScrollY","_lastScrollTime","_onScrollCallback","_scrollCheckTimer","scrollCheckingInterval","onScrollCallback","_setLastScrollTime","_setLastScrollY","_startScrollCheckTimer","_stopScrollCheckTimer","UserActivityDetector","_userScrollDetector","_userActivityDetectionInterval","_onUserActivityCallback","_userActivityEventsSubscription","_userActivityDetectionTimer","userActivityDetectionInterval","onUserActivityCallback","userScrollDetector","setOnScrollCallback","setLastTimeUserPerformedAction","_startUserActivityDetectionTimer","userActivityEvents","getLastTimeUserPerformedAction","getUserActivityDetectionInterval","_unSubscribe","BaseFallbackHandler","_isActive","WalletFallbackHandler","_subscription","_eventInstances","_uri","_refreshInterval","_lastReceivedVouchers","uri","refreshInterval","_startWalletRefresh","walletResponse","walletData","_handleWalletData","_handleFreePlay","Balance","AvailableMoney","Currency","CurrencyCode","RealMoneyBankroll","FreePlayList","freePlay","_convertToVoucher","Id","safeStringToNumber","CurrAmount","Winnings","FreeBetWinning","FreePlayTypeID","OrigAmount","FreePlayExpirationDate","MaxBetAmount","GameTypeIDList","GameTypeList","_getGameTypesFromWalletFreePlay","gameTypeList","gameTypes","GameType","newReceivedVouchers","_convertWalletFreePlays","removedVouchers","_extractRemovedVouchers","newVouchers","newVoucher","_receiveWallet","FallbackName","DkStructuredLogging","_getLogger","currencyType","getCurrency","netLoss","loggedInTime","fullMessage","errorDescription","ErrorDescription","DkRegulation","_structuredLogger","_selfTestLink","selfTestLink","showTimeSpentReminderWithBalance","totalNetLoss","isInGame","realityCheckMessageSuccess","realityCheckMessageError","SwedenStructuredLogging","limitsData","_buildLoginSuccessEvent","errorMessage","_buildLoginErrorEvent","limits","DefinedDepositLimits","limit","limitType","limitAmount","Amount","DEPOSIT_LIMIT_TYPES","SwedenRegulation","_selfExlusionLink","KickType","KickReasonId","_shouldShowMessage","shouldShowMessage","isGameRunningInFP","isGameRunningInFreePlayMode","shouldShowTimeLimitMessageWhileGameIsOpen","getLoginType","getSourceProductPackage","closeNotificationListenerGA","hideNotificationListenerGA","extractTokenProperty","messageParams","_getLoginMessageParams","loginMessageError","ErrorMessage","loginMessageSuccess","toastObj","formatAmount","net_loss","depositLimit","daily_limit","weekly_limit","monthly_limit","lossMsgSchema","NetherlandsResponsibleGamingIconsController","NetherlandsRegulation","webpackContext","webpackContextResolve","__webpack_require__","o","code","ExternalLinksCashiertHandler","ExternalLinksCommonLinkHandler","ExternalLinksDocumentUploadHandler","postDataObjLower","toLowerCaseKeys","actionid","_handleCashierOpening","_handleQuickDeposit","ExternalLinksForgotPasswordHandler","ExternalLinksForgotUsernameHandler","ExternalLinkMembershipHandler","getIsHasActionCallback","openBankId","AppUrl","getAppDownloadPageURL","StoreRegistrationCookiesData","_handleUploadDocumentsIv","ExternalLinksMyAccountHandler","navView","gameid","origininformation","originDeepLinkID","richPageUrl","getRichPageUrl","specificnavigation","getLobbyUrlLink","_openInternalLink","Url","getDomain","extractDomain","ExternalLinksOMGHandler","actionId","_sendAnalytic","Width","Height","addAttrToIframe","setSize","omg","GameId","campaignID","internalLink","getRedirectInternalPageUrl","k","PENDING_APPS_POST_ACTIONS","ExternalLinksPendingLoginHandler","Token","runAutoLogin","handleOpenWebLogin","ExternalLinksPendingPlayHandler","executeAction","_clearOpenGamePendingAction","clearPendingAction","RICH_POST_ACTIONS","ExternalLinksRichHandler","ExternalLinksSportHandler","AB_TESTING_DATA_LOCAL_STORAGE_KEY","AB_TESTING_ANONYMOUS_PLAYER_ID_LOCAL_STORAGE_KEY","AbTestingService","_cachedABTestingData","_anonymousPlayerId","_anonymousPlayerData","Features","AnonymousPlayerId","_resetCache","_readAbTestingDataFromToken","_updateAnonymousAbTestingData","_resetCacheData","featureToggle","isAnonymousPlayerSupportEnabled","_getLocalStorageAnonymousPlayerId","request","brandId","subBrandId","countryCode","getCountry","anonymousPlayerId","getTestsForAnonymousPlayerUrl","_saveLocalStorageAnonymousPlayerId","abTestingDataTokenProperty","_saveLocalStorageABTestingData","localStorageABTestingData","_getLocalStorageABTestingData","abTestingData","PROD_DATA_LAYER_NAME","AnalyticsService","_GTMDataLayer","_isInitialisedByB2C","GTMContainerID","UATrackingID","GTMDataLayerName","_initGTMDataLayer","cgpIsAuthenticated","cgpIsRegistered","cgpCID","cgpIsFTD","cgpPlayerStatus","cgpLoginSessionID","dataLayerName","GTMContainerId","pushDataToDataLayer","firstScript","newScript","dataLayer","async","parentNode","insertBefore","log","getToken","cgpIsVip","b2cData","_getB2CData","sessionParamsMsg","PlayerStatus","IsFTD","IsRegistered","IsAuthenticated","cgpExperiment","_createDataLayer","_loadGTM","_selectPlatformDataLayerIfExists","_initGTM","dataToSend","CGP_EventCategory","CGP_EventAction","CGP_EventLabel","CGP_EventValue","omitStructuredLogger","_sendAnalyticsToElasticSearch","_resetDataLayer","valueAsNumber","_getDataLayerObject","cgpUATrackingID","_getCGPVersionInfo","_getCGPEventData","cgpProductPackage","cgpVersion","ga","getGlobalProperty","getAll","_getGoogleSessionObject","BET_REJECT_REASON_ID_MAP","BonusAbuseParkingMoneyInSportAndPokerService","_showBonusAbuseParkingMoneyMessage","contentText","RejectionReasonId","RealMoneyBalance","GameTypeID","contentAlign","MDP_CONSTS","showPopupAboveSecondWebViewHybrid","CashierProxyService","getCashierService","getProductPackage","openWithdraw","marketingParams","resolveByCallback","openVerifyId","openOldCashier","RETRY_INTERVALS","ClockService","_serverUpdateInterval","_timeData","_updateOnce","_regulationOffset","_retryGetClockHelper","clockUpdateFromServerInterval","getClockUrl","_getLocalDate","getLocalDate","_onInitComplete","_readServerClock","_tryReadServerClock","_removeRetryReadClockHelper","_createRetryReadClockHelper","_increaseTimer","utcTime","getClockLocalization","serverTime","_restartTimerInterval","regOffset","useLocalTime","_getClockLocalization","getRegulationOffset","response","setServerTime","DateTimeUtcFormated","setRegulationOffset","RegulationOffsetInMilliseconds","_timeUpdatedFromServer","dateFormattedToRegulation","CompanySelectorService","regulation","getServicesFactoryCallback","companyImplementationReader","getCompany","specificRegulatedCompany","regulatedCompanySpecificImplementationReader","tryApplyRegulation","regulatedCompanyDefaultImplementationReader","applyRegulation","ComponentTesterService","componentCreateMapper","FreePlayComponent","ScrollableContainerComponent","createHTMLElements","TouchIDComponentController","skipOverlay","componentName","componentMapper","DomainDetectionService","_verifyDomain","domains","_isDomainApproved","_cleanDom","currentDomain","some","domain","endsWith","getBody","getHref","EvolutionService","useNewIntegration","supportOneStopShop","CURRENT_RUNNING_GAME_TAB","CURRENT_RUNNING_GAME_TYPE","MaxOneOpenGameService","_fromIntervalSubscription","_onOauthChangeSubscription","_onGameOpenSubscription","_onCloseGameSubscription","_onCloseAllOverlaySubscription","_onBrowserPageHideSubscription","_startCheckingGameRunningInAnotherTab","shouldPreventMoreThanOneOpenGame","isGameRunningInAnotherTab","_onOauthChange","_onGameOpen","_onCloseGame","_onCloseAllOverlay","_onBrowserTabUnload","_clearStorage","getCurrentBrowserTabId","_isGameRunningInTheCurrentTab","getCurrentRunningGameType","runningTabId","_getRunningGameTabId","GamesCorrelationService","_cachedCorrelatedGames","_getCorrelatedGamesUrl","getCorrelatedGamesUrl","numberOfGames","_readCorrelatedGames","correlatedGames","_filterRecentlyPlayed","filteredGames","_filterByGamesInformation","_filterByLayout","slice","correlatedGameTypes","recentlyPlayedMap","gt","filterInLayoutGames","HistoryService","recentlyPlayedUri","aiRecommendedGameListUri","RecommendedGameList","popupCampaignsUrl","MarketingCampaigns","DepositWidget","_bEnable","_bDepositWidgetSupported","ios","android","initFeature","checkHybridSupportDepositWidget","updateDepositWidgetSupported","LobbyPopUp","_nPreviosHeight","_bLobbyPopUpSupport","_popUpTimeOut","_dataObjSrc","_onResizeEvent","_nCountInterval","_resizeInterval","_left","_right","_top","_bottom","_timeout","isPopUpAboveSecounpSupported","setCbFunction","_onShow","_executeFunc","getFuncName","dataObj","rect","msgObj","getBoundingClientRect","outerHeight","outerWidth","rectwidth","rectheight","x","y","_getParams","clearTimeOut","_onShowTimeOut","isGameOpenAndSupportLobbyPopUp","_onResize","popUpAboveSecoundShow","oldParam","bValid","_isValid","bClearInterval","_isPopUpReady","gameSupported","getCurrentRunningGamecompanyName","popUpAboveSecoundClose","OnDemandNyx","_bUpdateHeaderHeight","_onDemandGameIsRunning","headerShift","NYX_TYPE","_onGameSequenceFinish","navigateForOnDemandNyx","_updateHeaderheight","headerClassName","headerShiftDisable","netPositionDisable","brandID","isCOMBrand","topHeader","offsetHeight","hybridNyxClosedButtonEnabled","isIphoneX","_getBrandenable","_getHeaderheight","_getCloseButPosition","changeHeaderHeightOnDemandNyx","_getReason","gameReasonService","handleReason","onclose","msg","gcmevent","decodeURIComponent","closeNyxODRGame","extractFirstPart","matchedURL","Rating","_hybridService","isFeatureEnable","onOauthChange","loginType","popUpRating","LanguageService","_setRTLLanguageClass","iso3","iso2","trim","textTemplate","CGP_RTL","getHTML","LoyaltyService","scriptLink","clientPlatform","NetPositionService","gamesNetPositions","initializeGameTypeUrl","gamesTypesData","netPositions","reduce","acc","gameTypeId","_onReceivedData","UserService","_firebaseLoginToken","tokenUrl","realityCheckDataUrl","validateGeoLocationUrl","initRetryGeoUrl","attemptRealityCheckIntervalMigrationFromLocalStorageToControlCenter","geoLocationEncryptedResponse","isPeriodicFlow","errorMsg","requestParams","_oAuth2Service","TaxId","b2c","_getB2C","history","_getHistory","_extractTokenPropertyByName","getPlatformToken","propertyValue","properyToExtract","propertyToReturn","loginData","numberOfChallenges","NumberOfChallenges","ObservableFactoryService","OmgService","_uccURL","_ignorePopopURLs","_UCCMessages","_currentNumberOfMessages","_onDepositWidgetClosed","_getAwaitingMessages","getAwaitingMessagesUrl","_setIgnorePopupURLs","ignorePopopURLs","pathsList","_openOMG","_onOAuthStateChanged","linkSource","_onExternalLinkClosed","_openUCCMessages","_onOMGOpenedHandler","_notifyOnUCCChanges","currentPath","getPathName","ignoreUrl","OMGData","_isPathIgnored","overlayManagerService","isCashierOpen","isMembershipOpen","OpenedWithinGame","visibilityDetectorService","isActive","omgOptions","_getOmgOpenOptions","_openOMGMessage","ExternalLinkInPopUp","omgMessages","xmlFormattedMessages","_convertToXMLMessages","Messages","_saveUCCMessages","MessagesJSON","_onUCCMessagesReceived","displayedMessages","_getDisplayedUCCMessages","messageArray","newNumberOfMessages","_getCurrentNumberOfMessagesByComparison","updatedNumberOfMessages","receivedMessages","readMessages","newCompareSet","existCompareSet","newMessages","newMessage","isExist","existMessage","rootNode","_createXMLMessage","jsonMessage","messageNode","xmlAttrs","_createXMLAtribute","attrValue","OpenLinkService","linkParams","ExternalLinksController","lobbyUrl","getResponsibleGamblingLink","OpenSessionsService","showBtnReminder","_isAuthorized","includeFreePlaySessions","sessionDetails","getPlayerRealMoneyOpenSessions","openSessions","sum","openSessionsLength","credit","Credit","_filterOpenSessionsByRestrictions","_filterOpenSessionsByProductPackage","productPackageList","getProductPackageActiveGroup","openSession","ProductPackage","filteredOpenSessions","OrbitComponentRenderService","_getOrbitComponentToSdkAdapter","getOrbitComponentToSdkAdapter","renderPartyJackpotInGameWidget","showPartyJackpotWelcomePopup","PariPlayService","_fusion","scriptLoaderService","loadScript","fusionInclusionUrl","fusion","pariplayGameCode","_getFusion","gameCode","onSuccess","FirebaseElasticService","forced","BankrollHandler","_updateBankroll","balanceData","_getBalance","currency","realBR","sendMessageUpdate","bonus","casinoRM","IsCasinoBankrollRestricted","FreeplayHandler","_updateFreePlay","updatedVouchers","_parseVouchers","freeplayData","receivedData","FPvoucher","FreePlayId","GameTypeIdList","PendingDeletion","ADDED","MODIFIED","REMOVED","NetPositionHandler","_updateNetPosition","collectionData","updatedGameTypes","t","PostMessageService","_onListenEvent","postEvent","listener","attachEvent","targetWindow","targetOrigin","QueryStringDetectorService","_handlersMap","onPageLoadCGP","queryStringParams","queryParamName","_getQueryHandler","_clearStore","_getAutologinToken","_autologinParameterName","reasonHandler","sourceSubBrandHandler","linkIDHandler","sourceProductPackageHandler","clientVersionHandler","specificNavigationHandler","_initializeHandlersMap","getAutologinKey","_getQueryParamValue","sourceProductPackage","sourceSubBrand","linkID","sessionTimerOffset","_extractSessionTimerOffset","sourceSubBrandId","targetSubBrandId","specificNavigation","_externalBrandCallbackURL","_parseSpecificNavigation","_externalBrandCallbackURLMethod","specificNavigationString","specificNavigationDoc","parseXml","callbackUrlElems","textContent","callbackMethodElems","paramName","RECENTLY_PLAYED_LOCAL_STORAGE_KEY","RecentlyPlayedService","_recentlyPlayedList","_lastUpdateTime","_onOrbitInitComplete","_updateRecentlyPlayedGames","newTime","_isUpdateRequired","recentlyPlayedListCopy","gameTypeIndexInList","recentlyPlayedFromLocalStorage","_getRecentlyPlayedFromServer","recentlyPlayedList","historyService","getRecentlyPlayed","_filterRestrictedGames","recentlyPlayedGamesFilterRestrictions","recentlyPlayedGameTypes","getAllGamesInfo","RedTigerService","RedTigerEnvironment","SafezoneLoaderService","sdkUrl","ScriptLoaderService","tagId","loadScriptWithRetry","retryCount","scriptTag","ignoreOneTrustAtt","createAttribute","setAttributeNode","onerror","FREE_PLAY_TYPE","ThirdPartyFreePlayService","_serviceUri","_enabled","_thirdPartyVouchers","refreshVouchers","_getThirdPartyVouchers","_updateThirdPartyVouchers","voucherData","activeCurrency","availableGames","GameTypesIDs","betAmounts","maxBet","FreeSpinsInfo","FreePlayID","BetPerSpin","max","NumberOfFreeSpinsLeft","CurrentWinningAmount","NumberOfAwardedFreeSpins","Voucher","VoucherInfo","RemainingFreePlayAmount","AwardedFreePlayAmount","backendVouchers","FreePlayBonusList","allGameTypes","_getAllGameTypes","backEndVoucher","_httpGetThirdPartyVouchers","TimeService","formatUtc","firstDate","secondDate","_findDifferenceBetweenDates","differenceType","divideBy","dateAsString","TrackjsService","_application","_token","_userCID","_version","application","_initTrackJS","_getUserCID","TrackJS","removeMetadata","addMetadata","_initTrackJsExtraInformation","install","TripleEightService","useGameLauncher","gameLauncherUrl","isUsingGGPMock","VisibilityDetectorService","onVisibilityChange","visibilityState","WalletService","_previousBalance","refreshWallet","_updateWalletLocally","bankroll","originalWalletData","newWalletData","_updateWallet","isNewBCurrency","isNewBalance","isNewRealMoneyBankroll","tokenWallet","_getTokenWalletData","balanceType","BalanceType","balanceProperties","tokenWalletData","CASH","BONUS","bankrollType","plainNumber","CloseActionHandler","closeLoginForm","ExternalLinkActionHandler","ForgotYourPasswordActionHandler","ForgotYourUsernameActionHandler","PlayForFunActionHandler","RegistrationActionHandler","marketingFunction","getMarketingDataFunction","SubmitActionHandler","fitToPlayModeEnabled","fitToPlaySubmit","authenticationdata","remember_me","isremembermerequest","processLoginResponse","PendingActionErrorHandler","pendingActionToken","TokenNotValidErrorHandler","clearTokenInfoFromLocalStorage","WebPushService","_swUrl","_loadUAScriptObservable","_uaSdkLoadPromise","_uaSdkLoadPromiseResolve","_uaSdkLoadPromiseReject","_loadWebPush","urbanAirshipSdkUrl","c","u","_getUrbanAppDetails","waitForScriptLoad","d","f","s","p","l","_setup","rel","head","_uaSDKOnLoad","_setChannelInfo","loadWebPush","uaSdkLoadTestPromise","getServiceWorkerUrl","UA","_getSDK","SDK","canRegister","register","getChannel","namedUser","tags","lang","b2cDataString","spm","RegistrationCountry","isQAModeEnabledFromWindow","isOrbitInQAMode","testSettings","QA_ENV_URBAN_DEFAULT_SETTINGS","prodSettings","settings","_getUASettings","workerUrl","vapidPublicKey","appKey","logText","_registerToUA","WindowService","_browserTabId","origin","elementStyle","open","pairs","search","pair","pairMatch","getLinkProxyExecution","linkExecutionProxy","_getLinkProxyExecution","specs","randomHash","random","_openInNewWindowHook","innerWidth","innerHeight","scrollTo","tab","hash","SpainResponsibleGamingIconsController","themeClass","VIEW","BlueRibbonJackpotStatusComponent","_initialParams","_bakeContent","subTitle","jackPotValue","subtitle","closeToaster","blueRibbonService","showPersonalJackpotPromotionPage","analyticsObject","BlueRibbonJackpotWinToasterComponent","yesBtn","wonAmount","yesbtn","_onYesBtnClicked","footerView","BlueRibbonJackpotWelcomeComponent","onceSystemEvent","closePopup","hasTitle","buttonPosition","_onContinue","footerClickedCallback","_onReadMore","StopWatch","autoStart","_start","_elapsed","end","elapsed","convertToCents","composeBlueRibbonLocalStorageKey","keyName","setBlueRibbonLocalStorageKey","deleteBlueRibbonLocalStorageKey","getBlueRibbonLocalStorageKey","BlueRibbonExecutionMonitor","operationToExecute","stopWatch","operationId","operationExecutionTimer","operationName","_sendElasticError","operationParams","logExecutionTimeToElastic","_sendElasticInfo","_composeElasticLog","BlueRibbonJackpot","observable","bound","jackpotId","_initialValue","_currentValue","_isOptedIn","_updateIsOptedIn","_inactiveReason","inactiveReason","_updateIsActive","winAmount","_winAmount","_winningPlayer","_winISO3Currency","winningPlayer","_potState","potState","JACKPOT_STATE","Cold","Regular","Hot","isOptedIn","hasWin","initialValue","currentValue","BlueRibbonPersonalJackpot","PersonalJackpotWelcomePopupShownStorageKey","BlueRibbonPersonalJackpotEventsHandler","_blueRibbonConnection","_getPersonalJackpotId","_welcomeToaster","_winToaster","_executionMonitor","_personalJackPot","_onStartGamesFeedCount","matchedOperatorGames","gameObj","_isMyPersonalJackpot","jackpotGameId","_fireStateChangedEvent","isPlayerOptInToJackpotGame","setIsOptedIn","playerOptState","isOptIn","_wasPersonalJackpotWelcomePopupShown","_showWelcomeToaster","isEligible","hasBetContributions","_showOptInPopup","gameDetails","pots","setInitialValue","seedPotAmount","gameStatus","setIsActive","jackpotPotState","setPotState","potStatus","setCurrentValue","progressive","winningDetails","setWinAmount","playerId","_showWinToaster","jpValue","showAsToaster","timeoutInSecs","additionalClass","showPopup","_setPersonalJackpotWelcomePopUpShownInLocalStorage","INVALID_DATE","BlueRibbonPartyJackpot","_isInOffHours","OffHours","_nextDropWillBeTomorrow","_type","PartyJackpotType","Hourly","Daily","_lastWin","lastWin","secondsDifference","_hasRealMoneyPrize","isRealPrizeCustomField","toLocaleLowerCase","mustDropValue","_mustDropHour","_getFormattedLocalTime","_startHour","startHourValue","_endHour","endHourValue","_b2cLink","B2CLinkUrl","liveCasinoValue","_liveCasino","isExpired","_getDailyMustHitDate","_getHourlyMustHitDate","todayMustHitDate","_getTodayMustHitDate","_jackpotWillDropToday","setUTCDate","getUTCDate","getCurrentServerDate","timeService","todayMustHit","setUTCFullYear","getUTCFullYear","getUTCMonth","setUTCHours","nowStartHour","_getHourlyNextHour","nowEndHour","nextComputedDrop","lastWinDate","tomorrowAtStartDate","_getHourlyStartDate","startDateToday","endDateToday","_getHourlyEndDate","hourOffset","nextDrop","getUTCHours","daysToAdd","startDate","getPartyJackpotJoinStatus","originalIsOptedIn","analyticsService","sendEvent","originalIsActive","makePartyJackpotStatusNeutral","isInOffHours","localDate","toLocalTime","BlueRibbonPartyJackpotEventsHandler","_partyJackpotsMap","_loadAllPartyJackpots","partyJackpot","setName","setType","customJackpotParams","setMustDropHour","setStartHour","setEndHour","setB2CLink","setHasRealMoneyWinPrize","setLiveCasino","setLastWin","lastWinTs","jackpot","operatorGames","operatorGamesGroupedByJackpotId","_groupGamesByPartyJackpotId","partyJackpots","gamesInJackpot","g","Events","GameMode","WinningStrategies","LogLevel","JackpotGameTypes","GameStates","OperatorGameMatchingState","BlueRibbonEventsDispatcher","_blueRibbonNativeEvents","_eventsHandlers","_isDisposed","_customEventsListeners","_addNativeBlueRibbonListener","onOptIn","onOptOut","onGameDetailsChanged","onGameStatusChanged","onPotStateChanged","onWin","_addCustomEventListener","onConnected","onGamesFeedStarted","eventReceived","_fireCustomEvent","callBack","BlueRibbonFeedsController","_blueRibbonCoreManager","_blueRibbonEventsDispatcher","_operationExecutionMonitor","_startGamesFeed","gamesMode","LOBBY","stopGamesFeedParams","executeSync","stopGamesFeed","sourceOperationName","startGamesFeedParams","execute","startGamesFeed","fireOnGamesFeedStarted","startedGames","BlueRibbonConnection","eventsHandlers","_feedsController","_connectionFailed","_isConnected","_connectPromise","_startConnection","connectOptions","connect","matchedGames","getOperatorGamesMatchDetails","fireOnConnected","startAllFeeds","executeReset","waitForConnect","isConnected","player","gameIds","ticker","getGameDetailsByGameIds","gamesDetails","stopOneJackpotFeed","startOneJackpotFeed","IN_GAME","BlueRibbonConnectionProxy","_innerConnection","_resolveWaitPromise","_rejectWaitPromise","_waitForInnerConnectionPromise","innerConnection","PartyJackpotOpenedGameFlowHandler","_widgetContainer","_blueRibbonExecutionMonitor","_openGameSubscription","_openGameErrorSubscription","_closeGameSubscription","_onOpenGameError","_startOneFeedPromise","_onOpenGame","getPartyJackpotByGameType","_isGameClosed","PartyJackpotJoinStatus","Joined","_injectPartyJPWidget","_inGameWidgetComponent","unmount","blueRibbonConnection","containerElement","containerDOMElement","topOffset","gameIFrame","regulationStripeWidth","getCurrentStyle","leftOffset","boundSelector","showPartyJackpotPromotionPage","initialX","initialY","PartyJackpotsJoinStatus","BlueRibbonService","_lastIsEnabled","_insufficientFundsSent","_partyJackpotHandler","_personalJackpotHandler","_blueRibbonConnectionProxy","_loadBlueRibbonSdkPromise","_personalJackpotId","_setPartyJackpotsJoinStatus","_getPartyJackpotsJoinStatusFromLocalStorage","FEATURE_NAME_PARTY_JACKPOTS","isAllLiveGamesPromotion","_fireIsEnabledChanged","_connect","_dispose","waitForAutologin","_createBlueRibbonSdkCoreManager","blueRibbonCoreManager","_createEventsHandlers","setInnerConnection","personalJackPot","loadSkdPromise","_loadBlueRibbonSdk","getOperatorIdPromise","_getOperatorId","all","operatorId","SdkCoreManager","logLevel","baseServiceUrl","apiHost","loginAuthenticatedPlayer","_loginPlayer","getBlueRibbonTokenUrl","loginAnonymousPlayer","getBlueRibbonAnonymousTokenUrl","withOverlays","emitWinsInLobby","operationExecutionMonitor","_getOperatorIdFromLocalStorage","getOperatorIdParams","getOperatorIdUrl","_setOperatorIdInLocalStorage","newStatus","_setPartyJackpotsJoinStatusInLocalStorage","_partyJackpotsJoinStatus","GameCode","JackpotsJoinStatus","LoginResponse","Neutral","allJPs","getAllPartyJackpots","hasGame","personalJackpotPromotionUrl","partyJackpotPromotionUrl","BlueRibbonOperatorIdKey","_getOperatorIdLocalStorageKey","jackpotsStatuses","statuses","partyJackpotId","clonedJackpotStatuses","NotJoined","currentStatus","getCashBalance","_showInsufficientRealMoneyToaster","_isPartyJackpotJoinStatusNeutral","onAcceptButtonClicked","joinPartyJackpotUrl","onDeclineButtonClicked","hasRealMoneyWinPrize","doNotJoinPartyJackpotUrl","GameSequenceHelper","createGameSequenceBuilderCallback","_currentSteps","currentSteps","_createGameSequenceBuilderCallback","isGameStepOrDescriptorCallback","gameStepPrototype","prototypeOrDescriptor","GameStepInserter","newSteps","_newSteps","_createNewGameSequenceBuilder","_checkIsGameStep","_findStepIndex","GameStepReplacer","_createGameStepsCallback","createGameStepsCallback","_replacedGameStepPrototype","replacedGameStepPrototype","stepPrototypeOrDescriptor","protOrDescriptor","stepIndex","GameSequenceBuilder","_steps","_createGameSequenceBuilder","_isGameStep","gameStepPrototypes","_getGameSequenceHelperCommonParameters","_createMultipleGameStepInstances","stepProto","clonedSteps","_cloneSteps","_isGameStepOrDescriptor","_createSingleGameStepInstance","_isStepInstanceDescriptor","prototype","descriptor","duplicatedSteps","GameSequenceInitializerBase","RealGameSequenceInitializer","_createSequenceBuilder","insert","last","AnonymousGameSequenceInitializer","HistoryGameSequenceInitializer","Runner","shift","run","failedGameStep","addCategory","addAction","addValue","GameServiceSequenceRunner","_sequenceInProgress","runner","reThrowError","LoadingIndicator","_isShowingHimself","_isClosingHimself","_loader","_loaderWrapper","_otherOverlaysOpenCount","addChildrenElements","_onOtherOverlayOpen","_onOtherOverlayClose","closeLoadingIndicator","showLoadingIndicator","LoadingIndicatorEmbedded","_toasterIndicatorTimeoutInSeconds","_minPercentForIndicatorToater","_progressWrap","_progressPercent","_circleBg","_circlebginner","_circlebgouter","_canvas","_closeButton","_nLineWidth","_percent","_numberOfPackagesElem","_toasterIndicatorTimeout","_packageNumber","_onUpdateProgressBar","_startToasterIndicatorTimeout","_showToaster","createClassWithId","_center","_radius","_clearPreviousChildrenElements","_showPackageStatus","_paintCircle","statusBar","numberOfPackages","totalNumberOfPackages","packagesStatus","_convertParamsToV2","_updateNumberOfPackages","getContext","per","_getPercent","beginPath","arc","lineWidth","lineCap","strokeStyle","getPropertyValue","imageSmoothingEnabled","stroke","counter","PI","GameServiceDependenciesFactory","getServiceFactoryCallback","VoidGamePostMessageHandler","VoidLoadingIndicator","GameService","_closeDetailHistoryCallback","_openRealGameApiUrl","openRealGameApiUrl","_openAnonymousGameApiUrl","openAnonymousGameApiUrl","_openHistoryGameApiUrl","openHistoryGameApiUrl","_getGameSessionDataUrl","getGameSessionDataUrl","_getGRSEnvironmentsUrl","getGRSEnvironmentsUrl","_chillEnvironment","ChillEnvironment","_backgroundDefault","backgroundDefault","gameDefaultIcon","_customGamesSettings","customGamesSettings","_resolveGameImagePath","_affiliatesGoToLobbyInterval","_setAffiliatesGoToLobbyInterval","AffiliatesGoToLobbyInterval","GRS","_customChillUrl","CustomChillUrl","_customGameResourcesPath","CustomGameResourcesPath","_grsConfiguration","gameState","GameState","additionalState","AdditionalState","gameTechnology","GameTechnology","GRSEnvironment","enableVersionSending","_enableBonusAbusePrevention","enableBonusAbusePrevention","_tabID","_gamePostMessageListener","imageFileName","postMessageEvent","processPostMessage","_removeBodyCustomClasses","_currentRunningGameOptions","_onCashierClosed","sendRefreshBalanceCommand","initialGameSequenceBuilder","realGameSequenceInitializer","initSequenceBuilder","_runGameSequence","getRealGameSequenceBuilder","finalGameOptions","_fireGameOpenEvent","_fireOpenGameErrorEvent","anonymousGameSequenceInitializer","getAnonymousGameSequenceBuilder","historyGameSequenceInitializer","getHistoryGameSequenceBuilder","background","showHistoryDetails","closeDetailHistoryCallback","initialGameOptions","getGameSequenceBuilderFromCompany","loadingIndicator","loadingIndicatorEmbedded","isDisplayLoadingIndicator","gameTabID","_appendGameInfo","_selectCompany","sequenceBuilder","build","gameSequenceRunner","isOpenedInRedirect","isOpenedInSecondWebView","_closeLoadingIndicator","startNotifications","gamePostMessageListener","_addBodyCustomClasses","_closeIndicatorAndFreeResources","_showErrorMessage","companySelectorService","isSupportFlash","forceMobile","isSupportHTML5","GrsData","regulationId","currencyCode","languageCode","currentRoute","isHybridEmbedded","vendorEnvironment","GrsEnvironment","useNetEntGameInclusion","useEvolutionNewIntegration","useAdapterIntegration","useAdapter","gameVersion","getCompiledGameVersion","gameConfigurationFromServer","grsData","customChillUrl","chillUrl","customGameResourcesPath","_createCommonReadGameConfigurationRequest","refreshToken","getRefreshToken","realityCheckIntervalInMinutes","reconnectionGameSessionId","SessionID","italy","requestedGameLimitAmount","gameLimits","spain","RequestedGameLimit","requestedTimeLimitInMinutes","RequestedTimeLimit","restrictionPeriodInMinutes","RestrictionPeriod","intervalReminderInMinutes","IntervalReminderInMinutes","gameConfiguration","_handleGameConfigurationResult","gameRoundId","gameRoundDate","gameBackgroundImage","imagePreloadWithDefault","_IsIgnoreError","_fireGameLoadingEventFailed","stopGameAutoPlay","continueGamePlay","customUrl","classNames","getCustomBodyClasses","errMsgToLog","getHash","LoginTimeAnalytics","_action","duration","startTime","_success","_fail","OAuth2BackendProxy","_tokenUrl","_logoutUrl","_inactivityTimeoutSettingsPersister","logoutUrl","inactivityTimeoutSettingsPersister","forAutologinWithToken","measure","autoLogingParams","_fixPlusSignEncoding","_autologin","touchIdToken","touchParams","touch_token","forAutologinWithTouchId","touchtoken","deviceid","DeviceId","bundleid","BundleId","autoLoginParams","grant_type","_login","credentials","forLoginWithPassword","loginParams","_buildLoginParams","_buildCustomSessionTimeTokenRequestParam","_addPlayerAppDataToLoginParams","gaSessionID","getGoogleSessionID","testData","getMarketingData","TestData","timeSinceLastActivity","refreshTokenParams","refresh_token","time_since_last_user_activity","executeRefreshToken","err1","err2","customSessionTimeout","tryGetCustomAccessTokenLifeTime","custom_session_timeout","appMareketingData","playerAppDetails","client_id","getClientID","client_version","integration","getRole","devicePixelRatio","pixelRatio","benchmark","getBenchMark","langISO2","getISO2","getAnonymousPlayerId","OAuth2State","tokenProperty","filedName","fieldValue","fromOnInitCompleteEvent","EmptyToken","_userData","_deleteOrphanTokenPropertiesFromStorage","_deleteTokenRelatedProperties","fieldName","_tokenData","_lastRefreshTimestamp","_jwtDecoder","_hasRememberMe","_accountData","_decodedAccessToken","jwtDecoder","_saveToStorage","tokenData","_updateLastRefreshTimestamp","lastRefreshTimestamp","_setHasRememberMe","hasRememberMe","_mergeTokenFieldsOverrides","stringifiedTokenData","access_token","_saveB2CData","signature","sessionParamsSignature","timeStamp","fieldsOverrides","_getTokenFieldsOverrides","_saveTokenFieldsOverrides","overrides","getFieldValue","newUserData","_createUserDataFromTokenData","oldUserData","lastCid","newCid","userName","FirstName","LastName","StatusGroupId","FTDSubBrand","isVIP","genderID","GenderId","DWHGameGroupOrientation","TimeSinceRegistration","PlayerRMStatus","JoinDate","IsPromotionPermitted","getAccessTokenField","timeSinceLastRefresh","getLastRefreshTime","tokenExpirationTime","expires_in","getTimeUntilExpiration","REFRESH_TOKEN_REASONS","GENERAL_KICK_TRANSLATION_KEY","OAuth2AuthorizedState","_currentToken","_stateChangedCallback","_backendProxy","_oauth2StateFactory","_userActivityDetector","_logoutUserTimer","_logoutUserCancelTimer","_kickInactiveUserTimer","_getSessionTimerUrl","_sessionEventKickSubscription","_appResumeSubscription","_localStorageChangedSubscription","_lastRefreshOnAppResume","stateChangedCallback","backendProxy","oauth2StateFactory","getSessionTimerUrl","_accessTokenLifeTimeMS","isInAutologin","_startKickInactiveUserTimer","_subscribeToLocalStorageChanged","_onKickEvent","_onAppResumed","_unsubscribeFromLocalStorageChanged","_onLocalStorageChanged","_killTimers","updatePostLoginData","_sendOptionsConfig","getAccessTokenLifeTime","getTimeSinceLastUserActivity","_timeSinceLastUserActivityMS","_timeBeforeWhichTheUserShouldBeNotifiedMS","timeAfterWhichTheIdlePopUpMessageShouldBeShown","_timeAfterWhichTheIdlePopUpMessageShouldBeShownMS","timeSinceLastUserActivity","_startLogoutTimer","_startLogoutTimerCanceler","_showIdlePopUpMessage","onClickCallback","okButton","timer","_showMessage","_switchToAnonymousState","logoutReason","isInStorage","getAccessTokenFieldFromLocalStorage","fromStorage","delete","kickReason","_getIfKnownKickReason","reasonId","newState","createAnonymousState","_closeAllOverlays","reportAnalytics","password","executeOnLogout","autoLoginWithToken","tokenResponse","fromNew","_updateNewLoginData","responseError","_handleAutologinError","getDecodedAccessToken","getHttpAuthorizationHeader","getUserData","setFieldValue","authorizedState","OAuth2AnonymousState","_emptyToken","_onRunAutologin","_onRegistrationCompleted","_onAutologinWithTouchId","_switchToAuthorizedState","autologinWithToken","autoLoginWithTouchId","fromRegistration","createAuthorizedStateForNewLogin","createAuthorizedStateForExistingToken","initializationParams","loginWithPassword","OAuth2StateFactory","_getDependencies","forNewLogin","_getAuthorizedStateParams","forExistingToken","InactivityTimeoutSettingsPersister","_getServiceFactoryFunc","_defaultAccessTokenLifetime","_accessTokenLifeTimeForRegulation","_minAccessTokenLifeTime","_maxAccessTokenLifeTime","getServiceFactoryFunc","defaultAccessTokenLifetime","accessTokenLifeTimeForRegulation","minAccessTokenLifeTime","maxAccessTokenLifeTime","currentRegulationCode","areEquals","_getDefaultAccessTokenLifetime","_limitCustomAccessTokenLifeTime","timeSpanAsString","minValueInMinutes","maxValueInMinutes","OAuth2Service","_currentState","_loginFromCompletedRegistration","_isInAutologinFromRegistration","_onBeginLoginFromRegistration","_waitForAutoLoginPromise","_waitForAutoLoginResolver","_onLoginCompletedAfterRegistration","_onLoginFailedAfterRegistration","defaultAccessTokenLifeTime","_getOAuth2StateFactory","createInitialState","getLastSessionFromStorage","onInitComplete","fakeClientIP","_getBackendProxy","_onInitCompleteHandler","resolveWaitForAutologin","autologinWithTokenFunc","showLogoutMessage","autologinKey","getTokenAuthorizeHeader","setCustomAccessTokenLifeTime","minSessionTimeout","getMinAccessTokenLifeTime","maxSessionTimeout","getMaxAccessTokenLifeTime","getPossibleAccessTokenLifeTimeValues","DEVICE_TYPE","model","isIphone","isIpad","getDeviceTypeName","native","webapp","filteredProductPackage","productPackageGroup","productPackageKey","filterPackages","SERIAL_PROVIDER","AF","AppFlayerModel","_afID","_appName","_deviceID","_afinstall","_serialData","_serialDataDecode","_idfv","_getCommonData","orgData","_mergeMarketingData","_fillGeneralData","_getMarketingData","_getData","AppsFlyerID","AppID","DeviceID","IDFV","AppFlayer","GNWPRequestModel","getSerialData","setSmartLinkData","SerialProvider","Serial","_currentProvider","HybridSerialProvider","getCurrentProvider","SerialConst","InfoModel","_webInfo","infoOk","setData","InfoService","infoError","getData","strWeb","strHybrid","SkinService","_platformSystemID","_clientIDPattern","_clientVersionPattern","_productPackage","_serial","_info","_defaultHybridSerial","_clientPlatform","clientID","platformSystemID","serial","Info","_setDefaultHybridSerial","androidDefaultHybridSerial","iosDefaultHybridSerial","isProbablyIOSDevice","appDownloadLinkIos","appDownloadLinkNonIos","safeToPlayURL","preventOpenGameForMobileWebappEnabled","disableCheckIfCorrectAppInUse","isMobileWebApp","replaceLoginButtonWithGetAppForMobileWebApp","getProductPackageGroupMobile","getProductPackageGroupPC","mobilePackages","wrongLocationDetectionPath","isComRelatedBrand","subBrandID","regId","isUK","regulationID","orbit","isProgressiveWebApp","_getOrbitVersion","_getIsPWA","responsibleGamblingLink","isAbsolutUrl","responsibleUrl","brandName","dateFormat","timeFormat","dateTimeHistoryFormat","culture","NoRestrictionValue","RESTRICTION_REASONS","RESTRICTION_ACTIONS","GenericRestrictionValue","_actionId","_reasonId","_value","_expirationDate","_createRestrictionMessage","createRestrictionMessage","restrictionData","ReasonId","Value","SecondsToExpire","parseDate","restrictionMessages","showSessionLimitMessage","RestrictionValueFactory","RESTRICTION_ENTITY_TYPE","RestrictionsPool","_restrictionValueFactory","_currentPackageId","_currentSubBrandId","_noRestriction","_restrictionsMap","restrictionValueFactory","_loadRestrictions","restrictionsByAction","gameGroupId","_getFirstNonExpiredRestriction","gameGroups","currentSubBrand","currentPackage","isActiveRestrictionForOpenApplication","section","j","restrictionValue","createRestrictionValue","restrictionsMap","_initRestrictionsMap","restrictionByAction","Entities","restrictionEntity","_appendRestrictionEntityValues","Values","EntityId","_initRestrictionsMapSection","_createRestrictionValue","RestrictionsStrategyBase","_serviceFactoryCallback","getRestrictionsPool","restrictions","restrictionsPool","getGameRestriction","isPackageRestrictedForOpen","_sendRestrictionAnalytics","isSubBrandRestrictedForOpen","AnonymousRestrictionsStrategy","_anonymousRestrictionsUri","_restrictionsByAction","_restrictionsPool","anonymousRestrictionsUri","anonymousRestrictions","RestrictionsByAction","_createRestrictionsPool","BrandId","SubBrandId","ClientVersion","RESTRICTION_STORAGE_KEY","AuthorizedRestrictionsStrategy","_onUpdateRestrictions","restrictionJSON","_createRestrictionsByAction","restrictionsData","RestrictionsService","_anonymousRestrictionsStrategy","_authorizedRestrictionStrategy","_currentRestrictionsStrategy","_getCommonStrategyParams","hybridPermittedMap","_switchStrategy","fireEvent","currentRestrictionsStrategy","doAsyncJobs","showClientRestrictionMessage","isApplicationRestricted","titleText","restrictionText","setRestrictions","_onOauthStateChanged","_onHybridInfoComplete","appID","permittedMap","permittedCountries","_openRelevantRestrictionMessage","messageType","_openCountryRestricitonMessage","GeoBase","initParams","bMandatory","additionalData","geoData","getServiceFactory","GeoHybrid","onGeoLocationRes","getGeoLocation","getAllData","allData","jsonData","onGeoLocationResOk","onGeoLocationResFailed","GeoDataFormatter","userID","_userId","_reason","_phone","_license","_sessionKey","_dataOk","_bMandatory","_setPhone","mobileNumber","_setLicense","licenseKey","_setSessionKey","locationTransactionId","_setUserId","_setMandatory","_setReason","_setKey","datakey","isDataValid","GeoPluginResults","succeeded","_succeeded","_errorCode","_errorMessage","GeoPc","geo","isPluginInstalled","isPluginUpdated","GCInitialized","waitingForPlugin","geoLocationReject","doFailGeoLocation","geoLocationResolve","connectionResolve","connectionReject","postMessageEventListener","downloadGC","geoLib","initGC","connectGC","checkIfConnectGC","checkIfNeedMsg","getIsPluginAvailableResponse","installMsg","pluginInstalledAndUpdated","setGeoParams","requestGeolocation","hasImage","race","openInstructionPage","showInstallPluginMSG","startPluginDownload","getResult","closeController","GeoComply","createClient","onConnectSuccess","onConnectFailed","onGeolocationAvailable","onGeolocationFailed","onLog","doConnect","doGeoLocationPluginAvailable","doGeoLocationPluginNotAvailable","reconnectCycle","GCinstallerID","GCenvironment","setLicense","license","customFields","sessionKey","setUserPhoneNumber","phone","setGeolocationReason","setUserId","userId","getLastErrorCode","doGeoLocation","doPassGeoLocation","getGCPluginDownloadPage","installPath","installParams","platform","downloadVersion","instructionPagePath","RETRY_ERROR","GeoOobee","serviceURL","oobeeURL","errorTryNumber","gotHint","needToResendOnGettingFocus","loadScriptJS","appendOrigin","jqueryLib","oobeeLib","tryToResendDataOnGettingFocus","GCOobee","showHintMSG","closeFreezeWindow","installUrl","wakeupUrl","msgTxt","utils","is","androidWakeupIntent","androidWakeupUrl","iosInstallURL","iosWakeupUrl","oobeeConfiguration","serviceUrl","oobeeUrl","getOobeeReason","session","session_key","configure","ret","restartFreezeWindowIfNeeded","oobee","userAction","hasRegisteredRecently","NONE","GeoLocationService","wrapper","geoLocationFreezeWindow","geoDataFormatter","geoLocationProcess","geoLocationTimeout","restrictionChangedEvent","wrapperParams","requestTimeOut","geoInProcess","playerMessagesConnected","isParamsValid","initWrapper","waitTimeOut","_setGeoInProcess","onPlayerMessagesConnected","onGeoKickEvent","runWrapper","isMacOS","getDeviceType","Hybrid","Oobee","startLoginGeoProcess","geoLocationFromLogin","startGeoProcess","isGeoLocationInProcess","isMandatory","geoFailEvent","onSystemEventOnce","geoSucceedEvent","reasonToStartGeo","getWrapper","isPlugInEnable","_setGeoLocationTimeout","_stopGeoLocationTimeout","retryNumber","getGeoLocationWhilePlayerMessagesReady","clearGeoLocationFromLogin","playerMessagesConnectRetries","isPeriodic","closeGame","showFreezeWindow","_getGeoKickPopupButtons","validateGeoLocation","showGeneralTechnicalError","geoProcessTimeout","resOk","resultForAnalitics","_onRestrictionChange","NextIntervalInSeconds","closeDelay","antiFlickerTimer","doCloseFreezeWindow","geoProcessTime","defaultButtons","ontarioButtons","getRegulationID","getIfKnownKickReason","getIfKnownGeoLockationKickReason","DetailedMessages","_getDetailedMessagesList","overlayContent","closeOverlayStrip","OverlayComponentController","_onChangePriorityEvent","changePriorityParams","contains","_setPriority","newPriority","isCloseByEscape","overlayElement","_getOverlayClassToPriority","_getOverlayClassToType","_getAdditionalClasses","_getOverlayContetEl","_getContentAdditionalClasses","draw","closeBtnDOMElement","closeBtnClass","btnCloseFunction","closeEl","_getCloseEl","appendFirst","openFunction","typeClass","classToBeRemoved","classToBeAdded","OverlayWrapperComponentController","ExtendableError","exceptionParams","error_description","fileName","column","errorObj","OverlayException","QueueModel","queueList","size","OverlayManagerService","_counter","_overlayQueues","_overlayWrapper","_initQueues","overlay","appendBody","overlayToDestroy","OVERLAY_ID","_setOverlayWrapperZIndex","cleanResources","isActiveOverlayExists","_destroyOverlayWrapper","queue","destroy","dequeue","cashierOverlayClass","cashier","membership","getOverlayClasses","overlayOptions","_createComponentOverlayOptions","_createOverlay","getPriorityNameByValue","destroyAll","overlayId","_getOverlayById","changeState","isShow","activeOverlay","overlayInstance","newOverlay","_add","foundOverlay","priorityValue","PLAYER_EVENT_TYPES","MainRestrictionParser","Restrictions","RestrictionAction","RestrictionActions","_formatToCGPRestrictionAction","restrictionObj","restrictionAction","ActionName","entities","Restriction","_parseEntity","entity","EntityName","restrictionValues","_parseRestrictionValue","MainProxyStrategy","_omgVersion","omgVersion","_onStateChanged","_intervalObserver","_getPlayerMessages","_readPlayerEvents","playerEventsMessage","_handlePlayerEvents","playerEvents","playerEvent","_handlePlayerEvent","eventType","EventType","EventDataJson","_onKickReceived","_onGeoReceived","_onRestrictionReceived","_onOMGReceived","geoLocationService","updateGeoPeriodic","Mobile","GeoComplyLicense","LocationTransactionId","KickReason","TroubleshooterMessages","_isOMGCanBeDisplayed","OmgType","SerializedMessagesDetails","OMGType","DisplayInGame","SupportVersion","FirebaseStrategy","_firebaseConnectionFactory","_firebaseConnection","_reconnectHelper","_firebaseHandlers","_sendMonitoringRetriesNo","_onOAuthStateChangedSubscription","_onInitCompletedSubscription","setKeyRetries","_reconnectionHelperFactory","reconnectionHelperFactory","_subscribeToInitComplete","_onAuthStateChanged","_getFirebaseAndConnect","_subscribeToOAuthStateChanged","_disconnect","_loadTripleMessaging","_getFirebaseConnectorFromWindow","_startFallbackService","_startConnectFirebase","_getToken","setFirebaseLoginToken","_sendFailMonitoring","getNumberOfRetries","stopAllButThis","_subscribeToFirebaseEvents","sendConnected","libUrl","_readHandlers","moduleExport","TargetType","TargetTypeValue","logOut","unsubscribe","_removeReconnectHelper","_createReconnectionHelper","_connectToFirebase","sendConnectionFailed","crt","PlayerMessagesFactory","sourceParams","dependensies","Firebase","MainProxy","PlayerMessagesService","_source","_sourceInitParams","_activateMessagesSourceService","_activeMessageSource","createMessageSourceComponent","getClientPlatformVersion","LogEventHeaderBuilder","services","_target","_correlationID","_businessCorrelationID","_sessionID","_appID","_productPackageID","_sequentialNumber","_eventType","headerData","clientDateTime","formatCurrentDateToUtc","correlationID","uuidv4","environment","logVersionFormat","businessCorrelationID","productPackageID","sequentialNumber","decodedToken","userData","brand","getBrandName","eventTypes","LogEventDataBuilder","_eventData","isMiniCIP","isMiniCis","isMiniCIS","customData","LogDeviceDataBuilder","userAgent","screenResolution","osName","networkData","LogClientDataBuilder","clientData","subBrand","language","regulationCode","browserTabId","getBrowserTabId","parentProductPackage","ElasticLogger","_storageUrl","_headerBuilder","_deviceDataBuilder","_clientDataBuilder","_eventDataBuilder","storageUrl","setCorrelationId","setBusinessCorrelationID","setSessionID","setAppID","setProductPackageID","setSequentialNumber","addLabel","addEventName","eventHeader","deviceData","sessionData","globalSessionID","initialSessionId","playerSessionID","postJSON","_buildRequestPayload","_send","StructuredLoggingService","_createElasticLogger","WebLoginComponent","_initObjectBuilder","_eventsObjectBuilder","_sdkUrl","_isWebLoginComponentLoaded","_loginComponentWrapperElement","initObjectBuilder","eventsObjectBuilder","_loadWebLoginSDK","rllogin","RL","PF","Web","LoginUi","Login","_buildInitObject","_buildEventsObject","loadWebLoginSDK","secondsUntilNewRetryBulk","commonEventsObject","buildEventsObject","buildInitObject","_getWebLoginComponent","updateform","merge","buildFormOptions","processresponse","_getWebLoginComponentPromiseHandler","EventsObjectBuilder","_handlersModulesReader","read","handlersContext","_eventsObject","handlersModulesReader","handlerModule","InitObjectBuilder","_enableCaptcha","enableCaptcha","subbrandid","productpackageid","languagecode","formoptions","showclosebutton","logoptions","disabletrackjs","errorcodeid","modeoptions","username","_getLastLoginUserName","showrememberme","enablecaptcha","LoginErrorHandler","errorHandlerModule","_readErrorHandlers","errorHandler","handle","WebLoginServiceDependenciesFactory","WebLoginService","_webLoginComponent","_latestOpenLoginParams","_openLoginFormPromisesResolvers","_createWebLoginComponent","createEventsObjectBuilder","createInitObjectBuilder","createLoginErrorHandler","createWebLoginComponent","promiseResolver","originalLoginResponse","processResponse","loginProcessingResult","actionhandler","ah","_loginErrorHandler","handleError","BaseWebView","valid","RegExp","test","urlsecondwebview","openLinksAccomplished","getWebId","MasterWebView","_disableSecondWebView","checkOpenLinks","reasonID","setFeatureGameDisable","SecondWebView","_onOldHybridCall","onHybridCall","_onTapped","SafariWebView","getReason","WebViewManager","_isFeatureGameEnable","_isFeatureCasheirEnable","_ListWebViews","_displayHybridTimeout","_frameOffsetTopGameDemoY","_frameOffsetTopGameY","_frameGameRealPortrate","_frameGameDemoPortrate","_frameOffsetTopSportY","_frameOffsetTopSportPortrateY","_frameOffsetTopSportPortrate","_frameOffsetTopLandScapeY","_frameOffsetTopPortrateY","_frameOffsetTopPortrateIphoneX","_frameOffsetTopCashierY","_frameOffsetBottomCashierY","_displayGameTimeOut","_butInitGame","_butInitCashier","_butInitSport","_butRtl","_butW","_butH","_butX","_butY","_but_landscape_x","_but_landscape_y","_allHtmlCompiledGames","enable_game","enable_casheir","display_hybrid_timeout","display_game_time_out","frame_offset_top_game_demo_y","frame_offset_top_game_real_y","game_r_portrate","game_d_portrate","game_sport_portrate","frame_offset_top_sport_y","iphoneXtopLandScapeY","iphoneXtopPortrateY","iphonetopPortrateY","frame_offset_top_cashier_y","frame_offset_bottom_cashier_y","but_initSport","but_initGame","but_initCashier","but_rtl","iphonex","but_landscape_x","but_landscape_y","but_w","but_h","but_x","but_y","webview","_isAlreadyExist","isValidId","allWebViews","ii","newId","_fillCloseButInfo","gameTimeOut","bReal","_getNextGameId","_fillGTValues","nWebId","nextId","dpToPx","keyData","allHtmlCompiledGames","_ndpToPx","initWebView","getWebViewById","setCbFunctions","setHybridDisplayTimeOut","getDpToPx","openDepositWidget","_onOauthStateChange","_onPushMsgArrived","_closAllWebViews","isFeatureGameEnable","isFeatureCasheirEnable","_openCashierDirect","_openSport","_onScreenState","timeOut","getDisplayHybridTimeout","displayHybrid","nId","webView","bEncode","_getObjUrl","fillFrameOffset","objWithFrameOffset","filledObj","fillGameInfo","_navigate","filDepositWidgetInfo","strJson","fillCashierInfo","getHeaderRegulationDataElement","headerRegulationDataElement","_getHeaderHeight","headerHeight","fillSportInfo","navigateWebView","_showWithTimeOut","isDepositPSPRedirect","closeWebView","addOrientationState","isPortrate","getallOpenwebViews","updateScreenSize","showWebView","_onOrientationStateInit","FullScreenTapContainerController","_numbersOfClick","openFullScreen","_openFullScreenOnClick","_handleFullScreenChangeEvent","hideRootElement","showRootElement","NetEntGameEventListener","_eventSubscriptions","_subscribeToEvent","argCount","eventParams","netEntExtend","NetEntGameBodyComponent","_netEntExtend","_gameEventsListener","_createNetEntGamePlaceholder","netEntGamePlaceholder","netEntService","launchGame","gameServerUrl","casinoId","netEntGameType","externalGameType","netEntTableId","externalGameSubType","gameSessionId","externalGameSessionId","externalLanguageCode","showMiniLobby","hideExitGame","_netEntGamePlaceholder","showGeneralErrorMessage","setElementSize","stopAutoplay","ComponentFactoryService","componentPrototype","GamesDiagnosticMessages","_gameRestrictedMessages","_gameFilteredByPlatformTypeMessges","_gameNotApprovedMessages","_onRestrictionsChanged","PLATFORM_TYPES","GamesInfoCache","_getServiceFactory","_gamesDiagnostics","_onRestrictionsChangedSubscription","_shouldUpdateBetsFromLiveTables","_previousRegulationIDForBets","_gamesFromBackend","_gamesInfoCache","_gamesSubTypeToGameTypeMappingCache","_activeCurrency","_activePlatform","_activePlatformIndex","gamesDiagnostics","_setActivePlatform","liveTablesService","getRegulationIDForMinMaxBet","gameFromBackend","isAnonymousSupported","AllowDemo","forceDemoButton","minBet","_extractMinBetLimit","Bets","MaxBetPerBrand","_extractMaxBetLimit","gamesFromBackend","getBetLimitsFromTableFeedsEnabled","notFoundGames","liveTables","_shouldUseLiveTableFeeds","getTablesInfo","_createGameInfoFromBackendInfo","liveTable","MinBet","MaxBet","gameSubTypes","subType","cgpGameId","externalGameCode","_extractExternalGameCode","ExtId","_extractExternalSubTypeGameCode","ExtSubType","isEliteLounge","IsEliteLounge","allowWithdrawOnlyFromReal","AllowWithdrawOnlyFromReal","supportWithdrawOnlyFromReal","hasJackpot","HasJackpot","jackpotFeedsDisabled","Vendor","Company","gameGroup","Group","GroupId","forceIntermediatePageForAutorizedUsers","subGroupName","SubGroup","numberOfLines","NumberOfLines","hasFreeSpins","HasFreeSpins","allowedPlatformType","PlatformType","hasSideBets","HasSideBets","isMultiHand","IsMultiHand","maxBetPerSpot","MaxBetPerSpot","numberOfDecks","Decks","hasBonusGames","HasBonusGames","Images","approvals","Approvals","_applyPlatformRestrictions","betsConfiguration","maxBetPerBrand","shouldHaveBetLimitsPerBrand","_extractBetLimit","betType","betLimits","_getActiveCurrency","typeInfo","activePlatformIndex","subTypeInfo","platformType","_isPlatformMatch","_isGameAllowedForCurrentPlatform","isCurrentPlatformAllowed","logGameFilteredByPlatformType","GamesInformationService","_getGameTypesInfoUri","_getAllGameTypesApiUri","_allowUnfilteredGames","_createGamesInfoCache","appendBackendGamesInfo","allowUnfilteredGames","resultFromCache","finalGamesInfo","_readFromServer","overrideUnfilteredGames","getGamesInfoWithoutAnyFiltering","currentRegulationType","_applyRestriction","_isGameApprovedForRegulation","isGameAllowedInTheGrid","isGameAllowedAndExistsInHybrid","logGameNotApproved","isGameAllowed","isGameApproved","restrictionsService","logGameRestricted","_httpService","getGamesSubTypesMappings","getAllGameTypes","gamesType","_skinService","apiUri","BrandID","Country","GameTypes","gs","Games","cacheResponse","isVideoSlotOrSlotsGameGroup","getAllDiagnosticMessages","IntegrationModel","_allowedRoles","_defaultRole","_marketData","_marketingFlowType","_headerElementMethod","_richSettings","_isMiniCipFunc","_isMiniCisFunc","setRole","role","_setHeaderElementMethod","headerElement","_setHeaderRegulationDataElement","_setProxyLink","proxyLink","_setGameTypeMapper","gameTypeMapper","_setGamesList","gamesList","_setParamsUrl","urlSessionParams","_setHistoryLink","historyLink","_setGameSessionHistoryLink","gameSessionHistoryLink","_setAboutHelpLink","aboutHelpLink","_setLobbyUrlLink","lobbyUrlLink","_setLegalInfoLink","legalInfoLink","_setThirdPartyCookieLink","thirdPartyCookieLink","_setMDPImageMapper","MDPImageMapper","_setRichSettings","_setCMSSource","CMSSource","_setOpenInNewWindowHook","_setIsMiniCipFunc","isMiniCipFunc","_setIsMiniCisFunc","isMiniCisFunc","richSettings","isMiniCipFuc","isMiniCisFuc","_headerRegulationDataElementMethod","headerRegulationDataElementMethod","headerElementMethod","campaignId","_role","allowedRole","r","_thirdPartyCookieLink","marketingFlowType","marketData","gameTypeMapperRef","_gameTypeMapperRef","_proxyLink","_gamesList","_urlParams","_historyLink","_gameSessionHistoryLink","_aboutHelpLink","_lobbyUrlLink","_myAccountToLobbyUrlLink","_legalInfoLink","mapper","_MDPImageMapper","_cmsSource","BaseIntegration","property","stringUtil","IntegrationB2C","IntegrationService","_integrationMapFactory","_selectedVendor","_providerData","_enableUpdateContext","enableUpdateContext","_initializeIntegrationMap","getProxyLink","getNavbarContainerElementSelector","getNavbarRegulationElementSelector","vendor","getRecentMarketData","getHistoryLink","getGameSessionHistoryLink","getAboutHelpLink","getLegalInfoLink","getThirdPartyCookieLink","getGameTypeMapper","gameTypeMapperRefPromise","gameTypeMapperIsPromiseMiddleWare","gamesMap","gameTypesToFilter","getMarketingFlowType","getMDPImageMapper","_communicationBrige","_updateMarketingData","_updateMarketingFlowType","urlParams","getParamsUrl","sessionParams","getUserSegments","requestToTheOlympus","successTrip","badTrip","flowType","_updateMarketData","getIsMiniCip","getIsMiniCis","oauth","providerData","tempMarketData","isMarketingDataExist","marketingDataFunctionCall","parsedFunction","parseStringFunction","marketingFunctionRef","functionName","functionStringParams","hook","getOpenInNewWindowHook","getCMSSource","signatureKey","providerDataObj","getProviderTokenData","SubBrandID","SystemId","getPlatformSystemID","IsEmbeddedHybrid","lastSessionData","getLastSessionData","IsRisky","bakeParams","GamesJackpotsPublisher","_publishQueue","_observableSubscription","gamesJackpotsObject","gamesJackpotsArray","_createGamesJackpotsArray","_disposeObservableSubscription","gameJackpot","_publishGame","AmountInCents","amountInCents","JackpotFeedsReader","_getJackpotsUrl","_getGameJackpotUrl","getJackpotsUrl","getGameJackpotUrl","JackpotFeedsServiceDependenciesFactory","_jackpotsRefreshInterval","jackpotsRefreshInterval","JackpotFeedsService","_jackpotData","_gamesJackpotsPublisher","_jackpotFeedsReader","intervalReference","_isRequestPaused","_timeoutGuard","disableJackpotFeeds","createFeedsObservable","_readAndPublish","createGamesJackpotsPublisher","createJackpotFeedsReader","_startOrStopJackpotRequest","_applyGuardedRequestDecision","_createIntervalReference","closedGame","readGameJackpot","forcePublish","force","readAll","jackpotData","ByGameType","ById","_buildJackpotDataById","TotalJackpotsInCents","_publishJackpotsWithState","delayPublish","specialJackpots","_filterJackpotsWithState","atLeastOneJackpotUpdate","jpIdString","jpId","currentJackpot","jackpotIsEqual","Jackpot","JackpotState","jackpotDataById","gameJackpotData","Jackpots","JackpotId","firstJP","secondJP","LastWinAmount","MustHitTime","MessageButton","defaults","makeid","buttomTypeClass","BUTTONS_DEFAULT_CLASS","MessageModel","hasButton","footerContentEl","defaultOptions","imgClass","ignoreMobile","titleElements","_createContentEl","_createFooterContentEl","titleElTemplate","IMAGE_CONTENT_SELECTOR","CLOSE_BUTTON_SELECTOR","FOOTER_CONTENT_AREA","MessageComponent","alignmentClass","contentArea","themesService","getTextAlignment","footerDiv","messageTitle","titleEl","outerHTML","newTitleEl","mouseTargetElement","firstElementChild","customClass","buttonArea","alignment","htmlButton","closeMessage","_isHasImage","contentWrapper","_injectContent","_injectFooterContent","_injectTitleElements","_handleMessageTitle","_handleContentImage","_onMessageOpen","_onMessageClosed","openPopUpOnSecondWebView","closePopUpOnSecondWebView","messageMapper","MessageManagerService","_subscribeEvents","msgOptions","_messageUiDecorator","cgpMessage","RegulationModel","_reminderIntervals","_setRegulationCode","_setReminderIntervals","_setTimeLimitPercentageReminder","_setMaxDurationsInMinutesForMobile","_setMaxDurationsInMinutesForPC","_setLossLimitPercentages","_setIntervalReminderInMinutes","_setRestrictionPeriodsInMinutes","_setSessionCooldownConfigData","_regulationCode","RegulationConst","_splitCommaSeparatedNumbers","_extractRegulationSpecificConfig","_timeLimitPercentageReminder","commaSeparatedNumbers","_maxDurationsInMinutesForMobile","_maxDurationsInMinutesForPC","_lossLimitPercentages","_intervalReminderInMinutes","_restrictionPeriodsInMinutes","_sessionCooldownConfig","cooldownTime","sessionCooldownTime","configName","regulationParams","_sequences","DefaultRegulation","RegulationFactory","_regulations","configs","regulationKey","_createRegulationKey","_createRegulation","isNetherlands","regulationCreateParams","RegulationService","_regulationSuffix","_regulationFactory","_registeredBeforeCurrentLogin","_logginMessagesAlreadyShowed","regulationFactory","_setRegulationCSS","startSessionTimer","showGamePopup","showLoginMessage","stopSessionTimer","onKickEvent","_setSecondWebViewCSS","regSuffix","getCssSuffix","isOpen","webViewClass","getTimeLimitPercentageReminder","isGamePopupStepPass","getMaxDurationsInMinutesForMobile","getMaxDurationsInMinutesForPC","getLossLimitPercentages","getIntervalReminderInMinutes","getRestrictionPeriodsInMinutes","getSessionCooldownConfigData","enableSummaryMessageForPortugal","shouldShowPlayerLimitsToaster","checkIfCorrectAppInUse","shouldCallCountryByIP","ToasterStorage","toasterID","displayedQueue","_getQueueFromStorage","toasterParams","pendingQueue","ToasterFactory","toasterData","toasterConfig","toasterType","_determineToasterType","_buildAckToasterConfig","_buildActionToasterConfig","_buildTimedToasterConfig","_addTimerToToaster","toasterUICfg","customUIConfig","progressBarColor","getColors","toasterTypeConfig","_createToasterTypeConfig","image","toasterHTML","domElements","_getToasterTextElements","toasterUIConfig","getFonts","toasterOkBtn","getUserPreferences","iziToastLib","_sendBtnClickedAnalytics","toast","hideToast","actionBtn","buttonText","getFontSizes","cssImage","titleLineHeight","applyDomConfig","_applyGameToasterDomConfig","textContainer","ToasterHandler","getToasterInfoCallback","_getToasterInfoCallback","m","iziToast","toasterInfo","rootElement","ToasterService","_toasterStorage","_receivedToasterEvent","_appResumeEvent","_toasterContainer","_toasterFactory","_authStateChange","_showSavedToasts","libParams","_mapUCCFormatToLib","_isGameToaster","_handleGameToasters","notificationCfg","_prepareToastParams","_showToast","toasterRootElement","toasterBody","theme","onOpening","iziToastSettings","toasterTitle","zindex","bodyElement","_onToastHide","loadIziToastLib","gameToasters","cgt","_handleToaster","toastConfig","saveToPending","saveToDisplayed","toasterList","shownGameToasters","toaster","_handleToasterOpen","_onToastShow","onClosing","_handleToasterClose","buildToasterConfiguration","pendingToasters","getPendingToasters","_logout","clearStorage","onToastMessageReceived","removeAllToasts","iziToastObj","iziToastObject","_sendToasterOpenedAnalytics","_applyCustomDomConfig","_getToasterElement","toasterTouchHandler","pause","resume","domListeners","_addToasterCSSImage","toasterImgElement","removeToasterConfiguration","libIdent","childrenNo","childNodes","metaData","MetaDataParams","MobileImage","PCImage","IconImagePath","responseTopicPath","ResponseTopicPath","LangIso3","removeEmptyPropertiesfromObject","TouchIDModel","_isFeatureEnable","_srvtoken","_deviceId","_bundleId","_deviceTouchEnable","_loginWithTouch","_autoLogin","_initSuccess","_getIsInitScreenShowed","isTokenEmpty","_updateTouchEnable","_updateTokenData","saveTokenData","targetvalueParams","WEB_LOGIN_MODES","TouchID","_TouchIdComponentController","initComplete","_onAutoLogin","_successLogin","_failLogin","setInitScreenShowed","getTokenAndCheckEnable","clearToken","loginerror","_touchCtlOpend","_touchCtlClosed","_triggerFitToPlayOrLogin","_touchIdAutoLoginOnInit","TOUCH_GT_SET_ENABLE","isloginWithTouch","setloginWithTouch","clearAll","fitToPlayEnabled","_getTouchIdToken","updateLoginFormModeType","triggerTouchIdLogin","getTouchIdToken","setTokenData","isTokenEnable","callOpenTouchId","_loginWithToken","setResTouchParams","isSuccess","getParamsForToken","saveParamsForToken","getParamsForLogin","setAutoLogin","cidData","isAutoLogin","_checkOtherCid","canDisplayInitializeScreen","_openController","setScreen","control","getText","openTouchId","isTokenAndCheckEnable","setSrvToken","setTokenRes","setToken","getSrvToken","closeComponentController","onTouchVerifyError","skip","tryAgain","errorlog","onTryAgain","SCHEME","UrlSchemeModel","_featureData","_featueName","_setfeatureName","tmpData","logData","delimiter","splitDeepLinkDataArray","deepLinkData","schamaParamsMap","sessiontimer","UrlScheme","_getInfoUrlScheme","getInfoUrlScheme","_isDeepLink","_updateDeepLinkAndCallFeature","_updateAndCallFeature","setDeepLinkData","clearUrlScheme","onHybridUrlScheme","convertedObject","paramObject","paramValue","convertQueryStringToObject","setInfoUrlScheme","getFeatueName","getFeatureData","GNWPServiceModel","_apiURI","_navigationURI","_templates","_setTemplates","templates","_setURI","_setNavigationURI","sharedNavigationURI","isValid","template","DEVICE_ENUM_TYPE","navigationParams","baseUrl","_setBaseUrl","_setNavigationParams","navigation","form","hiddenField","_performToIframeNavigation","_performToNewWindowNavigation","getElementsByName","getGNWPPostForm","submit","GnwpService","marketingRes","GNWPRequest","_getGNWPParams","getRedirectUri","_replaceNavigationParams","getLexisNexisSession","isValidTemplate","fixVersion","sizeDiff","startIndex","IOS","ANDROID","NON","GNWPUri","getGNWPUri","_isValidRequest","_fixVersionMaxSize","isNative","storeRegistrationCookiesData","googleSessionID","defaultHybridSerial","getDefaultHybridSerial","sr","hybridScheme","getDeviceTypeForGNWP","hybridNativeType","getNativeType","registrationCountry","navResp","BRANDED_THEMES","THEMES_CLASSES_LIST","THEMES_DEFAULTS","THEMES_LIMITS","ThemesModel","_mergedPreferences","fonts","fontSizes","colors","userPreferences","mergeDefaultsWithUserPrefs","fontTypes","captcha","resultObj","userObject","defaultProp","userProp","ThemesService","userPrefernceAfterRenaming","_renameAllToIncludeAllPath","brandKey","_getThemesBrandKey","classPropertiesChangedFlag","currentClass","Consts","_getThemesBrandedClass","classStyle","currentClassProperties","Set","_changeValueAccordingToUserValue","_checkLimits","_addSuffix","defaultClass","brandedClasses","brandedClass","mergedClass","brandedProp","brandProperty","textAlignment","getMergedPreferences","themes","themesWithNewNames","_renameToIncludeAllPath","changeThemeAccordingToUserPreferences","propertyNameLowerCase","themeName","themeContent","newPath","firstProperty","secondPropertyName","T3D_TOUCH","ThreeDTouchModel","_gameCaption","newGameId","saveRecentlyPlayedGame","ShourtcutsLaunch","ThreeDTouch","initThreeDTouch","updateRecentlyPlayed","_getCurrectShourtcutsLaunchTxt","init3DTouchShourtcutsLaunch","bResolve","shourtcutData","setShourtcutGameCaption","saveInitGameId","getRecentlyPlayedGame","getCurrectGameName","_gamesInformationService","getUpdateShortcutDataObj","update3DTouchShortcut","getShourtcutGameCaption","updateGameShourtcut","shourtcuts","delete3DTouchShourtcut","deleteAll3DTouchShourtcuts","get3DTouchShortcutLaunch","DEEP_LINK_HYBRID","DeepLinkModel","_deepLinkObject","extractDeepLinkObject","deepLinkObject","DeepLinkHybrid","getDeepLinkObject","FABRIC","FabricModel","_ev","Fabric","_addEvent","_IsValid","addFabricEvent","evName","evkeys","GEO","GeoModel","datatmp","stripslashes","setString","replaceAll","Geo","_updateEnable","_getGeoLocation","isValidData","geoLocationRes","PUSH","PushModel","_bFeatureEnable","_actionData","isNullOrEmpty","toReplace","substring","pushNotificationdData","_replaceIfExistAt","initData","parsePerDevice","parseData","Push","isPushDeviceEnable","updateEnable","_addTagOpenAppVer","_addTag","_remTag","_setAlias","addTag","tag","remTag","setAlias","parseInitData","actionData","getActionData","AI_ENGINE_TYPE","AI_NEW_GAMES_KEY","AI_GAMES_KEY","AiListService","_cachedRecommendedGames","_cachedNewGamesRecommendations","_cachedRecommendedGamesForPlayerByListType","_getGameRecommendationsPromise","maxGames","shouldFilterByRecentlyPlayed","numberOfRecentlyPlayedGameToFilterOut","_resolveAIList","getGameRecommendations","_playerHasRecommendations","engine","gameTypesOrderDict","engineId","_getEngineID","_getGameRecommendationsEngine","getGameRecommendationsForPlayerUrl","engineType","Engine","_convertToGameTypesDict","_getNewGameRecommendations","aiEngine","getNewGamesRecommendationsForPlayerUrl","ML888","listTypeIds","getTrendingRecommendedGamesForPlayerApiUrl","every","listID","gameTypesPerListID","_filterGameTypes","gameRecommendations","_sortGames","apiFunction","storeKey","defaultValueForKey","aiGamesStored","_filterRecommendedGames","aiGames","aiRecommendations","_filterByRecentlyPlayed","filteredGameTypes","_filterAllowedToPlayRealGames","filterAllowedToPlayRealGames","FEATURE_GAME_RECOMMENDATIONS","dict","gameTypesDict","gt1","gt2","index1","index2","US_STATES_LIST","NEW_JERSEY","PENNSYLVANIA","NEW_YORK","CountryService","_geoLocationInfo","_shouldCallCountryByIP","_countryByIP","supportLoginAndRegisterRedirect","redirectToLoginUS","redirectToRegisterUS","anonymousCountryTTL","mustCallCountryByIPApiFlag","countryName","currentCountry","redirectTo","_getURLToRedirectByType","redirectToURL","geolocationResponse","countryISO3","CURRENCY_SYMBOLS","CAD","NOK","USD","EUR","GBP","DKK","SEK","RON","CURRENCY_DEFAULT_FORMAT","WALLET_TOKEN_PROPERTY_KEY","CurrencyService","_currencyFormat","anonymousCurrency","roundIfZero","Accounting","_modifyAccountingLibraryFunctionality","_currencyCode","_refreshCurrencyFormat","structureFormat","currSymbol","overrideCurrencySymbol","getCurrencySymbol","getAnonymousCurrency","tokenCurrency","_localStorageTokenCurrency","walletToken","currencyFormat","splitFormat","fullFormat","symbol","thousand","decimal","_createFormatting","_asyncAnonymousCurrency","_languageFormatting","defaultCountry","getDefaultCountry","countryCurrencyMap","_anonymousCurrencyPostActions","FreePlayVoucher","_logger","checkExpirationDate","toCheck","isThirdPartyVoucher","FreePlayService","_messageMode","_shouldAutoOpenMessage","_tripleEightVouchers","_oAuthResolver","messageMode","isOpenMesage","_onFreePlayReceivedHandler","_notifyOnFreePlayChanges","_onFreePlayRemoved","_onAuthChanged","_openVouchersMessage","opts","_onVoucherMessageDisplayed","thirdPartyVouchers","thirdPartyFreePlayService","getStoredFreePlays","appendVouchers","ids","_persistModel","displayedIDs","getAllVouchers","_saveDisplayedFreePlay","voucherDelta","voucherToCheck","before","getByID","getMergedResult","_onFreePlayReceived","isFirstVoucher","addOrUpdate","removedVoucher","_getVouchersMessageParams","_openVouchersMessageByMode","messageProps","vouchersMessage","_getFreePlayDataForUser","userCID","filterGameTypes","_filterVouchers","_excludeVouchers","_sortByGameRecommendations","arrPromises","voucherPromise","sortGames","sortedGamesList","excludeVouchersList","exVouchers","exVoucher","gameInfoList","allVouchers","filteredByDate","_filterVouchersByDate","_filterVouchersByAvailableGames","availableVouchers","hasPendingDeletion","getDisplayedFreePlayIDs","voucherGames","_filterVoucherGames","_filterGamesByMinBet","_isNewFreePlay","voucherGameID","voucherGame","fpID","GameConversionServiceModel","conversionFlags","activeFlag","_setConversionFlags","flags","timers","flagList","flagIndex","GameConversionService","flagTime","getActiveFlag","nextFlag","setActiveFlag","_activateTimer","resetFlag","_resetFlag","GameServiceModel","_useDefaults","useDefaults","_setNavbarCustomClientProperties","_setResponsibleGameView","responsibleGameView","_responsibleGameView","navbarProps","_navbarProps","GameManagerService","getResponsibleGameView","GAME_REASON_CTA","GAME_POST_MESSAGES","GameReasonService","isGameClose","numReason","gameEvent","externalClick","urlParam","_tryToSendReasonPostMessage","EventId","postMessageService","sendPostMessage","HTTPLoader","GQ_LOCAL_STORAGE_KEY","GQ_CONTAINER_ID","GamesQuestionnaireService","_cashierSubscription","_membershipSubscription","_loginSubscription","_gqContainer","_isListeningToCashier","_gamesQuestionnaireBuilder","_startTimeMs","sourceUrl","enabledForRegulation","_isEnabledForCurrentRegulation","_startListeningToCashier","_showOverlay","_listenToLogin","_handleCloseCashier","_sendElasticAnalytics","_getContextObject","contextObject","onReady","onReadyHandler","onErrorHandler","onComplete","onCompleteHandler","overlayClass","_displayLoader","_initializeScript","langISO3","userInfo","systemId","timeElapsedSecs","toFixed","substr","_closeGamesQuestionnaire","arePreferencesSaved","clearGamesRecommendationsCache","_fireGamesQuestionariesCompleted","elasticData","_buildElasticData","CLIENT_IPs_STORAGE_KEY","SHOULD_SEND_IPs_STORAGE_KEY","ClientIpsHandler","_ipResponseTimeout","_resetIPsList","_clearIPsFromLocalStorage","_setShouldSendIPs","headers","_shouldSendIPs","currentClientIP","_getClientIPs","_addClientIP","_disposeIPRequestTimer","setOnlyIfExpired","timestamp","clientIPs","clientIP","Http2Service","_origin","_clientIPsHandler","_urlEncodeOneParam","_applicationParams","_urlEncodeUrlParams","fetch","encodeBody","parseFetchResponse","_parseFetchError","_logFetchError","errorStatusCode","errorStatusText","statusText","clientIPsHandler","extractClientIpFromResponseHeaders","_executeFetch","_encodeXFormBodyParams","authenticationData","fullURL","productPackageId","operatingSystem","getBearerToken","Authorization","clientRequestId","generateGuid","clientProperties","_getClientProperties","fakeClientIp","getFakeClientIP","FakeClientIP","CGP_CMSSource","CGP_DomainOrigin","beginNewRequest","HybridVersionHandlerModel","_setBlockMinVersionIOS","blockMinVersionIOS","_setBlockMinVersionAndroid","blockMinVersionAndroid","_setMessageMinVersionIOS","messageMinVersionIOS","_setMessageMinVersionAndroid","messageMinVersionAndroid","_setAppStoreLink","appStoreLink","_setGooglePlayLink","googlePlayLink","_blockMinVersionIOS","_blockMinVersionAndroid","_messageMinVersionIOS","_messageMinVersionAndroid","HybridVersionHandlerService","linkProperties","_openApplicationStore","getApplicationStore","userVersion","minVersion","userSubVersions","minSubVersions","getBlockMinVersion","getMessageMinVersion","_isLowerThenMinVersion","_showLowVersionBlockMessage","_showLowVersionRegularMessage","IDLE_RECOMMENDATIONS_SELECTORS","IDLE_RECOMMENDATIONS_TRANSLATIONS","IdleRecommendationsComponent","recommendedGameType","dataAnalytics_numberOfAppearances","_onClosedHandler","_sendOnCloseAnalytics","_sendOpenedAnotherGameWhileIdleIsActiveAnalytics","_dontSendOnCloseAnalytics","originalOnClosed","recommendedGameInfo","second_title","_injectGameItemComponent","_setBackgroundImage","gameItemComponent","_onPlayRecommendedGameHandler","divElement","ACTIVITY_DETECTION_INTERVAL","IDLE_DETECTION_INTERVAL","IDLE_RECOMMENDATIONS_LOCAL_STORAGE_KEY","DISPLAY_INTERVAL","IdleRecommendationsService","_idleDetectionInterval","_numberOfAppearancesInSession","_maxAppearancesAllowedPerSession","_idleDetectionSubscription","_isIdleRecToasterDisplayed","_displayInterval","_component","idleDetectionInterval","maxAppearancesPerSession","_getNoOfAppearancesInSessionFromLocalStorage","displayInterval","_stopIdleDetection","_startIdleDetection","_resetIdleDetectionTimer","_resetAppearancesInSession","_closeToasterWhenOpeningAnotherGame","_startUserIdleDetection","_startUserActivityDetection","_disposeIdleDetectionTimer","closeToasterWhenOpeningAnotherGame","_showIdleRecommendationToaster","_getRecentlyPlayedGame","recentlyPlayedGame","_getRecommendedGameBasedOnCorrelation","recomGameType","_getRecommendedGameInfo","recomGameTypeInfo","_increaseAppearancesInSession","recentlyGamesPlayed","recentlyGamePlayed","gamesCorrelationService","getCorrelatedGames","gameDataInfo","noOfAppearancesInSession","_setIdleRecommendationDataInLocalStorage","DAILY_JACKPOTS_STATES","DAILY_JACKPOTS_AMOUNT_THRESHOLDS_DEFAULT","threshold","toasterName","TWILIGHT_JACKPOTS_AMOUNT_THRESHOLDS_DEFAULT","JackpotToastersService","_previousJackpot","_previousJackpotPerGameType","_stateJackpotUpdate","progressiveJackpot","toasterPerGame","_onJackpotUpdate","clearPreviousJackpotsAmounts","toasterPerGameItem","jackpotAmount","_checkThreshold","thresholds","showGameIcon","oldJackpotAmount","gameTypeToPlay","currentThresholdData","currentJackpotData","jackpotID","SUPER_COLD","_showJackpotDropToaster","showActionableToaster","_toasterCommonProps","toasterDetails","currencySymbol","jackpotThreshold","formatNumberToBytesNotation","gameIcon","stateJackpot","thresholdReachedTitleText","dropTitleText","_checkIfJackpotDrop","jackpotsWithState","JackpotInternalId","_stateJackpotToaster","dailyJackpotAmountThresholds","dailyJackpot","Twilight","twilightJackpotAmountThresholds","twilightJackpot","toasterImage","LiveTablesStore","_isStarted","_currentFeedsRegulationID","_currentFeeds","_feedsInterval","feedsIntervalFrequency","liveTablesUrl","LiveTables","_evaluateBetLimitsForCurrentFeeds","getOwnPropertyNames","relevantLimit","Limits","LiveTablesService","_tablesStore","LiveTableFeedsStore","RegulationTypeId","getBetLimitsFromLiveTablesEnabled","MenuModel","_menuDefault","analyticEvent","openHistoryLink","isAuthorize","setVisible","openGameSessionHistoryLink","regulations","nCode","openOptions","asyncTasks","getTouchIDFeaturer","setVal","hideInMiniOrbitRegulations","showInfo","bIsDebugMode","MenuService","getMenuStructure","_addVisibleMenu","menuItems","_menuItems","getJSON","menus","menuItem","clickHandler","preAction","_injectDataAttribute","menuId","menu","currentMenu","NetEntExtend","_netEntExtendObject","netEntExtendObject","resize","NetEntService","_loadNetEntSdk","netEntSdk","successFunc","netEntExtendObj","errorFunc","_createNetEntLaunchGameConfig","launch","staticServerURL","_buildStaticServerUrl","gameServerURL","walletMode","enforceRatio","launchType","lobbyURL","depositAvailable","disableDeviceDetection","sdk","_getSdkFromWindow","prepareGameUrl","staticServerUrlTemplate","_getCasinoId","PendingActionModel","PendingActionService","_triggerEvent","_preExecuteFunction","_inMemoryPendingAction","opt","_getActionForExcecution","_callAction","_openExternalLink","_openGame","FallbackHandlerDependenciesFactory","_handlerParams","handlerName","Wallet","FallbackService","_fallbackHandlers","createHandler","getFallbackName","fallbackName","fallback","_startFallback","_getFallbackByName","_stopFallback","excludedFallbacks","ResizeDetectorModel","setWidth","setHeight","_width","orientation","_orientation","_deviceType","ResizeDetectorService","getWidth","getHeight","_onResizeScreenEventsDetector","_onFullScreenEventsDetector","_responsiveDeviceChange","_orientationChanged","_checkScreenHeight","_checkScreenResolution","_checkMobileOS","_checkIpadDevice","_checkIsAndroid","_checkIphoneVersion","_checkIsHybrid","_checkIsEmbeddedHybrid","_addStyleTagForEvoGames","_onFullScreenChange","webkitIsFullScreen","mozFullScreen","msFullscreenElement","fullScreenFlag","fullScreenElem","fireResize","currentDeviceWidth","currentDeviceHeight","_changeResponsiveDevice","_changeOrientation","removeOrientationState","getOrientation","inputText","loginPasswordText","blur","setOrientation","addDeviceType","removeDeviceType","setDeviceType","bodyElem","createEvent","eventDetails","initEvent","dispatchEvent","LOW_RESOLUTION_SELECTOR","LOW_HEIGHT_SELECTOR","isProbablyIPad","getIphoneVersion","styleTag","getElementById","LoggedinCashierOnlyLayoutModel","LoggedinCashierOnlyLayout","_onCashier","userBadge","LoggedinInlineLayoutModel","_bindingSelectorDOM","_setShowGreeting","_showGreeting","isOMGExist","_isOMGExist","mockMenu","LoggedinInlineLayout","badge","indicator","_getUsername","badgeClass","_createBankrollComponent","_onFreePlayChanged","omgStatus","_onOMGStatusChanged","_onPostCTAClicked","balancePlaceHolders","getBankroll","balancePlaceHolder","_updateIndicatorStatus","_isIndicatorOn","isFreePlayExist","getIsNewFreePlay","getIsOMGExist","getIsFreePlay","isFPExist","setIsFreePlay","setIsOMGMessageExist","getUsername","postCTAHandler","getPostCTAClickedFn","_getIndicatorStatus","FireBase","_InstanceId","_AppId","getFireBaseData","fbdata","FirebaseAppID","FirebaseAppInstanceID","LEXIS_NEXIS_CONST","LexisNexis","_bLexisNexisSupport","_bIsDeviceSupportWithAnswer","_origid","_server","_profilingSessionId","_startTime","origid","server","IsLexisNexisSupported","bWaitToResponse","_isDeviceNotSupport","_getLexisNexisInfoFromDevics","getProfilingSessionId","timeinseconds","datainfo","NATIVE_LOGS","NativeLogs","OnDemandModel","_nTimeOut","_bEnableChillRemoteLoading","enableChillRemoteLoading","_gatValToStore","allvals","gameArr","allGames","getAllOnDemandGames","OnDemand","_isOdrRealProgress","deleteAllOnDemandGames","loadRemoteChill","isEnableChillRemoteLoading","readAnonymousGameConfiguration","_getChillUrl","_logError","grschillUrl","updateProgressBarV2","updateProgressBarV1","progressbarfake","progressbarreal","resourcename","resourcexofmeny","sharedolder","_deleteGameFolder","deleteGameFolder","remianGames","deleteGameFolders","MESSAGE_DISPLAY_MODE","MESSAGE_ANIMATION_TYPE","PLATFORM_MESSAGE_TYPE","MESSAGES_FEATURES_DEFAULTS","OMGVersion","Toasters","toasterVersion","Kick","BetRejected","MessagesHandler","_messagesConfig","_updateMessages","PlatformMessagesType","omgData","parseOmgMessage","OMGFieldsValueChange","TOASTER","MessageDataJson","_handleToasterTypeMessages","KICK","kickData","INIT_GEO","initGeoDataData","UPDATE_RESTRICTION_V2","_updateRestrictions","BET_REJECTED","PROMOTION_DISPLAY_IN_CLIENT","messagesParams","ReasonID","restrictionsByActions","dataJsonArray","playerBurnoutMessages","regularToasterMessages","dj","_isPlayerBurnoutMessage","dataJson","DisplayMode","ANIMATION","AnimationType","BURNOUT","MessageData","parsedMessage","CGP_START_SELECTOR","Initialize","onInitCompleteCallback","getConfig","loader","_initializeServices","loadDeviceSetting","_registerAllServices","_doServicesAsyncJobs","_executeServicesOnInitializationCompleted","loadDirective","initializeService","_getClassProperties","classObject","objectName","srv","registerService","asyncJobsPromises","promises","onInitializationCompleted","externalLinkController","skipConversion","convertedOptions","Icon","RunningGameHandler","_Logger","modelSettings","Debug","_isSdkReady","_lastOpenedGame","_onOrbitInitCompleteFired","setDefaultConfig","userSettings","setUserConfig","targetSubBrand","alias","paramsA","paramsB","loginViewOptions","menuService","wasSuccessful","getDateFormat","dateTime","dateTimeHistory","eventOptions","getHybrid","getTrendingRecommendedGamesForPlayer","innerScreen","setTouchIdComponentController","getExternalBrandCallbackURL","getExternalBrandCallbackURLMethod","sourceSubBrandID","getSourceSubBrand","sourceSubBrandName","openSafariTest","redirectToGameSessionHistory","getCGPMaxOverlayZIndex","getGoogleClientID","dataLayerObject","cents","areAnyFreePlays","playerMessagesService","getMessageStrategy","KICKUpdateHandler","msgFields","fullTopic","omgService","topic","fields","FPUpdateHandler","FPRemoveHandler","componentTesterService","openComponentOnOverlay","applyRestrictions","getGameSessionData","filterOutRecentlyPlayedGames","getAINewGamesList","getAbTestingData","countPlayerChallenges","routeParams","getDiagnosticMessages","getLoginTime","OMGUpdateHandler","getDepositWidgetEligibilityDetails","getCashoutWidgetEligibilityDetails","getGRSEnvironments","createComponentRenderer","gamesQuestionnaireService","getDailyDealCampaigns","getJackpotsWithState","getNumberOfAwaitingMessages","freePlayVouchers","safezoneLoaderService","loadSafezoneSdk","localStorage","requestData","getGeoLocationInfo","webPushService","promptPermission","openHistoryGame"],"mappings":"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","file":"static/js/cgp-sdk.4077d5ac.chunk.js","sourcesContent":["/**\n * System event symbols, used internally for identifying events uniquely.\n */\nconst SYSTEM_EVENTS = {\n ON_INIT_COMPLETE : 'ON_INIT_COMPLETE',\n ON_ORBIT_INIT_COMPLETE : 'ON_ORBIT_INIT_COMPLETE',\n RUN_AUTOLOGIN : 'RUN_AUTOLOGIN',\n RUN_AUTOLOGIN_TOUCH_ID : 'RUN_AUTOLOGIN_TOUCH_ID',\n MESSAGE_OPEN : 'MESSAGE_OPEN',\n MESSAGE_CLOSE : 'MESSAGE_CLOSE',\n ON_BEFORE_OAUTH_STATE_CHANGE : 'ON_BEFORE_OAUTH_STATE_CHANGE',\n OAUTH_STATE_CHANGE : 'OAUTH_STATE_CHANGE',\n AUTOLOGIN_SUCCESS : 'AUTOLOGIN_SUCCESS',\n AUTOLOGIN_FAILED : 'AUTOLOGIN_FAILED',\n SUCCESSFULLY_LOGIN_RESPONSE : 'SUCCESSFULLY_LOGIN_RESPONSE',\n ON_RUN_AUTOLOGIN : 'ON_RUN_AUTOLOGIN',\n FAIL_LOGIN_RESPONSE : 'FAIL_LOGIN_RESPONSE',\n CLOSE_GAME : 'CLOSE_GAME',\n LOGIN_FORM_OPEN : 'LOGIN_FORM_OPEN',\n LOGIN_FORM_CLOSE : 'LOGIN_FORM_CLOSE',\n GET_NEW_TOUCH_TOKEN : 'GET_NEW_TOUCH_TOKEN',\n SCREEN_CHANGE_STATE : 'SCREEN_CHANGE_STATE',\n POST_MESSAGE_ARRIVE : 'POST_MESSAGE_ARRIVE',\n HYBRID_POST_MESSAGE_ARRIVE : 'HYBRID_POST_MESSAGE_ARRIVE',\n EXTEND_USER_TIME_TO_LIVE : 'EXTEND_USER_TIME_TO_LIVE',\n SCREEN_RESIZE_CHANGED : 'SCREEN_RESIZE_CHANGED',\n GAME_OPEN : 'GAME_OPEN',\n OPEN_GAME_ERROR : 'OPEN_GAME_ERROR',\n FULL_SCREEN_CHANGE : 'FULL_SCREEN_CHANGE',\n OPEN_OVERLAY : 'OPEN_OVERLAY',\n CLOSE_OVERLAY : 'CLOSE_OVERLAY',\n CLOSE_ALL_OVERLAY : 'CLOSE_ALL_OVERLAY',\n EXTERNAL_LINK_OPEN : 'EXTERNAL_LINK_OPEN',\n EXTERNAL_LINK_CLOSED : 'EXTERNAL_LINK_CLOSED',\n EXTERNAL_LINK_OPENED : 'EXTERNAL_LINK_OPENED',\n APP_RESUMED : 'APP_RESUMED',\n APP_PAUSED : 'APP_PAUSED',\n ANALYTIC_TRIGGER_ACTIVATED : 'ANALYTIC_TRIGGER_ACTIVATED',\n ANALYTIC_DATA_LAYER_UPDATE : 'ANALYTIC_DATA_LAYER_UPDATE',\n ANALYTICS_EXPERIMENT_ACTIVATED: 'ANALYTICS_EXPERIMENT_ACTIVATED',\n ANALYTICS_OPTIMIZE_TRIGGER : 'ANALYTICS_OPTIMIZE_TRIGGER',\n INCOMING_MARKETING_DATA : 'INCOMING_MARKETING_DATA',\n INCOMING_MARKETING_FLOW : 'INCOMING_MARKETING_FLOW',\n CONVERSION_PRE_LOGIN_EVENT : 'CONVERSION_PRE_LOGIN_EVENT',\n CONVERSION_POST_LOGIN_EVENT : 'CONVERSION_POST_LOGIN_EVENT',\n PLAYER_ACTION: 'PLAYER_ACTION',\n\n BALANCE_UPDATED: 'BALANCE_UPDATED',\n CURRENCY_UPDATED: 'CURRENCY_UPDATED',\n RECENTLY_PLAYED_GAMES_UPDATED: 'RECENTLY_PLAYED_GAMES_UPDATED',\n LIVE_FEEDS_LATEST_WINNERS_UPDATED: 'LIVE_FEEDS_LATEST_WINNERS_UPDATED',\n LIVE_FEEDS_WINNINGS_UPDATED: 'LIVE_FEEDS_WINNINGS_UPDATED',\n LIVE_FEEDS_TOTAL_JACKPOTS_UPDATED: 'LIVE_FEEDS_TOTAL_JACKPOTS_UPDATED',\n LIVE_FEEDS_JACKPOT_AMOUNTS_UPDATED: 'LIVE_FEEDS_JACKPOT_AMOUNTS_UPDATED',\n LIVE_FEEDS_STATE_JACKPOTS_UPDATED: 'LIVE_FEEDS_STATE_JACKPOTS_UPDATED',\n OMG_AWAITING_MESSAGES_UPDATED: 'OMG_AWAITING_MESSAGES_UPDATED',\n OMG_OPEN_AWAITING_MESSAGES: 'OMG_OPEN_AWAITING_MESSAGES',\n OAUTH_REMOVE_FROM_LOCAL_STORAGE: 'SYSTEM_EVENTS.OAUTH_REMOVE_FROM_LOCAL_STORAGE',\n LOCAL_STORAGE_CHANGED: 'LOCAL_STORAGE_CHANGED',\n ELEMENT_CREATED: 'ELEMENT_CREATED',\n FREE_PLAY_UPDATED: 'FREE_PLAY_UPDATED',\n FREE_PLAY_VOUCHER_REMOVED: 'FREE_PLAY_VOUCHER_REMOVED',\n FREE_PLAY_OPEN_VOUCHERS_MSG: 'FREE_PLAY_OPEN_VOUCHERS_MSG',\n RESIZE_FORM: 'RESIZE_FORM',\n BEGIN_LOGIN_AFTER_REGISTRATION: 'BEGIN_LOGIN_AFTER_REGISTRATION',\n LOGIN_COMPLETED_AFTER_REGISTERATION: 'LOGIN_COMPLETED_AFTER_REGISTERATION',\n LOGIN_FAILED_AFTER_REGISTRATION: 'LOGIN_FAILED_AFTER_REGISTRATION',\n REGISTRATION_COMPLETED: 'REGISTRATION_COMPLETED',\n DETACH_REGISTER_EVENT: 'DETACH_REGISTER_EVENT',\n FREE_PLAY_VOUCHER_MSG_OPENED: 'FREE_PLAY_VOUCHER_MSG_OPENED',\n FREE_PLAY_OPEN_INTERNAL_VOUCHERS_MESSAGE: 'FREE_PLAY_OPEN_INTERNAL_VOUCHERS_MESSAGE',\n TOAST_CREATED: 'TOAST_CREATED',\n TOAST_SHOW: 'TOAST_SHOW',\n TOAST_HIDE: 'TOAST_HIDE',\n TOAST_CLOSE_BUTTON: 'TOAST_CLOSE_BUTTON',\n TOAST_USER_DISMISS: 'USER_DISMISSED_TOAST',\n HYBRID_ALERT: 'HYBRID_ALERT',\n HYBRID_OPEN_MAIL: 'HYBRID_OPEN_MAIL',\n HYBRID_UPDATE_INFO_KEY : 'HYBRID_UPDATE_INFO_KEY',\n FIREBASE_GOT_NEW_TOKEN: 'FIREBASE_GOT_NEW_TOKEN',\n TOUCH_ID_GET_TOKEN_FROM_SRV: 'TOUCH_ID_GET_TOKEN_FROM_SRV',\n TOUCH_ID_INIT_SCREEN_SHOW: 'TOUCH_ID_INIT_SCREEN_SHOW',\n TOUCH_ID_TRY_AGAIN_SKIP: 'TOUCH_ID_TRY_AGAIN_SKIP',\n TOUCH_ID_CHECK_TOKEN_ENABLE: 'TOUCH_ID_CHECK_TOKEN_ENABLE',\n TOUCH_ID_TOKEN_ENABLE_RES: 'TOUCH_ID_TOKEN_ENABLE_RES',\n TOUCH_ID_CLEAR_TOKEN: 'TOUCH_ID_CLEAR_TOKEN',\n TOUCH_ID_NATIVE_CANCEL: 'TOUCH_ID_NATIVE_CANCEL',\n TOUCH_ID_LOGIN_ERROR: 'TOUCH_ID_LOGIN_ERROR',\n TOUCH_ID_AUTO_LOGIN: 'TOUCH_ID_AUTO_LOGIN',\n TOUCH_ID_STATE_CHANGED: 'TOUCH_ID_STATE_CHANGED',\n WEB_VIEW_NAVIGATE_GAME: 'WEB_VIEW_NAVIGATE_GAME',\n WEB_VIEW_NAVIGATE_DEPOSIT_WIDGET: 'WEB_VIEW_NAVIGATE_DEPOSIT_WIDGET',\n WEB_VIEW_NAVIGATE_CASHIER: 'WEB_VIEW_NAVIGATE_CASHIER',\n SECOND_WEB_VIEW_OLD_CALL: 'SECOND_WEB_VIEW_OLD_CALL',\n SECOND_WEB_VIEW_CLOSE: 'SECOND_WEB_VIEW_CLOSE',\n SECOND_WEB_VIEW_OPEN: 'SECOND_WEB_VIEW_OPEN',\n SECOND_WEB_VIEW_CLOSE_ALL: 'SECOND_WEB_VIEW_CLOSE_ALL',\n MINI_CASHIER_HEIGHT_CHANGED: 'MINI_CASHIER_HEIGHT_CHANGED',\n CONTENT_LOADED: 'CONTENT_LOADED',\n OVERLAY_OPEN_AWAIT: 'OVERLAY_OPEN_AWAIT',\n OVERLAY_CLOSE_EXPIRED: 'OVERLAY_CLOSE_EXPIRED',\n\tINTERNAL_URL_NAVIGATION: 'INTERNAL_URL_NAVIGATION',\n FABRIC_ADD_EVENT : 'FABRIC_ADD_EVENT',\n ADD_TAG_OPEN_APP_VER : 'ADD_TAG_OPEN_APP_VER',\n ADD_TAG : 'ADD_TAG',\n REM_TAG : 'REM_TAG',\n DEEPLINK_RECEIVED: 'DEEPLINK_RECEIVED',\n WEB_LOGIN_OPEN_REGISTER: 'WEB_LOGIN_OPEN_REGISTER',\n ROUTE_CHANGED: 'ROUTE_CHANGED',\n RESTRICTIONS_CHANGED: 'RESTRICTIONS_CHANGED',\n SESSION_TIMER_UPDATE: 'SESSION_TIMER_UPDATE',\n WINDOW_FOCUS_GAIN: 'WINDOW_FOCUS_GAINED',\n WINDOW_FOCUS_LOSS: 'WINDOW_FOCUS_LOST',\n GEO_HYBRID_UPDATE_ENABLE : 'GEO_HYBRID_UPDATE_ENABLE',\n GEO_HYBRID_GT_CB : 'GEO_HYBRID_GT_CB',\n GEO_HYBRID_GET_LOCATION : 'GEO_HYBRID_GET_LOCATION',\n GEO_HYBRID_GET_LOCATION_RES : 'GEO_HYBRID_GET_LOCATION_RES',\n GEO_LOCATION_FAILED : 'GEO_LOCATION_FAILED',\n GEO_LOCATION_SUCCEED: 'GEO_LOCATION_SUCCEED',\n GEO_KICK_EVENT: 'GEO_KICK_EVENT',\n SESSION_EVENT_KICK: 'SESSION_EVENT_KICK',\n SESSION_EVENT_WALLET: 'SESSION_EVENT_WALLET',\n SESSION_EVENT_OMG_RECEIVED: 'SESSION_EVENT_OMG_RECEIVED',\n\tSESSION_EVENT_FREE_PLAY_RECEIVED: 'SESSION_EVENT_FREE_PLAY_RECEIVED',\n SESSION_EVENT_FREE_PLAY_REMOVED: 'SESSION_EVENT_FREE_PLAY_REMOVED',\n\tSESSION_EVENT_THIRD_PARTY_FREE_PLAY_UPDATED: 'SESSION_EVENT_THIRD_PARTY_FREE_PLAY_UPDATED',\n\tSESSION_EVENT_NET_POSITION_UPDATE: 'SESSION_EVENT_NET_POSITION_UPDATE',\n SESSION_EVENT_RECEIVED_TOASTER: 'SESSION_EVENT_RECEIVED_TOASTER',\n SESSION_EVENT_UPDATERESTRICTION_RECEIVED: 'SESSION_EVENT_UPDATERESTRICTION_RECEIVED',\n SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED: 'SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED',\n NET_POSITION_VALUE_UPDATE: 'NET_POSITION_VALUE_UPDATE',\n SECOND_WEB_VIEW_NAVIGATE_SPORT: 'SECOND_WEB_VIEW_NAVIGATE_SPORT',\n TIME_UPDATED_FROM_SERVER: 'TIME_UPDATED_FROM_SERVER',\n ON_BROWSER_PAGE_HIDE: 'ON_BROWSER_PAGE_HIDE',\n\tTOKEN_LIFETIME_EXPIRED: 'TOKEN_LIFETIME_EXPIRED',\n\tLIVE_TABLES_UPDATE: 'LIVE_TABLES_UPDATE',\n LOADING_INDICATOR_EMBEDDED_UPDATE: 'LOADING_INDICATOR_EMBEDDED_UPDATE',\n LOADING_INDICATOR_EMBEDDED_UPDATE_V2: 'LOADING_INDICATOR_EMBEDDED_UPDATE_V2',\n LOADING_INDICATOR_EMBEDDED_CLOSED_BY_X: 'LOADING_INDICATOR_EMBEDDED_CLOSED_BY_X',\n BLUE_RIBBON_PERSONAL_JP_STATE_CHANGED: 'BLUE_RIBBON_PERSONAL_JP_STATE_CHANGED',\n BLUE_RIBBON_PARTY_JP_STATE_CHANGED: 'BLUE_RIBBON_PARTY_JP_STATE_CHANGED',\n BLUE_RIBBON_PARTY_JACKPOT_WIN: 'BLUE_RIBBON_PARTY_JACKPOT_WIN',\n BLUE_RIBBON_PARTY_JACKPOT_INSUFFICIENT_MONEY: 'BLUE_RIBBON_PARTY_JACKPOT_INSUFFICIENT_MONEY',\n BLUE_RIBBON_CONNECTION_COMPLETE: 'BLUE_RIBBON_CONNECTION_COMPLETE',\n BLUE_RIBBON_IS_ENABLED_CHANGED: 'BLUE_RIBBON_IS_ENABLED_CHANGED',\n GAMES_QUESTIONNAIRE_COMPLETED: 'GAMES_QUESTIONNAIRE_COMPLETED',\n GAME_SEQUENCE_FINISH: 'GAME_SEQUENCE_FINISH',\n GAME_POPUP_SHOW: 'GAME_POPUP_SHOW',\n USER_APPROVE_GAME_POPUP: 'USER_APPROVE_GAME_POPUP',\n BONUS_ABUSE_PARKING_MONEY : 'BONUS_ABUSE_PARKING_MONEY',\n SHOW_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW : 'SHOW_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW',\n CLOSE_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW : 'CLOSE_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW',\n DEPOSIT_WIDGET_CLOSED : 'DEPOSIT_WIDGET_CLOSED',\n DAILY_DEAL_REMOVE_INDICATION: 'DAILY_DEAL_REMOVE_INDICATION',\n LOCATION_POPUP_OPEN : 'LOCATION_POPUP_OPEN',\n LOCATION_POPUP_CLOSED : 'LOCATION_POPUP_CLOSED',\n PLAYER_MESSAGES_STRATEGY_READY: 'PLAYER_MESSAGES_STRATEGY_READY',\n CHANGE_OVERLAY_PRIORITY: 'CHANGE_OVERLAY_PRIORITY',\n OMG_DISPLAYED: 'OMG_DISPLAYED',\n LIVE_GAME_SWITCHED: 'LIVE_GAME_SWITCHED',\n PROMOTIONS_CHANGED: 'PROMOTIONS_CHANGED',\n ODR_CLEAR_ALL_GAMES: 'ODR_CLEAR_ALL_GAMES'\n};\n\n/**\n * Client event symbols, used internally for identifying events uniquely.\n */\nconst CLIENT_EVENTS = {\n MENU_CLICKED: 'MENU_CLICKED',\n LOGIN_BUTTON_CLICKED: 'LOGIN_BUTTON_CLICKED',\n REALITY_CHECK_OPENED: 'REALITY_CHECK_OPENED',\n REALITY_CHECK_CLOSED: 'REALITY_CHECK_CLOSED'\n};\n\nconst USER_EVENTS = {\n ON_CLICK: 'click',\n ON_DOUBLE_CLICK: 'dblclick',\n ON_SUBMIT: 'submit',\n ON_MOUSE_MOVE: 'mousemove',\n ON_MOUSE_DOWN: 'mousedown',\n ON_KEY_PRESS: 'keypress',\n ON_DOM_MOUSE_SCROLL: 'DOMMouseScroll',\n ON_MOUSE_WHEEL: 'mousewheel',\n ON_TOUCH_START: 'touchstart',\n ON_TOUCH_MOVE: 'touchmove',\n ON_TOUCH_END: 'touchend',\n ON_MSPOINTER_MOVE: 'MSPointerMove',\n ON_RESIZE: 'resize',\n ON_FOCUS: 'focus',\n ON_CHANGE: 'change',\n ON_BLUR: 'blur'\n};\n\nconst USER_ACTIVITY_EVENTS_ALL = [\n SYSTEM_EVENTS.MESSAGE_CLOSE,\n SYSTEM_EVENTS.FULL_SCREEN_CHANGE,\n SYSTEM_EVENTS.CLOSE_OVERLAY,\n SYSTEM_EVENTS.CLOSE_ALL_OVERLAY,\n SYSTEM_EVENTS.APP_RESUMED,\n SYSTEM_EVENTS.PLAYER_ACTION,\n SYSTEM_EVENTS.TOAST_USER_DISMISS,\n SYSTEM_EVENTS.OMG_OPEN_AWAITING_MESSAGES,\n SYSTEM_EVENTS.FREE_PLAY_VOUCHER_MSG_OPENED,\n SYSTEM_EVENTS.BALANCE_UPDATED,\n\tSYSTEM_EVENTS.EXTEND_USER_TIME_TO_LIVE,\n SYSTEM_EVENTS.GAME_OPEN,\n SYSTEM_EVENTS.CLOSE_GAME\n];\n\n/**\n * we need this because app resume in hybrid poker nj happen every few minutes because they save the screen open.\n * so the user will ever have inactivity kick.\n * @type {[string,string,string,string,string,string,string,string,string,string]}\n */\nconst USER_ACTIVITY_EVENTS_FOR_HYBRID = [\n SYSTEM_EVENTS.MESSAGE_CLOSE,\n SYSTEM_EVENTS.FULL_SCREEN_CHANGE,\n SYSTEM_EVENTS.CLOSE_OVERLAY,\n SYSTEM_EVENTS.CLOSE_ALL_OVERLAY,\n SYSTEM_EVENTS.PLAYER_ACTION,\n SYSTEM_EVENTS.TOAST_USER_DISMISS,\n SYSTEM_EVENTS.OMG_OPEN_AWAITING_MESSAGES,\n SYSTEM_EVENTS.FREE_PLAY_VOUCHER_MSG_OPENED,\n SYSTEM_EVENTS.BALANCE_UPDATED,\n SYSTEM_EVENTS.EXTEND_USER_TIME_TO_LIVE,\n SYSTEM_EVENTS.GAME_OPEN,\n SYSTEM_EVENTS.CLOSE_GAME,\n SYSTEM_EVENTS.POST_MESSAGE_ARRIVE\n];\n\nexport {SYSTEM_EVENTS, CLIENT_EVENTS, USER_EVENTS, USER_ACTIVITY_EVENTS_ALL, USER_ACTIVITY_EVENTS_FOR_HYBRID};","export interface SystemEventSubscription {\n off(): void;\n}\n\n/**\n * Event based module, publish / subscribe with hierarchical events and notifications.\n *\n * Usage:\n * Event.on('test_one_event', function() {\n * console.log('test 1 event fired');\n * console.log(arguments);\n * });\n *\n * Event.once('test_two_event', function() {\n * console.log('test 2 event fired, once.');\n * console.log(arguments);\n * });\n *\n * var three = Event.on('test_three_event', function() {\n * console.log('test 3 event fired');\n * });\n *\n * Event.fire('test_one_event', {eventID: 1}); // fires ok\n * Event.fire('test_two_event', {eventID: 2}); // fires ok\n * Event.fire('test_two_event', {eventID: 3}); // didnt trigger the event since it was unsubscribed (subscribed once only)\n * three.off(); // will remove the test_three_event\n * Event.fire('test_three_event', {eventID: 4}); // didnt trigger, was remove line above.\n *\n *\n */\nclass Event {\n /**\n * @constructor\n */\n constructor() {\n this._subscriptions = {};\n }\n\n private _subscriptions: any;\n\n /**\n * Attach a callback to an EventName\n */\n on(name: string | string[], callback: Function, context?: any): SystemEventSubscription {\n\n if(!(name)) {\n throw new Error('The name argument for Event.on is required');\n }\n\n if(!callback) {\n throw new Error('The callback argument name for Event.on is required');\n }\n\n context = context || this;\n\n // allows to subscribe multiple events for the same callback as single events. Clears the syntax on the other end.\n if (Array.isArray(name)) {\n let cleanFunctions: SystemEventSubscription[] = [];\n for (let eventIdx = 0, len = name.length, eventName; eventIdx < len; eventIdx++) {\n eventName = name[eventIdx];\n cleanFunctions.push(this.on(eventName, callback, context));\n }\n\n // Quit after done.\n return {\n off: () => cleanFunctions.forEach(subscription => subscription.off())\n };\n }\n\n if ('undefined' === typeof this._subscriptions[name]) {\n this._subscriptions[name] = [];\n }\n\n this._subscriptions[name].push({\n callback: callback,\n context: context\n });\n\n // return back a clean remove function with the params encapsulated\n return ((eName, eCallback, eContext): SystemEventSubscription => {\n return {\n off: () => {\n this.off(eName, eCallback, eContext);\n }\n };\n })(name, callback, context);\n }\n\n\n /**\n * Attach a callback to an name, but once only. Will disapear after first execution.\n *\n */\n once(name: string | string[], callback: Function, context?: any): SystemEventSubscription {\n context = context || this;\n var self = this,\n onceCallback: any = function() {\n self.off(name, onceCallback, context);\n callback.apply(this, arguments);\n };\n\n // preserve the original callback to allow subscribe once method to be removed later if needed.\n onceCallback._originalCallback = callback;\n\n return this.on(name, onceCallback, context);\n }\n\n\n /**\n * Notify subscriptions by calling their name\n */\n fire(name: string, params: any = {}) {\n let subscriptions = this.getAllSubscriptions();\n //clone the subscriptions array\n let events = [].concat(subscriptions[name] || []);\n\n events.forEach(event => {\n try {\n event.callback.call(event.context, params);\n } catch (ex) {\n console.error(ex);\n }\n });\n }\n\n\n /**\n * Remove a specific name callback from the stack.\n *\n * Used mostly internally.. but not only. A diffrent \".off\" is binded when you \".on\" and a referance to this \".off\"\n * is set.\n */\n off(name: string | string[], callback: Function, context: any): void {\n if (Array.isArray(name)) {\n name.forEach(eventName => this.off(eventName, callback, context));\n return;\n }\n context = context || this;\n\n let events = this._subscriptions[name],\n matchCallback = cb => {\n return cb === callback || cb._originalCallback === callback;\n };\n if (events === undefined) {\n return;\n }\n\n for (let eventIdx = events.length - 1; 0 <= eventIdx; eventIdx--) {\n let event = events[eventIdx];\n\n // TODO: make this code typesafe so that we can use '==='\n // eslint-disable-next-line\n if (matchCallback(event.callback) && event.context == context) {\n events.splice(eventIdx, 1);\n }\n }\n\n // if no callbacks left remove the event name from the tree completly.\n if (0 === events.length) {\n delete this._subscriptions[name];\n }\n }\n\n\n /**\n * Removes all the subscriptions by reseting the queue.\n *\n *\n * @returns {Object} this - an instance of the current running Event object.\n * @public\n */\n removeAllSubscriptions(): void {\n this._subscriptions = [];\n }\n\n\n /**\n * Get all the active subscriptions tree\n */\n getAllSubscriptions(): any {\n return this._subscriptions;\n }\n\n\n /**\n * Detach events that the object subscribe to.\n */\n detachEvents(events: any[]): void {\n // Remove reference events.\n if (!events) {\n return;\n }\n\n events.forEach((event) => {\n if (Array.isArray(event)) {\n event.forEach((cleanFn) => {\n cleanFn.off();\n });\n } else {\n event.off();\n }\n });\n }\n}\n\nexport default new Event();","import Logger from '../utils/logger';\nimport _ from '../utils/underscore';\n\nexport interface IBaseObject {\n getClassName(): string;\n}\n\n/**\n *\n *\n * @description - BaseObject is the ancestor of all cgp entity, every one inherit from him\n * append on each entity global behavior such as logger or define if it's singleton or not.\n *\n */\nexport default class BaseObject {\n static create(params?: any): any {\n const $instance = new this(); // constructor SHOULD NOT GET ANYTHING... it's TEMPORARY HERE!\n\n if (_.isFunction($instance.init)) {\n $instance.init.apply($instance, arguments);\n }\n\n return $instance;\n }\n\n constructor() {\n this._createLogger();\n }\n\n\n protected init(params: any): void {\n }\n\n\tprotected logger: Logger;\n\n private _createLogger(): void {\n this.logger = new Logger(this.getClassName());\n }\n\n\n /**\n * This si a helper method for throwing an exception in a consistent and standard way\n * @param lineNumber - it must always take this value '43'\n * @param message - the error message\n * @param context - This parameter is optional and it can be used to\n * provide more information about the exception.\n */\n protected throwError(lineNumber: string, message: string, context?: any): void {\n const theError = {\n message: message,\n className: this.getClassName(),\n lineNumber: lineNumber,\n context: context,\n stackTrace: new Error().stack,\n };\n\n this.logger.error(theError);\n throw new Error(JSON.stringify(theError));\n }\n\n protected throwArgumentExpected(lineNumber: string, methodName: string, argumentName: string, context?: any): void {\n this.throwError(lineNumber, `${this.getClassName()}.${methodName} method expects parameter ${argumentName} which was not provided`, context);\n }\n\n protected reThrowError(lineNumber: string, message: string, innerError: any, context?: any): void {\n\n this.logger.error({\n message: message,\n className: this.getClassName(),\n lineNumber: lineNumber,\n context: context,\n stackTrace: new Error().stack,\n innerError: innerError,\n });\n\n throw innerError;\n\n }\n\n protected throwNotImplemented(lineNumber: string, methodName: string): void {\n this.throwError(lineNumber, `${this.getClassName()} doesn't implement ${methodName} method`);\n }\n\n getClassName(): string {\n\n const thisProto = Object.getPrototypeOf(this);\n\n if(thisProto.constructor.CLASS) {\n return thisProto.constructor.CLASS;\n } else {\n return thisProto.constructor.name;\n }\n\n\n }\n}\n","import BaseSingleton from './base_singleton';\nimport _ from '../utils/underscore';\nimport ServiceFactory from '../services/service_factory';\nimport Event, {SystemEventSubscription} from '../utils/event';\nimport { SYSTEM_EVENTS } from '../events/events';\nimport IBaseService, { CreateServiceFactoryFunction, ServiceDependencies } from './base_service_interface';\n\n\nexport default class BaseService extends BaseSingleton implements IBaseService {\n protected featureEnabled: boolean = true;\n private _isToggledAlready = false;\n private _systemEventsSubscriptions = new Array();\n\n protected init(params: any): void {\n super.init(params);\n if (params && params.featureEnabled === false) {\n this.featureEnabled = false;\n }\n\n if(this.shouldApplyFeatureToggleABTesting()) {\n Event.on([SYSTEM_EVENTS.OAUTH_STATE_CHANGE, SYSTEM_EVENTS.ON_INIT_COMPLETE], ()=>this.applyABTestingLogic(params), this)\n } else {\n Event.on(SYSTEM_EVENTS.ON_INIT_COMPLETE, ()=>this.toggleFeatureOn(params), this)\n }\n }\n\n private applyABTestingLogic(params: any): void{\n if(!this.serviceFactory.oAuth2Service().isAuthorized()) {\n return;\n }\n const abTestingParams = this.serviceFactory.abTestingService().getAbTestingDataForFeature(this.getClassName());\n if (abTestingParams && abTestingParams.Properties){\n const featureToggleProperty = this._safeGetPropertyLowerCase(abTestingParams.Properties,'featureToggle');\n if (featureToggleProperty === 'true' && !this._isToggledAlready) {\n this._isToggledAlready = true;\n this.toggleFeatureOn(params);\n }\n }\n }\n\n protected shouldApplyFeatureToggleABTesting(): boolean {\n //override this function if service supports AB testing\n return false;\n }\n\n protected toggleFeatureOn(params: any): void{\n //override this function if service need to be initialized after getting AB testing parameters\n }\n\n private _safeGetPropertyLowerCase(properties,propertyName): string{\n if (properties[propertyName]){\n return properties[propertyName].toLowerCase();\n } else {\n return '';\n }\n }\n\n protected featureToggle(){\n return this.featureEnabled;\n }\n /**\n * can be override when service has async jobs to execute before app init complete.\n */\n doAsyncJobs(): Promise {\n return Promise.resolve();\n }\n\n\n /**\n * can be override when service has async jobs to execute after all services have being initialized\n */\n onInitializationCompleted(): Promise {\n return Promise.resolve();\n }\n\n private _createServiceFactoryFunction: CreateServiceFactoryFunction = null;\n protected get serviceFactory(): ServiceFactory {\n if (_.isNullOrUndefined(this._createServiceFactoryFunction)) {\n this.throwError('79', 'serviceFactory is not available at this time because it is not injected yet!', {className: this.getClassName()});\n }\n return this._createServiceFactoryFunction();\n }\n\n injectDependencies(dependencies: ServiceDependencies): void {\n this._createServiceFactoryFunction = dependencies.createServiceFactoryFunction;\n }\n\n // only for unit tests - so we will stop listen to events\n shutDown() {\n this._detachSystemEvents();\n }\n\n protected onSystemEvent(eventName: string | string[], callback: Function): SystemEventSubscription {\n const subscription = Event.on(eventName, callback.bind(this), this);\n this._systemEventsSubscriptions.push(subscription);\n return this._createEventSubscription(subscription);\n }\n\n protected onSystemEventOnce(eventName: string | string[], callback: Function): SystemEventSubscription {\n const subscription = Event.once(eventName, callback.bind(this), this);\n this._systemEventsSubscriptions.push(subscription);\n return this._createEventSubscription(subscription);\n }\n\n private _detachSystemEvents(): void {\n Event.detachEvents(this._systemEventsSubscriptions);\n this._systemEventsSubscriptions = new Array();\n }\n\n private _createEventSubscription(subscription: SystemEventSubscription): SystemEventSubscription {\n return {\n off: () => {\n subscription.off();\n const index = this._systemEventsSubscriptions.findIndex(item => item === subscription);\n if (index >= 0) {\n this._systemEventsSubscriptions.splice(index, 1);\n }\n }\n }\n }\n}\n\n","import BaseObject from './base_object';\nimport DOM, { DomEventSubscription, TimeoutSubscription } from '../utils/dom';\nimport _ from '../utils/underscore';\nimport Strings from '../utils/strings';\nimport Event, { SystemEventSubscription } from '../utils/event';\nimport ServiceFactory from '../services/service_factory';\nimport { SYSTEM_EVENTS } from '../events/events';\nimport { BaseComponentParams, IBaseComponent } from './base_component_interface';\nimport { IOverlayClasses } from '../services/overlay_manager/overlay_manager_service_interface';\nimport {TimeIntervalName} from '../../../common/utils/time-interval-names';\n\nexport default class BaseComponent extends BaseObject implements IBaseComponent {\n static CLASS = 'BaseComponent';\n\n protected _selector = 'cgp-component';\n\n protected serviceFactory: ServiceFactory;\n\n private _isDirective: boolean;\n private _styleSelectors: any;\n\n private el: HTMLElement;\n\n protected innerComponentsRef = new Array();\n private _systemEventsSubscriptions = new Array();\n private _domEventsSubscriptions = new Array();\n private _timeoutSubscriptions = new Array();\n private _intervalSubscriptions = new Array();\n\n /**\n * @constructor\n */\n protected init(params: BaseComponentParams) {\n super.init(params);\n params = params || {} as BaseComponentParams;\n this.serviceFactory = params.serviceFactory || ServiceFactory.create();\n this._isDirective = params.isDirective;\n this._styleSelectors = Object.assign({}, this.getDefaultStyleSelectors(), _.isObject(params.styleSelectors) ? params.styleSelectors : _.safeJSON(params.styleSelectors));\n\n this.el = this.createRootElement(this.bake(params.innerHtml));\n\n // Add component root selector.\n this.addClass(this._selector);\n this.addClass(this._getIsolationSelector());\n this._setPropertiesSelectors();\n\n //AB testing\n const abTestingParams = this.serviceFactory.abTestingService().getAbTestingDataForFeature(this.getClassName());\n if (abTestingParams) {\n this.applyABTestingStyleClass(abTestingParams)\n }\n }\n\n protected _getIsolationSelector(): string {\n return 'cgp-isolation';\n }\n\n\n protected createRootElement(innerHtml: string = ''): HTMLElement {\n return DOM.createElement('div', innerHtml);\n }\n\n\n start(): BaseComponent {\n return this;\n }\n\n getStyleSelectors(): any {\n return this._styleSelectors;\n }\n\n getDefaultStyleSelectors(): any {\n return {};\n }\n\n getEl(): HTMLElement {\n return this.el;\n }\n\n setHTML(html: string): BaseComponent {\n if (!html) {\n this.logger.error('an html to set on the component is not defined');\n return this;\n }\n\n DOM.html(html, this.el);\n\n return this;\n }\n\n render(componentEl): BaseComponent {\n if (!_.isElement(componentEl)) {\n this.logger.error('Could not render not dom element type --> ', typeof componentEl);\n throw new Error();\n }\n\n // Clean current element html markup.\n DOM.html('', this.el);\n DOM.append(this.el, componentEl);\n\n return this;\n }\n\n\n /**\n * Process html to cgp manipulation html,\n * For example language support or show item support (show remember me show wallet etc..)\n */\n bake(html: string, bindingParams = {}): string {\n if(!html) {\n return html;\n }\n\n const string = new Strings(html),\n bindingArray = string.getCurlyBracesBinding();\n\n\n bindingArray.forEach((bind) => {\n const bindingFunction = this[bind.fn].bind(this);\n if (!bind.fn || !_.isFunction(bindingFunction)) {\n return;\n }\n html = html.replace('{' + bind.to + '}', bindingFunction(bind.value, bindingParams));\n });\n\n return html;\n }\n\n _model = {};\n /**\n * Show check if we decide to display a show html function.\n */\n protected show(method: string, bindingParams: object): string {\n const html = this._model['get' + method]();\n return html ? this.bake(html, bindingParams) : '';\n }\n\n\n /**\n * Return textual value for specific model parameter.\n */\n protected text(value: string): string {\n const text = this._model[value];\n return text;\n }\n\n\n /**\n * Binding function, translate the raw html into locale language.\n */\n protected translate(key: string, bindingParams?: object): string {\n return ServiceFactory.create().languageService().translation(key, bindingParams);\n }\n\n /**\n * inject the variable and then translate him\n * @param value\n * @param bindingParams\n * @returns {string}\n */\n protected injectAndTranslate(value, bindingParams) {\n const key = this.inject(value, bindingParams);\n return this.translate(key, bindingParams);\n }\n\n /**\n * Inject string into html.\n */\n protected inject(value, bindingParams) {\n if (!_.isString(value)) {\n value = value.toString();\n }\n //Required by FreePlayVoucherComponentController for NJ - working with old platform\n if (bindingParams[value] === '') {\n return bindingParams[value];\n }\n\n if (bindingParams[value]) {\n return bindingParams[value];\n }\n\n return value;\n }\n\n\n onAppendedToDOM(): void {\n this.innerComponentsRef.forEach(childComponent => {\n childComponent.onAppendedToDOM();\n });\n }\n\n getOverlayClasses(): IOverlayClasses {\n return null;\n }\n\n\n isDirective(): boolean {\n return this._isDirective;\n }\n\n protected _setPropertiesSelectors(): void {\n\n const styleSelectors = this.getStyleSelectors();\n if (!styleSelectors) {\n return;\n }\n Object.keys(styleSelectors).forEach((selectorKey) => {\n this.setClassSelectorToEl(this.getPropertiesStyleMapper()[selectorKey], styleSelectors[selectorKey]);\n });\n }\n\n\n /**\n * Add class selector to all specified elements into the component\n */\n protected setClassSelectorToEl(elClass, selector): void {\n if (!elClass) {\n return;\n }\n const contentElements = this.getEl().getElementsByClassName(elClass);\n for (let i = 0; i < contentElements.length; i++) {\n DOM.addClass(contentElements[i], selector);\n }\n }\n\n\n /**\n * Get mapper for style selectors\n */\n protected getPropertiesStyleMapper(): any {\n return {};\n }\n\n /**\n * Get internal component element by its class name\n */\n getDOMElementByClassName(className): Element {\n return this.getEl().getElementsByClassName(className)[0];\n }\n\n\n /**\n * Remove all resource that were used by component\n */\n shutDown(): void {\n this._detachSystemEvents();\n this._detachDOMEvents();\n this._clearTimeouts();\n this._shutDownChildComponents();\n }\n\n protected _detachSystemEvents(): void {\n Event.detachEvents(this._systemEventsSubscriptions);\n this._systemEventsSubscriptions = new Array();\n }\n\n private _detachDOMEvents(): void {\n this._domEventsSubscriptions.forEach(subscription => subscription.remove());\n this._domEventsSubscriptions = [];\n }\n\n private _shutDownChildComponents(): void {\n this.innerComponentsRef.forEach(comp => {\n comp.shutDown();\n });\n this.innerComponentsRef = [];\n };\n\n private _clearTimeouts(): void {\n this._timeoutSubscriptions.forEach((ref) => {\n DOM.clearTimeout(ref);\n });\n\n this._timeoutSubscriptions = [];\n }\n\n querySelector(selector): Element {\n return this.getEl().querySelector(selector);\n }\n\n querySelectorAll(selector: string): Element[] {\n const result: any = this.getEl().querySelectorAll(selector);\n\n return result as Element[];\n }\n\n appendChildComponent(childComponent: BaseComponent, containerSelector?: string): void {\n if(containerSelector) {\n const parentElement = this.querySelector(containerSelector);\n if(!parentElement) {\n this.throwError('291',`Can't add ${childComponent.getClassName()} component as child to ${this.getClassName()} because ${containerSelector} selector doesn't exists`, {childComponent, containerSelector});\n }\n\n parentElement.appendChild(childComponent.getEl());\n } else {\n this.getEl().appendChild(childComponent.getEl());\n }\n\n this.innerComponentsRef.push(childComponent);\n }\n\n removeChildComponent(childComponent: BaseComponent): void {\n const childComponentIndex = this.innerComponentsRef.findIndex((comp) => childComponent === comp);\n if(childComponentIndex >= 0) {\n DOM.removeElement(this.getEl(), childComponent.getEl());\n this.innerComponentsRef.splice(childComponentIndex, 1);\n childComponent.shutDown();\n }\n }\n\n addStyle(key: string, value: string): void {\n DOM.addStyle(this.getEl(), key, value);\n }\n\n removeStyle(key: string): void {\n DOM.removeStyle(this.getEl(), key);\n }\n\n addClass(className: string): void {\n DOM.addClass(this.getEl(), className);\n }\n\n hasClass(className): boolean {\n return DOM.hasClass(this.getEl(), className);\n }\n\n removeClass(className: string): void {\n DOM.removeClass(this.getEl(), className);\n }\n\n setAttribute(attribute: string , value: string): void {\n DOM.addAttribute(this.getEl(), attribute, value);\n }\n\n protected setInnerHtml(innerHtml: string, bindingParams = {}): void {\n DOM.html(this.bake(innerHtml, bindingParams), this.getEl());\n }\n\n protected onDOMEvent(element: Element, eventName: string, handler: EventListener): DomEventSubscription {\n const subscription = DOM.onDOMElementEvent(element, eventName, handler.bind(this));\n this._domEventsSubscriptions.push(subscription);\n return {\n remove: () => {\n subscription.remove();\n const index = this._domEventsSubscriptions.findIndex(item => item === subscription);\n if (index >= 0) {\n this._domEventsSubscriptions.splice(index, 1);\n }\n }\n }\n }\n\n protected onRootElementEvent(eventName: string, handler: EventListener): DomEventSubscription {\n return this.onDOMEvent(this.getEl(), eventName, handler);\n }\n\n protected onChildElementEvent(childElementSelector: string, eventName: string, handler: EventListener): DomEventSubscription {\n return this.onDOMEvent(this.querySelector(childElementSelector), eventName, handler);\n }\n\n protected onSystemEvent(eventName: string | string[], callback: Function): SystemEventSubscription {\n const subscription = Event.on(eventName, callback.bind(this), this);\n this._systemEventsSubscriptions.push(subscription);\n return this._createEventSubscription(subscription);\n }\n\n protected onceSystemEvent(eventName: string, callback: Function): SystemEventSubscription {\n const subscription = Event.once(eventName, callback, this);\n this._systemEventsSubscriptions.push(subscription);\n return this._createEventSubscription(subscription);\n }\n\n private _createEventSubscription(subscription: SystemEventSubscription): SystemEventSubscription {\n return {\n off: () => {\n subscription.off();\n const index = this._systemEventsSubscriptions.findIndex(item => item === subscription);\n if (index >= 0) {\n this._systemEventsSubscriptions.splice(index, 1);\n }\n }\n }\n }\n\n setInterval(callback: () => void, timeout: number, name?: TimeIntervalName): TimeoutSubscription {\n const timeoutRef = DOM.setInterval(callback, timeout, name);\n this._intervalSubscriptions.push(timeoutRef);\n\n return {\n clear: () => {\n clearInterval(timeoutRef);\n const indexOfTimeoutRef = this._intervalSubscriptions.findIndex(item => item === timeoutRef);\n if (indexOfTimeoutRef >= 0) {\n this._timeoutSubscriptions.splice(indexOfTimeoutRef, 1);\n }\n }\n };\n }\n\n setTimeout(callback: () => void, timeout: number, name?: TimeIntervalName): TimeoutSubscription {\n const timeoutRef = DOM.setTimeout(callback, timeout, name);\n this._timeoutSubscriptions.push(timeoutRef);\n return {\n clear: () => {\n DOM.clearTimeout(timeoutRef);\n\n const indexOfTimeoutRef = this._timeoutSubscriptions.findIndex(item => item === timeoutRef);\n if (indexOfTimeoutRef >= 0) {\n this._timeoutSubscriptions.splice(indexOfTimeoutRef, 1);\n }\n }\n };\n }\n\n _sendAnalytics(analyticsData) {\n const defaultAnalyticsData = {\n category: '[Technical-event]',\n };\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, Object.assign(defaultAnalyticsData, analyticsData));\n }\n\n hideRootElement(): void {\n DOM.hide(this.getEl());\n }\n\n showRootElement(): void {\n DOM.show(this.getEl());\n }\n\n applyABTestingStyleClass(properties: any): void {\n if (properties.Properties){\n if (properties.Properties['css-selector']) {\n DOM.addClass(this.getEl(), 'cgp-ab-' + properties.Properties['css-selector']);\n }\n }\n }\n}","import BaseObject from '../../../base/base_object';\nimport ServiceFactory from '../../service_factory';\n\nexport function createGameFlowCancelResponse(message) {\n return {\n reason: 'OPEN_GAME_FLOW_CANCELED',\n message: message\n }\n}\n\nexport function cancelGameFlow(message) {\n return Promise.reject(createGameFlowCancelResponse(message));\n}\n\nexport function isCancelGameFlowResponse(err) {\n if (!err) {\n return true;\n }\n\n return err.reason === 'OPEN_GAME_FLOW_CANCELED';\n}\n\nexport default abstract class GameStepBase extends BaseObject {\n\tstatic CLASS = 'GameStepBase';\n\t\n\tprotected serviceFactory: ServiceFactory;\n\n init(params) {\n super.init(params);\n if(!params.serviceFactory) {\n this.throwArgumentExpected('31', 'init', 'serviceFactory');\n }\n this.serviceFactory = params.serviceFactory;\n }\n\n run(gameOptions: {[key: string]: any}) {\n this.throwNotImplemented('37', 'run');\n }\n}","/**\n * Created by andreyna on 7/3/2016.\n */\nimport {PRIORITY_LEVEL} from '../../services/overlay_manager/overlay_manager_levels';\nimport {CASHIER_SESSION_TYPES} from '../../../../common/const/cashier-session-types';\n\nconst GNWP_FRAME_NAME = 'about:blank';\n\nconst NAVIGATION_VIEWS = {\n WINDOW: 'window',\n IFRAME: 'iframe',\n REDIRECT: 'redirect',\n SECOND_WEB_VIEW: 'second_web_view'\n};\n\nconst CASHIER_ACTIONS = CASHIER_SESSION_TYPES;\n\nconst LINK_DEFAULT_CONGIF = {\n 'omg': {\n view: {\n pc: NAVIGATION_VIEWS.IFRAME,\n mobile: NAVIGATION_VIEWS.IFRAME\n },\n allowedViews: [NAVIGATION_VIEWS.REDIRECT],\n dimensions: {\n default: 'cgp-omg-frame',\n },\n isAuthRequired: true,\n isCloseBtnAllowed: false,\n immediateShow: false,\n isMobileFullScreen: false,\n priorityLevel: PRIORITY_LEVEL.OMG\n },\n 'my_account': {\n view: {\n pc: NAVIGATION_VIEWS.IFRAME,\n mobile: NAVIGATION_VIEWS.IFRAME\n },\n allowedViews: [NAVIGATION_VIEWS.WINDOW, NAVIGATION_VIEWS.IFRAME,NAVIGATION_VIEWS.REDIRECT],\n dimensions: {\n default: 'cgp-my_account-frame',\n },\n isAuthRequired: true,\n immediateShow: true\n },\n 'cashier': {\n view: {\n pc: NAVIGATION_VIEWS.IFRAME,\n mobile: NAVIGATION_VIEWS.REDIRECT,\n os: {\n macos: {\n pc: {\n browsers: {\n safari: {\n view: NAVIGATION_VIEWS.WINDOW\n }\n }\n }\n }\n }\n },\n allowedViews: [NAVIGATION_VIEWS.IFRAME, NAVIGATION_VIEWS.WINDOW, NAVIGATION_VIEWS.REDIRECT],\n dimensions: {\n default: 'cgp-cashier-frame-full',\n sessionType: {\n '8': 'cgp-cashier-frame-full',\n '16': 'cgp-cashier-frame-deposit'\n }\n },\n isAuthRequired: true,\n immediateShow: true,\n priorityLevel: PRIORITY_LEVEL.CASHIER\n },\n 'membership': {\n view: NAVIGATION_VIEWS.IFRAME,\n allowedViews: [NAVIGATION_VIEWS.IFRAME, NAVIGATION_VIEWS.WINDOW],\n dimensions: {\n default: 'cgp-membership-frame'\n },\n isNotAuthRequired: true,\n immediateShow: true,\n priorityLevel: PRIORITY_LEVEL.MEMBERSHIP\n },\n 'forgot_password': {\n view: NAVIGATION_VIEWS.IFRAME,\n allowedViews: [NAVIGATION_VIEWS.IFRAME, NAVIGATION_VIEWS.WINDOW],\n dimensions: {\n default: 'cgp-forgot_password-frame',\n },\n isNotAuthRequired: true,\n immediateShow: true\n },\n 'forgot_username': {\n view: NAVIGATION_VIEWS.IFRAME,\n allowedViews: [NAVIGATION_VIEWS.IFRAME, NAVIGATION_VIEWS.WINDOW],\n dimensions: {\n default: 'cgp-forgot_username-frame',\n },\n isNotAuthRequired: true,\n immediateShow: true\n },\n 'sport': {\n view: {\n pc: NAVIGATION_VIEWS.WINDOW,\n mobile: NAVIGATION_VIEWS.REDIRECT\n },\n allowedViews: [NAVIGATION_VIEWS.WINDOW, NAVIGATION_VIEWS.REDIRECT, NAVIGATION_VIEWS.SECOND_WEB_VIEW],\n dimensions: {\n default: 'cgp-sport-frame',\n },\n isNotAuthRequired: false,\n immediateShow: true\n },\n 'poker': {\n view: {\n pc: NAVIGATION_VIEWS.WINDOW,\n mobile: NAVIGATION_VIEWS.REDIRECT\n },\n allowedViews: [NAVIGATION_VIEWS.WINDOW, NAVIGATION_VIEWS.REDIRECT],\n dimensions: {\n default: 'cgp-poker-frame',\n },\n backToView: {\n mobile: NAVIGATION_VIEWS.REDIRECT\n },\n isNotAuthRequired: false,\n immediateShow: true\n },\n 'common_link': {\n view: NAVIGATION_VIEWS.IFRAME,\n allowedViews: [NAVIGATION_VIEWS.IFRAME, NAVIGATION_VIEWS.WINDOW, NAVIGATION_VIEWS.REDIRECT],\n dimensions: {\n default: 'cgp-external-link-url',\n },\n isNotAuthRequired: false,\n immediateShow: true\n },\n 'schedule_races': {\n view: NAVIGATION_VIEWS.IFRAME,\n allowedViews: [NAVIGATION_VIEWS.IFRAME, NAVIGATION_VIEWS.WINDOW],\n dimensions: {\n default: 'cgp-races_tabs',\n },\n isAuthRequired: false,\n immediateShow: true\n },\n 'races_leaderBoard': {\n view: NAVIGATION_VIEWS.IFRAME,\n allowedViews: [NAVIGATION_VIEWS.IFRAME, NAVIGATION_VIEWS.WINDOW],\n dimensions: {\n default: 'cgp-races_tabs',\n },\n isAuthRequired: false,\n immediateShow: true\n },\n 'races_widget': {\n view: NAVIGATION_VIEWS.IFRAME,\n allowedViews: [NAVIGATION_VIEWS.IFRAME, NAVIGATION_VIEWS.WINDOW],\n dimensions: {\n default: 'cgp-races_widget',\n },\n isNotAuthRequired: false,\n immediateShow: true\n },\n 'rich': {\n view: NAVIGATION_VIEWS.IFRAME,\n allowedViews: [NAVIGATION_VIEWS.IFRAME, NAVIGATION_VIEWS.WINDOW, NAVIGATION_VIEWS.REDIRECT],\n dimensions: {\n default: 'cgp-rich'\n },\n isAuthRequired: true,\n immediateShow: true\n },\n 'pending_login': {\n view: NAVIGATION_VIEWS.IFRAME,\n allowedViews: [NAVIGATION_VIEWS.IFRAME],\n dimensions: {\n default: 'cgp-pending-login'\n },\n isAuthRequired: false,\n immediateShow: true\n },\n 'pending_play': {\n view: NAVIGATION_VIEWS.IFRAME,\n allowedViews: [NAVIGATION_VIEWS.IFRAME],\n dimensions: {\n default: 'cgp-pending-play'\n },\n isAuthRequired: false,\n immediateShow: true\n },\n 'upload_document': {\n view: NAVIGATION_VIEWS.IFRAME,\n allowedViews: [NAVIGATION_VIEWS.IFRAME],\n dimensions: {\n default: 'cgp-document-upload'\n },\n isAuthRequired: true,\n immediateShow: true,\n priorityLevel: PRIORITY_LEVEL.SECONDARY_MESSAGE\n },\n 'mini_cashier': {\n view: NAVIGATION_VIEWS.IFRAME,\n allowedViews: [NAVIGATION_VIEWS.IFRAME],\n dimensions: {\n default: 'cgp-mini-cashier-frame'\n },\n isAuthRequired: true,\n immediateShow: false\n },\n 'red_tiger_widget': {\n view: NAVIGATION_VIEWS.IFRAME,\n allowedViews: [NAVIGATION_VIEWS.IFRAME],\n dimensions: {\n default: 'cgp-red-tiger-frame'\n },\n isAuthRequired: false,\n immediateShow: true\n }\n};\n\nconst EVENT_FLOWS = {\n REGISTRATION: 'Registration'\n}\n\nconst EVENTS = {\n ON_COMPONENT_CLOSED: 'ON_COMPONENT_CLOSED'\n};\n\nconst COMPONENT_TYPES = {\n DIRECTIVE: 'DIRECTIVE',\n API: 'API'\n};\n\nconst GNWP_SOURCES = {\n CASHIER: 'cashier',\n MEMBERSHIP: 'membership',\n FORGOT_PASSWORD: 'forgot_password',\n FORGOT_USERNAME: 'forgot_username',\n MY_ACCOUNT: 'my_account',\n OMG: 'omg',\n SPORT: 'sport',\n RICH: 'rich',\n PENDING_LOGIN: 'pending_login',\n PENDING_PLAY: 'pending_play',\n DOCUMENT_UPLOAD: 'upload_document',\n HELP: 'help'\n};\n\nexport {NAVIGATION_VIEWS, LINK_DEFAULT_CONGIF, GNWP_FRAME_NAME, EVENT_FLOWS, EVENTS, COMPONENT_TYPES, CASHIER_ACTIONS, GNWP_SOURCES};\n","\nconst KEY_NAME = {\n FUNC: 'fn',\n FUNC_CB: 'cb',\n HYBRID_CB: 'hybridcb',\n HYBRID_CB_GLOBAL_NAME: 'onhybridcb',\n HYBRID_CB_FEATURE_FUNC: 'hybridcbfeaturefunc',\n SRV: 'service',\n MSG: 'msg',\n ERROR: 'error',\n DATA: 'data',\n ODR_DEL_GAMES: 'odrdeletegames',\n VERSION: 'version',\n LN_SERVER: 'LnServer',\n LN_ORG_ID: 'LnOriginid',\n LN_SESSION_ID: 'LnSessionId',\n JS_LN_SERVER: 'LnServer',\n TIME_OUT: 'timeout',\n TIME_OUT_BEFORE_DISPLAY: 'timeoutbeforedisplay',\n CLOSE_BY_TIME_OUT: 'closebytimeout',\n CLOSE_BY_X: 'closebyx',\n CLOSE_NO_CHILL: 'closenochill',\n CLOSE_BY_LOW_DISK_SPACE: 'closebylowdiskspace',\n FOLDER_STRUCT: 'foldertruct',\n FOLDER_SHARED_NAME: 'sharedFolderName',\n CLOSE_X_POS_P: 'xPosP',\n CLOSE_Y_POS_P: 'yPosP',\n CLOSE_X_POS_L: 'xPosL',\n CLOSE_Y_POS_L: 'yPosL',\n MAIL_TO: 'mailto',\n ID: 'id',\n PORT: 'port',\n KEYBORD: 'keybord',\n ROTATION: 'rotation',\n FORCE: 'force',\n WEB_ID: 'webid',\n TYPE: 'type',\n PROGRESS_BAR_FAKE: 'progressbarfake',\n PROGRESS_BAR_REAL: 'progressbarreal',\n RESOURCE_NAME: 'resourcename',\n X_OF_MENY: 'resourcexofmeny',\n GAME_ID: 'gameid',\n SHARED_FOLDER: 'sharedolder',\n URL: 'url',\n SERVICE: 'service',\n FEATURE_CB: 'featurecb',\n ACTION: 'action',\n OPEN_LINK: 'openlink',\n DEBUG: 'debug',\n RELOAD: 'reload',\n AUTOLOGIN: 'UserInfo',\n SESSIONTIMER: 'sessiontimer',\n HEADER_HEIGHT: 'headerheight',\n BANK_ID: 'bankid',\n PHONE: 'tel:',\n LEFT: 'left',\n RIGHT: 'right',\n TOP: 'top',\n BOTTOM: 'bottom',\n SHOW: 'show',\n DP_TO_PX: 'dp2px',\n LOG_CATEGORY: 'logcategory',\n LOG_ACTION: 'logaction',\n LOG_LABLE: 'loglabel',\n LOG_VALUE: 'logvalue'\n};\n\nconst ON_DEMAND = {\n GAME_LOADING_START: 'game_loading_start',\n GAME_LOADING_END: 'game_loading_end',\n GAME_LOADING_CLOSE_BY_X: 'game_loading_close_by_x',\n GAME_LOADING_CLOSE_BY_TIME_OUT: 'game_loading_close_by_time_out',\n GAME_LOADING_CLOSE_BY_LOW_DISK_SPACE: 'game_loading_close_by_low_disk_space',\n GAME_LOADING_CLOSE_BY_NO_CHILL: 'game_loading_close_by_no_chill',\n GAME_LOADING_ERROR: 'game_loading_error',\n CHILL_LOADING_ERROR: 'chill_loading_error',\n CHILL_LOADING: 'chill_loading',\n GAME_LOADING_REAL_ODR_STARTED: 'game_loading_real_odr_started',\n ON_DEMAND_CATEGORY: 'Hybrid_On_Demand',\n ON_DEMAND_DELETE_GAMES: 'odr_delete_games'\n};\n\n\nconst LEXIS_NEXIS = {\n SESSION_ID_LOAD_ERROR: 'session_id_load_error',\n SESSION_ID_LOAD_OK: 'session_id_response_success',\n SESSION_ID_REQUEST_SENT: 'session_id_request_sent',\n SESSION_ID_CALL: 'session_id_sent',\n SESSION_ID_LOAD_EMPTY: 'session_id_load_empty',\n SESSION_ID_CLOSE_BY_TIME_OUT: 'close_by_timeout',\n LEXIS_NEXIS_CATEGORY: 'Hybrid_Lexis_Nexis'\n};\n\n\nconst ODR_FOLDERS = {\n SHARED_ONE_FOLDER: 1,\n SHARED_MANY_FOLDER: 2,\n SHARED_NONE: 3,\n SHARED_GGP: 4\n}\n\nconst ODR_SHARED_GAMES = {\n EMPTY : '',\n RED_TIGER : '236redtigershared',\n PRAGMATIC_PLAY : '238pragmaticshared',\n PLAY_N_GO : '237playngoshared'\n}\n\nconst ROTATION_KEYS = {\n LANDSCAPE: '-1',\n PORTRATE_UPSIDE_DOWN: '-2',\n PORTRATE: '-3',\n ALL: '-4'\n};\n\nconst FEATURE_CB_FUNC = {\n HYBRID_WEB_CALL: 'WebViewManagerFeature',\n HYBRID_URL_SCHEME_CALL: 'UrlSchemeFeature',\n HYBRID_PUSH_CALL: 'PushFeature',\n HYBRID_GEO_CALL: 'GeoFeature',\n HYBRID_ON_DEMAND_CALL: 'OnDemandFeature',\n HYBRID_ON_DEMAND_NYX_CALL: 'OnDemandNyxFeature',\n HYBRID_LOBBY_POP_UP_CALL: 'LobbyPopUpFeature',\n HYBRID_FIRE_BASE: 'FireBaseFeature',\n HYBRID_NATIVE_LOGS: 'NativeLogsFeature'\n};\n\n\nconst SERIVCES_FUNC_LIST = {\n\n\n /* WebView */\n WEB_VIEW_WEB_SHOW: 'WebView_WebShow',\n WEB_VIEW_SAFARI: 'WebView_ShowSafariTest',\n WEB_VIEW_SAFARI_PING: 'WebView_ShowSafariPing',\n WEB_VIEW_ACCOMPLISHED: 'WebView_Accomplished',\n WEB_VIEW_IS_HTML_COMPILED_GAMES: 'WebView_IsHtmlCompiledGames',\n WEB_VIEW_GET_DP_2_PX: 'WebView_GetDpToPx',\n\n\n\n\n /* General */\n GENERAL_INIT_HYBRID: 'General_InitHybrid',\n GENERAL_ALERT: 'General_Alert',\n GENERAL_ALERT_D: 'General_AlertDebug',\n GENERAL_SET_ROTATION: 'General_SetRotation',\n GENERAL_SET_CB: 'General_SetCallBack',\n GENERAL_OPEN_MAIL: 'General_OpenMail',\n GENERAL_OPEN_EXTERNAL_LINK: 'General_OpenExternalLink',\n\n\n\n /* Serial */\n SERIAL_GET_SERIAL: 'Serial_GetSerial',\n\n /* 3DTouch */\n T3_D_TOUCH_INIT_SHORTCUTS: 'ThreeDTouch_InitShortcuts',\n T3_D_TOUCH_UPDATE_SHORTCUT: 'ThreeDTouch_UpdateShortcut',\n T3_D_TOUCH_DELETE_SHORTCUT: 'ThreeDTouch_DeleteShortcut',\n T3_D_TOUCH_DEL_ALL_SHORTCUTS: 'ThreeDTouch_DeleteAllShortcuts',\n T3_D_TOUCH_GET_LAUNCH_SHORTCUT: 'ThreeDTouch_GetLaunchShortcut',\n\n\n /* TouchID */\n TOUCH_ID_GET_TOKEN: 'TouchID_GetToken',\n TOUCH_ID_OPEN: 'TouchID_Open',\n TOUCH_ID_SET_TOKEN: 'TouchID_SetToken',\n TOUCH_ID_IS_SUPORTED: 'TouchID_IsTouchIdSuported',\n TOUCH_ID_CLEAR_ALL: 'TouchID_ClearAll',\n TOUCH_ID_PARAMS_FOR_TOKEN: 'TouchID_GetParamsForToken',\n\n /* WebViewManager */\n WEB_SECOND_SET_CB: 'WebView_WebSecondSetCb',\n WEB_SECOND_NAVIFATE: 'WebView_WebSecondNavigate',\n WEB_DEPOSIT_WIDGET_NAVIFATE: 'WebView_WebDepositWidgetNavigate',\n WEB_SECOND_SHOW: 'WebView_WebSecondShow',\n WEB_SECOND_HIDE: 'WebView_WebSecondHide',\n WEB_SECOND_CLOSE: 'WebView_WebSecondClose',\n WEB_SECOND_UPDATE_SIZE: 'WebView_WebSecondUpdateSize',\n WEB_DEPOSIT_WIDGET_SUPPORTED: 'WebView_DepositWidgetSupported',\n\n /* Info */\n INFO_GET_ALL_INFO: 'Info_GetAllInfo',\n INFO_SET_URL: 'Info_SetUrl',\n\n /* Url Scheme*/\n URL_SCHEME_SET_CB: 'UrlScheme_SetCb',\n URL_SCHEME_GET_URL_SCHEME: 'UrlScheme_GetUrlScheme',\n URL_SCHEME_CLEAR: 'UrlScheme_Clear',\n\n /* Fabric */\n FABRIC_ADD_EVENT: 'Fabric_AddEvents',\n\n /* Push Notifications */\n PUSH_IS_DEVICE_ENABLE: 'PushUA_IsDeviceEnable',\n PUSH_SET_CB: 'PushUA_SetCb',\n PUSH_GET_ACTION: 'PushUA_GetAction',\n PUSH_ADD_TAG: 'PushUA_AddTag',\n PUSH_REM_TAG: 'PushUA_RemTag',\n PUSH_SET_ALIAS: 'PushUA_SetAlias',\n\n /* Geo */\n GEO_SET_CB: 'GeoLocation_SetCb',\n GEO_GET_GEO_LOCATION: 'GeoLocation_GetGeoLocation',\n\n /* LEXIS NEXIS*/\n LEXIS_NEXIS_GET_INFO: 'LexisNexis_GetInfo',\n LEXIS_NEXIS_IS_SUPPORTED: 'LexisNexis_IsSupported',\n\n /* AppStore Rating Popup */\n RATE_APP: 'StoreRating_RateApp',\n\n /* On demand */\n ON_DEMAND_IS_READY: 'OnDemand_IsReady',\n ON_DEMAND_CLOSE_GAME: 'OnDemand_CloseGame',\n ON_DEMAND_SET_CB: 'OnDemand_SetCb',\n ON_DEMAND_LOAD_CHILL: 'OnDemand_LoadChill',\n ON_DEMAND_CLOSE_BY_X: 'OnDemand_CloseByX',\n ON_DEMAND_CLOSE_BY_TIME_OUT: 'OnDemand_CloseByTimeOut',\n ON_DEMAND_CLOSE_BY_LOW_DISK_SPACE: 'OnDemand_CloseByLowDiskSpace',\n ON_DEMAND_DELETE_GAME_FOLDER: 'OnDemand_DeleteGameFolder',\n\n\n /* On Demand Nyx */\n ON_DEMAND_NYX_SET_CB: 'OnDemandNyx_SetCb',\n ON_DEMAND_NYX_NAVIGATE: 'OnDemandNyx_Navigate',\n ON_DEMAND_NYX_CLOSE: 'OnDemandNyx_Close',\n ON_DEMAND_NYX_CHANGE_HEADER_HEIGHT: 'OnDemandNyx_ChangeHeaderHeight',\n\n\n /* Lobby Pop Up */\n\n LOBBY_POPUP_IS_SUPPORTED: 'LobbyPopUp_IsSupported',\n LOBBY_POPUP_SHOW: 'LobbyPopUp_Show',\n LOBBY_POPUP_CLOSE: 'LobbyPopUp_Close',\n LOBBY_POPUP_SET_CB: 'LobbyPopUp_SetCb',\n\n\n /* Fire Base*/\n FIRE_BASE_GET_DATA: 'FireBase_GetData',\n\n\n /* Native Logs */\n\n /* Url Scheme*/\n NATIVE_LOGS_SET_CB: 'NativeLogs_SetCb'\n};\n\n\n\nconst SERIVCES_PARAMS_LIST = {\n WEB_VIEW_SPLASH: 'splash',\n WEB_VIEW_SPLASH_SHOW: '0',\n WEB_VIEW_SPLASH_FADE: '1'\n};\n\n\nconst LOCAL_HOST = {\n HTTP: 'http://localhost:8089',\n HTTPS: 'https://localhost:8089'\n};\n\nexport {KEY_NAME, SERIVCES_FUNC_LIST, SERIVCES_PARAMS_LIST, ROTATION_KEYS, FEATURE_CB_FUNC, ON_DEMAND, ODR_FOLDERS, ODR_SHARED_GAMES, LOCAL_HOST, LEXIS_NEXIS};","import ServicesRegistry from './services_registry';\r\nimport BaseSingleton from '../base/base_singleton';\r\nimport IAbTestingService from './ab_testing/ab_testing_service_interface';\r\nimport IAiListService from './ai_list/ai_list_service_interface';\r\nimport IAnalyticsService from './analytics/analytics_service_interface';\r\nimport IBlueRibbonService from './blue_ribbon/blue_ribbon_service_interface';\r\nimport ICashierProxy from './cashier_proxy/cashier_proxy_service_interface';\r\nimport IClockService from './clock/clock_service_interface';\r\nimport IConfigService from './config/config_service_interface';\r\nimport ICountryService from './country/country_service_interface';\r\nimport ICurrencyService from './currency/currency_service_interface';\r\nimport IEvolutionService from './evolution/evolution_service_interface';\r\nimport IFreePlayService from './free_play/free_play_service_interface';\r\nimport IGamesInformationService from './games_information/games_information_service_interface';\r\nimport IGeoService from './geo_location/geo_service_interface';\r\nimport IGnwpService from './gnwp/gnwp_service_interface';\r\nimport IHistoryService from './history/history_service_interface';\r\nimport IHttp2Service from './http/http2_service_interface';\r\nimport ILanguageService from './language/language_service_interface';\r\nimport IJackpotFeedsService from './live_feeds/jackpots/jackpot_feeds_service_interface';\r\nimport ILiveTablesService from './live_tables/live_tables_service_interface';\r\nimport ILoyalty from './loyalty/loyalty_service_interface';\r\nimport IMessageManagerService from './message_manager/message_manager_service_interface';\r\nimport INetEntService from './netent/netent_service_interface';\r\nimport IUserService from './oauth/user/user_service_interface';\r\nimport IObservableFactoryService from './observable_factory/observable_factory_service_interface';\r\nimport IOpenSessions from './open_sessions/open_sessions_service_interface';\r\nimport IOrbitComponentRenderService from './orbit_component_renderer/orbit_component_render_service_interface';\r\nimport IOverlayManager from './overlay_manager/overlay_manager_service_interface';\r\nimport IPariPlayService from './pariplay/pariplay_service_interface';\r\nimport IRecentlyPlayedService from './recently_played/recently_played_service_interface';\r\nimport IRedTigerService from './red_tiger/red_tiger_service_interface';\r\nimport IRestrictions from './restrictions/restrictions_service_interface';\r\nimport ISafezoneLoaderService from './safezone_loader/safezone_loader_service_interface';\r\nimport IScriptLoaderService from './script_loader/script_loader_service_interface';\r\nimport ISkinService from './skin/skin_service_interface';\r\nimport StructuredLoggingServiceInterface from './structured_logging/structured_logging_service_interface';\r\nimport IThirdPartyFreePlayService from './third_party_free_play/third_party_free_play_service_interface';\r\nimport ITimeService from './time/time_service_interface';\r\nimport IToasterService from './toaster/toaster_service_interface';\r\nimport ITripleEightService from './triple_eight/triple_eight_service_interface';\r\nimport IWebPushService from './web_push/web_push_service_interface';\r\nimport IWindowService from './window/window_service_interface';\r\n\r\nexport default class ServiceFactory extends BaseSingleton {\r\n\r\n\tprivate servicesRegistry: ServicesRegistry;\r\n\r\n\tinit() {\r\n\t\tthis.servicesRegistry = ServicesRegistry.create({});\r\n\t}\r\n\tabTestingService(): IAbTestingService {\n\t\treturn this.servicesRegistry.getService('AbTestingService') as IAbTestingService;\n\t}\r\n\taiListService(): IAiListService {\n\t\treturn this.servicesRegistry.getService('AiListService') as IAiListService;\n\t}\r\n\tanalyticsService(): IAnalyticsService {\n\t\treturn this.servicesRegistry.getService('AnalyticsService') as IAnalyticsService;\n\t}\r\n\tblueRibbonService(): IBlueRibbonService {\n\t\treturn this.servicesRegistry.getService('BlueRibbonService') as IBlueRibbonService;\n\t}\r\n\tbonusAbuseParkingMoneyInSportAndPokerService(): any {\n\t\treturn this.servicesRegistry.getService('BonusAbuseParkingMoneyInSportAndPokerService');\n\t}\r\n\tcashierProxyService(): ICashierProxy {\n\t\treturn this.servicesRegistry.getService('CashierProxyService') as ICashierProxy;\n\t}\r\n\tclockService(): IClockService {\n\t\treturn this.servicesRegistry.getService('ClockService') as IClockService;\n\t}\r\n\tcompanySelectorService(): any {\n\t\treturn this.servicesRegistry.getService('CompanySelectorService');\n\t}\r\n\tcomponentFactoryService(): any {\n\t\treturn this.servicesRegistry.getService('ComponentFactoryService');\n\t}\r\n\tcomponentTesterService(): any {\n\t\treturn this.servicesRegistry.getService('ComponentTesterService');\n\t}\r\n\tconfigService(): IConfigService {\n\t\treturn this.servicesRegistry.getService('ConfigService') as IConfigService;\n\t}\r\n\tcountryService(): ICountryService {\n\t\treturn this.servicesRegistry.getService('CountryService') as ICountryService;\n\t}\r\n\tcurrencyService(): ICurrencyService {\n\t\treturn this.servicesRegistry.getService('CurrencyService') as ICurrencyService;\n\t}\r\n\tdomainDetectionService(): any {\n\t\treturn this.servicesRegistry.getService('DomainDetectionService');\n\t}\r\n\tevolutionService(): IEvolutionService {\n\t\treturn this.servicesRegistry.getService('EvolutionService') as IEvolutionService;\n\t}\r\n\tfreePlayService(): IFreePlayService {\n\t\treturn this.servicesRegistry.getService('FreePlayService') as IFreePlayService;\n\t}\r\n\tgameService(): any {\n\t\treturn this.servicesRegistry.getService('GameService');\n\t}\r\n\tmaxOneOpenGameService(): any {\n\t\treturn this.servicesRegistry.getService('MaxOneOpenGameService');\n\t}\r\n\tgamesCorrelationService(): any {\n\t\treturn this.servicesRegistry.getService('GamesCorrelationService');\n\t}\r\n\tgamesInformationService(): IGamesInformationService {\n\t\treturn this.servicesRegistry.getService('GamesInformationService') as IGamesInformationService;\n\t}\r\n\tgamesQuestionnaireService(): any {\n\t\treturn this.servicesRegistry.getService('GamesQuestionnaireService');\n\t}\r\n\tgameConversionService(): any {\n\t\treturn this.servicesRegistry.getService('GameConversionService');\n\t}\r\n\tgameManagerService(): any {\n\t\treturn this.servicesRegistry.getService('GameManagerService');\n\t}\r\n\tgameReasonService(): any {\n\t\treturn this.servicesRegistry.getService('GameReasonService');\n\t}\r\n\tgeoLocationService(): IGeoService {\n\t\treturn this.servicesRegistry.getService('GeoLocationService') as IGeoService;\n\t}\r\n\tgnwpService(): IGnwpService {\n\t\treturn this.servicesRegistry.getService('GnwpService') as IGnwpService;\n\t}\r\n\thistoryService(): IHistoryService {\n\t\treturn this.servicesRegistry.getService('HistoryService') as IHistoryService;\n\t}\r\n\thttp2Service(): IHttp2Service {\n\t\treturn this.servicesRegistry.getService('Http2Service') as IHttp2Service;\n\t}\r\n\thybridService(): any {\n\t\treturn this.servicesRegistry.getService('HybridService');\n\t}\r\n\thybridVersionHandlerService(): any {\n\t\treturn this.servicesRegistry.getService('HybridVersionHandlerService');\n\t}\r\n\tidleRecommendationsService(): any {\n\t\treturn this.servicesRegistry.getService('IdleRecommendationsService');\n\t}\r\n\tintegrationService(): any {\n\t\treturn this.servicesRegistry.getService('IntegrationService');\n\t}\r\n\tjackpotToastersService(): any {\n\t\treturn this.servicesRegistry.getService('JackpotToastersService');\n\t}\r\n\tlanguageService(): ILanguageService {\n\t\treturn this.servicesRegistry.getService('LanguageService') as ILanguageService;\n\t}\r\n\tjackpotFeedsService(): IJackpotFeedsService {\n\t\treturn this.servicesRegistry.getService('JackpotFeedsService') as IJackpotFeedsService;\n\t}\r\n\tliveTablesService(): ILiveTablesService {\n\t\treturn this.servicesRegistry.getService('LiveTablesService') as ILiveTablesService;\n\t}\r\n\tloyaltyService(): ILoyalty {\n\t\treturn this.servicesRegistry.getService('LoyaltyService') as ILoyalty;\n\t}\r\n\tmenuService(): any {\n\t\treturn this.servicesRegistry.getService('MenuService');\n\t}\r\n\tmessageManagerService(): IMessageManagerService {\n\t\treturn this.servicesRegistry.getService('MessageManagerService') as IMessageManagerService;\n\t}\r\n\tnetEntService(): INetEntService {\n\t\treturn this.servicesRegistry.getService('NetEntService') as INetEntService;\n\t}\r\n\tnetPositionService(): any {\n\t\treturn this.servicesRegistry.getService('NetPositionService');\n\t}\r\n\toAuth2Service(): any {\n\t\treturn this.servicesRegistry.getService('OAuth2Service');\n\t}\r\n\tuserService(): IUserService {\n\t\treturn this.servicesRegistry.getService('UserService') as IUserService;\n\t}\r\n\tobservableFactoryService(): IObservableFactoryService {\n\t\treturn this.servicesRegistry.getService('ObservableFactoryService') as IObservableFactoryService;\n\t}\r\n\tomgService(): any {\n\t\treturn this.servicesRegistry.getService('OmgService');\n\t}\r\n\topenLinkService(): any {\n\t\treturn this.servicesRegistry.getService('OpenLinkService');\n\t}\r\n\topenSessionsService(): IOpenSessions {\n\t\treturn this.servicesRegistry.getService('OpenSessionsService') as IOpenSessions;\n\t}\r\n\torbitComponentRenderService(): IOrbitComponentRenderService {\n\t\treturn this.servicesRegistry.getService('OrbitComponentRenderService') as IOrbitComponentRenderService;\n\t}\r\n\toverlayManagerService(): IOverlayManager {\n\t\treturn this.servicesRegistry.getService('OverlayManagerService') as IOverlayManager;\n\t}\r\n\tpariPlayService(): IPariPlayService {\n\t\treturn this.servicesRegistry.getService('PariPlayService') as IPariPlayService;\n\t}\r\n\tpendingActionService(): any {\n\t\treturn this.servicesRegistry.getService('PendingActionService');\n\t}\r\n\tplayerMessagesService(): any {\n\t\treturn this.servicesRegistry.getService('PlayerMessagesService');\n\t}\r\n\tfallbackService(): any {\n\t\treturn this.servicesRegistry.getService('FallbackService');\n\t}\r\n\tfirebaseElasticService(): any {\n\t\treturn this.servicesRegistry.getService('FirebaseElasticService');\n\t}\r\n\tpostMessageService(): any {\n\t\treturn this.servicesRegistry.getService('PostMessageService');\n\t}\r\n\tqueryStringDetectorService(): any {\n\t\treturn this.servicesRegistry.getService('QueryStringDetectorService');\n\t}\r\n\trecentlyPlayedService(): IRecentlyPlayedService {\n\t\treturn this.servicesRegistry.getService('RecentlyPlayedService') as IRecentlyPlayedService;\n\t}\r\n\tredTigerService(): IRedTigerService {\n\t\treturn this.servicesRegistry.getService('RedTigerService') as IRedTigerService;\n\t}\r\n\tregulationService(): any {\n\t\treturn this.servicesRegistry.getService('RegulationService');\n\t}\r\n\tresizeDetectorService(): any {\n\t\treturn this.servicesRegistry.getService('ResizeDetectorService');\n\t}\r\n\trestrictionsService(): IRestrictions {\n\t\treturn this.servicesRegistry.getService('RestrictionsService') as IRestrictions;\n\t}\r\n\tsafezoneLoaderService(): ISafezoneLoaderService {\n\t\treturn this.servicesRegistry.getService('SafezoneLoaderService') as ISafezoneLoaderService;\n\t}\r\n\tscriptLoaderService(): IScriptLoaderService {\n\t\treturn this.servicesRegistry.getService('ScriptLoaderService') as IScriptLoaderService;\n\t}\r\n\tskinService(): ISkinService {\n\t\treturn this.servicesRegistry.getService('SkinService') as ISkinService;\n\t}\r\n\tstructuredLoggingService(): StructuredLoggingServiceInterface {\n\t\treturn this.servicesRegistry.getService('StructuredLoggingService') as StructuredLoggingServiceInterface;\n\t}\r\n\tthemesService(): any {\n\t\treturn this.servicesRegistry.getService('ThemesService');\n\t}\r\n\tthirdPartyFreePlayService(): IThirdPartyFreePlayService {\n\t\treturn this.servicesRegistry.getService('ThirdPartyFreePlayService') as IThirdPartyFreePlayService;\n\t}\r\n\ttimeService(): ITimeService {\n\t\treturn this.servicesRegistry.getService('TimeService') as ITimeService;\n\t}\r\n\ttoasterService(): IToasterService {\n\t\treturn this.servicesRegistry.getService('ToasterService') as IToasterService;\n\t}\r\n\ttrackjsService(): any {\n\t\treturn this.servicesRegistry.getService('TrackjsService');\n\t}\r\n\ttripleEightService(): ITripleEightService {\n\t\treturn this.servicesRegistry.getService('TripleEightService') as ITripleEightService;\n\t}\r\n\tvisibilityDetectorService(): any {\n\t\treturn this.servicesRegistry.getService('VisibilityDetectorService');\n\t}\r\n\twalletService(): any {\n\t\treturn this.servicesRegistry.getService('WalletService');\n\t}\r\n\twebLoginService(): any {\n\t\treturn this.servicesRegistry.getService('WebLoginService');\n\t}\r\n\twebPushService(): IWebPushService {\n\t\treturn this.servicesRegistry.getService('WebPushService') as IWebPushService;\n\t}\r\n\twindowService(): IWindowService {\n\t\treturn this.servicesRegistry.getService('WindowService') as IWindowService;\n\t}\r\n}\r\n\r\n","const PRIORITY_LEVEL = {\n BASE: 'base',\n POP_UP: 'popup',\n OPEN_SESSION: 'open-session',\n FP: 'fp',\n OMG_BEHIND: 'omg-behind',\n GAME_FRAME: 'game-frame',\n NEXT_GAME: 'next-game',\n GAME_LOADING_INDICATOR: 'game-loading-indicator',\n GAME_FRAME_LOADER: 'game-frame-loader',\n GAME_FRAME_FP: 'game-frame-fp',\n MINI_CASHIER: 'mini-cashier',\n CASHIER: 'cashier',\n LOGIN: 'login',\n EXTERNAL_LINK: 'external-link',\n INTERNAL_OVER_EXTERNAL_LINK: 'internal-over-external-link',\n OMG: 'omg',\n GEO_FREEZE_WINDOW: 'geo-freeze-window',\n TEMP_ACCOUNT: 'temp-account',\n MEMBERSHIP: 'membership',\n MESSAGE: 'message',\n SECONDARY_MESSAGE: 'secondary-message',\n TOUCH_ID: 'touch-id',\n TOUCH_ID_POPUP: 'touch-id-popup',\n LOCK: 'lock',\n SPAIN_SUMMARY_MESSAGE: 'spain-summary-message',\n GAMES_QUESTIONNAIRE: 'games-questionnaire'\n // MEMBERSHIP: 'membership'\n};\n\n\nconst PRIORITY_LEVEL_ZINDEX_MAPPER = {\n [PRIORITY_LEVEL.BASE]: 8000,\n [PRIORITY_LEVEL.POP_UP]: 8010,\n [PRIORITY_LEVEL.OPEN_SESSION]: 8020,\n [PRIORITY_LEVEL.FP]: 8030,\n [PRIORITY_LEVEL.OMG_BEHIND]: 8035,\n [PRIORITY_LEVEL.GAME_LOADING_INDICATOR]: 8037,\n [PRIORITY_LEVEL.NEXT_GAME]: 8038,\n [PRIORITY_LEVEL.GAME_FRAME]: 8040,\n [PRIORITY_LEVEL.GAME_FRAME_FP]: 8041,\n [PRIORITY_LEVEL.GAME_FRAME_LOADER]: 8042,\n [PRIORITY_LEVEL.MINI_CASHIER]: 8045,\n [PRIORITY_LEVEL.LOGIN]: 8050,\n [PRIORITY_LEVEL.SPAIN_SUMMARY_MESSAGE]: 8055,\n [PRIORITY_LEVEL.EXTERNAL_LINK]: 8060,\n [PRIORITY_LEVEL.INTERNAL_OVER_EXTERNAL_LINK]: 8061,\n [PRIORITY_LEVEL.OMG]: 8070,\n [PRIORITY_LEVEL.CASHIER]: 8072,\n [PRIORITY_LEVEL.GAMES_QUESTIONNAIRE]: 8073,\n [PRIORITY_LEVEL.GEO_FREEZE_WINDOW]: 8074,\n [PRIORITY_LEVEL.TEMP_ACCOUNT]: 8075,\n [PRIORITY_LEVEL.MEMBERSHIP]: 8078,\n [PRIORITY_LEVEL.MESSAGE]: 8080,\n [PRIORITY_LEVEL.SECONDARY_MESSAGE]: 8082,\n [PRIORITY_LEVEL.TOUCH_ID]: 8090,\n [PRIORITY_LEVEL.TOUCH_ID_POPUP]: 9002,\n}\n\nconst WRAPPER_DEFAULT_INDEX = 7999;\n\nexport { PRIORITY_LEVEL, PRIORITY_LEVEL_ZINDEX_MAPPER, WRAPPER_DEFAULT_INDEX };\n","import BaseObject from './base_object';\n\n/**\n *\n *\n *\n */\nexport default class BaseModel extends BaseObject {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'BaseModel';\n\n /**\n *\n */\n init(params){}\n}\n","import BaseModel from './base_model';\n\nexport default class BaseModelComponent extends BaseModel {\n getStyleSelectors() {\n return {};\n }\n \n static CLASS = 'BaseModelComponent';\n}\n","const REGULATION_CODE_TYPES = {\n COM: 0,\n ITALY: 1,\n SPAIN: 2,\n NEVADA: 3,\n GIB: 4,\n DELAWARE: 6,\n NJ: 7,\n DK: 8,\n ROMANIA: 9,\n GERMANY: 12,\n PORTUGAL: 14,\n SWEDEN: 15,\n MALTA: 16,\n SH: 18,\n CANADA_ONTARIO: 21,\n NETHERLANDS: 22,\n UK: 255\n};\n\nconst REGULATION_NAMES = {\n [REGULATION_CODE_TYPES.ITALY]: 'Italy',\n [REGULATION_CODE_TYPES.SPAIN]: 'Spain',\n [REGULATION_CODE_TYPES.NEVADA]: 'Nevada',\n [REGULATION_CODE_TYPES.GIB]: 'Gibraltar',\n [REGULATION_CODE_TYPES.DELAWARE]: 'Delaware',\n [REGULATION_CODE_TYPES.NJ]: 'NewJersey',\n [REGULATION_CODE_TYPES.DK]: 'Denmark',\n [REGULATION_CODE_TYPES.PORTUGAL]: 'Portugal',\n [REGULATION_CODE_TYPES.SWEDEN]: 'Sweden',\n [REGULATION_CODE_TYPES.UK]: 'UK',\n [REGULATION_CODE_TYPES.MALTA]: 'Malta',\n [REGULATION_CODE_TYPES.ROMANIA]: 'Romania',\n [REGULATION_CODE_TYPES.CANADA_ONTARIO]: 'Ontario',\n [REGULATION_CODE_TYPES.NETHERLANDS]: 'Netherlands'\n};\n\n\nconst REGULATION_SUFFIX = {\n [REGULATION_CODE_TYPES.COM]: 'com',\n [REGULATION_CODE_TYPES.ITALY]: 'it',\n [REGULATION_CODE_TYPES.SPAIN]: 'es',\n [REGULATION_CODE_TYPES.NEVADA]: 'nev',\n [REGULATION_CODE_TYPES.GIB]: 'gib',\n [REGULATION_CODE_TYPES.DELAWARE]: 'del',\n [REGULATION_CODE_TYPES.NJ]: 'nj',\n [REGULATION_CODE_TYPES.DK]: 'dk',\n [REGULATION_CODE_TYPES.PORTUGAL]: 'pt',\n [REGULATION_CODE_TYPES.SWEDEN]: 'sw',\n [REGULATION_CODE_TYPES.UK]: 'uk',\n [REGULATION_CODE_TYPES.MALTA]: 'mt',\n [REGULATION_CODE_TYPES.ROMANIA]: 'ro',\n [REGULATION_CODE_TYPES.CANADA_ONTARIO]: 'ont',\n [REGULATION_CODE_TYPES.NETHERLANDS]: 'nl'\n};\n\n\nconst TEMP_ACCOUNT_STATUS = {\n APPROVED: 'APPROVED',\n DOCUMENTS_NOT_RECEIVED: 'DOCUMENTS_NOT_RECEIVED',\n PENDING_VERIFICATION: 'PENDING_VERIFICATION'\n};\n\nconst BRANDS = {\n COM : 0,\n NJ888 : 73,\n SPAIN: 58,\n CANADA: 87\n};\n\n\nexport {REGULATION_CODE_TYPES, REGULATION_NAMES, REGULATION_SUFFIX, TEMP_ACCOUNT_STATUS, BRANDS};\n","import BaseObject from \"../../../base/base_object\";\nimport Event, {SystemEventSubscription} from \"../../../utils/event\";\nimport {SYSTEM_EVENTS} from \"../../../events/events\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport ServiceFactory from \"../../service_factory\";\nimport {IObservableSubscription} from '../../../utils/observable';\n\nconst SESSION_TIMER_INCREMENT_INTERVAL = TimeSpan.fromSeconds(1);\nconst HEART_BEAT_INTERVAL = TimeSpan.fromMinutes(5);\n\n\ninterface SessionTimerLogicHelperParams {\n serviceFactory: ServiceFactory\n}\n\nexport default class SessionTimerLogicHelper extends BaseObject {\n static CLASS = 'SessionTimerLogicHelper';\n\n _sessionTime = TimeSpan.fromMinutes(0);\n _sessionTimerObservable: IObservableSubscription = null;\n _heartBeatObservable: IObservableSubscription = null;\n _serviceFactory: ServiceFactory;\n\n init(params: SessionTimerLogicHelperParams) {\n super.init(params);\n\n params = params || ({} as SessionTimerLogicHelperParams);\n this._serviceFactory = params.serviceFactory || ServiceFactory.create();\n\n }\n\n private _focusGainSubscription: SystemEventSubscription = null;\n _subscribe(): void {\n this._focusGainSubscription = Event.on(SYSTEM_EVENTS.WINDOW_FOCUS_GAIN, this._readSessionTimeFromServer, this);\n }\n\n _unsubscribe() : void {\n if (this._focusGainSubscription) {\n this._focusGainSubscription.off();\n this._focusGainSubscription = null;\n }\n }\n\n start(): void {\n if(this._sessionTimerObservable) {\n this.stop();\n }\n\n this._startHeartBeat();\n this._startSessionTime();\n this._readSessionTimeFromServer();\n this._subscribe();\n }\n\n stop(): void {\n this._stopHeartBeat();\n this._stopSessionTimer();\n }\n\n dispose(): void {\n this.stop();\n this._unsubscribe();\n this._sessionTime = TimeSpan.fromMinutes(0);\n }\n\n getSessionTime(): TimeSpan {\n return this._sessionTime;\n }\n\n private _readSessionTimeFromServer() {\n this._serviceFactory.oAuth2Service().getTimeSinceLogin().then(sessionTime => {\n this._sessionTime = sessionTime;\n this._fireUpdateEvent();\n });\n }\n\n private _startSessionTime() {\n this._sessionTimerObservable = this._serviceFactory.observableFactoryService().fromInterval(SESSION_TIMER_INCREMENT_INTERVAL.totalMilliseconds, 'SESSION_TIMER_INCREMENT_INTERVAL')\n .forEach(() => {\n this._sessionTime = this._sessionTime.add(SESSION_TIMER_INCREMENT_INTERVAL);\n this._fireUpdateEvent();\n });\n }\n\n private _stopSessionTimer() {\n if(this._sessionTimerObservable) {\n this._sessionTimerObservable.dispose();\n this._sessionTimerObservable = null;\n }\n }\n\n private _startHeartBeat() {\n this._heartBeatObservable = this._serviceFactory.observableFactoryService().fromInterval(HEART_BEAT_INTERVAL.totalMilliseconds, \"SESSION_TIMER_HEART_BEAT_INTERVAL\")\n .forEach(() => {\n this._readSessionTimeFromServer();\n });\n }\n\n private _stopHeartBeat() {\n if (this._heartBeatObservable) {\n this._heartBeatObservable.dispose();\n this._heartBeatObservable = null;\n }\n }\n\n private _fireUpdateEvent() {\n Event.fire(SYSTEM_EVENTS.SESSION_TIMER_UPDATE, {\n sessionTime: this._sessionTime\n });\n }\n}","import BaseObject from '../../../base/base_object';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport Event, {SystemEventSubscription} from '../../../utils/event';\nimport {SYSTEM_EVENTS} from '../../../events/events';\nimport ServiceFactory from '../../service_factory';\n\n\ninterface GenericRealityCheckMessageHandlerParams {\n serviceFactory: ServiceFactory;\n handleRealityCheckMessageCallback: (TimeSpan) => void;\n realityCheckInterval: TimeSpan\n}\n\nexport default class GenericRealityCheckMessageHandler extends BaseObject {\n static CLASS = 'GenericRealityCheckMessageHandler';\n\n private _initParams: GenericRealityCheckMessageHandlerParams;\n init(params: GenericRealityCheckMessageHandlerParams) {\n super.init(params);\n this._initParams = params;\n this._subscribe();\n }\n\n private SESSION_TIMER_UPDATE_SUBSCRIPTION: SystemEventSubscription = null;\n private OAUTH_STATE_CHANGE_SUBSCRIPTION: SystemEventSubscription = null;\n private _subscribe(): void {\n Event.once(SYSTEM_EVENTS.SESSION_TIMER_UPDATE, (data)=> {\n this._firstOnSessionTimerUpdate(data);\n }, this);\n this.SESSION_TIMER_UPDATE_SUBSCRIPTION = Event.on(SYSTEM_EVENTS.SESSION_TIMER_UPDATE, this._onSessionTimerUpdate.bind(this), this);\n this.OAUTH_STATE_CHANGE_SUBSCRIPTION = Event.on(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, this._onOAuthStateChange.bind(this), this);\n }\n\n private _unsubscribe(): void {\n if (this.SESSION_TIMER_UPDATE_SUBSCRIPTION) {\n this.SESSION_TIMER_UPDATE_SUBSCRIPTION.off();\n }\n\n if(this.OAUTH_STATE_CHANGE_SUBSCRIPTION) {\n this.OAUTH_STATE_CHANGE_SUBSCRIPTION.off();\n }\n }\n\n\n dispose() {\n this._unsubscribe();\n }\n\n\n private _onOAuthStateChange(): void {\n this._lastRealityCheckMessageIndexShown = 0;\n }\n\n private _lastRealityCheckMessageIndexShown = 0;\n\n /**\n * update the last reality check message index shown according to first server call. we need it to solve the\n * problem that interval reminder shown every refresh\n * @param eventData\n * @private\n */\n private _firstOnSessionTimerUpdate(eventData: {sessionTime: TimeSpan}): void {\n if(!this._initParams.serviceFactory.oAuth2Service().isAuthorized()) {\n return;\n }\n\n // Reduce 1 minute so if user refresh few seconds before shown he will not loss the interval reminder.\n this._lastRealityCheckMessageIndexShown = Math.floor((eventData.sessionTime.totalMilliseconds - TimeSpan.fromMinutes(1).totalMilliseconds) / this._initParams.realityCheckInterval.totalMilliseconds);\n\n if(this._lastRealityCheckMessageIndexShown < 0) {\n this._lastRealityCheckMessageIndexShown = 0;\n }\n }\n\n private _onSessionTimerUpdate(eventData: {sessionTime: TimeSpan}): void {\n if(!this._initParams.serviceFactory.oAuth2Service().isAuthorized()) {\n return;\n }\n\n let currentRealityCheckMessageIndexToBeShown = Math.floor(eventData.sessionTime.totalMilliseconds / this._initParams.realityCheckInterval.totalMilliseconds);\n\n if(this._lastRealityCheckMessageIndexShown !== currentRealityCheckMessageIndexToBeShown) {\n this._initParams.handleRealityCheckMessageCallback(eventData.sessionTime);\n this._lastRealityCheckMessageIndexShown = currentRealityCheckMessageIndexToBeShown;\n }\n }\n}","import BaseObject from '../../../base/base_object';\nimport LastLoginComponentController from \"../../../components/regulation_components/base/last_login/last_login_component_controller\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport SessionTimerLogicHelper from \"../helpers/session_timer_logic_helper\";\nimport {CLOCK_LOCALIZATION} from \"../../clock/clock_service_consts\";\nimport ServiceFactory from '../../service_factory';\nimport GenericRealityCheckMessageHandler from '../helpers/generic_reality_check_message_handler';\nimport {GNWP_SOURCES} from \"../../../components/external_links/external_links_consts\";\nimport BaseComponent from '../../../base/base_component';\n\nexport interface BaseRegulationParams {\n serviceFactory: ServiceFactory,\n cssSuffix: string,\n realityCheckInterval: string\n}\n\nexport default class BaseRegulation extends BaseObject{\n\n static CLASS = 'BaseRegulation';\n\n protected init(params: BaseRegulationParams) {\n super.init(params);\n this.serviceFactory = params.serviceFactory;\n this.cssSuffix = params.cssSuffix;\n this._realityCheckInterval = this._parseRealityCheckInterval(params.realityCheckInterval);\n }\n\n protected serviceFactory: ServiceFactory;\n private cssSuffix: string;\n private _sessionTimerHandler: SessionTimerLogicHelper = null;\n private _realityCheckMessageHandler: GenericRealityCheckMessageHandler = null;\n\n private _parseRealityCheckInterval(interval) {\n let defaultValue = TimeSpan.fromHours(1);\n if(!interval) {\n return defaultValue;\n }\n try {\n let timeSpan = TimeSpan.parse(interval);\n timeSpan = new TimeSpan(timeSpan.days, timeSpan.hours, timeSpan.minutes, 0, 0);\n if (timeSpan.totalMinutes < 1) {\n return TimeSpan.fromMinutes(1);\n }\n\n return timeSpan;\n }\n catch (err) {\n this.logger.error('Failed to parse RealityCheckInterval ' + interval);\n return defaultValue;\n }\n }\n\n private _realityCheckInterval: TimeSpan;\n getRealityCheckInterval(): TimeSpan {\n if(this.realityCheckEnabled()) {\n return this._realityCheckInterval;\n } else {\n return TimeSpan.fromMilliseconds(0);\n }\n }\n\n updateRealityCheckInterval(realityCheckIntevalMin: number): Promise {\n /**\n * Normally, the user cannot modify or update the reality check interval\n * This method is implemented in Malta and UK Regulations, regulations that allow the user to set a desired interval\n */\n return Promise.resolve();\n }\n\n hybridNyxClosedButtonEnabled(){\n return false;\n }\n\n\n forceHideCloseButtonInMembership() {\n return false;\n }\n\n getRealityCheckIntervalExpectedByTheGame() {\n let interval = this.getRealityCheckInterval();\n return {\n timeSpan: interval,\n expectedValueByTheGame: Math.round(interval.totalMinutes)\n }\n }\n\n dispose() {\n if (this._realityCheckMessageHandler) {\n this._realityCheckMessageHandler.dispose();\n }\n\n if (this._sessionTimerHandler) {\n this._sessionTimerHandler.dispose();\n }\n }\n\n protected _handleRealityCheckMessage(sessionTimer: TimeSpan): void {\n\n }\n\n showSessionBalanceInAboutBox(): boolean {\n return false;\n }\n\n showTempAccountMessage(closeFunc?: Function): void {\n }\n\n protected sessionTimerEnabled(): boolean {\n return false;\n }\n\n sessionTimerVisible(): boolean {\n return false;\n }\n\n protected realityCheckEnabled(): boolean {\n return false;\n }\n\n showResponsibleIcons(): boolean {\n return false;\n }\n\n showAgeResponsibleGameInDetailedHistory(): boolean {\n return false;\n }\n\n showAgeResponsibleIconInGame(): boolean {\n return true;\n }\n\n getCurrentSessionTime(): TimeSpan {\n if (this._sessionTimerHandler) {\n return this._sessionTimerHandler.getSessionTime();\n }\n return TimeSpan.fromMinutes(0);\n }\n\n\n getCssSuffix(): string {\n return this.cssSuffix;\n }\n\n startSessionTimer(): void {\n if (this.sessionTimerEnabled()) {\n\n if(!this._sessionTimerHandler) {\n this._sessionTimerHandler = SessionTimerLogicHelper.create();\n }\n\n if(this._realityCheckMessageHandler) {\n this._realityCheckMessageHandler.dispose();\n }\n\n this._realityCheckMessageHandler = GenericRealityCheckMessageHandler.create({\n serviceFactory: this.serviceFactory,\n realityCheckInterval: this.getRealityCheckInterval(),\n handleRealityCheckMessageCallback: this._handleRealityCheckMessage.bind(this)\n });\n\n\n this._sessionTimerHandler.start();\n }\n }\n\n\n stopSessionTimer(): void {\n if(this._realityCheckMessageHandler) {\n this._realityCheckMessageHandler.dispose();\n }\n\n if(this._sessionTimerHandler) {\n this._sessionTimerHandler.dispose();\n this._sessionTimerHandler = null;\n }\n }\n\n //TO DO - we should change the type to BaseComponent when BaseComponent will be converted to TypeScript\n getLastLoginComponent(params) {\n return LastLoginComponentController.create(params);\n }\n\n onKickEvent(kickParams): void {\n\n }\n\n openSelfTest(view) {\n\n }\n\n openLimits(): void {\n\n }\n\n openSelfExclusion(view): void {\n\n }\n\n\n /**\n * Get specific external link configuration that should override the default defined in external_link_consts\n */\n getExternalLinksConfig(): any {}\n\n showLoginMessage(): void {}\n\n showLogoutMessage(): void {}\n\n getClockLocalization(): string {\n return CLOCK_LOCALIZATION.LOCAL;\n }\n\n getResponsibleGamingIconsComponent(params: any): BaseComponent {\n return null;\n }\n\n getErrorMessage(errorCode: number): string {\n return this.serviceFactory.languageService().translation(errorCode.toString());\n }\n\n isAnonymousPlayAllowed(): boolean {\n return true;\n }\n\n forceDemoButton(): boolean {\n return false;\n }\n\n forceIntermediatePageForAutorizedUsers(): boolean {\n return true;\n }\n\n supportWithdrawOnlyFromReal(): boolean {\n return true;\n }\n\n shouldPreventMoreThanOneOpenGame(): boolean {\n return true;\n }\n\n getTempAccountGnwpSource() {\n return GNWP_SOURCES.CASHIER;\n }\n\n shouldHaveBetLimitsPerBrand(): boolean {\n return false;\n }\n\n async showGamePopup(): Promise {\n\n }\n\n isGamePopupStepPass() {\n return true;\n }\n\n showHelpInAboutWindow() {\n return true;\n }\n\n isSessionCooldownEnabled(): boolean {\n return false;\n }\n\n showNetPosition(): boolean {\n return false;\n }\n\n overrideCurrencySymbol(): null | string {\n return null;\n }\n\n shouldShowPlayerLimitsToaster(): boolean {\n return false;\n }\n\n checkIfCorrectAppInUse(country:string, state: string) {\n\n }\n\n shouldCallCountryByIP(country:string) {\n return false;\n }\n\n runConditionsBeforeOpenLink(source: string):Promise {\n return Promise.resolve();\n }\n\n fitToPlayModeEnabled(): boolean {\n return false;\n }\n\n stepsBeforeOpenLoginAndRegistration():Promise {\n return Promise.resolve();\n }\n\n getAgeResponsibleGamingLabel(): string | null {\n return null;\n }\n\n shouldRefreshTokenOnAppOpen() {\n return true;\n }\n}","import GameCommonPostMessageActions from \"./game_common_post_message_actions\";\n\nexport default class DemoGamePostMessageActions extends GameCommonPostMessageActions{\n static CLASS=\"DemoGamePostMessageActions\";\n\n lobby() {\n this._serviceFactory.openLinkService().goToLobby();\n }\n}","import DemoGamePostMessageActions from \"./demo_game_post_message_actions\";\nimport GameCommonPostMessageHandler from \"./game_common_post_message_handler\";\n\n\nexport default class DemoGamePostMessageHandler extends GameCommonPostMessageHandler {\n static CLASS = 'DemoGamePostMessageHandler';\n\n _createPostMessageActions(gameOptions) {\n return DemoGamePostMessageActions.create({\n serviceFactory: this._serviceFactory,\n isReal: this._isReal,\n gameOptions: gameOptions\n });\n }\n}","import GameStepBase from './game_step_base';\nimport _ from '../../../utils/underscore';\nimport GameCommonPostMessageHandler from '../post_messages/game_common_post_message_handler';\nimport DemoGamePostMessageHandler from \"../post_messages/demo_game_post_message_handler\";\n\nexport default class BuildGamePostMessageHandlerGameStep extends GameStepBase {\n static CLASS = 'BuildGamePostMessageHandlerGameStep';\n\n init(params) {\n super.init(params);\n\n if(_.isNullOrUndefined(params.isReal)) {\n this.throwError('13',`${this.getClassName()} expects parameter isReal which was not supplied`);\n }\n\n this._isReal = params.isReal;\n }\n\n run(gameOptions) {\n let commonPostMessageHandler;\n if(gameOptions.skipShowGame){\n commonPostMessageHandler = DemoGamePostMessageHandler.create({\n serviceFactory: this.serviceFactory,\n isReal: this._isReal\n });\n } else {\n commonPostMessageHandler = GameCommonPostMessageHandler.create({\n serviceFactory: this.serviceFactory,\n isReal: this._isReal\n });\n }\n\n\n return Promise.resolve(Object.assign(gameOptions, {\n postMessageHandler: commonPostMessageHandler\n }));\n }\n}","import BaseObject from '../../../base/base_object';\nimport Event from '../../../utils/event';\nimport {SYSTEM_EVENTS} from '../../../events/events';\nimport _ from '../../../utils/underscore';\nimport ServiceFactory from '../../../services/service_factory';\nimport {PRODUCT_PACKAGE_MAP} from './external_links_base_handler_consts';\nimport {isCashoutSessionType, isDepositSessionType} from \"../../../../../common/utils/cashier-util\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {GNWP_SOURCES} from \"../external_links_consts\";\n/**\n *\n */\nclass ExternalLinksBaseHandler extends BaseObject {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ExternalLinksBaseHandler';\n\n\t_acceptedSourcesMap = [];\n\n /**\n *\n * @param params\n */\n init(params) {\n params = params || {};\n super.init(params);\n this.componentControllerRef = params.component;\n this._serviceFactory = params.serviceFactory || ServiceFactory.create();\n }\n\n\n\t/**\n * Returns a list of accepted sourcepackageIDs for a handler\n * Override this in the handlers which require it\n\t * @returns {Array}\n\t */\n\tgetAcceptedSourcesMap() {\n\t\treturn [\n\t\t\tPRODUCT_PACKAGE_MAP.MY_ACCOUNT_PP_ID,\n\t\t\tPRODUCT_PACKAGE_MAP.MEMBERSHIP_PP_ID,\n\t\t\tPRODUCT_PACKAGE_MAP.CHANGE_PASSWORD_PP_ID,\n\t\t\tPRODUCT_PACKAGE_MAP.PENDING_APPLICATION_PP_ID,\n\t\t\tPRODUCT_PACKAGE_MAP.REDEEM_COMP_POINTS_PP_ID\n ];\n\t}\n\n\n\t/**\n * Checks if the data received on post message is valid\n\t * @param postMessageData data received from POST\n\t * @returns {boolean}\n\t */\n\tcheckPostMessageData(postMessageData) {\n if (!postMessageData || !postMessageData.ActionId) {\n\t\t\tthis.logger.debug('ActionID is null or undefined');\n return false;\n }\n return true;\n }\n\n\n\t/**\n *\n\t * @param source\n\t * @returns {boolean}\n\t */\n\tisSourceValid(source) {\n let acceptedSources = this.getAcceptedSourcesMap();\n let productPackage;\n\n // TODO: remove SourceProductPackage test when correct source format is received\n\n if (!_.propertyChainExists(source, 'originInformation.originProductPackageID')) {\n if (!_.isUndefined(source.SourceProductPackage)) {\n productPackage = source.SourceProductPackage;\n } else {\n\t\t\t\tthis.logger.debug('originProductPackageID not found');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n productPackage = source.originInformation.originProductPackageID;\n }\n\n // if (acceptedSources.indexOf(source.originInformation.originProductPackageID) < 0) {\n if (acceptedSources.indexOf(productPackage) < 0) {\n // this.logger.error('Wrong originProductPackageID ' + source.originInformation.originProductPackageID);\n this.logger.debug('Wrong originProductPackageID ' + productPackage);\n return false;\n }\n\t\tthis.logger.debug('========== EXTERNAL LINKS HANDLER START ==========');\n\t\tthis.logger.debug('Correct originProductPackageID ' + productPackage);\n\t\tthis.logger.debug(source);\n\t\tthis.logger.debug('=========== EXTERNAL LINKS HANDLER END ===========');\n return true;\n }\n\n\n /**\n * decide if iframe needs to be displayed\n *\n */\n display() {\n this.componentControllerRef.display();\n }\n\n /**\n * Handle link close\n */\n onComponentClose() {}\n\n /**\n * Handle overlay close button click event\n */\n onBtnCloseClicked() {\n this.sendAnalytics({label: 'CloseBtnClicked'});\n }\n\n /**\n * Close this component overlay\n */\n close(postAction) {\n this.componentControllerRef.closeLink(postAction);\n }\n\n\n /**\n *\n * @param postMessageData\n */\n handlePostMessage(postMessageData) {\n if (this.checkPostMessageData(postMessageData)) {\n\t\t\tif (this.isSourceValid(postMessageData)) {\n\t\t\t\tthis.logger.debug('All tests passed, executing postMessageAction');\n\t\t\t\tthis.sendAnalytics({\n label: 'PostMessage: ' + JSON.stringify(postMessageData)\n\t\t\t\t});\n\t\t\t\tthis.executePostMessageAction(postMessageData);\n\t\t\t} else {\n\t\t\t\tthis.executePostMessageActionFallback(postMessageData);\n\t\t\t}\n\t\t}\n }\n\n\n\t/**\n * What should happen when the handler receives a postMessageData that passed all the tests\n * Override this and add your custom functionality\n\t * @param postMessageData\n\t */\n\texecutePostMessageAction(postMessageData) {\n\n }\n\n\n\t/**\n\t * Fallback for when the handler received an invalid postMessageData\n\t * Useful in cases where originProductPackageID or SourceProductPackage do not exist\n\t * @param postMessageData\n\t */\n\texecutePostMessageActionFallback(postMessageData) {\n\n\t}\n\n\n /**\n * Fires SYSTEM_EVENTS.EXTERNAL_LINK_OPEN event\n * @param params\n */\n openExternalLink(params) {\n if (!params) {\n return;\n }\n Event.fire(SYSTEM_EVENTS.EXTERNAL_LINK_OPEN, params);\n }\n\n /**\n *\n * @param analyticObject\n */\n sendAnalytics(analyticObject) {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, Object.assign({\n category: '[Technical-event]',\n action: 'ExternalLink ' + this.getHandlerName(),\n }, analyticObject));\n }\n\n\n getHandlerName() {\n return 'BaseHandler';\n }\n\n /**\n * Get source link to be opened in external link . (override this method)\n */\n getSourceLink() {}\n\n /**\n * Handle post message with ActionId = 6 - CASHIER\n * @param postMessageData\n * @private\n */\n openCashier(postMessageData, channel) {\n if (!postMessageData.TabId) {\n this.logger.warn('TabId is undefined or empty. Unable to open cashier with specified SessionType. Opening default cashier');\n }\n let options = {};\n if (postMessageData.TabId) {\n options.sessionType = postMessageData.TabId;\n }\n if (postMessageData.PromCode) {\n options.PromCode = postMessageData.PromCode;\n }\n\n if(channel) {\n options.channel = channel;\n }\n\n this._serviceFactory.cashierProxyService().openCashier(options);\n }\n\n /**\n * Handle post message with ActionId = 6 - CASHIER\n * Based on tab id on this post message, we can open either deposit, either cashout\n * @param postMessageData\n * @private\n */\n _handleCashierOpening(postMessageData) {\n let channelElement = null;\n let sessionType = postMessageData.TabId;\n\n\n if (isDepositSessionType(sessionType)) {\n channelElement = CHANNEL_ELEMENTS.depositButton;\n } else if (isCashoutSessionType(sessionType)) {\n channelElement = CHANNEL_ELEMENTS.withdrawButton;\n }\n\n this.openCashier(postMessageData, {\n source: CHANNEL_SOURCE.myAccount,\n area: AreaType.Header,\n element: channelElement\n });\n }\n\n /**\n * Handle post message with ActionId = 7 - QUICK_DEPOSIT\n * @param postMessageData\n * @private\n */\n _handleQuickDeposit(postMessageData) {\n let options = {};\n if (postMessageData.PromCode) {\n //update promo code to open cashier with one received from My Account\n options.PromCode = postMessageData.PromCode;\n }\n\n this._serviceFactory.cashierProxyService().openDeposit({\n ...options,\n channel: {\n source: CHANNEL_SOURCE.myAccount,\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n\n this.close();\n\n }\n\n\n /**\n * Open real game by gameType\n * @param gameType\n * @private\n */\n openRealGame(gameType, referrerID) {\n\n let gameOptions = {\n gameType: gameType * 1\n };\n\n if(!_.isNullOrUndefined(referrerID)) {\n gameOptions.referrerId = referrerID\n }\n\n return ServiceFactory.create().gameService().openRealGame(gameOptions);\n }\n\n /**\n * Open anonymous game by gameType\n * @param gameType\n * @private\n */\n openAnonymousGame(gameType) {\n return ServiceFactory.create().gameService().openAnonymousGame({\n gameType: gameType * 1\n });\n }\n\n\n /**\n * Handle post message with ActionId = 73 - Membership\n * @private\n */\n _handleOpenWebLogin(){\n ServiceFactory.create().webLoginService().openLoginForm();\n }\n\n /**\n * Handle post message with ActionId = 75 - UPLOAD_DOCUMENTS_IV\n */\n _handleUploadDocumentsIv(){\n ServiceFactory.create().openLinkService().openLink({source: GNWP_SOURCES.DOCUMENT_UPLOAD});\n }\n}\n\nexport default ExternalLinksBaseHandler;","/**\n *\n * @type {{NAME: string, SESSION: string, CLOSE: string, FS: string, FS_BUTTON: string, FAVORITE: string, TOGGLES: string, CHECKBOX: string, REAL: string, ANONYMOUS: string, LOGIN: string, CLOCK: string}}\n */\nconst ELEMENTS = {\n NAME: '.cgp-navbar-game-name',\n SESSION: '.cgp-navbar-game-session',\n CLOSE: '.cgp-navbar-game-close',\n CLOSE_BUTTON: '.game-panel-close-btn',\n FS: '.cgp-navbar-game-fullscreen',\n FS_BUTTON: '.cgp-navbar-game-fullscreen-btn',\n FAVORITE: '.cgp-navbar-game-favorite',\n TOGGLES: '.cgp-navbar-gamemode-toggles',\n SWITCH_GAME_MODE: '.cgp-switch-gamemode',\n CHECKBOX: '.cgp-switch-gamemode-checkbox',\n REAL: '.cgp-switch-real',\n ANONYMOUS: '.cgp-switch-anonymous',\n LOGIN: '.cgp-navbar-login',\n CLOCK: '.cgp-navbar-clock',\n SESSION_TIMER: '.cgp-navbar-session-timer',\n TOGGLE_CIRCLE: '.cgp-switch-icon',\n CHECKBOX_LABEL: '.cgp-checkbox-label',\n TOGGLE_REAL_TEXT: '.cgp-switch-real',\n TOGGLE_ANNONYMOUS_TEXT: '.cgp-switch-anonymous',\n GAME_FRAME_BG_LEFT: '.cgp-game-frame-bg-left',\n GAME_FRAME_BG_RIGHT: '.cgp-game-frame-bg-right',\n NO_TOGGLE: 'cgp-navbar-no-toggle',\n RESPONSIBLE_GAME_ICONS: '.cgp-navbar-resp-game-icons'\n};\n\n\n/**\n *\n * @type {{CATEGORY: {ANONYMOUS: string, REAL: string}, ACTION: {ANONYMOUS: string, REAL: string}}}\n */\nconst ANALYTICS = {\n CATEGORY: {\n ANONYMOUS: 'Client_GameFrame_Anonymous',\n REAL: 'Client_GameFrame_Real'\n },\n ACTION: {\n ANONYMOUS: 'ToggleAnonymous',\n REAL: 'ToggleRealMoney',\n FS: 'FullScreen',\n GAME_NAME: 'GameName',\n SESSION_ID: 'SessionID',\n CLOSE: 'CloseClick',\n RG: 'RG',\n TIME: 'Time'\n }\n};\n\n\nconst GAME_SOURCE = {\n CHALLENGES: 'CHALLENGES'\n}\n\n\nconst FP_MESSAGE_DATA = {\n CHALLENGES: {\n content: 'mdp_game_frame_open_fp_from_challenges_content',\n ctaOK: 'mdp_game_frame_open_fp_from_challenges_cta_ok',\n ctaCancel: 'mdp_game_frame_open_fp_from_challenges_cta_cancel',\n analytics: {\n ctaOK: {\n category: \"GF_FPChallenge_popup\",\n action: \"OK_ChallengeFP_Button\",\n label: \"CTA_OK_ChallengeFP\"\n },\n ctaCancel: {\n category: \"GF_FPChallenge_popup\",\n action: \"Cancel_ChallengeFP_Button\",\n label: \"CTA_Cancel_ChallengeFP\"\n },\n close: {}\n }\n }\n};\n\nconst RESPONSIBLE_GAMBLING_VIEW = {\n WINDOW: 0,\n IFRAME: 1,\n REDIRECT: 2\n};\n\nexport {ELEMENTS, ANALYTICS, FP_MESSAGE_DATA, GAME_SOURCE, RESPONSIBLE_GAMBLING_VIEW};","import BaseObject from '../../../base/base_object';\n\nexport default class GamePostMessageListenerBase extends BaseObject {\n static CLASS = 'GamePostMessageListenerBase';\n _prevGameBalance = null;\n _prevDiffBalance = null;\n\n dispose() {}\n\n processPostMessage(messageData) {\n this.throwNotImplemented('11', 'processPostMessage');\n }\n}","const TOKEN_PROPERTIES = {\n OAUTH_STORAGE_KEY: 'oAuth2',\n OAUTH_EXPIRE_KEY_IN_STORAGE: 'oAuth2.expireIn',\n OAUTH_LAST_REFRESH_TOKEN_TIMESTAMP: 'oAuth2.lastLoginTimeStamp',\n OAUTH_LAST_USER_DATA: 'oAuth2.userData',\n OAUTH_LAST_SESSION_DATA: 'oAuth2.lastSession',\n OAUTH_HAS_REMEMBER_ME: 'oAuth2.hasRememberMe',\n OAUTH_LAST_TIME_ACTIVITY: 'oAuth2.lastTimeActivity',\n OAUTH_CUSTOM_SESSION_TIMEOUT: 'oAuth2.customSessionTimeout',\n OAUTH_ACCESS_TOKEN: 'oAuth2.access_token',\n OAUTH_TOKEN_FIELDS_OVERRIDES: 'oAuth2.tokenFieldsOverrides',\n};\nconst GRANT_TYPES = {\n PASSWORD: 'password',\n REFRESH_TOKEN: 'refresh_token',\n AUTOLOGIN: 'autologin'\n};\nconst OAUTH2_CSS = {\n AUTHORIZED_USER_CLASS: 'cgp-authorized-user'\n};\n\nconst HTTP = {\n OK: 200\n};\nconst OAUTH_TOKEN_ERRORS = {\n INVALID_GRANT: 'invalid_grant'\n};\nconst LOGIN_TYPE = {\n NEW_LOGIN: 1,\n AUTOLOGIN: 3\n};\n\nconst ID_VERIFICATION_STATUS = {\n AGE_VERIFIED: 1,\n ADDRESS_VERIFIDED: 1\n};\n\nconst LOGOUT_REASONS = {\n EXPLICIT_LOGOUT: 1,\n USER_IDLE: 2,\n AUTOLOGIN_FAILED: 3,\n REFRESH_TOKEN_FAILED: 4,\n ACCESS_TOKEN_REMOVED: 5,\n USER_KICKED: 6,\n};\n\nexport { TOKEN_PROPERTIES, HTTP, GRANT_TYPES, OAUTH2_CSS, OAUTH_TOKEN_ERRORS, LOGIN_TYPE, ID_VERIFICATION_STATUS, LOGOUT_REASONS };\n\n\n","import BaseComponent from \"../../base/base_component\";\nimport DOM from \"../../utils/dom\";\nimport Device from \"../../utils/device/device\";\nimport {SYSTEM_EVENTS} from \"../../events/events\";\n\nlet sessionTimerView = require('./view/session_timer.html');\n\nexport default class SessionTimerController extends BaseComponent {\n\n\n /**\n *\n * @type {string}\n */\n static CLASS = 'SessionTimerController';\n\n\n /**\n *\n * @type {string}\n */\n static DIRECTIVE = 'cgp-directive-session_timer';\n\n\n /**\n *\n * @type {string}\n * @private\n */\n protected _selector = 'session-timer-component';\n\n\n /**\n * Refference to the html nodes that display the session time and the component container\n * {\n\t\t\tdefault: htmlElement,\n\t\t\tnavbar: htmlElement,\n\t\t\tcontainer: htmlElement\n\t\t}\n * @type {Object | null}\n * @private\n */\n _htmlElementsReff = null;\n\n\n /**\n * {\n * \ttimeoffset: number | undefined | null\n * \t}\n * @param params\n */\n init(params) {\n super.init(params);\n }\n\n\n /**\n *\n * @returns {SessionTimerController}\n */\n start() {\n this.setHTML(this.bake(sessionTimerView));\n this._htmlElementsReff = {\n default: this.querySelector('#session-timer'),\n navbar: this.querySelector('#session-timer-navbar'),\n container: this.querySelector('#container'),\n mobileLarge: this.querySelector('#session-timer-mobile-large')\n };\n\n DOM.addStyle(this._htmlElementsReff.container, 'display', 'none');\n this._subscribe();\n\n if (this.serviceFactory.oAuth2Service().isAuthorized()) {\n this._onLogin();\n }\n\n return this;\n }\n\n\n /**\n * Subscribes to the oauth state change event to show / hide (and stop) the session time\n * @private\n */\n _subscribe() {\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, () => {\n if (this.serviceFactory.oAuth2Service().isAuthorized()) {\n this._onLogin();\n } else {\n DOM.addStyle(this._htmlElementsReff.container, 'display', 'none');\n }\n });\n }\n\n\n _onLogin() {\n this._updateTime({\n sessionTime: this.serviceFactory.regulationService().getRegulation().getCurrentSessionTime()\n });\n\n if (this.serviceFactory.regulationService().sessionTimerVisible()) {\n DOM.removeStyle(this._htmlElementsReff.container, 'display');\n }\n this.onSystemEvent(SYSTEM_EVENTS.SESSION_TIMER_UPDATE, this._updateTime);\n }\n\n\n /**\n * Updates the time fields in the view\n * @private\n */\n _updateTime(params: any = {}) {\n let elapsedTime = params.sessionTime;\n let timeString = '00 : 00';\n\n if (elapsedTime) {\n timeString = String(elapsedTime.days * 24 + elapsedTime.hours).padStart(2, '0') + ' : ' + elapsedTime.minutes.toString().padStart(2, '0');\n }\n\n if(this._htmlElementsReff.default.innerText !== timeString) {\n DOM.html(timeString, this._htmlElementsReff.default);\n }\n\n if(this._htmlElementsReff.navbar.innerText !== timeString) {\n DOM.html(timeString, this._htmlElementsReff.navbar);\n }\n\n\n if (Device.isMobile()) {\n if(this._htmlElementsReff.mobileLarge.innerText !== timeString) {\n DOM.html(timeString, this._htmlElementsReff.mobileLarge);\n }\n }\n }\n}","export const CGP_ERROR_CODES = {\n GENERAL_ERROR_SUPPORT: 100000,\n RESTRICTED_COUNTRY: 100105,\n INVALID_CREDENTIALS: 110,\n LOGIN_RESTRICTION: 100115,\n INVALID_REFRESH_TOKEN: 100120,\n CAPTCHA_REQUIRED: 170,\n TOUCH_ID_CHANGE_PASS: 100300,\n TOUCH_ID_EXPIRE: 100305,\n GENERAL_ERROR: 900000,\n OPENING_GAME_ERROR: 100205,\n UNSUPPORTED_ANONYMOUS: 100210,\n TIME_LIMIT_REACHED_DAILY: 100155,\n TIME_LIMIT_REACHED_WEEKLY: 100180,\n TIME_LIMIT_REACHED_MONTHLY: 100181,\n\n TOKEN_NOT_VALID: 20,\n PENDING_ACTION_REQUIRED: 50,\n INVALID_GRANT: 'invalid_grant'\n};\n\n\nexport function isRefreshTokenError(errorCode: string): boolean {\n errorCode = errorCode?.toString();\n return errorCode === CGP_ERROR_CODES.INVALID_REFRESH_TOKEN.toString() || errorCode === CGP_ERROR_CODES.INVALID_GRANT;\n}\n","import GameStepBase from './game_step_base';\n\n\nexport default class RealityCheckIntervalAppenderGameStep extends GameStepBase {\n static CLASS = 'RealityCheckIntervalAppenderGameStep';\n\n run(gameOptions) {\n gameOptions.realityCheckInterval = gameOptions.company.getRealityCheckIntervalExpectedByTheGame();\n return Promise.resolve(gameOptions);\n }\n}","import BaseModel from './base_model';\n\n/**\n *\n *\n *\n */\nclass BaseModelService extends BaseModel {\n static CLASS = 'BaseModelService';\n\n init(params) {}\n\n}\n\nexport default BaseModelService;","/**\n * WEB VIEW MANAGER const symbols.\n * @constant\n * @type {Object}\n */\nconst WEB_VIEW_TYPES = {\n MASTER: 0,\n SECOND: 1,\n SAFARI: 2\n};\n\nconst WEB_VIEW_IDS = {\n MASTER_ID: 0,\n GAME_ID: 1,\n SAFARI_ID: 1000,\n DEPOSIT_WIDGET_ID: 1100\n};\n\nconst WEB_VIEW_REASON = {\n UN_DEFINED: -1,\n WEB_SECOND_NOT_SUPPORTED: 400,\n CLOSE_BUT_CLICKED: 500,\n CLOSE_BY_WEB: 501,\n CLIENT_TAPED_ON_VIEW: 600,\n OPEN_LINK: 700\n};\n\nconst WEB_VIEW_INFO = {\n TYPE: 'type',\n ACTION: 'action',\n ENAABLE_SNAP_SHOT: 'enableSnapShot',\n INJECT_FUNC: 'injectfunc',\n DEL_INJECT: '@@@',\n FRAME_OFFSET_TOP_Y: 'frameOffsetTopY',\n FRAME_OFFSET_TOP_PORTRATE_Y: 'topPortrateY',\n FRAME_TOP_LANDSCAPE_Y: 'frameOffsetTopLandscapeY',\n FRAME_TOP_PORTRATE_Y: 'frameOffsetTopPortrateY',\n FRAME_TOP_PORTRATE_IPHONE_X: 'frameOffsetTopPortrateIphoneX',\n FRAME_OFFSET_BOTTOM_Y: 'frameOffsetBottomY',\n ID: 'webid',\n URL: 'url',\n DISPLAY_GAME_TIME_OUT: 'displayGameTimeOut',\n TAP_KEEP_ALIVE: 'tapKeepAlive',\n BUT_INIT: 'butInit', // Close button\n BUT_RTL: 'butRTL',\n BUT_W: 'butW',\n BUT_H: 'butH',\n BUT_X: 'butX',\n BUT_Y: 'butY',\n DP_TO_PX: 'dp2px',\n BUT_LANDSCARE_X: 'butlandscapeX',\n BUT_LANDSCARE_Y: 'butlandscapeY',\n CLOSE_BUT_CLICKED: 'closebutclicked',\n WEB_SECOND_NOT_SUPPORTED: 'websecondnotsupported',\n CLOSE_CALLED_BY_WEB: 'closesafari',\n TAP_ON_VIEW: 'tapAction',\n ORIENTATION: 'orientation'\n};\n\nconst WEB_INJECT_FUNC = {\n DRAG_STARTED: 'function dragStarted(x,y) {var el = document.elementFromPoint(x, y);var evt = new MouseEvent(\\'click\\', {bubbles: true,cancelable: true,view: window, screenX: x, screenY: y, clientX: x+10, clientY: y + 10});el.dispatchEvent(evt);}',\n DEBUG_FUNC: 'function onclock() {var devtools = /./; devtools.toString = function() { webkit.messageHandlers.cbCallBackHandlerCGP.postMessage(\\'isdebugenable\\'); }; console.log(\\'%c\\', devtools);} setInterval(onclock, 200);',\n PIXEL_EL: 'var elemDiv = document.createElement(\\'div\\'); elemDiv.style.cssText = \\'position:fixed;width:1px;height:1px;z-index:99999;background:black;\\';document.body.appendChild(elemDiv);',\n READY: 'setTimeout(function() {webkit.messageHandlers.cbCallBackHandlerCGP.postMessage(\\'onready\\');}, 100);'\n};\n\n\nexport {WEB_VIEW_TYPES, WEB_VIEW_IDS, WEB_VIEW_INFO, WEB_VIEW_REASON, WEB_INJECT_FUNC};","import BaseComponent from \"../../base/base_component\";\n\nexport default class LastLoginComponentWrapper extends BaseComponent {\n\t/**\n\t *\n\t * @type {string}\n\t */\n\tstatic CLASS = 'LastLoginComponentWrapper';\n\n\n\t/**\n\t * @static\n\t * @type {string}\n\t */\n\tstatic DIRECTIVE = 'cgp-directive-lastlogin';\n\n\n\t/**\n\t * last login component provided by the regulation class\n\t * @type {null}\n\t * @private\n\t */\n\t_lastLoginComponent = null;\n\n\tinit(params) {\n\t\tsuper.init(params);\n\t\tthis._lastLoginComponent = this.serviceFactory.regulationService().getRegulation().getLastLoginComponent(params);\n\t}\n\n\tstart() {\n\t\tthis._lastLoginComponent.start();\n\t\tthis.appendChildComponent(this._lastLoginComponent);\n\t}\n\n\tshutDown() {\n\t\t//TODO should be removed after directives UT refactor\n\t\tthis.logger.debug('ShutDown LastLoginComponentWrapper');\n\t}\n}","/**\n * Created by andreyna on 8/15/2017.\n */\nimport BaseModelComponent from '../../../base/base_model_component';\nimport { FP_INDICATOR_CLASSES, DISPLAY_CONSTRAINT } from './fp_indicator_consts';\nimport _ from '../../../utils/underscore';\nimport { IAlteredFreePlayVoucher } from '../voucher/free_play_voucher_consts';\n\nexport default class FPIndicatorComponentModel extends BaseModelComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'FPIndicatorComponentModel';\n\n private _fpData: IAlteredFreePlayVoucher[];\n private _isEnabledState: boolean;\n private _gameTypeID: number;\n private _indicatorIcons: any;\n private _openMode: string;\n private _openPriority: number;\n private _openDirection: string;\n private _displayConstraint: string;\n private _freePlayID: string;\n private _analytics: any;\n private _onSelectedFn: Function;\n private _isSelected: boolean;\n\n\n /**\n *\n * @param params\n */\n init(params: any = {}) {\n super.init(params);\n this._setGameTypeID(params.gameTypeID)\n ._setIndicatorIcons(params.indicatorIcons)\n ._setFreePlayOpenMode(params.openMode)\n ._setOpenPriority(params.openPriority)\n ._setOpenDirection(params.openDirection)\n ._setDisplayConstraint(params.displayConstraint)\n ._setFreePlayID(params.freePlayID)\n ._setOnSelected(params.onSelected)\n .setIsSelected(params.isSelected)\n ._setAnalytics(params.analytics);\n }\n\n\n /**\n * Set free plays\n * @param fpData\n * @returns {FPIndicatorComponentModel}\n */\n setFreePlayData(fpData) {\n this._fpData = fpData;\n return this;\n }\n\n\n /**\n * Get free play data\n * @returns {*}\n */\n getFreePlayData() {\n return this._fpData;\n }\n\n\n /**\n * Set if state enabled\n * @param isEnabled\n */\n setIsEnabledState(isEnabled) {\n this._isEnabledState = isEnabled;\n }\n\n /**\n * Get if state is enabled\n * @returns {*}\n */\n getIsEnabledState() {\n return this._isEnabledState;\n }\n\n /**\n * Set GameTypeID\n * @param gameTypeID\n * @returns {FPIndicatorComponentModel}\n * @private\n */\n private _setGameTypeID(gameTypeID) {\n this._gameTypeID = gameTypeID;\n return this;\n }\n\n\n /**\n * Set css class for indicator on / off items\n * @param indicatorIcons\n * @returns {FPIndicatorComponentModel}\n * @private\n */\n private _setIndicatorIcons(indicatorIcons) {\n const defaultIcons = {\n enabled: FP_INDICATOR_CLASSES.ICON_ENABLED_BACKGROUND,\n selected: FP_INDICATOR_CLASSES.ICON_ENABLED_BACKGROUND,\n disabled: FP_INDICATOR_CLASSES.ICON_DISABLED_BACKGROUND\n };\n\n this._indicatorIcons = Object.assign({}, defaultIcons, _.isObject(indicatorIcons) ? indicatorIcons : _.safeJSON(indicatorIcons));\n return this;\n }\n\n /**\n * Define open mode for FreePlay message when click on icon\n * @param openMode\n * @returns {FPIndicatorComponentModel}\n * @private\n */\n private _setFreePlayOpenMode(openMode) {\n this._openMode = openMode;\n return this;\n }\n\n\n /**\n * Set priority level that can be passed tp FreePlay service in order to open FreePlay message in lightbox with specified overlay priority level\n * @param openPriority\n * @returns {FPIndicatorComponentModel}\n * @private\n */\n private _setOpenPriority(openPriority) {\n this._openPriority = openPriority;\n return this;\n }\n\n\n /**\n * Set the initial direction that free play message should be opened with\n * @param openDirection\n * @returns {FPIndicatorComponentModel}\n * @private\n */\n private _setOpenDirection(openDirection) {\n this._openDirection = openDirection;\n return this;\n }\n\n\n /**\n * Set filter to make indicator enabled or disabled\n * @param filterBy\n * @returns {FPIndicatorComponentModel}\n * @private\n */\n private _setDisplayConstraint(displayConstraint = DISPLAY_CONSTRAINT) {\n this._displayConstraint = displayConstraint;\n return this;\n }\n\n\n /**\n * Set free play ID that indicator works with\n * @param isFreePlay\n * @private\n */\n private _setFreePlayID(freePlayID) {\n this._freePlayID = freePlayID;\n return this;\n }\n\n /**\n * Set analytics object to be send on FreePlay button click\n * @param analytics\n * @returns {FPIndicatorComponentModel}\n * @private\n */\n private _setAnalytics(analytics) {\n this._analytics = _.safeJSON(analytics, {});\n return this;\n }\n\n /**\n * Set callback on Selected\n * @param callback\n * @returns {FPIndicatorComponentModel}\n * @private\n */\n private _setOnSelected(callback) {\n this._onSelectedFn = callback;\n return this;\n }\n\n\n /**\n * Set is indicator selected\n * @param isSelected\n * @returns {FPIndicatorComponentModel}\n */\n setIsSelected(isSelected = false) {\n this._isSelected = isSelected;\n return this;\n }\n\n\n /**\n * Get GameTypeID\n * If it's defined, indicator will be on only if there is voucher with specified game\n * @returns {*}\n */\n getGameTypeID() {\n return this._gameTypeID;\n }\n\n\n /**\n * Get indicator icons.\n * If defined, the default css class for icons will be replaced\n * @returns {*}\n */\n getIndicatorIcons() {\n return this._indicatorIcons;\n }\n\n /**\n * Get open mode for FreePlay message\n * @returns {*}\n */\n getOpenMode() {\n return this._openMode;\n }\n\n\n /**\n * Get priority level that can be passed to FreePlay service in order to open FreePlay message in lightbox with specified overlay priority level\n * @returns {*}\n */\n getOpenPriority() {\n return this._openPriority;\n }\n\n\n /**\n * Get the initial direction that free play message should be opened with\n * @returns {*}\n */\n getOpenDirection() {\n return this._openDirection;\n }\n\n\n /**\n * Get filter by\n * @returns {string|*}\n */\n getDisplayConstraints() {\n return this._displayConstraint;\n }\n\n\n /**\n * Get FreePlayID that indicator works with\n * @returns {boolean|*}\n */\n getFreePlayID() {\n return this._freePlayID;\n }\n\n /**\n * Add default selectors to style selector passed to components\n * @returns {any}\n */\n getStyleSelectors() {\n return Object.assign({}, { active: FP_INDICATOR_CLASSES.ACTIVE }, super.getStyleSelectors());\n }\n\n\n /**\n * Get analytics object to be send on FreePlay button click\n * @returns {{category: string, action: string}|*}\n */\n getAnalytics() {\n return this._analytics;\n }\n\n\n /**\n * Get if indicator is selected\n * @returns {*}\n */\n getIsSelected() {\n return this._isSelected;\n }\n\n\n /**\n * Get onSelected callback function\n * @returns {*}\n */\n getOnSelectedFn() {\n return this._onSelectedFn;\n }\n}\n","/**\n * Created by andreyna on 8/15/2017.\n */\nimport BaseComponent from '../../../base/base_component';\nimport FPIndicatorComponentModel from './fp_indicator_component_model';\nimport { FP_INDICATOR_CLASSES, FREE_PLAY_FILTER_CONSTRAINTS } from './fp_indicator_consts';\nimport DOM from '../../../utils/dom';\nimport { SYSTEM_EVENTS, USER_EVENTS } from '../../../events/events';\nimport Event from '../../../utils/event';\nimport _ from '../../../utils/underscore';\nimport { IAlteredFreePlayVoucher } from '../voucher/free_play_voucher_consts';\nimport {CyClass} from '../../../../../common/cy-classes';\nconst indicatorView = require('./view/fp_indicator.html');\n\nexport default class FPIndicatorComponentController extends BaseComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'FPIndicatorComponentController';\n\n\n /**\n * @static\n * @type {string}\n */\n static DIRECTIVE = 'cgp-directive-fp_indicator';\n\n\n /**\n * Root component selector.\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-fp-indicator-component';\n\n\n /**\n * @property\n * @type {object|null}\n * @private\n */\n _model: FPIndicatorComponentModel = null;\n\n\n /**\n * Init component\n * @param params\n */\n init(params) {\n super.init(params);\n this._model = FPIndicatorComponentModel.create(params);\n this.addClass(CyClass('cy-free-play-indicator-button'));\n this.subscribe();\n }\n\n\n /**\n *\n */\n subscribe() {\n this.onSystemEvent(SYSTEM_EVENTS.FREE_PLAY_UPDATED, (data) => {\n this._model.setFreePlayData(data);\n this._updateContent();\n });\n\n this.onRootElementEvent(USER_EVENTS.ON_CLICK, () => {\n if (false === this._model.getIsEnabledState()) {\n return;\n }\n const isSelected = this._model.getIsSelected();\n\n // open voucher message if not selectable at all or is currently not selected\n if (false === isSelected) {\n this._sendAnalytics();\n Event.fire(SYSTEM_EVENTS.FREE_PLAY_OPEN_VOUCHERS_MSG, {\n filter: {\n gameTypeID: this._model.getGameTypeID(),\n excludeFreePlays: this._model.getFreePlayID() ? [this._model.getFreePlayID()] : []\n },\n mode: this._model.getOpenMode(),\n openPriority: this._model.getOpenPriority(),\n openDirection: this._model.getOpenDirection()\n });\n }\n\n this._updateSelection(!isSelected)\n const onSelected = this._model.getOnSelectedFn();\n if (_.isFunction(onSelected)) {\n onSelected(!isSelected);\n }\n });\n }\n\n\n /**\n * Send analytics when FreePlay indicator has been clicked and there is at least one free play voucher\n * @private\n */\n _sendAnalytics() {\n const analyticsObj = this._model.getAnalytics();\n if (analyticsObj.category) {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, this._model.getAnalytics());\n }\n }\n\n /**\n *\n * @returns {FPIndicatorComponentController}\n */\n start() {\n this.logger.debug('Start FP inicator');\n\n const bakedHTML = this.bake(indicatorView, {\n iconDisabled: this._model.getIndicatorIcons().disabled\n });\n\n this.setHTML(bakedHTML);\n super._setPropertiesSelectors();\n\n return this;\n }\n\n /**\n * Fix elements position and execute data binding\n */\n onAppendedToDOM() {\n super.onAppendedToDOM();\n this._model.setIsEnabledState(false);\n this._updateContent();\n this._initFreePlays();\n }\n\n\n /**\n * Init free plays data by received it from FreePlayService\n * @private\n */\n private _initFreePlays() {\n return this.serviceFactory.freePlayService().getFreePlayVouchers()\n .then((freePlays) => {\n this._model.setFreePlayData(freePlays);\n this._updateContent();\n });\n }\n\n\n /**\n * Retrieve free play from service and update the model\n * @private\n */\n private _updateContent() {\n const stateFilteredFP = this._filterFreePlayByConstraints(this._model.getDisplayConstraints());\n this._updateState(stateFilteredFP.length === 0 ? false : true);\n }\n\n\n /**\n * Filter new free plays\n * @private\n */\n private _filterByNewFreePlays(freePlays: IAlteredFreePlayVoucher[]) {\n return freePlays.filter((fp) => {\n return fp.isNew === true;\n });\n }\n\n\n /**\n * Filter free plays by gameTypeID\n * @param freePlays\n * @private\n */\n private _filterByGame(freePlays: IAlteredFreePlayVoucher[]) {\n const gameTypeID = this._model.getGameTypeID();\n const freePlayID = this._model.getFreePlayID();\n return freePlays.filter((fp) => {\n if (freePlayID && parseInt(freePlayID) === parseInt(fp.ID)) { // exclude currently played FreePlay voucher\n return false;\n }\n const games = fp.games.filter((gameID) => {\n return gameTypeID === gameID * 1;\n });\n return games && games.length;\n });\n }\n\n\n /**\n *\n * @param displayConstraints\n * @private\n */\n private _filterFreePlayByConstraints(displayConstraints?: string) {\n const freePlays = this._model.getFreePlayData();\n if (!displayConstraints) {\n return [];\n }\n\n let filteredFreePlays = freePlays && _.isArray(freePlays) ?\n this._filterByConstraint(displayConstraints, freePlays)\n : [];\n return filteredFreePlays;\n }\n\n\n /**\n * Filter free play by constraint\n * @param constraint\n * @private\n */\n private _filterByConstraint(constraint: string, freePlays: IAlteredFreePlayVoucher[]) {\n let filteredFreePlays = freePlays || [];\n switch (constraint) {\n case FREE_PLAY_FILTER_CONSTRAINTS.FREE_PLAY_EXIST:\n break;\n case FREE_PLAY_FILTER_CONSTRAINTS.CONTAINS_GAME:\n filteredFreePlays = this._filterByGame(freePlays);\n break;\n case FREE_PLAY_FILTER_CONSTRAINTS.NEW:\n filteredFreePlays = this._filterByNewFreePlays(freePlays);\n break;\n }\n return filteredFreePlays;\n }\n\n\n /**\n * Update elements and css according to the state and device type\n * @param isEnabled\n * @private\n */\n private _updateState(isEnabled: boolean) {\n const oldIsEnabled = this._model.getIsEnabledState();\n const iconEl = this.getDOMElementByClassName(FP_INDICATOR_CLASSES.ICON);\n DOM.removeClass(iconEl, this._getIconClassByState(oldIsEnabled));\n DOM.addClass(iconEl, this._getIconClassByState(isEnabled));\n\n if (isEnabled) {\n DOM.addClass(this.getEl(), this.getStyleSelectors().active);\n } else {\n DOM.removeClass(this.getEl(), this.getStyleSelectors().active);\n }\n\n this._model.setIsEnabledState(isEnabled);\n\n this._updateSelection(this._model.getIsSelected());\n }\n\n\n private _updateSelection(isSelected: boolean) {\n const iconEl = this.getDOMElementByClassName(FP_INDICATOR_CLASSES.ICON);\n const selectedClass = this._model.getIndicatorIcons().selected;\n DOM.removeClass(iconEl, selectedClass);\n if (isSelected) {\n DOM.addClass(iconEl, selectedClass);\n // DOM.removeClass(iconEl, this._getIconClassByNumberOfMessages(state));\n }\n\n this._model.setIsSelected(isSelected);\n }\n\n\n /**\n * Get icon background class by indicator state\n * @param isEnabled\n * @returns {*}\n * @private\n */\n private _getIconClassByState(isEnabled: boolean) {\n if (isEnabled) {\n return this._model.getIndicatorIcons().enabled;\n } else {\n return this._model.getIndicatorIcons().disabled;\n }\n //return state === true ? this._model.getIndicatorIcons().enabled : this._model.getIndicatorIcons().disabled;\n }\n\n}\n","import BaseModelComponent from '../../base/base_model_component';\nimport _ from '../../utils/underscore';\nimport ServiceFactory from '../../services/service_factory';\n\nclass RadioButtonModel extends BaseModelComponent {\n\t/**\n\t * @static\n\t * @type {string}\n\t */\n\tstatic CLASS = 'RadioButtonModel';\n\n\n\t/**\n\t *\n\t * @param params\n\t */\n\tinit(params = {}) {\n\t\tthis._setID(params.id)\n\t\t\t._setName(params.name)\n\t\t\t._setChecked(params.checked)\n\t\t\t._setLabel(params.labelkey);\n\t}\n\n\t_setID(id) {\n\t\tthis._id = id || 'rb_test';\n\n\t\treturn this;\n\t}\n\n\t_setName(name) {\n\t\tthis._name = name || '';\n\n\t\treturn this;\n\t}\n\n\t_setChecked(checked) {\n\t\tthis._checked = checked === 'true';\n\n\t\treturn this;\n\t}\n\n\t_setLabel(labelKey) {\n\t\tthis._label = '';\n\t\tif(!_.isUndefined(labelKey) && labelKey !== '') {\n\t\t\tthis._label = ServiceFactory.create().languageService().translation(labelKey);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tgetID() {\n\t\treturn this._id;\n\t}\n\n\tgetName() {\n\t\treturn this._name;\n\t}\n\n\tisChecked() {\n\t\treturn this._checked;\n\t}\n\n\tgetLabel() {\n\t\treturn this._label;\n\t}\n}\n\nexport default RadioButtonModel;","export const RADIO_BUTTON_SELECTORS = {\n\tNORMAL: '#rb_normal',\n\tSELECTED: '#rb_selected',\n\tLABEL: '#rb_label'\n};","import BaseComponent from '../../base/base_component';\nimport Model from './radio_button_model';\nimport DOM from \"../../utils/dom\";\nimport Device from \"../../utils/device/device\";\nimport {RADIO_BUTTON_SELECTORS} from './radio_button_consts';\n\nlet radioButtonView = require('./view/radio_button.html');\n\nclass RadioButtonComponent extends BaseComponent {\n\t/**\n\t * @static\n\t * @type {string}\n\t */\n\tstatic CLASS = 'RadioButtonComponent';\n\n\n\t/**\n\t * @static\n\t * @type {string}\n\t */\n\tstatic DIRECTIVE = 'cgp-directive-radioButton';\n\n\n\t/**\n\t * @property\n\t * @type {object|null}\n\t * @private\n\t */\n\t_model = null;\n\n\n\t_elementMap = {};\n\n\t/**\n\t *\n\t */\n\tinit(params) {\n\t\tsuper.init();\n\t\tthis._model = Model.create(params);\n\t}\n\n\n\t/**\n\t *\n\t * @returns {ItalyGameLimitMessageComponent}\n\t */\n\tstart() {\n\t\tlet bakedHTML = this.bake(radioButtonView, {});\n\n\t\tthis\n\t\t\t.setHTML(bakedHTML)\n\t\t\t._applyDeviceCSS()\n\t\t\t._mapElements()\n\t\t\t._configureRB();\n\n\t\treturn this;\n\t}\n\n\t_applyDeviceCSS() {\n\t\tif (Device.browser.isFirefox) {\n\t\t\tlet firefoxVersion = Device.browser.version;\n\t\t\tif(!isNaN(firefoxVersion) && (firefoxVersion<60)) {\n\t\t\t\tDOM.addClass(this.getEl(), 'cgp-radio-ie-moz-fix');\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\n\t_mapElements() {\n\t\tlet view = this.getEl();\n\n\t\tthis._elementMap = {\n\t\t\trbNormal: view.querySelector(RADIO_BUTTON_SELECTORS.NORMAL),\n\t\t\trbSelected: view.querySelector(RADIO_BUTTON_SELECTORS.SELECTED),\n\t\t\trbLabel: view.querySelector(RADIO_BUTTON_SELECTORS.LABEL),\n\t\t\trbInput: view.getElementsByTagName('input')[0]\n\t\t};\n\n\t\treturn this;\n\t}\n\n\n\t_configureRB() {\n\t\tif (this._model.getID() !== '') {\n\t\t\tDOM.addAttribute(this._elementMap.rbInput, 'id', this._model.getID());\n\t\t}\n\n\t\tif (this._model.getName() !== '') {\n\t\t\tDOM.addAttribute(this._elementMap.rbInput, 'name', this._model.getName());\n\t\t}\n\n\t\tif (this._model.isChecked()) {\n\t\t\tDOM.addAttribute(this._elementMap.rbInput, 'checked');\n\t\t}\n\n\t\tDOM.html(this._model.getLabel(), this._elementMap.rbLabel);\n\n\t\treturn this;\n\t}\n}\n\nexport default RadioButtonComponent;","export const LOYALTY_STYLE_PROPERTIES = [\n 'BackgroundColor',\n 'TextColor',\n 'Font',\n 'ProgressBarColor',\n 'ArrowColor',\n 'ShowUnderline',\n 'ShowBoxShadow',\n 'FontSize',\n 'ArrowSize',\n 'ProgressBarBackgroundColor',\n 'ProgressBarHeight',\n 'ProgressBarBorderRadius',\n 'LOLContentPaddingLeft',\n 'LOLArrowTop',\n 'LOLArrowContainerRight'\n];","import BaseComponent from '../../base/base_component';\nimport DOM from '../../utils/dom'\nimport {LOYALTY_STYLE_PROPERTIES} from './loyalty_consts';\nimport _ from '../../utils/underscore';\nimport {SYSTEM_EVENTS} from \"../../events/events\";\n\n\nclass LoyaltyComponentController extends BaseComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'LoyaltyComponentController';\n\n\n /**\n * @static\n * @type {string}\n */\n static DIRECTIVE = 'cgp-directive-loyalty';\n\n\n /**\n * @property\n * @type {object|null}\n * @private\n */\n _model = null;\n\n /**\n * @type {{}}\n * @private\n */\n _params = {};\n\n _firebaseToken = null; // token retrieved by firebase strategy when firebase object is created. loyalty should subscribe to firebase with the same token\n\n /**\n *\n * @param params\n */\n init(params) {\n super.init(params);\n this._params = params;\n this.onSystemEvent(SYSTEM_EVENTS.FIREBASE_GOT_NEW_TOKEN, this._updateLoyaltyToken);\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, this._onOAuthChange);\n this._setParamsToLowerCase(this._params);\n }\n\n /**\n *\n * @returns {LoyaltyComponentController}\n */\n start() {\n if( this.serviceFactory.oAuth2Service().isAuthorized()){\n this._appendScript();\n }\n }\n\n /**\n * remove firebase token while user logout so we will not use it next time he logged in.\n * @private\n */\n _onOAuthChange() {\n if(!this.serviceFactory.oAuth2Service().isAuthorized()){\n this.shutDown();\n }\n }\n\n /**\n * some browsers (like chrome) auto lower case attributes data. This is a fix for other browsers like IE\n * @param params\n * @private\n */\n _setParamsToLowerCase(params){\n for(let param in params){\n let originalParamValue = params[param];\n let newParam = param.toLowerCase();\n delete params[param];\n params[newParam] = originalParamValue;\n }\n }\n\n /**\n * append script to DOM\n * @private\n */\n _appendScript(){\n let loyaltyScriptLink = this.serviceFactory.loyaltyService().getScriptLink();\n let loyaltyScriptElement = DOM.$$('#loyalty-script');\n if(_.isValidUrl(loyaltyScriptLink) && loyaltyScriptElement.length === 0){\n let script = DOM.createElement('script');\n DOM.addAttribute(script, 'src', loyaltyScriptLink);\n DOM.addAttribute(script, 'id', 'loyalty-script');\n DOM.append(document.body, script);\n script.onload = this._onScriptLoad.bind(this);\n }\n else if(loyaltyScriptElement.length > 0){\n this._onScriptLoad();\n }\n }\n\n /**\n * handle on script loaded\n * @private\n */\n _onScriptLoad(){\n if(this._firebaseToken) {\n this.logger.info('run loyalty script onload.');\n\n let userService = this.serviceFactory.userService();\n\n userService.renewLoginToken().then(userToken => {\n this.getEl().innerHTML = '
';\n\n // if loyalty indication was already initialized and subscribed to triple8messaging\n const currentFirebaseToken = this.serviceFactory.userService().getFirebaseLoginToken();\n if (window.myloyaltyindication && this._firebaseToken && this._firebaseToken === currentFirebaseToken && _.isFunction(window.myloyaltyindication.Terminate)){\n window.myloyaltyindication.Terminate();\n }\n\n let skinService = this.serviceFactory.skinService();\n let languageService = this.serviceFactory.languageService();\n this._firebaseToken = currentFirebaseToken;\n\n let loyaltyInitInfo = {\n UserInfo: userToken.token,\n FirebaseToken: this._firebaseToken,\n CID: this.serviceFactory.userService().getCID(),\n LanguageCode: languageService.getISO3(),\n ClientContext: {\n 'BrandId': skinService.getBrandID(),\n 'ClientVersion': skinService.getVersion(),\n 'ProductPackage': skinService.getProductPackageID(),\n 'SubBrandId': skinService.getSubBrandID(),\n 'ClientPlatform': this.serviceFactory.loyaltyService().getClientPlatform()\n },\n Logger: window.console,\n Style: {}\n };\n let styles = this._setStyles();\n Object.assign(loyaltyInitInfo.Style, styles);\n // rlpfweb is inserted by the web department, is related to webLoginComponent\n window.myloyaltyindication = new window.rlpfweb.LoyaltyIndication(loyaltyInitInfo);\n this._onClick();\n });\n } else {\n this.logger.info('not run loyalty script onload. Wait for firebase token, will try again in 1 second');\n\n this.setTimeout(()=> {\n this._onScriptLoad();\n }, 1000)\n }\n }\n\n _updateLoyaltyToken(){\n const currentFirebaseToken = this.serviceFactory.userService().getFirebaseLoginToken();\n if (this._firebaseToken !== currentFirebaseToken){\n this._firebaseToken = currentFirebaseToken;\n if(window.myloyaltyindication) {\n window.myloyaltyindication.UpdateToken(\"\", currentFirebaseToken);\n }\n }\n }\n\n /**\n * set loyalty progress bar styles\n * @private\n */\n _setStyles(){\n let styles = {};\n for(let styleProperty of LOYALTY_STYLE_PROPERTIES){\n let stylePropertyLowerCase = styleProperty.toLowerCase();\n if(this._params[stylePropertyLowerCase]){\n styles[styleProperty] = this._getProperValue(this._params[stylePropertyLowerCase]);\n }\n }\n return styles;\n }\n\n _getProperValue(value){\n switch(value){\n case 'false':\n return false;\n case 'true':\n return true;\n default:\n return value;\n }\n }\n\n /**\n * handle loyalty progress bar click\n * @private\n */\n _onClick(){\n window.myloyaltyindication.addEventListener('onloyaltydetailsclick', ()=> {\n window.CGP.sendAnalytics({\n category: 'loyalty_progress_bar',\n action: \"click\"\n });\n window.CGP.openExternalLink({\n options:{\n tabId: 7\n },\n source: 'my_account'\n });\n });\n }\n\n shutDown() {\n super.shutDown();\n if(window.myloyaltyindication && _.isFunction(window.myloyaltyindication.Terminate)){\n window.myloyaltyindication.Terminate();\n }\n }\n}\nexport default LoyaltyComponentController;","import BaseComponent from './base_component';\n\nexport class ComponentRenderer {\n constructor(private _componentPrototype: any) {\n\n }\n\n\n private _hostElement: Element = null;\n private _componentInstance: BaseComponent = null;\n\n render(hostElement: Element, props?: any): void {\n\n\n this._disposeComponent();\n\n this._componentInstance = this._componentPrototype.create(props);\n hostElement.appendChild(this._componentInstance.getEl());\n this._componentInstance.start();\n this._componentInstance.onAppendedToDOM();\n this._hostElement = hostElement;\n }\n\n private _disposeComponent() {\n if(this._componentInstance) {\n this._componentInstance.shutDown();\n this._hostElement.removeChild(this._componentInstance.getEl());\n this._componentInstance = null;\n }\n }\n\n dispose() {\n this._disposeComponent();\n this._hostElement = null;\n }\n}","import Event from '../utils/event';\nimport {SYSTEM_EVENTS} from '../events/events';\nimport BaseObject from '../base/base_object';\nimport DOM from '../utils/dom';\nimport _ from '../utils/underscore';\nimport Welcome from '../components/welcome/welcome_component_controller';\nimport ExternalLinks from '../components/external_links/external_links_component_controller';\nimport Clock from '../components/clock/clock_controller_component';\nimport LastLogin from '../components/last_login_component_wrapper/last_login_component_wrapper';\nimport GameJackpot from '../components/live_feeds/game_jackpot/game_jackpot_component_controller';\nimport FreePlay from '../components/free_play/free_play_component_controller';\nimport FreePlayIndicator from '../components/free_play/indicator/fp_indicator_component_controller';\nimport Rich from '../components/rich/rich_component_controller';\nimport Stripe from '../components/regulation_components/base/game_stripe/stripe_component_controller';\nimport RadioButton from '../components/radio_button/radio_button_component';\nimport Loyalty from '../components/loyalty/loyalty_controller_component';\nimport LoginButtons from '../components/login_buttons/login_buttons_component_controller';\nimport SessionTimer from '../components/session_timer/session_timer_controller';\nimport ResponsibleGamingIconsComponentWrapper from '../components/responsible_gaming_icons_wrapper/responsible_gaming_icons_component_wrapper';\nimport AgeResponsibleGameComponent from \"../components/regulation_components/base/age/age_responsible_game_component\";\nimport GameHostComponent from '../components/game_host/game_host_component_controller';\nimport AffiliatesGameHostComponent from \"../components/affiliates_game_host/affiliates_game_host_component_controller\";\nimport {ComponentRenderer} from '../base/component_renderer';\n\nclass Directive extends BaseObject {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'Directive';\n\n\n /**\n *\n * @type {string}\n * @private\n */\n _prefix = 'cgp-directive-';\n\n\n /**\n *\n * @type {string[]}\n * @private\n */\n _cgpAllowedQuery = [\n {selector : 'id', getValueSelector: 'id'},\n {selector : 'class', getValueSelector: 'className'}\n ];\n\n\n /**\n * @property\n * @type {Array}\n */\n cgpLoadedDirectives = [];\n\n\n /**\n * CGP components using reference.\n * @returns {{welcome: WelcomeComponentController, game: GameWindowComponentController}}\n * @private\n */\n static table = {\n welcome : {ref: Welcome, isReRenderable: true},\n external_link : {ref: ExternalLinks, isReRenderable: true},\n clock : {ref: Clock, isReRenderable: true},\n last_login : {ref: LastLogin, isReRenderable: true},\n game_jackpot : {ref: GameJackpot, isReRenderable: true},\n free_play : {ref: FreePlay, isReRenderable: true},\n fp_indicator : {ref: FreePlayIndicator, isReRenderable: true},\n rich : {ref: Rich, isReRenderable: true},\n stripe_component : {ref: Stripe, isReRenderable: true},\n\t\tradiobutton : {ref: RadioButton, isReRenderable: true},\n\t\tloyalty : {ref: Loyalty, isReRenderable: true},\n login_buttons : {ref: LoginButtons, isReRenderable: true},\n session_timer : {ref: SessionTimer, isReRenderable: true},\n responsible_gaming_icons: {ref: ResponsibleGamingIconsComponentWrapper, isReRenderable: true},\n age_responsible_game : {ref: AgeResponsibleGameComponent, isReRenderable: true},\n game_host : {ref: GameHostComponent, isReRenderable:true},\n affiliates_game_host : {ref: AffiliatesGameHostComponent, isReRenderable:true},\n };\n\n\n static createComponentRenderer(componentId) {\n let componentDescriptor = Directive.table[componentId];\n if (!componentDescriptor) {\n throw new Error(`There is no sdk component with id ${componentId}`);\n }\n return new ComponentRenderer(componentDescriptor.ref);\n }\n\n CLEAN_DIRECTIVES_INTERVAL = 60000;\n\n\n /**\n *\n * @param params\n */\n init(params) {\n this\n ._loadDirectives(params)\n ._subscribe()\n .render()\n ._setTimeoutRemoveDirectives()\n ._initDOMObserver(document.body, params);\n }\n\n\n /**\n * Generate the cgp directives.\n *\n * @param componentOptions\n * @returns {*}\n */\n static generate(componentOptions) {\n let directiveRaw = Directive.table[componentOptions.directiveName];\n\n if (_.isUndefined(directiveRaw)) {\n console.error('Directive name => ' + componentOptions.directiveName + ' not allowed in the directives table.');\n return null;\n }\n\n //this._loadDirective\n let directiveInstance = directiveRaw.ref.create(componentOptions.props);\n\n if (_.isUndefined(directiveInstance)) {\n console.error('Invalid directive could not create instance error.');\n return null;\n }\n\n // If the programmer choose to auto start the component and set a start true flag.\n if (componentOptions.start) {\n directiveInstance.start();\n }\n\n return directiveInstance;\n }\n\n\n /**\n * Render the loaded directives into dom.\n *\n * @returns {Directive}\n * @private\n */\n render(forceRender = true) {\n this.cgpLoadedDirectives.forEach((directive) => {\n if (!forceRender) {\n this.logger.debug('Should consider and not re render the not allowed re render directive because using the force render flag to => ', forceRender)\n\n if (!directive.isReRenderable) {\n this.logger.debug('Directive is not allowed to be re render => ', directive.options.name);\n return;\n }\n }\n this._drawDirective(directive);\n });\n return this;\n }\n\n\n /**\n *\n * @param directive\n * @private\n */\n _drawDirective(directive) {\n // Start the directive to build himself.\n directive.directiveInstance.start();\n\n if (!directive.options.isOnDOM) {\n // // Clear previous directive DOM html.\n directive.options.el.innerHTML = '';\n // Append new bake directive element on the dom directive.\n DOM.append(directive.options.el, directive.directiveInstance.getEl());\n // Set that the directive is appended on dom.\n directive.options.isOnDOM = true;\n }\n\n Event.fire(SYSTEM_EVENTS.ELEMENT_CREATED, directive.options.el);\n directive.directiveInstance.onAppendedToDOM();\n //this.logger.debug('Draw component into the dom --> ', directive.options.name);\n }\n\n\n /**\n * Load single directive\n * @param cgpElement\n * @param query\n * @param params\n * @private\n */\n _loadDirective(cgpElement, query, params) {\n let cgpDirectiveOptions = this._makeDirectiveOptions(cgpElement, query);\n if (_.isNull(cgpDirectiveOptions)) {\n return;\n }\n\n let directiveRef = cgpDirectiveOptions.directive.ref;\n let directive = directiveRef.create(Object.assign({},\n cgpDirectiveOptions.configuration, // Directive dom configuration.\n params, // Params from loader.\n {isDirective: true} // Custom directive inner implementation.\n ));\n\n let loadedDirective = {\n directiveInstance: directive,\n options: cgpDirectiveOptions,\n isReRenderable: cgpDirectiveOptions.directive.isReRenderable\n };\n this.cgpLoadedDirectives.push(loadedDirective);\n\n return loadedDirective;\n }\n\n\n /**\n * Load all cgp directive and set them into directive loaded array.\n *\n * @returns {object}\n * @public\n */\n _loadDirectives(params) {\n this._cgpAllowedQuery.forEach((query) => {\n let cgpElements = DOM.$$('[' + query.selector + '^=' + this._prefix + ']');\n cgpElements.forEach((cgpElement) => {\n this._loadDirective(cgpElement, query, params);\n });\n });\n\n return this;\n }\n\n\n /**\n * Subscribe the directive to global application events.\n *\n * @return {Directive} this, for chaining.\n */\n _subscribe() {\n Event.on([\n SYSTEM_EVENTS.OAUTH_STATE_CHANGE\n ], () => {\n this._cleanDirectives();\n this.render(false);\n });\n\n return this;\n }\n\n\n /**\n * Handle add new element into the DOM\n * @param newNodes\n * @private\n */\n _onElementsAdded(elements, params) {\n if (false === elements || elements.length === 0) {\n return;\n }\n\n for(let i = 0; i < elements.length; i++) {\n let el = elements[i];\n if (el instanceof HTMLElement) {\n if (this._tryLoadDirective(el, params) === false) {\n this._cgpAllowedQuery.forEach((query) => {\n let cgpElements = el.querySelectorAll('[' + query.selector + '^=' + this._prefix + ']');\n cgpElements.forEach((cgpElement) => {\n this._tryLoadDirective(cgpElement, params);\n });\n });\n }\n }\n }\n }\n\n\n /**\n * Try load dynamic directive\n * @param el\n * @param params\n * @returns {boolean}\n * @private\n */\n _tryLoadDirective(el, params) {\n let query = this._getCGPDirectiveQuery(el);\n if (query) {\n //test if this directive is already loaded\n let componentSelector = this._getDynamicDirectiveSelector(el);\n if (componentSelector) {\n this.logger.warn('Directive is ' + componentSelector + ' has already loaded');\n return false;\n }\n\n let loadedDirective = this._loadDirective(el, query, params);\n this._drawDirective(loadedDirective);\n return true\n }\n return false;\n }\n\n\n /**\n * Get component selector into the directive element\n * @param el\n * @returns {null}\n * @private\n */\n _getDynamicDirectiveSelector(el) {\n if (el && el.children.length > 0) {\n let selector = el.children[0].className.match(/cgp-(\\w*-?)*component/g);\n return selector;\n }\n\n return null;\n }\n\n\n /**\n * Create CGP query selector to element\n * @param el\n * @returns {*}\n * @private\n */\n _getCGPDirectiveQuery(el) {\n let query;\n if (el instanceof HTMLElement) {\n if (el.getAttribute('id') && el.getAttribute('id').indexOf(this._prefix) > -1) {\n query = {selector: 'id', getValueSelector: 'id'};\n } else if (el.getAttribute('class') && el.getAttribute('class').indexOf(this._prefix) > -1) {\n query = {selector: 'class', getValueSelector: 'className'}\n }\n }\n\n return query;\n }\n\n\n /**\n * Initialize listener for DOM changes\n * @param observerRoot\n * @returns {Directive}\n * @private\n */\n _initDOMObserver(observerRoot, params) {\n let MutationObserver = window.MutationObserver || window.WebKitMutationObserver,\n eventListenerSupported = window.addEventListener;\n\n if (MutationObserver) {\n // define a new observer\n this._obs = new MutationObserver((mutations) => {\n mutations.forEach((record) => {\n if (record.addedNodes.length > 0) {\n //this.logger.debug(record);\n this._onElementsAdded(record.addedNodes, params);\n }\n });\n\n });\n // have the observer observe foo for changes in children\n this._obs.observe(observerRoot, {childList: true, subtree: true});\n } else\n if (eventListenerSupported) {\n DOM.addEventListener(observerRoot, 'DOMNodeInserted', this._onDOMNodeInserted, false);\n }\n\n return this;\n }\n\n\n /**\n * On DOM node inserted callback.\n */\n _onDOMNodeInserted(mutationEvent, params) {\n let elements = [];\n elements.push(mutationEvent.target);\n this._onElementsAdded(elements, params);\n }\n\n\n /**\n *\n * @returns {Directive}\n * @private\n */\n _setTimeoutRemoveDirectives() {\n this.cleanDirectivesTimeout = DOM.setTimeout(() => {\n this.logger.debug('Clean directives loop started');\n this._cleanDirectives();\n this._setTimeoutRemoveDirectives();\n }, this.CLEAN_DIRECTIVES_INTERVAL);\n\n return this;\n }\n\n /**\n * clean directives which were removed from dome\n * @returns {Directive}\n * @private\n */\n _cleanDirectives() {\n for (let i = this.cgpLoadedDirectives.length - 1; i >= 0; i--) {\n let directive = this.cgpLoadedDirectives[i];\n let el = directive.directiveInstance.getEl();\n if (_.isUndefined(el.offsetParent) || _.isNull(el.offsetParent)) {\n this.cgpLoadedDirectives.splice(i, 1);\n directive.directiveInstance.shutDown();\n this.logger.debug('Directive ' + directive.options.name + ' is not used and has been removed');\n }\n }\n\n return this;\n }\n\n /**\n * shutDown all existing directives instances\n * @returns {Directive}\n * @private\n */\n _shutDownDirectives() {\n for (let i = this.cgpLoadedDirectives.length - 1; i >= 0; i--) {\n let directive = this.cgpLoadedDirectives[i];\n let el = directive.directiveInstance.getEl();\n if (el.parentElement){\n el.parentElement.removeChild(el);\n }\n this.cgpLoadedDirectives.splice(i, 1);\n directive.directiveInstance.shutDown();\n }\n }\n\n\n /**\n * Prepare directive attribute for instance if is allowed in the directive rules.\n *\n * @param cgpElement\n * @param query\n * @private\n * @returns {{el: *, selector: *, configuration: {}, name: string}|null}\n */\n _makeDirectiveOptions(cgpElement, query) {\n let directiveName = cgpElement[query.getValueSelector].replace(this._prefix, '')\n .toLowerCase() // lower case\n .split(' ')[0]; // use only the first part, incase the directive has more properties in the classname.\n\n if (!Directive.table && !Directive.table[directiveName]) {\n this.logger.error('Sorry this dom element is not allowed in cgp directives => ', cgpElement);\n return null;\n }\n\n if (!Directive.table[directiveName]) {\n this.logger.error('Not found a match reference in cgp directive for --> ', directiveName);\n return null;\n }\n\n return {\n el: cgpElement,\n selector: query.selector,\n configuration: DOM.parseDataAttributes(cgpElement),\n name: directiveName,\n directive: Directive.table[directiveName],\n isOnDOM: false\n };\n }\n\n\n /**\n * Clean event subscription\n */\n shutDown() {\n this._shutDownDirectives();\n document.body.removeEventListener('DOMNodeInserted', this._onDOMNodeInserted);\n if (!_.isUndefined(this._obs)) {\n this._obs.disconnect();\n }\n\n if (!_.isUndefined(this.cleanDirectivesTimeout)) {\n DOM.clearTimeout(this.cleanDirectivesTimeout);\n }\n }\n}\n\nexport default Directive;\n","import BaseObject from '../../base/base_object';\nimport Loader from '../../utils/module_loader';\nimport _ from '../../utils/underscore';\n\nclass OptionsComponentController extends BaseObject {\n\n static CLASS = 'OptionsComponentController';\n\n\n /**\n * Root component selector.\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-options-component';\n\n\n /**\n * @function\n * @public\n */\n load(optionComponentNameToLoad) {\n let loader = new Loader();\n let optionComponents = loader.optionComponents();\n\n let findOptionComponentByName = optionComponents.find(optionComponent => this._isOptionExist(optionComponent.CLASS, optionComponentNameToLoad + 'Controller'));\n\n if (_.isUndefined(findOptionComponentByName)) {\n this.logger.error('Could not find the option component controller => ', optionComponentNameToLoad);\n return null;\n }\n\n return findOptionComponentByName.create();\n }\n\n\n /**\n *\n * @param optionComponentName\n * @param optionComponentNameToLoad\n * @returns {boolean}\n * @private\n */\n _isOptionExist(optionComponentName, optionComponentNameToLoad) {\n return optionComponentName === optionComponentNameToLoad;\n }\n\n getReminderInterval() {\n return this.load('ReminderSettings').getOptions().reminder;\n }\n}\n\n\nexport default OptionsComponentController;","export const CELL_CONTAINER_SELECTOR = '.temp-account-cell-container';\n\nexport const DAYS_LEFT_HEADER_SELECTOR = '.temp-account-days-left';\n\nexport const CELL_CLASS_LIST = ['temp-account-cell', 'cgp-theme-property-border-color-base03', 'cgp-theme-property-background-color-base03'];\n\nexport const CELL_CONTENT_CLASS = ['temp-account-cell-content', 'cy-temp-account-days-number','cgp-theme-property-color-main'];\n\nexport const CELL_CONTENT_BAR_CLASS = ['temp-account-content-bar', 'cgp-theme-property-border-bottom-color-darkmain'];","import DOM from '../../utils/dom';\nimport {CELL_CONTAINER_SELECTOR, CELL_CLASS_LIST, CELL_CONTENT_CLASS, CELL_CONTENT_BAR_CLASS, DAYS_LEFT_HEADER_SELECTOR} from \"./temp_account_const\";\nimport {TEMP_ACCOUNT_STATUS} from \"../../services/regulation/regulation_const\";\nimport BaseComponent from '../../base/base_component';\nimport { BaseComponentParams } from '../../base/base_component_interface';\n\nconst componentDaysView = require('./view/temp_account_days.html');\nconst componentVerifyView = require('./view/temp_account_verify.html');\n\n\nexport interface TempAccountComponentParams extends BaseComponentParams {\n\n\tstatus: string;\n\n\tdaysLeft: number;\n\n\tmessageText: string;\n\n\tfooterMessageText?: string;\n\n\thideDaysLeft: boolean;\n}\n\nexport default class TempAccountComponent extends BaseComponent {\n\t/**\n\t * @static\n\t */\n\tstatic CLASS = 'TempAccountComponent';\n\n\n\t/**\n\t *\n\t * @type {TempAccountModel}\n\t * @private\n\t */\n\tprotected _params : TempAccountComponentParams = null;\n\n\n\t/**\n\t * @param params\n\t */\n\tinit(params: TempAccountComponentParams) {\n\t\tsuper.init(params);\n\t\tthis._params = params;\n\t}\n\n\tstart(): TempAccountComponent {\n\t\tconst view = this._getView();\n\t\tif (!view) {\n\t\t\tthis.logger.error('Status parameter is not defined, unable to create specified view');\n\t\t\treturn this;\n\t\t}\n\t\tconst bakedHTML = this.bake(view, {\n\t\t\tmessage: this._params.messageText,\n\t\t\tfooterMessage: this._params.footerMessageText? this._params.footerMessageText : ''\n\t\t});\n\t\tthis.setHTML(bakedHTML);\n\t\t\n\t\tif (this._params.hideDaysLeft) {\n\t\t\tconst daysLeftEl = this.querySelector(DAYS_LEFT_HEADER_SELECTOR);\n\t\t\tDOM.removeElement(daysLeftEl.parentElement, daysLeftEl);\n\t\t}\n\n\t\tif (this._params.status === TEMP_ACCOUNT_STATUS.DOCUMENTS_NOT_RECEIVED\n\t\t\t&& !this._params.hideDaysLeft) {\n \tthis._addDaysLeft();\n\t\t}\n\n\t\treturn this;\n\t}\n\n\n\tprivate _getView() {\n\t\tconst status = this._params.status;\n\t\tlet view: string = '';\n\t\tswitch (status) {\n\t\t\tcase TEMP_ACCOUNT_STATUS.PENDING_VERIFICATION:\n view = componentVerifyView;\n\t\t\t\tbreak;\n\t\t\tcase TEMP_ACCOUNT_STATUS.DOCUMENTS_NOT_RECEIVED:\n\t\t\t\tview = componentDaysView;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\treturn view;\n\t}\n\n\n\n\tprivate _addDaysLeft() {\n\t\tconst cellContainer = this.getEl().querySelector(CELL_CONTAINER_SELECTOR);\n\t\tconst cellContents = this._params.daysLeft.toString().split('');\n\t\tconst cellNo = cellContents.length;\n\n\t\tfor(let i = 0; i < cellNo; i++) {\n\t\t\tDOM.append(cellContainer, this._getCell(cellContents[i]));\n\t\t}\n\t}\n\n\n\tprivate _getCell(content) {\n\t\tconst cell = DOM.createElement('div'),\n\t\t\tcellContent = DOM.createElement('div', content),\n\t\t\tcontentBar = DOM.createElement('div');\n\n\t\tDOM.append(cell, cellContent)\n\t\t .append(cell, contentBar)\n\t\t .addClass(cell, CELL_CLASS_LIST)\n\t\t .addClass(cellContent, CELL_CONTENT_CLASS)\n\t\t .addClass(contentBar, CELL_CONTENT_BAR_CLASS);\n\n\t\treturn cell;\n\t}\n}","import BaseObject from \"../../../base/base_object\";\nimport {PRIORITY_LEVEL} from \"../../overlay_manager/overlay_manager_levels\";\nimport {CASHIER_ACTIONS} from \"../../../components/external_links/external_links_consts\";\nimport Device from \"../../../utils/device/device\";\nimport _ from \"../../../utils/underscore\";\nimport TempAccountComponent from \"../../../components/temp_account/temp_account_component\";\nimport {SYSTEM_EVENTS} from \"../../../events/events\";\nimport Event from '../../../utils/event';\nimport {TEMP_ACCOUNT_STATUS} from '../regulation_const';\nimport ServiceFactory from \"../../service_factory\";\nimport DOM from \"../../../utils/dom\"\n\nexport default class TempAccountMessageRegulationHelper extends BaseObject {\n\n _serviceFactory: ServiceFactory = null;\n\n init(params) {\n super.init(params);\n params = params || {};\n if(!params.serviceFactory) {\n this.throwArgumentExpected('21', 'init', 'serviceFactory');\n }\n\n this._serviceFactory = params.serviceFactory;\n }\n\n _getDefaultAccountStatus() {\n const daysLeft = this._serviceFactory.userService().getAccountData().DaysToUploadDocument;\n if (_.isNullOrUndefined(daysLeft) || 0 > daysLeft)\n return {\n status: TEMP_ACCOUNT_STATUS.APPROVED\n };\n else {\n return {\n status: TEMP_ACCOUNT_STATUS.DOCUMENTS_NOT_RECEIVED,\n daysLeft: daysLeft\n };\n }\n }\n\n _getMessageOptionsByStatus(status: string, el: HTMLElement, footerEl: HTMLElement, msgParams) {\n const messageOptions = {\n\t\t\ttext: el,\n\t\t\tfooterText: footerEl,\n priority: PRIORITY_LEVEL.TEMP_ACCOUNT,\n closeButton: true,\n customCSSClassList: ['mdp-mobile-full-size'],\n\t\t\ttitle: this._serviceFactory.languageService().translation(msgParams.titleKey),\n\t\t\thideDaysLeft: msgParams.hideDaysLeft ? msgParams.hideDaysLeft : false,\n }\n\n // PENDING_VERIFICATION\n const pendingVerificationOptions = {\n hasDefaultButton: true,\n };\n\n // DOCUMENTS_NOT_RECEIVED\n const documentVerifyOptions = {\n\t\t\thasDefaultButton: false,\n buttons: [{\n name: this._serviceFactory.languageService().translation(msgParams.btnNameKey),\n callback: () => {\n this._serviceFactory.openLinkService().openLink({\n source: this._serviceFactory.regulationService().getTempAccountGnwpSource(),\n options: {sessionType: Device.isMobile() ? CASHIER_ACTIONS.MOBILE_VERIFY_ID : CASHIER_ACTIONS.VERIFY_ID}\n }\n );\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'temp_account_message',\n action: 'upload_docs'\n });\n },\n isClosable: true\n }],\n btnCloseCallback: () => {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'temp_account_message',\n action: 'close'\n });\n }\n };\n\n if (!_.isNullOrUndefined(msgParams.closeFunc)) {\n documentVerifyOptions.btnCloseCallback = msgParams.closeFunc;\n }\n\n let statusOptions = {};\n switch (status) {\n case TEMP_ACCOUNT_STATUS.PENDING_VERIFICATION:\n statusOptions = pendingVerificationOptions;\n break;\n case TEMP_ACCOUNT_STATUS.DOCUMENTS_NOT_RECEIVED:\n statusOptions = documentVerifyOptions;\n break;\n }\n\n return Object.assign({}, messageOptions, statusOptions);\n }\n\n\n showTempAccountMessage(params) {\n const languageService = this._serviceFactory.languageService();\n const oauthService = this._serviceFactory.oAuth2Service();\n\n if (!oauthService.isAuthorized()) {\n return;\n }\n\n let tempAccountParams;\n if (!_.isNullOrUndefined(params.paramsFunc)) {\n tempAccountParams = params.paramsFunc.call();\n } else {\n tempAccountParams = Object.assign({}, this._getDefaultAccountStatus(), params);\n }\n if (tempAccountParams && tempAccountParams.status === TEMP_ACCOUNT_STATUS.APPROVED) {\n return;\n }\n\n const component = TempAccountComponent.create({\n daysLeft: tempAccountParams.daysLeft,\n status: tempAccountParams.status,\n\t\t\t\tmessageText: languageService.translation(tempAccountParams.messageKey),\n\t\t\t\thideDaysLeft: tempAccountParams.hideDaysLeft ? tempAccountParams.hideDaysLeft : false\n }).start();\n\n let footerComponent = null;\n if (tempAccountParams.footerMessageKey) {\n footerComponent = DOM.createElement(\"div\", languageService.translation(tempAccountParams.footerMessageKey) );\n }\n\n this._serviceFactory.messageManagerService().openMessage(\n this._getMessageOptionsByStatus(tempAccountParams.status,\n component.getEl(),\n footerComponent,\n tempAccountParams\n )\n );\n\n this._serviceFactory\n .structuredLoggingService()\n .getLogger({\n eventName: 'TEMP_ACCOUNT_MESSAGE_SHOWN',\n })\n .info();\n }\n}\n","// _PP_ stands for ProductPackage\n\n/**\n CGP SDK components should handle only CTAs which are form the relevant Product Package ID as follows:\n\n 1. External Link component will handle CTAs from:\n\n \ta. My Account Product Package ID – 10\n\n \tb. Pending Application Product Package ID – 27\n\n \tc. Membership Product Package ID – 14\n\n \td. Change Password Product Package ID - 15\n\n \te. Redeem Comp Points Product Package ID - 75\n\n 2. RICH component will handle CTAs from:\n\n \ta. RICH Page Product Package ID – 102\n\n \tb. Races Widget Product Package ID – 101\n\n 3. Messages component will handle CTAs from OMG Product Package ID – 76\n\n Additional Comment:\n If there it's required that the Race Tab will handle CTAs from Race Schedule Page and from the Race Leader board, the Race Tab component should handle CTAs from originProductPackageID=10 (MayAccount) When originDeepLinkID = 14\\15.\n this also means that External Link component should not handle these CTAs in this case.\n */\n\nexport const PRODUCT_PACKAGE_MAP = {\n\tMY_ACCOUNT_PP_ID: 10,\n\tMEMBERSHIP_PP_ID: 14,\n\tCHANGE_PASSWORD_PP_ID: 15,\n\tPENDING_APPLICATION_PP_ID: 27,\n\tREDEEM_COMP_POINTS_PP_ID: 75,\n\tOMG_PP_ID: 76,\n\tRICH_PP_ID: 102\n};\n\n\nexport const DEEP_LINK_MAP = {\n MY_ACCOUNT_DL_RESPONSIBLE_GAMING: 1,\n\tMY_ACCOUNT_DL_CHANGE_PASSWORD: 2,\n MY_ACCOUNT_DL_BONUSES: 3,\n MY_ACCOUNT_DL_PERSONAL_DETAILS: 4,\n MY_ACCOUNT_DL_INVITE_FRIEND: 5,\n MY_ACCOUNT_DL_REPORTS: 6,\n MY_ACCOUNT_DL_LC_CHALLENGES: 7,\n MY_ACCOUNT_DL_LC_REDEMPTION: 8,\n MY_ACCOUNT_DL_TOURNAMENT: 10,\n MY_ACCOUNT_DL_FREE_PLAY: 11,\n MY_ACCOUNT_DL_FREE_BETS: 12,\n MY_ACCOUNT_DL_COMP_POINTS: 13,\n MY_ACCOUNT_DL_MY_CHALLENGES: 16,\n\n}","import BaseComponent from '../../../base/base_component';\nimport {SYSTEM_EVENTS} from '../../../events/events';\nimport {MESSAGE_TYPE} from '../../message/message_consts';\nimport Event from '../../../utils/event';\nimport {PRIORITY_LEVEL} from '../../../services/overlay_manager/overlay_manager_levels';\n\nclass BaseOptionsComponentController extends BaseComponent {\n\n static CLASS = 'BaseOptionsComponentController';\n\n /**\n * Render Component UI over Overlay\n *\n * @returns\n * @public\n */\n render() {\n if (this.start()) {\n //this._openInOverlay();\n this._openInMDP();\n\n }\n }\n\n\n _openInOverlay() {\n Event.fire(SYSTEM_EVENTS.OPEN_OVERLAY, {\n el: this.getEl(),\n priority: this.getOverlayPriority(),\n btnCloseCallback: () => {\n this.onCloseBtnClicked();\n },\n closeCallback: () => {\n this.onComponentClosed();\n },\n additionalClasses: ['cgp-options-component', 'cgp-mdp-dialog'],\n contentAdditionalClasses: ['cgp-theme-property-lb-corner-radius'],\n openCallback: () => {\n this._onComponentOpened();\n }\n });\n }\n\n\n /**\n * Open component over MDP message\n * @private\n */\n _openInMDP() {\n Event.fire(SYSTEM_EVENTS.MESSAGE_OPEN, {\n contentEl: this.getEl(),\n title: this._getOptionTitle(),\n closeButton: this._isCloseButtonEnabled(),\n hasDefaultButton: false,\n customCSSClassList: this._getCustomCSSClassList(),\n priority: this.getOverlayPriority(),\n buttons: this._getButtons(),\n openCallback: this.onComponentOpened.bind(this),\n closeCallback: this.onComponentClosed.bind(this),\n btnCloseCallback: this.onCloseBtnClicked.bind(this)\n });\n }\n\n\n /**\n * Get Custom CSS to create spicified selectors for option component\n * @returns {Array}\n */\n _getCustomCSSClassList() {\n return ['cgp-options-component', 'mdp-mobile-full-size'];\n }\n\n /**\n * close button display - the default is true\n */\n _isCloseButtonEnabled() {\n return true;\n }\n\n /**\n * Get option title. This title will be displayed in the title area of MDP\n */\n _getOptionTitle() {\n let titleLangKey = this._getTitleKey();\n if (titleLangKey) {\n return this.serviceFactory.languageService().translation(titleLangKey);\n }\n return '';\n }\n\n\n /**\n * Get buttons configuration to MDP\n * @returns {Array}\n * @private\n */\n _getButtons() {\n return [];\n }\n\n /**\n * @abstract\n * Get title language key\n * @private\n */\n _getTitleKey() {}\n\n /*\n * Remove Componwent UI from overlay\n * @depricated\n * @returns\n * @public\n */\n destroy() {\n Event.fire(SYSTEM_EVENTS.CLOSE_OVERLAY, {priority: this.getOverlayPriority()});\n }\n\n /**\n * Open error message dialog\n * @param text\n */\n openErrorMessage(text) {\n Event.fire(SYSTEM_EVENTS.MESSAGE_OPEN, {text: text, type: MESSAGE_TYPE.ERROR});\n }\n\n /**\n * Get options from model\n * @returns {object}\n */\n getOptions() {\n return this._model.getOptions();\n }\n\n\n /**\n * Get priority to option message\n * @returns {number}\n */\n getOverlayPriority() {\n return PRIORITY_LEVEL.POP_UP;\n }\n\n\n /**\n * Handle after component open action\n * @abstract\n * @protected\n */\n onComponentOpened() {}\n\n\n /**\n * Handle action on btn close clicked\n */\n onCloseBtnClicked() {}\n\n\n /**\n * Handle action after component was closed\n */\n onComponentClosed() {\n this.shutDown();\n }\n\n /**\n * Send analytcs message\n */\n reportAnalytics() {\n\n }\n\n}\n\nexport default BaseOptionsComponentController;\n\n","import BaseObject from '../../../base/base_object';\n\nexport default class GameStepInstanceDescriptor extends BaseObject {\n static CLASS = 'GameStepInstanceDescriptor';\n\n init(params) {\n this.stepPrototype = params.stepPrototype;\n this.stepParams = params.stepParams;\n }\n}","import _ from '../../../utils/underscore';\nimport GamePostMessageHandlerBase from './game_post_message_handler_base';\nimport GameCommonPostMessageActions from './game_common_post_message_actions';\n\n\nexport default class GameCommonPostMessageHandler extends GamePostMessageHandlerBase {\n static CLASS = 'GameCommonPostMessageHandler';\n init(params) {\n super.init(params);\n\n if(!params.serviceFactory) {\n this.throwArgumentExpected('12', 'init', 'serviceFactory', params);\n }\n\n if(_.isNullOrUndefined(params.isReal)) {\n this.throwArgumentExpected('16', 'init', 'isReal', params);\n }\n\n this._serviceFactory = params.serviceFactory;\n this._isReal = params.isReal;\n }\n\n executeAction(gameOptions, actionName, params) {\n\n if(!gameOptions) {\n this.throwArgumentExpected('26', 'executeAction', 'gameOptions');\n }\n\n if(!actionName) {\n this.logger.warn('action name parameter was not provided');\n return;\n }\n\n let actions = this._createPostMessageActions(gameOptions);\n\n let actionMethod = actions[actionName];\n\n if(_.isNullOrUndefined(actionMethod)) {\n this.logger.error(`${this.getClassName()} doesn't have a method named ${actionName}`);\n return;\n }\n\n if(_.isNullOrUndefined(params)) {\n actionMethod.call(actions);\n } else {\n actionMethod.call(actions, params);\n }\n }\n\n _createPostMessageActions(gameOptions) {\n return GameCommonPostMessageActions.create({\n\t\t\tserviceFactory: this._serviceFactory,\n\t\t\tisReal: this._isReal,\n\t\t\tgameOptions: gameOptions\n\t\t});\n }\n}","import Event from '../../../utils/event';\nimport _ from '../../../utils/underscore';\nimport {SYSTEM_EVENTS} from '../../../events/events';\nimport {PENDING_ACTIONS} from '../../pending_action/pending_action_consts';\nimport {GNWP_SOURCES} from '../../../components/external_links/external_links_consts';\nimport {CASHIER_ACTIONS} from '../../../components/external_links/external_links_consts';\nimport BaseObject from '../../../base/base_object';\nimport DateTimeUtils from '../../../utils/date_time_utils';\nimport {DEEP_LINK_MAP} from '../../../components/external_links/handlers/external_links_base_handler_consts';\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core/lib/apps/app-enums\";\nimport ServiceFactory from '../../service_factory';\n\nexport default class GameCommonPostMessageActions extends BaseObject {\n static CLASS = 'GameCommonPostMessageActions';\n _serviceFactory: ServiceFactory;\n _gameOptions: any;\n _isReal: boolean;\n\n init(params) {\n super.init(params);\n\n if(!params.serviceFactory) {\n this.throwArgumentExpected('24', 'init', 'serviceFactory', params);\n }\n\n if(!params.gameOptions) {\n this.throwArgumentExpected('28', 'init', 'gameOptions', params);\n }\n\n if(_.isNullOrUndefined(params.isReal)) {\n this.throwArgumentExpected('32', 'init', 'isReal', params);\n }\n\n this._serviceFactory = params.serviceFactory;\n this._gameOptions = params.gameOptions;\n this._isReal = params.isReal;\n }\n\n lobby() {\n this.closegame({\n showNextGameSuggestion: true\n });\n }\n\n myaccountresponsiblegaming() {\n this.closegame();\n this._serviceFactory.openLinkService().openLink({\n source: GNWP_SOURCES.MY_ACCOUNT,\n options: {tabId: DEEP_LINK_MAP.MY_ACCOUNT_DL_RESPONSIBLE_GAMING}\n });\n }\n\n keepalive() {\n Event.fire(SYSTEM_EVENTS.EXTEND_USER_TIME_TO_LIVE);\n }\n\n _openCashier() {\n this._serviceFactory.cashierProxyService().openCashier({\n sessionType: CASHIER_ACTIONS.FULL_CASHIER,\n channel: {\n source: CHANNEL_SOURCE.casinoClient,\n area: AreaType.InGame,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n }\n\n cashier() {\n const pendingAction: any = {\n name: PENDING_ACTIONS.GAME,\n persistent: true,\n options: {\n gameType: this._gameOptions.gameType,\n gameName: this._gameOptions.gameName,\n isReal: this._isReal,\n forceLogin: this._isReal\n }\n };\n\n // for 888 vouchers, when user is coming back from cashier page (external site)\n // in FreePlayConfirmationGameStep we miss the voucher because\n // free play firebase data comes AFTER running this step \n // so to solve this scenario we store in game data freePlayData information\n // (if is the case)\n if (this._gameOptions.freePlayData && !this._gameOptions.freePlayData.isThirdParty) {\n pendingAction.options.freePlayData = this._gameOptions.freePlayData;\n }\n\n this._serviceFactory.pendingActionService().addPendingAction(pendingAction);\n this._openCashier();\n }\n\n cashierAndCloseGame() {\n if (this._isReal && this._gameOptions.company.supportsRefreshBalance()) {\n // for this special case we only open cashier and let the game update balance after we deposit widget is closed \n // we don't need to close the game anymore\n this._openCashier();\n } else {\n this.closegame();\n this._openCashier();\n }\n }\n\n reportanalytics(analyticsData) {\n let defaultAnalyticsData = {\n category: this._isReal ? 'Client_GameFrame_Real' : 'Client_GameFrame_Anonymous',\n label: this._gameOptions.gameType + '_' + this._gameOptions.gameName.replace(/ /g, '')\n };\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, Object.assign(defaultAnalyticsData, analyticsData));\n }\n\n switchtoreal() {\n this.closegame();\n this._serviceFactory.gameService().openRealGame({...this._extractReloadGameOptions(), skipFreePlay:true});\n }\n\n _extractReloadGameOptions() {\n return {\n gameType: this._gameOptions.gameType,\n gameName: this._gameOptions.gameName,\n marketing: this._gameOptions.marketing,\n referrerId: this._gameOptions.referrerId\n };\n }\n\n sessionid(id) {\n if(this._isReal) {\n if(this._gameOptions.gameNavigationBar) {\n this._updateSessionIdInNavigationBar(id);\n }\n }\n }\n\n _updateSessionIdInNavigationBar(sessionId) {\n this._gameOptions.gameNavigationBar.setGameSessionId(sessionId);\n }\n\n changeregulationdata(regulationData) {\n if(this._gameOptions.gameRegulationStripe?.setRegulationData) {\n this._gameOptions.gameRegulationStripe.setRegulationData(regulationData);\n }\n\n\t\tif (this._gameOptions.gameSessionNotificationManager) {\n\t\t\tthis._gameOptions.gameSessionNotificationManager.updateRegulationData(regulationData);\n\t\t}\n\n if (this._gameOptions.gameSessionSummaryHandler) {\n this._gameOptions.gameSessionSummaryHandler.updateSummaryData(regulationData);\n }\n }\n\n responsiblegaming() {\n this._serviceFactory.openLinkService().openResponsibleGamblingLink(this._gameOptions.responsibleGamblingView);\n }\n\n history() {\n this.closegame();\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {category: 'Client_RealityCheck_Reminder', action: 'ActionDropDown', label: 'History'});\n this._serviceFactory.integrationService().redirectToHistory();\n }\n\n closegame(options = {}) {\n if (this._gameOptions.gameWindow) {\n this._gameOptions.gameWindow.closeGameWindow(options);\n } else {\n // We need it because standalone games(for example NYX in spain) don't have game window.\n Event.fire(SYSTEM_EVENTS.CLOSE_GAME, {\n gameType: this._gameOptions.gameType,\n isReal: this._isReal\n });\n }\n }\n\n reloadgame() {\n this.closegame();\n\n if (this._isReal) {\n this._serviceFactory.gameService().openRealGame(this._extractReloadGameOptions());\n } else {\n this._serviceFactory.gameService().openAnonymousGame(this._extractReloadGameOptions());\n }\n\n }\n\n onprogress(progress) {\n // we don't do anything yet on this action\n }\n\n gameready() {\n this._gameOptions.endLoadingTime = new Date();\n this._reportGameLoadingTime();\n\n if(this._gameOptions.fullScreenTapComponent){\n this._gameOptions.gameWindow.appendChildComponent(this._gameOptions.fullScreenTapComponent);\n }\n }\n\n _reportGameLoadingTime() {\n if(!this._gameOptions.startLoadingTime) {\n return;\n }\n\n let gameLoadingTime = DateTimeUtils.millisecondsToSeconds(this._gameOptions.endLoadingTime - this._gameOptions.startLoadingTime);\n\n let gameMode = this._isReal ? 'Real' : 'Anonymous';\n\n this.reportanalytics({\n category: '[Technical-event]',\n action: `Game_LoadingTime_In_Seconds_${gameMode}`,\n label: this._backGameData(this._gameOptions),\n value: gameLoadingTime\n });\n }\n\n _backGameData(gameOptions){\n const gameURLBuilderType = (gameOptions.gameUrlBuilder&&gameOptions.gameUrlBuilder.getClassName)?'_'+gameOptions.gameUrlBuilder.getClassName():'';\n let response = `${gameOptions.companyName}_${gameOptions.vendorName}_${gameOptions.gameType}_${gameOptions.gameName}${gameURLBuilderType}`;\n\n return response.replace(/ /g, '');\n }\n\n sound(soundOn) {\n if(soundOn) {\n this._sendAnalytics('SoundOn');\n } else {\n this._sendAnalytics('SoundOff');\n }\n }\n\n disablerealitycheck() {\n this._serviceFactory.userService().updateRealityCheckData(0);\n }\n\n _sendAnalytics(action) {\n return {\n category: this._isReal ? 'Client_GameFrame_Real' : 'Client_GameFrame_Anonymous',\n action: action,\n label: this._gameOptions.gameType + '_' + this._gameOptions.gameName.replace(/ /g, '')\n }\n }\n\n gameroundstart() {\n this.keepalive();\n }\n\n\tgameroundend() {\n this.keepalive();\n }\n\n finishround() { }\n\n gamelauncherready(params){\n this._sendGameLauncherElasticData('Game_Launcher_Ready', params.gameUrl);\n }\n\n gamelaunchergameerror(params){\n this._sendGameLauncherElasticData('Game_Launcher_Error', params.message, true);\n }\n\n _sendGameLauncherElasticData(action: string, label: string, isError?: boolean) {\n const eventData = {\n CGPEventCategory: '888_Game_Launcher',\n CGPEventAction: action,\n CGPEventLabel:label,\n };\n\n if(isError){\n this._serviceFactory.structuredLoggingService().getLogger(eventData).error();\n }else {\n this._serviceFactory.structuredLoggingService().getLogger(eventData).info();\n }\n }\n\n livegameswitched() {\n Event.fire(SYSTEM_EVENTS.LIVE_GAME_SWITCHED);\n }\n}\n","/**\n * GEO_LOCATION const symbols.\n * @constant\n * @type {Object}\n */\n\n\nexport const GEO_LOCATION = {\n NUN: 0,\n GEO_HYBRID_ANDROID: 'HYBRID_ANDROID',\n GEO_HYBRID_IOS: 'HYBRID_IOS',\n GEO_WEBAPP_ANDROID: 'WEBAPP_ANDROID',\n GEO_WEBAPP_IOS: 'WEBAPP_IOS',\n GEO_PC: 'PC',\n GEO_MAC: 'MAC',\n RES_OK: '1',\n RES_FAILED: '0',\n USER_ID: 'userId',\n REASON: 'reason',\n PHONE: 'phone',\n LICENSE: 'license',\n SESSION_KEY: 'sessionKey',\n REASON_LOGIN: 'Login',\n REASON_OPEN_REAL_GAME: 'OPEN_REAL_GAME',\n REASON_PERIODIC: 'Periodic',\n USER_ID_OK: 1,\n REASON_OK: 2,\n PHONE_OK: 4,\n LICENSE_OK: 8,\n SESSION_KEY_OK: 16,\n ALL_DATA_OK: 31,\n WIN: 'win',\n MAC: 'mac',\n GC_PLATFORM: '{{GC_PLATFORM}}',\n GC_VERSION: '{{GC_VERSION}}',\n GC_DOWNLOAD_PAGE: '{{GC_DOWNLOAD_PAGE}}',\n GC_KEY: '{{GC_KEY}}',\n GC_BROWSER: '{{GC_BROWSER}}',\n PLUGIN_NOT_UPDATED_ERROR: '615',\n ANTI_LOOP_DELAY: 10000,\n PLUGIN_INSTALLATION_MSG_TXT: 'geo_plugin_installation_msg_txt',\n PLUGIN_INSTALLATION_MSG_TITLE: 'geo_plugin_installation_msg_title',\n PLUGIN_INSTALLATION_MSG_INSTALL_BTN: 'Geo_Install',\n OOBEE_HINT_TITLE: 'Oobee_hint_title',\n OOBEE_HINT_TXT: 'Oobee_hint_txt',\n OOBEE_HINT_INSTALL: 'Oobee_hint_install',\n OOBEE_HINT_WAKEUP: 'Oobee_hint_wakeup',\n GA_GEO_START_GEO_PROCESS: 'Start Geo Process',\n GA_GEO_PLUGIN_ENABLE: 'GeoLocation plugin enable',\n GA_GEO_LOCATION_REQUEST_SENT: 'GeoLocation request for geo comply sent',\n GA_GEO_LOCATION_VALIDATION: 'GeoLocation send platform the token received from geo comply',\n GA_GEO_LOCATION_FAIL_VALIDATE_GEO_LOCATION: 'GeoLocation Failed ValidateGeoLocation from platform(location manager)',\n GA_GEO_LOCATION_SUCCEEDED_VALIDATE_GEO_LOCATION: 'GeoLocation ok response from ValidateGeoLocation api from platform(location manager)',\n GA_GEO_LOCATION_POPUP_CLOSED: 'Geolocation in progress popup closed',\n GA_GEO_LOCATION_RESET_WAITING_FOR_RESPONSE: 'GeoLocation Reset waitingForResponse from geo comply by timeout',\n GA_GEO_LOCATION_CATEGORY_SERVICE: 'GeoLocation Service',\n GA_GEO_LOCATION_CATEGORY_WRAPPER: 'GeoLocation',\n GA_GEO_LOCATION_KICK_EVENT: 'onGeoKickEvent',\n GA_GEO_LOCATION_KICK_EVENT_UN_KNOWN_REASON_ID: 'onGeoKickEvent was ignore, unknown reason ID',\n GA_GEO_DISABLED: 'GeoLocation feature disabled',\n GA_IS_GEO_LOCATION_IN_PROCESS_FALSE: 'GeoLocation - no need for Geo now isGeoLocationInProcess it true',\n GA_GEO_PLATFORM_ASK_GEO_VIA_LOGIN: 'Platform ask geo process via login property',\n GA_GEO_NOT_VALID_REQUEST_FROM_PLATFORM: 'invalid request from platform for geo check',\n TECHNICAL_PROBLEM_REASON: 'kick_reason_26',\n GEO_IN_PROCESS_MSG_TITLE: 'geo_location_title',\n GENERIC_OK_BUTTON: 'mdp_ok',\n GA_GEO_CLEAN_GEO_LOGIN_PROPERTY: 'GeoLocation Clean geoLocation property from login token',\n GA_GEO_SHOW_GEO_IN_PROGRESS_POPUP: 'GeoLocation show geo in progress popup',\n GA_GEO_GEO_COMPLY_RESULT_OK: 'GeoLocation geo comply result is ok',\n GA_GEO_GEO_COMPLY_RESULT_FAILED : 'GeoLocation geo comply result failed',\n GEO_SET_LOCATION_TIMEOUT: 'GeoLocation set timeout that will fail the geo if we do not have answer',\n GEO_SET_LOCATION_TIMEOUT_REACHED: 'GeoLocation reach timeout, change geo in progress flag to false'\n};","import BaseObject from '../../../base/base_object';\nexport default class LoginActionHandlerBase extends BaseObject {\n static CLASS = 'LoginActionHandlerBase';\n\n init(params) {\n super.init(params);\n this._serviceFactory = params.serviceFactory;\n }\n\n _serviceFactory = null;\n get serviceFactory() {\n return this._serviceFactory;\n }\n\n actionName() {\n this.throwError('16', 'Method actionName is not implemented');\n }\n\n execute(params) {\n this.throwError('20', 'Method execute is not implemented');\n }\n}\n","import BaseObject from './base_object';\nimport _ from '../utils/underscore';\n\nexport default class BaseSingleton extends BaseObject {\n\n static $instance = null;\n\n\n static create(params?: any): any {\n if (!_.isNull(this.$instance)) {\n return this.$instance;\n }\n\n this.$instance = super.create(params);\n\n return this.$instance;\n }\n\n /**\n * This method is mainly used in unit testing\n * in order to create a fresh instance on every test run\n */\n static reCreate(params?: any): any {\n this.$instance = null;\n return this.create(params);\n }\n}\n\n","/**\n * Enum for message type\n * @readonly\n * @enum {string}\n */\nconst MESSAGE_TYPE = {\n INFO: 'info',\n WARNING: 'warning',\n ERROR: 'error',\n SUCCESS: 'success'\n};\n\nconst TEXT_ALIGNMENT = {\n CENTER: 'center',\n LEFT: 'left',\n RIGHT: 'right'\n}\n\nconst BUTTON_ALIGHT = {\n CENTER: 'center',\n LEFT: 'left',\n RIGHT: 'right'\n}\n\nconst BUTTON_TYPE = {\n MAIN: {\n typeName: 'main',\n class: 'cgp-themes-main-cta'\n },\n SECONDARY: {\n typeName: 'secondary',\n class: 'cgp-themes-base-cta'\n },\n CUSTOM: {\n typeName: 'custom'\n }\n}\n\nconst MDP_IMG_CSS_CLASS_SELECTORS = {\n COMMON_ERROR: 'cgp-mdp-common-error',\n LOGIN_ERROR_CONTACT_SUPPORT: 'cgp-mdp-login-error-contact-support',\n LOGIN_RESTRICTED_COUNTRY_ERROR: 'cgp-mdp-resticted-country-error',\n LOGIN_USERNAME_PASSWORD_WRONG: 'cgp-mdp-username-password-wrong',\n LOGIN_AGE_VERIFICATION_WARNING: 'cgp-mdp-login-age-verification-warning',\n LOGIN_CAPS_LOCK: 'cgp-mdp-login-caps-lock',\n GAME_LOW_RESOLUTION: 'cgp-mdp-game-low-resolution',\n GAME_RESTRICTED_ERROR: 'cgp-mdp-game-resticted-error',\n GAME_UNAVAILABLE: 'cgp-mdp-game-unavailable',\n GAME_REAL_MONEY_ONLY: 'cgp-mdp-game-real-money-only',\n OAUTH_INACTIVITY_WARNING: 'cgp-mdp-auth-inactivity-warning',\n OAUTH_DISCONNECT_NOTIFY: 'cgp-mdp-oauth-disconnect-notify',\n COOKIE_ENABLE_NOTIFY: 'cgp-cookie-enable-notify'\n};\n\nexport {BUTTON_ALIGHT, MDP_IMG_CSS_CLASS_SELECTORS, MESSAGE_TYPE, TEXT_ALIGNMENT, BUTTON_TYPE}","import BaseComponent from '../../base/base_component';\nimport DOM from '../../utils/dom';\nimport DateFormatter from '../../utils/date_formatter';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport Event from '../../utils/event';\nimport { BaseComponentParams } from '../../base/base_component_interface';\n\n/**\n * Display digital current time in several formats (24 and 12 hours)\n * Controller can be used only through directive cgp-directive-clock\n *\n * @attributes\n * data-format - define 24 or 12 hours time display (values: '24h', '12h') Default is 24 hours\n * data-seconds - define if seconds will be displayed (values: 'Y', 'N'). Default is 'N' (not shown)\n *\n * @example\n * 24 hours format without seconds\n *
\n *\n * 12 hours format with seconds\n *
\n *\n */\n\ninterface ClockComponentInitParams extends BaseComponentParams {\n datetime?: string;\n}\n\nclass ClockComponentController extends BaseComponent {\n\n static CLASS: string = 'ClockComponentController';\n static DIRECTIVE: string = 'cgp-directive-clock';\n private _datetime: string;\n private _timeClockInterval: number = null;\n\n\n init(params: ClockComponentInitParams) {\n super.init(params);\n this._setInitParams(params);\n this._subscribe();\n this.addClass('cy-clock');\n\n }\n\n private _subscribe(): void {\n Event.on(SYSTEM_EVENTS.TIME_UPDATED_FROM_SERVER, () => {\n if (this._timeClockInterval) {\n this._updateTime();\n }\n });\n }\n\n private _setInitParams(params: ClockComponentInitParams): void {\n const dateTimeFormat = this.serviceFactory.skinService().getDateTimeFormat();\n this._datetime = params.datetime ? params.datetime : dateTimeFormat;\n }\n\n start() {\n if (!this._timeClockInterval) {\n this._timeClockInterval =\n DOM.setInterval(this._updateTime.bind(this), 1000, 'CLOCK_UPDATE_TIMER');\n }\n this._updateTime();\n return this;\n }\n\n private _updateTime(): void {\n const clockService = this.serviceFactory.clockService();\n const currentDate = clockService.getCurrentDate();\n const currentDateInRegulationTimeZone = clockService.convertToRegulationTimeZone(currentDate);\n if (!currentDateInRegulationTimeZone)\n {\n return;\n }\n const time = DateFormatter.format(currentDateInRegulationTimeZone.date, this._datetime, currentDateInRegulationTimeZone.isUTC);\n const el = this.getEl();\n if (el.innerText !== time) {\n el.innerText = time;\n }\n }\n\n //Clear timeout\n shutDown() {\n super.shutDown();\n if (this._timeClockInterval) DOM.clearInterval(this._timeClockInterval);\n }\n}\nexport default ClockComponentController;","export const MESSAGES_SOURCE = {\n MAIN_PROXY: 'mainProxy',\n FIREBASE: 'firebase'\n}\nexport const KICK_TYPE = {\n FULL_KICK: '1',\n SOFT_KICK: '2'\n};\n\nexport const KICK_REASON = {\n // full kick\n KickUserAlreadyLoggedIn: '20',\n KickUserMobileLocation: '21',\n KickUserNoWiFi: '23',\n KickUserRDPDetected: '24',\n KickUserOutsideCountry: '25',\n KickUserTechProblem: '26',\n KickUserPluginNotInstalled: '27',\n KickUserPluginNotUpdated: '28',\n KickUserLocationProcessTimeOut: '29',\n KickUserWagerMobileFailed: '31',\n KickUserOptInError: '32',\n KickUserNetworkSwitch: '33',\n KickUserGCTimeout: '34',\n KickUserLocationDisabled: '35',\n KickUserKnownProxy: '36',\n KickUserRestrictedPlay: '50',\n KickUserPendingAction: '51',\n // soft kick\n KickUserDailyReached: '30',\n KickUserWeeklyReached: '39',\n KickUserMonthlyReached: '40'\n};\n\nexport const KICK_REASONS = [\n KICK_REASON.KickUserAlreadyLoggedIn,\n KICK_REASON.KickUserMobileLocation,\n KICK_REASON.KickUserNoWiFi,\n KICK_REASON.KickUserRDPDetected,\n KICK_REASON.KickUserOutsideCountry,\n KICK_REASON.KickUserTechProblem,\n KICK_REASON.KickUserPluginNotInstalled,\n KICK_REASON.KickUserPluginNotUpdated,\n KICK_REASON.KickUserLocationProcessTimeOut,\n KICK_REASON.KickUserWagerMobileFailed,\n KICK_REASON.KickUserOptInError,\n KICK_REASON.KickUserNetworkSwitch,\n KICK_REASON.KickUserGCTimeout,\n KICK_REASON.KickUserLocationDisabled,\n KICK_REASON.KickUserKnownProxy,\n KICK_REASON.KickUserRestrictedPlay,\n KICK_REASON.KickUserPendingAction,\n KICK_REASON.KickUserDailyReached,\n KICK_REASON.KickUserWeeklyReached,\n KICK_REASON.KickUserMonthlyReached\n];\nexport const GEO_LOCATION_KICK_REASONS = [\n KICK_REASON.KickUserMobileLocation,\n KICK_REASON.KickUserNoWiFi,\n KICK_REASON.KickUserRDPDetected,\n KICK_REASON.KickUserOutsideCountry,\n KICK_REASON.KickUserTechProblem,\n KICK_REASON.KickUserPluginNotInstalled,\n KICK_REASON.KickUserPluginNotUpdated,\n KICK_REASON.KickUserLocationProcessTimeOut,\n KICK_REASON.KickUserWagerMobileFailed,\n KICK_REASON.KickUserOptInError,\n KICK_REASON.KickUserNetworkSwitch,\n KICK_REASON.KickUserGCTimeout,\n KICK_REASON.KickUserLocationDisabled,\n KICK_REASON.KickUserKnownProxy\n];","import BaseModelComponent from '../../../../base/base_model_component';\nimport _ from '../../../../utils/underscore';\n\n\nclass StripeComponentModel extends BaseModelComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'StripeComponentModel';\n\n\n /**\n *\n * @param params\n */\n init(params = {}) {\n this._setShowClock(params.showClock)\n }\n\n\n /**\n *\n * @param showClock\n * @returns {StripeComponentModel}\n * @private\n */\n _setShowClock(showClock = true) {\n if (!_.isBoolean(showClock)) {\n this._showClock = true;\n return this;\n }\n\n this._showClock = showClock;\n return this;\n }\n\n\n /**\n *\n * @returns {boolean|*}\n */\n getShowClock() {\n return this._showClock;\n }\n}\nexport default StripeComponentModel;","import BaseComponent from '../../../../base/base_component';\nimport Model from './stripe_component_model';\nimport DOM from '../../../../utils/dom';\nimport Directive from '../../../../core/directive';\n\nimport _ from '../../../../utils/underscore';\nlet stripeHTML = require('./view/stripe.html'),\n sessionHTML = require('./view/session-id.html');\n\nclass StripeComponent extends BaseComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ComponentClassName';\n\n\n /**\n * Root component selector.\n *\n * @type {string}\n */\n _selector = 'cgp-stripe-component';\n\n\n /**\n * @property\n * @type {object|null}\n * @private\n */\n _model = null;\n\n\n /**\n *\n * @param params\n */\n init(params) {\n super.init();\n this._model = Model.create(params);\n if (params && !_.isEmpty(params.innerHtml)) {\n stripeHTML = params.innerHtml;\n }\n }\n\n\n /**\n * Start the component view.\n *\n *\n * @returns {*}\n * @public\n */\n start() {\n let bakedStripeHTML = this.bake(stripeHTML, {});\n this\n .setHTML(bakedStripeHTML)\n ._onClock();\n\n return this;\n }\n\n closeFnc(closeCallback) {\n this._onCloseCallbacks = closeCallback;\n }\n /**\n *\n * @private\n */\n _onClock() {\n if (!this._model.getShowClock()) {\n this.logger.debug('Clock is set by configuration to be not display.');\n return this;\n }\n\n this._clock = Directive.generate({directiveName: 'clock', start: true, props: {datetime: this.serviceFactory.skinService().getTimeFormat()}});\n\n if (!this._clock) {\n this.logger.error('Clock component not created!');\n return this;\n }\n\n // Append the clock into the navbar DOM.\n DOM.append(this.getEl().querySelector('.cgp-stripe-clock'), this._clock.getEl());\n\n return this;\n }\n\n\n /**\n *\n * @param sessionID\n * @returns {NavBarComponentController}\n */\n setStripeSessionID(sessionID) {\n if (_.isUndefined(sessionID)) {\n this.logger.debug('Getting undefined session id');\n return this;\n }\n\n let bakedSessionHTML = this.bake(sessionHTML, {sessionID: sessionID});\n\n // Append the session into the navbar DOM.\n DOM.html(bakedSessionHTML, this.getEl().querySelector('.cgp-stripe-game-session'));\n return this;\n }\n}\n\nexport default StripeComponent;","export const AGE_ICON_TYPE = {\n ROUND: 'round',\n FLAT: 'flat',\n CAPSULE: 'capsule'\n}\n\nexport const AGE_ANALYTICS_DEFAULT = {\n category: 'Navigation',\n action: 'Header',\n label: 'Icon_responsible_gaming_click'\n}\n\nexport const AGE_ICON_TYPE_CSS_SELECTOR = {\n [AGE_ICON_TYPE.ROUND]:{\n '18': 'cgp-themes-icons-age-limit-18-round',\n '21': 'cgp-themes-icons-age-limit-21-round'\n },\n [AGE_ICON_TYPE.FLAT]: {\n '18': 'cgp-themes-icons-age-limit-18-flat',\n '21': 'cgp-themes-icons-age-limit-21-flat'\n },\n [AGE_ICON_TYPE.CAPSULE]: {\n '18': 'cgp-themes-icons-age-limit-18-capsule'\n }\n}","import BaseComponent from \"../../../../base/base_component\";\nimport Event from \"../../../../utils/event\";\nimport {SYSTEM_EVENTS, USER_EVENTS} from \"../../../../events/events\";\nimport {AGE_ICON_TYPE_CSS_SELECTOR} from './age_responsible_game_consts';\nimport _ from '../../../../utils/underscore';\nimport {AGE_ICON_TYPE, AGE_ANALYTICS_DEFAULT} from './age_responsible_game_consts';\nimport { Check } from \"@sparkware/app-utils\";\n\nlet view = require('./view/age_responsible_game.html');\n\nexport default class AgeResponsibleGameComponent extends BaseComponent {\n\n static CLASS = 'AgeResponsibleGameComponent';\n\n /**\n *\n * @type {string}\n */\n static DIRECTIVE = 'cgp-directive-age_responsible_game';\n\n _selector = 'cgp-responsible-gaming-age-icon-component';\n\n init(params) {\n super.init(params);\n params = params || {};\n this._analytics = params.analytics || AGE_ANALYTICS_DEFAULT;\n this._iconType = params.iconType || AGE_ICON_TYPE.ROUND;\n if(_.isNullOrUndefined(params.responsibleGamblingView)) {\n this._responsibleGamblingView = this.serviceFactory.gameManagerService().responsibleGamblingView()\n } else {\n this._responsibleGamblingView = params.responsibleGamblingView;\n }\n this._subscribe();\n }\n\n start() {\n const rgLabel = this.serviceFactory.regulationService().getRegulation().getAgeResponsibleGamingLabel();\n let bakedHTML = this.bake(view, {\n minimumAge : this._getAgeThemeClass(),\n rgLabel: Check.isNullOrUndefined(rgLabel) ? \"\" : rgLabel,\n withRgLabel: !!rgLabel ? \"cgp-themes-icons-age-label\" : \"\"\n });\n this.setHTML(bakedHTML);\n }\n\n\n _subscribe() {\n this.onRootElementEvent(USER_EVENTS.ON_CLICK, () => {\n if (this._analytics) {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, this._analytics);\n }\n\n this._openResponsibleGamblingLink();\n });\n }\n\n _getAgeThemeClass() {\n let minimumAge = this.serviceFactory.skinService().getMinimumAge() + '';\n return AGE_ICON_TYPE_CSS_SELECTOR[this._iconType][minimumAge];\n }\n\n _openResponsibleGamblingLink() {\n this.serviceFactory.openLinkService().openResponsibleGamblingLink(this._responsibleGamblingView);\n }\n\n}","const POST_ACTIONS = {\n CLOSE: 'close',\n PLAY: 'play',\n DEPOSIT: 'deposit',\n REGISTRATION_COMPLETED: 'RegistrationCompleted',\n AUTHORIZED: 'authorized',\n TERMINATE: 'terminate'\n}\n\nexport { POST_ACTIONS };","export enum FP_VOUCHER_TYPES {\n FreeSpin = '1',\n FreePlay = '2',\n FreeJackpotSpin = '3',\n FreeJackpotPlay = '4'\n}\n\nexport const FP_MESSAGE_MODE = {\n POPUP: 'popup',\n EMBEDDED_INTERNAL: 'embedded-internal'\n};\n","import GameStepBase, {cancelGameFlow} from './game_step_base';\n\nexport default class LoginGameStep extends GameStepBase {\n static CLASS = 'LoginGameStep';\n\n run(gameOptions) {\n if(this.serviceFactory.oAuth2Service().isAuthorized()) {\n return Promise.resolve(gameOptions);\n }\n\n return this.serviceFactory.webLoginService().openLoginForm().then(() => {\n return gameOptions;\n }).catch(err => {\n if (!err) {\n return cancelGameFlow('USER CANCELED THE LOGIN');\n } else {\n throw err;\n }\n });\n }\n}","import BaseComponent from '../../../../base/base_component';\nimport DateFormatter from '../../../../utils/date_formatter';\nimport DOM from '../../../../utils/dom';\nimport _ from '../../../../utils/underscore';\nimport { BaseComponentParams } from '../../../../base/base_component_interface';\nimport {LAST_LOGIN_SELECTORS, LAST_LOGIN_TITLE_TRANSLATION_KEY} from './last_login_consts';\n\nconst lastLoginView = require('./view/last_login.html');\n\ninterface LastLoginInitParams extends BaseComponentParams {\n textClass: string;\n resultClass: string;\n containerClass: string;\n datetime?: string;\n}\n\nclass LastLoginComponentController extends BaseComponent {\n\n static CLASS: string = 'LastLoginComponentController';\n private _datetime: string;\n private _textClass: string;\n private _resultClass: string;\n private _containerClass: string;\n\n init(params: LastLoginInitParams) {\n if(_.isNullOrUndefined(params)){\n (params as any) = {};\n }\n params.innerHtml = lastLoginView;\n super.init(params);\n this._setInitParams(params);\n }\n\n private _setInitParams(params: LastLoginInitParams) {\n this._datetime = _.isString(params.datetime) ? params.datetime : '';\n this._textClass = params.textClass;\n this._resultClass = params.resultClass;\n this._containerClass = params.containerClass;\n }\n\n start() {\n this.renderComponent();\n this._addInputClasses();\n return this;\n }\n\n public renderComponent(): void {\n const lastLoginWithRegTimeZone = this._getLastLoginWithRegTimeZone();\n if (!_.isNullOrUndefined(lastLoginWithRegTimeZone) && (!_.isNullOrUndefined(lastLoginWithRegTimeZone.LastLogin) || !_.isNullOrUndefined(lastLoginWithRegTimeZone.LastLoginDateInTimeZone))) {\n const lastLogin = this.serviceFactory.clockService().formatToRegulationOffset(lastLoginWithRegTimeZone.LastLogin, lastLoginWithRegTimeZone.LastLoginDateInTimeZone);\n\n // if it's not local time, in order to prevent DateFormatter from create Date object in local time and\n // change it for the local date string, we have to pass isUTC flag to be true. This avoids changing the date\n // We got the date as UTC without 'Z' - convert to UTC correct format\n\n const formattedText = this._getFormattedText(lastLogin.date + 'Z', lastLogin.isUTC);\n const lastLoginText = _.isString(formattedText) ? formattedText : '';\n\n DOM.text(this.querySelector(LAST_LOGIN_SELECTORS.TITLE), this.serviceFactory.languageService().translation(LAST_LOGIN_TITLE_TRANSLATION_KEY));\n DOM.text(this.querySelector(LAST_LOGIN_SELECTORS.VALUE), lastLoginText);\n } else {\n // Remove last login text\n const lastLoginTextElem = this.getEl().querySelector(LAST_LOGIN_SELECTORS.CONTAINER);\n if(lastLoginTextElem && _.isFunction(lastLoginTextElem.remove)){\n lastLoginTextElem.remove();\n }\n DOM.html('', this.getEl());\n }\n }\n\n private _getFormattedText(lastLogin: any, isUTC: boolean): any {\n return DateFormatter.format(lastLogin, this._getDateTimeFormat(), isUTC);\n }\n\n private _addInputClasses(): void {\n const titleTextClass = this._textClass;\n const resultTextClass = this._resultClass;\n const containerClass = this._containerClass;\n\n if (typeof titleTextClass === 'string') {\n const lastLoginTitle = this.getEl().querySelector(LAST_LOGIN_SELECTORS.TITLE);\n if(lastLoginTitle){\n lastLoginTitle.classList.add(titleTextClass);\n }\n }\n\n if (typeof resultTextClass === 'string') {\n const lastLoginElement = this.getEl().querySelector(LAST_LOGIN_SELECTORS.VALUE);\n if(lastLoginElement){\n lastLoginElement.classList.add(resultTextClass);\n }\n }\n\n if (typeof containerClass === 'string') {\n const lastLoginContainer = this.getEl().querySelector(LAST_LOGIN_SELECTORS.CONTAINER);\n if(lastLoginContainer){\n lastLoginContainer.classList.add(containerClass);\n }\n }\n }\n\n //retrieve last login from UserService\n private _getLastLoginWithRegTimeZone(): any {\n return this.serviceFactory.oAuth2Service().isAuthorized()\n ? this.serviceFactory.userService().getHistoryToken()\n : null;\n }\n\n //Get the dateTime format for last login\n private _getDateTimeFormat(): string {\n return this._datetime || this.serviceFactory.skinService().getDateTimeHistoryFormat();\n }\n}\n\nexport default LastLoginComponentController;\n","/**\n * Created by fabianbr on 6/20/2017.\n */\n\nexport const PENDING_TOASTERS_KEY = 'pending_toasters';\n\nexport const DISPLAYED_TOASTERS_KEY = 'displayed_toasters';\n\nexport const TOASTER_NOTIFICATION_TYPES = {\n\tSHOW: 1,\n\tOK_PRESSED: 3,\n\tGAME_OPEN: 3\n};\n\nexport const TOASTER_UI_CONFIG = {\n\tglobalClass: 'CGPToasterLayout cy-toaster-layout',\n\ttitleFont: 'Main',\n\ttitleSize: 'Large3D',\n\ttitleColor: 'secondary',\n\tmessageFont: 'Main',\n\tmessageSize: 'small',\n\tmessageColor: 'base01',\n\tbackgroundColor: 'darkMain',\n\tprogressColor: 'secondary',\n\tprogressBackgroundColor: 'base02',\n\tbuttonColor: 'secondary',\n\tbuttonFont: 'Type04',\n\tbuttonTextColor: 'darkMain',\n\tbuttonCornerRadius: 'ctacornerradius'\n};\n\nexport const LIB_CSS_IDS = {\n\tcloseBtn: 'iziToast-close',\n\tcontainer: 'iziToast-wrapper',\n\tcover: '.iziToast-cover',\n toastBody: '.iziToast-body',\n toastTexts: '.iziToast-texts'\n};\n\nexport const TOAST_TYPES = {\n\tTIMED: 'timed_toaster',\n\tACKNOWLEDGE: 'acknowledge_toaster',\n\tACTION: 'action_toaster'\n};\n\nexport const TRANSITIONS = {\n\tBOUNCE_IN_LEFT: 'bounceInLeft',\n\tBOUNCE_IN_RIGHT: 'bounceInRight',\n\tBOUNCE_IN_UP: 'bounceInUp',\n\tBOUNCE_IN_DOWN: 'bounceInDown',\n\tFADE_IN: 'fadeIn',\n\tFADE_IN_DOWN: 'fadeInDown',\n\tFADE_IN_UP: 'fadeInUp',\n\tFADE_IN_LEFT: 'fadeInLeft',\n\tFADE_IN_RIGHT: 'fadeInRight',\n\tFLIP_IN_X: 'flipInX',\n\tFADE_OUT: 'fadeOut',\n\tFADE_OUT_UP: 'fadeOutUp',\n\tFADE_OUT_DOWN: 'fadeOutDown',\n\tFADE_OUT_LEFT: 'fadeOutLeft',\n\tFADE_OUT_RIGHT: 'fadeOutRight',\n\tFLIP_OUT_X: 'flipOutX'\n};\n\nexport const POSITION = {\n\tBOTTOM_RIGHT: 'bottomRight',\n\tBOTTOM_LEFT: 'bottomLeft',\n\tTOP_RIGHT: 'topRight',\n\tTOP_LEFT: 'topLeft',\n\tTOP_CENTER: 'topCenter',\n\tBOTTOM_CENTER: 'bottomCenter',\n\tCENTER: 'center'\n};\n\nexport let DEFAULT_CONFIG = {\n\t// class: '',\n\t// title: '',\n\t// titleSize: 14,\n\t// titleColor: 'black',\n\t// message: '',\n\t// messageSize: 13,\n\t// messageColor: 'black',\n\t// backgroundColor: '#E8E8E8',\n\t// color: '', // blue, red, green, yellow\n\t// icon: '',\n\t// iconText: '',\n\t// iconColor: '',\n\t// image: '',\n\timageWidth: 90,\n\t// zindex: 99999,\n\tlayout: 1,\n\t// balloon: false,\n\tclose: true,\n\trtl: false,\n\tposition: POSITION.TOP_RIGHT,\n\t// target: '',\n\ttargetFirst: false,\n\ttimeout: 5000,\n\t// maxWidth: '412px',\n\tdrag: false,\n\tpauseOnHover: true,\n\tresetOnHover: false,\n\tprogressBar: true,\n\t// progressBarColor: '#CCCCCC',\n\tanimateInside: false,\n\t// buttons: {},\n\ttransitionIn: TRANSITIONS.BOUNCE_IN_UP,\n\ttransitionOut: TRANSITIONS.FADE_OUT,\n\ttransitionInMobile: TRANSITIONS.BOUNCE_IN_DOWN,\n\ttransitionOutMobile: TRANSITIONS.FADE_OUT\n\t// onOpened: function () {},\n\t// onClosed: function () {}\n};","/**\n * Created by andreyna on 6/23/2016.\n */\nimport BaseModelComponent from '../../base/base_model_component';\nimport _ from '../../utils/underscore';\nimport * as EXTERNAL_LINKS_CONSTS from './external_links_consts';\nimport Device from '../../utils/device/device';\nimport ServiceFactory from '../../services/service_factory';\nimport {PRIORITY_LEVEL} from \"../../services/overlay_manager/overlay_manager_levels\";\n\n/**\n *\n *\n *\n */\nclass ExternalLinksComponentModel extends BaseModelComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ExternalLinksModel';\n\n\n /**\n * @property\n * @type {Object}\n * @private\n */\n _handlersContext = require.context('./handlers/', true, /^.*(handler)\\.js$/);\n\n\n /**\n *\n * @param params\n */\n init(params = {}) {\n this\n ._setForceHideCloseButton(params.forceHideCloseButton)\n ._setLinkConfig(params.linkConfig)\n ._setAddCloseOption(params.addCloseOption)\n ._setHandlersContext()\n ._setSource(params.source)\n ._setConfigKey(params.configKey)\n ._setView(params.view)\n ._setBackToView(params.backToView)\n ._setOptions(params.options)\n ._setNonAuthRequred()\n ._setForceAuth(params.forceAuth)\n ._setType(params.type)\n ._setSessionType(params.sessionType)\n ._setFrameLinkClass()\n ._setFrameName()\n ._setSourceLink(params.sourceLink)\n ._setActionCallback(params.actionCallback)\n ._setFrameScrolling(params.scrolling)\n ._setCallbackUrl(params.callbackUrl)\n ._setPriorityLevel(params.priorityLevel)\n ._initComponentId();\n\n }\n\n\n /**\n * Set link config\n * @param linkConfig\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _setLinkConfig(linkConfig = EXTERNAL_LINKS_CONSTS.LINK_DEFAULT_CONGIF) {\n this._linkConfig = linkConfig;\n return this;\n }\n\n\n /**\n * Set require path to post message handlers\n *\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _setHandlersContext() {\n this._handlers = this._handlersContext.keys().map(this._handlersContext);\n return this;\n }\n\n /**\n * Set source to external link.\n * If the source is GNWP template name, then source = about:blank to prevent GET request from iframe\n *\n * @param {string} source\n * @returns(ExternalLinksComponentModel)\n * @private\n */\n _setSource(source = '') {\n this.source = source;\n // this.sourceLink = source;\n if (ServiceFactory.create().gnwpService().isGNWPTemplate(source)) {\n // this.sourceLink = EXTERNAL_LINKS_CONSTS.GNWP_FRAME_NAME;\n this.configKey = source;\n } else {\n this.configKey = 'common_link';\n }\n\n return this;\n }\n\n\n /**\n * Override common_link configuration\n * @param configKey\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _setConfigKey(configKey) {\n if (configKey && this.configKey === 'common_link') {\n this.configKey = configKey;\n }\n\n return this;\n }\n\n\n /**\n * Set source link\n *\n * @param sourceLink\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _setSourceLink(sourceLink = '') {\n this.sourceLink = sourceLink;\n\n return this;\n }\n\n\n _setActionCallback(actionCallback) {\n this._actionCallback = actionCallback;\n return this;\n }\n\n\n /**\n * @param scrolling\n * @private\n */\n _setFrameScrolling(scrolling) {\n this.scrolling = scrolling || 'auto';\n return this;\n }\n\n\n /**\n * Callback url that should be used instead of GNWP process\n * @param url\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _setCallbackUrl(url) {\n this._callbackUrl = url;\n return this;\n }\n\n\n /**\n * Set / override default priority level\n * @param priorityLevel\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _setPriorityLevel(priorityLevel) {\n this._priorityLevel = priorityLevel || this._linkConfig[this.configKey].priorityLevel || PRIORITY_LEVEL.EXTERNAL_LINK;\n return this;\n }\n\n\n /**\n * Generate overlay id. This is should be used in ovelray that contains exteranl link frame\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _initComponentId() {\n this._componentID = this.frameName;\n return this;\n }\n\n\n /**\n * Define call type. Directive or API\n *\n * @param type\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _setType(type = EXTERNAL_LINKS_CONSTS.COMPONENT_TYPES.DIRECTIVE) {\n this.type = type;\n\n return this;\n }\n\n\n /**\n * Define whether external link should not request GNWP is case user state doesn't match current auth state\n * If false parameter passed, then External links won't check auth state and execute GNWP request\n * The default is true, unless otherwise defined in configuration\n *\n * @param forceExecution\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _setNonAuthRequred() {\n if (this._linkConfig[this.configKey]) {\n let isRequired = this._linkConfig[this.configKey].isNotAuthRequired;\n this.isNotAuthRequired = _.isBoolean(isRequired) ? isRequired : false;\n } else {\n this.isNotAuthRequired = false;\n }\n\n return this;\n }\n\n\n /**\n * Define whether force auth before loading external link.\n * If false parameter passed, then it override default behaviour.\n * The default is false, unless otherwise defined in configuration\n *\n * @param forceAuth\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _setForceAuth(forceAuth) {\n if (this._linkConfig[this.configKey]) {\n let forceAuthValue = this._linkConfig[this.configKey].isAuthRequired;\n this.forceAuth = _.isBoolean(forceAuth) ? forceAuth : forceAuthValue;\n } else {\n this.forceAuth = false;\n }\n\n return this;\n }\n\n\n /**\n * Define new unique name to iframe\n *\n * @private\n */\n _setFrameName() {\n this.frameName = _.getGuid();\n\n return this;\n }\n\n /**\n * Define iframe css class to take appropriate dimensions\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _setFrameLinkClass() {\n let config = this._linkConfig[this.configKey];\n if (config) {\n //cashier is the exception from the regular flow, because there are several difference cashier actions and in each one there is specified screen\n if (this.source === EXTERNAL_LINKS_CONSTS.GNWP_SOURCES.CASHIER && this.options && this.options.sessionType) {\n this.linkClass = config.dimensions.sessionType[this.options.sessionType];\n }\n this.linkClass = this.linkClass || config.dimensions.default || '';\n } else {\n this.linkClass = 'cgp-external-link-url';\n }\n\n return this;\n }\n\n\n /**\n * Set view target - define how to link should be opened (in new window or iframe)\n *\n * @param {string} view - 'iframe' or 'window'\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _setView(view) {\n let viewValue = view;\n if (this._linkConfig[this.configKey]) {\n if (viewValue) {\n // check whether allowed target view value\n let allowedValues = this._linkConfig[this.configKey].allowedViews;\n if (!allowedValues.find(v => v === viewValue)) { // if is not allowed, set default\n viewValue = this._getDefaultView('view');\n }\n } else { // if view is not provided - set default\n viewValue = this._getDefaultView('view');\n }\n } else if (!viewValue) { // default for not template source is iframe\n viewValue = EXTERNAL_LINKS_CONSTS.NAVIGATION_VIEWS.IFRAME;\n }\n this.view = viewValue;\n\n return this;\n }\n\n _setForceHideCloseButton(forceHideCloseButton) {\n this._forceHideCloseButton = forceHideCloseButton;\n\n return this;\n }\n\n /**\n * Set callback view target - define how to link with callback URL should be opened\n * @param backToView\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _setBackToView(backToView) {\n let viewValue = backToView;\n if (viewValue) {\n let allowedValues = this._linkConfig[this.configKey].allowedViews;\n if (!allowedValues.find(v => v === viewValue)) { // if is not allowed, set default\n viewValue = this.view;\n }\n } else { // not provided -> get from config\n viewValue = this._getDefaultView('backToView');\n if (!viewValue) {\n viewValue = this.view;\n }\n }\n this.backToView = viewValue;\n\n return this;\n }\n\n getHandlers() {\n return this._handlers;\n }\n\n getForceHideCloseButton() {\n return this._forceHideCloseButton;\n }\n\n /**\n * Get default view appropriate to device type\n *\n * @returns {*}\n * @private\n */\n _getDefaultView(viewName) {\n let srcView = this._linkConfig[this.configKey][viewName];\n if (!srcView) {\n return null;\n }\n if (_.isString(srcView)) {\n return srcView;\n }\n let view;\n\n // get configuration for view per operation system\n if (srcView.os) {\n let os = Device.os.name;\n let deviceType = Device.isMobile() ? \"mobile\" : (Device.os.isPC ? \"pc\" : \"\");\n let viewConfig =\n srcView.os[os] &&\n srcView.os[os][deviceType];\n // if there is specified configuration for different browsers\n if (viewConfig && viewConfig.browsers) {\n let currentBrowser = Object.keys(viewConfig.browsers).find((browser) => {\n let deviceBrowser = _.isFunction(Device.browser['is' + browser]) ? Device.browser['is' + browser] : false;\n return deviceBrowser;\n });\n view = currentBrowser && viewConfig.browsers[currentBrowser] && viewConfig.browsers[currentBrowser].view;\n } else {\n view = viewConfig && viewConfig.view;\n }\n if (view) {\n return view;\n }\n }\n\n if ((Device.hybrid.inCasino || Device.hybrid.isEmbedded) && srcView.hybrid) {\n view = srcView.hybrid;\n } else {\n view = Device.isMobile() ? srcView.mobile : srcView.pc;\n }\n\n return view;\n }\n\n\n /**\n * Create options for open window view\n * @param windowOptions\n * @returns {*}\n * @private\n */\n _createWindowOptions(windowSize) {\n if (!windowSize) {\n return null;\n }\n // we assume that the size is defined as percentage of the full window size\n let height = Device.viewport.screenHeight * windowSize;\n let width = Device.viewport.screenWidth * windowSize;\n // top and left calculation is not used in this phase\n // let top = (Device.viewport.screenHeight - height) / 2;\n // let left = (Device.viewport.screenWidth - width) / 2;\n return `height=${height},width=${width}`;\n }\n\n\n /**\n *\n * @param integration\n * @returns {ExternalLinksComponentModel}\n * @private\n */\n _setOptions(options) {\n this.options = Object.assign({}, _.isObject(options) ? options : _.safeJSON(options, {}));\n\n return this;\n }\n\n\n /**\n * Set sessionType that defines on which page open cashier\n * @param sessionType\n * @private\n */\n _setSessionType(sessionType) {\n if (sessionType) {\n this.options.sessionType = sessionType;\n }\n\n return this;\n }\n\n\n /**\n * Set addCloseOption that defines if will be X close option with overlay\n * @param CloseOption\n * @private\n */\n _setAddCloseOption(addCloseOption = false) {\n this.addCloseOption = addCloseOption;\n\n return this;\n }\n\n /**\n * Get source to iframe\n *\n * @returns {string|*}\n */\n getSource() {\n return this.source;\n }\n\n /**\n * Get key to find configuration\n *\n * @returns {string|*}\n */\n getConfigKey() {\n return this.configKey;\n }\n\n\n /**\n * Get link configuration\n * @returns {{omg, my_account, cashier, membership, forgot_password, forgot_username, sport, poker, common_link, schedule_races, races_leaderBoard, races_widget, rich, pending_login}|*}\n */\n getLinkConfig() {\n return this._linkConfig;\n }\n\n\n /**\n * Get source link\n *\n * @returns {string|*|string}\n */\n getSourceLink() {\n return this.sourceLink;\n }\n\n\n /**\n * Get isForceAuth\n *\n * @returns {boolean|*}\n */\n getIsForceAuth() {\n return this.forceAuth;\n }\n\n\n /**\n * Get isNotAuthRequired\n *\n * @returns {boolean|*}\n */\n getIsNotAuthRequired() {\n return this.isNotAuthRequired;\n }\n\n\n /**\n * Get target where link should be opened\n *\n * @returns {string|*}\n */\n getTargetView() {\n return this.view;\n }\n\n\n /**\n * Get callback target view\n * @returns {*}\n */\n getCallbackView() {\n return this.backToView;\n }\n\n\n /**\n * Get call type\n *\n * @returns {string|*}\n */\n getType() {\n return this.type;\n }\n\n\n /**\n * Get additional options\n *\n * @returns {object} options\n */\n getOptions() {\n return this.options;\n }\n\n\n /**\n * Get unique iframe name used by controller\n *\n * @returns {string|*}\n */\n getFrameName() {\n return this.frameName;\n }\n\n\n /**\n * Get link class added to overlay in order to select specified external link iframe\n *\n * @returns {*|string|string|string|string|string}\n */\n getFrameLinkClass() {\n return this.linkClass;\n }\n\n\n getActionCallback() {\n return this._actionCallback;\n }\n\n\n /**\n * Get addCloseOption that defines if will be X close option with overlay\n */\n getAddCloseOption() {\n return this.addCloseOption;\n }\n\n /**\n * Get overlay ID used to open external link frame in\n * @returns {string|*}\n */\n getComponentId() {\n return this._componentID;\n }\n\n\n /**\n * Get overlay priority level\n * @returns {*}\n */\n getPriorityLevel() {\n return this._priorityLevel;\n }\n\n\n /**\n * Get window options to opening new window with specified parameters\n * @returns {null|*}\n */\n getWindowOptions() {\n return this._windowOptions;\n }\n\n\n /**\n * Callback url that should be used instead of GNWP process\n * @returns {*}\n */\n getCallbackUrl() {\n return this._callbackUrl;\n }\n}\n\nexport default ExternalLinksComponentModel;","/**\n * Created by andreyna on 6/23/2016.\n */\nimport BaseComponent from '../../base/base_component';\nimport Model from './external_links_component_model';\nimport DOM from '../../utils/dom';\nimport Device from '../../utils/device/device';\nimport * as EXTERNAL_LINKS_CONSTS from './external_links_consts';\nimport {PRIORITY_LEVEL} from '../../services/overlay_manager/overlay_manager_levels';\nimport _ from '../../utils/underscore';\nimport Event from '../../utils/event';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport {POST_ACTIONS} from '../../events/post_actions';\nimport * as GNWP_CONSTS from '../../services/gnwp/gnwp_consts';\nimport {MESSAGE_TYPE} from '../message/message_consts';\nimport * as OverlayConst from '../overlay/overlay_const';\nimport {LINK_DEFAULT_CONGIF} from './external_links_consts';\n\n\n// Views\nlet view = require('./view/external.html');\n\n/**\n * Open iFrame with specified link\n *\n * Link parameters object should be passed in create method\n *\n * Parameters object structure\n * {\n * source - external link that should be opened in iframe or name of the template in GNWP\n * DEPRECATED payload - if action is POST, then function performs POST request through virtual FORM with specified data in payload parameter\n * integration - iframe POST parameters, used for POST message integration\n * }\n */\nclass ExternalLinksComponentContoller extends BaseComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ExternalLinksComponentContoller';\n\n\n /**\n * @static\n * @type {string}\n */\n static DIRECTIVE = 'cgp-directive-external_link';\n\n _selector = 'cgp-external-link-component';\n\n EXTERNAL_LINK_COMMON_CLASS = 'cgp-external-link-frame';\n\n ADD_CLOSE_OPTION = 'cgp-external-link-close-option';\n\n /**\n * @property\n * @type {object|null}\n * @private\n */\n _model = null;\n _windowCurrentExecutionEventClick = null;\n /**\n * @param params\n */\n init(params) {\n super.init(params);\n let linkConfig = this._getRegulationExternalLinkConfig();\n this._model = Model.create(Object.assign({}, params, {linkConfig: linkConfig}));\n }\n\n\n /**\n *\n */\n start() {\n return this._openLink();\n }\n\n\n _getRegulationExternalLinkConfig() {\n let regulationConfig = this.serviceFactory.regulationService().getRegulation().getExternalLinksConfig();\n return regulationConfig ? _.mergeDeep({}, LINK_DEFAULT_CONGIF, regulationConfig) : LINK_DEFAULT_CONGIF;\n }\n\n /**\n *\n * @private\n */\n _openLink() {\n return this.serviceFactory.regulationService().runConditionsBeforeOpenLink(this._model.getSource()).then(() => {\n this.logger.debug('Opening source ' + this._model.getSource() + ' or link ' + this._model.getSourceLink());\n let oAuth2Service = this.serviceFactory.oAuth2Service();\n // check whether user has to be authorized before external link execution\n if (this._model.getIsForceAuth() && !oAuth2Service.isAuthorized()) {\n this._forceAuth();\n return;\n }\n\n if (this._model.getIsNotAuthRequired() && oAuth2Service.isAuthorized()) {\n this.logger.warn('Opening ' + this._model.getSource() + ' is not allowed when user is authorized');\n return;\n }\n\n let targetView = this._model.getCallbackUrl() ? this._model.getCallbackView() : this._model.getTargetView();\n\n // We need it so the browser not block it as popup(happen when do it inside callback)\n const openInNewWindowHook = this.serviceFactory.integrationService().openInNewWindowHook();\n if (!Device.hybrid.isHybrid && !openInNewWindowHook && targetView === EXTERNAL_LINKS_CONSTS.NAVIGATION_VIEWS.WINDOW) {\n this._windowCurrentExecutionEventClick = this.serviceFactory.windowService().openInNewWindow('about:blank');\n }\n\n return this._getLinkURL(targetView).then((linkURLObject) => {\n switch (targetView) {\n case EXTERNAL_LINKS_CONSTS.NAVIGATION_VIEWS.IFRAME:\n this._openInIframe(linkURLObject.linkURL, linkURLObject.gnwpResponse);\n break;\n case EXTERNAL_LINKS_CONSTS.NAVIGATION_VIEWS.SECOND_WEB_VIEW:\n this._openInSecondWebView(linkURLObject.linkURL);\n break;\n default: //open in new window\n this._openInWindow(targetView, linkURLObject.linkURL);\n break;\n }\n return linkURLObject;\n }).catch((err) => {\n this.logger.error(\"Failed to got valid URL. Error: \", err, \" ,value: \", targetView);\n return Promise.resolve()\n });\n });\n }\n\n\n /**\n * Open authentication dialog and perform link navigation only after successful login\n *\n * @private\n */\n _forceAuth() {\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, () => {\n this._detachSystemEvents();\n this._openLink();\n });\n\n\n // if instead of perform login user opens registration or closes login form, we should terminate waiting for OAUTH state change\n this.onSystemEvent(SYSTEM_EVENTS.LOGIN_FORM_CLOSE, () => {\n // componentGlobalEvents used as lock for concurrency. After Successful login OAUTH_STATE_CHANGE fired first and remove\n // SYSTEM_EVENTS.LOGIN_FORM_CLOSE event registration, so bellow flow can not be running and vice versa\n // If we access this code, login window was closed without login\n this._detachSystemEvents();\n this._onClose(POST_ACTIONS.TERMINATE, true);\n });\n\n this.serviceFactory.webLoginService().openLoginForm();\n }\n\n\n /**\n * Execute GNWP request and\n *\n * @private\n */\n _executeFrameGNWP(gnwpResponse) {\n this.openOverlay();\n this.logger.debug('GNWP response received. Start GNWP navigation');\n gnwpResponse.performGNWPNavigation(GNWP_CONSTS.REQUEST_METHODS.POST, GNWP_CONSTS.TARGET_VIEWS.IFRAME, this._model.getFrameName());\n this._subscribePostMsg();\n this._getHandlerByConfig().display();\n }\n\n\n /**\n * Open link in iframe. If it is a GNWP source, performs POST request to iframe within GNWP parameters\n * @private\n */\n\n _openInIframe(linkURL, gnwpResponse) {\n\n Event.fire(SYSTEM_EVENTS.SECOND_WEB_VIEW_CLOSE_ALL);\n\n let bakedHTML = this.bake(view);\n this.setHTML(bakedHTML);\n let frame = this.getEl().querySelector(\".cgp-external-link-container\");\n frame.allow = Device.browser.getIframeAllowAttributeValue();\n frame.allowFullscreen = true;\n\n if (!gnwpResponse) {\n this.openOverlay();\n\n this._subscribePostMsg();\n if (this._model.getLinkConfig()[this._model.getConfigKey()].immediateShow === true) {\n this._getHandlerByConfig().display();\n }\n\n frame.src = linkURL + _.jsonToQueryString(this._model.getOptions());\n\n\n DOM.addClass(this.getEl(), this._model.getFrameLinkClass());\n return;\n }\n\n this._executeFrameGNWP(gnwpResponse);\n }\n\n\n\n /**\n * Create Exception with list of gnwp valid sources\n *\n * @param params\n * @returns {*}\n * @private\n */\n _getError() {\n let gnwpSources = [];\n let message = 'Source ' + this._model.getSourceLink() + ' is not found in GNWP links and is not valid http URL';\n Object.keys(EXTERNAL_LINKS_CONSTS.GNWP_SOURCES).forEach((key) => {\n gnwpSources.push(EXTERNAL_LINKS_CONSTS.GNWP_SOURCES[key]);\n });\n\n return {error: message, GNWPSources: gnwpSources};\n }\n\n\n /**\n * Open overlay for iframe\n *\n */\n openOverlay() {\n if (this._model.getType() === EXTERNAL_LINKS_CONSTS.COMPONENT_TYPES.API) {\n let additionalClasses = [this._model.linkClass, this.EXTERNAL_LINK_COMMON_CLASS];\n\n if (this._model.getAddCloseOption()) {\n additionalClasses.push(this.ADD_CLOSE_OPTION);\n }\n if (this._model.getLinkConfig()[this._model.getConfigKey()].immediateShow === false) {\n additionalClasses.push('cgp-overlay-hide');\n }\n\n Event.fire(SYSTEM_EVENTS.OPEN_OVERLAY, {\n component: this,\n id: this._model.getComponentId(),\n // el: component.getEl(),\n additionalClasses: additionalClasses,\n priority: this._model.getPriorityLevel(),\n contentAdditionalClasses: this._model.getLinkConfig()[this._model.getConfigKey()].isMobileFullScreen === false ? ['cgp-mobile-no-full-screen-overlay'] : [],\n // contentAdditionalClasses: EXTERNAL_LINKS_CONSTS.LINK_DEFAULT_CONGIF[this._model.getConfigKey()].isCloseBtnAllowed !== false ? ['cgp-themes-lb-stroke'] : null,\n // Close strip cause the height problem, that class 'cgp-external-link-closable' fixes it.\n isCloseBtnAllowed: this._model.getForceHideCloseButton() ? false : this._model.getLinkConfig()[this._model.getConfigKey()].isCloseBtnAllowed,\n awaitForDisplay: !this._model.getLinkConfig()[this._model.getConfigKey()].immediateShow,\n btnCloseCallback: () => {\n Event.fire(SYSTEM_EVENTS.DETACH_REGISTER_EVENT);\n this._getHandlerByConfig().onBtnCloseClicked();\n },\n closeCallback: (postAction) => {\n this._onClose(postAction, true);\n }\n });\n }\n\n return this;\n }\n\n\n closeExpiredOverlay() {\n Event.fire(SYSTEM_EVENTS.OVERLAY_CLOSE_EXPIRED, this._model.getComponentId());\n }\n\n openAwaitOverlay() {\n Event.fire(SYSTEM_EVENTS.OVERLAY_OPEN_AWAIT, this._model.getComponentId());\n }\n\n\n /**\n * is ExternalPage\n *\n * @private\n */\n isExternalPage() {\n let key = this._model.getConfigKey();\n\n if (('sport' === key || 'poker' === key) && Device.hybrid.isEmbedded) {// Sport/Poker/Cashier should be opened inside of the same application in HybridEmbedded\n return false;\n }\n\n if (('sport' === key || 'poker' === key || 'cashier' === key) && (Device.hybrid.inCasino || Device.hybrid.isEmbedded)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get link URL. if callback URL exists return him, if not and gnwp tempalte return the gnwp answer and if not the source url.\n * @param target\n * @private\n */\n _getLinkURL(target) {\n return this._getCallbackURL().then((linkURL)=> {\n return this._createLinkURLObject(linkURL);\n }).catch(()=> {\n let sourceLink = this._model.getSourceLink();\n if(!sourceLink) {\n return this.getGNWPUrl(target).then((gnwpURL)=> {\n return this._createLinkURLObject(gnwpURL.linkURL, gnwpURL.gnwpResponse);\n });\n } else if(sourceLink){\n return Promise.resolve(this._createLinkURLObject(this._getSourceURL()));\n } else {\n this.logger.error('Failed to get link because do not have source link and this is not gnwp template, sourceLink value: ', sourceLink);\n return Promise.reject();\n }\n });\n }\n\n\n _createLinkURLObject(linkURL, gnwpResponse=null) {\n return {\n gnwpResponse: gnwpResponse,\n linkURL: linkURL\n }\n }\n\n /**\n * get link url for callback.\n * @returns {Promise.<*>|Promise|Promise}\n * @private\n */\n _getCallbackURL() {\n let callbackUrl = this._model.getCallbackUrl();\n if (callbackUrl) {\n if (!this.serviceFactory.oAuth2Service().isAuthorized()) { // TODO maybe we don't need an authorization check\n this.logger.error('Callback url is provided, but user is not authorized! => ', callbackUrl);\n return Promise.reject();\n }\n // renew token\n this.logger.debug('Renew token for => ', callbackUrl);\n return this.serviceFactory.userService().renewLoginToken()\n .then(tokenObj => {\n let url = callbackUrl + '?UserInfo=' + tokenObj.token;\n this.logger.debug('Getting callback url => ', url);\n return url;\n });\n }\n\n return Promise.reject();\n }\n\n /**\n * Get source URL\n * @private\n */\n _getSourceURL() {\n if (!_.isValidUrl(this._model.getSourceLink())) {\n this.logger.error(this._getError());\n if(this._windowCurrentExecutionEventClick) {\n this._windowCurrentExecutionEventClick.close();\n this._windowCurrentExecutionEventClick = null;\n }\n\n // Invalid URL - return empty string.\n return \"\";\n }\n return this._model.getSourceLink();\n }\n\n /**\n * Open link in second web view.\n * @private\n */\n _openInSecondWebView(url) {\n Event.fire(SYSTEM_EVENTS.SECOND_WEB_VIEW_NAVIGATE_SPORT, url);\n }\n\n /**\n * Open link in new window (browser tab) or redirect. GNWP is opened through GET request\n *\n * @private\n */\n _openInWindow(targetView, linkURL) {\n if (this._model.getType() === EXTERNAL_LINKS_CONSTS.COMPONENT_TYPES.DIRECTIVE) {\n throw new Error(\"Open external link in new window through directive not supported!!!\")\n }\n\n if (this.isExternalPage()) {\n this.logger.debug('Opening a new window tab in Hybrid for link: ', linkURL);\n this.serviceFactory.hybridService().openExternalLink(linkURL);\n } else {\n if (targetView === EXTERNAL_LINKS_CONSTS.NAVIGATION_VIEWS.REDIRECT) {\n this.logger.debug('Redirecting to => ', linkURL);\n this.serviceFactory.windowService().redirect(linkURL);\n } else {\n this.logger.debug('Opening a new window tab for link: ', linkURL);\n this._windowCurrentExecutionEventClick ? this._windowCurrentExecutionEventClick.location = linkURL :\n this.serviceFactory.windowService().openInNewWindow(linkURL);\n }\n }\n }\n\n getGNWPUrl(target) {\n return this._gnwpService().getGNWPResponse(this._getGNWPRequestParams(this._getGNWPTarget(target)))\n .then((GNWPResponse) => {\n if (!GNWPResponse) {\n this.logger.error('GNWP Response invalid => ', GNWPResponse);\n return;\n }\n\n let gnwpURL = GNWPResponse.getGNWPUrl();\n this.logger.debug('Getting gnwp url => ', gnwpURL);\n\n return {\n gnwpResponse: GNWPResponse,\n linkURL: gnwpURL\n };\n })\n }\n\n /**\n * return gnwp target according to target.\n * @private\n */\n _getGNWPTarget(target) {\n return target === EXTERNAL_LINKS_CONSTS.NAVIGATION_VIEWS.IFRAME? GNWP_CONSTS.TARGET_VIEWS.IFRAME : GNWP_CONSTS.TARGET_VIEWS.WINDOW;\n }\n\n /**\n * Close component and free all resources\n * @private\n */\n _onErrorHandler(reason) {\n Event.fire(SYSTEM_EVENTS.CLOSE_OVERLAY, {priority: PRIORITY_LEVEL.POP_UP});\n this.closeLink();\n Event.fire(SYSTEM_EVENTS.MESSAGE_OPEN, {type: MESSAGE_TYPE.ERROR, text: this.serviceFactory.regulationService().getErrorMessage(reason.error_code)});\n }\n\n\n /**\n * Prepare parameters to GNWP request\n *\n * @returns {object} GNWPRequest\n * @private\n */\n _getGNWPRequestParams(target) {\n let GNWPRequest = Object.assign({templateName: this._model.getSource()}, this._model.getOptions(), {target: target});\n\n return GNWPRequest;\n }\n\n\n /**\n * Find and return instance of the handler for current external link source\n *\n * @returns {undefined}\n * @private\n */\n _getHandlerByConfig() {\n let handler = this._model.getHandlers().find(h => h.default.HandlerName === this._model.getConfigKey());\n return handler ? handler.default.create({component : this}) : undefined;\n }\n\n /**\n * Handle post message from membership and perform specific actions\n * @param data\n * @private\n */\n _postMessageHandler(postMessage) {\n if (_.isNullOrUndefined(postMessage)) {\n return;\n }\n\n if (this.getTargetFrame().contentWindow !== postMessage.source) {\n this.logger.debug('Post Message source does not match the iframe content');\n return;\n }\n this.logger.debug(`Post message event received. Message data : [${JSON.stringify(postMessage.data)}]`);\n let postData = _.isObject(postMessage.data) ? postMessage.data : _.safeJSON(postMessage.data);\n\n this.logger.debug('Post message has been parsed successfully. PostData = [' + JSON.stringify(postData) + ']');\n\n let handler = this._getHandlerByConfig();\n\n if (handler) {\n handler.handlePostMessage(postData);\n } else {\n this.logger.error('Handler for ' + this._model.getSource() + ' was not found.');\n }\n }\n\n\n /**\n * add specific attr to iframe\n * @private\n */\n addAttrToIframe(attrName,value) {\n let el = this.getEl();\n let frame = el.getElementsByTagName(\"iframe\")[0];\n frame.setAttribute(attrName, value);\n\n return this;\n }\n\n\n /**\n * Show iframe and hide loading div\n */\n display() {\n let el = this.getEl();\n let frame = el.getElementsByTagName(\"iframe\")[0];\n DOM.hide(this.getDOMElementByClassName('cgp-loader cgp-external-link-loader'));\n DOM.removeClass(frame, 'cgp-external-link-hide');\n let overlayEl = this.getComponentOverlayEl();\n if (overlayEl) {\n overlayEl.classList.remove(\"cgp-overlay-hide\");\n }\n if (false === this._model.getLinkConfig()[this._model.getConfigKey()].immediateShow) {\n this.openAwaitOverlay();\n }\n\n Event.fire(SYSTEM_EVENTS.EXTERNAL_LINK_OPENED, this._model.getConfigKey());\n return this;\n }\n\n\n /**\n * Set the overlay size\n *@param (dimensions)\n */\n setSize(dimensions){\n this.logger.debug(['setSize called on ExternalLinks', dimensions]);\n\n //if client is mobile, width & height will be -1 so we dont need to change content overlay dimensions\n if (dimensions.width && dimensions.height && -1 !== dimensions.width) {\n let overlayContentEl = this.getComponentContentOverlayEl();\n DOM.addStyle(overlayContentEl,'width',dimensions.width + 'px');\n DOM.addStyle(overlayContentEl,'height',dimensions.height + 'px');\n }\n\n return this;\n }\n\n\n /**\n * Get component overlay el\n */\n getComponentContentOverlayEl() {\n let overlayEl = this.getComponentOverlayEl();\n if (overlayEl) {\n return overlayEl.getElementsByClassName(OverlayConst.OVERLAY_CONTENT_PROPERTIES.CLASS_NAME)[0];\n }\n }\n\n getComponentOverlayEl() {\n return DOM.$$('#cgp_overlay' + this._model.getComponentId());\n }\n\n\n /**\n * Hide loading dialog when frame loading failed\n *\n * @private\n */\n _onClose(postAction = POST_ACTIONS.CLOSE, avoidCloseOverlay = false) {\n if (avoidCloseOverlay === false) {\n Event.fire(SYSTEM_EVENTS.CLOSE_OVERLAY, {\n el: this.getEl(),\n priority: this._model.getPriorityLevel(),\n closeParams: postAction\n });\n } else {\n Event.fire(SYSTEM_EVENTS.EXTERNAL_LINK_CLOSED, this._model.getConfigKey());\n this.performCallback(postAction);\n }\n }\n\n\n /**\n * Perform actionCallback only once\n * @param actionName\n */\n performCallback(actionName) {\n this.logger.debug('Perform callback with actionName = ' + actionName);\n if (!actionName) {\n return;\n }\n let callback = this._model.getActionCallback();\n if (_.isFunction(callback)) {\n callback.call(null, {source: this._model.getConfigKey(), actionName: actionName});\n callback = null;\n }\n }\n\n\n /**\n * Get indication whether posat action call back exists\n */\n getIsHasActionCallback() {\n let callback = this._model.getActionCallback();\n return _.isFunction(callback);\n }\n\n\n /**\n * Subscribe to post message arrive\n *\n * @private\n */\n _subscribePostMsg() {\n this.onSystemEvent(SYSTEM_EVENTS.POST_MESSAGE_ARRIVE, data => {\n this._postMessageHandler(data);\n }, this);\n }\n\n\n /**\n * Open specified link on overlay or new window\n * @usage\n * In API: ExternalLinksController.create({source:'my_account'}).openLink();\n *\n */\n openLink() {\n return this.start();\n }\n\n\n /**\n * Close overlay with iframe\n * Destroy overlay\n */\n closeLink(postAction) {\n this._onClose(postAction);\n }\n\n getTargetView() {\n return this._model.getTargetView();\n }\n\n getTargetFrame() {\n return this.getEl().getElementsByTagName(\"iframe\")[0];\n }\n\n _gnwpService() {\n return this.serviceFactory.gnwpService();\n }\n}\n\nexport default ExternalLinksComponentContoller;\n","const B2C = 'b2c',\n COMMUNICATION_BRIDGE = 'communicationBrige',\n MARKETING_FLOWS = {\n REGISTER: 'register',\n REGISTER_IN_LOGIN: 'register_in_login',\n };\n\n\nexport {B2C, COMMUNICATION_BRIDGE, MARKETING_FLOWS};","/**\n * Created by andreyna on 1/26/2017.\n */\nconst MEMBERSHIP_POST_ACTIONS = {\n PLAY: '1',\n DEPOSIT: '2',\n BACK: '3',\n UPLOAD_DOCUMENTS_CASHIER: '7',\n REGISTRATION_COMPLETED: '8',\n OPEN_BANK_ID: '64',\n DOWNLOAD_APP: '68',\n STORE_REGISTRATION_COOKIES_DATA:'69',\n SHOW_LOGIN: '73',\n UPLOAD_DOCUMENTS_IV: '75'\n};\n\nconst REGISTRATION_DATA_KEY = 'storeRegistrationData';\n\nexport {MEMBERSHIP_POST_ACTIONS, REGISTRATION_DATA_KEY};","const OVERLAY_DOM_PROPERTIES = {\n ID: '#cgp_overlay',\n ID_NAME: 'cgp_overlay',\n CLASS_NAME: 'cgp-overlay',\n CONTENT_CLASS_NAME: 'cgp-overlay-content'\n};\n\nconst OVERLAY_COMPONENT_PROPERTIES = {\n ID: '#cgp_overlay',\n CLASS_NAME: 'OverlayComponentController'\n};\n\n\nconst OVERLAY_CONTENT_PROPERTIES = {\n CLASS_NAME: 'cgp-overlay-content'\n};\n\nconst PRIORITY_CLASS_MAP = {\n BASE: 'cgp-overlay-base',\n POP_UP: 'cgp-overlay-popup',\n OPEN_SESSION: 'cgp-overlay-open-session',\n FP: 'cgp-overlay-fp',\n OMG: 'cgp-overlay-omg',\n MESSAGE: 'cgp-overlay-message',\n TOUCH_ID: 'cgp-overlay-touch-id'\n};\n\nconst TYPES_CLASS_MAP = {\n FLAT: 'cgp-overlay-flat',\n FULL_SCREEN: 'cgp-overlay-fullscreen'\n};\n\nconst LIGHTBOX_BACKGROUND_COLOR_CLASS = 'cgp-theme-property-lightbox-background-color';\n\nexport {OVERLAY_DOM_PROPERTIES, OVERLAY_COMPONENT_PROPERTIES, OVERLAY_CONTENT_PROPERTIES, PRIORITY_CLASS_MAP, TYPES_CLASS_MAP, LIGHTBOX_BACKGROUND_COLOR_CLASS};","import BaseComponent from \"../../base/base_component\";\n\nexport default class ResponsibleGamingIconsComponentWrapper extends BaseComponent{\n /**\n *\n * @type {string}\n */\n static CLASS = 'ResponsibleGamingIconsComponentWrapper';\n\n\n /**\n * @static\n * @type {string}\n */\n static DIRECTIVE = 'cgp-directive-responsible_gaming_icons';\n\n /**\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-responsible-gaming-icons-component';\n\n /**\n * ResponsibleGamingIcons component provided by the regulation class\n * @type {null}\n * @private\n */\n _responsibleGamingIconsComponent = null;\n\n\n init(params) {\n super.init(params);\n this._responsibleGamingIconsComponent = this.serviceFactory.regulationService().getResponsibleGamingIconsComponent(params);\n }\n\n start() {\n if (this._responsibleGamingIconsComponent) {\n this._responsibleGamingIconsComponent.start();\n this.appendChildComponent(this._responsibleGamingIconsComponent);\n }\n }\n\n}","import Logger from './logger';\nimport _ from './underscore';\n\n/**\n * Created by andreyna on 6/9/2016.\n */\n/**\n * Loader of the modules\n *\n */\n\nclass Loader {\n logger;\n\n /**\n * @constructor\n */\n constructor() {\n this.logger = new Logger('LOADER', window.LOG_LEVEL);\n }\n\n /**\n * Convert the require in to the default export\n *\n * @throws {Error} - if the instance not contain default export\n * @throws {Error} - if the class in the instance not contain static CLASS\n * @param req - the request instance to module\n * @returns {*} - the default class in the require file\n * @public\n */\n getDefault(req) {\n return req.keys().map((name)=> {\n let obj = req(name);\n if (_.isUndefined(obj.default)) {\n this.logger.error('module doesn\\'t contain default => ' + name);\n throw new Error('module doesn\\'t contain default => ' + name);\n }\n if (_.isUndefined(obj.default.CLASS)) {\n this.logger.error('class doesn\\'t contain CLASS => ' + name);\n throw new Error('class doesn\\'t contain CLASS => ' + name);\n }\n this.logger.debug('loader - append => ' + obj.default.CLASS);\n return obj.default;\n });\n }\n\n /**\n * Get the services class\n *\n * @returns {*} - the services class\n * @public\n */\n\n services() {\n let req = require.context('../services', true, /^.*(service)\\.(js|ts)$/);\n return this.getDefault(req);\n }\n\n /**\n * Get the option components class\n * @function\n * @returns {*} - the module class\n * @public\n */\n optionComponents() {\n let req = require.context('../components/options/option_components', true, /^.*(controller)\\.js$/);\n return this.getDefault(req);\n }\n\n /**\n * Don't use this method. It used by ExperimentalService only\n * @returns {*}\n */\n components() {\n let req = require.context('../components', true, /^.*(controller)\\.js$/);\n return this.getDefault(req);\n }\n\n}\n\nexport default Loader;","const CLOCK_LOCALIZATION = {\n LOCAL: 'LOCAL',\n SERVER: 'SERVER'\n};\nconst CLOCK_CONSTS = {\n TIMER_UPDATE_INTERVAL: 1000,\n DEFAULT_CLOCK_UPDATE_FROM_SERVER_INTERVAL: '00:05:00'\n};\n\nexport {CLOCK_LOCALIZATION, CLOCK_CONSTS};","const TOUCH_ID = {\n INIT_VIEW: require('./view/touch_id_init.html'),\n MODIFY_VIEW: require('./view/touch_id_modify.html'),\n\n ACTIVATION_BUTTON_CONFIRM: '.cgp-touch-id-init-button',\n ELEMENT_CHECKBOX_LABEL: '.cgp-touch-id-modify-toggle-button',\n ELEMENT_CHECKBOX: '.cgp-touch-id-modify-toggle-button-checkbox'\n};\n\n\nconst TOUCH_ID_SCREENS = {\n INIT_SCREEN: '1',\n MODIFY_SCREEN: '2',\n TOUCH_ID_CTL_OPENED: 'thocu_id_ctl_opened',\n TOUCH_ID_CTL_CLOSED: 'thocu_id_ctl_closed'\n};\n\nexport {TOUCH_ID, TOUCH_ID_SCREENS};\n","class DateTimeUtils {\n secondsToMilliseconds(seconds: number) : number {\n return seconds * 1000;\n }\n\n minutesToMilliseconds(minutes: number) : number {\n return this.secondsToMilliseconds(minutes * 60);\n }\n\n millisecondsToSeconds(milliseconds: number) : number {\n return milliseconds / 1000;\n }\n}\n\nexport default new DateTimeUtils();","const GAME_GROUP = {\n BACCARAT: 11,\n BACKGAMMONN: 40,\n BLACKJACK: 12,\n CARRIBEAN_POKER: 18,\n CRAPS: 10,\n CRAZY_BLACKJACK: 20,\n HEAD_TO_HEAD: 207,\n HI_LO: 202,\n KENO: 16,\n LIVE_CASINO: 201,\n PAI_GOW_POKER: 17,\n POKER: 100,\n POKER_TEMPLATE_GAMES: 206,\n POOLS: 212,\n POWER_VIDEO_POKER: 19,\n ROULETTE: 13,\n ROULETTE_LIKE: 203,\n SCRATCH_CARD: 204,\n SLOT: 14,\n VIDEO_SLOT: 30,\n VIDEO_POKER: 15,\n VIDEO_SLOT_BONUS_GAME: 31\n};\n\n\n\nexport {GAME_GROUP};","import BaseObject from \"../../../base/base_object\";\nimport ServiceFactory from \"../../service_factory\";\nimport _ from \"../../../utils/underscore\";\nimport {IFirebaseParams} from \"./firebase_strategy\";\nimport {ISubscriptionParams} from \"./firebase_const\";\n\ninterface FirebaseHandlerInitParams{\n firebaseMessaging: {};\n config: IFirebaseParams;\n}\n\nexport interface IBaseParams{\n enabled?: boolean;\n forceFallback?: boolean;\n}\n\nexport default abstract class FirebaseHandlerBase extends BaseObject{\n static CLASS = \"FirebaseHandlerBase\";\n\n protected serviceFactory: ServiceFactory;\n protected firebaseMessaging;\n protected enabled: boolean = false;\n protected forceFallback: boolean = false;\n\n protected init(params: FirebaseHandlerInitParams) {\n const optionalParams = params.config[this.getFeatureName()];\n if(optionalParams){\n this.setFeatureParams(optionalParams);\n }\n super.init(params);\n if(!params.config.serviceFactory) {\n this.throwArgumentExpected('32', 'init', 'serviceFactory');\n }\n\n if(!params.firebaseMessaging) {\n this.throwArgumentExpected('36', 'init', 'firebaseMessaging');\n }\n this.serviceFactory = params.config.serviceFactory;\n this.firebaseMessaging = params.firebaseMessaging;\n\n if(this.enabled){\n if (this.forceFallback) {\n this.startFallback();\n this.logger.warn('Feature ' + this.getFeatureName() + ' is enabled, but forced to fallback.');\n } else {\n this.subscribe();\n this.logger.debug('Feature ' + this.getFeatureName() + ' is enabled. Able to receive message from Firebase');\n }\n } else {\n this.logger.warn('Feature ' + this.getFeatureName() + ' is disabled. Unable to receive message for this feature from Firebase');\n }\n }\n\n protected setFeatureParams(params: IBaseParams){\n this.enabled = _.isNullOrUndefined(params.enabled) ? this.enabled : _.toBoolean(params.enabled);\n this.forceFallback = _.isNullOrUndefined(params.forceFallback) ? false : _.toBoolean(params.forceFallback);\n }\n\n private _subscriptionParams: ISubscriptionParams;\n protected subscribe(){\n this._subscriptionParams = this.getSubscriptionParams();\n this.firebaseMessaging.subscribe(\n this._subscriptionParams.eventName,\n this._successCallback,\n this.errorCallback,\n this._subscriptionParams.params);\n }\n\n private _successCallback = (data) => {\n if(this.getFallbackServiceName()){\n this.serviceFactory.fallbackService().stop(this.getFallbackServiceName());\n }\n this._subscriptionParams.successCallback(data);\n }\n\n\n public unsubscribe(){\n if(this.getFallbackServiceName()){\n this.serviceFactory.fallbackService().stop(this.getFallbackServiceName());\n }\n if(this.firebaseMessaging && this._subscriptionParams) {\n this.firebaseMessaging.unSubscribe(this._subscriptionParams.eventName,\n this._successCallback,\n this._subscriptionParams.params);\n }\n }\n\n protected abstract getFeatureName(): string;\n\n protected abstract getFeatureLabel(): string;\n\n protected abstract getFallbackServiceName(): string;\n\n protected abstract getSubscriptionParams(): ISubscriptionParams;\n\n protected errorCallback = (err) => {\n this.startFallback();\n this.logger.error('Firebase Handler error', err);\n this.serviceFactory.firebaseElasticService().sendSubscriptionError(this.getFeatureLabel(),JSON.stringify(err));\n }\n\n protected startFallback(){\n if(this.serviceFactory.oAuth2Service().isAuthorized() && this.getFallbackServiceName()){\n this.serviceFactory.fallbackService().start(this.getFallbackServiceName());\n this.serviceFactory.firebaseElasticService().sendFallbackStarted(this.getFeatureLabel(), this.forceFallback);\n }\n }\n\n}\n","import BaseComponent from \"../../../../base/base_component\";\nimport { CONTAINER_IDS, DEFAULT_SWITCH_TO_SESSION_TIMER_WAIT_INTERVAL } from './last_login_consts';\nimport {SYSTEM_EVENTS} from \"../../../../events/events\";\nimport DOM, {TimeoutSubscription} from \"../../../../utils/dom\";\nimport LastLoginComponentController from './last_login_component_controller';\nimport SessionTimerController from '../../../session_timer/session_timer_controller';\nimport { BaseComponentParams } from '../../../../base/base_component_interface';\n\nconst view = require('./view/last_login_composite.html');\n\ninterface LastLoginCompositeInitParams extends BaseComponentParams {\n lastLoginComponent: LastLoginComponentController;\n sessionTimerComponent: SessionTimerController;\n switchToSessionTimerWaitInterval?: number;\n}\n\nexport default class LastLoginCompositeController extends BaseComponent {\n static CLASS: string = 'LastLoginCompositeController';\n private _switchToSessionTimerWaitInterval: number;\n private _lastLoginComponent: LastLoginComponentController = null;\n private _sessionTimerComponent: SessionTimerController = null;\n\n init(params: LastLoginCompositeInitParams) {\n super.init(params);\n this._lastLoginComponent = params.lastLoginComponent;\n this._sessionTimerComponent = params.sessionTimerComponent;\n this._switchToSessionTimerWaitInterval = params.switchToSessionTimerWaitInterval ? params.switchToSessionTimerWaitInterval : DEFAULT_SWITCH_TO_SESSION_TIMER_WAIT_INTERVAL;\n }\n\n start() {\n const bakedHTML = this.bake(view);\n this.setHTML(bakedHTML);\n this._subscribe();\n\n if (this._lastLoginComponent) {\n this._lastLoginComponent.start();\n this.appendChildComponent(this._lastLoginComponent, CONTAINER_IDS.LAST_LOGIN);\n }\n\n if (this._sessionTimerComponent) {\n this._sessionTimerComponent.start();\n this.appendChildComponent(this._sessionTimerComponent, CONTAINER_IDS.SESSION_TIMER);\n }\n\n if (this.serviceFactory.oAuth2Service().isAuthorized()) {\n this._onLogin();\n }\n\n return this;\n }\n\n\n private _subscribe(): void {\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, () => {\n this.serviceFactory.oAuth2Service().isAuthorized() ? this._onLogin() : this._onLogout();\n });\n }\n\n\n private _switchToSessionTimerSubscription: TimeoutSubscription = null;\n private _onLogin(): void {\n DOM.show(this.querySelector(CONTAINER_IDS.LAST_LOGIN));\n\n this._switchToSessionTimerSubscription = this.setTimeout(() => {\n DOM.hide(this.querySelector(CONTAINER_IDS.LAST_LOGIN))\n .show(this.querySelector(CONTAINER_IDS.SESSION_TIMER));\n }\n , this._switchToSessionTimerWaitInterval\n , 'SWITCH_TO_SESSION_TIMER_WAIT_INTERVAL')\n }\n\n private _onLogout(): void {\n if(this._switchToSessionTimerSubscription) {\n this._switchToSessionTimerSubscription.clear();\n }\n DOM.hide(this.querySelector(CONTAINER_IDS.SESSION_TIMER))\n .hide(this.querySelector(CONTAINER_IDS.LAST_LOGIN));\n }\n}","/**\n * Created by andreyna on 8/1/2017.\n */\nconst CONTAINER_DIRECTION = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n}\n\nconst SCROLLABLE_CONTAINER_CLASSES = {\n SCROLLING_CONTAINER: 'cgp-scrolling-container',\n SCROLLING_WRAPPER_CONTAINER: 'cgp-scrolling-container-wrapper',\n HORIZONTAL_VIEW: 'cgp-sc-horizontal',\n VERTICAL_VIEW: 'cgp-sc-vertical',\n LEFT_ARROW: 'cgp-sc-left-arrow-wrapper',\n RIGHT_ARROW: 'cgp-sc-right-arrow-wrapper',\n UP_ARROW: 'cgp-sc-up-arrow-wrapper',\n DOWN_ARROW: 'cgp-sc-down-arrow-wrapper',\n ITEM_ELEMENT: 'cgp-sc-item',\n SC_OVERFLOW_AUTO: 'cgp-sc-overflow-auto',\n SC_CENTER_ITEMS: 'cgp-sc-center-items',\n SC_ROW_GRID: 'cgp-sc-row-grid'\n}\n\nconst PADDING_INDEX = {\n TOP: 0, RIGHT: 1, BOTTOM: 2, LEFT: 3\n}\n\nconst SCROLL_DIRECTION = {\n LEFT: 'left',\n RIGHT: 'right',\n UP: 'up',\n DOWN: 'down'\n}\n\nconst INLINE_STYLES = {\n CONTAINER_ITEM: '.cgp-scrollable-container-component .cgp-scrolling-container-wrapper .cgp-scrolling-container .cgp-sc-item',\n SCROLLING_COMPONENT: '.cgp-scrollable-container-component'\n}\n\nexport {CONTAINER_DIRECTION, SCROLLABLE_CONTAINER_CLASSES, PADDING_INDEX, SCROLL_DIRECTION, INLINE_STYLES};","import BaseModelComponent from '../../base/base_model_component';\nimport _ from '../../utils/underscore';\nimport {CONTAINER_DIRECTION} from './scrollable_container_consts';\n\n\nclass ScrollableContainerModel extends BaseModelComponent {\n /**\n * @constructor\n * @param params\n */\n init(params = {}) {\n super.init(params);\n this._initParams(params)\n ._setComponentID(params.ID);\n }\n\n _defaultArrowsPadding = [0, 0, 0, 0];\n\n\n /**\n * Init parameters\n * @param params\n * @returns {ScrollableContainerModel}\n * @private\n */\n _initParams(params) {\n this._setItems(params.items)\n ._setDirection(params.direction)\n ._setArrowsPadding(params.arrowsPadding)\n ._setItemGap(params.itemGap)\n ._setIsArrowVisible(params.isArrowVisible)\n ._setScrollingStep(params.scrollingStep)\n ._setScrollingDuration(params.scrollingDuration)\n ._setGrid(params.grid)\n ._setIsCenterItems(params.isCenterItems)\n ._setIsSwiper(params.swipeScroll)\n ._setIsDraggable(params.isDraggable)\n ._setIsHasDots(params.isHasDots)\n ._setIsExternalScroll(params.externalScroll)\n ._setSwiperOffset(params.offset);\n return this;\n }\n\n /**\n * Save new style in model\n * @param params\n */\n setStyle(params) {\n this._initParams(params);\n }\n\n /**\n * Set HTML Elements for container\n * @param items\n * @private\n */\n _setItems(items = []) {\n this._items = !_.isArray(items) || !this._isHTMLElementsArray(items) ? [] : items;\n return this;\n }\n\n\n /**\n * Set items direction (horizontal or vertical)\n * @param direction\n * @returns {ScrollableContainerModel}\n * @private\n */\n _setDirection(direction = CONTAINER_DIRECTION.HORIZONTAL) {\n this._direction = !_.isString(direction) ? CONTAINER_DIRECTION.HORIZONTAL : direction;\n return this;\n }\n\n\n /**\n * Set padding area for arrows.\n * Arrows will be places in the center of this area if exist\n * Be carefull, if you use arrows without definition of paddingArea, arrows render inside the container\n * @param arrowsPadding\n * @returns {ScrollableContainerModel}\n * @private\n */\n _setArrowsPadding(arrowsPadding) {\n this._arrowsPadding = this._defaultArrowsPadding\n if (!_.isArray(arrowsPadding) || (arrowsPadding.length !== 2 && arrowsPadding.length !== 4)) {\n this.logger.warn('arrowsPadding parameter is incorrect or not defined. Arrows might be rendered inside the container.');\n return this;\n }\n if (!this._isIntegerArray(arrowsPadding)) {\n this.logger.warn('arrowsPadding parameter contains non integer values. Arrows might be rendered inside the container.');\n return this;\n }\n if (arrowsPadding.length === 2) {\n this._arrowsPadding = [arrowsPadding[0], arrowsPadding[1], arrowsPadding[0], arrowsPadding[1]];\n return this;\n }\n this._arrowsPadding = arrowsPadding;\n return this;\n }\n\n\n /**\n * Set gap in pixels between items. First and last items don't get this gap\n * @param itemGap\n * @returns {ScrollableContainerModel}\n * @private\n */\n _setItemGap(itemGap) {\n this._itemGap = !isNaN(itemGap) ? itemGap : 0;\n return this;\n }\n\n\n /**\n * Set if component should render the arrows\n * @param isArrowVisible\n * @returns {ScrollableContainerModel}\n * @private\n */\n _setIsArrowVisible(isArrowVisible) {\n this._isArrowVisible = _.isBoolean(isArrowVisible) ? isArrowVisible : true;\n return this;\n }\n\n\n /**\n * Set if items should be centered if scroll is not exist\n * @param isCenterItems\n * @returns {ScrollableContainerModel}\n * @private\n */\n _setIsCenterItems(isCenterItems) {\n this._isCenterItems = _.isBoolean(isCenterItems) ? isCenterItems : true;\n return this;\n }\n\n\n /**\n * Set if container should be scrolled by swipe (mobile implementation).\n * Supported only in horizontal mode\n * @param touchScroll\n * @returns {ScrollableContainerModel}\n * @private\n */\n _setIsSwiper(swipeScroll = false) {\n this._isSwipeScroll = swipeScroll;\n return this;\n }\n\n\n _setIsDraggable(isDraggable = false) {\n this._isDraggable = isDraggable;\n return this;\n }\n\n\n _setIsHasDots(isHasDots = false) {\n this._isHasDots = isHasDots;\n return this;\n }\n\n\n /**\n * Set if the container has external scrolling. In this case we won't add overflow:auto rule\n * @param externalScroll\n * @returns {ScrollableContainerModel}\n * @private\n */\n _setIsExternalScroll(externalScroll = false) {\n this._externalScroll = externalScroll;\n return this;\n }\n\n\n /**\n * Set offset for the first swiper item\n * @param offset\n * @returns {ScrollableContainerModel}\n * @private\n */\n _setSwiperOffset(offset = 'center') {\n this._swiperOffset = offset;\n return this;\n }\n\n\n /**\n * Set how items should be scrolled by one arrow click. Minimum is one\n * @param scrollingStep\n * @returns {ScrollableContainerModel}\n * @private\n */\n _setScrollingStep(scrollingStep) {\n this._scrollingStep = isNaN(scrollingStep) || scrollingStep < 1 ? 1 : scrollingStep;\n return this;\n }\n\n\n /**\n * Set speed of scrolling in milliseconds, Default is 200\n * @param scrolllingSpeed\n * @returns {ScrollableContainerModel}\n * @private\n */\n _setScrollingDuration(scrollingDuration) {\n this._scrollingDuration = isNaN(scrollingDuration) || scrollingDuration < 0 ? 200 : scrollingDuration;\n return this;\n }\n\n\n /**\n * Set items grid\n * @param grid\n * itemsInRow - how much items will be in each line (row in Vertical and column in horizontal)\n * gap - gap between items in one row (margin-right in vertical and margin-bottom in horizontal)\n * @returns {ScrollableContainerModel}\n * @private\n */\n _setGrid(grid) {\n let defaultGrid = {itemsInRow: 1, gap: 0};\n this._grid = !grid || !_.isObject(grid) ? defaultGrid : Object.assign(defaultGrid, grid);\n return this;\n }\n\n\n /**\n * Set if of component. If id is undefined or null, random id will be generated\n * @param name\n * @returns {ScrollableContainerModel}\n * @private\n */\n _setComponentID(id) {\n this._componentID = !id || !_.isString(id) ? _.getGuid() : id;\n return this;\n }\n\n\n /**\n * Returns if the array contains only HTML Elements\n * @param array\n * @returns {boolean}\n * @private\n */\n _isHTMLElementsArray(array) {\n for (let i = 0; i < array.length; i++) {\n if (!_.isElement(array[i])) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Check if the array is an array of integers\n * @param array\n * @returns {boolean}\n * @private\n */\n _isIntegerArray(array) {\n for (let i = 0; i < array.length; i++) {\n if (isNaN(array[i])) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Get HTML Elements for container\n * @returns {*}\n */\n getItems() {\n return this._items;\n }\n\n\n /**\n * Get items direction\n * @returns {string|*}\n */\n getDirection() {\n return this._direction;\n }\n\n\n /**\n * Get padding area definiton to center arrows\n * @returns {Array|[number,number,number,number]}\n */\n getArrowsPadding() {\n return this._arrowsPadding;\n }\n\n\n /**\n * Get gap between items\n * @returns {number|*}\n */\n getItemGap() {\n return this._itemGap;\n }\n\n\n /**\n * Get if arrows should be visible\n * @returns {boolean|*}\n */\n getIsArrowVisible() {\n return this._isArrowVisible;\n }\n\n\n /**\n * Get if items should be centered if scroll doesn't exist\n * @returns {boolean|*}\n */\n getIsCenterItems() {\n return this._isCenterItems;\n }\n\n\n /**\n * Get how items will be scrolled by one arrow click\n * @returns {number|*}\n */\n getScrollingStep() {\n return this._scrollingStep;\n }\n\n\n /**\n * Get scrolling duration in milliseconds\n * @returns {*}\n */\n getScrollingDuration() {\n return this._scrollingDuration;\n }\n\n\n /**\n * Get grid settings\n * @returns {{itemsInRow: number, gap: number}|*}\n */\n getGrid() {\n return this._grid;\n }\n\n\n /**\n * Get if container should be scrolled by touch / drag\n * @returns {boolean|*}\n */\n getIsSwiper() {\n return this._isSwipeScroll;\n }\n\n\n getIsDraggable() {\n return this._isDraggable;\n }\n\n\n /**\n *\n * @returns {boolean|*}\n */\n getIsExternalScroll() {\n return this._externalScroll;\n }\n\n\n getIsHasDots() {\n return this._isHasDots;\n }\n\n\n getSwiperOffset() {\n return this._swiperOffset;\n }\n\n\n /**\n * Get id of component\n * @returns {string|*}\n */\n getComponentID() {\n return this._componentID;\n }\n}\nexport default ScrollableContainerModel;","import BaseComponent from '../../base/base_component';\nimport DOM from '../../utils/dom';\nimport Model from './scrollable_container_model';\nimport {CONTAINER_DIRECTION, SCROLLABLE_CONTAINER_CLASSES, PADDING_INDEX, SCROLL_DIRECTION} from './scrollable_container_consts';\nimport {USER_EVENTS} from '../../events/events';\n\n\nlet containerView = require('./view/container.html');\n/**\n * ScrollableContainer allows to contain and manage items (HTML Elemens) with custom arrows.\n * Actually it overrides default overflow scrolling behaviour. Instead of default scrolling executes by clicking on arrows in PC and swipes in Mobile\n * Allows to define behavior in horizontal and vertical mode and smooth scrolling through the items\n */\nclass ScrollableContainerController extends BaseComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ScrollableContainerController';\n\n\n /**\n * Root component selector.\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-scrollable-container-component';\n\n\n _swiper = {\n startPosition: 0,\n movePosition: 0,\n endPosition: 0,\n maxDistance: 0,\n actualDistance: 0,\n initTransform: 0,\n transformBounders: {\n leftBounder: 0,\n rightBounder: 0\n },\n activeItem: 0,\n itemsBoundaries: []\n };\n\n\n init(params) {\n super.init(params);\n this._model = Model.create(params);\n }\n\n\n /**\n * Create overlay if one is not existed!\n *\n * @returns {*}\n * @public\n */\n start() {\n this.setHTML(this._getContainerView());\n this._setComponentID();\n this._appendItems();\n return this;\n }\n\n _subscribeToTouchEvents() {\n let container = this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.SCROLLING_CONTAINER);\n if (this._touchEvents && this._touchEvents.length > 0) {\n return;\n }\n this._touchEvents = [];\n\n this._touchEvents.push(DOM.onDOMElementEvent(container, 'touchstart', (e) => {\n this._onTouchStart(e);\n }));\n this._touchEvents.push(DOM.onDOMElementEvent(container, 'touchend', (e) => {\n this._onTouchEnd(e);\n }));\n this._touchEvents.push(DOM.onDOMElementEvent(container, 'touchmove', (e) => {\n this._onTouchMove(e);\n }));\n }\n\n\n /**\n * Handle event. From this point the component able to assign styles and calculate elements position\n */\n onAppendedToDOM() {\n super.onAppendedToDOM();\n // Avoid automatic style assignment. Set style over setStyle API\n this._subscribeToArrowsClick();\n this._assignStyle();\n }\n\n\n /**\n * Set container style\n */\n setStyle(params) {\n this._model.setStyle(params);\n this._clearStyles();\n this._assignStyle();\n }\n\n\n /**\n * Scroll to specified item index\n * @param itemIndex\n * @returns {*}\n */\n scrollTo(itemIndex) {\n if (1 > itemIndex) {\n this.logger.debug('itemIndex is less then 1. Scroll has been prevented');\n return Promise.resolve();\n }\n // supported only when itemsInRow = 1\n if (1 !== this._model.getGrid().itemsInRow) {\n this.logger.warn('Items in row are not equal to 1, scrolling to certain item is not supported');\n return Promise.reject();\n }\n // supported only if scrolling position is on init scrolling\n let scrollingStatus = this._getScrollingStatus();\n if (!scrollingStatus.isScrollExist) {\n this.logger.debug('There is no scrolling in container. Scroll to item ' + itemIndex + ' has been prevented');\n return Promise.resolve();\n }\n if (scrollingStatus.directions[SCROLL_DIRECTION.UP] || scrollingStatus.directions[SCROLL_DIRECTION.LEFT]) {\n this.logger.warn('Scrolling is not on initial position. Scrolling from other position is not supported yet');\n return Promise.reject();\n }\n let direction = this._model.getDirection();\n return this._scrollTo(direction === CONTAINER_DIRECTION.HORIZONTAL ? SCROLL_DIRECTION.RIGHT : SCROLL_DIRECTION.DOWN, itemIndex);\n }\n\n\n /**\n * Clear old styles\n * @private\n */\n _clearStyles() {\n DOM.removeClass(this.getEl(), SCROLLABLE_CONTAINER_CLASSES.HORIZONTAL_VIEW);\n DOM.removeClass(this.getEl(), SCROLLABLE_CONTAINER_CLASSES.VERTICAL_VIEW);\n DOM.removeClass(this._getItemsContainer(), SCROLLABLE_CONTAINER_CLASSES.SC_CENTER_ITEMS);\n DOM.removeClass(this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.SCROLLING_WRAPPER_CONTAINER), SCROLLABLE_CONTAINER_CLASSES.SC_ROW_GRID);\n DOM.removeStyle(this._getItemsContainer(), 'width');\n let itemElements = this._getItemsContainer().children;\n for (var i = 0; i < itemElements.length; i++) {\n DOM.removeStyle(itemElements[i], 'margin-right');\n DOM.removeStyle(itemElements[i], 'margin-bottom');\n }\n }\n\n\n /**\n * Set unique ID for component\n * @returns {ScrollableContainerController}\n * @private\n */\n _setComponentID() {\n this.getEl().id = this._model.getComponentID();\n return this;\n }\n\n /**\n * Get container view\n * @returns {*}\n * @private\n */\n _getContainerView() {\n return this.bake(containerView);\n }\n\n\n /**\n * Get component DOM element by its className\n * @param className\n * @returns {*}\n * @private\n */\n _getDOMElementByClassName(className) {\n return this.getEl().getElementsByClassName(className)[0];\n }\n\n\n /**\n * Get container for elements\n * @returns {*}\n * @private\n */\n _getItemsContainer() {\n return this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.SCROLLING_CONTAINER);\n }\n\n\n /**\n * Get component dimensions\n * @returns {{}}\n * @private\n */\n _getComponentDimensions() {\n return DOM.getDimensions(this.getEl());\n }\n\n\n /**\n * Create style selector with component ID\n * @param inlineStyle\n * @returns {string}\n * @private\n */\n _createStyleSelector(inlineStyle) {\n return '#' + this._model.getComponentID() + inlineStyle;\n }\n\n\n /**\n * Append items into container\n * @private\n */\n _appendItems() {\n let items = this._model.getItems();\n let container = this._getItemsContainer();\n items.forEach((item) => {\n DOM.addClass(item, SCROLLABLE_CONTAINER_CLASSES.ITEM_ELEMENT);\n DOM.append(container, item);\n });\n return this;\n }\n\n\n /**\n * Assign classes to container according to style options\n * @returns {ScrollableContainerController}\n * @private\n */\n _assignStyle() {\n let direction = this._model.getDirection();\n switch (direction) {\n case CONTAINER_DIRECTION.HORIZONTAL:\n this._prepareHorizontalView();\n break;\n case CONTAINER_DIRECTION.VERTICAL:\n this._prepareVerticalView();\n break;\n default:\n // maybe should throw an Exception here\n break;\n }\n this._setScrollerStyles();\n return this;\n }\n\n\n /**\n * Assing styles for scroller container\n * @private\n */\n _setScrollerStyles() {\n if (this._model.getIsSwiper() && this._model.getItems().length > 1) {\n this._setSwiperView();\n } else {\n if (this._model.getIsExternalScroll() === false) {\n DOM.addClass(this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.SCROLLING_WRAPPER_CONTAINER), SCROLLABLE_CONTAINER_CLASSES.SC_OVERFLOW_AUTO);\n }\n if (this._model.getIsCenterItems() && false === this._getScrollingStatus().isScrollExist) {\n DOM.addClass(this._getItemsContainer(), SCROLLABLE_CONTAINER_CLASSES.SC_CENTER_ITEMS);\n }\n if (true === this._model.getIsArrowVisible()) {\n this._assignArrowsPosition();\n this._changeArrowVisibility();\n }\n }\n\n }\n\n\n _setScrollableView() {\n\n }\n\n\n _getContainerWrapper() {\n return this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.SCROLLING_WRAPPER_CONTAINER);\n }\n\n\n _getSwiperInitTransform(offset) {\n let itemDimensions = this._getItemDimensions();\n let containerWrapper = this._getContainerWrapper();\n let wrapperWidth = DOM.getDimensions(containerWrapper).fullWidth;\n let initTransform = 0;\n switch (offset) {\n case 'center':\n initTransform = (wrapperWidth - (itemDimensions.fullWidth - itemDimensions.marginRight - itemDimensions.marginLeft)) / 2;\n break;\n case 'left':\n default:\n break;\n }\n return initTransform;\n }\n\n _setSwiperBoundaries() {\n let itemDimensions = this._getItemDimensions();\n let itemContainer = this._getItemsContainer();\n let multiplier = this.isRTL() ? -1 : 1;\n if (this.isRTL()) {\n this._swiper.transformBounders = {\n leftBounder: (this._swiper.initTransform + itemContainer.clientWidth - itemDimensions.fullWidth / 2),\n rightBounder: (this._swiper.initTransform + (itemDimensions.fullWidth / 2) * -1)\n }\n } else {\n this._swiper.transformBounders = {\n leftBounder: (this._swiper.initTransform + itemDimensions.fullWidth / 2),\n rightBounder: (this._swiper.initTransform + itemContainer.clientWidth - itemDimensions.fullWidth / 2) * (-1)\n }\n }\n\n this._swiper.itemsBoundaries = [];\n let items = this._model.getItems();\n let currentItemBoundaries = {\n position: this._swiper.initTransform,\n left: this.isRTL() ? this._swiper.initTransform + itemDimensions.fullWidth / 2 : this._swiper.transformBounders.leftBounder,\n right: this.isRTL() ? this._swiper.transformBounders.rightBounder :this._swiper.initTransform - itemDimensions.fullWidth / 2,\n };\n\n for(let index = 0; index < items.length; index++) {\n let itemBoundaries = {\n position: currentItemBoundaries.position,\n left: currentItemBoundaries.left,\n right: currentItemBoundaries.right,\n index: index\n };\n if (index === items.length - 1) {\n // fix right limit\n itemBoundaries.right = this._swiper.transformBounders.rightBounder;\n }\n this._swiper.itemsBoundaries.push(itemBoundaries);\n currentItemBoundaries.position -= itemDimensions.fullWidth * multiplier;\n currentItemBoundaries.left -= itemDimensions.fullWidth * multiplier;\n currentItemBoundaries.right -= itemDimensions.fullWidth * multiplier;\n }\n\n this._swiper.maxDistance = itemDimensions.fullWidth * 1.3; // swipe distance larger than item in 50%\n this._swiper.transform = this._swiper.itemsBoundaries[this._swiper.activeItem].position;\n }\n\n /**\n * Add swiper for item container\n * @private\n */\n _setSwiperView() {\n let containerWrapper = this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.SCROLLING_WRAPPER_CONTAINER);\n DOM.addClass(this.getEl(), 'cgp-sc-swiper');\n let offset = this._model.getSwiperOffset();\n // TODO for horizontal only\n DOM.addStyle(containerWrapper, 'height', this._getItemDimensions().fullHeight + 'px');\n let multiplier = this.isRTL() ? -1 : 1;\n // init swiper transform\n this._swiper.initTransform = this._getSwiperInitTransform(offset) * multiplier;\n // set bounders\n this._setSwiperBoundaries();\n\n if (this._model.getIsHasDots() === true) {\n this._appendDots();\n this._activeDot(this._swiper.activeItem);\n }\n this._setTransform();\n this._subscribeToTouchEvents();\n if (true === this._model.getIsArrowVisible()) {\n this._assignArrowsPosition();\n this._changeArrowVisibility();\n }\n }\n\n\n /**\n * Disable swiper view\n * @private\n */\n _removeSwiperView() {\n DOM.removeClass(this.getEl(), 'cgp-sc-swiper');\n DOM.removeStyle(this._getItemsContainer(), 'transform');\n // detach touch events\n if (this._touchEvents) {\n this._touchEvents.forEach(subscription => subscription.remove());\n }\n }\n\n\n /**\n * Set transform style for container\n * @private\n */\n _setTransform() {\n DOM.addStyle(this._getItemsContainer(), 'transform', 'translateX(' + this._swiper.transform + 'px)');\n }\n\n\n /**\n * Create CSS rule for arrows padding\n * @returns {string}\n * @private\n */\n _createPaddingStyle() {\n // convert to rem\n let paddings = this._model.getArrowsPadding().map((padding) => {\n return padding / 10;\n });\n DOM.addStyle(this.getEl(), 'padding', paddings.join('rem ') + 'rem');\n }\n\n /**\n * Create CSS rule for component height style.\n * Component height should be maximum as height of its parent minus sum of top and bottom paddings\n * @returns {string}\n * @private\n */\n _createComponentHeightStyle() {\n return 'height:calc(100% - ' + (this._model.getArrowsPadding()[PADDING_INDEX.BOTTOM] + this._model.getArrowsPadding()[PADDING_INDEX.TOP]) + 'rem);';\n }\n\n\n /**\n * Create CSS rule for item margin, according to gap between items\n * @param rule\n * @param marginProperty\n * @returns {string}\n * @private\n */\n _createItemMarginRule(rule, marginProperty, gap, exceptFn) {\n let itemElements = this._getItemsContainer().children;\n let itemsInRow = this._model.getGrid().itemsInRow;\n let fullRows = parseInt(itemElements.length / itemsInRow);\n let partialRows = itemElements.length % itemsInRow;\n let lastRowElements = itemElements.length - (fullRows + partialRows - 1) * itemsInRow;\n // set default exception function. Except elements in last row\n exceptFn = exceptFn || ((index) => {\n // except last item in any case\n if (index === itemElements.length - 1) {\n return true;\n }\n return index > itemElements.length - lastRowElements - 1;\n });\n for (var i = 0; i < itemElements.length; i++) {\n let isExcepted = false;\n if (exceptFn) {\n isExcepted = exceptFn(i);\n }\n if (!isExcepted) {\n DOM.addStyle(itemElements[i], rule, (parseFloat(marginProperty) + gap) / 10 + 'rem');\n }\n }\n }\n\n\n /**\n * Add grid class in case of items in row larger than 1\n * @private\n */\n _assignGridSettings() {\n // TODO currently we support grid options only in vertical direction\n if (this._model.getDirection() === CONTAINER_DIRECTION.VERTICAL) {\n\n let grid = this._model.getGrid();\n if (1 < grid.itemsInRow) {\n DOM.addClass(this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.SCROLLING_WRAPPER_CONTAINER), SCROLLABLE_CONTAINER_CLASSES.SC_ROW_GRID);\n DOM.addStyle(this._getItemsContainer(), 'width', this._getItemDimensions().fullWidth * grid.itemsInRow + grid.gap * (grid.itemsInRow - 1) + 'rem');\n\n this._createItemMarginRule('margin-right', this._getItemDimensions().marginRight, grid.gap, (index) => {\n return 0 === (index + 1) % grid.itemsInRow;\n });\n }\n }\n }\n\n\n /**\n * Get container item style\n * @returns {CSSStyleDeclaration|IEElementStyle}\n * @private\n */\n _getItemDimensions() {\n let itemElements = this._getItemsContainer().children;\n if (0 === itemElements.length) {\n return {marginRight: '0rem', marginBottom: '0rem'};\n }\n let item = itemElements[0];\n return Object.assign({}, DOM.getDimensions(item));\n }\n\n\n /**\n * Assign container to render items in horizontal\n * @private\n */\n _prepareHorizontalView() {\n DOM.addClass(this.getEl(), SCROLLABLE_CONTAINER_CLASSES.HORIZONTAL_VIEW);\n this._createPaddingStyle();\n //this._assignGridSettings();\n if (this.isRTL()) {\n this._createItemMarginRule('margin-left', this._getItemDimensions().marginLeft, this._model.getItemGap());\n } else {\n this._createItemMarginRule('margin-right', this._getItemDimensions().marginRight, this._model.getItemGap());\n }\n }\n\n\n /**\n * Assign container to render items in vertical\n * @private\n */\n _prepareVerticalView() {\n DOM.addClass(this.getEl(), SCROLLABLE_CONTAINER_CLASSES.VERTICAL_VIEW);\n this._createPaddingStyle();\n //this._assignGridSettings();\n this._createItemMarginRule('margin-bottom', this._getItemDimensions().marginBottom, this._model.getItemGap());\n }\n\n\n /**\n * Get dimension object of container item\n * @private\n */\n _getContainerItemDimensions() {\n let container = this._getItemsContainer();\n if (0 < container.children.length) {\n return DOM.getDimensions(container.children[0]);\n }\n return null;\n }\n\n\n /**\n * Calculate arrows absolute position style\n * @private\n */\n _assignArrowsPosition() {\n let padding = this._model.getArrowsPadding();\n let itemDimensions = this._getContainerItemDimensions();\n if (!itemDimensions) {\n this.logger.error('Failed in get dimension of container item. Unable to calculate arrows position');\n return;\n }\n Object.keys(SCROLL_DIRECTION).forEach((key) => {\n this._setArrowPositionByDirection(SCROLL_DIRECTION[key], padding, itemDimensions);\n });\n }\n\n\n isRTL () {\n return this.serviceFactory.languageService().getIsRTL();\n }\n\n\n /**\n * Set arrow position by scroll direction\n * @param arrowDirection\n * @private\n */\n _setArrowPositionByDirection(scrollDirection, arrowPaddings, itemDimensions) {\n let arrowEl, arrowDimensions;\n let wrapperDimensions = DOM.getDimensions(this._getContainerWrapper());\n switch (scrollDirection) {\n case SCROLL_DIRECTION.LEFT:\n arrowEl = this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.LEFT_ARROW);\n arrowDimensions = DOM.getDimensions(arrowEl);\n arrowEl.style.top = arrowPaddings[PADDING_INDEX.TOP] + ((wrapperDimensions.fullHeight - arrowDimensions.fullHeight) / 2) + 'px';\n arrowEl.style.left = ((arrowPaddings[PADDING_INDEX.LEFT] - arrowDimensions.fullWidth) / 2) + 'px';\n break;\n case SCROLL_DIRECTION.RIGHT:\n arrowEl = this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.RIGHT_ARROW);\n arrowDimensions = DOM.getDimensions(arrowEl);\n arrowEl.style.top = arrowPaddings[PADDING_INDEX.TOP] + ((wrapperDimensions.fullHeight - arrowDimensions.fullHeight) / 2) + 'px';\n arrowEl.style.right = ((arrowPaddings[PADDING_INDEX.RIGHT] - arrowDimensions.fullWidth) / 2) + 'px';\n break;\n case SCROLL_DIRECTION.UP:\n arrowEl = this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.UP_ARROW);\n arrowDimensions = DOM.getDimensions(arrowEl);\n arrowEl.style.top = arrowPaddings[PADDING_INDEX.TOP] + ((wrapperDimensions.fullHeight - arrowDimensions.fullHeight) / 2) / 10 + 'rem';\n arrowEl.style.left = ((this._getComponentDimensions().fullWidth - arrowDimensions.fullWidth) / 2) / 10 + 'rem';\n break;\n case SCROLL_DIRECTION.DOWN:\n arrowEl = this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.DOWN_ARROW);\n arrowDimensions = DOM.getDimensions(arrowEl);\n arrowEl.style.bottom = ((arrowPaddings[PADDING_INDEX.BOTTOM] - arrowDimensions.fullHeight) / 2) / 10 + 'rem';\n arrowEl.style.left = ((this._getComponentDimensions().fullWidth - arrowDimensions.fullWidth) / 2) / 10 + 'rem';\n break;\n default:\n /* Maybe should throw an exception */\n break;\n }\n }\n\n\n /**\n * Display or hidden arrows according to container overflow\n * If there is no space for all items or container has been scrolled, appropriate arrows will be displayed and vice versa\n * @private\n */\n _changeArrowVisibility() {\n // check if arrows should be invisible at all\n if (false === this._model.getIsArrowVisible()) {\n return;\n }\n let scrollingStatus = this._getScrollingStatus();\n Object.keys(scrollingStatus.directions).forEach((dir) => {\n switch (dir) {\n case SCROLL_DIRECTION.LEFT:\n this._changeElementVisibility(this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.LEFT_ARROW), scrollingStatus.directions[dir]);\n break;\n case SCROLL_DIRECTION.RIGHT:\n this._changeElementVisibility(this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.RIGHT_ARROW), scrollingStatus.directions[dir]);\n break;\n case SCROLL_DIRECTION.UP:\n this._changeElementVisibility(this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.UP_ARROW), scrollingStatus.directions[dir]);\n break;\n case SCROLL_DIRECTION.DOWN:\n this._changeElementVisibility(this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.DOWN_ARROW), scrollingStatus.directions[dir]);\n break;\n default:\n /* Maybe should throw an exception */\n break;\n }\n });\n }\n\n\n /**\n * Change element visibility\n * @param arrow\n * @param isVisible\n * @private\n */\n _changeElementVisibility(el, isVisible) {\n if (isVisible) {\n DOM.visible(el);\n } else {\n DOM.invisible(el);\n }\n }\n\n\n _getScrollDirectionValue(direction) {\n let value = direction;\n if (this.isRTL()) {\n value = direction === SCROLL_DIRECTION.LEFT ? SCROLL_DIRECTION.RIGHT : SCROLL_DIRECTION.LEFT;\n }\n\n return value;\n }\n\n /**\n * Get whether there is scrolling in container and scroll directions\n * @returns {{isScrollExist: boolean, directions: Array}}\n * @private\n */\n _getScrollingStatus() {\n let direction = this._model.getDirection();\n let scrollingStatus = {isScrollExist: false, directions: {\n [SCROLL_DIRECTION.LEFT]: false,\n [SCROLL_DIRECTION.RIGHT]: false,\n [SCROLL_DIRECTION.UP]: false,\n [SCROLL_DIRECTION.DOWN]: false\n }};\n if (this._model.getIsSwiper()) {\n let activeIndex = this._swiper.activeItem;\n let firstVisible = activeIndex > 0;\n let lastVisible = activeIndex < this._model.getItems().length - 1;\n switch (direction) {\n case CONTAINER_DIRECTION.HORIZONTAL:\n scrollingStatus.directions[this._getScrollDirectionValue(SCROLL_DIRECTION.LEFT)] = firstVisible;\n scrollingStatus.directions[this._getScrollDirectionValue(SCROLL_DIRECTION.RIGHT)] = lastVisible;\n break;\n case CONTAINER_DIRECTION.VERTICAL:\n scrollingStatus.directions[SCROLL_DIRECTION.UP] = firstVisible;\n scrollingStatus.directions[SCROLL_DIRECTION.DOWN] = lastVisible;\n break;\n default:\n /* Maybe should throw an exception */\n break;\n }\n } else {\n let containerWrapper = this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.SCROLLING_WRAPPER_CONTAINER);\n switch (direction) {\n case CONTAINER_DIRECTION.HORIZONTAL:\n if (0 === containerWrapper.scrollLeft) {\n scrollingStatus.directions[SCROLL_DIRECTION.LEFT] = false;\n } else {\n scrollingStatus.directions[SCROLL_DIRECTION.LEFT] = true;\n }\n if (containerWrapper.scrollLeft >= containerWrapper.scrollWidth - containerWrapper.clientWidth || 0 === containerWrapper.clientWidth) {\n scrollingStatus.directions[SCROLL_DIRECTION.RIGHT] = false;\n } else {\n scrollingStatus.directions[SCROLL_DIRECTION.RIGHT] = true;\n }\n break;\n case CONTAINER_DIRECTION.VERTICAL:\n if (0 === containerWrapper.scrollTop) {\n scrollingStatus.directions[SCROLL_DIRECTION.UP] = false;\n } else {\n scrollingStatus.directions[SCROLL_DIRECTION.UP] = true;\n }\n if (containerWrapper.scrollTop >= containerWrapper.scrollHeight - containerWrapper.clientHeight) {\n scrollingStatus.directions[SCROLL_DIRECTION.DOWN] = false;\n } else {\n scrollingStatus.directions[SCROLL_DIRECTION.DOWN] = true;\n }\n break;\n default:\n /* Maybe should throw an exception */\n break;\n }\n }\n\n Object.keys(scrollingStatus.directions).forEach((key) => {\n if (false === scrollingStatus.isScrollExist && true === scrollingStatus.directions[key]) {\n scrollingStatus.isScrollExist = true;\n }\n });\n return scrollingStatus;\n }\n\n\n /**\n * Subscribe to arrows click\n * @private\n */\n _subscribeToArrowsClick() {\n this._arrowDOMEvents = [];\n this._arrowDOMEvents.push(DOM.onDOMElementEvent(this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.LEFT_ARROW), USER_EVENTS.ON_CLICK, () => {\n this._scrollTo(SCROLL_DIRECTION.LEFT);\n }));\n this._arrowDOMEvents.push(DOM.onDOMElementEvent(this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.RIGHT_ARROW), USER_EVENTS.ON_CLICK, () => {\n this._scrollTo(SCROLL_DIRECTION.RIGHT);\n }));\n this._arrowDOMEvents.push(DOM.onDOMElementEvent(this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.UP_ARROW), USER_EVENTS.ON_CLICK, () => {\n this._scrollTo(SCROLL_DIRECTION.UP);\n }));\n this._arrowDOMEvents.push(DOM.onDOMElementEvent(this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.DOWN_ARROW), USER_EVENTS.ON_CLICK, () => {\n this._scrollTo(SCROLL_DIRECTION.DOWN);\n }));\n }\n\n\n /**\n * Calculate scrolling size, according to component direction\n * @returns {number|*}\n * @private\n */\n _getScrollingSize(steps) {\n let itemDimensions = this._getItemDimensions();\n let containerDirection = this._model.getDirection();\n let scrollSize = containerDirection === CONTAINER_DIRECTION.HORIZONTAL ? itemDimensions.fullWidth : itemDimensions.fullHeight;\n return scrollSize * (steps || this._model.getScrollingStep());\n }\n\n\n /**\n * Scroll items into the container\n * @param direction\n * @param container\n * @param item\n * @param steps\n * @private\n */\n _scrollTo(direction, steps) {\n if (this._model.getIsSwiper() === true) {\n let item = this._getSwipeItemByDirection(direction);\n this._swipeToActive(item);\n } else {\n let scrollingSize = this._getScrollingSize(steps);\n this.logger.debug('ScrollingSize = ' + scrollingSize);\n return this._smoothScrolling(direction, scrollingSize, this._getDOMElementByClassName(SCROLLABLE_CONTAINER_CLASSES.SCROLLING_WRAPPER_CONTAINER));\n }\n }\n\n\n _getSwipeItemByDirection(direction) {\n direction = this._getScrollDirectionValue(direction);\n let itemIndex = -1;\n switch (direction) {\n case SCROLL_DIRECTION.LEFT:\n itemIndex = this._swiper.activeItem - 1;\n break;\n case SCROLL_DIRECTION.RIGHT:\n itemIndex = this._swiper.activeItem + 1;\n break;\n case SCROLL_DIRECTION.UP:\n itemIndex = this._swiper.activeItem - 1;\n break;\n case SCROLL_DIRECTION.DOWN:\n itemIndex = this._swiper.activeItem + 1;\n break;\n default:\n /* Maybe should throw an exception */\n break;\n }\n\n return this._getItemBoundaries(itemIndex);\n }\n\n /**\n * Scroll with smooth animation\n * @param direction\n * @param scrollSize\n * @param container\n * @param duration\n * @param smooothLevel\n * @private\n */\n _smoothScrolling(direction, scrollSize, container) {\n return new Promise((res) => {\n let smoothLevel = 20;\n let stepInterval = Math.ceil(this._model.getScrollingDuration() / smoothLevel); // 1000 / 20 = 50\n let restSize = scrollSize;\n let scrollStepSize = Math.ceil(scrollSize / smoothLevel); // 100 / 50 = 2 (0.5 rest)\n\n let scrollStepFn = () => {\n scrollSize = restSize > scrollStepSize ? scrollStepSize : restSize;\n switch (direction) {\n case SCROLL_DIRECTION.LEFT:\n container.scrollLeft -= scrollSize;\n break;\n case SCROLL_DIRECTION.RIGHT:\n container.scrollLeft += scrollSize;\n break;\n case SCROLL_DIRECTION.UP:\n container.scrollTop -= scrollSize;\n break;\n case SCROLL_DIRECTION.DOWN:\n container.scrollTop += scrollSize;\n break;\n default:\n /* Maybe should throw an exception */\n break;\n }\n restSize -= scrollSize;\n if (0 < restSize) {\n DOM.setTimeout(scrollStepFn, stepInterval);\n } else {\n this.logger.debug('Finished scrolling');\n this._changeArrowVisibility();\n res();\n }\n };\n scrollStepFn();\n // DOM.setTimeout(scrollStepFn, stepInterval);\n });\n\n }\n\n\n /**\n * Disable scrolling and add appropriate style\n */\n lock() {\n if (this._arrowDOMEvents) {\n this._arrowDOMEvents.forEach(subscription => subscription.remove());\n }\n\n DOM.addClass(this.getEl(), 'cgp-sc-lock');\n }\n\n\n onSizeChanged() {\n this._changeArrowVisibility();\n }\n\n\n /**\n * Remove item from container by index\n * @param itemIndex\n */\n removeItem(itemIndex, animationOn = true) {\n let items = this._model.getItems();\n if (!items || items.length - 1 < itemIndex) {\n return Promise.reject();\n }\n return new Promise((res) => {\n let removedItem = items[itemIndex];\n this._removeItemHandler(itemIndex, removedItem, res, animationOn);\n });\n }\n\n\n _removeItemHandler(index, itemEl, resolver, animationOn = true) {\n if (animationOn) {\n let cleanFn = DOM.onDOMEvent(itemEl, 'animationend', () => {\n DOM.setTimeout(() => {\n this._removeItem(index, itemEl);\n // TO DO - _domEventsSubscriptions is a private member. It should not be accessed like this\n this._domEventsSubscriptions.forEach(domEvent => {\n domEvent.remove();\n this.logger.debug('Detach animationend event from item');\n this._onItemRemoved(index, resolver);\n });\n }, 0);\n });\n // TO DO - _domEventsSubscriptions is a private member. It should not be accessed like this\n this._domEventsSubscriptions = [cleanFn];\n DOM.toggleClass(itemEl, 'cgp-sc-removed-item');\n } else {\n this._removeItem(index, itemEl);\n this._onItemRemoved(index, resolver);\n }\n }\n\n\n _onItemRemoved(index, resolver) {\n if (this._model.getIsSwiper()) {\n this._swiper.activeItem = index - 1 > -1 ? index - 1 : 0;\n if (this._model.getItems().length === 1) {\n // remove swiper styles\n this._removeSwiperView();\n }\n this._setScrollerStyles();\n resolver(this._swiper.activeItem);\n } else {\n this._setScrollerStyles();\n resolver();\n }\n }\n\n _removeItem(index, itemEl) {\n DOM.removeElement(this._getItemsContainer(), itemEl);\n this._model.getItems().splice(index, 1);\n }\n\n\n /**\n * Handle on touch event\n * Set swiper start and last position\n * @param e\n * @private\n */\n _onTouchStart(e) {\n let clientX = e.touches && e.touches.length > 0 ? e.touches[0].clientX : e.clientX;\n // console.log('TOUCH', 'touchstart XPosition = ' + clientX);\n this._swiper.startPosition = clientX;\n this._swiper.lastPosition = this._swiper.startPosition;\n this._swiper.stopScrolling = false;\n }\n\n /**\n * Handle on touch end event\n * @param e\n * @private\n */\n _onTouchEnd() {\n this._swiper.startPosition = 0;\n let activeItem = this._getActiveItemIndexByTransform();\n this._swipeToActive(activeItem);\n }\n\n\n _swipeToActive(activeItem) {\n if (activeItem) {\n this._swipeTo(activeItem.position)\n .then(() => {\n this._activeDot(activeItem.index);\n //console.log('TOUCH', 'Active item index = ' + activeItem.index);\n if (activeItem.index !== this._swiper.activeItem) {\n this._swiper.activeItem = activeItem.index;\n this.onActiveChanged && this.onActiveChanged(this._swiper.activeItem);\n this._changeArrowVisibility();\n }\n });\n }\n }\n\n _getItemBoundaries(itemIndex) {\n let item = this._swiper.itemsBoundaries.find((itemBoundary) => {\n return itemIndex === itemBoundary.index;\n });\n return item;\n }\n\n\n /**\n * @param (index: number) => void\n */\n onActiveChanged = undefined;\n\n\n /**\n * Swipe container to specified position\n * @param position\n * @private\n */\n _swipeTo(position) {\n return new Promise((res) => {\n let multiplier = 1;\n if (position < this._swiper.transform) {\n multiplier = -1; // right\n\n }\n\n let velocity = this._getItemDimensions().fullWidth / 500; //315rem per second\n let intervalTime = 20;\n let stepSize = velocity * intervalTime;\n let requestId;\n let stepFn = () => {\n if (this._swiper.transform === position) {\n if (requestId) {\n window.cancelAnimationFrame(requestId);\n }\n return res();\n }\n let step = stepSize * multiplier;\n let nextPosition = this._swiper.transform + step;\n if (multiplier < 0 && nextPosition < position ) { // right stop condition\n this._swiper.transform = position;\n } else if (multiplier > 0 && nextPosition > position) { // left stop condition\n this._swiper.transform = position;\n } else {\n this._swiper.transform += step;\n }\n this._setTransform();\n //timeoutRef = DOM.setTimeout(stepFn, intervalTime);\n requestId= window.requestAnimationFrame(stepFn);\n };\n stepFn();\n });\n }\n\n\n _getActiveItemIndexByTransform() {\n let transform = this._swiper.transform;\n let item = this._swiper.itemsBoundaries.find((itemBoundary) => {\n let predicate = itemBoundary.left >= transform && itemBoundary.right <= transform;\n return predicate;\n });\n return item;\n }\n\n\n _onTouchMove(e) {\n if (this._swiper.stopScrolling === true) {\n return;\n }\n\n if (this._swiper.startPosition === 0) {\n return; // not started\n }\n\n let movePosition = e.touches && e.touches.length > 0 ? e.touches[0].clientX : e.clientX;\n //console.log('TOUCH', ' touchmove XPosition = ' + movePosition);\n let multiplier = 1;\n let moveDistance = Math.abs(this._swiper.lastPosition - movePosition);\n //console.log('TOUCH', ' touchmove moveDistance = ' + moveDistance);\n if (this._swiper.lastPosition > movePosition) {\n //transform right\n multiplier = -1;\n }\n this._swiper.lastPosition = movePosition;\n\n let prevActualDistance = this._swiper.actualDistance;\n this._swiper.actualDistance = Math.abs(this._swiper.startPosition - movePosition);\n //console.log('TOUCH', ' touchmove actualDistance = ' + this._swiper.actualDistance);\n // stop transform\n if (this._swiper.maxDistance < this._swiper.actualDistance) {\n this._swiper.actualDistance = this._swiper.maxDistance;\n //console.log('TOUCH', ' touchmove maxDistanceLimit');\n moveDistance = this._swiper.maxDistance - prevActualDistance; // step\n // console.log('TOUCH', ' touchmove change move distance to = ' + moveDistance);\n this._swiper.transform += moveDistance * multiplier;\n this._setTransform();\n this._swiper.stopScrolling = true;\n return;\n }\n let transform = this._swiper.transform + moveDistance * multiplier;\n if (this._swiper.transformBounders.leftBounder < transform) {\n //console.log('TOUCH', ' touchmove Left boundaries limit, transform = ' + transform);\n this._swiper.transform = this._swiper.transformBounders.leftBounder;\n this._setTransform();\n this._swiper.stopScrolling = true;\n return;\n // this._swiper.actualDistance = Math.abs(this._swiper.startPosition - this._swiper.actualDistance\n }\n if (this._swiper.transformBounders.rightBounder > transform) {\n //console.log('TOUCH', ' touchmove Right boundaries limit, transform = ' + transform);\n this._swiper.transform = this._swiper.transformBounders.rightBounder;\n this._setTransform();\n this._swiper.stopScrolling = true;\n return;\n }\n // calculate transform\n this._swiper.transform += moveDistance * multiplier;\n this._setTransform();\n }\n\n\n /**\n * Add dots for swipe items\n * @returns {ScrollableContainerController}\n * @private\n */\n _appendDots() {\n let items = this._model.getItems();\n let dotContainer = this._getDOMElementByClassName('cgp-cs-items-dots');\n // clear previous child elements\n while (dotContainer.firstChild) {\n dotContainer.removeChild(dotContainer.firstChild);\n }\n for(let index = 0; index < items.length; index++) {\n let dotEl = DOM.createElement();\n DOM.addClass(dotEl, 'cgp-item-dot');\n DOM.addClass(dotEl, 'cgp-themes-item-dot');\n DOM.append(dotContainer, dotEl);\n }\n return this;\n }\n\n\n _activeDot(index) {\n let dotContainer = this._getDOMElementByClassName('cgp-cs-items-dots');\n let dots = dotContainer.children;\n for (let i = 0; i < dots.length; i++) {\n if (i === index) {\n DOM.addClass(dots[i], 'cgp-sc-dot-active');\n } else {\n DOM.removeClass(dots[i], 'cgp-sc-dot-active');\n }\n }\n }\n\n\n /**\n * Clear allocated styles\n */\n shutDown() {\n super.shutDown();\n this.logger.debug('Shut down');\n }\n}\n\nexport default ScrollableContainerController;","import BaseComponent from '../../../../base/base_component';\nimport {SYSTEM_EVENTS} from '../../../../events/events';\nimport Event from '../../../../utils/event';\n\nclass BaseLayout extends BaseComponent {\n /**\n * @override\n */\n _layoutTypes;\n\n\n /**\n *\n * @param params\n */\n init(params) {\n super.init();\n }\n\n /**\n * Send analytic data specified on layout environment\n *\n * @private\n */\n _sendAnalytics({category='Client_LoginPost', action}) {\n let analyticObj = Object.assign({}, {category: category, action: action});\n if ('game' === this._stepParent.getEnvironment()) {\n analyticObj.category = this._model.getIsReal() ? 'Client_GameFrame_Real' : 'Client_GameFrame_Anonymous';\n analyticObj.label = this._model.getGameType() + '_' + this._model.getGameName().replace(/ /g, '');\n }\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticObj);\n }\n}\n\nexport default BaseLayout;","import ExternalLinksBaseHandler from '../external_links_base_handler';\nimport {MEMBERSHIP_POST_ACTIONS} from \"../membership/external_links_membership_handler_consts\";\nimport {POST_ACTIONS} from \"../../../../events/post_actions\";\n\n\n/**\n * Handler for FYP\n */\nclass ExternalLinksForgotHandler extends ExternalLinksBaseHandler {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ExternalLinksForgotHandler';\n static HandlerName = 'forgot';\n\n /**\n * Overrides base class\n * @param postMessageData\n */\n executePostMessageAction(postMessageData) {\n switch (postMessageData.ActionId.toString()) {\n case '3':\n if (postMessageData.message === 'close') {\n this.close();\n }\n break;\n case MEMBERSHIP_POST_ACTIONS.SHOW_LOGIN:\n //Close FYP window and open web login\n this.close(POST_ACTIONS.CLOSE);\n this._handleOpenWebLogin();\n break;\n\n default:\n // maybe should throw an Exception here\n break;\n }\n }\n\n\n getHandlerName() {\n return ExternalLinksForgotHandler.HandlerName;\n }\n\n}\n\nexport default ExternalLinksForgotHandler;","import {FP_VOUCHER_TYPES} from '../../../services/free_play/free_play_consts';\nimport { IFreePlayVoucher } from '../../../services/free_play/Free_play_voucher';\nimport FreePlayVoucherComponentController from './free_play_voucher_component_controller';\n\nexport const VOUCHER_STATE = {\n INIT: 'Init',\n INFO: 'Info',\n GAMES: 'Games'\n};\n\nexport const VOUCHER_VIEW = require('./view/free_play_voucher.html');\n\nexport const EXPIRATION_TYPE = {\n TIME: 'time',\n DAY: 'day',\n EXPIRED: 'expired'\n};\n\nexport const CSS_CLASSES = {\n VOUCHER_EXPIRATION_CLASS: 'cgp-fp-expiration',\n VOUCHER_INFO_SELECTOR: 'cgp-fp-info-img',\n VOUCHER_CLOSE_SELECTOR: 'cgp-fp-close-img',\n VOUCHER_NEW_CLASS: 'cgp-fp-new-wrapper',\n VOUCHER_EXPIRATION_SOON_CLASS: ['cgp-theme-property-color-base04', 'cgp-theme-property-font-type-secondary'],\n VOUCHER_EXPIRATION_DAY: 'cgp-theme-property-color-base01',\n VOUCHER_EXPIRED_CLASS: 'cgp-fp-expired',\n VOUCHER_CONTAINER_CLASS: 'cgp-fp-voucher-container',\n VOUCHER_CONTAINER_SELECTOR: '.cgp-fp-voucher-container'\n};\n\nexport const TRANSLATIONS = {\n VOUCHER_NAME: 'free_play_voucher_name_',\n VOUCHER_DESC: 'free_play_voucher_desc_',\n VOUCHER_REWARDS_AMOUNT: 'free_play_voucher_reward_amount',\n VOUCHER_REWARDS_BALANCE: 'free_play_voucher_reward_balance',\n VOUCHER_BALANCE_PREFIX: 'free_play_voucher_balance_prefix',\n VOUCHER_EXPIRATION: 'free_play_expires_in_'\n};\n\nexport const FP_VOUCHER_TYPE_NAMES = {\n [FP_VOUCHER_TYPES.FreeSpin]: 'FSV',\n [FP_VOUCHER_TYPES.FreePlay]: 'FPV',\n [FP_VOUCHER_TYPES.FreeJackpotSpin]: 'JPFSV',\n [FP_VOUCHER_TYPES.FreeJackpotPlay]: 'JPFPV'\n};\n\nexport const FP_VOUCHER_ICONS_CLASSES = {\n [FP_VOUCHER_TYPES.FreeSpin]: 'cgp-themes-icons-fp-voucher-free-spin',\n [FP_VOUCHER_TYPES.FreePlay]: 'cgp-themes-icons-fp-voucher-free-play',\n [FP_VOUCHER_TYPES.FreeJackpotSpin]: 'cgp-themes-icons-fp-voucher-jackpot-free-spin',\n [FP_VOUCHER_TYPES.FreeJackpotPlay]: 'cgp-themes-icons-fp-voucher-jackpot-free-play'\n};\n\nexport const FP_VOUCHER_BACKGROUND_CLASSES = {\n [FP_VOUCHER_TYPES.FreeSpin]: 'cgp-themes-icons-fp-voucher-bg-free-spin',\n [FP_VOUCHER_TYPES.FreePlay]: 'cgp-themes-icons-fp-voucher-bg-free-play',\n [FP_VOUCHER_TYPES.FreeJackpotSpin]: 'cgp-themes-icons-fp-voucher-bg-jackpot-free-spin',\n [FP_VOUCHER_TYPES.FreeJackpotPlay]: 'cgp-themes-icons-fp-voucher-bg-jackpot-free-play'\n};\n\nexport type IAlteredFreePlayVoucher = IFreePlayVoucher & {\n isNew: boolean;\n component?: FreePlayVoucherComponentController;\n games: number[];\n};\n","/**\n * Created by andreyna on 8/16/2017.\n */\nexport const FP_INDICATOR_CLASSES = {\n COMPONENT: 'cgp-fp-indicator-component',\n ICON: 'cgp-fp-indicator',\n ACTIVE: 'cgp-fp-indicator-active',\n STATE_TEMPLATE: 'cgp-fp-indicator-state-',\n STATE_DISABLED: 'cgp-fp-indicator-state-disabled',\n STATE_ENABLED: 'cgp-fp-indicator-state-enabled',\n ICON_ENABLED_BACKGROUND: 'cgp-theme-property-icons-fp-enabled',\n ICON_SELECTED_BACKGROUND: 'cgp-theme-property-icons-fp-selected',\n ICON_DISABLED_BACKGROUND: 'cgp-theme-property-icons-fp-disabled',\n}\n\nexport const FREE_PLAY_FILTER_CONSTRAINTS = {\n FREE_PLAY_EXIST: 'exist',\n NEW: 'new',\n CONTAINS_GAME: 'game'\n}\n\nexport const DISPLAY_CONSTRAINT = FREE_PLAY_FILTER_CONSTRAINTS.FREE_PLAY_EXIST;\n","/**\n * created by Felicia Dumitrache\n */\nimport BaseComponent from \"../../base/base_component\";\n\nexport default class GameHostComponent extends BaseComponent{\n\n /**\n * @type {string}\n */\n static CLASS = \"GameHostComponent\";\n\n /**\n * @type {string}\n */\n static DIRECTIVE = \"cgp-directive-game_host\";\n\n /**\n * game type received in params on init\n * @type {String}\n * @private\n */\n _gameType = null;\n\n init(params={}){\n super.init(params);\n this._gameType = params.gameType;\n }\n\n /**\n * tries open game\n * @returns {GameHostComponent}\n */\n start(){\n this.openGame();\n return this;\n }\n\n /**\n * call game service to open demo game\n * set style for centering the game after game loaded\n */\n openGame(){\n this.serviceFactory.gameService().openAnonymousGame({\n gameType: this._gameType,\n skipShowGame: true,\n isReal: false,\n forceLogin: false\n }).then(gameOptions => {\n this.serviceFactory.structuredLoggingService().getLogger({\n eventName: 'OPENING_ANONYMOUS_GAME_BY_GAME_HOST',\n gameType: this._gameType\n }).info();\n this.appendChildComponent(gameOptions.gameBody);\n });\n }\n}","import BaseService from '../../base/base_service';\nimport _ from '../../utils/underscore';\nimport IConfigService from './config_service_interface';\n\nconst STOP_CONFIGS: string[] = []; //ex.[\"defaults.logLevel\", \"Language.iso3\", \"Initialize.logLevel\"]\n\nclass ConfigService extends BaseService implements IConfigService{\n\n static CLASS: string = 'ConfigService';\n private _configs: any[] = [];\n\n init(params) {\n super.init(params);\n if (this._configs.length === 0) {\n this._pushQueryStringParameters();\n }\n }\n\n //Push parameters coming from query String as highest priority\n private _pushQueryStringParameters(): void {\n const queryParams = this._convertToObject(_.getQueryParameters());\n\n this._pushConfig(9999, this._cleanConfig(queryParams));\n\n }\n\n private _convertToObject(params: any): any {\n const obj = {};\n\n Object.keys(params).forEach(param=> {\n const val = params[param];\n const miniObj = param.split('.').reduceRight((prev, key, idx, arr)=> {\n const newObj = {};\n newObj[key] = prev;\n\n if (idx === arr.length - 1) {\n newObj[key] = val;\n }\n\n return newObj;\n }, {});\n\n _.mergeDeep(obj, miniObj);\n });\n\n return obj;\n }\n\n private _pushConfig(level: number, config: any): any[] {\n if (this._configs[level]) {\n throw new Error(\"Config Level already set!\");\n }\n this._configs[level] = config;\n return this._configs;\n }\n\n private _cleanConfig(config: any) {\n STOP_CONFIGS.forEach(stop => {\n config = this._deleteByPath(config, stop);\n });\n return config;\n }\n\n private _deleteByPath(object: any, path: string): any {\n let currentObject = object;\n const nestedProperties = path.split(\".\");\n const lastProperty = nestedProperties.pop();\n for (const property of nestedProperties) {\n currentObject = currentObject[property];\n if (!currentObject) {\n return;\n }\n }\n delete currentObject[lastProperty];\n return object;\n }\n\n //Setter User Config from CGP.initialize({}).\n public setUserConfig(config: any): void {\n this._pushConfig(1, this._cleanConfig(config));\n }\n\n //Setter Config from Server Configurations\n public setDefaultConfig(config: any): void {\n this._pushConfig(0, config);\n }\n\n //Get merged Configs\n public getConfig(): any {\n const configValues = Object.keys(this._configs).map(key => this._configs[key]);\n\n configValues.unshift({});\n\n return _.mergeDeep.apply(_, configValues);\n }\n}\n\nexport default ConfigService;","import BaseComponent from './base_component';\nimport { ToasterHandler } from '../services/toaster/toaster_handler';\nimport IToasterOptions from '../services/toaster/toaster_options_interface';\nimport _ from '../utils/underscore';\n\nexport default class ToasterBaseComponent extends BaseComponent {\n static CLASS = 'ToasterBaseComponent';\n\n protected _toasterHandler: ToasterHandler = null;\n\n showAsToaster(options: IToasterOptions = {}) {\n \n const mergedOptions: IToasterOptions = {...options};\n\n const merge2Func = (fn1: () => void, fn2?: () => void) => {\n return () => {\n if (_.isFunction(fn1)) {\n fn1();\n }\n if (_.isFunction(fn2)) {\n fn2();\n }\n };\n };\n\n mergedOptions.onOpened = merge2Func(this._onOpened.bind(this), options.onOpened);\n mergedOptions.onClosed = merge2Func(this._onClosed.bind(this), options.onClosed);\n mergedOptions.onClicked = merge2Func(this._onClicked.bind(this), options.onClicked);\n\n this._toasterHandler = this.serviceFactory.toasterService().showToasterFromComponent(this, mergedOptions);\n }\n\n closeToaster() {\n if (this._toasterHandler) {\n this._toasterHandler.close();\n }\n }\n\n protected _onOpened() {\n }\n\n protected _onClicked() {\n }\n\n protected _onClosed() {\n }\n}\n","/**\n * Created by andreyna on 6/13/2016.\n */\nimport BaseModelComponent from '../../../base/base_model_component';\n\nclass BaseOptionsModel extends BaseModelComponent {\n\n _options = {};\n\n /**\n * get application settings options\n * Object contains of 'reminder property'\n * @returns {object}\n */\n getOptions() {\n return this._options;\n }\n\n /**\n * set / update selected object in the model\n *\n * @param {string} value\n * @returns {bool}\n */\n setOptions(options) {\n\n }\n}\n\nexport default BaseOptionsModel\n\n","import GameStepBase, {createGameFlowCancelResponse} from './game_step_base';\nimport _ from '../../../utils/underscore';\nimport RestrictionMessages from \"../../restrictions/messages/restriction_messages\";\n\nexport default class RestrictionsGameStep extends GameStepBase {\n static CLASS = 'RestrictionsGameStep';\n\n init(params) {\n super.init(params);\n if(_.isNullOrUndefined(params.isReal)) {\n this.throwArgumentExpected('11', 'init', 'isReal');\n }\n\n this._isReal = params.isReal;\n }\n\n run(gameOptions) {\n if(this._isReal) {\n // after login we need to update the gameInfo inside the gameOptions to get a gameInfo with updated restrictions\n return this.serviceFactory.gamesInformationService().getGamesInfo([gameOptions.gameType])\n .then(gamesInfo => gamesInfo[gameOptions.gameType])\n .then(gameInfo => {\n if(gameInfo) {\n Object.assign(gameOptions, {\n gameInfo: gameInfo\n });\n } else {\n this._showGenericRestrictionMessage();\n this.logger.warn(`Game type ${gameOptions.gameType} not returned from getGameInfo so show generic restricted message`);\n throw createGameFlowCancelResponse('Game restricted');\n }\n\n if(gameOptions.gameInfo.restriction.isGameAllowedToPlayReal()) {\n return gameOptions;\n } else {\n this.logger.warn(`Game type ${gameOptions.gameType} is restricted`);\n gameOptions.gameInfo.restriction.showUserMessage();\n throw createGameFlowCancelResponse('Game restricted');\n }\n });\n }\n\n return Promise.resolve(gameOptions);\n }\n\n _showGenericRestrictionMessage() {\n return RestrictionMessages.create({\n serviceFactory: this.serviceFactory\n }).showGenericMessage();\n }\n}","import BaseObject from '../../../base/base_object';\nimport {SYSTEM_EVENTS} from '../../../events/events';\nimport Event from '../../../utils/event';\nimport DateFormatter from '../../../utils/date_formatter';\nimport ServiceFactory from '../../service_factory';\nimport IRestrictionMessages from './restriction_messages_interface';\n\nconst DEFAULT_DATETIME_FORMATTING = 'dd.mm.yyyy H:MM';\n\nexport default class RestrictionMessages extends BaseObject implements IRestrictionMessages{\n static CLASS = 'GenericRestrictionMessage';\n private _serviceFactory: ServiceFactory;\n\n init(params) {\n super.init(params);\n this._serviceFactory = params.serviceFactory;\n }\n\n public showGenericMessage(): void {\n Event.fire(SYSTEM_EVENTS.MESSAGE_OPEN, {\n text: this._serviceFactory.languageService().translation('100200'),\n customCSSClassList: ['cgp-mdp-text-support-slash-n'],\n type: 'error',\n analytic: {category: 'Client_RestrictionError'}\n });\n }\n\n public showSessionLimitMessage(expirationDate: any): void {\n Event.fire(SYSTEM_EVENTS.MESSAGE_OPEN, {\n title: this._serviceFactory.languageService().translation('slots_self_restriction_title'),\n text: this._serviceFactory.languageService().translation('slots_self_restriction_message', {\n restrictionExpirationDate: this._formatDate(expirationDate)\n }),\n type: 'error',\n analytic: {category: 'Client_SelfRestrictionError'}\n });\n }\n\n private _formatDate(date: any) {\n return DateFormatter.format(date, this._serviceFactory.skinService().getDateTimeFormat() || DEFAULT_DATETIME_FORMATTING);\n }\n}","/**\n * Created by andreyna on 2/23/2017.\n */\nconst PENDING_ACTIONS = {\n EXTERNAL_LINK: 'external_link',\n GAME: 'game'\n};\n\nexport {PENDING_ACTIONS};","const TYPES = {\n FLAT: 0,\n FULL_SCREEN: 1\n};\n\nexport { TYPES };","import BaseComponent from '../../../../base/base_component';\nimport {BaseComponentParams} from \"../../../../base/base_component_interface\";\nimport ClockComponentController from \"../../../clock/clock_controller_component\";\nimport Device from \"../../../../utils/device/device\";\nimport DOM from '../../../../utils/dom';\nimport GameSessionTimerController from \"../../../game_session_timer/game_session_timer_controller\";\nimport NetPositionController from \"../../../net_position/net_position_controller\";\n\nconst templateView = require('./view/view.html');\nexport const UK_STRIP_COMPONENT_SELECTOR = 'cgp-uk-stripe-component';\n\ninterface IUkGameStripeComponentParams extends BaseComponentParams{\n gameType: number;\n}\n\nexport default class UkGameStripeComponent extends BaseComponent {\n static CLASS = 'UkGameStripeComponent';\n\n _selector = UK_STRIP_COMPONENT_SELECTOR;\n\n _netPositionController: NetPositionController = null;\n private params: IUkGameStripeComponentParams;\n\n init(params ) {\n params = params || {};\n\n params.innerHtml = templateView;\n super.init(params);\n\n this.params = params;\n\n this.start();\n }\n\n start() {\n super.start();\n\n const {gameType} = this.params;\n\n this._netPositionController = NetPositionController.create({gameType});\n const gameSessionTimer = GameSessionTimerController.create();\n\n this.appendChildComponent(this._netPositionController, '.cgp-stripe');\n\n if (Device.os.isMobileOS) {\n const clockComponentWrapper = this.createRootElement();\n\n DOM.addClass(clockComponentWrapper, 'cy-game-stripe-clock');\n clockComponentWrapper.appendChild(this._getClockComponent().getEl());\n\n this.querySelector('.cgp-stripe').appendChild(clockComponentWrapper);\n }\n\n this.appendChildComponent(gameSessionTimer, '.cgp-stripe');\n\n gameSessionTimer.start();\n\n return this;\n }\n\n onGameRoundEnd(){\n this._netPositionController?.onGameRoundEnd();\n }\n\n _getClockComponent() {\n const clockComponent = this.serviceFactory.componentFactoryService().createComponent(ClockComponentController, {\n datetime: this.serviceFactory.skinService().getTimeFormat()\n });\n\n clockComponent.start();\n\n return clockComponent;\n }\n}","import BaseComponent from \"../../../../../base/base_component\";\nimport {SYSTEM_EVENTS, USER_EVENTS} from \"../../../../../events/events\";\nimport {NAVIGATION_VIEWS} from \"../../../../external_links/external_links_consts\";\nimport Event from \"../../../../../utils/event\";\nlet view = require('./view/ontario_responsible_gaming_icons.html')\n\nexport default class OntarioResponsibleGamingIconsController extends BaseComponent {\n static CLASS = 'OntarioResponsibleGamingIconsController';\n\n start() {\n let bakedHTML = this.bake(view);\n this.setHTML(bakedHTML);\n this._subscribe();\n }\n\n _subscribe() {\n this.onDOMEvent(this.querySelector('.cgp-regulatory-button.cgp-ontario-safe-to-play-icon'), USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics('ontario_safe_to_play_icon_click');\n this.serviceFactory.openLinkService().openLink(\n {\n sourceLink: this.serviceFactory.skinService().getSafeToPlayURL(),\n view: NAVIGATION_VIEWS.WINDOW\n }\n );\n });\n }\n\n _sendAnalytics(label) {\n const analyticObject = {\n category: 'Navigation',\n action: 'Header',\n label: 'Icon_' + label\n };\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticObject);\n }\n}\n","export const ICONS = {\n PANIC: 'PANIC',\n GAME_LIMIT: 'GAME_LIMIT',\n SELF_TEST: 'SELF_TEST'\n}\n\nexport const ICON_TYPE = {\n SYMBOL: 'symbol',\n TEXT: 'text'\n}\n\nexport const ICON_TYPE_CSS_SELECTOR = {\n [ICON_TYPE.SYMBOL]: 'cgp-themes-sw-resp-icon-type-symbol',\n [ICON_TYPE.TEXT]: 'cgp-themes-sw-resp-icon-type-text'\n}","import BaseRegulation from \"../base_regulation\";\n\nexport default abstract class COMBaseRegulation extends BaseRegulation{\n static CLASS = 'COMBaseRegulation';\n}","import BaseRegulation from '../base_regulation';\nimport SessionTimerController from \"../../../../components/session_timer/session_timer_controller\";\nimport LastLoginComponentController\n from \"../../../../components/regulation_components/base/last_login/last_login_component_controller\";\nimport {CLOCK_LOCALIZATION} from \"../../../clock/clock_service_consts\";\nimport LastLoginCompositeController\n from \"../../../../components/regulation_components/base/last_login/last_login_composite_controller\";\nimport Event from \"../../../../utils/event\";\nimport Device from \"../../../../utils/device/device\";\nimport {SYSTEM_EVENTS} from \"../../../../events/events\";\nimport { NAVIGATION_VIEWS } from '../../../../components/external_links/external_links_consts';\n\nexport default abstract class USBaseRegulation extends BaseRegulation {\n\n static CLASS = 'USBaseRegulation';\n\n /**\n * The time after which the Last Login is replaced with the Session Timer in UI\n */\n protected _switchToSessionTimerWaitInterval = null;\n\n\n protected abstract _getRegulationType(): number;\n\n init(params) {\n super.init(params);\n this._switchToSessionTimerWaitInterval = (params.switchToSessionTimerWaitInterval && params.switchToSessionTimerWaitInterval[this._getRegulationType()]) || 60000;\n if(!this.shouldRefreshTokenOnAppOpen() && this.serviceFactory.oAuth2Service().isAuthorized()) {\n this.serviceFactory.oAuth2Service().logout({\n shouldShowLogoutMessage: false\n });\n }\n }\n\n shouldRefreshTokenOnAppOpen(): boolean {\n return !Device.hybrid.inCasino || this.serviceFactory.integrationService().isMiniOrbit();\n }\n\n shouldHaveBetLimitsPerBrand(): boolean {\n return true;\n }\n\n onKickEvent(kickParams) {\n Event.fire(SYSTEM_EVENTS.GEO_KICK_EVENT, kickParams);\n }\n\n getLastLoginComponent(params) {\n let lastLoginComponent = LastLoginComponentController.create(params);\n let sessionTimerComponent = SessionTimerController.create();\n return LastLoginCompositeController.create({lastLoginComponent: lastLoginComponent, sessionTimerComponent: sessionTimerComponent, switchToSessionTimerWaitInterval: this._switchToSessionTimerWaitInterval});\n }\n\n hybridNyxClosedButtonEnabled(){\n return true;\n }\n\n\n sessionTimerVisible() {\n return true;\n }\n\n sessionTimerEnabled() {\n return true;\n }\n\n supportWithdrawOnlyFromReal() {\n return false;\n }\n\n getClockLocalization() {\n return CLOCK_LOCALIZATION.SERVER;\n }\n\n getExternalLinksConfig() {\n return {\n 'sport': {\n view: {\n hybrid: NAVIGATION_VIEWS.SECOND_WEB_VIEW\n }\n }\n };\n }\n\n private _getDetailedMessagesList(messages: string[]): string {\n return messages.join('\\n\\n');\n }\n}\n","import BaseObject from '../../../base/base_object';\nimport {KEY_NAME} from './native_const';\nimport _ from '../../../utils/underscore'; // eslint-disable-line id-length\n\n\n/**\n * The Native is responsible to sent the message to the correct hybrid(IOS,Android)\n * The Native create a unique temporary function on the main window(to save the context of the calback function).\n * The Native will delete the temporary function after he call it.\n */\nclass Native extends BaseObject {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'Native';\n\n\n /**\n * @property\n * @type {int}\n * @private\n */\n _idd = 0;\n\n _parent = null;\n\n\n /**\n * Get the function Id\n *\n * @returns {int} - Returns the next(unique) id\n */\n getID() {\n this._idd++;\n\n return 'hybridCallback' + this._idd;\n }\n\n /**\n * Entry point to recive calls from hybrid.\n *\n * @param parent: the HybridService;\n * @param params: parameters in json format.\n */\n initHybridDirectCall(parent) {\n this._parent = parent;\n window[KEY_NAME.HYBRID_CB_GLOBAL_NAME] = (params) => {\n params = this.getParams(params);\n this._parent.onHybridDirectCall(params);\n };\n }\n\n /**\n * Entry point to send calls for hybrid & back.\n *\n * @param serviceFuncName: the service name + function name for exp: WebView_Webshow:\n * WebView - service name.\n * WebShow - function name.\n * @param jsonParams: parameters in json format.\n * @returns {Promise}\n */\n msgToHybrid(serviceFuncName, jsonParams = {}) {\n return new Promise((resolve) => {\n let autoGeneratedCBID = this.getID();\n this.logger.info([\n 'Hybrid Call:',\n 'Request ID: ' + autoGeneratedCBID,\n 'Method: ' + serviceFuncName,\n 'Params: ' + JSON.stringify(jsonParams)\n ]);\n window[autoGeneratedCBID] = function(id, callback, self, serviceName) {\n return params => {\n params = self.getParams(params);\n let allParams = _.safeJSONandDecode(params);\n self.logger.info([\n 'Hybrid Response:',\n 'Request ID: ' + id,\n 'Service: ' + serviceName,\n 'Params: ' + allParams,\n 'Error: ' + allParams[KEY_NAME.ERROR]\n ]);\n callback(params);\n delete window[id];\n };\n }(autoGeneratedCBID, resolve, this, serviceFuncName);\n\n let extractFunctionName = this._extractFunctionConvenstion(serviceFuncName),\n payloadForHybrid = Object.assign({}, jsonParams, {\n [KEY_NAME.SRV]: extractFunctionName.service,\n [KEY_NAME.FUNC]: extractFunctionName.method,\n [KEY_NAME.FUNC_CB]: autoGeneratedCBID\n });\n this.callToHandler(payloadForHybrid);\n });\n }\n\n /**\n * Converts string name into a convention call. String input example: WEBVIEW_INIT\n * In this case Class is: WEBVIEW and method is INIT.\n *\n * @param {String} serviceFuncName - underscore seperated string\n * @returns {Object} - {service: {*}, method: {*}}\n * @private\n */\n _extractFunctionConvenstion(serviceFuncName) {\n let extractFunctionName = serviceFuncName.split('_');\n\n return {\n service: extractFunctionName[0],\n method: extractFunctionName[1]\n };\n }\n\n callToHandler() {\n }\n getParams(params) {\n return '';\n }\n}\n\nexport default Native;\n\n\n","import Native from './native';\n\n\n/**\n *\n *\n */\nclass NativeIOS extends Native {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'NativeIOS';\n static METHOD_NAME_IOS = 'cbCallBackHandlerCGP';\n\n\n /**\n *\n * @param json - parameters to hybrid\n * @public\n */\n callToHandler(json){\n\n json = JSON.stringify(json);\n\n window.webkit.messageHandlers[NativeIOS.METHOD_NAME_IOS].postMessage(json);\n\n return this;\n }\n\n getParams(params) {\n return params;\n }\n}\n\nexport default NativeIOS;\n\n\n","import Native from './native';\n\nclass NativeAndroid extends Native {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'NativeAndroid';\n static METHOD_NAME_IOS = 'cbCallBackHandlerCGP';\n\n /**\n *\n * @param json - parameters to hybrid\n * @public\n */\n callToHandler(json = {}) {\n json = JSON.stringify(json);\n window.WrapperInterfaceCGP[NativeAndroid.METHOD_NAME_IOS](json);\n }\n\n getParams(params) {\n return encodeURIComponent(params);\n }\n}\n\nexport default NativeAndroid;\n\n\n","import Native from './native';\n\n\n/**\n *\n *\n */\nclass NativeIOSPoker extends Native {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'NativeIOSPoker';\n static METHOD_NAME_IOS = 'cbCallBackHandlerCGP';\n\n\n /**\n *\n * @param json - parameters to hybrid\n * @public\n */\n callToHandler(json) {\n json = JSON.stringify(json);\n\n if(window.webkit.messageHandlers[NativeIOSPoker.METHOD_NAME_IOS]) {\n window.webkit.messageHandlers[NativeIOSPoker.METHOD_NAME_IOS].postMessage(json);\n }else{\n this.logger.error(\"NativeIOSPoker.METHOD_NAME_IOS not exist\");\n }\n return this;\n }\n\n getParams(params) {\n return params;\n }\n}\n\nexport default NativeIOSPoker;\n\n\n","import Native from './native';\n\n\n/**\n *\n *\n */\nclass NativeIOSSport extends Native {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'NativeIOSSport';\n static METHOD_NAME_IOS = 'cbCallBackHandlerCGP';\n\n\n /**\n *\n * @param json - parameters to hybrid\n * @public\n */\n callToHandler(json) {\n json = JSON.stringify(json);\n\n window.webkit.messageHandlers[NativeIOSSport.METHOD_NAME_IOS].postMessage(json);\n\n return this;\n }\n\n getParams(params) {\n return params;\n }\n}\n\nexport default NativeIOSSport;\n\n\n","import BaseObject from '../../base/base_object';\nimport NativeIOS from './native/native_ios';\nimport NativeAndroid from './native/native_android';\nimport NativeIOSPoker from './native/native_ios_poker';\nimport Device from '../../utils/device/device';\nimport NativeIOSSport from './native/native_ios_sport';\n\n\n\n/**\n *\n *\n */\nclass HybridFactory extends BaseObject {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'HybridFactory';\n\n\n getHybridWrapper() {\n if (!Device.hybrid.isHybrid) {\n return null;\n }\n if (Device.os.isAndroid) {\n this.logger.info('Create Native Android');\n return NativeAndroid.create();\n }\n if (Device.os.isIOS) {\n if (Device.hybrid.inPoker) {\n this.logger.info('Create Native IOS For Poker');\n return NativeIOSPoker.create();\n } else if (Device.hybrid.inSport) {\n this.logger.info('Create Native IOS For Sport');\n return NativeIOSSport.create();\n } else {\n this.logger.info('Create Native IOS');\n return NativeIOS.create();\n }\n }\n return null;\n }\n}\nexport default HybridFactory;","import BaseService from '../../base/base_service';\nimport HybridFactory from './hybrid_factory';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport {SERIVCES_PARAMS_LIST, SERIVCES_FUNC_LIST, KEY_NAME, LOCAL_HOST} from './native/native_const';\nimport DOM from '../../utils/dom';\nimport Device from '../../utils/device/device';\nimport Loader from '../../utils/module_loader';\nimport _ from '../../utils/underscore';\nimport {WEB_VIEW_IDS, WEB_VIEW_INFO} from \"./features/web_view_manager/web_view_manager_consts\";\nimport Event from \"../../utils/event\";\n\n\nconst ON_DEMAND_PORT = 8092;\n\n/**\n * The hybrid service initialise the correct hybrid(IOS,Android)\n * The service send messages to the hybrid.\n * The service receive messages from the hybrid - by promise\n *\n *\n */\nclass HybridService extends BaseService {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'HybridService';\n\n /**\n * @property\n * @type {class}\n * @private\n */\n _wrapper = null;\n _threedtouchfeature = null;\n _touchidfeature=null;\n _fabricfeature=null;\n _pushfeature=null;\n _ondemandfeature=null;\n _ondemandnyxfeature=null;\n _webviewmanagerfeature=null;\n _hybridinfofeature=null;\n _lexisnexisfeature=null;\n _depositwidgetfeature=null;\n _appflayerfeature=null;\n _firebasefeature=null;\n _bDisplayWebView=false;\n _allCompiledGamesMetadata = {};\n _nLocalHostPort=-1;\n _strSmartLinkData=null;\n\n\n\n\n /**\n *\n * @param params\n */\n init(params) {\n super.init(params);\n\n if (Device.hybrid.isHybrid) {\n this._initWrapper();\n this._initFeatures(params);\n this._subscribe();\n }\n\n if (Device.hybrid.isEmbedded) {\n this._updateHybridCompiledGames();\n }\n }\n\n\n _subscribe() {\n this.onSystemEvent(SYSTEM_EVENTS.ON_INIT_COMPLETE, this.initHybrid);\n this.onSystemEvent(SYSTEM_EVENTS.APP_RESUMED, this.onDisplayWebView);\n this.onSystemEvent(SYSTEM_EVENTS.HYBRID_ALERT, this.alert);\n this.onSystemEvent(SYSTEM_EVENTS.HYBRID_OPEN_MAIL, this.openMail);\n this.onSystemEvent(SYSTEM_EVENTS.CLOSE_GAME, this._closeGame);\n this.onSystemEvent(SYSTEM_EVENTS.LOADING_INDICATOR_EMBEDDED_CLOSED_BY_X, this._onStopProgressBar);\n }\n\n runAutologin(tokenParams) {\n this.serviceFactory.queryStringDetectorService().tokenHandler(tokenParams);\n }\n\n getThreeDTouchFeature() {\n return this._threedtouchfeature;\n }\n getTouchIDFeaturer() {\n return this._touchidfeature;\n }\n\n getPushFeature() {\n return this._pushfeature;\n }\n\n getOnDemandTimeOut() {\n return this._ondemandfeature ? this._ondemandfeature.getTimeOut() : 0;\n }\n\n /**\n * The parames can be stored on window support (for poker...)\n */\n _updateHybridCompiledGames(){\n let gamesMetadata = window['hybridCompiledGamesMetadata'];\n\n if(gamesMetadata !== undefined && 'object' === typeof(gamesMetadata)){\n let port = window['hybridLocalPort'];\n this.setCompiledGamesMetadata(gamesMetadata, port);\n }\n }\n\n /**\n * The games stored in map\"\n */\n\n setCompiledGamesMetadata(gamesMetadata, port) {\n this._allCompiledGamesMetadata = gamesMetadata;\n\n if (port) {\n this._nLocalHostPort = port;\n }\n }\n\n isGameApproved(gameType){\n return !this.isHybridSuportHtmlCompiledGames() || (this.isHybridSuportHtmlCompiledGames() && this.isCompiledHtmlGame(gameType));\n }\n\n /**\n * rerurn true if the hybrid support the \"Compiled Html Game\"\n */\n isCompiledHtmlGame(gameType) {\n return this._allCompiledGamesMetadata.hasOwnProperty(gameType);\n }\n\n /**\n * rerurn true if the hybrid support the \"OnDemand Html Game\"\n */\n isOnDemandHtmlGame(gameType) {\n\n if(this.isCompiledHtmlGame(gameType)){\n return 'true' === this._allCompiledGamesMetadata[gameType].ondemand;\n }\n\n return false;\n }\n\n navigateToOnDemandStandalone(gameType, companyName, url) {\n if (this.isOnDemandStandalone(gameType, companyName)) {\n if (this._ondemandnyxfeature && this._ondemandnyxfeature.navigate(companyName, url)) {\n return true;\n }\n }\n\n return false;\n }\n\n isOnDemandStandAloneGameRunning() {\n if (this._ondemandnyxfeature) {\n return this._ondemandnyxfeature.isOnDemandStandAloneGameRunning();\n }\n\n return false;\n }\n\n\n /**\n * rerurn true if the hybrid support OnDemand Standalon - Nyx is the first Standalone\"\n */\n isOnDemandStandalone(gameType, companyName) {\n\n if (Device.hybrid.isEmbedded && this.isOnDemandHtmlGame(gameType)) {\n\n if (this._ondemandnyxfeature && this._ondemandnyxfeature.canHandle(companyName)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * save the game in cookie\n */\n saveOnDemandLoadedGame(gameType, sharedFolder) {\n if (this._ondemandfeature) {\n this._ondemandfeature.saveOnDemandLoadedGame(gameType, sharedFolder);\n }\n }\n\n /**\n * ask if On Demand Game already Loaded\n */\n isDisplayLoadingIndicator(gameType) {\n if (!Device.hybrid.isEmbedded) {\n return true;\n }\n return this._ondemandfeature ? this._ondemandfeature.isOnDemandLoadedGame(gameType) : true;\n }\n\n /**\n * rerurn true Game Meta data\"\n */\n getCompiledGameMetadata(gameType) {\n if (!this.isCompiledHtmlGame(gameType)) {\n return null;\n }\n\n return this._allCompiledGamesMetadata[gameType];\n }\n\n\n /**\n * rerurn Game Version\"\n */\n getCompiledGameVersion(gameType) {\n if (!this.isCompiledHtmlGame(gameType)) {\n return null;\n }\n\n return this.getCompiledGameMetadata(gameType).version;\n }\n\n\n isHybridSuportHtmlCompiledGames(){\n return 0 < this._nLocalHostPort;\n }\n\n getOnDemandOrigin() {\n return `http://${window.location.hostname}:${ON_DEMAND_PORT}`;\n }\n\n getLocalHostAndPortForOnDemand(gameUrlBuilder, pathname){\n gameUrlBuilder.protocol = 'http:';\n gameUrlBuilder.host = window.location.hostname;\n gameUrlBuilder.port = ON_DEMAND_PORT.toString();\n gameUrlBuilder.pathname = pathname;\n return gameUrlBuilder.href;\n }\n\n prepareGameUrl(gameType, gameUrl, pathname = '') {\n let gameUrlBuilder = new URL(gameUrl);\n\n if (this.isCompiledHtmlGame(gameType) && this.isOnDemandHtmlGame(gameType)) {\n // All on demand games most be served form http and not https\n return this.getLocalHostAndPortForOnDemand(gameUrlBuilder, pathname);\n }\n\n return gameUrlBuilder.href;\n }\n\n /**\n * init the Hybrid Features\n *\n * @private\n */\n _initFeatures(params) {\n\n const reg = require.context('../../services/hybrid/features', true, /^.*(_hybrid_feature)\\.js$/);\n\n const loader = new Loader();\n const allFeatures = loader.getDefault(reg);\n\n allFeatures.forEach(feature => {\n try {\n let param = params ? params[feature.CLASS] : 'undefined';\n param = _.isString(param) ? _.safeJSON(param, '') : param;\n this.logger.info('load feature => ' + feature.CLASS);\n\n const fearureInstance = feature.create(param).initFeatures(this);\n this._saveFeature(feature.CLASS, fearureInstance);\n } catch (ex) {\n this.logger.error('Failed to load feature => ', feature);\n }\n });\n }\n\n /**\n * save the Feature reference dynamicly\n *\n * @private\n */\n _saveFeature(className, fearureInstance) {\n let name = ('_' + className + 'Feature').toLowerCase();\n this[name] = fearureInstance;\n }\n\n\n\n /**\n * init the current Wrapper & functions implementation\n *\n * @private\n */\n _initWrapper() {\n\n this._wrapper = HybridFactory.create().getHybridWrapper();\n\n if (null !== this._wrapper) {\n this._wrapper.initHybridDirectCall(this);\n }\n\n let data = {[KEY_NAME.HYBRID_CB]: KEY_NAME.HYBRID_CB_GLOBAL_NAME};\n this.msgToHybrid(SERIVCES_FUNC_LIST.GENERAL_SET_CB, data);\n\n return this;\n }\n\n onHybridUrlScheme(name, data) {\n\n let feature = this._getFeature(name);\n\n if (feature) {\n let dataDecode = _.safeJSONandDecode(data);\n feature.onHybridDirectCall(dataDecode);\n }\n }\n\n\n /**\n *\n * @param params\n */\n onHybridDirectCall(params) {\n\n let objParams = _.safeJSONandDecode(params);\n\n let error = objParams[KEY_NAME.ERROR];\n if (error !== 0) {\n return null;\n }\n\n let data = objParams[KEY_NAME.DATA];\n\n\n let feature = this._getFeature(data[KEY_NAME.HYBRID_CB_FEATURE_FUNC]);// .split('_')[0]);\n\n if (feature) {\n feature.onHybridDirectCall(data);\n }\n\n return undefined !== feature ? feature : null;\n }\n\n _getFeature(featureName) {\n let name = ('_' + featureName).toLowerCase();\n return this[name];\n }\n\n displayHybrid() {\n this._bDisplayWebView = true;\n this.onDisplayWebView();\n }\n\n onDisplayWebView() {\n\n if (this._bDisplayWebView) {\n\n if(this.getPushFeature() && this.getPushFeature().isEnable()) {\n this.getPushFeature().getPushActions()\n .then(data => {\n if(0 === data.length) {\n if(this.getThreeDTouchFeature()) {\n this._checkThreeDTouch();\n }\n }else {\n this._displayWebView();\n this._clearHybridDisplayTimeOut();\n }\n });\n } else if(this.getThreeDTouchFeature()) {\n this._checkThreeDTouch();\n }\n }\n }\n\n _clearHybridDisplayTimeOut() {\n if (this._webviewmanagerfeature) {\n this._webviewmanagerfeature.clearHybridDisplayTimeOut();\n }\n }\n\n _checkThreeDTouch(){\n this.getThreeDTouchFeature().getShortcutLaunch()\n .then(shortcut => {\n this.getThreeDTouchFeature().runAction(shortcut);\n this._displayWebView();\n this._clearHybridDisplayTimeOut();\n });\n }\n\n\n /**\n * int the hybrid.\n * return the active services.\n */\n initHybrid() {\n\n this.initOndemandfeature();\n\n this.onDisplayWebView();\n return this.msgToHybrid(SERIVCES_FUNC_LIST.GENERAL_INIT_HYBRID);\n }\n\n /**\n * Show the alert in native on top of webView.\n *\n * @param str - the string that will display in alert.\n * @returns {Promise}\n */\n alert(str) {\n let alertProperties = {[KEY_NAME.MSG]: str};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.GENERAL_ALERT, alertProperties);\n }\n\n /**\n * Show the alert in native on top of webView.\n *\n * @param str - the string that will display in alert.\n * @returns {Promise}\n */\n alertd(str) {\n let alertProperties = {[KEY_NAME.MSG]: str};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.GENERAL_ALERT_D, alertProperties);\n }\n\n\n setRotaion(rotation, bVal) {\n let data = {[KEY_NAME.ROTATION]: rotation, [KEY_NAME.FORCE]: bVal};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.GENERAL_SET_ROTATION, data);\n }\n\n openMail(txt) {\n let data = {[KEY_NAME.DATA]: txt, [KEY_NAME.MAIL_TO]: 'mailto:tablet.888casino@gmail.com?&body='};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.GENERAL_OPEN_MAIL, data);\n }\n\n openExternalLink(url) {\n\n let srcurl = url;\n url = this.convertToAbsoluteLink(url);\n\n if(Device.hybrid.isEmbedded){\n url = this.buildExternalLinkForEmbeddedHybrid(url);\n }\n\n if(Device.hybrid.inCasino || Device.hybrid.isEmbedded){\n url = srcurl.includes([KEY_NAME.BANK_ID] + ':///') ? srcurl : url;\n url = srcurl.includes([KEY_NAME.PHONE]) ? srcurl : url;\n }\n\n let data = {[KEY_NAME.DATA]: url};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.GENERAL_OPEN_EXTERNAL_LINK, data);\n }\n\n convertToAbsoluteLink(link) {\n let absoluteLink = '';\n // check if relative or absolute link\n if (!_.isAbsoluteLink(link)) {\n absoluteLink = this.serviceFactory.windowService().getLocationOrigin();\n }\n absoluteLink += link;\n return absoluteLink;\n }\n\n setCbFunction(serviceFuncName, cbFuncName, privatedata) {\n\n let publicdata = {[KEY_NAME.HYBRID_CB_FEATURE_FUNC]: cbFuncName};\n\n let data = Object.assign(publicdata, privatedata);\n\n return this.msgToHybrid(serviceFuncName, data);\n }\n\n loadRemoteChill(url, ver){\n\n let data = {[KEY_NAME.URL]: url, [KEY_NAME.VERSION]: ver};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.ON_DEMAND_LOAD_CHILL, data);\n }\n\n _closeGame(options) {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.ON_DEMAND_CLOSE_GAME);\n }\n\n closeNyxODRGame() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.ON_DEMAND_NYX_CLOSE);\n }\n\n\n initOndemandfeature(){\n if(this._ondemandfeature){\n this._ondemandfeature.inidFeature();\n }\n }\n setStartOndemand(b){\n if(this._ondemandfeature){\n this._ondemandfeature.setStartOndemand(b);\n }\n }\n\n waitForOnDemandId(id, folderStruct = 0, sharedFolder = '') {\n this.setStartOndemand(false);\n let data = {[KEY_NAME.DATA]: id.toString(), [KEY_NAME.TIME_OUT]: 0, [KEY_NAME.FOLDER_STRUCT]: folderStruct.toString(), [KEY_NAME.FOLDER_SHARED_NAME]: sharedFolder.toString()};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.ON_DEMAND_IS_READY, data);\n }\n\n stopProgressBarByTimeOut(){\n this.setStartOndemand(true);\n return this.msgToHybrid(SERIVCES_FUNC_LIST.ON_DEMAND_CLOSE_BY_TIME_OUT);\n }\n\n _onStopProgressBar() {\n this.setStartOndemand(true);\n return this.msgToHybrid(SERIVCES_FUNC_LIST.ON_DEMAND_CLOSE_BY_X);\n }\n\n closeByLowDiskSpace() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.ON_DEMAND_CLOSE_BY_LOW_DISK_SPACE);\n }\n\n deleteGameFolder(games) {\n let data = {[KEY_NAME.DATA]: games};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.ON_DEMAND_DELETE_GAME_FOLDER,data);\n }\n\n isSupportHtmlCompiledGames() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.WEB_VIEW_IS_HTML_COMPILED_GAMES);\n }\n\n navigateForOnDemandNyx(url) {\n let data = {[KEY_NAME.URL]: url};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.ON_DEMAND_NYX_NAVIGATE, data);\n }\n\n changeHeaderHeightOnDemandNyx(headerheight, dt){\n let data = {[KEY_NAME.HEADER_HEIGHT] : headerheight, [KEY_NAME.CLOSE_BY_X] : dt.enable, [KEY_NAME.CLOSE_X_POS_P] : dt.xp, [KEY_NAME.CLOSE_Y_POS_P]: dt.yp,\n [KEY_NAME.CLOSE_X_POS_L] : dt.xl, [KEY_NAME.CLOSE_Y_POS_L]: dt.yl} ;\n return this.msgToHybrid(SERIVCES_FUNC_LIST.ON_DEMAND_NYX_CHANGE_HEADER_HEIGHT, data);\n }\n\n /**\n * Show the site in webview.\n *\n * @private\n */\n _displayWebView() {\n let webviewProperties = {\n [SERIVCES_PARAMS_LIST.WEB_VIEW_SPLASH]: SERIVCES_PARAMS_LIST.WEB_VIEW_SPLASH_FADE\n };\n return this.msgToHybrid(SERIVCES_FUNC_LIST.WEB_VIEW_WEB_SHOW, webviewProperties);\n }\n\n\n /* SERLAL START */\n /**\n *\n * @returns {Promise}\n */\n getSerialData() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.SERIAL_GET_SERIAL);\n }\n\n setSmartLinkData(smartLinkData, appflayerfeature) {\n this._appflayerfeature = appflayerfeature;\n this._strSmartLinkData = encodeURIComponent(smartLinkData);\n }\n\n getSmartLinkData() {\n return this._strSmartLinkData;\n }\n\n /* SERLAL END */\n\n\n /* 3D Touch START */\n /**\n * @param shourtcutsLaunch: parameters in json format.\n * @returns {Promise}\n * Example: \"[{\"action\":\"Login\",\"caption\":\"Logintext\",\"val\":\"\"},{\"action\":\"QuickDeposit\",\"caption\":\"QuickDeposittext\",\"val\":\"\"}]\"\n */\n init3DTouchShourtcutsLaunch(shourtcutsLaunch) {\n let data = {[KEY_NAME.DATA]: shourtcutsLaunch};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.T3_D_TOUCH_INIT_SHORTCUTS, data);\n }\n\n /**\n * @param shortcutData: json:\n * @param example: {'action': 'PlayGame','caption': 'Millionaire Genie','val': '130043'}\n * @returns {Promise}\n */\n update3DTouchShortcut(shortcutData) {\n let data = {[KEY_NAME.DATA]: shortcutData};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.T3_D_TOUCH_UPDATE_SHORTCUT, data);\n }\n\n /**\n * Delete a specific shortcut from the 3Dtouch shortcuts\n * @param action: example: Login,QuickDeposit,PlayGame\n * @returns {Promise}\n */\n delete3DTouchShourtcut(action) {\n let data = {[KEY_NAME.DATA]: action};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.T3_D_TOUCH_DELETE_SHORTCUT, data);\n }\n\n /**\n * delete all the shortcuts from the 3D touch Hybrid\n */\n deleteAll3DTouchShourtcuts() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.T3_D_TOUCH_DEL_ALL_SHORTCUTS);\n }\n\n /**\n * get the shortcut if pressed on the 3D touch\n * @returns {Promise}\n */\n get3DTouchShortcutLaunch() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.T3_D_TOUCH_GET_LAUNCH_SHORTCUT);\n }\n\n /* 3D Touch END */\n\n\n /* PUSH START */\n\n\n\n isPushDeviceEnable() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.PUSH_IS_DEVICE_ENABLE);\n }\n\n\n /**\n * get the push action if i press on push popup\n * @returns {Promise}\n */\n getPushActions() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.PUSH_GET_ACTION);\n }\n\n addTag(data){\n return this.msgToHybrid(SERIVCES_FUNC_LIST.PUSH_ADD_TAG,data);\n }\n\n remTag(data){\n return this.msgToHybrid(SERIVCES_FUNC_LIST.PUSH_REM_TAG,data);\n }\n\n setAlias(data){\n return this.msgToHybrid(SERIVCES_FUNC_LIST.PUSH_SET_ALIAS,data);\n }\n\n /* PUSH END */\n\n /* TouchID START */\n\n /**\n * get the token if exist for touchId\n * @returns {Promise}\n */\n\n getTouchIdToken() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.TOUCH_ID_GET_TOKEN);\n }\n\n setToken(token) {\n const data = {[KEY_NAME.DATA]: token};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.TOUCH_ID_SET_TOKEN, data);\n }\n\n openTouchId(caption) {\n const data = {[KEY_NAME.DATA]: caption, [KEY_NAME.KEYBORD]: 'false'};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.TOUCH_ID_OPEN, data);\n }\n\n isTouchIdSuported() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.TOUCH_ID_IS_SUPORTED);\n }\n\n isDeviceTouchEnable() {\n return new Promise((resolve) => {\n this.isTouchIdSuported().then(data => {\n if (null !== this._touchidfeature) {\n this._touchidfeature.getModel().setEnableRes(_.safeJSONandDecode(data));\n let bEnable = this._touchidfeature.getModel().isDeviceTouchEnable();\n resolve(bEnable);\n } else {\n resolve(false);\n }\n });\n });\n }\n\n clearToken() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.TOUCH_ID_CLEAR_ALL);\n }\n\n getParamsForToken() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.TOUCH_ID_PARAMS_FOR_TOKEN);\n }\n\n /* TouchID END */\n\n /* SAFARI TEST FOR CASHIER */\n openSafariTest(url) {\n\n DOM.setTimeout(() => { this.testSafari(); } , 2000);\n\n let data = {[KEY_NAME.DATA]: url, 'top': '45' , 'bottom': '45' };\n return this.msgToHybrid(SERIVCES_FUNC_LIST.WEB_VIEW_SAFARI, data);\n }\n\n testSafari() {\n this.msgToHybrid(SERIVCES_FUNC_LIST.WEB_VIEW_SAFARI_PING)\n .then(() => {\n DOM.setTimeout(() => {\n this.testSafari();\n }, 7000);\n });\n }\n\n openLinksAccomplished(webId, webType) {\n let data = {[KEY_NAME.WEB_ID]: webId, [KEY_NAME.TYPE]: webType };\n return this.msgToHybrid(SERIVCES_FUNC_LIST.WEB_VIEW_ACCOMPLISHED, data);\n }\n\n navigateWebView(data) {\n\n if(WEB_VIEW_IDS.DEPOSIT_WIDGET_ID === data[WEB_VIEW_INFO.ID]){\n let logger = this.serviceFactory.structuredLoggingService().getLogger();\n logger && logger.setEventType('hybrid_psp_redirect_navigate')\n .addCustomData({\n depositWindowData: data\n });\n\n return this.msgToHybrid(SERIVCES_FUNC_LIST.WEB_DEPOSIT_WIDGET_NAVIFATE, data)\n .then(() => logger && logger.info())\n .catch(err => {\n logger && logger.addCustomData({\n errorDetails: err\n }).error();\n\n throw err;\n });\n }else {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.WEB_SECOND_NAVIFATE, data);\n }\n }\n\n checkHybridSupportDepositWidget(data){\n return this.msgToHybrid(SERIVCES_FUNC_LIST.WEB_DEPOSIT_WIDGET_SUPPORTED, data);\n }\n\n\n showWebView(data) {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.WEB_SECOND_SHOW, data);\n }\n\n getDpToPx(){\n return this.msgToHybrid(SERIVCES_FUNC_LIST.WEB_VIEW_GET_DP_2_PX);\n }\n\n updateScreenSize(data){\n return this.msgToHybrid(SERIVCES_FUNC_LIST.WEB_SECOND_UPDATE_SIZE, data);\n }\n\n closeWebView(data) {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.WEB_SECOND_CLOSE, data);\n }\n\n isWebviewmanagerfeature() {\n if (!Device.hybrid.inCasino) {\n return false;\n }\n return null !== this._webviewmanagerfeature;\n }\n\n isNativeSupportSecondWebView() {\n return this.isWebviewmanagerfeature() ? this._webviewmanagerfeature.isNativeSupportSecondWebView() : false;\n }\n\n isNativeSupportSafariCashier() {\n return this.isWebviewmanagerfeature() ? this._webviewmanagerfeature.isNativeSupportSafariCashier() : false;\n }\n\n getParamsForCasheir() {\n return this.isWebviewmanagerfeature() ? this._webviewmanagerfeature.getParamsForCasheir() : '';\n }\n\n getUrlSchemeToOpen() {\n return this.isWebviewmanagerfeature() ? this._webviewmanagerfeature.getUrlSchemeToOpen() : '';\n }\n\n openCasheir(url) {\n if (this.isNativeSupportSafariCashier()) {\n this._webviewmanagerfeature.openCasheir(url);\n return true;\n }\n return false;\n }\n\n\n /* WEB VIEW MANAGER END */\n\n\n /* INFO START */\n\n\n getInfoFeature() {\n return this._hybridinfofeature;\n }\n\n getUrlScheme() {\n let infoFeature = this.getInfoFeature();\n let urlScheme = undefined !== infoFeature ? infoFeature.getUrlScheme() : '';\n return urlScheme;\n }\n\n setUrl(url, reload) {\n let data = {[KEY_NAME.URL]: url, [KEY_NAME.RELOAD]: reload};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.INFO_SET_URL, data);\n }\n\n getInfoForDisplay() {\n let infoFeature = this.getInfoFeature();\n let info = undefined !== infoFeature ? infoFeature.getInfoForDisplay() : '';\n return info;\n }\n\n getInfo(key) {\n let data = {[KEY_NAME.DATA]: key};\n return this.msgToHybrid(SERIVCES_FUNC_LIST.INFO_GET_ALL_INFO, data);\n }\n\n\n isDebugMode() {\n let infoFeature = this.getInfoFeature();\n return null !== infoFeature ? infoFeature.isDebugMode() : false;\n }\n\n getVersion() {\n let infoFeature = this.getInfoFeature();\n return null !== infoFeature ? infoFeature.getVersion() : 0;\n }\n\n getAppleID() {\n let infoFeature = this.getInfoFeature();\n return null !== infoFeature ? infoFeature.getAppleID() : '';\n }\n\n /* INFO END*/\n\n /* URL_SCHEME START */\n\n\n getInfoUrlScheme() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.URL_SCHEME_GET_URL_SCHEME);\n }\n\n clearUrlScheme() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.URL_SCHEME_CLEAR);\n }\n\n /* URL_SCHEME END */\n\n /* FABRIC */\n\n createFabricEv(name){\n if(null != this._fabricfeature) {\n this._fabricfeature.createEvName(name);\n }\n }\n\n addFabricKeyVal(key, val){\n if(null != this._fabricfeature) {\n return this._fabricfeature.addEvKeyVal(key, val);\n }else {\n return null;\n }\n }\n\n getEv() {\n return null != this._fabricfeature ? this._model.getEv() : null;\n }\n\n addFabricEvent(ev) {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.FABRIC_ADD_EVENT,ev);\n }\n\n /* FABRIC */\n\n\n /* GEO */\n\n getGeoLocation(data){\n return this.msgToHybrid(SERIVCES_FUNC_LIST.GEO_GET_GEO_LOCATION,data);\n }\n /* GEO */\n\n\n /* LEXIS NEXIS */\n\n IsLexisNexisSupported(){\n return this.msgToHybrid(SERIVCES_FUNC_LIST.LEXIS_NEXIS_IS_SUPPORTED);\n }\n\n getLexisNexisInfo(data){\n return this.msgToHybrid(SERIVCES_FUNC_LIST.LEXIS_NEXIS_GET_INFO, data);\n }\n\n getLexisNexisSession(marketingData){\n\n if (null !== this._lexisnexisfeature) {\n return this._lexisnexisfeature.getLexisNexisInfo(marketingData, false);\n }\n\n return new Promise((resolve) => {\n resolve(marketingData);\n });\n }\n\n /* LEXIS NEXIS *\n\n\n\n /* DEPOSIT WIDGET */\n\n updateDepositWidgetSupported() {\n if (null !== this._webviewmanagerfeature) {\n this._webviewmanagerfeature.setDepositWidgetSupported();\n }\n }\n\n isDepositWidgetSupported(){\n if(!Device.hybrid.inCasino) {\n return true; // if is not hybrid then we let other layers decide if the user is eligible for deposit widget.\n }\n if (null !== this._depositwidgetfeature) {\n return this._depositwidgetfeature.isDepositWidgetSupported();\n }\n\n return false;\n }\n\n /* DEPOSIT WIDGET */\n\n\n /* LOBBY POP UP */\n\n isPopUpAboveSecounpSupported(){\n return this.msgToHybrid(SERIVCES_FUNC_LIST.LOBBY_POPUP_IS_SUPPORTED);\n }\n\n popUpAboveSecoundShow(data){\n return this.msgToHybrid(SERIVCES_FUNC_LIST.LOBBY_POPUP_SHOW,data);\n }\n\n popUpAboveSecoundClose(){\n return this.msgToHybrid(SERIVCES_FUNC_LIST.LOBBY_POPUP_CLOSE);\n }\n\n /* FIRE BASE */\n\n getFireBaseData() {\n return this.msgToHybrid(SERIVCES_FUNC_LIST.FIRE_BASE_GET_DATA);\n }\n\n getAppMareketingData(){\n const appsFlayerData = this._appflayerfeature ? this._appflayerfeature.getAppMareketingData() : {};\n const fireBaseData = this._firebasefeature ? this._firebasefeature.getAppMareketingData() : {};\n\n const allData = Object.assign(appsFlayerData, fireBaseData);\n\n return allData;\n }\n\n /**\n * Entry point to send calls for hybrid & back.\n *\n * @param serviceFuncName: the service name + function name for exp: WebView_Webshow:\n * WebView - service name.\n * WebShow - function name.\n * @param jsonParams: parameters in json format.\n * @returns {Promise}\n */\n msgToHybrid(serviceFuncName, jsonParams = {}) {\n if (this.isNotHybridConnection()) {\n if(serviceFuncName === SERIVCES_FUNC_LIST.WEB_DEPOSIT_WIDGET_NAVIFATE) {\n let logger = this.serviceFactory.structuredLoggingService().getLogger();\n logger && logger.setEventType('hybrid_psp_redirect_not_hybrid_connection')\n .addCustomData({\n depositWindowData: jsonParams,\n wrapperIsNull: this._wrapper ? 'No' : 'Yes'\n })\n .error();\n }\n\n this.logger.info([\n 'Hybrid Call:',\n 'Method: ' + serviceFuncName,\n 'Params: ' + JSON.stringify(jsonParams)\n ]);\n\n return Promise.resolve();\n }\n return this._wrapper.msgToHybrid(serviceFuncName, jsonParams);\n }\n\n /**\n * @Description we need connection in those hybrids\n */\n isNotHybridConnection() {\n return (!Device.hybrid.isHybrid) || null === this._wrapper;\n }\n\n // Event.fire(SYSTEM_EVENTS.HYBRID_ALERT, str);\n\n /***\n * @Description If the Url is with localhost or just relative we need to add the cmsSource\n * @Note BUG 1322249\n * @param url\n */\n buildExternalLinkForEmbeddedHybrid(url){\n\n let cmsSource = this.serviceFactory.integrationService().getCmsSourceIfValid();\n if(cmsSource) {\n //If we got localhost link\n if (_.isString(url) && (url.startsWith('http://localhost') || url.startsWith('https://localhost'))) {\n //Remove the localhost (it will not work on embedded Hybrid) and add the cmsSource to the relative link\n url = _.removeLocalhost(url);\n return cmsSource + \"/\" + url;\n }\n\n //If we got localhost in the domain\n let strReplace = this.getReplaceLocalhost(url, cmsSource);\n\n if (strReplace.length > 0) {\n return strReplace;\n }\n\n //If we got relative link(and not mailto link) - add the cms source\n if (!_.isAbsoluteLink(url) && !_.isNullOrUndefined(url) && !url.startsWith('mailto:')) {\n return cmsSource + url;\n }\n\n }\n return url;\n }\n\n getReplaceLocalhost(url, cmsSource) {\n let strReplace = '';\n if (_.isString(url) && url.includes('reason') && url.includes('domain')) {\n if (url.includes([LOCAL_HOST.HTTP])) {\n strReplace = [LOCAL_HOST.HTTP];\n } else if (url.includes([LOCAL_HOST.HTTPS])) {\n strReplace = [LOCAL_HOST.HTTPS];\n }\n\n if (strReplace.length > 0) {\n strReplace = url.replace(strReplace, cmsSource);\n }\n }\n return strReplace;\n }\n\n /**\n * @description When it is internal link we need to redirect to the Hybrid localhost and not to the fullurl\n * @param url\n */\n getRedirectInternalPageUrl(url){\n try {\n let redirectFullURL = new URL(url)\n redirectFullURL.protocol = this.serviceFactory.windowService().getProtocol();\n redirectFullURL.host = this.serviceFactory.windowService().getHost();\n\n return redirectFullURL.href;\n }catch (e){\n this.logger.error('Failed to getRedirectInternalPageUrl error: ' + e + ' ,return original url: ' + url);\n return url;\n }\n\n }\n\n openPopUpOnSecondWebView(content,timeout) {\n\n if(!Device.hybrid.isEmbedded) {\n return;\n }\n\n const dataforHybrid = {\n content: content,\n isFirstShow: true,\n showHybridPopUp: true,\n timeout:timeout\n };\n\n setTimeout(() => {//the popup is not ready yet\n Event.fire(SYSTEM_EVENTS.SHOW_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW, dataforHybrid);\n }, 1000);\n }\n\n closePopUpOnSecondWebView() {\n if(Device.hybrid.isEmbedded) {\n Event.fire(SYSTEM_EVENTS.CLOSE_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW);\n }\n }\n}\nexport default HybridService;","// import BaseModelComponent from '../../../../base/base_model_component';\nimport BaseOptionsModel from '../base_options_model';\n\n/**\n *\n *\n *\n */\nclass TouchIdComponentModel extends BaseOptionsModel {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'TouchIdComponentModel';\n\n\n /**\n *\n * @param params\n */\n init(params) {\n\n }\n}\nexport default TouchIdComponentModel;","import BaseObject from '../../../../../base/base_object';\nimport {SYSTEM_EVENTS} from '../../../../../events/events';\nimport Event from '../../../../../utils/event';\n\nclass TouchIdBaseScreen extends BaseObject {\n /**\n * @static\n * @type {string}\n */\n\n _parent = null;\n\n _html = null;\n\n _setHtml(html) {\n this._html = html;\n }\n\n setParent(parent) {\n this._parent = parent;\n return this;\n }\n\n getEl() {\n return this._parent.getEl();\n }\n\n show() {\n let screen = this._parent.bake(this._html);\n this._parent.setHTML(screen);\n\n return this;\n }\n\n onInitScreenShow() {\n Event.fire(SYSTEM_EVENTS.TOUCH_ID_INIT_SCREEN_SHOW);\n }\n\n close() {\n this._parent.close();\n }\n\n\n onTryAgainSkip() {\n this.close();\n }\n\n onNativeCancel() {\n this.close();\n }\n\n /**\n * @override\n * @returns {Array}\n * @private\n */\n _getButtons() { return []; }\n\n onCheckTouchEnable(bChecked) {}\n closeScreen() {}\n onClosedByClicked() {}\n onComponentOpened() {}\n}\nexport default TouchIdBaseScreen;\n","import TouchIdBaseScreen from './touch_id_screen_base';\nimport {TOUCH_ID} from '../touch_id_component_consts';\nimport DOM from '../../../../../utils/dom';\nimport Event from \"../../../../../utils/event\";\nimport {SYSTEM_EVENTS} from \"../../../../../events/events\";\n\nclass TouchIdAutoInitScreen extends TouchIdBaseScreen {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'TouchIdAutoInitScreen';\n _selector = 'cgp-touch-id-screen-init';\n\n _checkboxToggle = null;\n _butNext = null;\n\n init(params) {\n super.init(params);\n this._setHtml(TOUCH_ID.INIT_VIEW);\n }\n\n show() {\n super.show();\n\n DOM.addClass(this.getEl().getElementsByClassName('cgp-touch-id-content')[0], this._selector);\n\n return this;\n }\n\n /**\n * Subscribe for change of toggle.\n *\n * @public\n */\n onComponentOpened() {\n this.onInitScreenShow();\n\n DOM.onDOMElementEvent(this.getEl().querySelector(TOUCH_ID.ACTIVATION_BUTTON_CONFIRM), 'click', () => {\n\n this._parent.getTokenFromSrv();\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {category: 'Client_TouchID', action: 'Activation'});\n\n this.close();\n });\n\n return this;\n }\n\n onClosedByClicked() {\n super.onClosedByClicked();\n }\n}\nexport default TouchIdAutoInitScreen;\n","import TouchIdBaseScreen from './touch_id_screen_base';\nimport {TOUCH_ID} from '../touch_id_component_consts';\nimport {USER_EVENTS} from '../../../../../events/events';\nimport DOM from '../../../../../utils/dom';\nimport {SYSTEM_EVENTS} from '../../../../../events/events';\nimport Event from '../../../../../utils/event';\n\nclass TouchIdModifyScreen extends TouchIdBaseScreen {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'TouchIdModifyScreen';\n _selector = 'cgp-touch-id-screen-modify';\n\n _checkboxToggle = null;\n\n init(params) {\n super.init(params);\n this._setHtml(TOUCH_ID.MODIFY_VIEW);\n }\n\n show() {\n super.show();\n\n DOM.addClass(this.getEl().getElementsByClassName('cgp-touch-id-content')[0], this._selector);\n\n return this;\n }\n\n onComponentOpened() {\n this._checkboxToggle = this.getEl().querySelector(TOUCH_ID.ELEMENT_CHECKBOX);\n\n this._parent.checkTouchEnable();\n\n DOM.onDOMElementEvent(this._checkboxToggle, USER_EVENTS.ON_CHANGE, () => {\n let strToggle = 'Menu toggle on';\n if (this._checkboxToggle?.checked) {\n this.onInitScreenShow();\n this._parent.getTokenFromSrv();\n } else {\n strToggle = 'Menu toggle off';\n Event.fire(SYSTEM_EVENTS.TOUCH_ID_CLEAR_TOKEN);\n }\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {category: 'Client_TouchID', action: strToggle});\n });\n }\n\n onCheckTouchEnable(bChecked) {\n this._checkboxToggle.checked = bChecked;\n }\n\n onClosedByClicked() {\n super.onClosedByClicked();\n Event.fire(SYSTEM_EVENTS.TOUCH_ID_STATE_CHANGED)\n }\n}\nexport default TouchIdModifyScreen;\n","import BaseOptionsComponentController from '../base_options_component_controller';\nimport Model from './touch_id_model';\nimport {TOUCH_ID_SCREENS} from './touch_id_component_consts';\nimport {SYSTEM_EVENTS} from '../../../../events/events';\nimport Event from '../../../../utils/event';\nimport {PRIORITY_LEVEL} from '../../../../services/overlay_manager/overlay_manager_levels';\nimport TouchIdAutoInitScreen from './Screens/touch_id_screen_init';\nimport TouchIdModifyScreen from './Screens/touch_id_screen_modify';\n\nclass TouchIdController extends BaseOptionsComponentController {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'TouchIdController';\n\n\n /**\n * @static\n * @type {string}\n */\n static DIRECTIVE = 'cgp-directive-touch-id';\n\n\n /**\n * Root component selector.\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-touch-id-component';\n\n\n /**\n * @property screen type\n * @type {int}\n * @private\n */\n _screenType = TOUCH_ID_SCREENS.INIT_SCREEN;\n\n /**\n * @property screen type\n * @type {object|null}\n * @private\n */\n _currentScreen = null;\n\n\n /**\n * @property\n * @type {object|null}\n * @private\n */\n _model = null;\n\n init(params) {\n super.init();\n this._model = Model.create(params);\n\n this._subscribe();\n }\n\n\n _subscribe() {\n Event.on(SYSTEM_EVENTS.TOUCH_ID_TRY_AGAIN_SKIP, this._onTryAgainSkip, this);\n Event.on(SYSTEM_EVENTS.TOUCH_ID_TOKEN_ENABLE_RES, this._onCheckTouchEnable, this);\n Event.on(SYSTEM_EVENTS.TOUCH_ID_NATIVE_CANCEL, this._onNativeCancel, this);\n\n Event.fire(TOUCH_ID_SCREENS.TOUCH_ID_CTL_OPENED);\n }\n\n _onNativeCancel() {\n this._currentScreen.onNativeCancel();\n }\n _onTryAgainSkip() {\n this._currentScreen.onTryAgainSkip();\n }\n\n _onCheckTouchEnable(bChecked) {\n // TODO\n this._currentScreen.onCheckTouchEnable(bChecked);\n }\n\n setScreen(screenType) {\n this._screenType = screenType;\n }\n\n\n _setHtmlScreen() {\n this._currentScreen = null;\n switch (this._screenType) {\n case TOUCH_ID_SCREENS.INIT_SCREEN:\n this._currentScreen = TouchIdAutoInitScreen.create();\n break;\n case TOUCH_ID_SCREENS.MODIFY_SCREEN:\n this._currentScreen = TouchIdModifyScreen.create();\n break;\n default:\n /* Maybe should throw an exception */\n break;\n }\n\n this._currentScreen && this._currentScreen.setParent(this).show();\n }\n\n\n /**\n *\n * @returns {TouchIdController}\n */\n start() {\n this._setHtmlScreen();\n this._openInMDP();\n\n return this;\n }\n\n\n /**\n * Wrapper to close component overlay\n * @returns\n * @public\n */\n close() {\n super.destroy();\n }\n\n getTokenFromSrv() {\n Event.fire(SYSTEM_EVENTS.TOUCH_ID_GET_TOKEN_FROM_SRV);\n }\n\n checkTouchEnable() {\n Event.fire(SYSTEM_EVENTS.TOUCH_ID_CHECK_TOKEN_ENABLE);\n }\n\n\n getCurrentScreen() {\n return this._currentScreen;\n }\n\n /**\n * Get touch id message priority\n * @returns {*}\n */\n getOverlayPriority() {\n return PRIORITY_LEVEL.TOUCH_ID;\n }\n\n\n /**\n * Handle after component open action\n * @protected\n */\n onComponentOpened() {\n this._currentScreen.onComponentOpened();\n }\n\n\n /**\n * Callback fired when component is completly removed from DOM\n * @protected\n */\n onComponentClosed() {\n this._currentScreen.onClosedByClicked();\n Event.fire(TOUCH_ID_SCREENS.TOUCH_ID_CTL_CLOSED);\n super.onComponentClosed();\n }\n\n\n /**\n * Handle overlay close button click\n */\n onCloseBtnClicked() {\n // Event.fire(TOUCH_ID_SCREENS.TOUCH_ID_CTL_CLOSED);\n }\n\n\n _getCustomCSSClassList() {\n return super._getCustomCSSClassList().concat(['cgp-options-touch-id', 'mdp-tablet-full-size']);\n }\n\n\n _getButtons() {\n return this._currentScreen._getButtons();\n }\n\n _getTitleKey() {\n return 'touch_id_auto_screen'\n }\n\n _openInMDP() {\n Event.fire(SYSTEM_EVENTS.MESSAGE_OPEN, {\n contentEl: this._currentScreen.getEl(),\n title: this._getOptionTitle(),\n closeButton: true,\n hasDefaultButton: false,\n customCSSClassList: this._getCustomCSSClassList(),\n priority: this.getOverlayPriority(),\n buttons: this._getButtons(),\n openCallback: this.onComponentOpened.bind(this),\n closeCallback: this.onComponentClosed.bind(this),\n btnCloseCallback: this.onCloseBtnClicked.bind(this)\n });\n }\n\n}\nexport default TouchIdController;","const LOGIN_BUTTONS_SELECTORS = {\n LOGIN_BUTTON_ID: '#cgp-login-btn',\n REGISTER_BUTTON_ID: '#login_button_register'\n};\n\nexport {LOGIN_BUTTONS_SELECTORS};","import BaseObject from '../../base/base_object';\nimport {USER_EVENTS} from '../../events/events';\n\nexport default class LoginButtonsDependenciesFactory extends BaseObject {\n static CLASS = 'LoginButtonsDependenciesFactory';\n\n init(params) {\n this._serviceFactory = params.serviceFactory;\n }\n\n _serviceFactory = null;\n\n createLoginButtonClickObservable(button) {\n return this._createButtonClickObservable(button);\n }\n\n createRegisterButtonClickObservable(button) {\n return this._createButtonClickObservable(button);\n }\n\n _createButtonClickObservable(button) {\n return this._serviceFactory.observableFactoryService().fromEvent(button, USER_EVENTS.ON_CLICK);\n }\n\n}","import BaseComponent from '../../base/base_component';\nimport DOM from '../../utils/dom';\nimport {LOGIN_BUTTONS_SELECTORS} from './login_buttons_consts';\nimport {GNWP_SOURCES} from '../external_links/external_links_consts';\nimport ServiceFactory from '../../services/service_factory';\nimport DependenciesFactory from './dependencies_factory';\nimport {SYSTEM_EVENTS, CLIENT_EVENTS} from '../../events/events';\nimport {MARKETING_FLOWS} from '../../services/integration/integration_const';\nimport Event from '../../utils/event';\nimport _ from '../../utils/underscore';\n\nconst buttonsView = require('./view/login-buttons.html');\nconst ENVIRONMENTS = {\n LOBBY: 'lobby',\n GAME: 'game'\n};\n\nexport default class LoginButtonsComponentController extends BaseComponent {\n static CLASS = 'LoginButtonsComponentController';\n\n static DIRECTIVE = 'cgp-directive-login_buttons';\n _selector = 'cgp-login-buttons-component';\n\n init(params) {\n super.init(params);\n this._environment = params.env;\n this._showRegisterButton = params.showRegister;\n this._gameType = params.gametype;\n this._gameName = params.gameName;\n this._isRealGame = params.isReal;\n this._marketingDataFunctions = _.safeJSON(params.marketingDataFn, null) || {};\n\n this._serviceFactory = params.serviceFactory || ServiceFactory.create();\n this._dependenciesFactory = params.dependenciesFactory || DependenciesFactory.create({\n serviceFactory: this._serviceFactory\n });\n }\n\n _environment = null;\n _showRegisterButton = null;\n _gameType = null;\n _gameName = null;\n _isRealGame = null;\n _marketingDataFunctions = null;\n\n _serviceFactory = null;\n _dependenciesFactory = null;\n\n start() {\n this._renderComponent();\n this._loginClickSubscription = this._subscribeToLoginButtonClick();\n this._registerClickSubscription = this._subscribeToRegisterButtonClick();\n if(!this._showRegisterButton) {\n let loginButtonHtmlElement = this.getEl().querySelector('.login_buttons_register');\n if(loginButtonHtmlElement) {\n DOM.addAttribute(loginButtonHtmlElement, 'style', 'display: none');\n }\n }\n return this;\n }\n\n _loginClickSubscription = null;\n _registerClickSubscription = null;\n\n shutDown() {\n if(this._loginClickSubscription) {\n this._loginClickSubscription.dispose();\n }\n\n if (this._registerClickSubscription) {\n this._registerClickSubscription.dispose();\n }\n }\n\n _renderComponent() {\n DOM.html(this.bake(buttonsView), this.getEl());\n }\n\n _subscribeToLoginButtonClick() {\n let button = this._getButton(LOGIN_BUTTONS_SELECTORS.LOGIN_BUTTON_ID);\n\n return this._dependenciesFactory.createLoginButtonClickObservable(button)\n .forEach(() => {\n this.sendAnalytics('Login');\n Event.fire(CLIENT_EVENTS.LOGIN_BUTTON_CLICKED);\n if(!this._serviceFactory.countryService().checkIfShouldRedirect('login')) {\n this._serviceFactory.oAuth2Service().tryToRememberMe()\n .catch(() => {\n this._serviceFactory.webLoginService().openLoginForm({\n marketingDataFunction: this._marketingDataFunctions[MARKETING_FLOWS.REGISTER_IN_LOGIN]\n });\n });\n }\n });\n }\n\n _subscribeToRegisterButtonClick() {\n let button = this._getButton(LOGIN_BUTTONS_SELECTORS.REGISTER_BUTTON_ID);\n\n return this._dependenciesFactory.createRegisterButtonClickObservable(button)\n .forEach(() => {\n let fn = this._marketingDataFunctions[MARKETING_FLOWS.REGISTER];\n if(fn) {\n this._serviceFactory.integrationService().executeMarketingDataFunction(fn);\n }\n\n Event.fire(SYSTEM_EVENTS.INCOMING_MARKETING_FLOW, MARKETING_FLOWS.REGISTER);\n\n this.sendAnalytics('Register');\n\n if(!this._serviceFactory.countryService().checkIfShouldRedirect('register')) {\n this._serviceFactory.openLinkService().openLink({source:GNWP_SOURCES.MEMBERSHIP, forceHideCloseButton: this.serviceFactory.regulationService().getRegulation().forceHideCloseButtonInMembership()});\n }\n });\n }\n\n _getButton(buttonId) {\n return this.getEl().querySelectorAll(buttonId)[0];\n }\n\n sendAnalytics(action) {\n\n let analyticObj = {\n category: 'Client_LoginButtons',\n action: action\n };\n\n if (this._environment === ENVIRONMENTS.GAME) {\n analyticObj.category = this._isRealGame ? 'Client_GameFrame_Real' : 'Client_GameFrame_Anonymous';\n analyticObj.label = this._gameType + '_' + this._gameName.replace(/ /g, '');\n }\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticObj);\n }\n\n}\n\n","import BaseComponent from '../../../../../base/base_component';\nimport DOM from '../../../../../utils/dom';\nimport _ from '../../../../../utils/underscore';\n\nlet pcView = require('./pc_layout.html');\n\nexport default class SpainGameStripePC extends BaseComponent {\n static CLASS = 'SpainGameStripePC';\n\n\n init(params) {\n params = params || {};\n params.innerHtml = pcView;\n super.init(params);\n }\n\n setRegulationData(regulationData) {\n regulationData = regulationData || {};\n\n this._setValueFor('session_balance', regulationData.sessionBalance);\n this._setValueFor('session_bets', regulationData.sessionTotalBet);\n this._setValueFor('session_wins', regulationData.sessionTotalWin);\n }\n\n _setValueFor(sectionName, value) {\n if (_.isNullOrUndefined(value)) {\n value = 0;\n }\n DOM.text(this.querySelector('#' + sectionName).querySelector('#value'),\n this.serviceFactory.currencyService().formatMoney(value));\n }\n}","import BaseComponent from '../../../../../base/base_component';\nimport ClockComponentController from '../../../../clock/clock_controller_component';\nimport DOM from '../../../../../utils/dom';\nimport _ from '../../../../../utils/underscore';\nimport {SYSTEM_EVENTS} from '../../../../../events/events';\n\nlet mobileView = require('./mobile_layout.html');\n\nexport default class SpainGameStripeMobile extends BaseComponent {\n static CLASS = 'SpainGameStripeMobile';\n\n init(params) {\n params = params || {};\n params.innerHtml = mobileView;\n super.init(params);\n\n this._appendClock();\n this._subscribe();\n this._setBalanceValue();\n }\n\n _subscribe() {\n this.onSystemEvent(SYSTEM_EVENTS.BALANCE_UPDATED, () => this._onBalanceUpdate());\n }\n\n _onBalanceUpdate() {\n this._setBalanceValue();\n }\n\n _setBalanceValue() {\n this._setValueFor('player_balance', this.serviceFactory.walletService().getBalance());\n }\n\n _appendClock() {\n let clockComponent = this.serviceFactory.componentFactoryService().createComponent(ClockComponentController, {\n datetime: this.serviceFactory.skinService().getTimeFormat()\n });\n this.appendChildComponent(clockComponent, '.cgp-stripe-clock');\n clockComponent.start();\n }\n\n setRegulationData(regulationData) {\n regulationData = regulationData || {};\n this._setValueFor('session_balance', regulationData.sessionBalance);\n this._setValueFor('session_bets', regulationData.sessionTotalBet);\n this._setValueFor('session_wins', regulationData.sessionTotalWin);\n }\n\n _setValueFor(sectionName, value) {\n if (_.isNullOrUndefined(value)) {\n value = 0;\n }\n\n DOM.text(this.querySelector('#' + sectionName).querySelector('#value'),\n this.serviceFactory.currencyService().formatMoney(value));\n }\n\n}\n\n","import BaseComponent from '../../../../base/base_component';\nimport SpainGameStripePC from './pc/spain_game_stripe_pc';\nimport Device from '../../../../utils/device/device';\nimport SpainGameStripeMobile from './mobile/spain_game_stripe_mobile';\n\nexport const SPAIN_STRIP_COMPONENT_SELECTOR = 'cgp-spain-stripe-component';\n\nexport default class SpainGameStripeComponent extends BaseComponent {\n static CLASS = 'SpainGameStripeComponent';\n\n _selector = SPAIN_STRIP_COMPONENT_SELECTOR;\n\n _innerStripeComponent = null;\n\n init(params) {\n super.init(params);\n\n if (Device.os.isMobileOS) {\n this._innerStripeComponent = this.serviceFactory.componentFactoryService().createComponent(SpainGameStripeMobile);\n } else {\n this._innerStripeComponent = this.serviceFactory.componentFactoryService().createComponent(SpainGameStripePC);\n }\n\n this.appendChildComponent(this._innerStripeComponent);\n\n //init all fields with 0\n this.setRegulationData({\n sessionTotalBet: 0,\n sessionTotalWin: 0\n });\n }\n\n setRegulationData(regulationData) {\n this._innerStripeComponent.setRegulationData({\n sessionTotalBet: regulationData.sessionTotalBet,\n sessionTotalWin: regulationData.sessionTotalWin,\n sessionBalance: regulationData.sessionTotalWin - regulationData.sessionTotalBet\n });\n }\n}","export interface IObservableSubscription {\n dispose(): void;\n}\n\ninterface IObserver {\n onNext: (data?: any) => void,\n onError: (err?: any) => void,\n onCompleted: () => void\n}\n\nexport default class Observable {\n\n private _publisher: (observer: IObserver) => IObservableSubscription;\n\n constructor(publisher: (observer: IObserver) => IObservableSubscription) {\n this._publisher = publisher;\n }\n\n forEach(onNext: (data?: any) => void,\n onError?: (err?: any) => void,\n onCompleted?: () => void) : IObservableSubscription {\n\n let observer = {\n onNext: onNext,\n onError: onError || (() => {}),\n onCompleted: onCompleted || (() => {})\n };\n\n return this._publisher(observer);\n }\n\n}","import Observable from './observable';\nimport BaseObject from '../base/base_object';\nimport DOM from './dom';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {TimeIntervalName} from '../../../common/utils/time-interval-names';\n\nexport default class ObservableFactory extends BaseObject {\n static CLASS = \"ObservableFactory\";\n\n private _getTimeInMilliseconds(time: TimeSpan | number) : number {\n if (typeof time === 'number') {\n return time;\n }\n\n return (time as TimeSpan).totalMilliseconds;\n }\n\n fromTimeout(timeout: TimeSpan | number, name?: TimeIntervalName) : Observable {\n let timeoutInMilliseconds = this._getTimeInMilliseconds(timeout);\n\n return new Observable((observer) => {\n const callback = () => {\n observer.onNext();\n observer.onCompleted();\n };\n\n let handler = DOM.setTimeout(callback, timeoutInMilliseconds, name);\n\n return {\n dispose: () => DOM.clearTimeout(handler)\n };\n });\n }\n\n fromInterval(interval: TimeSpan | number, name?: TimeIntervalName) : Observable {\n let intervalInMilliseconds = this._getTimeInMilliseconds(interval);\n\n return new Observable((observer) => {\n let handler: number;\n const callback = () => observer.onNext();\n handler = DOM.setInterval(callback, intervalInMilliseconds, name);\n\n return {\n dispose: () => DOM.clearInterval(handler)\n };\n });\n }\n\n fromEvent(element: HTMLElement, eventName: string, options: any) : Observable {\n return new Observable((observer) => {\n let handler = (e) => observer.onNext(e);\n let subscription = DOM.addEventListener(element, eventName, handler, options);\n\n // returns a subscription object\n return {\n dispose: () => {\n subscription.remove();\n }\n }\n });\n }\n}","import BaseSingleton from '../base/base_singleton';\nimport ServiceFactory from './service_factory';\n\n\nexport default class ServicesRegistry extends BaseSingleton {\n\n static CLASS = 'ServicesRegistry';\n\n _services: any = {};\n\n registerService(servicePrototype: any) : void {\n this._services[servicePrototype.CLASS] = {\n servicePrototype: servicePrototype\n };\n }\n\n getService(className: string): any {\n let serviceDescriptor = this._services[className];\n if (!serviceDescriptor) {\n this.throwError('20', 'There is no registered service with CLASS ' + className, null);\n }\n let serviceInstance = serviceDescriptor.servicePrototype.create();\n if(!serviceDescriptor.dependenciesInjected) {\n serviceInstance.injectDependencies({\n createServiceFactoryFunction: () => ServiceFactory.create({})\n });\n serviceDescriptor.dependenciesInjected = true;\n }\n return serviceInstance;\n }\n}\n\n","/**\n * Created by andreyna on 1/26/2017.\n */\nconst MY_ACCOUNT_POST_ACTIONS = {\n GAME: '1',\n CASHIER: '6',\n QUICK_DEPOSIT: '7',\n CASINO: '22',\n SPORT: '24',\n EXTERNAL_URL: '27',\n CLOSE: 'CloseMe',\n RICH: '56',\n\tINTERNAL_URL: '32'\n}\n\nexport {MY_ACCOUNT_POST_ACTIONS};","/**\n * Created by aviab on 16/02/2017.\n */\n\nconst OMG_POST_ACTIONS = {\n SHOW_ME: 'ShowMe',\n CLOSE_ME: 'CloseMe',\n OPEN_REAL_GAME: '1',\n CASHIER: '6',\n QUICK_DEPOSIT: '7',\n MY_ACCOUNT: '21',\n SPORT: '24',\n EXTERNAL_LINK: '27',\n INTERNAL_URL: '32',\n OPEN_ANONYMOUS_GAME: '36',\n RICH: '56'\n}\n\nexport {OMG_POST_ACTIONS};","const TARGET_VIEWS = {\n WINDOW: 1,\n IFRAME: 2\n}\n\nconst REQUEST_METHODS = {\n POST: 'POST',\n GET: 'GET'\n}\n\nexport {TARGET_VIEWS, REQUEST_METHODS};","import BaseComponent from '../../../base/base_component';\nimport DOM from '../../../utils/dom';\nimport _ from '../../../utils/underscore';\nimport {SYSTEM_EVENTS} from '../../../events/events';\n\n\nlet gameJackpotView = require('./view/game_jackpot.html');\n\nexport default class GameJackpotComponentController extends BaseComponent {\n static CLASS = 'GameJackpotComponentController';\n\n static DIRECTIVE = 'cgp-directive-game_jackpot';\n\n init(params) {\n params = params || {};\n params.innerHtml = gameJackpotView;\n this._gameType = params.gametypeid;\n\n super.init(params);\n this._subscribe();\n }\n\n start() {\n let jackpotValue = this.serviceFactory.jackpotFeedsService().getJackpotAmountInCentsByGame(this._gameType);\n this._displayJackpotValue(jackpotValue);\n }\n\n _subscribe() {\n this.onSystemEvent(SYSTEM_EVENTS.LIVE_FEEDS_JACKPOT_AMOUNTS_UPDATED, this._onJackpotsUpdated);\n }\n\n get _liveFeedContentElement() {\n return this.querySelector('.cgp-live-feed-content');\n }\n\n _onJackpotsUpdated(gamesJackpots) {\n let jackpotValue = gamesJackpots[this._gameType];\n this._displayJackpotValue(jackpotValue);\n }\n\n _displayJackpotValue(jackpotValue) {\n if(!_.isNullOrUndefined(jackpotValue)) {\n DOM.text(this._liveFeedContentElement, this.serviceFactory.currencyService().formatMoney(jackpotValue));\n }\n }\n\n getPropertiesStyleMapper() {\n return {\n amount: 'cgp-live-feed-content'\n };\n }\n\n}","import BaseComponent from \"../../base/base_component\";\n\nlet screenLockView = require('./view/screen_lock.html');\nclass ScreenLockComponent extends BaseComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ScreenLockComponent';\n\n /**\n * Root component selector.\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-screen-lock-component';\n\n /**\n *\n */\n init() {\n super.init();\n }\n\n\n /**\n *\n * @returns {AgeComponent}\n */\n start() {\n // Attach the template into the login component html document object.\n let bakedHTML = this.bake(screenLockView, {});\n\n this.setHTML(bakedHTML)\n\n return this;\n }\n\n}\nexport default ScreenLockComponent;","/**\n * Created by florinia on 19/10/2017.\n */\nimport BaseComponent from '../../base/base_component';\nimport DOM from '../../utils/dom';\nimport ExternalLinksComponentContoller from '../../components/external_links/external_links_component_controller';\nimport * as EXTERNAL_LINKS_CONSTS from '../../components/external_links/external_links_consts';\nimport ServiceFactory from '../../services/service_factory';\n\nexport default class RichComponentController extends BaseComponent {\n\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'RichComponentController';\n\n /**\n * @static\n * @type {string}\n */\n static DIRECTIVE = 'cgp-rich-component';\n\n /**\n * Root component selector\n * @type {string}\n * @private\n */\n _selector = 'cgp-rich-component';\n\n /**\n * @param params\n */\n init(params) {\n super.init();\n this._setCampaignId(params);\n }\n\n /**\n * CampaignID parameter\n * @type {null}\n * @private\n */\n _campaignId = null;\n\n /**\n * Sets the value for private variable _campaignId\n * @param params\n * @private\n */\n _setCampaignId(params) {\n if (!params || !params.campaignid) {\n this.logger.error('CGP RICH directive requires campaignid parameter which was not provided');\n } else {\n this._campaignId = params.campaignid;\n }\n }\n\n /**\n * Start RICH feature behavior\n * @returns {RichComponentController}\n */\n start() {\n let externalLinkEl = this._state();\n this.render(externalLinkEl);\n return this;\n }\n\n /**\n * @returns {*}\n * @private\n */\n _state() {\n if (this._isRichPageAllowed()) {\n return this._openRichExternalLinksHandler();\n } else {\n let message = DOM.createElement('div');\n DOM.html(this.serviceFactory.languageService().translation('rich_user_not_logged_in'), message);\n return message;\n }\n }\n\n /**\n * @returns {*|string}\n * @private\n */\n _openRichExternalLinksHandler() {\n let externalLinkComponent = this.serviceFactory.componentFactoryService().createComponent(ExternalLinksComponentContoller, {\n source: EXTERNAL_LINKS_CONSTS.GNWP_SOURCES.RICH,\n type: EXTERNAL_LINKS_CONSTS.COMPONENT_TYPES.DIRECTIVE,\n options: {marketingCampaignId: this._campaignId}\n });\n\n externalLinkComponent.openLink();\n\n return externalLinkComponent.getEl();\n }\n\n /**\n * @returns {*|boolean|boolean}\n * @private\n */\n _isRichPageAllowed() {\n return ServiceFactory.create().oAuth2Service().isAuthorized();\n }\n}\n\n\n","/**\n * created by Felicia Dumitrache\n */\nimport BaseComponent from \"../../base/base_component\";\nimport GameHostComponent from \"../game_host/game_host_component_controller\";\nimport _ from \"../../utils/underscore\";\n\nexport default class AffiliatesGameHostComponent extends BaseComponent{\n /**\n * @type {string}\n */\n static CLASS = \"AffiliatesGameHostComponent\";\n\n /**\n * @type {string}\n */\n static DIRECTIVE = \"cgp-directive-affiliates_game_host\";\n\n /**\n * game type sent by affiliate via dataset\n * @type {String}\n * @private\n */\n _gameType = null;\n\n /**\n * used for timeout message\n * @type {Observable}\n * @private\n */\n _showMessageObservable = null;\n\n /**\n * init the component and set gameType received in params\n * @param params {Object}\n */\n init(params={}){\n super.init(params);\n if(_.isNullOrUndefined(params.gametype)) {\n this.throwArgumentExpected('40', 'init', 'gametype');\n }\n this._gameType = params.gametype;\n }\n\n /**\n * create Host Game component which open game and start timout message\n */\n start() {\n if (this.serviceFactory.regulationService().isAnonymousPlayAllowed()){\n this.appendChildComponent(GameHostComponent.create({gameType: this._gameType}).start());\n this._startTimeout();\n } else {\n this._showRestrictedGameMessage();\n }\n }\n\n /**\n * show Go to lobby message and set actions and callbacks for buttons\n * @private\n */\n\n _showRestrictedGameMessage(){\n this.serviceFactory.structuredLoggingService().getLogger({\n eventName: 'GAME_PREVENTED_COUNTRY_BLOCK_AFFILIATES'\n }).info();\n this.serviceFactory.messageManagerService().openMessage({\n closeButton: false,\n title: this.serviceFactory.languageService().translation('demo_restricted_title'),\n text: this.serviceFactory.languageService().translation('demo_restricted_message'),\n buttons: [{\n name: this.serviceFactory.languageService().translation('demo_restricted_btn'),\n isClosable: false,\n callback: () => {\n this.serviceFactory.structuredLoggingService().getLogger({\n eventName: 'GO_TO_LOBBY_GAME_COUNTRY_BLOCKED_AFFILIATES'\n }).info();\n this._goToLobby();\n }\n }]\n });\n }\n\n /**\n * start timeout for displaying message\n * @private\n */\n _startTimeout(){\n let interval = this.serviceFactory.gameService().getAffiliatesGoToLobbyInterval();\n this._showMessageObservable = this.serviceFactory.observableFactoryService().fromTimeout(interval)\n .forEach(() => {\n this._clearTimeout();\n this._showGoToLobbyMessage();\n })\n }\n\n /**\n * show Go to lobby message and set actions and callbacks for buttons\n * @private\n */\n _showGoToLobbyMessage(){\n this.serviceFactory.messageManagerService().openMessage({\n closeButton: true,\n title: this.serviceFactory.languageService().translation('go_to_lobby_title'),\n text: this.serviceFactory.languageService().translation('go_to_lobby_message'),\n buttons: [{\n name: this.serviceFactory.languageService().translation('go_to_lobby_btn'),\n isClosable: true,\n callback: () => {\n this._goToLobby();\n }\n }],\n btnCloseCallback: () => {\n this._clearTimeout();\n this._startTimeout();\n }\n });\n }\n\n /**\n * method called when click on Go To Lobby button\n * opens Lobby in new browser tab\n * @private\n */\n _goToLobby(){\n this.serviceFactory.openLinkService().goToLobby();\n }\n\n /**\n * clears the message timeout\n * @private\n */\n _clearTimeout() {\n if (this._showMessageObservable) {\n this._showMessageObservable.dispose();\n this._showMessageObservable = null;\n }\n }\n}","import BaseObject from \"../base/base_object\";\nimport ObservableFactory from \"./observable_factory\";\nimport {IObservableSubscription} from \"./observable\";\n\nexport interface RetryItem {\n durationInSeconds: number;\n repeatTimes: number;\n}\n\nexport interface IReconnectHelperParams {\n retryFunc(): void,\n retryIntervals: RetryItem[],\n name: string\n}\n\nexport interface IReconnectHelper{\n init(params:IReconnectHelperParams);\n getNumberOfRetries(): number;\n start(): void;\n stop(): void;\n}\n\nexport default class ReconnectHelper extends BaseObject implements IReconnectHelper{\n static CLASS='ReconnectHelper';\n\n _retryFunc = null;\n _retryIntervals: RetryItem[] = null;\n _currentIntervalIdx: number = 0; //current index of _retryIntervals\n _currentRepeatCount:number = 0; //repeatTimes count for current interval\n _numberOfRetries:number = 0;\n _reconnectTimerObservable:IObservableSubscription = null; //used for timeout connection // , dar da eroare\n _observableFactory:ObservableFactory = null;\n _serviceName: string;\n\n init(params:IReconnectHelperParams){\n this._retryFunc = params.retryFunc || null;\n this._retryIntervals = params.retryIntervals || [];\n this._serviceName = params.name || \"UNKNOWN SERVICE USING RECONNECT HELPER\";\n this._observableFactory = ObservableFactory.create();\n }\n\n getNumberOfRetries(): number {\n return this._numberOfRetries;\n }\n\n /**\n * call connect function and if it fails, it will start the reconnection process\n */\n start() {\n this._callConnectFunction();\n }\n\n /**\n * clears timeout and resets counters\n */\n stop() {\n this._currentIntervalIdx = 0;\n this._currentRepeatCount = 0;\n this._numberOfRetries = 0;\n\n this._clearTimeout();\n }\n\n /**\n * starts timeout and call connection function\n */\n private _startTimeout() {\n this._clearTimeout();\n this._numberOfRetries++;\n let currentInterval = this._retryIntervals[this._currentIntervalIdx];\n\n this._reconnectTimerObservable = this._observableFactory.fromTimeout(currentInterval.durationInSeconds * 1000)\n .forEach(() => {\n if (currentInterval.repeatTimes > 0) {\n this._currentRepeatCount++;\n if (this._currentRepeatCount === currentInterval.repeatTimes) {\n this._currentIntervalIdx++;\n this._currentRepeatCount = 0;\n if (this._currentIntervalIdx >= this._retryIntervals.length) {\n this.stop();\n return;\n }\n }\n }\n // call connect function and if it fails it will renew the timout ( continues reconnection process )\n this._callConnectFunction();\n })\n }\n\n /**\n * calls reconnection function. if successful, stops the helper, otherwise restarts the timeout\n */\n private _callConnectFunction() {\n this._retryFunc()\n .then(() => {\n this.logger.info(`${this._serviceName} RECONNECT HELPER :: CONNECTION SUCCESSFUL ON ATTEMPT ${this._numberOfRetries}`);\n this.stop();\n })\n .catch(() => {\n this.logger.info(`${this._serviceName} RECONNECT HELPER :: CONNECTION FAILED, RECONNECT ATTEMPT ${this._numberOfRetries}, RETRY INTERVAL ATTEMPT NO: ${this._currentRepeatCount}`, this._retryIntervals[this._currentIntervalIdx]);\n this._startTimeout();\n });\n }\n\n /**\n * clears the retry timeout\n */\n private _clearTimeout() {\n if (this._reconnectTimerObservable) {\n this._reconnectTimerObservable.dispose();\n this._reconnectTimerObservable = null;\n }\n }\n}","import BaseComponent from '../../base/base_component';\nimport DOM, {ElementSize} from '../../utils/dom';\nimport Device from '../../utils/device/device';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport { BaseComponentParams } from '../../base/base_component_interface';\n\n\nexport interface GameBodyComponentBaseParams extends BaseComponentParams {\n gameType: number;\n gameGroupId: number;\n isResizable: boolean;\n gameSize: ElementSize;\n gameProviderCssClassName: string;\n additionalCssClasses: string[];\n}\n\nexport default abstract class GameBodyComponentBase extends BaseComponent {\n\n _selector = 'cgp-game-body';\n\n protected abstract _setGameBodySize(gameSize: ElementSize): void;\n\n private _params: GameBodyComponentBaseParams;\n\n protected init(params: GameBodyComponentBaseParams) {\n super.init(params);\n\n if(!params.gameProviderCssClassName) {\n this.throwArgumentExpected('29', 'init', 'gameProviderCssClassName');\n }\n\n this._params = params;\n\n this.addClass('cgp-game-iframe-container');\n this.addClass(params.gameProviderCssClassName);\n this.addClass('cgp-game-' + params.gameType);\n\n this._appendAdditionalClasses(params.additionalCssClasses);\n this._subscribe();\n }\n\n private _appendAdditionalClasses(classes: string[]) {\n classes = classes || [];\n\n classes.forEach(cls => {\n this.addClass(cls);\n });\n }\n\n _isGameResizable() {\n return this._params.isResizable && !Device.os.isMobileOS;\n }\n\n _subscribe() {\n if (this._isGameResizable()) {\n this.onSystemEvent(SYSTEM_EVENTS.SCREEN_RESIZE_CHANGED, () => {\n this.serviceFactory.observableFactoryService().fromTimeout(200).forEach(() => {\n this._resizeGame();\n });\n });\n\n }\n\n }\n\n private _computeAvailableSpace(): ElementSize {\n return this.serviceFactory.windowService().getComputedSize(DOM.querySelector('.cgp-game-body-container'));\n }\n\n private _resizeGame() {\n let availableSpace = this._computeAvailableSpace();\n\n\n let gameMax = {...this._params.gameSize};\n\n let output = {...this._params.gameSize};\n\n let calculateAspectRatioFit = (srcWidth, srcHeight, maxWidth, maxHeight) => {\n let ratio = Math.min(maxWidth / srcWidth, maxHeight / srcHeight);\n\n return {\n width: Math.floor(srcWidth * ratio),\n height: Math.floor(srcHeight * ratio)\n };\n };\n\n if (gameMax.width >= availableSpace.width || gameMax.height >= availableSpace.height) {\n output = calculateAspectRatioFit(gameMax.width, gameMax.height, availableSpace.width, availableSpace.height);\n }\n\n this._setGameBodySize(output);\n\n }\n\n onAppendedToDOM() {\n super.onAppendedToDOM();\n\n if (this._isGameResizable()) {\n this._resizeGame();\n } else {\n this._setGameInitialSize();\n }\n }\n\n _setGameInitialSize() {\n if (!Device.os.isMobileOS) {\n this._setGameBodySize(this._params.gameSize);\n }\n }\n\n updateGameSize() {\n this._resizeGame();\n }\n\n stopAutoplay() {\n // to be overridden in extended classes\n }\n}","import _ from '../../utils/underscore';\nimport { IFreePlayVoucher, IFreePlayVoucherDelta } from './Free_play_voucher';\n\nexport interface IAddOrEditResponse {\n updatedValue?: IFreePlayVoucher;\n wasAdded: boolean;\n}\n\nexport class FreePlayVoucherList {\n constructor(values: IFreePlayVoucher[] = []) {\n if (values && values.length) {\n this.reset(values);\n }\n }\n\n values(): IFreePlayVoucher[] {\n return [...this._vouchers];\n }\n\n get length() {\n return this._vouchers.length;\n }\n\n reset(newValues: IFreePlayVoucher[]): void {\n this._vouchers = [];\n newValues.forEach(item => this._vouchers.push(item));\n this._sort();\n }\n\n add(newValues: IFreePlayVoucher[]): void {\n newValues.forEach(item => {\n // shallow copy voucher before saving. Avoid side effect in case the voucher object changed outside the service\n const voucher: IFreePlayVoucher = Object.assign({}, item);\n this._vouchers.push(voucher);\n });\n this._sort();\n }\n\n update(delta: IFreePlayVoucherDelta): IFreePlayVoucher | null {\n const updated = this._updateById(delta);\n if (updated) {\n this._sort();\n }\n return updated;\n }\n\n addOrUpdate(newValue: IFreePlayVoucherDelta | IFreePlayVoucher): IAddOrEditResponse {\n const updated = this._updateById(newValue);\n if (!updated) {\n this.add([newValue as IFreePlayVoucher]);\n return { updatedValue: null, wasAdded: true };\n } else {\n this._sort();\n return { updatedValue: updated, wasAdded: false };\n }\n }\n\n remove(ID: string): IFreePlayVoucher | null {\n const index = this._findIndexByID(ID);\n if (index < 0) {\n return null;\n }\n\n const toDeleteEntry = this._vouchers[index];\n this._vouchers.splice(index, 1);\n return toDeleteEntry;\n }\n\n getByID(voucherID: string): IFreePlayVoucher | null {\n const index = this._findIndexByID(voucherID);\n if (index < 0) {\n return null;\n }\n\n const voucher = this._vouchers[index];\n return voucher;\n }\n\n static getMergedResult(initial: IFreePlayVoucher, delta: IFreePlayVoucherDelta): IFreePlayVoucher | null {\n if (initial.ID !== delta.ID) {\n return null;\n }\n\n const merged = {...initial};\n for (const prop in initial) {\n const updatedValue = delta[prop];\n // nulls are cosidered \"good\" override values\n if (_.isUndefined(updatedValue)) {\n continue;\n }\n\n merged[prop] = updatedValue;\n }\n return merged;\n }\n\n private _findIndexByID(voucherID: string): number {\n for (let index = 0; index < this._vouchers.length; index++) {\n const voucher = this._vouchers[index];\n if (voucher.ID === voucherID) {\n return index;\n }\n }\n return -1;\n }\n \n private _updateById(item: IFreePlayVoucherDelta): IFreePlayVoucher | null {\n const index = this._findIndexByID(item.ID);\n if (index < 0) {\n return null;\n }\n\n let updated = false;\n const oldVoucher = this._vouchers[index];\n\n // shallow clone and update changed values\n const updatedVoucher = {...oldVoucher};\n for (const prop in item) {\n const updatedValue = item[prop];\n // nulls are considered \"good\" override values\n if (_.isUndefined(updatedValue)) {\n continue;\n }\n\n updated = true;\n updatedVoucher[prop] = updatedValue;\n }\n \n // put new object (if it's the case)\n if (updated) {\n this._vouchers[index] = updatedVoucher;\n }\n\n // old strategy was kind of:\n // const updatedVoucherRelevantValues = _.cleanObject(voucher, undefined) as IFreePlayUpdateVoucher;\n // const updatedVoucher = Object.assign(oldVoucher, item);\n // this._vouchers[index] = updatedVoucher;\n\n return updated? this._vouchers[index] : undefined;\n }\n\n appendVouchers(toAdd: IFreePlayVoucher[]): FreePlayVoucherList {\n const res = new FreePlayVoucherList(this.values());\n res.add(toAdd);\n return res;\n }\n\n private _sort(): void {\n this._vouchers.sort((v1, v2) => {\n if (_.isNullOrUndefined(v1.ExpirationDate)) {\n if (_.isNullOrUndefined(v2.ExpirationDate)) {\n return 0;\n } else {\n return 1;\n }\n }\n return new Date(v1.ExpirationDate).getTime() < new Date(v2.ExpirationDate).getTime() ? -1 : 1;\n });\n\n }\n\n private _vouchers: IFreePlayVoucher[] = [];\n}\n","import BaseObject from '../../../base/base_object';\n\nexport default class GamePostMessageHandlerBase extends BaseObject {\n\n canExecuteAction(gameOptions, actionName, params) {\n this.throwNotImplemented('6', 'canExecuteAction');\n }\n\n executeAction(gameOptions, actionName, params) {\n this.throwNotImplemented('10', 'executeAction');\n }\n}","import GamePostMessageListenerBase from './game_post_messages_listener_base';\n\nexport default class VoidGamePostMessageListener extends GamePostMessageListenerBase {\n static CLASS = 'VoidGamePostMessageListener';\n\n processPostMessage(messageData) {\n // nothing to do here\n }\n}","import BaseComponent from \"../../base/base_component\";\nimport DateFormatter from \"../../utils/date_formatter\";\nimport Directive from \"../../core/directive\";\nimport {GermanyResponsibleGamingButtonPlacement} from \"../../../../common/const/responsible-gaming\";\nimport SessionTimerController from \"../session_timer/session_timer_controller\";\nimport {SYSTEM_EVENTS, USER_EVENTS} from \"../../events/events\";\nimport Event from \"../../utils/event\";\nimport Device from '../../utils/device/device';\n\nconst DETAILS_VIEW = require('./view/details.html');\nconst ANALYTICS_CATEGORY = 'Client_GamingHistory_Detailed';\n\n\nconst DOM_OBJECTS_IDS = {\n DETAILS_HISTORY: '.cgp-details-history',\n DETAILS_HEADER_NAME: '.cgp-header-game-name',\n DETAILS_HEADER_DATETIME: '.cgp-header-game-datetime',\n DETAILS_CONTAINER: '.cgp-details-history-game-container',\n AGE_RESPONSIBLE_GAME: '.cgp-details-history-age-responsible-game',\n RESPONSIBLE_GAME_ICONS: '.cgp-details-history-resp-game-icons',\n DETAILS_HEADER_SESSION_TIME: '.cgp-details-session-time',\n DETAILS_HEADER_CLOSE: '.cgp-themes-icons-x'\n}\n\n\nexport class DetailHistoryComponentController extends BaseComponent {\n\n _gameBodyComponent = null;\n _analyticsLabel = null;\n init(params) {\n params.innerHtml = DETAILS_VIEW;\n super.init(params);\n const {historyRecordData, gameType, gameName, gameBodyComponent, gameBackgroundImageUrl, gameInfo} = params;\n this._gameBodyComponent = gameBodyComponent;\n this._gameInfo = gameInfo;\n this._analyticsLabel = this._getAnalyticsLabel(gameType, gameName);\n const container = this.getEl();\n\n if (!Device.os.isMobileOS && gameBackgroundImageUrl) {\n container.querySelector(DOM_OBJECTS_IDS.DETAILS_HISTORY).style.backgroundImage = 'url(' + gameBackgroundImageUrl + ')';\n }\n\n container.querySelector(DOM_OBJECTS_IDS.DETAILS_HEADER_NAME).innerHTML = gameName;\n let historyDate = this.serviceFactory.clockService().formatToRegulationOffset(historyRecordData.Date, historyRecordData.DateInTimeZone);\n container.querySelector(DOM_OBJECTS_IDS.DETAILS_HEADER_DATETIME).innerHTML = DateFormatter.format(historyDate.date.toString(), this.serviceFactory.skinService().getDateTimeHistoryFormat(), historyDate.isUTC);\n\n this.appendChildComponent(gameBodyComponent, DOM_OBJECTS_IDS.DETAILS_CONTAINER);\n\n this._injectAgeResponsibleGame(container);\n this._injectResponsibleGameIcons(container);\n this._injectSessionTimer(container);\n\n this._analyticsBind(container);\n\n // Bind Close Button\n this.onDOMEvent(container.querySelector(DOM_OBJECTS_IDS.DETAILS_HEADER_CLOSE), USER_EVENTS.ON_CLICK, () => {\n //The reason we do it like this is because also Orbit wants to close the detail history window when the route changes (user press the back button in the browser)\n //and we want to share the close logic between SDK and Orbit\n this.serviceFactory.gameService().closeCurrentDetailHistory();\n });\n\n }\n\n _injectAgeResponsibleGame(container) {\n if (!this.serviceFactory.regulationService().getRegulation().showAgeResponsibleGameInDetailedHistory()) {\n return;\n }\n\n let ageResponsibleGame = Directive.generate({directiveName: 'age_responsible_game', start: true, props: {}});\n container.querySelector(DOM_OBJECTS_IDS.AGE_RESPONSIBLE_GAME).appendChild(ageResponsibleGame.getEl())\n }\n\n _injectResponsibleGameIcons(container) {\n if (!this.serviceFactory.regulationService().getRegulation().showResponsibleIcons()) {\n return;\n }\n\n let responsibleIcons = Directive.generate({directiveName: 'responsible_gaming_icons', start: true, props: {placement:GermanyResponsibleGamingButtonPlacement.inDetailedHistory}});\n //DOM.addClass(responsibleIcons.getEl(), 'cgp-theme-property-background-color-dark-grey');\n container.querySelector(DOM_OBJECTS_IDS.RESPONSIBLE_GAME_ICONS).appendChild(responsibleIcons.getEl())\n }\n\n _injectSessionTimer(container) {\n if (!this.serviceFactory.regulationService().sessionTimerVisible()) {\n return;\n }\n\n let sessionTimer = SessionTimerController.create();\n sessionTimer.start();\n this.innerComponentsRef.push(sessionTimer);\n container.querySelector(DOM_OBJECTS_IDS.DETAILS_HEADER_SESSION_TIME).appendChild(sessionTimer.getEl());\n }\n\n _analyticsBind(container) {\n const label = this._analyticsLabel;\n // Bind Close Overlay\n this.onDOMEvent(container.querySelector(DOM_OBJECTS_IDS.DETAILS_HEADER_CLOSE), USER_EVENTS.ON_CLICK, () => {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: ANALYTICS_CATEGORY,\n action: 'CloseClick',\n label: label\n });\n });\n\n\n // Bind click header elements\n this.onDOMEvent(container.querySelector(DOM_OBJECTS_IDS.DETAILS_HEADER_NAME), USER_EVENTS.ON_CLICK, () => {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: ANALYTICS_CATEGORY,\n action: 'GameName',\n label: label\n });\n });\n\n this.onDOMEvent(container.querySelector(DOM_OBJECTS_IDS.DETAILS_HEADER_DATETIME), USER_EVENTS.ON_CLICK, () => {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: ANALYTICS_CATEGORY,\n action: 'Time',\n label: label\n });\n });\n }\n\n _getAnalyticsLabel(gameType, gameName) {\n if (!gameName) {\n return gameType;\n }\n\n return gameType + '_' + gameName.replace(/ /g, '');\n }\n\n _closeDetails() {\n this.shutDown();\n window.CGP.closeLastOverlay();\n }\n\n showHistoryDetails() {\n const analytics_label = this._analyticsLabel;\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Client_GamingHistory',\n action: 'MoreDetails',\n label: analytics_label\n });\n\n window.CGP.openOverlay({\n el: this.getEl(),\n level: 2,\n isCloseBtnAllowed: false,\n additionalClasses: ['cgp-overlay-history-details'],\n closeCallback: () => {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: ANALYTICS_CATEGORY,\n action: 'Close',\n label: analytics_label\n });\n },\n openCallback: () => {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: ANALYTICS_CATEGORY,\n action: 'Open',\n label: analytics_label\n });\n }\n });\n\n this.serviceFactory.gameService().attachDetailHistoryCloseHandler(this._closeDetails.bind(this));\n\n this._gameBodyComponent.onAppendedToDOM();\n\n }\n\n}","/**\n * OnDemand const symbols.\n * @constant\n * @type {Object}\n */\n\n\nconst ON_DEMAND = {\n CB_FN: 'cbfn',\n STATUS_BAR_DATA: 'statusBarData',\n ODR_GAMES: 'ODR_Games'\n};\n\n\nexport {ON_DEMAND};","import BaseComponent from \"../../base/base_component\";\nimport Device from '../../utils/device/device';\nimport DOM from \"../../utils/dom\";\nimport {namedSetInterval} from \"../../../../common/utils/time-functions\";\n\nconst gameSessionTimerView = require('./view/game_session_timer.html');\n\nexport default class GameSessionTimerController extends BaseComponent {\n\n _tickingInterval;\n _initUnixTime: number;\n _currentHMS: string;\n _valueDOM;\n /**\n *\n * @type {string}\n */\n static CLASS = 'GameSessionTimerController';\n\n /**\n *\n * @type {string}\n */\n static DIRECTIVE = 'cgp-directive-game-session-timer';\n\n /**\n *\n * @type {string}\n * @private\n */\n protected _selector = 'cgp-game-session-timer-component';\n\n start() {\n this._bakeHTML();\n\n this._initUnixTime = new Date().getTime();\n this._tickClock();\n this._subscribe();\n\n return this;\n }\n\n _bakeHTML(){\n this.setHTML(this.bake(gameSessionTimerView));\n\n this._valueDOM = this.querySelector(`.${this._selector}-value`);\n\n if (Device.isMobile()) {\n this.addClass('cgp-themes-small-secondary-grayed-out-text');\n } else {\n this.addClass('cgp-themes-grayed-out-text');\n }\n }\n\n _subscribe() {\n this._tickingInterval = namedSetInterval('GAME_SESSION_TIMER', this._tickClock.bind(this), 200);\n }\n\n _tickClock(){\n const currentHMS = this._secondsToHMS((new Date().getTime()) - this._initUnixTime);\n\n if(currentHMS !== this._currentHMS) {\n this._valueDOM.innerHTML = currentHMS;\n }\n\n this._currentHMS = currentHMS;\n }\n\n _secondsToHMS(secs) {\n function z(n){return (n<10?'0':'') + Math.floor(n);}\n secs = Math.abs(secs / 1000);\n return z(secs/3600 |0) + ':' + z((secs%3600) / 60 |0) + ':' + z(secs%60);\n }\n\n shutDown() {\n super.shutDown();\n this._tickingInterval && DOM.clearInterval(this._tickingInterval);\n }\n\n}","import BaseComponent from '../../base/base_component';\nimport DOM from '../../utils/dom';\nimport _ from '../../utils/underscore';\nimport { SYSTEM_EVENTS } from \"../../events/events\";\nimport { BaseComponentParams } from \"../../base/base_component_interface\";\nimport Device from \"../../utils/device/device\";\n\nconst templateView = require('./view/view.html');\n\ninterface NetPositionControllerParams extends BaseComponentParams {\n gameType?: number;\n}\n\nexport default class NetPositionController extends BaseComponent {\n static CLASS = 'NetPositionController';\n\n protected _selector = 'cgp-net-position-component';\n protected _valueSelector = `.${this._selector}-value`;\n\n private params: NetPositionControllerParams;\n\n private receivedFireBaseValueWithoutRoundEndCounter = 0;\n\n private FLAGS = {\n FEATURE_ENABLED: false,\n ROUND_END_EXISTS_FOR_GAME: false,\n RECEIVED_ROUND_END: false,\n LAST_TIME_RECEIVED_ROUND_END: null,\n NET_POSITION_LAST_RECEIVED_VALUE: null,\n TOTAL_NET_POSITION_RECEIVED_COUNT: 0\n };\n\n init(params) {\n params = params || {};\n super.init(params);\n\n this._bakeHTML();\n\n this.params = params;\n\n this._setAmount(0);\n this._resetFirebaseGameTypeForSessionAmount();\n\n this._subscribe();\n }\n\n _bakeHTML() {\n this.setHTML(this.bake(templateView));\n\n if (Device.isMobile()) {\n this.addClass('cgp-themes-small-secondary-grayed-out-text');\n } else {\n this.addClass('cgp-themes-grayed-out-text');\n }\n }\n\n _setAmount(value) {\n\n if (_.isNullOrUndefined(value)) {\n value = 0;\n }\n\n this.logger.debug('Net Position strip update', value, this._getCurrentFlags());\n\n DOM.text(this.querySelector(this._valueSelector), this.serviceFactory.currencyService().formatMoney(value));\n\n this._resetQueueValues();\n\n //Report strip update also to Kibana for better monitoring (only for vip users -avoiding too much reporting)\n const accountData = this.serviceFactory.userService().getAccountData();\n if (accountData && accountData.IsVip) {\n this._sendElasticEvent(\"Net Position Strip update\", \"Net Position Strip update\", value);\n }\n }\n\n onGameRoundEnd() {\n\n this.logger.debug(\"Net Position gameRoundEnd notification received\", this._getCurrentFlags());\n\n if (!this.FLAGS.ROUND_END_EXISTS_FOR_GAME) {\n this.FLAGS.ROUND_END_EXISTS_FOR_GAME = true;\n this.FLAGS.LAST_TIME_RECEIVED_ROUND_END = (new Date()).getTime();\n this.logger.debug(\"First gameRoundEnd received for game\", this._getCurrentFlags());\n return;\n }\n\n if (this._isLessThenTimeFromLastEndRound()) {\n this.logger.debug(\"Net Position gameRoundEnd received too early again\", this._getCurrentFlags());\n this.FLAGS.LAST_TIME_RECEIVED_ROUND_END = (new Date()).getTime();\n return;\n }\n\n\n this.FLAGS.RECEIVED_ROUND_END = true;\n this.FLAGS.LAST_TIME_RECEIVED_ROUND_END = (new Date()).getTime();\n this._checkIfToSetAmount();\n }\n\n _receivedNetPosition(netPosition = {}) {\n if (netPosition.hasOwnProperty(this.params?.gameType)) {\n this.FLAGS.NET_POSITION_LAST_RECEIVED_VALUE = netPosition[this.params.gameType];\n this.logger.debug('Firebase Net Position received', this.FLAGS.NET_POSITION_LAST_RECEIVED_VALUE, this._getCurrentFlags());\n\n this.FLAGS.TOTAL_NET_POSITION_RECEIVED_COUNT++;\n\n if (this.FLAGS.TOTAL_NET_POSITION_RECEIVED_COUNT === 3) { //1: init 0, 2: spin, 3: second spin\n this.FLAGS.FEATURE_ENABLED = true;\n this.logger.debug('Net Position feature was ENABLED', this._getCurrentFlags());\n }\n\n this._checkIfToSetAmount();\n }\n }\n\n _checkIfToSetAmount() {\n const currentNetPositionValue = this.FLAGS.NET_POSITION_LAST_RECEIVED_VALUE;\n\n // If Feature not active OR Game don't have gameRoundEnd => put value\n if ((!this.FLAGS.FEATURE_ENABLED || !this.FLAGS.ROUND_END_EXISTS_FOR_GAME) && currentNetPositionValue !== null) {\n this.logger.debug(`NetPosition not enabled or no roundEnd received, update stripe amount on Firebase update`, this._getCurrentFlags());\n\n if (!this.FLAGS.ROUND_END_EXISTS_FOR_GAME) {\n this.receivedFireBaseValueWithoutRoundEndCounter++;\n }\n\n if (this.receivedFireBaseValueWithoutRoundEndCounter === 6) {\n this._sendElasticEvent(\"missing_round_end_event\", \"Missing Round End Event\", this.params.gameType);\n }\n\n return this._setAmount(currentNetPositionValue);\n }\n\n if (this.FLAGS.RECEIVED_ROUND_END && currentNetPositionValue !== null) {\n this.logger.debug('Both roundEnd and Firebase notification received - update stripe amount', this._getCurrentFlags());\n this._setAmount(currentNetPositionValue);\n }\n }\n\n _subscribe() {\n this.onSystemEvent(SYSTEM_EVENTS.NET_POSITION_VALUE_UPDATE, this._receivedNetPosition.bind(this));\n }\n\n _resetFirebaseGameTypeForSessionAmount() {\n this.params?.gameType && this.serviceFactory.netPositionService().initializeNetPositionOnGameType(this.params.gameType);\n }\n\n _resetQueueValues() {\n this.FLAGS.NET_POSITION_LAST_RECEIVED_VALUE = null;\n this.FLAGS.RECEIVED_ROUND_END = false;\n\n this.logger.debug('Reset Queue Values', this._getCurrentFlags());\n }\n\n _sendElasticEvent(action: string, label: string, value: any) {\n const data = {\n CGPEventCategory: \"NetPosition\",\n CGPEventAction: action,\n CGPEventLabel: label,\n CGPEventValue: value\n };\n this.serviceFactory.structuredLoggingService().getLogger(data).info();\n }\n\n //time: 500ms\n _isLessThenTimeFromLastEndRound() {\n return Math.floor(new Date().getTime() - this.FLAGS.LAST_TIME_RECEIVED_ROUND_END) < 500;\n }\n\n _getCurrentFlags() {\n return { ...this.FLAGS };\n }\n}\n","import BaseComponent from '../../../../../base/base_component';\nimport {BaseComponentParams} from \"../../../../../base/base_component_interface\";\nimport ClockComponentController from \"../../../../clock/clock_controller_component\";\nimport Device from \"../../../../../utils/device/device\";\nimport DOM from '../../../../../utils/dom';\nimport GameSessionTimerController from \"../../../../game_session_timer/game_session_timer_controller\";\nimport NetPositionController from \"../../../../net_position/net_position_controller\";\nimport OntarioResponsibleGamingIconsController\n from \"../responsible_gaming_icons/ontario_responsible_gaming_icons_controller\";\nimport {Check} from \"@sparkware/app-utils\";\n\nconst templateView = require('./view/view.html');\nexport const CANADA_ONTARIO_STRIP_COMPONENT_SELECTOR = 'cgp-canada-ontario-stripe-component';\n\ninterface ICanadaOntarioGameStripeComponentParams extends BaseComponentParams{\n gameType: number;\n showNetPosition: boolean;\n}\n\nexport default class CanadaOntarioGameStripeComponent extends BaseComponent {\n static CLASS = 'CanadaOntarioGameStripeComponent';\n\n _selector = CANADA_ONTARIO_STRIP_COMPONENT_SELECTOR;\n\n _netPositionController: NetPositionController = null;\n private params: ICanadaOntarioGameStripeComponentParams;\n\n init(params ) {\n params = params || {};\n\n params.innerHtml = templateView;\n super.init(params);\n\n this.params = params;\n if(Check.isNullOrUndefined(this.params.showNetPosition)){\n this.params.showNetPosition = true\n }\n this.start();\n }\n\n start() {\n super.start();\n\n if(this.params.showNetPosition) {\n const {gameType} = this.params;\n this._netPositionController = NetPositionController.create({gameType});\n this.appendChildComponent(this._netPositionController, '.cgp-ontario-stripe');\n }\n\n\n if (Device.os.isMobileOS) {\n\n const clockComponentWrapper = this.createRootElement();\n DOM.addClass(clockComponentWrapper, 'cy-game-stripe-clock');\n clockComponentWrapper.appendChild(this._getClockComponent().getEl());\n\n let clockComponentContainerSelector = this.params.showNetPosition ? '.cgp-ontario-stripe' : '.cgp-ontario-stripe-regulation-buttons';\n this.querySelector(clockComponentContainerSelector).appendChild(clockComponentWrapper);\n\n const responsibleGamingIcons = OntarioResponsibleGamingIconsController.create();\n responsibleGamingIcons.start();\n this.appendChildComponent(responsibleGamingIcons, '.cgp-ontario-stripe-regulation-buttons');\n }\n\n if(this.params.showNetPosition) {\n const gameSessionTimer = GameSessionTimerController.create();\n this.appendChildComponent(gameSessionTimer, '.cgp-ontario-stripe');\n gameSessionTimer.start();\n }\n\n return this;\n }\n\n onGameRoundEnd(){\n this._netPositionController?.onGameRoundEnd();\n }\n\n _getClockComponent() {\n const clockComponent = this.serviceFactory.componentFactoryService().createComponent(ClockComponentController, {\n datetime: this.serviceFactory.skinService().getTimeFormat()\n });\n\n clockComponent.start();\n\n return clockComponent;\n }\n}","export const FALLBACK_HANDLERS = {\n WALLET: 'Wallet',\n FREE_PLAY: 'FreePlay'\n}","export const CONTAINER_IDS = {\n LAST_LOGIN: '#last_login_container',\n SESSION_TIMER: '#session_timer_container'\n};\n\nexport const LAST_LOGIN_SELECTORS = {\n TITLE: \".cgp-last-login-title\",\n VALUE: \".cgp-lastLogin\",\n CONTAINER: \".cgp-last-login-container\",\n\n};\n\nexport const LAST_LOGIN_TITLE_TRANSLATION_KEY = \"last_login_title\";\n\nexport const DEFAULT_SWITCH_TO_SESSION_TIMER_WAIT_INTERVAL = 60000;","import BaseRegulation from '../base_regulation';\nimport TempAccountMessageRegulationHelper from '../../helpers/temp_account_message_helper';\nimport { GNWP_SOURCES } from '../../../../components/external_links/external_links_consts';\n\nclass ItalyRegulation extends BaseRegulation {\n\n\tstatic CLASS = 'ItalyRegulation';\n\n\n\t/**\n\t *\n\t * @param params\n\t */\n\tinit(params) {\n\t\tsuper.init(params);\n\t\tthis._tempAccountMessageHelper = params.tempAccountMessageHelper || TempAccountMessageRegulationHelper.create({\n\t\t\tserviceFactory: this.serviceFactory\n\t\t});\n\t}\n\n\t_tempAccountMessageHelper;\n\n\tshowTempAccountMessage(closeFunc) {\n this._tempAccountMessageHelper.showTempAccountMessage({\n\t\t\tcloseFunc: closeFunc,\n\t\t\tmessageKey: 'it_temp_account_message',\n\t\t\tfooterMessageKey: 'it_temp_account_footer_message',\n\t\t\ttitleKey: 'temp_account_title',\n\t\t\tbtnNameKey: 'temp_account_upload_btn'\n\t\t});\n\t}\n\n\tgetExternalLinksConfig() {\n return {\n 'upload_document': {\n isCloseBtnAllowed: false\n }\n };\n }\n\n getTempAccountGnwpSource() {\n return GNWP_SOURCES.DOCUMENT_UPLOAD;\n }\n\n\tforceIntermediatePageForAutorizedUsers() {\n\t\treturn false;\n\t}\n}\n\nexport default ItalyRegulation;\n","import Event from '../../../../utils/event';\nimport {USER_EVENTS, SYSTEM_EVENTS} from '../../../../events/events';\nimport BaseComponent from '../../../../base/base_component';\nimport {NAVIGATION_VIEWS} from '../../../../components/external_links/external_links_consts';\n\nlet view = require('./view/dk_responsible_gaming_icons.html');\n\nexport default class DKResponsibleGamingIconsController extends BaseComponent {\n static CLASS = 'DKResponsibleGamingIconsController';\n\n init(params) {\n super.init(params);\n }\n\n start() {\n let bakedHTML = this.bake(view);\n this.setHTML(bakedHTML);\n this._subscribe();\n }\n\n _subscribe() {\n this.onDOMEvent(this.getDOMElementByClassName('cgp-regulatory-button cgp-dk-doga-icon'), USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics('dk_doga_icon_click');\n this.serviceFactory.openLinkService().openLink(\n {\n sourceLink: this.serviceFactory.skinService().getSafeToPlayURL(),\n view: NAVIGATION_VIEWS.WINDOW\n }\n );\n });\n\n this.onDOMEvent(this.getDOMElementByClassName('cgp-regulatory-button cgp-dk-stop-spillent-icon'), USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics('dk_stop_spillet_icon_click');\n this.serviceFactory.regulationService().getRegulation().openSelfExclusion(NAVIGATION_VIEWS.WINDOW);\n });\n\n this.onDOMEvent(this.getDOMElementByClassName('cgp-regulatory-button cgp-dk-rofus-icon'), USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics('dk_rofus_icon_click');\n this.serviceFactory.regulationService().getRegulation().openSelfTest(NAVIGATION_VIEWS.WINDOW);\n });\n }\n\n _sendAnalytics(label) {\n const analyticObject = {\n category: 'Navigation',\n action: 'Header',\n label: 'Icon_' + label\n };\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticObject);\n }\n}","import BaseRegulation, {BaseRegulationParams} from '../base_regulation';\nimport TempAccountMessageRegulationHelper from '../../helpers/temp_account_message_helper';\nimport {TEMP_ACCOUNT_STATUS} from '../../regulation_const';\nimport _ from '../../../../utils/underscore';\nimport {GNWP_SOURCES} from '../../../../components/external_links/external_links_consts';\n\ninterface SpainRegulationParams extends BaseRegulationParams {\n selfExclusionLink?: string;\n tempAccountMessageHelper?: TempAccountMessageRegulationHelper;\n}\nconst TEMP_ACCOUNT_PARAMS:any = {\n [TEMP_ACCOUNT_STATUS.DOCUMENTS_NOT_RECEIVED]: {\n status: TEMP_ACCOUNT_STATUS.DOCUMENTS_NOT_RECEIVED,\n messageKey: 'spa_temp_account_message',\n titleKey: 'temp_account_title',\n btnNameKey: 'temp_account_upload_btn',\n footerMessageKey: 'spa_temp_account_footer_message'\n },\n [TEMP_ACCOUNT_STATUS.PENDING_VERIFICATION]: {\n status: TEMP_ACCOUNT_STATUS.PENDING_VERIFICATION,\n messageKey: 'spa_temp_account_verify_message',\n titleKey: 'spa_temp_account_verify_title'\n },\n [TEMP_ACCOUNT_STATUS.APPROVED]: {\n status: TEMP_ACCOUNT_STATUS.APPROVED\n }\n};\nexport default class SpainRegulation extends BaseRegulation {\n\n static CLASS = 'SpainRegulation';\n private _tempAccountMessageHelper: TempAccountMessageRegulationHelper;\n private _msgParams: any;\n private _selfExclusionLink: string;\n\n public init(params: SpainRegulationParams): void {\n super.init(params);\n this._tempAccountMessageHelper = params.tempAccountMessageHelper || TempAccountMessageRegulationHelper.create({\n serviceFactory: this.serviceFactory\n });\n\n this._selfExclusionLink = params.selfExclusionLink;\n }\n\n public showTempAccountMessage(closeFunc):void {\n let accountData:any = this.serviceFactory.userService().getAccountData();\n let isDocUploadRequired:boolean = accountData.IsDocUploadRequired;\n let daysLeft:number = accountData.DaysToUploadDocument;\n let status:string = TEMP_ACCOUNT_STATUS.APPROVED;\n if (accountData.RegulationStatusId === 1 || accountData.RegulationStatusId === 2) {\n if (_.isNullOrUndefined(daysLeft)) {\n status = TEMP_ACCOUNT_STATUS.PENDING_VERIFICATION;\n } else if (daysLeft >= 0) {\n status = TEMP_ACCOUNT_STATUS.DOCUMENTS_NOT_RECEIVED;\n }\n }\n this._msgParams = Object.assign({}, {daysLeft: daysLeft}, TEMP_ACCOUNT_PARAMS[status]);\n this.logger.info('ES User status ' + status);\n if (isDocUploadRequired) {\n this.serviceFactory.openLinkService().openLink({\n source: GNWP_SOURCES.DOCUMENT_UPLOAD\n }\n );\n } else {\n this._tempAccountMessageHelper.showTempAccountMessage({\n closeFunc: closeFunc,\n paramsFunc: this.getTempAccountParams.bind(this)\n });\n }\n }\n\n showResponsibleIcons() {\n return false;\n }\n\n private getTempAccountParams(): any{\n return this._msgParams;\n }\n\n public getTempAccountGnwpSource(): string{\n return GNWP_SOURCES.DOCUMENT_UPLOAD;\n }\n\n public isAnonymousPlayAllowed() : boolean {\n return this.serviceFactory.oAuth2Service().isAuthorized();\n }\n\n public openSelfExclusion(view): void{\n if(!this._selfExclusionLink){\n this.logger.error('Spain self exclusion(AUTO PROHIBICION) link is missing');\n return;\n }\n this.serviceFactory.openLinkService().openLink({\n sourceLink: this._selfExclusionLink,\n view: view\n });\n }\n\n public forceIntermediatePageForAutorizedUsers() {\n return false;\n }\n}","import BaseRegulation from \"../base_regulation\";\nimport TempAccountMessageRegulationHelper from \"../../helpers/temp_account_message_helper\";\nimport { TEMP_ACCOUNT_STATUS } from \"../../regulation_const\";\n\nexport default class PortugalRegulation extends BaseRegulation {\n\n\tstatic CLASS = 'PortugalRegulation';\n\n\tinit(params) {\n\t\tsuper.init(params);\n\t\tthis._tempAccountMessageHelper = params.tempAccountMessageHelper || TempAccountMessageRegulationHelper.create({\n\t\t\tserviceFactory: this.serviceFactory\n\t\t});\n\t}\n\n\tprivate _tempAccountMessageHelper: TempAccountMessageRegulationHelper;\n\n\tshowTempAccountMessage(closeFunc) {\n this._tempAccountMessageHelper.showTempAccountMessage({\n closeFunc: closeFunc,\n paramsFunc: this._getTempAccountParams.bind(this),\n });\n\t}\n\t\n\tprivate _getTempAccountParams() {\n const accountData = this.serviceFactory.userService().getAccountData();\n\t\tlet daysLeft = accountData.DaysToUploadDocument;\n\t\tlet status = TEMP_ACCOUNT_STATUS.APPROVED;\n\n\t\tif (daysLeft >= 0 && (accountData.RegulationStatusId === 1 || accountData.RegulationStatusId === 2)) {\n\t\t\tstatus = TEMP_ACCOUNT_STATUS.DOCUMENTS_NOT_RECEIVED;\n\t\t}\n\n return {\n\t\t\tmessageKey: 'pt_temp_account_message',\n\t\t\tfooterMessageKey: 'pt_temp_account_footer_message',\n\t\t\ttitleKey: 'temp_account_title',\n\t\t\tbtnNameKey: 'temp_account_upload_btn',\n\t\t\tdaysLeft: daysLeft,\n\t\t\tstatus: status,\n\t\t};\n }\n\n\tshowSessionBalanceInAboutBox() {\n\t\treturn true;\n\t}\n}","import { Check } from '@sparkware/app-utils';\nimport {ID_VERIFICATION_STATUS} from '../../../../oauth/oauth_const';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport OptionsComponentController from '../../../../../components/options/options_component_controller';\nimport COMBaseRegulation from \"../com_base_regulation\";\nimport { TSR_TYPE } from '../../../../../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/time-spent-reminder-options';\n\ninterface AccountData {\n IdVerificationStatus: number,\n AddressVerificationStatus: number,\n RealityCheckDataIntervalInMins: number\n}\n\nexport default class UKRegulation extends COMBaseRegulation {\n static CLASS = 'UKRegulation';\n\n private _getAccountData(): AccountData {\n return this.serviceFactory.userService().getAccountData() as AccountData;\n }\n\n isAnonymousPlayAllowed() : boolean {\n\n if(!this.serviceFactory.oAuth2Service().isAuthorized()) {\n return false;\n }\n\n return this._getAccountData().IdVerificationStatus === ID_VERIFICATION_STATUS.AGE_VERIFIED;\n }\n\n forceDemoButton(): boolean {\n\n return this.isAnonymousPlayAllowed() && this._getAccountData().AddressVerificationStatus !== ID_VERIFICATION_STATUS.ADDRESS_VERIFIDED;\n }\n\n protected realityCheckEnabled(): boolean {\n return true;\n }\n\n getRealityCheckInterval(): TimeSpan {\n if (this.serviceFactory.skinService().useControlCenterForReminderInterval()) {\n if (this._getAccountData() && !Check.isNullOrUndefined(this._getAccountData().RealityCheckDataIntervalInMins)) {\n return TimeSpan.fromMinutes(this._getAccountData().RealityCheckDataIntervalInMins);\n }\n }\n return this.serviceFactory.componentFactoryService().createComponent(OptionsComponentController).getReminderInterval();\n }\n\n async updateRealityCheckInterval(realityCheckIntevalMin: number): Promise {\n if (!this.serviceFactory.oAuth2Service().isAuthorized()) {\n return Promise.reject();\n }\n\n // Update reminders\n // Set the reminder interval in account details and control center\n if (this.serviceFactory.skinService().useControlCenterForReminderInterval()) {\n let updateRealityCheckDataUrl = this.serviceFactory.userService().getUpdateRealityCheckDataUrl();\n try {\n // updates reality check in Control Center. Use this endpoint to migrate existing reality check\n await this.serviceFactory.http2Service().post(updateRealityCheckDataUrl, { realityCheckIntevalMin });\n } catch (error) {\n this.logger.error(\"Could not call update reality check to update the interval. url: \" + updateRealityCheckDataUrl, error);\n }\n // when the call is done, update the account details for the current session\n const accountData = this.serviceFactory.userService().getAccountData();\n if (accountData && !Check.isNullOrUndefined(accountData.RealityCheckDataIntervalInMins)) {\n accountData.RealityCheckDataIntervalInMins = realityCheckIntevalMin;\n this.serviceFactory.userService().updateTokenData(\"accountData\", accountData);\n }\n } else {\n // Set the reminder that use the setting from localStorage\n OptionsComponentController.create().load('ReminderSettings').set(realityCheckIntevalMin);\n }\n return Promise.resolve();\n }\n\n async attemptRealityCheckIntervalMigrationFromLocalStorageToControlCenter(): Promise {\n if (!this.serviceFactory.oAuth2Service().isAuthorized()) {\n return Promise.reject();\n }\n if (this.serviceFactory.skinService().useControlCenterForReminderInterval()) {\n // when using Control Center for reminder interval, first we check if the data was migrated from Storage to Control Center.\n let controlCenterReminderInterval: TimeSpan | undefined = undefined;\n if (this._getAccountData() && !Check.isNullOrUndefined(this._getAccountData().RealityCheckDataIntervalInMins)) {\n controlCenterReminderInterval = TimeSpan.fromMinutes(this._getAccountData().RealityCheckDataIntervalInMins);\n }\n\n if (controlCenterReminderInterval && controlCenterReminderInterval.totalMinutes > 0) {\n // 1. If data exists in Control center, ignore if anything exists in Local Storage. Attempt to delete from Local Storage\n OptionsComponentController.create().load('ReminderSettings').off();\n return Promise.resolve();\n }\n\n const localStorageReminderInterval: TimeSpan = this.serviceFactory.componentFactoryService().createComponent(OptionsComponentController).getReminderInterval();\n if (localStorageReminderInterval.totalMinutes > 0) {\n // 2. If data does not exists in Control Center, but exists in Local Storage, migrate:\n let updateRealityCheckDataUrl = this.serviceFactory.userService().getUpdateRealityCheckDataUrl();\n try {\n await this.serviceFactory.http2Service().post(updateRealityCheckDataUrl, { realityCheckIntevalMin: localStorageReminderInterval.totalMinutes });\n // and remove data from Local Storage with:\n OptionsComponentController.create().load('ReminderSettings').off();\n\n // when the call is done, update the account details for the current session\n const accountData = this.serviceFactory.userService().getAccountData();\n if (accountData && !Check.isNullOrUndefined(accountData.RealityCheckDataIntervalInMins)) {\n accountData.RealityCheckDataIntervalInMins = localStorageReminderInterval.totalMinutes;\n this.serviceFactory.userService().updateTokenData(\"accountData\", accountData);\n }\n } catch (error) {\n this.logger.error(\"Could not call update reality check to update the interval. url: \" + updateRealityCheckDataUrl, error);\n return Promise.reject();\n }\n }\n }\n return Promise.resolve();\n }\n\n getRealityCheckIntervalExpectedByTheGame() {\n let interval = this.getRealityCheckInterval();\n return {\n timeSpan: interval,\n expectedValueByTheGame: Math.round(interval.totalSeconds)\n }\n }\n\n shouldHaveBetLimitsPerBrand(): boolean {\n return true;\n }\n\n showNetPosition(): boolean {\n return true;\n }\n\n sessionTimerEnabled() {\n const isMiniCip = this.serviceFactory.integrationService().isMiniCip();\n return !isMiniCip && (this.getRealityCheckInterval().totalMilliseconds > 0);\n }\n\n _handleRealityCheckMessage(sessionTimer) {\n this.serviceFactory.gameService().stopCurrentGameAutoplay();\n\n this.serviceFactory.orbitComponentRenderService().showTimeSpentReminderWithDropdown({\n timerType: TSR_TYPE.SESSION_TIMER,\n playingTime: this.getCurrentSessionTime()\n });\n }\n\n}","import BaseRegulation, {BaseRegulationParams} from '../base_regulation';\nimport TempAccountMessageRegulationHelper from '../../helpers/temp_account_message_helper';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {TOAST_TYPES} from '../../../toaster/toaster_service_consts';\nimport {SYSTEM_EVENTS} from \"../../../../events/events\";\nimport Event from \"../../../../utils/event\";\nimport {GNWP_SOURCES} from '../../../../components/external_links/external_links_consts';\n\ninterface RomaniaRegulationParams extends BaseRegulationParams {\n tempAccountMessageHelper?: TempAccountMessageRegulationHelper\n}\n\nexport default class RomaniaRegulation extends BaseRegulation {\n static CLASS = 'RomaniaRegulation';\n\n\tinit(params: RomaniaRegulationParams) {\n super.init(params);\n this._tempAccountMessageHelper = params.tempAccountMessageHelper || TempAccountMessageRegulationHelper.create({\n\t\t\tserviceFactory: this.serviceFactory\n\t\t});\n }\n\n _tempAccountMessageHelper: TempAccountMessageRegulationHelper;\n\n\tshowTempAccountMessage(closeFunc?: Function) {\n this._tempAccountMessageHelper.showTempAccountMessage({\n\t\t\tcloseFunc: closeFunc,\n\t\t\tmessageKey: 'ro_temp_account_message',\n\t\t\tfooterMessageKey: 'ro_temp_account_footer_message',\n\t\t\ttitleKey: 'temp_account_title',\n\t\t\tbtnNameKey: 'temp_account_upload_btn'\n\t\t});\n\t}\n\n public getExternalLinksConfig() {\n return {\n 'upload_document': {\n isCloseBtnAllowed: false\n }\n };\n }\n\n public getTempAccountGnwpSource(): string{\n return GNWP_SOURCES.DOCUMENT_UPLOAD;\n }\n\n protected realityCheckEnabled(): boolean {\n\t\treturn true;\n\t}\n\n protected sessionTimerEnabled(): boolean {\n\t return true;\n }\n\n\n\tprotected _handleRealityCheckMessage(sessionTimer: TimeSpan): void {\n\t const subTitleText = this.serviceFactory.languageService().translation('interval_reminder_body', {\n hours: sessionTimer.days * 24 + sessionTimer.hours,\n minutes: sessionTimer.minutes\n });\n\n\t if(this.serviceFactory.hybridService().isOnDemandStandAloneGameRunning()) {\n Event.fire(SYSTEM_EVENTS.HYBRID_ALERT, subTitleText);\n } else {\n this.serviceFactory.toasterService().showToasterNotification({\n MessageID: 'romania_interval_reminder_message ' + Date.now(),\n Type: TOAST_TYPES.ACKNOWLEDGE,\n Title: this.serviceFactory.languageService().translation('interval_reminder_title'),\n SubTitle: subTitleText,\n analyticsData: {\n category: 'romania_interval_reminder_toaster',\n action: 'displayed'\n },\n DurationInSec: 0\n });\n }\n\t}\n}","import BaseRegulation from \"../base_regulation\";\n\nexport default class SHRegulation extends BaseRegulation {\n\n}","import COMBaseRegulation from \"../com_base_regulation\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport OptionsComponentController from \"../../../../../components/options/options_component_controller\";\n\nexport default class MaltaRegulation extends COMBaseRegulation {\n static CLASS = 'MaltaRegulation';\n\n protected realityCheckEnabled(): boolean {\n return true;\n }\n\n getRealityCheckInterval(): TimeSpan {\n return this.serviceFactory\n .componentFactoryService()\n .createComponent(OptionsComponentController)\n .getReminderInterval();\n }\n\n updateRealityCheckInterval(realityCheckIntevalMin: number): Promise {\n if (!this.serviceFactory.oAuth2Service().isAuthorized()) {\n return Promise.reject();\n }\n // Set the reminder that use the setting from localStorage\n OptionsComponentController.create().load('ReminderSettings').set(realityCheckIntevalMin);\n return Promise.resolve();\n}\n\n getRealityCheckIntervalExpectedByTheGame() {\n let interval = this.getRealityCheckInterval();\n return {\n timeSpan: interval,\n expectedValueByTheGame: Math.round(interval.totalSeconds),\n };\n }\n}\n","import COMBaseRegulation from \"../com_base_regulation\";\n\nexport default class GibRegulation extends COMBaseRegulation {\n static CLASS = 'GibRegulation';\n}","import TempAccountMessageRegulationHelper from \"../../../helpers/temp_account_message_helper\";\nimport NewJerseyResponsibleGamingIconsController from \"../../../../../components/regulation_components/us/new_jersey/responsible_gaming_icons/new_jersey_responsilbe_gaming_icons_controller\";\nimport {CGP_ERROR_CODES} from \"../../../../../exceptions/cgp_error_codes\";\nimport {REGULATION_CODE_TYPES} from '../../../regulation_const';\nimport USBaseRegulation from '../us_base_regulation';\n\n\nexport default class NewJerseyRegulation extends USBaseRegulation {\n\n static CLASS = 'NewJerseyRegulation';\n\n protected _getRegulationType(): number {\n return REGULATION_CODE_TYPES.NJ;\n }\n\n showTempAccountMessage(closeFunc) {\n TempAccountMessageRegulationHelper.create({\n serviceFactory: this.serviceFactory\n }).showTempAccountMessage({\n closeFunc: closeFunc,\n messageKey: 'nj_temp_account_message',\n titleKey: 'temp_account_title',\n btnNameKey: 'temp_account_upload_btn'\n });\n }\n\n forceHideCloseButtonInMembership() {\n return true;\n }\n\n showLogoutMessage() {\n this.serviceFactory.messageManagerService().openMessage({\n text: this.serviceFactory.languageService().translation('logout_message_text'),\n title: this.serviceFactory.languageService().translation('logout_message_title'),\n customCSSClassList: ['cgp-mdp-text-support-slash-n'],\n hasDefaultButton: false,\n buttons: [\n {\n name: this.serviceFactory.languageService().translation('mdp_ok'),\n isClosable: true\n }\n ]\n });\n }\n\n getResponsibleGamingIconsComponent(params) {\n return NewJerseyResponsibleGamingIconsController.create(params);\n }\n\n getErrorMessage(errorCode) {\n errorCode = errorCode.toString();\n if(errorCode === CGP_ERROR_CODES.TIME_LIMIT_REACHED_DAILY.toString()) {\n return this.serviceFactory.languageService().translation(CGP_ERROR_CODES.TIME_LIMIT_REACHED_DAILY + '_nj');\n }\n\n return super.getErrorMessage(errorCode);\n }\n}\n","import Event from '../../../../../utils/event';\nimport {USER_EVENTS, SYSTEM_EVENTS} from '../../../../../events/events';\nimport BaseComponent from '../../../../../base/base_component';\nimport {NAVIGATION_VIEWS} from '../../../../external_links/external_links_consts';\n\n\nlet view = require('./view/new_jersey_responsible_gaming_icons.html');\n\nexport default class NewJerseyResponsibleGamingIconsController extends BaseComponent {\n static CLASS = 'NewJerseyResponsibleGamingIconsController';\n\n init(params) {\n super.init(params);\n }\n\n start() {\n let bakedHTML = this.bake(view);\n this.setHTML(bakedHTML);\n this._subscribe();\n }\n\n\n _subscribe() {\n // open cashier on panic button click\n this.onChildElementEvent('.cgp-nj-resp-game-icon', USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics('nj_resp_game_icon');\n this.serviceFactory.openLinkService().openResponsibleGamblingLink();\n });\n\n // open cashier on panic button click\n this.onChildElementEvent('.nj-name-and-flag', USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics('nj_flag_icon');\n this.serviceFactory.openLinkService().openLink(\n {\n sourceLink: this.serviceFactory.skinService().getSafeToPlayURL(),\n view: NAVIGATION_VIEWS.WINDOW\n }\n );\n });\n }\n\n\n _sendAnalytics(label) {\n const analyticObject = {\n category: 'Navigation',\n action: 'Header',\n label: 'Icon_' + label\n };\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticObject);\n }\n}","import USBaseRegulation from '../us_base_regulation';\nimport { REGULATION_CODE_TYPES } from '../../../regulation_const';\nimport { CGP_ERROR_CODES } from '../../../../../exceptions/cgp_error_codes';\n\nexport default class DelawareRegulation extends USBaseRegulation {\n\n static CLASS = 'DelawareRegulation';\n\n\n protected _getRegulationType(): number {\n return REGULATION_CODE_TYPES.DELAWARE;\n }\n getErrorMessage(errorCode) {\n errorCode = errorCode.toString();\n if(errorCode === CGP_ERROR_CODES.TIME_LIMIT_REACHED_DAILY.toString()) {\n return this.serviceFactory.languageService().translation(CGP_ERROR_CODES.TIME_LIMIT_REACHED_DAILY.toString());\n }\n\n return super.getErrorMessage(errorCode);\n }\n\n isAnonymousPlayAllowed(): boolean {\n return !this.serviceFactory.oAuth2Service().isAuthorized();\n }\n}\n","import BaseRegulation from '../../base_regulation';\nimport Store from \"../../../../../utils/store\";\nimport OntarioResponsibleGamingIconsController\n from \"../../../../../components/regulation_components/canada/ontario/responsible_gaming_icons/ontario_responsible_gaming_icons_controller\";\nimport Event from \"../../../../../utils/event\";\nimport {SYSTEM_EVENTS} from \"../../../../../events/events\";\nimport Device from '../../../../../utils/device/device';\nimport {GNWP_SOURCES} from \"../../../../../components/external_links/external_links_consts\";\n\nexport default class CanadaOntarioRegulation extends BaseRegulation {\n static CLASS = 'CanadaOntarioRegulation';\n\n checkIfCorrectAppInUse(country:string, state: string) {\n const canadaWrongAppAppsFlyerSmartLink = \"https://888casino-ca.onelink.me/3A45/wrongAppCta?pid=cta_WrongApp&af_sub2=\";\n\n if (Device.hybrid.inCasino && !Device.hybrid.isEmbedded && Device.os.isIOS) {\n this.serviceFactory.hybridVersionHandlerService().showUserWrongAppMessage(canadaWrongAppAppsFlyerSmartLink + this.serviceFactory.hybridService().getSmartLinkData());\n this.sendAnalytics('userWrongAppMessage', 'show');\n }\n }\n\n overrideCurrencySymbol(): string {\n return '$';\n }\n\n showNetPosition(): boolean {\n return true;\n }\n\n shouldCallCountryByIP(country:string) {\n return true;\n }\n\n onStateNotInListClickHandler() {\n this.serviceFactory.windowService().redirect(this.serviceFactory.skinService().getWrongLocationDetectionPath());\n }\n\n fitToPlayModeEnabled(): boolean {\n return true;\n }\n\n showAgeResponsibleIconInGame() {\n return false;\n }\n\n showResponsibleIcons() {\n return true;\n }\n\n getResponsibleGamingIconsComponent(params){\n return OntarioResponsibleGamingIconsController.create(params);\n }\n\n stepsBeforeOpenLoginAndRegistration():Promise {\n return new Promise((resolve, reject) => {\n const STATE_POPUP_KEY = 'state-popup'\n if(Store.get(STATE_POPUP_KEY)) {\n return resolve();\n }\n return this.serviceFactory.orbitComponentRenderService().showLocationPopup({\n onStateSelect: ()=> {\n Store.set(STATE_POPUP_KEY, true);\n return resolve();\n },\n onStateNotInListClick: ()=> {\n this.onStateNotInListClickHandler();\n reject();\n },\n onMessageClosed: ()=> {\n Event.fire(SYSTEM_EVENTS.LOCATION_POPUP_CLOSED);\n return reject();\n }\n });\n });\n }\n\n runConditionsBeforeOpenLink(source: string):Promise {\n if(source !== GNWP_SOURCES.MEMBERSHIP) {\n return Promise.resolve();\n }\n\n return this.stepsBeforeOpenLoginAndRegistration();\n }\n\n getExternalLinksConfig() {\n return {\n 'membership': {\n isCloseBtnAllowed: false\n },\n 'upload_document': {\n isCloseBtnAllowed: false\n }\n };\n }\n\n private sendAnalytics(category:string, action:string):void {\n const analyticsData:any = {\n CGPEventCategory: category,\n CGPEventAction: action\n };\n\n this.logger.debug(action, JSON.stringify(analyticsData));\n this.serviceFactory.structuredLoggingService().getLogger(analyticsData).info();\n }\n}","export const SDK_VERSION = '3.2632.31';","import BaseObject from '../../../base/base_object';\n\nexport default class LoginErrorHandlerBase extends BaseObject {\n static CLASS = 'LoginErrorHandlerBase';\n init(params) {\n super.init(params);\n this._serviceFactory = params.serviceFactory;\n }\n\n get serviceFactory() {\n return this._serviceFactory;\n }\n\n _handledErrorCode() {\n this.throwError('15', 'Method errorCode is not implemented');\n }\n\n canHandle(errorProcessingResult) {\n return errorProcessingResult.loginResponse.error_code === this._handledErrorCode();\n }\n\n handle(errorProcessingResult) {\n this.throwError('23', 'Method execute is not implemented');\n }\n}","module.exports = \"
\\n
{geo_location_txt | translate}
\\n
\\n
\\n
\\n
\\n
\\n\\n\\n\\n\";","import BaseOptionsComponentController from '../base_options_component_controller';\nimport DOM from '../../../../utils/dom';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport Event from '../../../../utils/event';\nimport {SYSTEM_EVENTS} from '../../../../events/events';\n\nlet view = require('./view/inactivity_timeout_settings.html');\n\nconst CSS = {\n INACTIVITY_TIME_SELECT: '.cgp-inactivity-timeout-select',\n SELECTOR_LABEL: '.cgp-inactivity-timeout-label'\n};\n\nexport default class InactivityTimeoutSettingsController extends BaseOptionsComponentController {\n static CLASS = 'InactivityTimeoutSettingsController';\n\n _selector = 'cgp-component-inactivity-timeout-settings';\n\n _currentSessionTimeoutSettings = null;\n\n init(params) {\n super.init(params);\n this._currentSessionTimeoutSettings = this._oAuthService.getCurrentSessionTimeoutSettings();\n }\n\n start() {\n let bakedHTML = this.bake(view);\n\n this.setHTML(bakedHTML)\n ._bindOptions()\n ._setSelectorLabelText();\n\n return this;\n }\n\n _sendAnalytics(action, label) {\n let params = {\n category: 'italy_inactivity_window',\n action: action\n };\n\n if(label) {\n params.label = label;\n }\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, params);\n }\n\n _setSelectorLabelText() {\n let label = this.getEl().querySelectorAll(CSS.SELECTOR_LABEL)[0];\n\n label.innerHTML = this._languageService.translation('inactivity_timeout_settings_label');\n\n\n return this;\n }\n\n get _oAuthService() {\n return this.serviceFactory.oAuth2Service();\n }\n\n get _languageService() {\n return this.serviceFactory.languageService();\n }\n\n _getPossibleSessionTimeouts() {\n return this._currentSessionTimeoutSettings.possibleSessionTimeoutValues.map(timeSpan => Math.round(timeSpan.totalMinutes));\n }\n\n _getSelectorEl() {\n return this.getEl().querySelectorAll(CSS.INACTIVITY_TIME_SELECT)[0];\n }\n\n _bindOptions() {\n let possibleValues = this._getPossibleSessionTimeouts();\n\n\n let selector = this._getSelectorEl();\n\n let options = possibleValues.map(value => {\n let el = DOM.createElement('option');\n el.value = value;\n el.text = this._languageService.translation('inactivity_timeout_settings_minutes', {\n minutes: value\n });\n\n DOM.addClass(el, 'cgp-themes-main-text');\n DOM.addClass(el, 'cgp-theme-property-background-color-base03');\n\n return el;\n });\n\n options.forEach(option => {\n DOM.append(selector, option);\n });\n\n let currentSessionTimeout = this._currentSessionTimeoutSettings.currentSessionTimeout.totalMinutes;\n let index = possibleValues.findIndex(item => item === currentSessionTimeout);\n if(index >= 0) {\n selector.selectedIndex = index;\n } else {\n selector.selectedIndex = 0;\n }\n\n return this;\n }\n\n _getButtons() {\n let buttons = [\n {\n name: this._languageService.translation('inactivity_timeout_settings_save'),\n type: 'main',\n isClosable: true,\n callback: (event) => {\n this._onSaveBtnClicked(event);\n },\n forceAnalytic: true\n }\n ];\n\n return buttons;\n }\n\n _onSaveBtnClicked() {\n let selector = this._getSelectorEl();\n let selectedValue = Number.parseInt(selector[selector.selectedIndex].value);\n\n if(selectedValue !== this._currentSessionTimeoutSettings.currentSessionTimeout.totalMinutes) {\n this._sendAnalytics('changed', selectedValue);\n }\n\n this._oAuthService.setCustomSessionTimeout(TimeSpan.fromMinutes(selectedValue));\n\n }\n\n _getTitleKey() {\n return 'inactivity_timeout_settings_title';\n }\n\n onComponentOpened() {\n super.onComponentClosed();\n this._sendAnalytics('open');\n }\n onComponentClosed() {\n super.onComponentClosed();\n this._sendAnalytics('closed');\n }\n\n\n}","import BaseComponent from '../../../base/base_component';\nlet messageView = require('./view/step_message.html');\n\n/**\n *\n *\n *\n */\nclass FreeStepMessageComponentController extends BaseComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'FreeStepMessageComponentController';\n\n /**\n * Root component selector.\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-fp-step-message-component';\n\n /**\n *\n */\n init() {\n super.init();\n }\n\n\n /**\n *\n * @returns {AgeComponent}\n */\n start() {\n // Attach the template into the login component html document object.\n let bakedHTML = this.bake(messageView, {});\n\n this\n .setHTML(bakedHTML);\n\n return this;\n }\n\n}\nexport default FreeStepMessageComponentController;","import BaseComponent from '../../../base/base_component';\nimport {USER_EVENTS} from '../../../events/events';\n\nlet closeButtonHtml = require('../view/close-button.html');\n\nexport default class CloseButtonNavbarPart extends BaseComponent {\n static CLASS = 'CloseButtonNavbarPart';\n\n init(params) {\n super.init(params);\n this._onCloseCallback = params.onCloseCallback;\n this.setInnerHtml(closeButtonHtml);\n this.onChildElementEvent('.game-panel-close-btn', USER_EVENTS.ON_CLICK, this._onClose.bind(this));\n }\n\n _onClose() {\n this._onCloseCallback();\n }\n}","/**\n * Created by andreyna on 6/8/2017.\n */\n\nconst DIRECTION = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n}\n\nconst LAYOUT_BEHAVIOUR_CONFIG = {\n mobile: {\n vertical: {\n vouchersLayout: {\n direction: DIRECTION.HORIZONTAL,\n scrollingOptions: {\n direction: DIRECTION.HORIZONTAL,\n arrowsPadding: [10, 10, 10, 10],\n itemGap: 15,\n isArrowVisible: false,\n swipeScroll: true,\n isHasDots: true,\n offset: 'center'\n }\n },\n gamesLayout: {\n direction: DIRECTION.VERTICAL,\n hasBack: false // define whether game layout has a back button. If true, this layout should be displayed at the same layout together with voucherLayout\n }\n },\n horizontal: {\n vouchersLayout: {\n direction: DIRECTION.HORIZONTAL\n },\n gamesLayout: {\n direction: DIRECTION.HORIZONTAL, //Vertical\n hasBack: true\n }\n }\n },\n pc: {\n horizontal: {\n vouchersLayout: {\n direction: DIRECTION.HORIZONTAL,\n gameMode: {\n direction: DIRECTION.VERTICAL,\n scrollingOptions: {\n direction: DIRECTION.VERTICAL,\n isArrowVisible: false,\n itemGap: 15\n }\n }\n },\n gamesLayout: {\n direction: DIRECTION.HORIZONTAL,\n hasBack: true\n }\n },\n vertical: {\n vouchersLayout: {\n direction: DIRECTION.HORIZONTAL,\n scrollingOptions: {\n direction: DIRECTION.HORIZONTAL,\n arrowsPadding: [40, 25, 20, 25],\n itemGap: 15,\n isArrowVisible: true,\n swipeScroll: true,\n isHasDots: true,\n offset: 'center'\n },\n gameMode: {\n direction: DIRECTION.VERTICAL,\n scrollingOptions: {\n direction: DIRECTION.VERTICAL,\n arrowsPadding: [10, 0, 10, 0],\n isArrowVisible: false,\n itemGap: 15\n }\n }\n },\n gamesLayout: {\n direction: DIRECTION.VERTICAL,\n hasBack: false\n }\n }\n }\n}\n\nconst FP_CSS_CLASSES = {\n VOUCHERS_CONTAINER: 'cgp-fp-voucher-container-wrapper',\n GAMES_CONTAINER: 'cgp-fp-games-container-wrapper',\n DIRECTION_PREFIX: 'cgp-fp-dir-',\n FP_CONTAINER: 'cgp-fp-container',\n BACK_BTN: 'cgp-fp-voucher-back-btn-wrapper'\n}\n\nconst FP_LAYOUT_STATE = {\n VOUCHERS: 'VOUCHERS',\n GAMES: 'GAMES'\n}\n\nconst FP_ANALYTICS = {\n 'OpenGame': {\n category: 'Client_FreePlay', //FP_Menu\n action: 'GamesMessage', //Voucher\n label: 'ChooseGame#{gameID}' //FP_Play#GameID\n },\n 'VoucherInfoOpen': {\n category: 'Client_FreePlay',\n action: 'Info',\n label: 'Open'\n },\n 'VoucherInfoClose': {\n category: 'Client_FreePlay',\n action: 'Info',\n label: 'Close'\n },\n 'SelectVoucher': {\n category: 'Client_FreePlay',\n action: 'VouchersMessage',\n label: 'ChooseVoucher#{voucherID}'\n }\n}\n\n\nexport {LAYOUT_BEHAVIOUR_CONFIG, FP_CSS_CLASSES, DIRECTION, FP_LAYOUT_STATE, FP_ANALYTICS};\n\n","/**\n * Created by andreyna on 6/13/2016.\n */\nimport BaseModelComponent from '../../base/base_model_component';\nimport {LAYOUT_BEHAVIOUR_CONFIG, FP_LAYOUT_STATE, FP_ANALYTICS} from './free_play_component_consts';\nimport _ from '../../utils/underscore';\nimport { IAlteredFreePlayVoucher } from './voucher/free_play_voucher_consts';\n\nexport default class FreePlayComponentModel extends BaseModelComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'FreePlayComponentModel';\n private _layoutConfig: any;\n private _direction: string;\n private _layoutState: string;\n private _analytics: any;\n private _allowOpenGameFn: any;\n private _selectedVoucher: IAlteredFreePlayVoucher;\n private _openPriority: any;\n private _height: number;\n private _gameTypeID: number;\n private _vouchers: IAlteredFreePlayVoucher[];\n\n\n /**\n *\n * @param params\n */\n init(params: any = {}) {\n super.init(params);\n if (params) {\n this._setLayoutConfig(params.layoutConfig);\n this.setDirection(params.direction)\n ._setMessageHeight(params.height)\n ._setGameTypeID(params.gameTypeID)\n ._setOpenPriority(params.openPriority)\n ._setVouchers(params.vouchers)\n .setLayoutState(params.state)\n ._setAnalytics(params.analytics)\n ._setAllowOpenGame(params.allowOpenGameFn);\n\n }\n }\n\n\n /**\n * Set layout behaviour\n * @param layoutConfig\n * @returns {FreePlayComponentModel}\n * @private\n */\n private _setLayoutConfig(layoutConfig) {\n this._layoutConfig = _.safeJSON(layoutConfig, LAYOUT_BEHAVIOUR_CONFIG);\n return this;\n }\n\n\n /**\n * Set initial component direction, used for PC only\n * @param direction\n * @returns {FreePlayComponentModel}\n * @private\n */\n setDirection(direction) {\n this._direction = direction;\n return this;\n }\n\n\n /**\n * Set layout state (games or vouchers)\n * @param state\n * @returns {FreePlayComponentModel}\n */\n setLayoutState(state = FP_LAYOUT_STATE.VOUCHERS) {\n this._layoutState = state;\n return this;\n }\n\n\n /**\n * Set object with analytics actions\n * @param analytics\n * @returns {FreePlayComponentModel}\n * @private\n */\n private _setAnalytics(analytics) {\n this._analytics = Object.assign({}, FP_ANALYTICS, _.safeJSON(analytics, {}));\n return this;\n }\n\n\n /**\n * Set callback that will be executed before game open. Callback should return Promise.\n * When the Promise resolved means the Game is allowed to be opened, otherwise (reject) the opening game is restricted\n * @param callback\n * @returns {FreePlayComponentModel}\n * @private\n */\n private _setAllowOpenGame(callback) {\n this._allowOpenGameFn = callback;\n return this;\n }\n\n\n /**\n * Set voucher that should be selected automatically upon opening vouchers message\n * @param voucherID\n * @private\n */\n private _setSelectedVoucher(voucherID) {\n if (_.isUndefined(voucherID) || _.isNull(voucherID) || !_.isString(voucherID)) {\n return this;\n }\n this._selectedVoucher = voucherID;\n return this;\n }\n\n\n /**\n * Set priority in order to proper close in case component has been opened in lightbox\n * @param openPriority\n * @returns {FreePlayComponentModel}\n * @private\n */\n private _setOpenPriority(openPriority) {\n this._openPriority = openPriority;\n return this;\n }\n\n\n /**\n * Set height of embedded component\n * @param height\n * @returns {FreePlayComponentModel}\n * @private\n */\n private _setMessageHeight(height) {\n this._height = !height || isNaN(parseInt(height)) || height < 500 ? 600 : height;\n return this;\n }\n\n\n /**\n * Set gameTypeID. If it exists, voucher message should be work in mode already selected game\n * @returns {FreePlayComponentModel}\n * @private\n */\n private _setGameTypeID(gameTypeID) {\n if (_.isUndefined(gameTypeID) || _.isNull(gameTypeID)) {\n return this;\n }\n this._gameTypeID = gameTypeID;\n return this;\n }\n\n\n /**\n * Set vouchers that should be presented in the current component\n * @param excludeVouchers\n * @returns {FreePlayComponentModel}\n * @private\n */\n private _setVouchers(vouchers) {\n this._vouchers = vouchers;\n return this;\n }\n\n\n\n /**\n * Get automatically selected voucher\n * @returns {*}\n */\n getSelectedVoucher() {\n return this._selectedVoucher;\n }\n\n\n /**\n * Set direction\n * @returns {*}\n */\n getDirection() {\n return this._direction;\n }\n\n\n /**\n * Get message embedded heigh\n * @returns {number|*}\n */\n getMessageHeight() {\n return this._height;\n }\n\n\n getGameTypeID() {\n return this._gameTypeID;\n }\n\n\n getVouchers() {\n return this._vouchers;\n }\n\n\n /**\n * Get layout config\n * @returns {undefined|*}\n */\n getLayoutConfig() {\n return this._layoutConfig;\n }\n\n\n /**\n * Get layout state Vouchers or Games\n * @returns {*}\n */\n getLayoutState() {\n return this._layoutState;\n }\n\n /**\n * Get priority in order to proper close in case component has been opened in lightbox\n * @returns {*}\n */\n getOpenPriority() {\n return this._openPriority;\n }\n\n\n /**\n * Get analytics actions object\n * @returns {undefined|*}\n */\n getAnalytics() {\n return this._analytics;\n }\n\n\n /**\n * Allow or avoid game opening callback\n * @returns {*}\n */\n getAllowOpenGame() {\n return this._allowOpenGameFn;\n }\n}\n","import BaseModelComponent from \"../../../base/base_model_component\";\nimport { IAlteredFreePlayVoucher } from \"../voucher/free_play_voucher_consts\";\nimport FreePlayComponentController from \"../free_play_component_controller\";\n\nexport default class FPVouchersComponentModel extends BaseModelComponent {\n static CLASS = 'FPVouchersComponentModel';\n\n private _vouchers: IAlteredFreePlayVoucher[];\n private _containerRef: FreePlayComponentController;\n private _title: string;\n private _scrollingOptions: string;\n\n\n /**\n *\n * @param params\n */\n init(params: any = {}) {\n super.init(params);\n if (params) {\n this.setScrollingOptions(params.scrollingOptions)\n .setVouchers(params.vouchers)\n ._setContainerRef(params.container)\n ._setTitle(params.title);\n }\n }\n\n\n /**\n * Set initial direction of vouchers list\n * @param direction\n * @returns {FPVouchersComponentModel}\n * @private\n */\n setScrollingOptions(scrollingOptions) {\n this._scrollingOptions = scrollingOptions;\n return this;\n }\n\n\n /**\n * Set vouchers to be injected to the list\n * @param vouchers\n * @returns {FPVouchersComponentModel}\n * @private\n */\n setVouchers(vouchers) {\n this._vouchers = vouchers;\n return this;\n }\n\n\n /**\n * Set reference to parent container\n * @param container\n * @returns {FPVouchersComponentModel}\n * @private\n */\n private _setContainerRef(container) {\n this._containerRef = container;\n return this;\n }\n\n\n /**\n * Set title for component\n * @param title\n * @returns {FPVouchersComponentModel}\n * @private\n */\n private _setTitle(title) {\n this._title = title;\n return this;\n }\n\n\n /**\n * Get vouchers list direction\n * @returns {*}\n */\n getScrollingOptions() {\n return this._scrollingOptions;\n }\n\n\n /**\n * Get FP vouchers\n * @returns {*}\n */\n getVouchers() {\n return this._vouchers;\n }\n\n\n /**\n * Get component title\n * @returns {*}\n */\n getTitle() {\n return this._title;\n }\n\n\n /**\n * Get container reference\n * @returns {*}\n */\n getContainerRef() {\n return this._containerRef;\n }\n}\n","/**\n * Created by andreyna on 6/13/2016.\n */\nimport BaseModelComponent from '../../../base/base_model_component';\nimport {VOUCHER_STATE, IAlteredFreePlayVoucher} from './free_play_voucher_consts';\nimport FPVouchersComponentController from '../vouchers/fp_vouchers_component_controller';\n\nexport default class FreePlayVoucherComponentModel extends BaseModelComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'FreePlayVoucherComponentModel';\n\n private _voucher: IAlteredFreePlayVoucher;\n\n private _state: string;\n\n private _containerRef: FPVouchersComponentController;\n\n /**\n *\n * @param params\n */\n init(params: any = {}) {\n super.init(params);\n this._setVoucher(params.voucher)\n .setState(params.state)\n ._setContainerRef(params.container);\n }\n\n\n /**\n * Set voucher object\n * @param voucher\n * @returns {FreePlayVoucherComponentModel}\n * @private\n */\n private _setVoucher(voucher) {\n this._voucher = voucher;\n return this;\n }\n\n\n /**\n * Set voucher state, default is init\n * @param state\n * @returns {FreePlayVoucherComponentModel}\n * @private\n */\n setState(state = VOUCHER_STATE.INIT) {\n this._state = state;\n return this;\n }\n\n\n /**\n * Set reference for voucher container object\n * @param container\n * @returns {FreePlayVoucherComponentModel}\n * @private\n */\n private _setContainerRef(container) {\n this._containerRef = container;\n return this;\n }\n\n\n /**\n * Get voucher\n * @returns {*}\n */\n getVoucher() {\n return this._voucher;\n }\n\n\n /**\n * Get voucher state\n * @returns {string|*}\n */\n getState() {\n return this._state;\n }\n\n getContainerRef() {\n return this._containerRef;\n }\n}\n","import {USER_EVENTS} from '../../../events/events';\nimport DOM from '../../../utils/dom';\nimport Strings from '../../../utils/strings';\nimport FreePlayVoucherComponentModel from './free_play_voucher_component_model';\nimport {\n VOUCHER_STATE, VOUCHER_VIEW, EXPIRATION_TYPE, CSS_CLASSES, TRANSLATIONS, FP_VOUCHER_TYPE_NAMES,\n FP_VOUCHER_ICONS_CLASSES, FP_VOUCHER_BACKGROUND_CLASSES, IAlteredFreePlayVoucher\n} from './free_play_voucher_consts';\nimport BaseComponent from '../../../base/base_component';\nimport {FP_VOUCHER_TYPES} from '../../../services/free_play/free_play_consts';\nimport _ from '../../../utils/underscore';\n\n\nconst MILLIS_IN_MINUTE = 1000 * 60;\nconst MILLIS_IN_HOUR = MILLIS_IN_MINUTE * 60;\nconst MILLIS_IN_DAY = MILLIS_IN_HOUR * 24;\n\nexport default class FreePlayVoucherComponentController extends BaseComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'FreePlayVoucherComponentController';\n\n _selector = 'cgp-fp-voucher-component';\n\n _model: FreePlayVoucherComponentModel;\n\n private _expInterval: number;\n\n init(params) {\n super.init(params);\n this._model = FreePlayVoucherComponentModel.create(params);\n this.subscribe();\n }\n\n\n subscribe() {\n // if (this.isDirective()) { //TODO make sure we want subscription only in directive\n // this.onSystemEvent(SYSTEM_EVENTS.FREE_PLAY_UPDATED, () => {\n // this._onVouchersUpdated();\n // });\n // }\n }\n\n\n start() {\n if (!this._bakeVoucher()) {\n return this;\n }\n this._changeState(VOUCHER_STATE.INIT, true);\n return this;\n }\n\n private _languageService() {\n return this.serviceFactory.languageService();\n }\n\n /**\n * Bake voucher initial state HTML\n * @param voucher\n * @param voucherView\n * @returns {*}\n * @private\n */\n private _bakeVoucher() {\n const voucher = this._model.getVoucher();\n const expiration = this._getVoucherExpiration(voucher);\n let showRemaining = true;\n let options = {precision: 2};\n let voucherValue = voucher.OriginAmount;\n\n if (_.isNullOrUndefined(voucherValue) || voucherValue === 0) { //TODO add UnitTesting for not Null/Undefined\n voucherValue = voucher.CurrentBalance;\n showRemaining = false;\n options = {precision: 2};\n\t\t}\n\t\t\n const voucherHTML = this.bake(VOUCHER_VIEW, {\n amount: this._formatVoucherUnit(voucher.FreePlayTypeId, voucherValue, voucher.SpinBetAmount, options, true),\n balance: showRemaining ? this._getVoucherBalanceText(voucher) : '',\n expiration: expiration ? expiration.text : '',\n voucherName: this._languageService().translation(TRANSLATIONS.VOUCHER_NAME + FP_VOUCHER_TYPE_NAMES[voucher.FreePlayTypeId].toLowerCase()),\n voucherDesc: this._languageService().translation(TRANSLATIONS.VOUCHER_DESC + FP_VOUCHER_TYPE_NAMES[voucher.FreePlayTypeId].toLowerCase()),\n fpIconClass: FP_VOUCHER_ICONS_CLASSES[voucher.FreePlayTypeId],\n fpBgClass: FP_VOUCHER_BACKGROUND_CLASSES[voucher.FreePlayTypeId]\n });\n // TODO add info state\n\n this.setHTML(voucherHTML);\n if (expiration) {\n this._handleExpirationStyle(expiration.type, voucher);\n }\n\n this.onDOMEvent(this.getDOMElementByClassName(CSS_CLASSES.VOUCHER_INFO_SELECTOR), USER_EVENTS.ON_CLICK, (event) => {\n event.preventDefault();\n this._model.getContainerRef().sendAnalytics('VoucherInfoOpen');\n this._changeState(VOUCHER_STATE.INFO);\n });\n\n this.onDOMEvent(this.getDOMElementByClassName(CSS_CLASSES.VOUCHER_CLOSE_SELECTOR), USER_EVENTS.ON_CLICK, (event) => {\n event.preventDefault();\n this._model.getContainerRef().sendAnalytics('VoucherInfoClose');\n this._changeState(VOUCHER_STATE.INIT);\n });\n\n this.onChildElementEvent(CSS_CLASSES.VOUCHER_CONTAINER_SELECTOR, USER_EVENTS.ON_CLICK, (event) => {\n if (-1 < (event.target as HTMLElement).className.indexOf(CSS_CLASSES.VOUCHER_INFO_SELECTOR) ||\n -1 < (event.target as HTMLElement).className.indexOf(CSS_CLASSES.VOUCHER_CLOSE_SELECTOR)) {\n return;\n }\n this._model.getContainerRef().onVoucherSelected(voucher.ID);\n });\n\n if (voucher.isNew) { // show new image\n DOM.show(this.getEl().getElementsByClassName(CSS_CLASSES.VOUCHER_NEW_CLASS)[0] as HTMLElement);\n }\n\n return this;\n }\n\n\n /**\n * Assign voucher style according to expiration type\n * @param type\n * @private\n */\n private _handleExpirationStyle(type, voucher) {\n DOM.clearInterval(this._expInterval);\n const expContainer = this.getDOMElementByClassName(CSS_CLASSES.VOUCHER_EXPIRATION_CLASS);\n switch (type) {\n case EXPIRATION_TYPE.TIME:\n DOM.addClass(expContainer, CSS_CLASSES.VOUCHER_EXPIRATION_SOON_CLASS);\n this._expInterval = DOM.setInterval(() => {\n const expiration = this._getVoucherExpiration(voucher);\n DOM.html(expiration.text, expContainer);\n if (expiration.type === EXPIRATION_TYPE.EXPIRED) {\n this.logger.debug('_hanldeExpirationStyle EXPIRED');\n this._handleExpirationStyle(expiration.type, voucher);\n } else {\n }\n }, 1000);\n break;\n case EXPIRATION_TYPE.DAY:\n DOM.addClass(expContainer, CSS_CLASSES.VOUCHER_EXPIRATION_DAY);\n break;\n case EXPIRATION_TYPE.EXPIRED:\n DOM.addClass(expContainer, CSS_CLASSES.VOUCHER_EXPIRATION_SOON_CLASS);\n this._model.getContainerRef().onVoucherExpired(this._model.getVoucher().ID);\n break;\n }\n }\n\n\n /**\n * Handle onVoucherRemoved event from FreePlayComponent.\n */\n // onVoucherRemoved() {\n // DOM.toggleClass(this.getEl(), 'cgp-fp-voucher-removed-item');\n // }\n\n /**\n *\n * @param state\n * @param isInit\n * @private\n */\n private _changeState(state: string, isInit = false) {\n if (!isInit) {\n DOM.toggleClass(this.getEl().getElementsByClassName(CSS_CLASSES.VOUCHER_CONTAINER_CLASS)[0], 'hover');\n }\n\n // DOM.hide(this.getEl().getElementsByClassName(stateContainerSelector)[0]);\n // DOM.show(this.getEl().getElementsByClassName(newState)[0]);\n // switch (state) {\n // case VOUCHER_STATE.INFO:\n // break;\n // case VOUCHER_STATE.INIT:\n // //hide init\n // break;\n // }\n this._model.setState(state);\n }\n\n\n /**\n * Bake voucher remaining\n * @param voucher\n * @returns {string|*}\n * @private\n */\n private _getVoucherBalanceText(voucher) {\n const stringBalance = new Strings(this._languageService().translation(TRANSLATIONS.VOUCHER_REWARDS_BALANCE));\n return stringBalance.injectIntoCurly({\n balance: '' + (this._formatVoucherUnit(voucher.FreePlayTypeId, voucher.CurrentBalance, voucher.SpinBetAmount, {precision: 2})) + '',\n fp_voucher_remaining_prefix: this._languageService().translation(TRANSLATIONS.VOUCHER_BALANCE_PREFIX)\n });\n }\n\n /**\n * \n * @param date\n * @returns true if specified date is invalid\n * @private\n */\n private _isDateInvalid(date) {\n\t\treturn !date || !_.isNumber(date.getTime());\n\t}\n\n /**\n * Bake voucher expiration text\n * @param voucher\n * @returns {{text: (string|*), type: (string|*|string|string)}}\n * @private\n */\n private _getVoucherExpiration(voucher: IAlteredFreePlayVoucher): {\n text: string,\n type: string }\n {\n if (this._isDateInvalid(voucher.ExpirationDate)) {\n return undefined;\n }\n\n const timeToLeft = new Date(voucher.ExpirationDate).getTime() - new Date().getTime();\n // TODO what we need to do in case the vouched is expired\n // if (timeToLeft < 0) {\n // return;\n // }\n const expiration = this._convertTimeToExpiration(timeToLeft);\n const stringExpiration = new Strings(this._languageService().translation(TRANSLATIONS.VOUCHER_EXPIRATION + expiration.type.toLowerCase()));\n return {\n text: stringExpiration.injectIntoCurly({\n expiration: '' + expiration.value + ''\n }),\n type: expiration.type\n };\n }\n\n /**\n * convert expiration voucher time to user friendly format\n * @param time\n * @returns {{}}\n * @private\n */\n private _convertTimeToExpiration(time: number): {\n value: number,\n type: string\n } {\n const expiration: any = {};\n if (0 > time) {\n expiration.value = '00:00:00';\n expiration.type = EXPIRATION_TYPE.EXPIRED;\n return expiration;\n }\n if (time > MILLIS_IN_DAY * 2) {\n let days = time / MILLIS_IN_DAY;\n if (days - parseInt(days.toString()) > 0) {\n days++;\n }\n expiration.value = parseInt(days.toString());\n expiration.type = EXPIRATION_TYPE.DAY;\n } else {\n const hours = parseInt((time / MILLIS_IN_HOUR).toString());\n let restTime = time - hours * MILLIS_IN_HOUR;\n const minutes = parseInt((restTime / MILLIS_IN_MINUTE).toString());\n restTime -= minutes * MILLIS_IN_MINUTE;\n const seconds = parseInt((restTime / 1000).toString());\n expiration.value = (10 > hours ? '0' + hours.toString() : hours) + ':' + (10 > minutes ? '0' + minutes.toString() : minutes) + ':' + (10 > seconds ? '0' + seconds.toString() : seconds);\n expiration.type = EXPIRATION_TYPE.TIME;\n }\n\n return expiration;\n }\n\n\n /**\n * Format voucher rewards according to voucher type\n * @param type\n * @param value\n * @param spinBetAmount\n * @param currencyOptions\n * @param roundValueIfNoDecimals\n * @returns {*}\n * @private\n */\n private _formatVoucherUnit(type: string, value: number, spinBetAmount: number, currencyOptions: any, roundValueIfNoDecimals = false): number|string{\n let result: number|string = value;\n switch (type) {\n case FP_VOUCHER_TYPES.FreePlay:\n case FP_VOUCHER_TYPES.FreeJackpotPlay:\n result = this.serviceFactory.currencyService().formatMoney(value * 1, currencyOptions, roundValueIfNoDecimals);\n break;\n case FP_VOUCHER_TYPES.FreeSpin:\n case FP_VOUCHER_TYPES.FreeJackpotSpin:\n result = value / spinBetAmount;\n break;\n }\n\n return result;\n }\n\n\n shutDown() {\n super.shutDown();\n this.logger.debug('Voucher ' + this._model.getVoucher().ID + ' has been shut down');\n }\n\n}\n","import BaseComponent from \"../../../base/base_component\";\nimport FPVouchersComponentModel from \"./fp_vouchers_component_model\";\nimport _ from \"../../../utils/underscore\";\nimport VoucherComponentController from \"../voucher/free_play_voucher_component_controller\";\nimport DOM from \"../../../utils/dom\";\nimport ScrollableContainer from \"../../scrollable_container/scrollable_container_controller\";\nimport { IFreePlayVoucher } from './../../../services/free_play/Free_play_voucher';\nimport { IAlteredFreePlayVoucher } from \"../voucher/free_play_voucher_consts\";\n\nconst vouchersView = require('./view/fp_vouchers_component.html');\n\nexport default class FPVouchersComponentController extends BaseComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'FPVouchersComponentController';\n\n\n /**\n * @static\n * @type {string}\n */\n static DIRECTIVE = 'cgp-directive-vouchers_list';\n\n _model: FPVouchersComponentModel;\n\n _selector = 'cgp-free-play-vouchers-list-component';\n\n private _vouchersContainer: ScrollableContainer;\n\n\n init(params) {\n super.init(params);\n this._model = FPVouchersComponentModel.create(params);\n }\n\n\n start() {\n const voucherHtml = this.bake(vouchersView, {\n voucherTitle: this._model.getTitle()\n });\n this.setHTML(voucherHtml);\n return this;\n }\n\n\n /**\n * Handle event when the component attached to DOM.\n * From this point the component is ready to execute DOM manipulation and calculations regarding to entire document\n */\n onAppendedToDOM() {\n super.onAppendedToDOM();\n //this._subscribeUserEvents();\n //this._assignMessageHeight();\n return this._injectVouchersList();\n }\n\n\n scrollToVoucher(index) {\n // TODO\n }\n\n\n onSizeChanged() {\n if (this._vouchersContainer) {\n this._vouchersContainer.onSizeChanged();\n }\n }\n\n\n /**\n * Get active vouchers\n * @returns {*}\n */\n getVouchers() {\n return this._model.getVouchers();\n }\n\n\n\n onVoucherExpired(voucherId) {\n this._model.getContainerRef().onVoucherExpired(voucherId);\n }\n\n\n\n /**\n * Handle voucher remove\n * @param voucherId\n * @private\n */\n removeVoucher(voucherId: string, animation: boolean) {\n const deleteIndex = this._getVoucherIndex(voucherId);\n if (-1 < deleteIndex) {\n const removedVoucher = this._model.getVouchers().splice(deleteIndex, 1)[0];\n removedVoucher.component.shutDown();\n return this._vouchersContainer.removeItem(deleteIndex, animation)\n .then((newIndex: number) => {\n if (!_.isNullOrUndefined(newIndex)) {\n return this._model.getVouchers()[newIndex];\n } else {\n return undefined;\n }\n });\n } else {\n return Promise.reject();\n }\n }\n\n\n /**\n * Find voucher index in voucher array\n * @returns {*}\n * @private\n */\n _getVoucherIndex(voucherId) {\n const vouchers = this._model.getVouchers();\n if (!vouchers) {\n return;\n }\n let voucherIndex;\n vouchers.forEach((voucher, index) => {\n if (voucher.ID === voucherId) {\n voucherIndex = index;\n }\n });\n\n return voucherIndex;\n }\n\n /**\n * Try to get vouchers from model or service.\n * If vouchers exist, inject them to Element HTML, otherwise display no reward dialog\n * @private\n */\n _injectVouchersList() {\n return new Promise((res, rej) => {\n this._getVouchers().then((voucherList: IFreePlayVoucher[]) => {\n if (!_.isArray(voucherList) || 0 === voucherList.length) {\n return rej();\n }\n const vouchersContainer = this.getDOMElementByClassName('cgp-fp-vouchers-container'); // TODO to consts\n voucherList.forEach((voucher: IAlteredFreePlayVoucher) => {\n const voucherComponent = VoucherComponentController.create({voucher: voucher, container: this}).start();\n voucher.component = voucherComponent;\n DOM.addClass(voucherComponent.getEl(), 'cgp-fp-voucher-wrapper');\n });\n this._vouchersContainer = this._createScrollableContainer(voucherList.map((voucher: IAlteredFreePlayVoucher) => {\n return voucher.component.getEl();\n }));\n DOM.append(vouchersContainer, this._vouchersContainer.getEl());\n this._vouchersContainer.onAppendedToDOM();\n this._vouchersContainer.onActiveChanged = (index) => {\n this.onVoucherSelected(this._model.getVouchers()[index].ID, true);\n };\n res();\n });\n });\n\n }\n\n\n /**\n * Create ScrollableContainer for vouchers with device and direction configuration\n * @param vouchers\n * @private\n */\n _createScrollableContainer(items) {\n const instance = ScrollableContainer.create(Object.assign({}, {items: items}, this._model.getScrollingOptions()));\n instance.start();\n return instance;\n }\n\n\n\n /**\n * Get voucher from model. If vouchers don't exist, try to retrieve vouchers from Service and update the Model\n * @returns {*}\n * @private\n */\n _getVouchers() {\n const voucherList = this._model.getVouchers();\n if (!_.isArray(voucherList) || 0 === voucherList.length) {\n this.logger.debug('Vouchers list is empty, try to retrieve vouchers from FreePlayService');\n return this.serviceFactory.freePlayService().getFreePlayVouchers()\n .then((vouchers) => {\n this._model.setVouchers(vouchers);\n return vouchers;\n });\n }\n\n return Promise.resolve(voucherList);\n }\n\n\n /**\n * Open voucher games\n * @param voucherId\n */\n onVoucherSelected(voucherId: string, activeChanged = false) {\n this.logger.debug('Voucher ' + voucherId + ' is selected.');\n const voucher = this.getVoucherByVoucherID(voucherId);\n if (voucher) {\n this._model.getContainerRef().onVoucherSelected(voucher, activeChanged);\n }\n }\n\n\n\n\n /**\n * Find voucher by voucherID\n * @param voucherId\n * @returns {*}\n * @private\n */\n getVoucherByVoucherID(voucherId) {\n const voucherIndex = this._getVoucherIndex(voucherId);\n if (-1 < voucherIndex ) {\n return this._model.getVouchers()[voucherIndex];\n }\n return undefined;\n }\n\n\n /**\n * Send GA\n * @param action\n * @param label\n */\n sendAnalytics(action, params = {}) {\n this._model.getContainerRef().sendAnalytics(action, params);\n }\n\n\n shutDown() {\n super.shutDown();\n // remove vouchers\n // TODO\n }\n\n}\n","import BaseModelComponent from \"../../../base/base_model_component\";\nimport FreePlayComponentController from \"../free_play_component_controller\";\n\nexport default class FPGamesComponentModel extends BaseModelComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'FPGamesComponentModel';\n private _direction: string;\n private _games: number[];\n private _fpType: string;\n private _containerRef: FreePlayComponentController;\n private _hasLimit = true;\n\n /**\n *\n * @param params\n */\n init(params: any = {}) {\n super.init(params);\n if (params) {\n this.setDirection(params.direction)\n .setGames(params.games)\n .setFPType(params.fpType)\n ._setContainerRef(params.container);\n }\n }\n\n\n /**\n * Set initial direction of vouchers list\n * @param direction\n * @returns {FPVouchersComponentModel}\n * @private\n */\n setDirection(direction) {\n this._direction = direction;\n return this;\n }\n\n setHasLimit(hasLimit) {\n this._hasLimit = hasLimit;\n return this;\n }\n\n /**\n * Set games to be injected to the list\n * @param games\n * @returns {FPVouchersComponentModel}\n * @private\n */\n setGames(games) {\n this._games = games;\n return this;\n }\n\n\n /**\n * Set FreePlay voucher type\n * @param fpType\n * @returns {FPGamesComponentModel}\n * @private\n */\n setFPType(fpType) {\n this._fpType = fpType;\n return this;\n }\n\n\n /**\n * Set reference to parent container\n * @param container\n * @returns {FPVouchersComponentModel}\n * @private\n */\n private _setContainerRef(container) {\n this._containerRef = container;\n return this;\n }\n\n\n /**\n * Get vouchers list direction\n * @returns {*}\n */\n getDirection() {\n return this._direction;\n }\n\n getHasLimit() {\n return this._hasLimit;\n }\n\n /**\n * Get FP vouchers\n * @returns {*}\n */\n getGames() {\n return this._games;\n }\n\n\n /**\n * Get FreePlay voucher type\n * @returns {*}\n */\n getFPType() {\n return this._fpType;\n }\n\n\n /**\n * Get container reference\n * @returns {*}\n */\n getContainerRef() {\n return this._containerRef;\n }\n}\n","import {DIRECTION} from '../free_play_component_consts';\n\nexport const ScrollingContainerStyle = {\n MOBILE: {\n [DIRECTION.HORIZONTAL]: {\n arrowsPadding: [10, 30, 20, 30],\n itemGap: 15, //10\n //scrollingStep: 4,\n // isCenterItems: true,\n // grid: {\n // itemsInRow: 1, gap: 0\n // }\n },\n [DIRECTION.VERTICAL]: {\n arrowsPadding: [10, 10, 10, 10],\n itemGap: 10,\n // isCenterItems: false,\n // scrollingStep: 2,\n // grid: {\n // itemsInRow: 2, gap: 30\n // }\n }\n },\n PC: {\n [DIRECTION.HORIZONTAL]: {\n arrowsPadding: [10, 30, 20, 30],\n itemGap: 15,\n // scrollingStep: 4\n },\n [DIRECTION.VERTICAL]: {\n arrowsPadding: [5, 0, 20, 0],\n itemGap: 15,\n externalScroll: false,\n isArrowVisible: false,\n //scrollingStep: 2,\n // isCenterItems: false,\n // grid: {\n // itemsInRow: 2, gap: 30\n // }\n }\n }\n}\n\nexport const FP_GAME_ITEM_CLASSES = {\n GAME_ITEM_FP_TYPE_THUMB: 'cgp-game-item-fp-thumb',\n GAME_ITEM_FP: 'cgp-game-item-fp'\n}\n\nexport const FP_GAMES_CONTAINER_CLASS = 'cgp-fp-games-container';\n\nexport const FP_GAMES_SHOW_MORE_CLASS = 'cgp-fp-games-more-less-btn';\n\nexport const FP_GAMES_COMPONENT_LIMIT = 6;\n","import BaseComponent from \"../../../base/base_component\";\nimport FPGamesComponentModel from \"./fp_games_component_model\";\nimport ScrollableContainerController from \"../../scrollable_container/scrollable_container_controller\";\nimport Device from \"../../../utils/device/device\";\nimport Event from '../../../utils/event';\nimport DOM from \"../../../utils/dom\";\nimport * as FP_GAMES_LIST_CONSTS from \"./fp_games_component_consts\";\nimport GameItemComponentController from \"../../game_item/game_item_component_controller\";\nimport { GAMES_INFO } from \"../../../services/games_information/games_information_service_interface\";\nimport { USER_EVENTS, SYSTEM_EVENTS } from \"../../../events/events\";\nimport {CyClass} from '../../../../../common/cy-classes';\n\nconst gamesView = require('./view/fp_games_component.html');\n\nexport default class FPGamesComponentController extends BaseComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'FPGamesComponentController';\n\n\n /**\n * @static\n * @type {string}\n */\n static DIRECTIVE = 'cgp-directive-games_list';\n\n /**\n * Root component selector.\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-free-play-games-list-component';\n\n _model: FPGamesComponentModel;\n private _gamesContainer: ScrollableContainerController;\n private _gameComponents: GameItemComponentController[];\n\n\n init(params) {\n super.init(params);\n this._model = FPGamesComponentModel.create(params);\n }\n\n\n start() {\n const gamesHtml = this.bake(gamesView);\n this.setHTML(gamesHtml);\n\n /*\n This is a quick hack fix for https://dev.azure.com/888holdings/GamingNDL/_workitems/edit/1630822\n It's a hack mainly because viewportDimensions it's not observed, so if the viewport changes, nothing will happen\n */\n const viewportDimensions = this.serviceFactory.windowService().getWindowInnerDimensions();\n if (this.serviceFactory.integrationService().isMiniOrbit() && viewportDimensions.width >= 768) {\n const windowHeight = viewportDimensions.height;\n DOM.addStyle(this.getDOMElementByClassName(\"cgp-fp-games-container-and-loader-wrap\") as HTMLElement, \"height\", Math.round(windowHeight / 2) + \"px\");\n }\n\n return this;\n }\n\n\n /**\n * Handle event when the component attached to DOM.\n * From this point the component is ready to execute DOM manipulation and calculations regarding to entire document\n */\n onAppendedToDOM(): Promise {\n super.onAppendedToDOM();\n //this._subscribeUserEvents();\n //this._assignMessageHeight();\n return this._injectVoucherGames();\n }\n\n\n /**\n * Update container with new games\n * @param games\n * @returns {*}\n */\n updateGames(games: number[], fpTypeID: string) {\n //this.disableComponent();\n this._model.setGames(games);\n this._model.setFPType(fpTypeID);\n DOM.removeElement(this.getDOMElementByClassName(FP_GAMES_LIST_CONSTS.FP_GAMES_CONTAINER_CLASS), this._gamesContainer.getEl());\n DOM.removeClass(this.getEl(), 'cgp-fp-games-disabled');\n this._gamesContainer = null;\n return this._injectVoucherGames();\n }\n\n\n disableComponent() {\n if (this._gameComponents) {\n this._gameComponents.forEach((component) => {\n component.shutDown();\n });\n }\n DOM.addClass(this.getEl(), 'cgp-fp-games-disabled');\n }\n\n private _onLoading(isLoading: boolean) {\n if (isLoading) {\n DOM.addClass(this.getEl(), 'cgp-free-play-games-loading');\n } else {\n DOM.removeClass(this.getEl(), 'cgp-free-play-games-loading');\n }\n }\n\n /**\n * Inject list of voucher's games into the scrollable container\n * @private\n */\n private _injectVoucherGames(): Promise {\n return new Promise((res) => {\n this._onLoading(true);\n // this games are in recommended order\n const games = this._model.getGames();\n\n // reset to limited view\n this._model.setHasLimit(true);\n\n this.serviceFactory.gamesInformationService().getGamesInfo(games)\n .then((mappedGames) => {\n return this._createGameComponents(games, mappedGames);\n })\n .then((gameComponents) => {\n this._gameComponents = [];\n gameComponents.forEach((gameComponent) => {\n DOM.addClass(gameComponent.getEl(), FP_GAMES_LIST_CONSTS.FP_GAMES_CONTAINER_CLASS);\n DOM.addClass(gameComponent.getEl(), CyClass('cy-free-play-game-item'));\n this._gameComponents.push(gameComponent);\n });\n this._gamesContainer = this._createScrollableGamesContainer(\n this._gameComponents.map(gameComponent => gameComponent.getEl()),\n );\n\n const ts: number = performance.now();\n let requestId: number;\n\n const loadingFn = () => {\n const now = performance.now();\n if (now - ts > 200) {\n this._onLoading(false);\n this._appendScrollableGamesContainer();\n window.cancelAnimationFrame(requestId);\n res();\n } else {\n requestId = window.requestAnimationFrame(loadingFn);\n }\n };\n\n loadingFn();\n });\n });\n }\n\n\n private _appendScrollableGamesContainer() {\n const gamesContainer = this.getDOMElementByClassName(FP_GAMES_LIST_CONSTS.FP_GAMES_CONTAINER_CLASS); // TODO to consts\n DOM.append(gamesContainer, this._gamesContainer.getEl());\n this._gamesContainer.onAppendedToDOM();\n }\n\n\n onGameSelected(gameType: number, title: string) {\n this._model.getContainerRef();\n }\n\n\n /**\n * Create game components asynchronously\n * @param gamesInfo\n * @returns GameItemComponentController[]\n * @private\n */\n private _createGameComponents(games: number[], gamesInfo: GAMES_INFO): GameItemComponentController[] {\n const gameComponents: GameItemComponentController[] = [];\n games.forEach((gameType, index) => {\n const gameInfo = gamesInfo[gameType];\n if (gameInfo) {\n\n const shouldShow = this._model.getHasLimit()? index < FP_GAMES_LIST_CONSTS.FP_GAMES_COMPONENT_LIMIT : true;\n const gameItemComp = GameItemComponentController.create({\n gameData: Object.assign({ gametypeid: gameType }, gameInfo),\n container: this,\n itemClass: FP_GAMES_LIST_CONSTS.FP_GAME_ITEM_CLASSES.GAME_ITEM_FP,\n fpType: this._model.getFPType(),\n onClicked: () => {\n this._model.getContainerRef().onGameSelected(gameInfo.gameType, gameInfo.title);\n },\n show: shouldShow\n }).start();\n\n gameComponents.push(gameItemComp);\n }\n });\n return gameComponents;\n }\n\n private _createShowMoreLessButton(): HTMLElement {\n const buttonCaption = this._getMoreOrLessCaption();\n const btnEl = DOM.createElement('button', buttonCaption);\n DOM.addClass(btnEl, [\n 'cgp-themes-base-cta',\n 'cgp-theme-property-font-size-small-secondary',\n 'cgp-theme-property-dark-grey',\n 'cgp-theme-property-background-color-darkmain',\n 'cgp-fp-games-more-less-btn',\n FP_GAMES_LIST_CONSTS.FP_GAMES_SHOW_MORE_CLASS\n ]);\n this.onDOMEvent(btnEl, USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics();\n this._toggleMoreLessBtn();\n });\n return btnEl;\n }\n\n private _toggleMoreLessBtn() {\n const oldHasLimit = this._model.getHasLimit();\n this._model.setHasLimit(!oldHasLimit);\n\n // update items\n for (let index = FP_GAMES_LIST_CONSTS.FP_GAMES_COMPONENT_LIMIT; index < this._gameComponents.length; index++) {\n const itemComp = this._gameComponents[index];\n itemComp.updateDisplayState(!this._model.getHasLimit());\n }\n\n const btn = this.getDOMElementByClassName(FP_GAMES_LIST_CONSTS.FP_GAMES_SHOW_MORE_CLASS) as HTMLElement;\n btn.innerText = this._getMoreOrLessCaption();\n }\n\n _sendAnalytics() {\n const hasLimit = this._model.getHasLimit();\n let analyticsData = {\n category: \"Navigation\",\n action: \"RewardsDrawer\",\n label: hasLimit? \"See_All\" : \"Show_Less\"\n };\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticsData);\n }\n\n private _getMoreOrLessCaption() {\n const translationKey = this._model.getHasLimit() ? \"free_play_show_more\" : \"free_play_show_less\";\n const buttonCaption = this.serviceFactory.languageService().translation(translationKey);\n return buttonCaption;\n }\n\n /**\n * Create ScrollableContainer for vouchers with device and direction configuration\n * @param vouchers\n * @private\n */\n private _createScrollableGamesContainer(items: HTMLElement[]) {\n let allItems = items;\n\n // if show more/less buttons are not required, simply don't add them to scrollable container\n if (this._model.getGames().length > FP_GAMES_LIST_CONSTS.FP_GAMES_COMPONENT_LIMIT) {\n allItems = allItems.concat(this._createShowMoreLessButton());\n }\n\n const instance = ScrollableContainerController.create(Object.assign({}, { items: allItems }, this._createContainerStyle()));\n instance.start();\n return instance;\n }\n\n /**\n * Create style for vouchers container\n * @returns {{direction: (*|string|*)}}\n * @private\n */\n private _createContainerStyle() {\n let style = { direction: this._model.getDirection() };\n if (false === Device.isMobile()) {\n style = Object.assign({}, style, FP_GAMES_LIST_CONSTS.ScrollingContainerStyle.PC[this._model.getDirection()]);\n } else {\n style = Object.assign({}, { isArrowVisible: false }, style, FP_GAMES_LIST_CONSTS.ScrollingContainerStyle.MOBILE[this._model.getDirection()]);\n }\n return style;\n }\n}\n","import BaseComponent from '../../base/base_component';\nimport Model from './free_play_component_model';\nimport * as FREE_PLAY_CONSTS from \"./free_play_component_consts\";\nimport FPVouchersComponentController from \"./vouchers/fp_vouchers_component_controller\";\nimport DOM from \"../../utils/dom\";\nimport Event from \"../../utils/event\";\nimport _ from '../../utils/underscore';\nimport { SYSTEM_EVENTS, USER_EVENTS } from \"../../events/events\";\nimport Device from \"../../utils/device/device\";\nimport FPGamesComponentController from \"./games/fp_games_component_controller\";\nimport { PRIORITY_LEVEL } from \"../../services/overlay_manager/overlay_manager_levels\";\nimport Strings from \"../../utils/strings\";\nimport ScreenLockComponent from \"../screen_lock/screen_lock_component_controller\";\nimport FreePlayComponentModel from './free_play_component_model';\nimport { IAlteredFreePlayVoucher } from './voucher/free_play_voucher_consts';\n\nconst containerView = require('./view/free_play_component.html');\n\nexport default class FreePlayComponentController extends BaseComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'FreePlayComponentController';\n\n\n /**\n * @static\n * @type {string}\n */\n static DIRECTIVE = 'cgp-directive-free_play';\n\n /**\n * Root component selector.\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-free-play-component';\n private _gamesContainer: FPGamesComponentController;\n private _vouchersContainer: FPVouchersComponentController;\n _model: FreePlayComponentModel;\n private _selectedVoucher: IAlteredFreePlayVoucher;\n private _modeSetup: any = {};\n\n init(params) {\n super.init(params);\n this._model = Model.create(params);\n this._initDirection();\n this._subscribe();\n }\n\n\n /**\n * Create element and inject vouchers to element HTML\n * @returns {FreePlayComponentController}\n */\n start() {\n const freePlayContainerHTML = this.bake(containerView);\n this.setHTML(freePlayContainerHTML);\n return this;\n }\n\n\n _subscribe() {\n this.onSystemEvent(SYSTEM_EVENTS.FREE_PLAY_VOUCHER_REMOVED, (voucher) => {\n this.logger.debug('Start remove voucher ' + voucher.ID + ' from component');\n this.onVoucherRemoved(voucher.ID);\n });\n\n this.onSystemEvent(SYSTEM_EVENTS.SCREEN_RESIZE_CHANGED, () => {\n // support device change only in PC\n // Change screen size in mobile is not relevant case. Also in mobile this event fired very frequently, so we don't want to handle this case\n // If component opened in light box in PC, then screen size doesn't affect to component view\n if (true === Device.os.isMobileOS || false === this.isDirective()) {\n return;\n }\n // we should handle only one case, affect on arrows in vertical mode\n if (this._vouchersContainer) {\n this._vouchersContainer.onSizeChanged();\n }\n });\n\n this.onSystemEvent(SYSTEM_EVENTS.SCREEN_CHANGE_STATE, () => {\n // change direction\n DOM.removeClass(this.getDOMElementByClassName(FREE_PLAY_CONSTS.FP_CSS_CLASSES.FP_CONTAINER), 'cgp-fp-games-active');\n this._initDirection(true);\n // recreate component light way\n this._updateDirection();\n this._updateModeStyle();\n this._removeContainers();\n this._createVouchersContainer();\n this.handleLock();\n\n });\n }\n\n\n handleLock() {\n // avoid execute logic in case that this directive is not exist on DOM, but has not removed by Directive component yet\n const directiveEl = this.getEl().parentElement.parentElement;\n if (!directiveEl) {\n return false;\n }\n\n // support orientation / device change\n if (Device.os.isMobileOS && !Device.isTablet() && !Device.isPortrait) {\n const screenLock = ScreenLockComponent.create();\n screenLock.start();\n Event.fire(SYSTEM_EVENTS.OPEN_OVERLAY, {\n component: screenLock,\n priority: PRIORITY_LEVEL.LOCK,\n isCloseBtnAllowed: false,\n isHasHeader: false,\n });\n // lock screen\n return true;\n } else {\n Event.fire(SYSTEM_EVENTS.CLOSE_OVERLAY, { priority: PRIORITY_LEVEL.LOCK });\n return false;\n }\n }\n\n\n /**\n * Subscribe to back button\n * @private\n */\n private _subscribeUserEvents() {\n this.onDOMEvent(this.getDOMElementByClassName(FREE_PLAY_CONSTS.FP_CSS_CLASSES.BACK_BTN), USER_EVENTS.ON_CLICK, () => {\n this._onBackBtnClicked();\n });\n }\n\n\n /**\n * Handle back button click\n * @private\n */\n private _onBackBtnClicked() {\n DOM.removeClass(this.getDOMElementByClassName(FREE_PLAY_CONSTS.FP_CSS_CLASSES.FP_CONTAINER), 'cgp-fp-games-active');\n this._model.setLayoutState(FREE_PLAY_CONSTS.FP_LAYOUT_STATE.VOUCHERS);\n // case when voucher has been removed from game mode\n if (this._isNoVouchers()) {\n this._showNoRewards();\n }\n }\n\n\n /**\n * Handle voucher remove\n * @param voucherId\n * @private\n */\n onVoucherRemoved(voucherId) {\n const state = this._model.getLayoutState();\n const isGameMode = state === FREE_PLAY_CONSTS.FP_LAYOUT_STATE.GAMES && true === this._getLayoutByConfig('gamesLayout').hasBack;\n this._vouchersContainer.removeVoucher(voucherId, !isGameMode)\n .then((selectedVoucher?: IAlteredFreePlayVoucher, activeChanged?: boolean) => {\n if (selectedVoucher) {\n this.onVoucherSelected(selectedVoucher, true);\n return;\n }\n if (isGameMode) {\n if (this._selectedVoucher && this._selectedVoucher.ID === voucherId) {\n this._gamesContainer.disableComponent();\n }\n } else {\n if (this._isNoVouchers()) {\n this._showNoRewards();\n }\n }\n this._selectedVoucher = null;\n })\n .catch(() => {\n\n }\n );\n }\n\n\n /**\n * When voucher expired we should to disable game component for this voucher once it selected\n * @param voucherId\n */\n onVoucherExpired(voucherId) {\n if (this._selectedVoucher && this._selectedVoucher.ID === voucherId && this._gamesContainer) {\n this._gamesContainer.disableComponent();\n }\n }\n\n\n /**\n * Handle event when the component attached to DOM.\n * From this point the component is ready to execute DOM manipulation and calculations regarding to entire document\n */\n onAppendedToDOM() {\n super.onAppendedToDOM();\n // recreate all containers. This fix the issue when we're trying to recreate directives on oauth changed event.\n // In this case gamesContainer is already exists and it's not appended to DOM, so actually it won't be rerendered.\n this._vouchersContainer = null;\n this._gamesContainer = null;\n if (!this.serviceFactory.oAuth2Service().isAuthorized()) {\n this.logger.debug('User is not authorized. Unable to retrieve vouchers.');\n return;\n }\n this._subscribeUserEvents();\n this._updateDirection();\n this._updateModeStyle();\n this._createVouchersContainer();\n this.handleLock();\n }\n\n\n /**\n * Get classes to render in overlay\n * @returns {{additionalClasses: [string], contentAdditionalClasses: [string,string,string]}}\n */\n getOverlayClasses() {\n return {\n additionalClasses: ['cgp-fp-lightbox'],\n contentAdditionalClasses: ['cgp-theme-property-lb-corner-radius'],\n };\n }\n\n\n /**\n * Open voucher games\n * @param voucherId\n */\n onVoucherSelected(voucher: IAlteredFreePlayVoucher, activeChanged: boolean) {\n if (this._model.getGameTypeID()) {\n // if game exist, we need to open this game directly\n this.serviceFactory.gamesInformationService().getGamesInfo([this._model.getGameTypeID()])\n .then((mappedGames) => {\n Object.keys(mappedGames).forEach((gameKey) => {\n const game = mappedGames[gameKey];\n this.openGame(Object.assign({ gameType: gameKey }, game), voucher);\n });\n })\n .catch((error) => {\n this.logger.error('GameTypeMapper failed. Unable to display voucher game list');\n this.logger.error(error);\n });\n } else {\n // prevent handling voucher selection on click / touch by the user\n if (activeChanged === false && this._getLayoutByConfig('gamesLayout').hasBack === false) {\n return;\n }\n // prevent handling voucher selection on auto change\n if (activeChanged === true && this._getLayoutByConfig('gamesLayout').hasBack === true) {\n return;\n }\n\n DOM.addClass(this.getDOMElementByClassName(FREE_PLAY_CONSTS.FP_CSS_CLASSES.FP_CONTAINER), 'cgp-fp-games-active');\n this._model.setLayoutState(FREE_PLAY_CONSTS.FP_LAYOUT_STATE.GAMES);\n this._createGamesContainer(voucher)\n .then(() => {\n if (this._isVoucherExpired(this._selectedVoucher)) {\n this.onVoucherExpired(this._selectedVoucher.ID);\n }\n });\n }\n this.sendAnalytics('SelectVoucher', { voucherID: voucher.ID });\n }\n\n\n /**\n * Handle game selection\n * @param gameTypeID\n * @param gameTitle\n */\n onGameSelected(gameTypeID: number, gameTitle: string) {\n this.openGame({\n gameType: gameTypeID,\n title: gameTitle\n }, this._selectedVoucher);\n }\n\n\n /**\n * Open voucher game\n * @param gameData\n */\n openGame(gameData: {\n gameType: number,\n title: string}, voucher) {\n this._handleOpenGameRestrictions()\n .then(() => {\n this.sendAnalytics('OpenGame', { gameID: gameData.gameType });\n if (!gameData || !voucher) {\n return;\n }\n\n this.logger.debug('Start opening voucher game ' + gameData.gameType + ' from voucher ' + voucher.ID);\n\n this.serviceFactory.gameService().openRealGame({\n gameType: gameData.gameType,\n gameName: gameData.title,\n freePlayData: {\n freePlayId: voucher.ID * 1,\n freePlayType: voucher.FreePlayTypeId * 1,\n isThirdParty: voucher.CompanyID ? true : false,\n freePlayOriginalAmount: voucher.OriginAmount,\n }\n });\n\n if (false === this.isDirective()) {\n Event.fire(SYSTEM_EVENTS.CLOSE_OVERLAY, {\n el: this.getEl(),\n priority: this._model.getOpenPriority() || PRIORITY_LEVEL.FP\n });\n }\n })\n .catch(() => {\n this.logger.debug('Opening voucher' + gameData.gameType + ' from voucher ' + voucher.ID + 'game has been restricted by the user or additional logic');\n });\n\n }\n\n\n /**\n * Allow or avoid opening game process\n * @returns {*}\n * @private\n */\n private _handleOpenGameRestrictions() {\n const allowGameFn = this._model.getAllowOpenGame();\n if (allowGameFn && _.isFunction(allowGameFn)) {\n return allowGameFn();\n } else {\n return Promise.resolve();\n }\n }\n\n\n /**\n * Send GA\n * @param action\n */\n sendAnalytics(action: string, params) {\n let analyticsObj = this._model.getAnalytics()[action];\n if (analyticsObj) {\n // deep copy\n analyticsObj = Object.assign({}, analyticsObj);\n Object.keys(analyticsObj).forEach((key) => {\n const string = new Strings(analyticsObj[key]);\n const curly = string.getCurlyBracesBinding();\n if (curly.length > 0 && curly[0].to !== '' && params[curly[0].to]) {\n analyticsObj[key] = analyticsObj[key].replace('{' + curly[0].to + '}', params[curly[0].to]);\n }\n });\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticsObj);\n }\n }\n\n /**\n * Set default direction (if not provided from client) according to device type\n * @private\n */\n private _initDirection(skipDefault = false) {\n let direction = this._model.getDirection();\n // In Mobile it's not supported because over complexity in orientation change\n if (!Device.os.isMobileOS) {\n // if direction is defined and mode is PC, this definition can override default mode\n if (direction && skipDefault === false) {\n return;\n }\n if (true === this.isDirective()) { // PC directive is vertical\n direction = FREE_PLAY_CONSTS.DIRECTION.VERTICAL;\n } else {\n direction = FREE_PLAY_CONSTS.DIRECTION.HORIZONTAL;\n }\n } else { // is mobile\n // in mobile there is no matter whether component is directive or not. Direction depends on device orientation only.\n // Vertical for Portrait and Horizontal for Landscape\n // TODO:Mircea:Why is a check for isTablet needed here? isTablet checks if iPad and mobile < 1280\n direction = Device.isPortrait || Device.isTablet() ? FREE_PLAY_CONSTS.DIRECTION.VERTICAL : FREE_PLAY_CONSTS.DIRECTION.HORIZONTAL;\n }\n\n this._model.setDirection(direction);\n }\n\n\n /**\n * Create games container (once)\n * @param games\n * @private\n */\n private _createGamesContainer(voucher) {\n // Create container\n const games = voucher.games;\n if (!this._gamesContainer) {\n this._gamesContainer = FPGamesComponentController.create({\n direction: this._getLayoutByConfig('gamesLayout').direction,\n games: games,\n container: this,\n fpType: voucher.FreePlayTypeId\n }).start();\n this.innerComponentsRef.push(this._gamesContainer);\n // Attach to DOM\n DOM.append(this.getDOMElementByClassName(FREE_PLAY_CONSTS.FP_CSS_CLASSES.GAMES_CONTAINER), this._gamesContainer.getEl());\n return this._gamesContainer.onAppendedToDOM()\n .then(() => {\n this._selectedVoucher = voucher;\n })\n .catch(() => {\n // this._showNoRewards();\n });\n } else {\n return this._gamesContainer.updateGames(games, voucher.FreePlayTypeId)\n .then(() => {\n this._selectedVoucher = voucher;\n });\n }\n\n }\n\n /**\n *\n * @param date\n * @returns true if specified date is invalid\n * @private\n */\n private _isDateInvalid(date) {\n return !date || !_.isNumber(date.getTime());\n }\n\n /**\n * Check if voucher is already expired\n * @param voucher\n * @returns {boolean}\n * @private\n */\n private _isVoucherExpired(voucher) {\n if (this._isDateInvalid(voucher.ExpirationDate)) {\n return false; // NO ExpirationDate means that voucher not expired - fallback for old platform API (US)\n }\n\n const timeToLeft = new Date(voucher.ExpirationDate).getTime() - new Date().getTime();\n return !(timeToLeft > 0);\n }\n\n\n /**\n * Create VouchersContainerComponent and attache it to voucher container DOM element\n * @private\n */\n private _createVouchersContainer() {\n // Create container\n this._vouchersContainer = FPVouchersComponentController.create({\n scrollingOptions: this._getLayoutByConfig('vouchersLayout').scrollingOptions,\n vouchers: this._model.getVouchers(),\n container: this,\n title: this._getVoucherContainerTitle()\n }).start();\n this.innerComponentsRef.push(this._vouchersContainer);\n // Attach to DOM\n DOM.append(this.getDOMElementByClassName(FREE_PLAY_CONSTS.FP_CSS_CLASSES.VOUCHERS_CONTAINER), this._vouchersContainer.getEl());\n this._vouchersContainer.onAppendedToDOM()\n .then(() => {\n this._onVoucherContainerCreated();\n })\n .catch(() => {\n this._showNoRewards();\n });\n }\n\n\n /**\n * Get voucher container title source (from GameFrame or regular)\n * @returns {*}\n * @private\n */\n private _getVoucherContainerTitle() {\n const languageService = this.serviceFactory.languageService();\n return this._model.getGameTypeID()\n ? languageService.translation('free_play_message_selected_game_title')\n : languageService.translation('free_play_message_voucher_title');\n }\n\n private _onVoucherContainerCreated() {\n Event.fire(SYSTEM_EVENTS.FREE_PLAY_VOUCHER_MSG_OPENED, this._vouchersContainer.getVouchers());\n // if games layout rendered with vouchers layout, we should open games for the first voucher automatically\n if (!this._model.getGameTypeID() && false === this._getLayoutByConfig('gamesLayout').hasBack) {\n this.onVoucherSelected(this._vouchersContainer.getVouchers()[0], true);\n }\n }\n\n\n /**\n * Get direction by mode, voucher or games\n * @param mode\n * @returns {*}\n * @private\n */\n private _getLayoutByConfig(mode) {\n const direction = this._model.getDirection();\n const device = Device.os.isMobileOS ? 'mobile' : 'pc';\n const layoutConfig = this._model.getLayoutConfig();\n const directionLayoutConfig = layoutConfig[device][direction][mode];\n if (this._model.getGameTypeID() && directionLayoutConfig.gameMode) { // from game mode\n return directionLayoutConfig.gameMode;\n } else {\n return directionLayoutConfig;\n }\n }\n\n\n private _updateDirection() {\n DOM.removeClass(this.getEl(), FREE_PLAY_CONSTS.FP_CSS_CLASSES.DIRECTION_PREFIX + FREE_PLAY_CONSTS.DIRECTION.HORIZONTAL);\n DOM.removeClass(this.getEl(), FREE_PLAY_CONSTS.FP_CSS_CLASSES.DIRECTION_PREFIX + FREE_PLAY_CONSTS.DIRECTION.VERTICAL);\n DOM.addClass(this.getEl(), FREE_PLAY_CONSTS.FP_CSS_CLASSES.DIRECTION_PREFIX + this._model.getDirection());\n }\n\n\n private _updateModeStyle() {\n const fpContainer = this.getDOMElementByClassName(FREE_PLAY_CONSTS.FP_CSS_CLASSES.FP_CONTAINER);\n const isVouchersOnly = this._model.getGameTypeID();\n if (this._modeSetup) {\n DOM.removeClass(fpContainer, this._modeSetup.vouchersListClass);\n DOM.removeClass(fpContainer, this._modeSetup.gamesListClass);\n DOM.removeClass(fpContainer, this._modeSetup.hasBackClass);\n } else {\n this._modeSetup = {};\n }\n const direction = this._model.getDirection();\n const device = Device.os.isMobileOS ? 'mobile' : 'pc';\n const layoutConfig = this._model.getLayoutConfig();\n const vouchersLayout = layoutConfig[device][direction]['vouchersLayout'];\n const gamesLayout = layoutConfig[device][direction]['gamesLayout'];\n\n this._modeSetup.vouchersListClass = 'cgp-fp-vouchers-list-' + vouchersLayout.direction;\n DOM.addClass(fpContainer, this._modeSetup.vouchersListClass);\n this._modeSetup.gamesListClass = 'cgp-fp-games-list-' + gamesLayout.direction;\n DOM.addClass(fpContainer, this._modeSetup.gamesListClass);\n this._modeSetup.hasBackClass = gamesLayout.hasBack === true ? 'cgp-fp-has-back' : 'cgp-fp-no-has-back';\n DOM.addClass(fpContainer, this._modeSetup.hasBackClass);\n if (isVouchersOnly) {\n DOM.addClass(fpContainer, 'cgp-fp-gameframe-mode');\n }\n }\n\n\n\n /**\n * Get if there is no active vouchers\n * @returns {boolean}\n * @private\n */\n private _isNoVouchers() {\n const vouchers = this._vouchersContainer.getVouchers();\n return !vouchers || vouchers.length === 0;\n }\n\n\n /**\n * Show no free plays message\n * @private\n */\n private _showNoRewards() {\n DOM.addClass(this.getDOMElementByClassName(FREE_PLAY_CONSTS.FP_CSS_CLASSES.FP_CONTAINER), 'cgp-fp-vouchers-list-no-reward');\n }\n\n\n private _removeContainers() {\n if (this._vouchersContainer) {\n this._vouchersContainer.shutDown();\n DOM.removeElement(this.getDOMElementByClassName(FREE_PLAY_CONSTS.FP_CSS_CLASSES.VOUCHERS_CONTAINER), this._vouchersContainer.getEl());\n this._vouchersContainer = null;\n }\n if (this._gamesContainer) {\n this._gamesContainer.shutDown();\n DOM.removeElement(this.getDOMElementByClassName(FREE_PLAY_CONSTS.FP_CSS_CLASSES.GAMES_CONTAINER), this._gamesContainer.getEl());\n this._gamesContainer = null;\n }\n\n }\n\n}\n","import BaseComponent from '../../../base/base_component';\nimport DOM from '../../../utils/dom';\nimport {USER_EVENTS} from '../../../events/events';\nimport * as NavbarConst from '../navbar_const';\n\nlet gameModeTogglesHtml = require('../view/gamemode-toggles.html');\n\nexport default class GameModeToggleNavbarPart extends BaseComponent {\n static CLASS = 'GameModeToggleNavbarPart';\n\n init(params) {\n super.init(params);\n this._isReal = params.isReal;\n this._isFreePlay = params.isFreePlay;\n this._switchGameModeCallback = params.switchGameModeCallback;\n this._analyticsTrigger = params.analyticsTrigger;\n\n DOM.html(this.bake(gameModeTogglesHtml), this.getEl());\n DOM.addClass(this.getEl(), 'cgp-navbar-toggle-wrapper');\n this._setCheckboxElementValue();\n this._setStyles();\n this._subscribe();\n\n }\n\n\n _subscribe() {\n this._subscribeToggleAction(NavbarConst.ELEMENTS.CHECKBOX, USER_EVENTS.ON_CHANGE, null);\n this._subscribeToggleAction(NavbarConst.ELEMENTS.REAL, USER_EVENTS.ON_CLICK, true);\n this._subscribeToggleAction(NavbarConst.ELEMENTS.ANONYMOUS, USER_EVENTS.ON_CLICK, false);\n }\n\n\n _getCheckboxElement() {\n let checkbox = this.querySelector(NavbarConst.ELEMENTS.CHECKBOX);\n if (!checkbox) {\n this.throwError('37', `Missing ${NavbarConst.ELEMENTS.CHECKBOX} CSS class from the gamemode-toggles.html`);\n }\n\n return checkbox;\n }\n\n _setCheckboxElementValue() {\n this._getCheckboxElement().checked = this._isReal;\n }\n\n _subscribeToggleAction(elementSelector, eventName, state) {\n this.onChildElementEvent(elementSelector, eventName, (event) => {\n event.preventDefault();\n\n let checkbox = this._getCheckboxElement();\n\n if (checkbox.checked === state) {\n return;\n }\n\n checkbox.checked = !checkbox.checked;\n\n this._analyticsTrigger.send(checkbox.checked ? NavbarConst.ANALYTICS.ACTION.REAL : NavbarConst.ANALYTICS.ACTION.ANONYMOUS);\n\n this._setStyles();\n\n this._switchGameModeCallback()\n .then(() => this._setStyles())\n .catch(() => {\n this._setCheckboxElementValue();\n this._setStyles();\n });\n });\n }\n\n _setStyles() {\n let checkbox = this._getCheckboxElement();\n\n let navbarToggle = this.querySelector(NavbarConst.ELEMENTS.TOGGLES);\n let toggleCircle = this.querySelector(NavbarConst.ELEMENTS.TOGGLE_CIRCLE);\n let realTextElem = this.querySelector(NavbarConst.ELEMENTS.TOGGLE_REAL_TEXT);\n let demoTextElem = this.querySelector(NavbarConst.ELEMENTS.TOGGLE_ANNONYMOUS_TEXT);\n let navbarCheckbox = this.querySelector(NavbarConst.ELEMENTS.CHECKBOX_LABEL);\n\n let toggleLeftBgElem = this.querySelector(NavbarConst.ELEMENTS.GAME_FRAME_BG_LEFT);\n let toggleRightBgElem = this.querySelector(NavbarConst.ELEMENTS.GAME_FRAME_BG_RIGHT);\n\n this._cleanStyle(navbarToggle, toggleCircle, realTextElem, demoTextElem, navbarCheckbox, toggleLeftBgElem, toggleRightBgElem);\n\n if (this._isFreePlay) {\n // Add classes for the option not to use toggle box.\n DOM.addClass(navbarToggle, 'cgp-themes-gameframe-bg-no-toggle');\n DOM.addClass(navbarToggle, 'cgp-themes-gameframe-bg-fp');\n DOM.addClass(navbarToggle, 'cgp-theme-property-background-color-secondary');\n\n let titleTextElem = DOM.createElement('span', this._getFreePlayTitleById(this._model.getFreePlayTypeID()));\n let toggleEl = this.getEl().querySelector(NavbarConst.ELEMENTS.TOGGLES);\n DOM.removeElement(toggleEl, toggleEl.querySelector('.cgp-fp-game-toggle'));\n DOM.addClass(titleTextElem, 'cgp-fp-game-toggle');\n DOM.addClass(titleTextElem, 'cgp-themes-main-title2');\n DOM.addClass(titleTextElem, 'cgp-theme-property-color-dark-main');\n DOM.addClass(titleTextElem, 'cgp-navbar-toggle-title');\n DOM.addClass(toggleLeftBgElem, 'cgp-themes-icons-gameframe-bg-fp-left');\n DOM.addClass(toggleRightBgElem, 'cgp-themes-icons-gameframe-bg-fp-right');\n DOM.append(this.getEl().querySelector(NavbarConst.ELEMENTS.TOGGLES), titleTextElem);\n } else if (checkbox.checked) {\n // Add classes for the toggle box.\n DOM.addClass(navbarToggle, 'cgp-theme-property-background-color-base05');\n DOM.addClass(toggleLeftBgElem, 'cgp-themes-icons-gameframe-bg-real-left');\n DOM.addClass(toggleRightBgElem, 'cgp-themes-icons-gameframe-bg-real-right');\n\n // Add classes for the toggle.\n DOM.addClass(navbarCheckbox, 'cgp-theme-property-background-color-main');\n\n // Add classes for the toggle circle.\n DOM.addClass(toggleCircle, 'cgp-theme-property-background-color-base01');\n\n // Change toggle texts style.\n DOM.addClass(demoTextElem, 'cgp-themes-secondary-text');\n DOM.addClass(realTextElem, 'cgp-themes-main-title');\n\n } else {\n // Add classes for the toggle box.\n DOM.addClass(navbarToggle, 'cgp-theme-property-background-color-base01');\n DOM.addClass(toggleLeftBgElem, 'cgp-themes-icons-gameframe-bg-demo-left');\n DOM.addClass(toggleRightBgElem, 'cgp-themes-icons-gameframe-bg-demo-right');\n\n // Add classes for the toggle.\n DOM.addClass(navbarCheckbox, 'cgp-theme-property-background-color-darkmain');\n\n // Add classes for the toggle circle.\n DOM.addClass(toggleCircle, 'cgp-theme-property-background-color-base01');\n\n // Change toggle texts style.\n DOM.addClass(demoTextElem, 'cgp-themes-main-title');\n DOM.addClass(demoTextElem, 'cgp-theme-property-color-dark-main');\n DOM.addClass(realTextElem, 'cgp-themes-secondary-text');\n DOM.addClass(realTextElem, 'cgp-theme-property-color-dark-main');\n }\n }\n\n\n _cleanStyle(navbarToggle, toggleCircle, realTextElem, demoTextElem, navbarCheckbox, toggleLeftBgElem, toggleRightBgElem) {\n DOM.removeClass(navbarToggle, 'cgp-themes-gameframe-bg-no-toggle');\n DOM.removeClass(navbarToggle, 'cgp-themes-gameframe-bg-fp');\n DOM.removeClass(navbarToggle, 'cgp-theme-property-background-color-secondary');\n DOM.removeClass(navbarToggle, 'cgp-theme-property-background-color-base05');\n DOM.removeClass(navbarToggle, 'cgp-theme-property-background-color-base01');\n\n DOM.removeClass(toggleCircle, 'cgp-theme-property-background-color-base01');\n\n DOM.removeClass(realTextElem, 'cgp-themes-main-text');\n DOM.removeClass(realTextElem, 'cgp-themes-secondary-text');\n DOM.removeClass(realTextElem, 'cgp-theme-property-color-dark-main');\n\n DOM.removeClass(demoTextElem, 'cgp-themes-secondary-text');\n DOM.removeClass(demoTextElem, 'cgp-themes-main-title');\n DOM.removeClass(demoTextElem, 'cgp-theme-property-color-dark-main');\n\n DOM.removeClass(navbarCheckbox, 'cgp-theme-property-background-color-main');\n DOM.removeClass(navbarCheckbox, 'cgp-theme-property-background-color-darkmain');\n\n DOM.removeClass(toggleLeftBgElem, 'cgp-themes-icons-gameframe-bg-fp-left');\n DOM.removeClass(toggleLeftBgElem, 'cgp-themes-icons-gameframe-bg-real-left');\n DOM.removeClass(toggleLeftBgElem, 'cgp-themes-icons-gameframe-bg-demo-left');\n\n DOM.removeClass(toggleRightBgElem, 'cgp-themes-icons-gameframe-bg-fp-right');\n DOM.removeClass(toggleRightBgElem, 'cgp-themes-icons-gameframe-bg-real-right');\n DOM.removeClass(toggleRightBgElem, 'cgp-themes-icons-gameframe-bg-demo-right');\n }\n}","import BaseObject from '../../base/base_object';\nimport {ANALYTICS} from './navbar_const';\nimport Event from '../../utils/event';\nimport {SYSTEM_EVENTS} from '../../events/events';\n\nexport default class AnalyticsTrigger extends BaseObject {\n static CLASS = \"AnalyticsTrigger\";\n\n init(params) {\n this._isReal = params.isReal;\n this._gameType = params.gameType;\n this._gameName = params.gameName;\n }\n send(action) {\n let analyticsObj = this.getAnalyticsObject(action);\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticsObj);\n }\n\n getAnalyticsObject(action) {\n let category = this._isReal ? ANALYTICS.CATEGORY.REAL : ANALYTICS.CATEGORY.ANONYMOUS;\n let label = this._gameType + '_' + this._gameName.replace(/ /g, '');\n return {category: category, action: action, label: label};\n }\n\n\n}","import BaseComponent from '../../../base/base_component';\nimport {ELEMENTS} from '../navbar_const';\nimport {USER_EVENTS} from '../../../events/events';\nimport {ANALYTICS} from '../navbar_const';\nimport _ from '../../../utils/underscore';\n\nlet fullScreenButtonHtml = require('../view/fullscreen-button.html');\n\nexport default class FullScreenButtonNavbarPart extends BaseComponent {\n static CLASS = 'FullScreenButtonNavbarPart';\n\n\n init(params) {\n super.init(params);\n this._analyticsTrigger = params.analyticsTrigger;\n\n this.setInnerHtml(fullScreenButtonHtml);\n\n this.onChildElementEvent(ELEMENTS.FS_BUTTON, USER_EVENTS.ON_CLICK, () => {\n this._analyticsTrigger.send(ANALYTICS.ACTION.FS);\n _.toggleFullScreen();\n });\n }\n\n exitFullScreen() {\n if (_.isFullScreen()) {\n _.closeFullScreen();\n }\n }\n}","import BaseComponent from '../../../base/base_component';\nimport {ANALYTICS} from '../navbar_const';\n\nlet sessionIdHtml = require('../view/session-id.html');\n\nexport default class GameSessionIdNavbarPart extends BaseComponent {\n static CLASS = 'GameSessionIdNavbarPart';\n\n init(params) {\n super.init(params);\n this._analyticsTrigger = params.analyticsTrigger;\n //this.getEl().style.display = 'block';\n this.getEl().onclick = () => {\n this._analyticsTrigger.send(ANALYTICS.ACTION.SESSION_ID);\n }\n }\n\n setGameSessionId(sessionId) {\n this.setInnerHtml(this.bake(sessionIdHtml, {sessionID: sessionId}));\n }\n}","import BaseComponent from '../../../base/base_component';\nimport DOM from '../../../utils/dom';\n\n\nlet freePlayModeToggleHtml = require('../view/free-play-mode-toogles.html');\n\nexport default class FreePlayToggleNavbarPart extends BaseComponent {\n static CLASS = 'FreePlayToggleNavbarPart';\n\n init(params) {\n super.init(params);\n this._freePlayData = params.freePlayData;\n DOM.addClass(this.getEl(), 'cgp-navbar-toggle-wrapper');\n this.setInnerHtml(this.bake(freePlayModeToggleHtml));\n DOM.html(this._getFreePlayTitleById(), this.querySelector('.cgp-fp-game-toggle'))\n }\n\n\n\n _getFreePlayTitleById() {\n let title;\n\n switch (this._freePlayData.freePlayType) {\n case 1:\n title = 'free_play_voucher_title_fsv';\n break;\n case 2:\n title = 'free_play_voucher_title_fpv';\n break;\n case 3:\n title = 'free_play_voucher_title_jpfsv';\n break;\n case 4:\n title = 'free_play_voucher_title_jpfpv';\n break;\n default:\n this.logger.error('freePlayID ' + this._freePlayData.freePlayType + ' is not exists');\n }\n\n return this.serviceFactory.languageService().translation(title);\n }\n}","import BaseComponent from '../../../base/base_component';\nimport Directive from '../../../core/directive';\nimport Event from '../../../utils/event';\nimport DOM from '../../../utils/dom';\nimport {FP_MESSAGE_MODE} from '../../../services/free_play/free_play_consts';\nimport {PRIORITY_LEVEL} from '../../../services/overlay_manager/overlay_manager_levels';\nimport {SYSTEM_EVENTS} from '../../../events/events';\nimport {GAME_SOURCE} from '../navbar_const';\nimport {DEEP_LINK_MAP} from '../../external_links/handlers/external_links_base_handler_consts';\nimport {FP_MESSAGE_DATA} from '../navbar_const';\nimport { FREE_PLAY_FILTER_CONSTRAINTS } from '../../free_play/indicator/fp_indicator_consts';\n\nlet freePlayIndicatorHtml = require('../view/free-play-indicator.html');\n\nexport default class FreePlayIndicatorNavbarPart extends BaseComponent {\n static CLASS = 'FreePlayIndicatorNavbarPart';\n\n init(params) {\n this._selector = '';\n super.init(params);\n this._gameType = params.gameType;\n this._freePlayData = params.freePlayData;\n this._referrerId = params.referrerId;\n\n this.setInnerHtml(this.bake(freePlayIndicatorHtml));\n this.addClass('cgp-navbar-fp-indicator');\n\n this._createFreePlayIndicator();\n this._subscribe();\n\n }\n\n _getIsolationSelector() {\n return '';\n }\n\n _subscribe() {\n this.onSystemEvent(SYSTEM_EVENTS.FREE_PLAY_OPEN_INTERNAL_VOUCHERS_MESSAGE, (params) => {\n this._openFreePlayDirective(params);\n });\n }\n\n _createFreePlayIndicator() {\n let props = {\n indicatorIcons: {\n enabled: 'cgp-themes-icons-game-frame-fp-indicator',\n selected: 'cgp-theme-property-icons-fp-selected',\n disabled: 'hide'\n },\n openMode: FP_MESSAGE_MODE.EMBEDDED_INTERNAL,\n displayConstraint: FREE_PLAY_FILTER_CONSTRAINTS.CONTAINS_GAME,\n gameTypeID: this._gameType,\n freePlayID: this._freePlayData && this._freePlayData.freePlayId,\n openPriority: PRIORITY_LEVEL.GAME_FRAME_FP,\n openDirection: 'vertical',\n onSelected: (isSelected) => {\n if (false === isSelected) {\n DOM.removeClass(document.querySelector('.cgp-game-window-navigation-panel'), 'cgp-navbar-fp-message');\n this.removeChildComponent(this._fpMessage);\n this._fpMessage = null;\n } else {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {category: 'Client_FreePlay', action: 'GameFrame', label: 'FreePlayIcon'});\n }\n }\n };\n this._fpIndicator = Directive.generate({directiveName: 'fp_indicator', start: true, props: props});\n this.appendChildComponent(this._fpIndicator);\n this._fpIndicator.onAppendedToDOM();\n }\n\n _openFreePlayDirective(params) {\n // Set timeout prevents creation of the directive, so the directive will be created after execution of this._fpIndicator ONCLICK handler\n setTimeout(() => {\n let gameSource = this._getGameReferrer();\n if (gameSource) { // check if the game is opened from challenges\n params = Object.assign({}, params, {allowOpenGameFn: this._handleFPOpenGame.bind(this, gameSource)})\n }\n this._fpMessage = Directive.generate({directiveName: 'free_play', start: true, props: params});\n this.appendChildComponent(this._fpMessage, '.cgp-navbar-fp-inner-wrapper');\n DOM.addClass(document.querySelector('.cgp-game-window-navigation-panel'), 'cgp-navbar-fp-message');\n this._fpMessage.onAppendedToDOM();\n }, 100);\n }\n\n _getGameReferrer() {\n if (this._referrerId === DEEP_LINK_MAP.MY_ACCOUNT_DL_MY_CHALLENGES) {\n return GAME_SOURCE.CHALLENGES;\n }\n\n return null;\n }\n\n _handleFPOpenGame(source) {\n return new Promise((res, rej) => {\n let langService = this.serviceFactory.languageService();\n //let msgParams = this._getFPMessageParams('', res, rej);\n Event.fire(SYSTEM_EVENTS.MESSAGE_OPEN, {\n closeButton: false,\n hasDefaultButton: false,\n text: langService.translation(FP_MESSAGE_DATA[source].content),\n buttons: [\n {\n type: 'main',\n name: langService.translation(FP_MESSAGE_DATA[source].ctaOK),\n callback: () => {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, FP_MESSAGE_DATA[source].analytics.ctaOK);\n res();\n },\n // forceAnalytic: true\n },\n {\n type: 'secondary',\n name: langService.translation(FP_MESSAGE_DATA[source].ctaCancel),\n callback: () => {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, FP_MESSAGE_DATA[source].analytics.ctaCancel);\n if(this._fpIndicator) {\n this._fpIndicator.getEl().click();\n }\n rej();\n },\n forceAnalytic: true\n }\n ]\n });\n });\n }\n}","import BaseComponent from '../../base/base_component';\nimport DOM from '../../utils/dom';\nimport _ from '../../utils/underscore';\nimport Directive from '../../core/directive';\nimport * as NavbarConst from './navbar_const';\nimport {ELEMENTS} from './navbar_const';\nimport {USER_EVENTS} from '../../events/events';\nimport GameModeToggleNavbarPart from './parts/game_mode_toggle_navbar_part';\nimport CloseButtonNavbarPart from './parts/close_button_navbar_part';\nimport AnalyticsTrigger from './analytics_trigger';\nimport FullScreenButtonNavbarPart from './parts/full_screen_button_navbar_part';\nimport GameSessionIdNavbarPart from './parts/game_session_id_navbar_part';\nimport FreePlayToggleNavbarPart from './parts/free_play_toggle_navbar_part';\nimport FreePlayIndicatorNavbarPart from './parts/free_play_indicator_navbar_part';\nimport AgeResponsibleGameComponent from \"../regulation_components/base/age/age_responsible_game_component\";\nimport {ANALYTICS} from \"./navbar_const\";\nlet navbarHtml = require('./view/navbar.html');\n\nexport default class GameNavigationBarComponentController extends BaseComponent {\n static CLASS = 'GameNavigationBarComponentController';\n\n init(params) {\n super.init(params);\n this._setParameters(params);\n this._buildView();\n }\n\n _setParameters(params) {\n this._isReal = params.isReal;\n this._gameType = params.gameType;\n this._gameName = params.gameName;\n this._marketing = params.marketing;\n this._showGameModeToggle = this._defaultIfNullOrUndefined(params.showGameModeToggle, false);\n this._showClock = this._defaultIfNullOrUndefined(params.showClock, true);\n this._showCloseButton = this._defaultIfNullOrUndefined(params.showCloseButton, true);\n this._showAge = this._defaultIfNullOrUndefined(params.showAge, true);\n this._showFullScreenButton = this._defaultIfNullOrUndefined(params.showFullScreenButton, true);\n //this._showFavoritesButton = params.showFavoritesButton;\n this._showLogin = this._defaultIfNullOrUndefined(params.showLogin, true);\n this._loginProperties = this._defaultIfNullOrUndefined(params.loginProperties, this._getDefaultLoginProps());\n this._cashierOpenType = this._defaultIfNullOrUndefined(params.cashierOpenType, this.serviceFactory.gameManagerService().cashierOpenType());\n this._freePlayData = params.freePlayData;\n this._responsibleGamblingView = params.responsibleGamblingView;\n this._referrerId = params.referrerId;\n this._showGameSessionId = this._defaultIfNullOrUndefined(params.showGameSessionId, true);\n this._showFreePlaySelection = true;\n if (_.isBoolean(params.showFreePlaySelection)) {\n this._showFreePlaySelection = params.showFreePlaySelection;\n }\n\n this._analyticsTrigger = AnalyticsTrigger.create({\n isReal: this._isReal,\n gameType: this._gameType,\n gameName: this._gameName\n })\n }\n\n _getDefaultLoginProps() {\n let navBarProps = this.serviceFactory.gameManagerService().getNavbarProps();\n if(navBarProps) {\n return navBarProps.login;\n }\n\n return null;\n }\n\n _defaultIfNullOrUndefined(value, defaultValue) {\n if(_.isNullOrUndefined(value)) {\n return defaultValue;\n }\n return value;\n }\n\n _buildView() {\n DOM.html(this.bake(navbarHtml), this.getEl());\n this._setTitle();\n this._createClock();\n this._createAge();\n this._createSessionTimer();\n this._createGameModeToggle();\n this._createFullScreenButton();\n this._createCloseButton();\n this._createGameSessionId();\n this._createWelcome();\n this._createFreePlayIndicator();\n this._createResponsibleIcons();\n\n }\n\n _createFreePlayIndicator() {\n if (!this._showFreePlaySelection) {\n // don't add FreePlayIndicatorNavbarPart\n return;\n }\n\n let freePlayIndicator = FreePlayIndicatorNavbarPart.create({\n freePlayData: this._freePlayData,\n gameType: this._gameType,\n referrerId: this._referrerId\n });\n this.appendChildComponent(freePlayIndicator, '.cgp-navbar-fp-indicator-container');\n }\n\n _createRegulationParts() {\n\n }\n\n _onCloseCallbacks = [];\n registerOnCloseCallback(onCloseCallback) {\n this._onCloseCallbacks.push(onCloseCallback);\n }\n\n _createSessionTimer() {\n if (!this.serviceFactory.regulationService().sessionTimerVisible()) {\n return;\n }\n\n let sessionTimer = Directive.generate({directiveName: 'session_timer', start: true, props: {}});\n\t\tthis.appendChildComponent(sessionTimer, NavbarConst.ELEMENTS.SESSION_TIMER);\n }\n\n\n _createResponsibleIcons() {\n if (!this.serviceFactory.regulationService().getRegulation().showResponsibleIcons()) {\n return;\n }\n\n let responsibleIcons = Directive.generate({directiveName: 'responsible_gaming_icons', start: true, props: {}});\n DOM.addClass(responsibleIcons.getEl(), 'cgp-theme-property-background-color-dark-grey');\n this.appendChildComponent(responsibleIcons, NavbarConst.ELEMENTS.RESPONSIBLE_GAME_ICONS);\n }\n\n _createGameSessionId() {\n if(!this._showGameSessionId) {\n this._gameSessionId = {\n setGameSessionId: () => {}\n };\n return;\n }\n\n this._gameSessionId = GameSessionIdNavbarPart.create({\n analyticsTrigger: this._analyticsTrigger\n });\n this.appendChildComponent(this._gameSessionId, NavbarConst.ELEMENTS.SESSION);\n this.querySelector(NavbarConst.ELEMENTS.SESSION).style.display = 'block';\n }\n\n _createWelcome() {\n if (!this._showLogin) {\n return;\n }\n\n let gameOptions = {\n isReal: this._isReal,\n gametype: this._gameType,\n gameName: this._gameName\n };\n\n let props = Object.assign({}, gameOptions, {\n layout: 'game-panel',\n silentMode: true,\n cashierOpenType: this._cashierOpenType,\n env: 'game'\n }, this._loginProperties);\n\n let welcome = Directive.generate(\n {\n directiveName: 'welcome',\n props,\n start: true\n });\n\n this.appendChildComponent(welcome, NavbarConst.ELEMENTS.LOGIN);\n welcome.start();\n }\n\n\n _createGameModeToggle() {\n let isFreePlay = !_.isNullOrUndefined(this._freePlayData);\n if(!this._showGameModeToggle && !isFreePlay) {\n this.addClass(ELEMENTS.NO_TOGGLE);\n return;\n }\n\n\n let gameModeToggle = null;\n if(isFreePlay){\n gameModeToggle = FreePlayToggleNavbarPart.create({\n freePlayData: this._freePlayData\n })\n } else {\n gameModeToggle = GameModeToggleNavbarPart.create({\n isReal: this._isReal,\n isFreePlay: isFreePlay,\n switchGameModeCallback: this._switchGameMode.bind(this),\n analyticsTrigger: this._analyticsTrigger\n });\n }\n\n\n\n this.appendChildComponent(gameModeToggle, '.cgp-navbar-toggle-container');\n\n }\n\n _switchGameMode() {\n if(this._isReal) {\n return this.serviceFactory.gameService().openAnonymousGame({\n gameType: this._gameType,\n gameName: this._gameName,\n marketing: this._marketing,\n inGameModeSwitching: true,\n referrerId: this._referrerId // ??\n });\n } else {\n return this.serviceFactory.gameService().openRealGame({\n gameType: this._gameType,\n gameName: this._gameName,\n marketing: this._marketing,\n inGameModeSwitching: true,\n referrerId: this._referrerId // ??\n });\n }\n }\n\n\n _createCloseButton() {\n if(!this._showCloseButton) {\n return;\n }\n\n let closeButton = CloseButtonNavbarPart.create({\n onCloseCallback: this._onClose.bind(this)\n });\n\n this.appendChildComponent(closeButton, NavbarConst.ELEMENTS.CLOSE);\n }\n\n _createFullScreenButton() {\n if(!this._showFullScreenButton) {\n this._fullScreenButton = {\n exitFullScreen: () => {}\n };\n return;\n }\n\n this._fullScreenButton = FullScreenButtonNavbarPart.create({\n analyticsTrigger: this._analyticsTrigger\n });\n\n this.appendChildComponent(this._fullScreenButton, NavbarConst.ELEMENTS.FS);\n }\n\n _createAge() {\n if (!this._showAge) {\n return;\n }\n let age = AgeResponsibleGameComponent.create({\n analytics: this._analyticsTrigger.getAnalyticsObject(ANALYTICS.ACTION.RG),\n responsibleGamblingView: this._responsibleGamblingView\n });\n age.start();\n\n this.appendChildComponent(age, '.cgp-navbar-age-container');\n }\n\n\n _createClock() {\n if(!this._showClock) {\n return;\n }\n\n let clock = Directive.generate({directiveName: 'clock', start: true, props: {datetime: this.serviceFactory.skinService().getTimeFormat()}});\n\n this.appendChildComponent(clock, NavbarConst.ELEMENTS.CLOCK);\n this.onChildElementEvent(NavbarConst.ELEMENTS.CLOCK, USER_EVENTS.ON_CLICK, () => {\n this._analyticsTrigger.send(NavbarConst.ANALYTICS.ACTION.TIME);\n });\n }\n\n _setTitle() {\n let navbarElement = this.querySelector(NavbarConst.ELEMENTS.NAME);\n\n DOM.text(navbarElement, this._gameName);\n this.onChildElementEvent(NavbarConst.ELEMENTS.NAME, USER_EVENTS.ON_CLICK, () => {\n this._analyticsTrigger.send(NavbarConst.ANALYTICS.ACTION.GAME_NAME);\n });\n\n }\n\n _onClose() {\n this._analyticsTrigger.send(NavbarConst.ANALYTICS.ACTION.CLOSE);\n this._fullScreenButton.exitFullScreen();\n this._onCloseCallbacks.forEach(onCloseCallback => {\n onCloseCallback();\n });\n }\n\n setGameSessionId(sessionId) {\n this._gameSessionId.setGameSessionId(sessionId);\n }\n}","import BaseModelComponent from '../../../../base/base_model_component';\nimport ServiceFactory from '../../../../services/service_factory';\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\nexport default class GenericRealityCheckComponentModel extends BaseModelComponent {\n static CLASS = 'GenericRealityCheckComponentModel';\n\n init(params) {\n super.init(params);\n\n this._setElapsedTime(params.elapsedTime)._setSessionBalance(params.sessionBalance);\n }\n\n _setElapsedTime(elapsedTime) {\n this._elapsedTime = elapsedTime || TimeSpan.fromMinutes(0);\n\n return this;\n }\n\n _setSessionBalance(balance) {\n this._sessionBalance = balance || 0;\n\n return this;\n }\n\n getElapsedTime() {\n return this._elapsedTime;\n }\n\n getSessionBalance() {\n if (this._sessionBalance < 0) {\n return -1 * this._sessionBalance;\n }\n\n return this._sessionBalance;\n }\n\n getSessionBalanceDescription() {\n let translationKey = this._sessionBalance > 0 ? 'reality_check_session_winnings_description' : 'reality_check_session_losses_description';\n\n return ServiceFactory.create()\n .languageService()\n .translation(translationKey);\n }\n}\n","import BaseComponent from '../../../../base/base_component';\nimport Model from './generic_reality_check_component_model';\n\nlet generic_view = require('./view/generic_reality_check.html');\nlet session_cooldown_view = require('./view/session_cooldown_reality_check.html');\n\nlet view = generic_view;\n\nexport default class GenericRealityCheckComponent extends BaseComponent {\n static CLASS = 'GenericRealityCheckComponent';\n\n _model = null;\n\n init(params) {\n super.init(params);\n this._model = Model.create(params);\n }\n\n start() {\n\n if (this.serviceFactory.regulationService().isSessionCooldownEnabled()) {\n view = session_cooldown_view;\n }\n\n let bakedHTML = this.bake(view, {\n elapsed_time: this._formatTime(this._model.getElapsedTime()),\n session_balance: this.serviceFactory.currencyService().formatMoney(this._model.getSessionBalance()),\n session_balance_description: this._model.getSessionBalanceDescription(),\n });\n this.setHTML(bakedHTML);\n\n return this;\n }\n\n _formatTime(time) {\n return time.hours.toString().padStart(2, '0') + 'h:' + time.minutes.toString().padStart(2, '0') + 'm';\n }\n}\n","import BaseComponent from \"../../../base/base_component\";\nimport {GermanyResponsibleGamingButtonPlacement} from \"../../../../../common/const/responsible-gaming\";\n\nexport default class GermanyResponsibleGamingIconsController extends BaseComponent {\n static CLASS = 'GermanyResponsibleGamingIconsController';\n _placement:GermanyResponsibleGamingButtonPlacement;\n\n init(params) {\n super.init(params);\n this._placement = params.placement;\n }\n\n start(){\n this.serviceFactory.orbitComponentRenderService().renderGermanyResponsibleGamingButtons(this.getEl(), {placement:this._placement});\n return this;\n }\n}","import BaseRegulation, {BaseRegulationParams} from \"../base_regulation\";\nimport TempAccountMessageRegulationHelper from \"../../helpers/temp_account_message_helper\";\nimport Event from \"../../../../utils/event\";\nimport {SYSTEM_EVENTS, CLIENT_EVENTS} from \"../../../../events/events\";\nimport _ from \"../../../../utils/underscore\";\nimport GenericRealityCheckComponent\n from \"../../../../components/regulation_components/helpers/reality_check/generic_reality_check_component\";\nimport {GNWP_SOURCES} from \"../../../../components/external_links/external_links_consts\";\nimport Store from \"../../../../utils/store\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport GermanyResponsibleGamingIconsController\n from \"../../../../components/regulation_components/germany/germany_responsible_gaming_buttons_controller\";\nimport {GermanyResponsibleGamingButtonPlacement} from \"../../../../../../common/const/responsible-gaming\";\n\ninterface GermanyRegulationParams extends BaseRegulationParams {\n tempAccountMessageHelper?: TempAccountMessageRegulationHelper,\n placement?:GermanyResponsibleGamingButtonPlacement\n}\n\ninterface IAccountData {\n RegulationStatusId: number,\n}\n\nconst RegulationStatusIdMap = {\n ApprovedForRegulation: 0,\n PendingDocuments: 2\n};\n\ninterface IRealityCheckMessageConfig {\n title: string;\n text?: string;\n closeButton: boolean;\n buttons: [\n {\n name: string;\n isClosable: boolean;\n cssClass?: string;\n callback();\n }\n ]\n}\nconst IS_GAME_POPUP_APPROVED_STORAGE_KEY = \"cgp_isGamePopupApproved\";\n\nexport default class GermanyRegulation extends BaseRegulation {\n static CLASS = 'GermanyRegulation';\n _tempAccountMessageHelper: TempAccountMessageRegulationHelper;\n private _isGamePopupShown:boolean = false;\n\n init(params: GermanyRegulationParams) {\n super.init(params);\n this._tempAccountMessageHelper = params.tempAccountMessageHelper || TempAccountMessageRegulationHelper.create({\n serviceFactory: this.serviceFactory\n });\n\n this._subscribe();\n }\n\n public getTempAccountGnwpSource(): string{\n return GNWP_SOURCES.DOCUMENT_UPLOAD;\n }\n\n getResponsibleGamingIconsComponent(params) {\n return GermanyResponsibleGamingIconsController.create(params);\n }\n showResponsibleIcons() {\n return this.serviceFactory.oAuth2Service().isAuthorized();\n }\n\n realityCheckEnabled() {\n return true;\n }\n\n sessionTimerEnabled() {\n return true;\n }\n\n isAnonymousPlayAllowed() : boolean {\n if(!this.serviceFactory.oAuth2Service().isAuthorized()) {\n return false;\n }\n\n return this._getAccountData().RegulationStatusId === RegulationStatusIdMap.ApprovedForRegulation;\n }\n\n showLoginMessage() {\n if (this._IsDocUploadRequired()) {\n return this.serviceFactory.openLinkService().openLink({\n source: GNWP_SOURCES.DOCUMENT_UPLOAD\n }\n );\n }\n }\n\n isGamePopupStepPass() {\n return this._isGamePopupApproved()\n ||\n (\n !this._isGamePopupShown\n &&\n !this._shouldShowGamePopup()\n );\n }\n\n private _IsDocUploadRequired(){\n const accountData = this.serviceFactory.userService().getAccountData();\n return accountData.IsDocUploadRequired;\n }\n\n private _shouldShowGamePopup() {\n if(\n !this.serviceFactory.oAuth2Service().isAuthorized()\n ||\n this._IsDocUploadRequired()\n ||\n this.serviceFactory.oAuth2Service().isLoginFromRegistration()\n ||\n this._isGamePopupApproved()\n ) {\n return false;\n }\n\n return true;\n }\n\n async showGamePopup(): Promise {\n if(!this._shouldShowGamePopup()) {\n return;\n }\n\n let gameType: number | null = null;\n\n try {\n const recentlyPlayedGames = await this.serviceFactory.recentlyPlayedService().getRecentlyPlayedList();\n\n if (_.isEmpty(recentlyPlayedGames)) {\n const aiList = await this.serviceFactory.aiListService().getAIList(1, false);\n if (aiList && aiList.aiGameTypesArray && !_.isEmpty(aiList.aiGameTypesArray)) {\n gameType = aiList.aiGameTypesArray[0];\n }\n } else {\n gameType = recentlyPlayedGames[0];\n }\n } catch (err) {\n this.logger.error('Failed to get game to popup from recently played or from AI recommendation', err);\n }\n\n // Default is Millionare Geneie\n if(!gameType) {\n gameType = 130043;\n }\n\n this._gamePopupShownCallback();\n Event.fire(SYSTEM_EVENTS.GAME_POPUP_SHOW, {\n gameType: gameType,\n gamePopupApprovedCallback: ()=> {this._userApproveGamePopupCallback()}\n });\n }\n\n /**\n * Overrides base class\n * @param sessionTimer\n * @private\n */\n _handleRealityCheckMessage(sessionTimer) {\n const continueGAObj = {\n category: 'reality_check_message',\n action: 'continue_in_lobby'\n };\n\n const languageService = this.serviceFactory.languageService();\n const messageConfig: IRealityCheckMessageConfig = {\n title: languageService.translation('reality_check_title'),\n closeButton: false,\n buttons: [{\n name: languageService.translation('reality_check_continue_btn'),\n cssClass: CyClass(\"cy-reality-check-close-button\"),\n isClosable: true,\n callback: () => {\n this.serviceFactory.gameService().continuePlayCurrentGame();\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, continueGAObj);\n Event.fire(CLIENT_EVENTS.REALITY_CHECK_CLOSED);\n }\n }]\n };\n\n // Add close game button\n if (this.serviceFactory.gameService().isGameRunning()) {\n if (!this._realityCheckShouldBeDisplayedInGame()) {\n return;\n }\n\n continueGAObj.action = 'continue_in_game';\n\n messageConfig.buttons.unshift({\n name: languageService.translation('close_game'),\n cssClass: 'cgp-themes-3rd-cta',\n isClosable: true,\n callback: () => {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'reality_check_message',\n action: 'close_game'\n });\n Event.fire(CLIENT_EVENTS.REALITY_CHECK_CLOSED);\n this.serviceFactory.gameService().closeRunningGame();\n }\n });\n }\n\n this.serviceFactory\n .userService()\n .getRealityCheckData()\n .then(data => {\n Event.fire(CLIENT_EVENTS.REALITY_CHECK_OPENED);\n messageConfig.text = this._getRealityCheckMessageText(data);\n this._openRealityCheckMessage(messageConfig);\n })\n .catch(() => {\n messageConfig.text = this._getRealityCheckMessageText();\n this._openRealityCheckMessage(messageConfig);\n });\n }\n\n _subscribe() {\n Event.on(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, this._initGamePopup,this);\n }\n\n _realityCheckShouldBeDisplayedInGame() {\n return this.serviceFactory\n .gameService()\n .getCurrentRunningGameCompany()\n .shouldShowRealityCheckMessageWhileGameIsOpen();\n }\n\n _openRealityCheckMessage(messageConfig) {\n this.serviceFactory.gameService().stopCurrentGameAutoplay();\n this.serviceFactory.messageManagerService().openMessage(messageConfig);\n }\n\n\n /**\n * Returns the text displayed in the reality check message according to the received (or not) reality check data\n * @param realityCheckData\n * @returns {String}\n * @private\n */\n _getRealityCheckMessageText(realityCheckData?) {\n let componentConfig,\n component;\n\n\n if (_.isNullOrUndefined(realityCheckData)) {\n componentConfig = {\n elapsedTime: this.getCurrentSessionTime(),\n sessionBalance: 0\n }\n } else {\n componentConfig = {\n elapsedTime: this.getCurrentSessionTime(),\n sessionBalance: -1 * realityCheckData.TotalNetLoss\n }\n }\n\n component = GenericRealityCheckComponent.create(componentConfig);\n component.start();\n\n return component.getEl();\n }\n\n shouldHaveBetLimitsPerBrand(): boolean {\n return true;\n }\n\n isSessionCooldownEnabled(): boolean {\n return true;\n }\n\n private _getAccountData(): IAccountData {\n return this.serviceFactory.userService().getAccountData() as IAccountData;\n }\n\n private _isGamePopupApproved(): boolean {\n return Store.get(IS_GAME_POPUP_APPROVED_STORAGE_KEY) || false;\n }\n\n _gamePopupShownCallback() {\n this._isGamePopupShown = true;\n }\n\n _initGamePopup(): void {\n if(!this.serviceFactory.oAuth2Service().isAuthorized()) {\n this._isGamePopupShown = false;\n Store.del(IS_GAME_POPUP_APPROVED_STORAGE_KEY);\n }\n }\n\n _userApproveGamePopupCallback(): void {\n Store.set(IS_GAME_POPUP_APPROVED_STORAGE_KEY, true);\n\n Event.fire(SYSTEM_EVENTS.USER_APPROVE_GAME_POPUP);\n }\n\n dispose() {\n Event.off(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, this._initGamePopup,this);\n }\n}","/**\n * @constant\n * @type {{CLASS_NAME: string, ID: string}}\n */\nconst WELCOME_DEFAULT_PROPERTIES = {\n CLASS_NAME: 'WelcomeComponentController',\n ID: '#cgp-directive-welcome',\n CLASS: '.cgp-directive-welcome'\n};\n\n\nconst LAYOUT_PATTERN = {\n BUTTONS: {\n login: {\n layout: 'buttons'\n },\n loggedin: {\n layout: 'inline'\n }\n },\n FORM: {\n login: {\n layout: 'form'\n },\n loggedin: {\n layout: 'inline'\n }\n },\n 'GAME-PANEL': {\n login: {\n layout: 'buttons'\n },\n loggedin: {\n layout: 'cashier_only'\n }\n }\n};\n\n\nconst LAYOUT_TYPE = {\n DEFAULT_TYPE: 2\n};\n\n\nexport {WELCOME_DEFAULT_PROPERTIES, LAYOUT_PATTERN, LAYOUT_TYPE}","import BaseModelComponent from \"../../base/base_model\";\nimport _ from '../../utils/underscore';\nimport * as WelcomeConst from \"./welcome_const\";\nimport {PRIORITY_LEVEL} from '../../services/overlay_manager/overlay_manager_levels';\n\n/**\n * @constant\n * @type {string}\n */\nconst LOGIN_KEY = 'login',\n LOGGEDIN_KEY = 'loggedin',\n BOTH = 'both';\n\nclass WelcomeModel extends BaseModelComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'WelcomeModel';\n\n\n /**\n * @property\n * @type {{showBalance: string, showRememberme: string}}\n * @private\n */\n _map = {\n showBalance : LOGGEDIN_KEY,\n showRememberme : LOGIN_KEY,\n showRegister : LOGIN_KEY,\n showMenu : LOGGEDIN_KEY,\n showCashier : LOGGEDIN_KEY,\n showForgotUsername: LOGIN_KEY,\n showUsername : LOGGEDIN_KEY,\n showUserBadge : LOGGEDIN_KEY,\n cashierOpenType : BOTH,\n gametype : BOTH,\n gameName : BOTH,\n isReal : BOTH,\n marketingDataFn : LOGIN_KEY,\n postCTAClickedFn : LOGGEDIN_KEY,\n postLoginShowGreeting: LOGGEDIN_KEY,\n preLoginLayoutPC: LOGIN_KEY,\n preLoginLayoutMobile: LOGIN_KEY,\n postLoginLayoutPC: LOGGEDIN_KEY,\n postLoginLayoutMobile: LOGGEDIN_KEY,\n styleSelectors: BOTH\n };\n\n\n /**\n * @param params\n */\n\tinit(params = {}) {\n this\n ._setLayout(params.layout)\n ._setLayoutType(params.layoutType)\n ._setShowBalance(params.showBalance)\n ._setShowRegister(params.showRegister)\n ._setShowMenu(params.showMenu)\n ._setGameType(params.gametype)\n ._setGameName(params.gameName)\n ._setGameIsReal(params.isReal)\n ._setMarketingData(params.marketing)\n ._setPostCTAClickedFn(params.postCtaClicked)\n ._setEnvironment(params.env)\n ._setShowRememberme(params.showRememberme)\n ._setShowCashier(params.showCashier)\n ._setSilentMode(params.silentMode)\n ._setOverlayPriority(params.overlayPriority)\n ._setShowUsername(params.showUsername)\n ._setShowUserBadge(params.showUserBadge)\n ._setCashierOpenType(params.cashierOpenType)\n ._setIsDirective(params.isDirective)\n ._setShowForgotUsername(params.showForgotUsername)\n ._setPostLoginShowGreeting(params.postLoginShowGreeting)\n ._setPreLoginStyleMobile(params.preLoginStyleMobile)\n ._setPreLoginStylePC(params.preLoginStylePc)\n ._setPreLoginLayoutPC(params.preLoginLayoutPc)\n ._setPreLoginLayoutMobile(params.preLoginLayoutMobile)\n ._setPostLoginLayoutPC(params.postLoginLayoutPc)\n ._setPostLoginLayoutMobile(params.postLoginLayoutMobile)\n ._setStyleSelectors(params.styleSelectors);\n }\n\n\n /**\n * Set the layout that will wrap the welcome component.\n *\n * @param layout\n * @returns {WelcomeModel}\n * @private\n */\n _setLayout(layout = '') {\n let _layout = WelcomeConst.LAYOUT_PATTERN[layout.toUpperCase()];\n if (!_layout) {\n _layout = WelcomeConst.LAYOUT_PATTERN.BUTTONS;\n }\n\n this._layout = _layout;\n\n return this;\n }\n\n\n /**\n * Set market data global scope fn string name.\n *\n * @param fnName\n * @returns {WelcomeModel}\n * @private\n */\n _setMarketingData(fnName) {\n if (!_.isString(fnName)) {\n return this;\n }\n\n this._marketingDataFn = fnName;\n return this;\n }\n\n\n /**\n * Set handle function that will be called on balance click\n * @param fnName\n * @returns {WelcomeModel}\n * @private\n */\n _setPostCTAClickedFn(fnName) {\n if (!_.isString(fnName)) {\n return this;\n }\n\n this._postCTAClickedFn = fnName;\n return this;\n }\n\n\n /**\n * Set game type will be valid only for game panel.\n *\n * @param gametype\n * @returns {WelcomeModel}\n * @private\n */\n _setGameType(gametype) {\n if (!_.isNumber(gametype)) {\n return this;\n }\n\n this._gametype = gametype;\n return this;\n }\n\n\n /**\n * Set game name will be valid only for game panel.\n *\n * @param gameName\n * @returns {WelcomeModel}\n * @private\n */\n _setGameName(gameName) {\n if (!_.isString(gameName)) {\n return this;\n }\n\n this._gameName = gameName;\n return this;\n }\n\n\n /**\n * Set game name will be valid only for game panel.\n *\n * @param isReal\n * @returns {WelcomeModel}\n * @private\n */\n _setGameIsReal(isReal) {\n if (!_.isBoolean(isReal)) {\n return this;\n }\n\n this._isReal = isReal;\n return this;\n }\n\n\n /**\n *\n * @param isDirective\n * @returns {WelcomeModel}\n * @private\n */\n _setIsDirective(isDirective) {\n if (!_.isBoolean(isDirective)) {\n this._isDirective = false;\n return this;\n }\n\n this._isDirective = isDirective;\n return this;\n }\n\n\n /**\n * Set the environment the component opened in.\n *\n * @param env\n * @returns {WelcomeModel}\n * @private\n */\n _setEnvironment(env = 'lobby') {\n if (!_.isString(env)) {\n this._environment = 'lobby';\n return this;\n }\n\n this._environment = env;\n return this;\n }\n\n\n /**\n * Define the silent mode of the component.\n *\n * @param silentMode\n * @returns {WelcomeModel}\n * @private\n */\n _setSilentMode(silentMode) {\n if (_.isString(silentMode)) {\n silentMode = 'true' === silentMode;\n }\n\n if (!_.isBoolean(silentMode)) {\n silentMode = false;\n }\n\n this._silentMode = silentMode;\n return this;\n }\n\n\n /**\n *\n * @param cashierOpenType\n * @returns {GameServiceModel}\n * @private\n */\n _setCashierOpenType(cashierOpenType) {\n if (_.isString(cashierOpenType)) {\n cashierOpenType = Number(cashierOpenType);\n\n if (Number.isNaN(cashierOpenType)) {\n cashierOpenType = 0;\n }\n }\n\n if (!_.isNumber(cashierOpenType)) {\n this._cashierOpenType = 0;\n return this;\n }\n\n this._cashierOpenType = cashierOpenType;\n return this;\n }\n\n\n /**\n * Set the component overlay priority.\n *\n * @param overlayPriority\n * @returns {WelcomeModel}\n * @private\n */\n _setOverlayPriority(overlayPriority) {\n this._overlayPriority = overlayPriority && _.isString(overlayPriority) ? overlayPriority : PRIORITY_LEVEL.LOGIN;\n return this;\n }\n\n\n /**\n * Set layout type. (default is 1).\n *\n * @param layoutType\n * @returns {WelcomeModel}\n * @private\n */\n _setLayoutType(layoutType) {\n if (this._isValidLayoutParam(layoutType)) {\n this._layoutType = Number(layoutType);\n return this;\n }\n\n this._layoutType = WelcomeConst.LAYOUT_TYPE.DEFAULT_TYPE;\n return this;\n }\n\n\n /**\n * Set the show balance flag.\n *\n * @param showBalance\n * @returns {WelcomeModel}\n * @private\n */\n _setShowBalance(showBalance = 'true') {\n if (_.isString(showBalance)) {\n if (!this._isValidShowParam(showBalance)) {\n this._showBalance = false;\n return this;\n }\n\n this._showBalance = 'true' === showBalance;\n return this;\n }\n\n if (_.isBoolean(showBalance)) {\n this._showBalance = showBalance;\n return this;\n }\n\n return this;\n }\n\n\n /**\n *\n * @param showUsername\n * @returns {WelcomeModel}\n * @private\n */\n _setShowUsername(showUsername = 'true') {\n if (_.isString(showUsername)) {\n if (!this._isValidShowParam(showUsername)) {\n this._showUsername = false;\n return this;\n }\n\n this._showUsername = 'true' === showUsername;\n return this;\n }\n\n if (_.isBoolean(showUsername)) {\n this._showUsername = showUsername;\n return this;\n }\n\n return this;\n }\n\n\n /**\n * Set if show user badge in mobile\n * @param showUserBadge\n * @returns {WelcomeModel}\n * @private\n */\n _setShowUserBadge(showUserBadge = 'true') {\n this._showUserBadge = _.toBoolean(showUserBadge);\n return this;\n }\n\n\n /**\n * Set the show register flag.\n *\n * @param showRegister\n * @returns {WelcomeModel}\n * @private\n */\n _setShowRegister(showRegister = 'true') {\n if (_.isString(showRegister)) {\n if (!this._isValidShowParam(showRegister)) {\n this._showRegister = false;\n return this;\n }\n\n this._showRegister = 'true' === showRegister;\n return this;\n }\n\n if (_.isBoolean(showRegister)) {\n this._showRegister = showRegister;\n return this;\n }\n\n return this;\n }\n\n /**\n * Set the show menu flag.\n *\n * @param showMenu\n * @returns {WelcomeModel}\n * @private\n */\n _setShowMenu(showMenu = 'false') {\n if (_.isString(showMenu)) {\n if (!this._isValidShowParam(showMenu)) {\n this._showMenu = false;\n return this;\n }\n\n this._showMenu = 'true' === showMenu;\n return this;\n }\n\n if (_.isBoolean(showMenu)) {\n this._showMenu = showMenu;\n return this;\n }\n\n return this;\n }\n\n\n /**\n * Set the remember me flag.\n *\n * @param showRememberme\n * @returns {WelcomeModel}\n * @private\n */\n _setShowRememberme(showRememberme = 'true') {\n if (_.isString(showRememberme)) {\n if (!this._isValidShowParam(showRememberme)) {\n this._showRememberme = false;\n return this;\n }\n\n this._showRememberme = 'true' === showRememberme;\n return this;\n }\n\n if (_.isBoolean(showRememberme)) {\n this._showRememberme = showRememberme;\n return this;\n }\n\n return this;\n }\n\n\n /**\n * Set the show cashier flag.\n *\n * @param showCashier\n * @returns {WelcomeModel}\n * @private\n */\n _setShowCashier(showCashier = 'true') {\n if (_.isString(showCashier)) {\n if (!this._isValidShowParam(showCashier)) {\n this._showCashier = false;\n return this;\n }\n\n this._showCashier = 'true' === showCashier;\n return this;\n }\n\n if (_.isBoolean(showCashier)) {\n this._showCashier = showCashier;\n return this;\n }\n\n return this;\n }\n\n\n /**\n * Set the show forgot flag.\n *\n * @param showForgotUsername\n * @returns {WelcomeModel}\n * @private\n */\n _setShowForgotUsername(showForgotUsername = 'true') {\n if (_.isString(showForgotUsername)) {\n if (!this._isValidShowParam(showForgotUsername)) {\n this._showForgotUsername = false;\n return this;\n }\n\n this._showForgotUsername = 'true' === showForgotUsername;\n return this;\n }\n\n if (_.isBoolean(showForgotUsername)) {\n this._showForgotUsername = showForgotUsername;\n return this;\n }\n\n return this;\n }\n\n\n /**\n * Set the show greeting flag\n * @param postLoginShowGreeting\n * @private\n */\n _setPostLoginShowGreeting(postLoginShowGreeting) {\n this._postLoginShowGreeting = _.toBoolean(postLoginShowGreeting);\n return this;\n }\n\n\n /**\n * Set the pre login style mobile\n *\n * @param preLoginStyleMobile\n * @returns {WelcomeModel}\n * @private\n */\n _setPreLoginStyleMobile(preLoginStyleMobile) {\n this._preLoginStyleMobile = preLoginStyleMobile;\n\n return this;\n }\n\n\n /**\n * Set the pre login style PC\n *\n * @param preLoginStylePC\n * @returns {WelcomeModel}\n * @private\n */\n _setPreLoginStylePC(preLoginStylePC) {\n this._preLoginStylePC = preLoginStylePC;\n\n return this;\n }\n\n\n /**\n * Set overriding for pc pre login layout\n * @param preLoginLayoutPC\n * @returns {WelcomeModel}\n * @private\n */\n _setPreLoginLayoutPC(preLoginLayoutPc) {\n this._preLoginLayoutPC = preLoginLayoutPc;\n return this;\n }\n\n\n /**\n * Set overriding for mobile pre login layout\n * @param preLoginLayoutMobile\n * @returns {WelcomeModel}\n * @private\n */\n _setPreLoginLayoutMobile(preLoginLayoutMobile) {\n this._preLoginLayoutMobile = preLoginLayoutMobile;\n return this;\n }\n\n\n /**\n * Set overriding for pc post layout\n * @param postLoginLayoutPC\n * @returns {WelcomeModel}\n * @private\n */\n _setPostLoginLayoutPC(postLoginLayoutPc) {\n this._postLoginLayoutPC = postLoginLayoutPc;\n return this;\n }\n\n\n /**\n * Set overriding for mobile post layout\n * @param postLoginLayoutMobile\n * @returns {WelcomeModel}\n * @private\n */\n _setPostLoginLayoutMobile(postLoginLayoutMobile) {\n this._postLoginLayoutMobile = postLoginLayoutMobile;\n return this;\n }\n\n /**\n * Set custom selectors to component HTML elements\n * @param styleSelectors\n * @returns {WelcomeModel}\n * @private\n */\n _setStyleSelectors(styleSelectors) {\n this._styleSelectors = styleSelectors;\n return this;\n }\n\n\n /**\n * Validation function for show params attribute\n * To validate that the client data sent is valid.\n *\n * @param showParam\n * @returns {boolean}\n * @private\n */\n _isValidShowParam(showParam) {\n if ('true' === showParam) {\n return true;\n }\n\n if ('false' === showParam) {\n return true;\n }\n\n return false;\n }\n\n\n /**\n * Validation function for layout params attribute\n * To validate that the client data sent is valid.\n *\n * @param layoutType\n * @returns {boolean}\n * @private\n */\n _isValidLayoutParam(layoutType) {\n switch(layoutType) {\n case '1':\n return true;\n case '2':\n return true;\n case '3':\n return true;\n case '4':\n return true;\n default:\n return false;\n }\n }\n\n\n /**\n * Get map by state.\n *\n *\n * @param state\n * @returns {{}}\n */\n getMapByState(state) {\n let map = {};\n\n for(let prop in this._map) {\n if (this._map[prop] === BOTH) {\n map[prop] = this['_' + prop];\n continue;\n }\n\n if (!(this._map[prop] === state)) {\n continue;\n }\n\n map[prop] = this['_' + prop];\n }\n\n return Object.assign({}, map, this.getLayout()[state], {\n env: this._environment,\n layoutType: this.getLayoutType(), // Default buttons\n overlayPriority: this._overlayPriority, // Default popup.\n silentMode: this._silentMode // Default false\n });\n }\n\n\n /**\n *\n * @returns {LAYOUT_PATTERN.DEFAULT|{login, loggedin}|*}\n * @public\n */\n getLayout() {\n return this._layout;\n }\n\n\n /**\n * Get layout type.\n *\n * @returns {*}\n */\n getLayoutType() {\n return this._layoutType;\n }\n\n\n /**\n * Get pre login style PC.\n *\n * @returns {*}\n */\n getPreLoginStylePC() {\n return this._preLoginStylePC;\n }\n\n\n /**\n * Get pre login style mobile.\n *\n * @returns {*}\n */\n getPreLoginStyleMobile() {\n return this._preLoginStyleMobile;\n }\n\n\n /**\n *\n * @returns {*|boolean}\n */\n getIsDirective() {\n return this._isDirective;\n }\n\n\n /**\n *\n * @returns {number|*}\n */\n getCashierOpenType() {\n return this._cashierOpenType;\n }\n\n\n /**\n * Get environment where the component loaded at.\n *\n * @returns {string|*}\n */\n getEnvironment() {\n return this._environment;\n }\n\n\n /**\n * Get market data fn string.\n *\n * @returns {*}\n */\n getMarketingData() {\n return this._marketingDataFn;\n }\n\n\n /**\n * Get external handle function for balance click\n * @returns {*}\n */\n getPostCTAClickedFn() {\n return this._postCTAClickedFn;\n }\n\n\n /**\n * Get if show register button in pre login layout\n * @returns {*}\n */\n getPreLoginShowRegister() {\n return this._preLoginShowRegister;\n }\n\n\n /**\n * Get layout name for pre login PC\n * @returns {*}\n */\n getPreLoginLayoutPC() {\n return this._preLoginLayoutPC;\n }\n\n\n /**\n * Get layout name for pre login Mobile\n * @returns {*}\n */\n getPreLoginLayoutMobile() {\n return this._preLoginLayoutMobile;\n }\n\n\n /**\n * Get layout name for post login PC\n * @returns {*}\n */\n getPostLoginLayoutPC() {\n return this._postLoginLayoutPC;\n }\n\n\n /**\n * Get layout name for post login Mobile\n * @returns {*}\n */\n getPostLoginLayoutMobile() {\n return this._postLoginLayoutMobile;\n }\n\n\n /**\n * Get custom css selectors for HTML elements\n * @returns {*}\n */\n getStyleSelectors() {\n return this._styleSelectors;\n }\n}\nexport default WelcomeModel;","import BaseComponent from '../../base/base_component';\nimport Event from '../../utils/event';\nimport Model from './welcome_model';\nimport * as WelcomeConst from './welcome_const';\nimport LoginButtonsComponentController from '../login_buttons/login_buttons_component_controller';\nimport LoggedinComponentController from '../loggedin/loggedin_component_controller';\nimport DOM from '../../utils/dom';\nimport {CLIENT_EVENTS, SYSTEM_EVENTS} from '../../events/events';\nimport Device from '../../utils/device/device';\nimport * as INTEGRATION from \"../../services/integration/integration_const\";\n\nclass WelcomeComponentController extends BaseComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = WelcomeConst.WELCOME_DEFAULT_PROPERTIES.CLASS_NAME;\n\n\n /**\n * @static\n * @type {string}\n */\n static DIRECTIVE = WelcomeConst.WELCOME_DEFAULT_PROPERTIES.CLASS;\n\n\n /**\n * Root component selector.\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-welcome-component';\n\n\n /**\n * @property\n * @type {*}\n * @private\n */\n _activeComponent = null;\n\n\n /**\n *\n * @type {object|null}\n * @private\n */\n _model = null;\n\n\n /**\n *\n * @param params\n */\n init(params) {\n super.init(params);\n\n // Initializing welcome component model.\n this._model = Model.create(params);\n this._subscribe();\n }\n\n\n /**\n * Start the welcome component behavior.\n *\n *\n * @public\n */\n start() {\n this._state();\n\n // Add relevant classes to the login buttons.\n if (this._getPreLoginConfiguation()) {\n let loginBtn = this.getEl().getElementsByClassName('login_buttons_login')[0];\n let registerBtn = this.getEl().getElementsByClassName('login_buttons_register')[0];\n\n if (Device.isMobileNotTablet()) {\n this._addClassToElement(loginBtn, 'login_buttons_login_button_style');\n this._addClassToElement(registerBtn, 'login_buttons_login_button_style');\n } else {\n this._addClassToElement(registerBtn, 'cgp-themes-main-cta');\n this._addClassToElement(loginBtn, 'cgp-themes-secondary-cta');\n }\n }\n\n return this;\n }\n\n\n /**\n *\n * @returns {*}\n */\n getActiveComponent() {\n return this._activeComponent;\n }\n\n\n /**\n *\n * @private\n */\n _state() {\n if (this.serviceFactory.oAuth2Service().isAuthorized()) {\n this._changeState(LoggedinComponentController, 'loggedin');\n this.logger.debug('The user is authorized so rendering a loggedin componenet over welcome.');\n return;\n }\n\n //this._changeState(LoginComponentController, 'login');\n this._changeState(LoginButtonsComponentController, 'login');\n this.logger.debug('The user is unauthorized so rendering a login componenet over welcome.');\n }\n\n\n /**\n * Setter the directive element\n *\n * @param ComponentController\n * @param state\n * @returns {WelcomeComponentController}\n * @private\n */\n _changeState(ComponentController, state) {\n this.logger.debug('Change state to --> ', ComponentController.CLASS);\n\n if (!ComponentController) {\n this.logger.error('You are trying to get component that not exist or not initialized!');\n return this;\n }\n\n let params = this._model.getMapByState(state);\n let component = ComponentController.create(params);\n let componentEl = component.start().getEl();\n\n this.logger.silly('Ready to set child component over welcome component --> ', component);\n\n this\n ._setActiveComponent(component)\n .render(componentEl);\n\n return this;\n }\n\n\n\n /**\n * return the the pre login configuration.\n *\n * @public\n */\n _getPreLoginConfiguation() {\n let config = {};\n\n switch (this._model.getPreLoginStylePC()) {\n case 'different':\n config.pc = 'cgp-themes-secondary-cta';\n break;\n case 'same':\n default:\n config.pc = 'cgp-themes-main-cta';\n break;\n }\n\n switch (this._model.getPreLoginStyleMobile()) {\n case 'icon':\n config.mobile = 'login_buttons_login_icon_style cgp-themes-icons-login-mobile';\n break;\n case 'button':\n default:\n config.mobile = 'login_buttons_login_button_style';\n break;\n }\n\n return config;\n }\n\n /**\n * Set active component to be over the welcome component.\n *\n *\n * @param component\n * @returns {WelcomeComponentController}\n * @private\n */\n _setActiveComponent(component) {\n if (!component) {\n this.logger.error('Not valid component --> ', component);\n return this;\n }\n\n this._clear();\n this._activeComponent = component;\n\n return this;\n }\n\n _subscribe() {\n Event.on(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, () => {\n this.start();\n });\n Event.on(SYSTEM_EVENTS.ELEMENT_CREATED, (el)=> {\n if (!el) {return;}\n\n if ('cgp-directive-welcome' === el.className) {\n let loginBtn = el.getElementsByClassName('login_buttons_login')[0];\n let registerBtn = el.getElementsByClassName('login_buttons_register')[0];\n\n if (!loginBtn || !registerBtn) {\n return;\n }\n\n let loginBtnDimensions = DOM.getDimensions(loginBtn);\n let registerBtnDimensions = DOM.getDimensions(registerBtn);\n\n if (!loginBtnDimensions || !registerBtnDimensions) {\n return;\n }\n\n let maxWidth, classToChange;\n\n if (loginBtnDimensions.width < registerBtnDimensions.width) {\n maxWidth = registerBtnDimensions.width;\n DOM.injectStyleToDOM(loginBtnDimensions.className + ': { width: ' + maxWidth + '}');\n classToChange = 'login_buttons_login';\n } else if (loginBtnDimensions.width > registerBtnDimensions.width) {\n maxWidth = loginBtnDimensions.width;\n classToChange = 'login_buttons_register';\n } else {\n return;\n }\n\n DOM.injectStyleToDOM('.' + classToChange + '{ width: ' + maxWidth + 'px }');\n }\n });\n\n this.onSystemEvent(SYSTEM_EVENTS.INCOMING_MARKETING_FLOW, action => {\n if (action === INTEGRATION.MARKETING_FLOWS.REGISTER) {\n this._sendAnalytics('SignUp');\n }\n });\n\n this.onSystemEvent(CLIENT_EVENTS.LOGIN_BUTTON_CLICKED, () => {\n this._sendAnalytics('LogIn');\n });\n }\n\n\n _sendAnalytics(label) {\n let analyticObj = {\n category: 'Navigation',\n action: 'Header',\n label: label\n };\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticObj);\n }\n\n\n _addClassToElement(elem, className) {\n if (!className || !elem) {\n return;\n }\n\n elem.className += ' ' + className;\n }\n\n\n /**\n * Clear events from current active component.\n *\n *\n * @returns {*}\n * @private\n */\n _clear() {\n if (!this._activeComponent) {\n return;\n }\n this._activeComponent.shutDown();\n }\n\n shutDown() {\n super.shutDown();\n this._clear();\n }\n}\n\nexport default WelcomeComponentController;","import BaseModelComponent from '../../base/base_model_component';\nimport _ from '../../utils/underscore';\n\nconst CASHIER_ONLY = 'cashier_only';\nconst INLINE = 'inline';\n\nclass LoggedinModel extends BaseModelComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'LoggedinModel';\n\n\n /**\n * @property\n * @type {Object}\n * @private\n */\n _map = {\n gametype : CASHIER_ONLY,\n gameName : CASHIER_ONLY,\n isReal : CASHIER_ONLY,\n postCTAClickedFn: INLINE\n };\n\n\n /**\n * @param params\n */\n init(params = {}) {\n this\n ._setLayout(params.layout)\n ._setLayoutType(params.layoutType)\n ._setOverlayPriority(params.overlayPriority)\n ._setSilentMode(params.silentMode)\n ._setShowBalance(params.showBalance)\n ._setShowMenu(params.showMenu)\n ._setEnvironment(params.env)\n ._setShowUsername(params.showUsername)\n ._setShowUserBadge(params.showUserBadge)\n ._setCashierOpenType(params.cashierOpenType)\n ._setGameType(params.gametype)\n ._setGameName(params.gameName)\n ._setGameIsReal(params.isReal)\n ._setShowCashier(params.showCashier)\n ._setPostLoginShowGreeting(params.postLoginShowGreeting)\n ._setPostCTAClickedFn(params.postCTAClickedFn)\n ._setPostLoginLayoutPC(params.postLoginLayoutPC)\n ._setPostLoginLayoutMobile(params.postLoginLayoutMobile)\n ._setStyleSelectors(params.styleSelectors);\n }\n\n\n /**\n * Get map by state.\n *\n *\n * @param state\n * @returns {{}}\n */\n getMapByState(state) {\n let map = {};\n\n for(let prop in this._map) {\n if (!(this._map[prop] === state)) {\n continue;\n }\n\n map[prop] = this['_' + prop];\n }\n\n return map;\n }\n\n\n /**\n * Set the current layout.\n *\n *\n * @param layout\n * @returns {LoggedinModel}\n * @private\n */\n _setLayout(layout = 'inline') {\n this.layout = layout;\n\n return this;\n }\n\n\n /**\n * Set game type will be valid only for game panel.\n *\n * @param gametype\n * @returns {WelcomeModel}\n * @private\n */\n _setGameType(gametype) {\n if (!_.isNumber(gametype)) {\n return this;\n }\n\n this._gametype = gametype;\n return this;\n }\n\n\n /**\n * Set game name will be valid only for game panel.\n *\n * @param gameName\n * @returns {WelcomeModel}\n * @private\n */\n _setGameName(gameName) {\n if (!_.isString(gameName)) {\n return this;\n }\n\n this._gameName = gameName;\n return this;\n }\n\n\n /**\n * Set game name will be valid only for game panel.\n *\n * @param isReal\n * @returns {WelcomeModel}\n * @private\n */\n _setGameIsReal(isReal) {\n if (!_.isBoolean(isReal)) {\n return this;\n }\n\n this._isReal = isReal;\n return this;\n }\n\n\n /**\n *\n * @param layoutType\n * @returns {LoggedinModel}\n * @private\n */\n _setLayoutType(layoutType) {\n this._layoutType = layoutType;\n return this;\n }\n\n\n /**\n * Set the environment the component opened in.\n *\n * @param env\n * @returns {WelcomeModel}\n * @private\n */\n _setEnvironment(env = 'lobby') {\n if (!_.isString(env)) {\n this._environment = 'lobby';\n return this;\n }\n\n this._environment = env;\n return this;\n }\n\n\n /**\n *\n * @param overlayPriority\n * @returns {LoggedinModel}\n * @private\n */\n _setOverlayPriority(overlayPriority) {\n this._overlayPriority = overlayPriority;\n return this;\n }\n\n\n /**\n *\n * @param silentMode\n * @returns {LoggedinModel}\n * @private\n */\n _setSilentMode(silentMode) {\n this._silentMode = silentMode;\n return this;\n }\n\n\n /**\n *\n * @param cashierOpenType\n * @returns {GameServiceModel}\n * @private\n */\n _setCashierOpenType(cashierOpenType) {\n this._cashierOpenType = cashierOpenType;\n return this;\n }\n\n\n /**\n *\n * @param showBalance\n * @returns {LoggedinModel}\n * @private\n */\n _setShowBalance(showBalance) {\n this._showBalance = showBalance;\n return this;\n }\n\n\n /**\n *\n * @param showUsername\n * @returns {LoggedinModel}\n * @private\n */\n _setShowUsername(showUsername) {\n this._showUsername = showUsername;\n return this;\n }\n\n\n /**\n * @param showUserBadge\n * @returns {LoggedinModel}\n * @private\n */\n _setShowUserBadge(showUserBadge) {\n this._showUserBadge = showUserBadge;\n return this;\n }\n\n\n /**\n *\n * @param showMenu\n * @returns {LoggedinModel}\n * @private\n */\n _setShowMenu(showMenu) {\n this._showMenu = showMenu;\n\n return this;\n }\n\n\n /**\n *\n * @param showCashier\n * @returns {LoggedinModel}\n * @private\n */\n _setShowCashier(showCashier) {\n this._showCashier = showCashier;\n\n return this;\n }\n\n\n /**\n *\n * @param postLoginShowGreeting\n * @returns {LoggedinModel}\n * @private\n */\n _setPostLoginShowGreeting(postLoginShowGreeting) {\n this._postLoginShowGreeting = postLoginShowGreeting;\n return this;\n }\n\n\n /**\n * Set handle function that will be called on balance click\n * @param fnName\n * @returns {LoggedinModel}\n * @private\n */\n _setPostCTAClickedFn(fnName) {\n if (!_.isString(fnName)) {\n return this;\n }\n\n this._postCTAClickedFn = fnName;\n return this;\n }\n\n\n /**\n * Set overriding for pc pre login layout\n * @param postLoginLayoutPC\n * @returns {LoggedinModel}\n * @private\n */\n _setPostLoginLayoutPC(postLoginLayoutPC) {\n this._postLoginLayoutPC = postLoginLayoutPC;\n return this;\n }\n\n\n /**\n * Set overriding for mobile pre login layout\n * @param preLoginLayoutPC\n * @returns {LoggedinModel}\n * @private\n */\n _setPostLoginLayoutMobile(postLoginLayoutMobile) {\n this._postLoginLayoutMobile = postLoginLayoutMobile;\n return this;\n }\n\n\n /**\n * Set custom selectors to component HTML elements\n * @param styleSelectors\n * @returns {WelcomeModel}\n * @private\n */\n _setStyleSelectors(styleSelectors) {\n this._styleSelectors = styleSelectors;\n return this;\n }\n\n\n /**\n * Get the current component layout.\n *\n * @returns {*}\n * @public\n */\n getLayout() {\n return this.layout;\n }\n\n\n /**\n *\n * @returns {*}\n */\n getLayoutType() {\n return this._layoutType\n }\n\n\n /**\n *\n * @returns {*}\n */\n getShowBalance() {\n return this._showBalance;\n }\n\n\n /**\n *\n * @returns {*}\n */\n getShowUsername() {\n return this._showUsername;\n }\n\n\n /**\n *\n * @returns {*}\n */\n getShowMenu() {\n return this._showMenu;\n }\n\n\n /**\n *\n * @returns {*}\n */\n getShowCashier() {\n return this._showCashier;\n }\n\n\n getPostLoginShowGreeting() {\n return this._postLoginShowGreeting;\n }\n\n\n /**\n *\n * @returns {*}\n */\n getShowUserBadge() {\n return this._showUserBadge;\n }\n\n\n /**\n *\n * @returns {*}\n */\n getOverlayPriority() {\n return this._overlayPriority;\n }\n\n\n /**\n *\n * @returns {*}\n */\n getSilentMode() {\n return this._silentMode;\n }\n\n\n /**\n *\n * @returns {number|*}\n */\n getCashierOpenType() {\n return this._cashierOpenType;\n }\n\n\n /**\n * Get environment where the component loaded at.\n *\n * @returns {string|*}\n */\n getEnvironment() {\n return this._environment;\n }\n\n\n /**\n * Get external handle function for balance click\n * @returns {*}\n */\n getPostCTAClickedFn() {\n return this._postCTAClickedFn;\n }\n\n\n /**\n * Get layout name for pre login PC\n * @returns {*}\n */\n getPostLoginLayoutPC() {\n return this._postLoginLayoutPC;\n }\n\n\n /**\n * Get layout name for pre login Mobile\n * @returns {*}\n */\n getPostLoginLayoutMobile() {\n return this._postLoginLayoutMobile;\n }\n\n\n /**\n * Get custom css selectors for HTML elements\n * @returns {*}\n */\n getStyleSelectors() {\n return this._styleSelectors;\n }\n}\nexport default LoggedinModel;","/**\n * @constant\n * @type {{BALANCE: string, USER_NAME: string}}\n */\nconst LOGGEDIN_BINDING = {\n BALANCE: '#wallet',\n USER_NAME: '#username'\n};\n\n\n/**\n * @constant\n * @type {{LOGGEDIN_CGP: string, LOGOUT_BUTTON: string}}\n */\nconst LOGGEDIN_EVENTS_SELECTORS_ID = {\n LOGGEDIN_CGP: '#cgp_loggedin',\n LOGOUT_BUTTON: '#logout_button'\n};\n\nconst POST_LOGIN_LAYOUT_CLASSES = {\n PC: {\n CASHIER: 'cgp-loggedin-pc-cashier-layout',\n GREETING: 'cgp-loggedin-pc-greeting-layout',\n DEFAULT: 'cgp-loggedin-pc-default-layout'\n },\n MOBILE: {\n CASHIER: 'cgp-loggedin-mobile-cashier-layout',\n GREETING: 'cgp-loggedin-mobile-greeting-layout',\n FULL: 'cgp-loggedin-mobile-full-layout',\n DEFAULT: 'cgp-loggedin-mobile-default-layout'\n }\n}\n\n\n\nexport {LOGGEDIN_BINDING, LOGGEDIN_EVENTS_SELECTORS_ID, POST_LOGIN_LAYOUT_CLASSES};\n\n\n","import BaseComponent from '../../base/base_component';\nimport Model from '../../components/loggedin/loggedin_model';\nimport _ from '../../utils/underscore';\nimport DOM from '../../utils/dom';\nimport * as LoggedinConsts from './loggedin_const';\n\n\nclass LoggedinComponentController extends BaseComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'LoggedinComponentController';\n\n\n /**\n * @static\n * @type {string}\n */\n static DIRECTIVE = '#cgp_loggedin'; // LOGGEDIN_EVENTS_SELECTORS_ID.LOGGEDIN_CGP;\n\n\n /**\n * Root component selector.\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-loggedin-component';\n\n\n /**\n * @property\n * @type {Object}\n * @private\n */\n _layoutsContext = require.context('../../components/loggedin', true, /^.*(layout)\\.js$/);\n\n\n /**\n * @property\n * @type {Array}\n * @private\n */\n _layouts = [];\n\n\n /**\n * @property\n * @type {*}\n * @private\n */\n _activeLayout = null;\n\n\n /**\n * @property\n * @type {object|null}\n * @private\n */\n _model = null;\n\n\n /**\n * @param params\n */\n init(params) {\n super.init(params);\n this._model = Model.create(params);\n }\n\n\n /**\n * Start the component view.\n *\n * @returns {LoginComponentController}\n * @public\n */\n start() {\n // init the component layouts\n this._initLayouts();\n let fnLayout = this._layouts.find(layout => this._isLayoutExist(layout.default.layoutName));\n\n if (!fnLayout) {\n this.logger.error('Loggedin component layout not set.');\n throw new Error();\n }\n\n this._changeLayout(fnLayout.default);\n\n return this;\n }\n\n\n /**\n * Set class define layout visual behaviour\n * @private\n */\n _setLayoutClass() {\n if (this._model.getPostLoginLayoutPC()) {\n DOM.addClass(this._activeLayout.getEl(), LoggedinConsts.POST_LOGIN_LAYOUT_CLASSES.PC[this._model.getPostLoginLayoutPC().toUpperCase()]);\n } else {\n DOM.addClass(this._activeLayout.getEl(), LoggedinConsts.POST_LOGIN_LAYOUT_CLASSES.PC.DEFAULT);\n }\n if (this._model.getPostLoginLayoutMobile()) {\n DOM.addClass(this._activeLayout.getEl(), LoggedinConsts.POST_LOGIN_LAYOUT_CLASSES.MOBILE[this._model.getPostLoginLayoutMobile().toUpperCase()]);\n } else {\n DOM.addClass(this._activeLayout.getEl(), LoggedinConsts.POST_LOGIN_LAYOUT_CLASSES.MOBILE.DEFAULT);\n }\n\n }\n\n\n /**\n *\n * @returns {*}\n * @public\n */\n getActiveLayout() {\n return this._activeLayout;\n }\n\n\n /**\n * @returns {LoginComponentController}\n * @private\n */\n _initLayouts() {\n // Get array of layouts.\n this._layouts = this._getLayoutsContext();\n\n return this;\n }\n\n\n /**\n * @returns {*}\n * @private\n */\n _getLayoutsContext() {\n if (!this._layoutsContext) {\n return [];\n }\n\n return this._layoutsContext.keys().map(this._layoutsContext);\n }\n\n\n /**\n * @param layoutName\n * @returns {boolean}\n * @private\n */\n _isLayoutExist(layoutName) {\n return layoutName === this._model.getLayout();\n }\n\n\n /**\n * Get environment\n *\n * @returns {*}\n */\n getEnvironment() {\n return this._model.getEnvironment();\n }\n\n\n /**\n * Change layout.\n *\n * @param layout\n * @private\n */\n _changeLayout(layout) {\n if (!_.isFunction(layout)) {\n this.logger.error('Layout must be an object type! --> ', typeof layout);\n throw new Error();\n }\n\n // There is active layout?\n if (this._activeLayout) {\n this.clear();\n }\n\n // Create layout instance.\n let layoutInstance = layout.create(Object.assign({}, {\n stepParent : this,\n layoutType : this._model.getLayoutType(),\n overlayPriority : this._model.getOverlayPriority(),\n silentMode : this._model.getSilentMode(),\n showCashier : this._model.getShowCashier(),\n showMenu : this._model.getShowMenu(),\n showBalance : this._model.getShowBalance(),\n showUsername : this._model.getShowUsername(),\n cashierOpenType : this._model.getCashierOpenType(),\n showGreeting : this._model.getPostLoginShowGreeting(),\n showUserBadge : this._model.getShowUserBadge(),\n styleSelectors : this.getStyleSelectors()\n },\n this._model.getMapByState(this._model.getLayout()))).start();\n // Set an new active layout.\n this._activeLayout = layoutInstance;\n\n // Get component global events to clear at the end of the component life cycle.\n this._systemEventsSubscriptions = this._systemEventsSubscriptions.concat(this._activeLayout._systemEventsSubscriptions);\n\n this._setLayoutClass();\n // Render layout.\n this.render(layoutInstance.getEl());\n }\n\n\n /**\n * @private\n */\n clear() {\n if (!this._activeLayout) {\n return;\n }\n }\n}\n\nexport default LoggedinComponentController;","/**\n * Created by andreyna on 6/13/2016.\n */\nimport BaseModelComponent from '../../base/base_model_component';\nimport { ILocalizedGameInfo } from '../../services/games_information/games_information_service_interface';\nimport FPGamesComponentController from '../free_play/games/fp_games_component_controller';\n\nexport interface IButtonInfo {\n textKey: string;\n classList: string[];\n onClick: () => void;\n}\n\nexport default class GameItemComponentModel extends BaseModelComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'GameItemComponentModel';\n private _gameInfo: ILocalizedGameInfo;\n private _containerRef: FPGamesComponentController;\n private _onClickFn: Function;\n private _fpType: string;\n private _itemClass: string;\n private _playBtnText: string;\n private _buttons: IButtonInfo[];\n private _show: boolean;\n private _jackpotRef: any;\n\n\n /**\n *\n * @param params\n */\n init(params: any = {}) {\n super.init(params);\n this\n .setShow(params.show)\n ._setGame(params.gameData)\n ._setOnClickHandler(params.onClicked)\n ._setFPType(params.fpType)\n ._setItemClass(params.itemClass)\n ._setPlayBtnText(params.playBtnText)\n ._setButtons(params.buttons)\n ._setContainerRef(params.container);\n }\n\n setShow(show = true) {\n this._show = show;\n return this;\n }\n\n /**\n * Set voucher game data\n * @param game\n * @returns {GameItemComponentModel}\n * @private\n */\n private _setGame(gameData) {\n this._gameInfo = gameData;\n return this;\n }\n\n\n /**\n * Set reference for games container object\n * @param container\n * @returns {GameItemComponentModel}\n * @private\n */\n private _setContainerRef(container) {\n this._containerRef = container;\n return this;\n }\n\n\n /**\n * Set handle function for game item click event\n * @param onClicked\n * @returns {GameItemComponentModel}\n * @private\n */\n private _setOnClickHandler(onClicked) {\n this._onClickFn = onClicked;\n return this;\n }\n\n\n /**\n * Set FreePlay type\n * @param fpThumb\n * @returns {GameItemComponentModel}\n * @private\n */\n private _setFPType(fpType) {\n this._fpType = fpType;\n return this;\n }\n\n\n /**\n * Set Game item container class\n * @param itemClass\n * @returns {GameItemComponentModel}\n * @private\n */\n private _setItemClass(itemClass) {\n this._itemClass = itemClass;\n return this;\n }\n\n\n /**\n * Set text for Play button\n * @param playBtnText\n * @returns {GameItemComponentModel}\n * @private\n */\n private _setPlayBtnText(playBtnText = 'game_item_play_btn') {\n this._playBtnText = playBtnText;\n return this;\n }\n\n\n /**\n * Set custom buttons\n * @param buttons\n * @returns {GameItemComponentModel}\n * @private\n */\n private _setButtons(buttons) {\n this._buttons = buttons;\n return this;\n }\n\n\n getShow() {\n return this._show;\n }\n\n\n /**\n * Get game data\n * @returns {*}\n */\n getGame() {\n return this._gameInfo;\n }\n\n\n /**\n * Set reference to jackpot component\n * @param jackpotRef\n * @returns {GameItemComponentModel}\n */\n setJackpotRef(jackpotRef) {\n this._jackpotRef = jackpotRef;\n return this;\n }\n\n\n /**\n *\n */\n getContainerRef() {\n return this._containerRef;\n }\n\n\n /**\n * Get handler function for game click event\n * @returns {*}\n */\n getOnClickHandler() {\n return this._onClickFn;\n }\n\n\n /**\n *\n * @returns {*}\n */\n getFPType() {\n return this._fpType;\n }\n\n\n /**\n * Return game item container custom class\n * @param itemClass\n * @returns {*}\n */\n getItemClass() {\n return this._itemClass;\n }\n\n\n /**\n * Get play button text\n * @returns {*}\n */\n getPlayBtnText() {\n return this._playBtnText;\n }\n\n\n /**\n * Get custom buttons options\n * @returns {*}\n */\n getButtons() {\n return this._buttons;\n }\n}\n","/**\n * Created by andreyna on 11/09/2017.\n */\nexport const GAME_ITEM_CLASSES = {\n GAME_THUMBNAIL_CLASS: 'cgp-game-item-thumbnail',\n GAME_JACKPOT_CONTAINER_CLASS: 'cgp-game-item-jackpot-container',\n GAME_ITEM_CONTAINER: 'cgp-game-item-container',\n GAME_ITEM_PLAY_BTN: 'cgp-game-play-btn',\n GAME_ITEM_BTN_FONT: 'cgp-theme-property-font-type-4',\n GAME_ITEM_BTN_AREA: 'cgp-game-item-buttons-area',\n GAME_ITEM_DEFAULT_BTN_CLASS: 'cgp-themes-3rd-cta'\n};\n","/**\n * Created by andreyna on 6/21/2017.\n */\nimport BaseComponent from '../../base/base_component';\nimport GameItemComponentModel, { IButtonInfo } from './game_item_component_model';\nimport { GAME_ITEM_CLASSES } from './game_item_component_consts';\nimport { FP_VOUCHER_ICONS_CLASSES } from '../free_play/voucher/free_play_voucher_consts';\nimport _ from '../../utils/underscore';\nimport DOM from '../../utils/dom';\nimport Directive from '../../core/directive';\nimport { USER_EVENTS } from '../../events/events';\nimport { ILocalizedGameInfo } from '../../services/games_information/games_information_service_interface';\n\nconst GAME_ITEM_VIEW = require('./view/game_item.html');\n\nexport default class GameItemComponentController extends BaseComponent {\n\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'GameItemComponentController';\n\n /**\n * Root component selector.\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-game-item-component';\n\n _model: GameItemComponentModel;\n\n private _gameDefaultIcon: string;\n\n init(params) {\n super.init(params);\n this._model = GameItemComponentModel.create(params);\n this._gameDefaultIcon = this.serviceFactory.gameService().getGameDefaultIcon() || '';\n }\n\n\n /**\n * Start bake the component\n */\n start() {\n const gameData = this._model.getGame();\n this._bakeGameItem(gameData)\n ._injectButtons()\n ._setGameThumbnail(gameData)\n ._injectJackpot(gameData);\n\n this.updateDisplayState(this._model.getShow());\n return this;\n }\n\n updateDisplayState(display: boolean) {\n this._model.setShow(display);\n\n if (!display) {\n DOM.addClass(this.getEl(), 'cgp-hide');\n } else {\n DOM.removeClass(this.getEl(), 'cgp-hide');\n }\n }\n\n\n /**\n * Bake voucher game HTML\n * @private\n */\n private _bakeGameItem(gameData) {\n let cssClasses = this._model.getItemClass();\n if (this._model.getShow()) {\n cssClasses += \" cgp-hide\";\n }\n\n const gameItemHTML = this.bake(GAME_ITEM_VIEW,\n Object.assign({}, {\n gameId: gameData.gameTypeID,\n gameTitle: gameData.title,\n itemClass: cssClasses,\n },\n this._getFreePlayBindingProps())\n );\n this.setHTML(gameItemHTML);\n return this;\n }\n\n\n private _injectButtons() {\n const buttons = this._model.getButtons();\n if (!buttons || !_.isArray(buttons) || buttons.length === 0) {\n // inject default button\n this._injectButton({\n textKey: this._model.getPlayBtnText(),\n classList: [GAME_ITEM_CLASSES.GAME_ITEM_DEFAULT_BTN_CLASS],\n onClick: () => {\n this._model.getOnClickHandler().call(this);\n }\n });\n } else {\n buttons.forEach((btnOptions) => {\n this._injectButton(btnOptions);\n });\n }\n\n return this;\n }\n\n\n private _injectButton(btnOptions: IButtonInfo) {\n const btnAreaEl = this.getDOMElementByClassName(GAME_ITEM_CLASSES.GAME_ITEM_BTN_AREA);\n const btnEl = DOM.createElement('button', this.serviceFactory.languageService().translation(btnOptions.textKey));\n let classes = [GAME_ITEM_CLASSES.GAME_ITEM_PLAY_BTN, GAME_ITEM_CLASSES.GAME_ITEM_BTN_FONT];\n if (btnOptions.classList) {\n classes = classes.concat(btnOptions.classList);\n }\n\n DOM.addClass(btnEl, classes);\n DOM.append(btnAreaEl, btnEl);\n if (_.isFunction(btnOptions.onClick)) {\n this.onDOMEvent(btnEl, USER_EVENTS.ON_CLICK, () => {\n btnOptions.onClick.call(this);\n });\n }\n }\n\n\n /**\n * Get Binding properties for Free Play game\n * @returns {{}}\n * @private\n */\n private _getFreePlayBindingProps() {\n let props = {};\n const fpType = this._model.getFPType();\n if (fpType) {\n props = {\n fpThumbClass: FP_VOUCHER_ICONS_CLASSES[fpType]\n };\n }\n return props;\n }\n\n\n /**\n * Append game jackpot component to the game item\n * @private\n */\n private _injectJackpot(gameData: ILocalizedGameInfo) {\n const jackpotComponent = Directive.generate({\n directiveName: 'game_jackpot',\n start: false,\n props: {\n gametypeid: gameData.gameType\n }\n });\n this._model.setJackpotRef(jackpotComponent);\n jackpotComponent.start();\n DOM.append(this.getDOMElementByClassName(GAME_ITEM_CLASSES.GAME_JACKPOT_CONTAINER_CLASS), jackpotComponent.getEl());\n return this;\n }\n\n\n /**\n * Load game thumbnail\n * @param gameData\n * @returns {Promise|*|Promise.}\n * @private\n */\n private _setGameThumbnail(gameData) {\n const img = DOM.createElement('div');\n DOM.addClass(img, 'cgp-game-item-thumbnail');\n DOM.addAttribute(img, 'style',\n 'background-image:url(' + this._getResolvedGameImagePath(gameData) + ')');\n DOM.append(this.getDOMElementByClassName('cgp-game-item-img-wrapper'), img);\n return this;\n }\n\n private _getResolvedGameImagePath(gameData) {\n return this.serviceFactory.gameService().resolveGameImagePath(gameData.images && gameData.images.icon);\n }\n\n\n shutDown() {\n super.shutDown();\n this.logger.debug('Game item component shut down');\n }\n}\n","import BaseOptionsModel from '../base_options_model';\n\nclass ReminderSettingsModel extends BaseOptionsModel {\n\n init(params) {\n this._title = 'App Settings';\n this._initOptions(params)\n }\n\n\n _initOptions(params = {}) {\n this._options = params;\n }\n\n\n /**\n * set / update selected interval in the model\n * if there is no such interval, this interval will not be set\n *\n * @param {string} value\n * @returns\n */\n setOptions(options) {\n let isStored = false;\n if (options) {\n this._options.reminder = options.reminder;\n isStored = true;\n }\n\n return isStored;\n }\n\n\n /**\n * @param {string} value\n * @returns\n */\n getOptions() {\n return {reminder: this._options.reminder}\n }\n}\n\nexport default ReminderSettingsModel\n\n","/**\n * Created by andreyna on 6/8/2016.\n */\nconst REMINDER_SETTINGS_SELECTORS = {\n REMINDER_OPTIONS: '.cgp-reminder-select',\n CLOSE_BUTTON: '.cgp-reminder-cancel-btn',\n SAVE_BUTTON: '.cgp-reminder-save-btn',\n MORE_INFO_CONTAINER: '.cgp-reminder-text',\n MORE_INFO_SWITCH: '.cgp-more-info-title',\n REMINDER_INFO: '.cgp-reminder-info',\n REMINDER_INFO_MOBILE: '.cgp-mobile:not(.cgp-tablet) .cgp-reminder-info'\n\n};\n\nconst REMINDER_MORE_INFO_GAP = 25; // 15px - gap between button area top + 10px - info element margin\n\nexport {REMINDER_SETTINGS_SELECTORS, REMINDER_MORE_INFO_GAP};","import Model from './reminder_settings_model';\nimport DOM from '../../../../utils/dom';\nimport Store from '../../../../utils/store';\nimport BaseOptionsComponentController from '../base_options_component_controller';\nimport {REMINDER_SETTINGS_SELECTORS} from './reminder_settings_const';\nimport Event from '../../../../utils/event';\nimport {SYSTEM_EVENTS, USER_EVENTS} from '../../../../events/events';\nimport Strings from '../../../../utils/strings';\nimport _ from '../../../../utils/underscore';\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\n// Views\nlet options = require('./view/reminder_settings.html');\nconst REMINDER_STORAGE_KEY = 'reminder';\n\n\nconst ELASTIC_ACTION_NAMES = {\n SAVE: 'Save',\n CANCEL: 'Cancel',\n CLOSE: 'Close',\n MOREINFO: 'MoreInfo'\n}\n\nclass ReminderSettingsController extends BaseOptionsComponentController {\n\n static CLASS = 'ReminderSettingsController';\n\n /**\n * @property\n * @type {object|null}\n * @private\n */\n _model = null;\n\n /**\n *`\n * @param params\n */\n init(params) {\n super.init();\n this._model = Model.create(this._initModel(params));\n }\n\n\n /**\n * Default root cgp component selector.\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-component-reminder';\n\n\n /**\n * Get reminder key for specific user cid\n *\n * @returns {*}\n * @private\n */\n _getReminderKey() {\n let key = null;\n // user service data\n let accountData = this.serviceFactory.userService().getAccountData();\n if (_.isUndefined(accountData) || _.isNull(accountData)) {\n return null;\n }\n key = REMINDER_STORAGE_KEY + '_' + accountData.Cid;\n\n return key;\n }\n\n\n /**\n * initialize model object\n *\n * @private\n * @returns {}\n */\n _initModel() {\n let optionsObj = {};\n let intervals = this._getIntervals();\n\n if (intervals && 0 < intervals.length) {\n const storedReminderValue = Store.get(this._getReminderKey())\n if(storedReminderValue) {\n const reminderIntervalAsNumber = Number(storedReminderValue);\n if(_.isNumber(reminderIntervalAsNumber)) {\n optionsObj.reminder = TimeSpan.fromMinutes(reminderIntervalAsNumber);\n } else {\n optionsObj.reminder = TimeSpan.parse(storedReminderValue);\n }\n\n } else {\n optionsObj.reminder = TimeSpan.fromMinutes(0);\n }\n\n }\n\n return optionsObj;\n }\n\n /**\n * Start the component view.\n *\n *\n * @returns {ReminderSettingsController}\n * @public\n */\n start() {\n // init the component layouts\n let bakedHTML = this.bake(options);\n this.setHTML(bakedHTML)\n ._bindOptions()\n ._subscribeDOMEvents();\n\n return this;\n }\n\n\n /**\n *\n */\n off() {\n if (Store.del(this._getReminderKey())) {\n this._model.setOptions({reminder: 0});\n }\n }\n\n set(value) {\n let intervals = this._getIntervals()\n // check if the interval is in the list of accepted values\n if (intervals.find(index => index === value) !== undefined) {\n // check whether value is OFF\n if (value === intervals[0]) {\n // remove reminder from local storage\n this.off();\n } else {\n // update or set new reminder\n if (this._getReminderKey()) {\n if (Store.set(this._getReminderKey(), TimeSpan.fromMinutes(value).toString())) {\n this._model.setOptions({reminder: value});\n }\n }\n }\n }\n }\n\n\n /**\n * Get intervals values for regulation\n * @returns {Array}\n * @public\n */\n _getIntervals() {\n let intervals = this.serviceFactory.regulationService().getReminderIntervals();\n\n return intervals;\n }\n\n\n /**\n * Bind array of intervals to selected DDL into the view\n * define selected change events.\n * @returns {*}\n * @private\n */\n _bindOptions() {\n let reminderIntervals = this._getIntervals();\n if (!reminderIntervals || 0 === reminderIntervals.length) {\n return this;\n }\n\n let ddlReminder = this.getEl().querySelectorAll(REMINDER_SETTINGS_SELECTORS.REMINDER_OPTIONS);\n\n if (0 < !ddlReminder && ddlReminder) {\n return this;\n }\n\n let reminderOptions = reminderIntervals.map(optionItem => {\n let el = DOM.createElement('option');\n el.value = optionItem;\n DOM.addClass(el, 'cgp-themes-main-text');\n DOM.addClass(el, 'cgp-theme-property-background-color-base03');\n\n let languageService = this.serviceFactory.languageService();\n if (0 < optionItem) {\n el.text = new Strings(languageService.translation('reminder_cta_minute')).injectIntoCurly({reminderValue: optionItem});\n } else {\n el.text = languageService.translation('reminder_off_option');\n }\n\n return el;\n });\n\n reminderOptions.forEach(el => {\n DOM.append(ddlReminder[0], el);\n });\n\n // init selected\n let selectedReminder = this._model.getOptions().reminder;\n if (selectedReminder) {\n ddlReminder[0].selectedIndex = reminderIntervals.findIndex(index => index === selectedReminder.totalMinutes);\n }\n return this;\n }\n\n\n /**\n * Subscribe handlers for DOM events\n * @private\n */\n _subscribeDOMEvents() {\n this.onChildElementEvent(REMINDER_SETTINGS_SELECTORS.MORE_INFO_SWITCH, USER_EVENTS.ON_CLICK, () => {\n let reminderText = DOM.$$('.cgp-reminder-text');\n DOM.toggleClass(reminderText[0], 'cgp-info-open');\n let reminderInfo = this.getEl().querySelectorAll(REMINDER_SETTINGS_SELECTORS.REMINDER_INFO)[0];\n let display = window.getComputedStyle(reminderInfo).display;\n let openType = 'block' === display ? 'Open' : 'Close';\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Client_RealityCheck_Set',\n action: 'MoreInfo',\n label: openType\n });\n this._sendElasticData(ELASTIC_ACTION_NAMES.MOREINFO, openType);\n });\n\n return this;\n }\n\n _sendElasticData(action, value = null) {\n let eventData = {\n CGPEventCategory: 'Client_RealityCheck_Detail',\n CGPEventAction: action,\n RegulationID: this.serviceFactory.regulationService().getRegulationCode()\n };\n\n if (action === ELASTIC_ACTION_NAMES.SAVE) {\n eventData.CGPEventValue = value + '';\n eventData.CGPEventValueAsNumber = value;\n } else if (action === ELASTIC_ACTION_NAMES.MOREINFO) {\n eventData.CGPEventValue = value;\n }\n\n let logger = this.serviceFactory.structuredLoggingService()\n .getLogger(eventData)\n .setTarget('casino-realityCheck');\n\n logger.info();\n }\n\n /**\n * Save reminder value in local storage\n *\n *\n * @param {object} event\n * @returns\n * @private\n */\n _onSaveReminder(event) {\n let value = this._getReminderValue(event);\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Client_RealityCheck_Set',\n action: 'TimeIntervalDropdown',\n label: value * 60 + ''\n });\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Client_RealityCheck_Set',\n action: 'Save'\n });\n this._sendElasticData(ELASTIC_ACTION_NAMES.SAVE, value);\n\n this.set(value);\n }\n\n\n /**\n * Wrapper to close component overlay\n * @returns\n * @private\n */\n _onCancelBtnClicked() {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {category: 'Client_RealityCheck_Set', action: 'Cancel'});\n this._sendElasticData(ELASTIC_ACTION_NAMES.CANCEL);\n }\n\n\n /**\n * Get title language key\n * @returns {string}\n * @private\n */\n _getTitleKey() {\n return 'reminder_title';\n }\n\n /**\n * Get custom css class for component\n * @returns {*[]}\n * @private\n */\n _getCustomCSSClassList() {\n return super._getCustomCSSClassList().concat(['cgp-options-reminder']);\n }\n\n\n /**\n *\n * @returns {*}\n * @private\n */\n _getReminderValue() {\n let reminder = this.getEl().querySelectorAll(REMINDER_SETTINGS_SELECTORS.REMINDER_OPTIONS)[0],\n value = Number(reminder[reminder.selectedIndex].value);\n\n return value;\n }\n\n\n /**\n * Handle overlay close button click\n */\n onCloseBtnClicked() {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Client_RealityCheck_Set',\n action: 'CloseClick'\n });\n this._sendElasticData(ELASTIC_ACTION_NAMES.CLOSE);\n }\n\n\n /**\n * Handle after component open action\n * @protected\n */\n onComponentOpened() {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {category: 'Client_RealityCheck_Set', action: 'Open'});\n }\n\n\n /**\n * Get buttons configuration to MDP\n * @returns {Array}\n * @privatee\n */\n _getButtons() {\n let buttons = [\n {\n name: this.serviceFactory.languageService().translation('reminder_cta_cancel'),\n type: 'secondary',\n isClosable: true,\n callback: this._onCancelBtnClicked.bind(this),\n forceAnalytic: true\n },\n {\n name: this.serviceFactory.languageService().translation('reminder_cta_save'),\n type: 'main',\n isClosable: true,\n callback: (event) => {\n this._onSaveReminder(event);\n },\n forceAnalytic: true\n }\n ];\n\n return buttons;\n }\n\n\n /**\n * Callback fired when component is completly removed from DOM\n * @protected\n */\n onComponentClosed() {\n super.onComponentClosed();\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {category: 'Client_RealityCheck_Set', action: 'Close'});\n }\n\n /**\n * Send analytics message\n */\n reportAnalytics() {\n let reminderOptions = this.getOptions();\n const reminderIntervalInSeconds = (reminderOptions.reminder && reminderOptions.reminder.totalSeconds) || 0;\n if (reminderIntervalInSeconds !== 0) {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Client_RealityCheck_Set',\n action: 'TimeSetInLogin',\n label: reminderIntervalInSeconds // time in seconds\n });\n }\n }\n\n}\n\n\nexport default ReminderSettingsController;\n","import BaseModel from '../../../../base/base_model';\nimport {KEY_NAME} from '../../native/native_const';\nimport Store from '../../../../utils/store';\nimport _ from '../../../../utils/underscore';\n\nclass HybridInfoModel extends BaseModel {\n\n static CLASS = 'HybridInfoModel';\n\n _debugMode = false;\n _autologinToken = null;\n _sessionTimerOffset = null;\n _reload = false;\n _url = '';\n _urlType = '';\n _ListInfo = [];\n\n\n /*\n * init the params to be an json object.\n * @params is string from web.config\n * @params is json object from html\n */\n init(params) {\n super.init(params);\n }\n\n updateData(data) {\n this._debugMode = KEY_NAME.DEBUG === data[KEY_NAME.ACTION];\n this._autologinToken = data[KEY_NAME.AUTOLOGIN];\n this._sessionTimerOffset = data[KEY_NAME.SESSIONTIMER];\n this._reload = data[KEY_NAME.RELOAD];\n this._url = data[KEY_NAME.URL];\n }\n\n getAutologinToken() {\n return this._autologinToken;\n }\n\n getSessionTimerOffset() {\n try {\n return parseInt(this._sessionTimerOffset);\n } catch(err) {\n return null;\n }\n }\n\n getUrl() {\n return this._url;\n }\n\n getReload() {\n return this._reload;\n }\n\n isDebugMode() {\n return this._debugMode;\n }\n\n checkData(data) {\n if (data[KEY_NAME.DATA] !== undefined) {\n return data;\n }\n\n data = _.safeJSONandDecode(data);\n return data[KEY_NAME.DATA];\n }\n\n updateAllInfo(data) {\n\n data = this.checkData(data);\n\n if (null === data) {\n return;\n }\n\n this._updateAllKeys(data);\n }\n\n _updateAllKeys(data) {\n Object.keys(data).forEach((key) => {\n this._addKeys(key,data[key])\n });\n\n this._addKeys('CurrentUrl',window.location.href.toLowerCase());\n }\n\n _addKeys(key,data){\n Store.set(key,data);\n this._addToList(key, data);\n }\n\n _addToList(key, val) {\n\n let obj = {key: key, val: val};\n\n this._ListInfo.push(obj);\n }\n\n getVal(key, defaultVal) {\n return Store.get(key, defaultVal);\n }\n\n getInfo() {\n return this._ListInfo;\n }\n\n}\n\nexport default HybridInfoModel;\n","/**\n * INFO const symbols.\n * @constant\n * @type {Object}\n */\n\nconst INFO_ALL = 'all';\n\nconst INFO = {\n VER: 'hybridVer',\n URL_SCHEME: 'hybridUrlScheme',\n APP_NAME: 'hybridAppName',\n BUILD_TYPE: 'hybridBuildType',\n BUILD: 'hybridBuild',\n AppleID: 'AppleId',\n PUSH_PARAMS: 'hybridPushParams',\n WEB_URL: 'hybridWebUrl'\n};\n\n\nexport {INFO, INFO_ALL};","import BaseObject from '../../../../base/base_object';\nimport Model from './info_hybrid_model';\nimport {INFO, INFO_ALL} from './info_hybrid_consts';\nimport {SYSTEM_EVENTS} from '../../../../events/events';\nimport Event from '../../../../utils/event';\nimport _ from '../../../../utils/underscore';\nimport Device from \"../../../../utils/device/device\";\n\nclass HybridInfo extends BaseObject {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'HybridInfo';\n\n _model = null;\n _HybridService = null;\n\n init(params) {\n super.init();\n\n this._model = Model.create(params);\n\n this._subscribe();\n }\n\n _subscribe() {\n Event.on(SYSTEM_EVENTS.ON_INIT_COMPLETE, this._initInfo, this);\n Event.on(SYSTEM_EVENTS.HYBRID_UPDATE_INFO_KEY, this._updateKey, this);\n }\n\n _initInfo() {\n this.getAllInfo();\n }\n\n _updateKey(data){\n\n if(data) {\n this._model._addKeys(data.key, data.val);\n }\n }\n\n /**\n * @update the data from hybrid\n * @param data: example: {type: \"HybridInfoFeature\", action: \"debug\", url: \"https://mirage-cgp-client.888sport.com\", reload: \"true\"}\n */\n\n onHybridDirectCall(data) {\n this._model.updateData(data);\n this.setUrl();\n\n let autologinToken = this._model.getAutologinToken();\n\n if(autologinToken) {\n this._HybridService.runAutologin({userinfo: autologinToken, sessionTimer: this._model.getSessionTimerOffset()});\n }\n }\n\n /**\n * @set a new url in hybrid hybrid\n */\n\n setUrl() {\n let url = this._model.getUrl();\n let reload = this._model.getReload();\n if (undefined !== url && url.length > 0) {\n this._HybridService.setUrl(url, reload);\n }\n }\n\n /**\n * is debug mode ( for the info display )\n * @returns bool\n */\n isDebugMode() {\n return this._model.isDebugMode();\n }\n\n /**\n * get all the info from hybrid(version, name, bundleid... ( for the info display )\n */\n getAllInfo() {\n return this._HybridService.getInfo(INFO_ALL).then(data => {\n this._model.updateAllInfo(data);\n\n if(Device.hybrid.isEmbedded && !Device.hybrid.inPoker && !Device.hybrid.inSport) {\n let ver = this.getFullVersion();\n Event.fire(SYSTEM_EVENTS.ADD_TAG_OPEN_APP_VER, ver);\n }\n });\n }\n\n initFeatures(hybridSrv) {\n\n this._HybridService = hybridSrv;\n\n return this;\n }\n\n getFullVersion(){\n return this.getVersion() + '-' + this.getBuild();\n }\n\n getBuild() {\n return this._model.getVal(INFO.BUILD, 0);\n }\n\n getAppleID() {\n return this._model.getVal(INFO.AppleID, '');\n }\n\n getVersion() {\n return this._model.getVal(INFO.VER, 0);\n }\n\n getUrlScheme() {\n return this._model.getVal(INFO.URL_SCHEME, '');\n }\n\n getInfo() {\n return this._model.getInfo();\n }\n\n /**\n * get Info For Display - (used in the menu)\n * @returns info in html format\n */\n getInfoForDisplay() {\n let val, key, html = '';\n let count = 0;\n this._model.getInfo().forEach(item => {\n\n count++;\n val = item.val;\n key = item.key;\n\n if ('SerialData' === key) {\n val = JSON.stringify(_.safeJSONandDecode(val));\n }\n\n html += count + '. ' + key + ': ' + val + '
';\n });\n\n return '
    ' + html + '
';\n }\n}\n\nexport default HybridInfo;\n","import BaseModelComponent from \"../../../../base/base_model_component\";\nimport {ICON_TYPE} from \"./sweden_responsible_gaming_consts\";\n\n\n\nclass SwedenResponsibleGamingIconsModel extends BaseModelComponent {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'SwedenResponsibleGamingIconsModel';\n\n /**\n *\n * @param params\n */\n init(params = {}) {\n super.init(params);\n this._setIconType(params.iconType);\n }\n\n\n /**\n * Set icon type to be displayed (\n * @param iconType\n * Full view with text and symbol = text\n * symbol only = symbol\n * @returns {SwedenResponsibleGamingIconsModel}\n * @private\n */\n _setIconType(iconType = ICON_TYPE.TEXT) {\n this._iconType = iconType;\n return this;\n }\n\n\n /**\n * Get icon type to be displayed\n * @returns {string|*}\n */\n getIconType() {\n return this._iconType;\n }\n\n}\n\nexport default SwedenResponsibleGamingIconsModel;","import Event from '../../../../utils/event';\nimport {USER_EVENTS, SYSTEM_EVENTS} from '../../../../events/events';\nimport BaseComponent from '../../../../base/base_component';\nimport Model from './sweden_responsible_gaming_icons_model';\nimport {ICON_TYPE_CSS_SELECTOR} from './sweden_responsible_gaming_consts';\nimport {NAVIGATION_VIEWS} from \"../../../external_links/external_links_consts\";\nlet view = require('./view/sweden_responsible_gaming_icons.html');\n\nexport default class SwedenResponsibleGamingIconsController extends BaseComponent {\n static CLASS = 'SwedenResponsibleGamingIconsController';\n\n _model = null;\n\n\n init(params) {\n super.init(params);\n this._params = params;\n this._model = Model.create(params);\n }\n\n start() {\n let bakedHTML = this.bake(view, {\n iconTypeClass: ICON_TYPE_CSS_SELECTOR[this._model.getIconType()]\n });\n this.setHTML(bakedHTML);\n this._subscribe();\n }\n\n\n _subscribe() {\n // no longer opens cashier on panic button click\n this.onDOMEvent(this.getDOMElementByClassName('cgp-themes-sw-resp-game-panic'), USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics('panic_click');\n this.serviceFactory.regulationService().getRegulation().openSelfExclusion(NAVIGATION_VIEWS.WINDOW);\n });\n\n // open my account on limits button click\n this.onDOMEvent(this.getDOMElementByClassName('cgp-themes-sw-resp-game-limit'), USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics('deposit_limits_click');\n this.serviceFactory.regulationService().getRegulation().openLimits();\n });\n\n // open self test link on self test button click\n this.onDOMEvent(this.getDOMElementByClassName('cgp-themes-sw-resp-game-self-test'), USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics('self_test_click');\n this.serviceFactory.structuredLoggingService().getLogger({\n eventName: 'SelfTestClicked',\n }).setTarget('project-sweden-selftest').info();\n this.serviceFactory.regulationService().getRegulation().openSelfTest(NAVIGATION_VIEWS.WINDOW);\n });\n }\n\n\n _sendAnalytics(label) {\n const analyticObject = {\n category: 'Navigation',\n action: 'Header',\n label: 'Icon_' + label\n };\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticObject);\n }\n}","import BaseOptionsModel from \"../base_options_model\";\nimport _ from '../../../../utils/underscore';\n\nclass AboutComponentModel extends BaseOptionsModel {\n\n init(params) {\n // TODO translate\n this\n ._setTaxID(params.taxID)\n ._setCID(params.cid)\n ._setClientVersion(params.clientVersion);\n }\n\n\n /**\n * set taxID. User must be logged in\n * @param taxID\n * @returns {AboutComponentModel}\n * @private\n */\n _setTaxID(taxID) {\n if (!_.isString(taxID)) {\n this.taxID = '';\n }\n this.taxID = taxID;\n\n return this;\n }\n\n /**\n * set CID. User must be logged in\n * @param cid\n * @returns {AboutComponentModel}\n * @private\n */\n _setCID(cid) {\n if (!_.isString(cid)) {\n this.cid = '';\n }\n this.cid = cid;\n\n return this;\n }\n\n\n /**\n * set client version\n * @param version\n * @returns {AboutComponentModel}\n * @private\n */\n _setClientVersion(version) {\n if (!_.isString(version)) {\n this.clientVersion = '';\n }\n this.clientVersion = version;\n\n return this;\n }\n\n /**\n * Implement getOptions base method\n * @returns {{cid: (string|*), clientVersion: (string|*)}}\n */\n getOptions() {\n return {cid: this.cid, clientVersion: this.clientVersion, taxID: this.taxID};\n }\n\n}\n\nexport default AboutComponentModel;\n\n","import Model from './about_component_model';\nimport DOM from '../../../../utils/dom';\nimport BaseOptionsComponentController from \"../base_options_component_controller\";\nimport {SYSTEM_EVENTS, USER_EVENTS} from '../../../../events/events';\nimport Event from '../../../../utils/event';\nimport _ from '../../../../utils/underscore';\nimport {REGULATION_CODE_TYPES} from '../../../../services/regulation/regulation_const';\nimport {GNWP_SOURCES} from \"../../../external_links/external_links_consts\";\nimport * as EXTERNAL_LINKS_CONSTS from \"../../../external_links/external_links_consts\";\n\n// Views\nlet aboutView = require('./view/about.html');\n\n/**\n * Component allows to view user information for support reasons. CID - id for support and Client Version\n */\nclass AboutController extends BaseOptionsComponentController {\n\n static CLASS = 'AboutController';\n\n /**\n * @property\n * @type {object|null}\n * @private\n */\n _model = null;\n\n /**\n *`\n * @param params\n */\n init(params) {\n super.init();\n this._model = Model.create(this._initParams());\n }\n\n _initParams() {\n let params = {};\n params.cid = this.serviceFactory.userService().getCID();\n params.clientVersion = this.serviceFactory.skinService().getVersion();\n params.taxID = this.serviceFactory.userService().getTaxID();\n\n return params;\n }\n\n\n /**\n * Start the component view.\n *\n *\n * @returns {AboutController}\n * @public\n */\n start() {\n let bakedHTML = this.bake(aboutView);\n this.setHTML(bakedHTML);\n this._prepareHelpText();\n\n // Should be shown only if you have taxID and in Italy regulation.\n if (_.isNullOrUndefined(this._model.getOptions().taxID) || this.serviceFactory.regulationService().getRegulationCode() !== REGULATION_CODE_TYPES.ITALY) {\n this.getEl().querySelector('.cgp-about-fiscal-code').style.display = 'none';\n }\n\n // Should be shown only if you in Portugal regulation.\n if (this.serviceFactory.regulationService().showSessionBalanceInAboutBox()) {\n return this.serviceFactory.openSessionsService().getPlayerOpenSessionsBalance().then((data)=> {\n DOM.text(this.querySelector('.cgp-about-session-balance-amount'), this.serviceFactory.currencyService().formatMoney(data));\n return this;\n });\n } else {\n this.getEl().querySelector('.cgp-about-open-session-balance-code').style.display = 'none';\n return this;\n }\n }\n\n _prepareHelpText() {\n\n // We don't want the help text inside the CIP8/ unsupported regulations about window.\n if (this.serviceFactory.integrationService().isMiniOrbit() || !this.serviceFactory.regulationService().showHelpInAboutWindow()) {\n return;\n }\n\n this._translateAboutHelp();\n this.onChildElementEvent('.cgp-about-help a', USER_EVENTS.ON_CLICK, () => {\n this.serviceFactory.openLinkService().openLink({\n source: GNWP_SOURCES.HELP,\n view: EXTERNAL_LINKS_CONSTS.NAVIGATION_VIEWS.WINDOW\n });\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {category: 'Client_About', action: 'Help'});\n });\n }\n\n _translateAboutHelp() {\n let aboutHelpTranslation = this.translate('about_help_support', {\n anchorStart: ``,\n anchorEnd: ''\n });\n DOM.html(aboutHelpTranslation, this.getEl().querySelectorAll('.cgp-about-help')[0]);\n }\n\n /**\n * Handle after component open action\n * @protected\n */\n onComponentOpened() {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {category: 'Client_About', action: 'Open'});\n }\n\n\n /**\n * Get title language key\n * @returns {string}\n * @private\n */\n _getTitleKey() {\n return 'about_title';\n }\n\n _getCustomCSSClassList() {\n return super._getCustomCSSClassList().concat(['cgp-options-about']);\n }\n\n\n /**\n * Callback fired when component is completly removed from DOM\n * @protected\n */\n onComponentClosed() {\n super.onComponentClosed();\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {category: 'Client_About', action: 'Close'});\n }\n\n}\n\nexport default AboutController;\n\n","const GEO_LOCATION_COMPONENT_CONSTS = {\n PC: require('./view/geo_location_hybrid.html'),\n HYBRID: require('./view/geo_location_hybrid.html')\n};\n\n\n\n\n\nexport {GEO_LOCATION_COMPONENT_CONSTS};\n","import BaseOptionsComponentController from '../base_options_component_controller';\nimport {GEO_LOCATION_COMPONENT_CONSTS} from './geo_location_component_consts';\nimport {PRIORITY_LEVEL} from '../../../../services/overlay_manager/overlay_manager_levels';\n\n\n\nclass GeoLocationController extends BaseOptionsComponentController {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'GeoLocationController';\n\n\n /**\n * @static\n * @type {string}\n */\n static DIRECTIVE = 'cgp-directive-geo-location';\n\n\n /**\n * Root component selector.\n *\n * @type {string}\n * @private\n */\n _selector = 'cgp-geo-location-component';\n\n\n\n init(params) {\n super.init();\n this._setHtml(GEO_LOCATION_COMPONENT_CONSTS.PC);\n }\n\n\n _setHtml(html) {\n\n let screen = this.bake(html);\n this.setHTML(screen);\n }\n _getTitleKey() {\n return 'geo_location_title';// TODO change to const after TypeScript migration\n }\n\n close() {\n super.destroy();\n }\n /**\n * close button display false\n */\n _isCloseButtonEnabled() {\n return false;\n }\n\n /**\n * Get priority to option message\n * @returns {number}\n */\n getOverlayPriority() {\n return PRIORITY_LEVEL.GEO_FREEZE_WINDOW;\n }\n\n}\nexport default GeoLocationController;","import BaseObject from '../../../base/base_object';\nimport DOM from '../../../utils/dom';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {SYSTEM_EVENTS} from '../../../events/events';\nimport Event from '../../../utils/event';\n\nexport default class UserScrollDetector extends BaseObject {\n static CLASS = \"UserScrollDetector\";\n\n _getScrollY = () => window.scrollY;\n _now = () => Date.now();\n _scrollCheckingInterval = TimeSpan.fromMinutes(1);\n\n _lastScrollY = null;\n _lastScrollTime = null;\n _onScrollCallback = null;\n\n init(params) {\n super.init(params);\n\n params = params || {};\n\n this._now = params.now || this._now;\n this._scrollCheckingInterval = params.scrollCheckingInterval || this._scrollCheckingInterval;\n this._onScrollCallback = params.onScrollCallback;\n\n this._setLastScrollTime();\n this._setLastScrollY();\n this._startScrollCheckTimer();\n\n this._subscribe();\n }\n\n _subscribe() {\n Event.on(SYSTEM_EVENTS.APP_RESUMED, this._startScrollCheckTimer, this);\n Event.on(SYSTEM_EVENTS.APP_PAUSED, this._stopScrollCheckTimer, this);\n }\n\n _unsubscribe() {\n Event.off(SYSTEM_EVENTS.APP_RESUMED, this._startScrollCheckTimer, this);\n Event.off(SYSTEM_EVENTS.APP_PAUSED, this._stopScrollCheckTimer, this);\n }\n\n\n getLastScrollTime() {\n return this._lastScrollTime;\n }\n\n _setLastScrollTime() {\n this._lastScrollTime = this._now();\n if(this._onScrollCallback) {\n this._onScrollCallback();\n }\n }\n\n setOnScrollCallback(onScrollCallback) {\n this._onScrollCallback = onScrollCallback;\n }\n\n _setLastScrollY() {\n this._lastScrollY = this._getScrollY();\n }\n\n _scrollCheckTimer = null;\n _startScrollCheckTimer() {\n this._stopScrollCheckTimer();\n this._scrollCheckTimer = DOM.setInterval(() => {\n if (this._getScrollY() !== this._lastScrollY) {\n this._setLastScrollTime();\n this._setLastScrollY();\n }\n }, this._scrollCheckingInterval.totalMilliseconds);\n }\n\n _stopScrollCheckTimer() {\n DOM.clearInterval(this._scrollCheckTimer);\n }\n\n dispose() {\n this._stopScrollCheckTimer();\n this._unsubscribe();\n }\n}","import BaseObject from '../../../base/base_object';\nimport {USER_ACTIVITY_EVENTS_ALL, USER_ACTIVITY_EVENTS_FOR_HYBRID } from '../../../events/events';\nimport Event from '../../../utils/event';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport UserScrollDetector from './user_scroll_detector';\nimport Store from '../../../utils/store';\nimport { TOKEN_PROPERTIES } from '../oauth_const';\nimport Device from '../../../utils/device/device';\n\nexport default class UserActivityDetector extends BaseObject {\n static CLASS = 'UserActivityDetector';\n\n _now = () => Date.now();\n _userScrollDetector = null;\n _userActivityDetectionInterval = TimeSpan.fromMinutes(1);\n _serviceFactory = null;\n _onUserActivityCallback = () => { };\n\n /**\n *\n * @param params = {\n * now: function,\n * userScrollDetector: function\n * }\n */\n init(params) {\n super.init(params);\n\n params = Object.assign({}, params);\n\n this._now = params.now || this._now;\n this._userActivityDetectionInterval = params.userActivityDetectionInterval || this._userActivityDetectionInterval;\n this._onUserActivityCallback = params.onUserActivityCallback || this._onUserActivityCallback;\n this._serviceFactory = params.serviceFactory;\n\n this._userScrollDetector = params.userScrollDetector || UserScrollDetector.create({\n now: this._now,\n scrollCheckingInterval: this._userActivityDetectionInterval\n });\n this._userScrollDetector.setOnScrollCallback(this.setLastTimeUserPerformedAction.bind(this));\n\n this.setLastTimeUserPerformedAction();\n this._subscribe();\n this._startUserActivityDetectionTimer();\n }\n\n _userActivityEventsSubscription = null;\n _subscribe() {\n const userActivityEvents = Device.hybrid.isHybrid ? USER_ACTIVITY_EVENTS_FOR_HYBRID : USER_ACTIVITY_EVENTS_ALL;\n this._userActivityEventsSubscription = Event.on(userActivityEvents, this.setLastTimeUserPerformedAction, this);\n }\n\n _unSubscribe() {\n if (this._userActivityEventsSubscription) {\n this._userActivityEventsSubscription.off();\n }\n }\n\n setLastTimeUserPerformedAction() {\n // we store it into the local storage so different browser instances to share it\n Store.set(TOKEN_PROPERTIES.OAUTH_LAST_TIME_ACTIVITY, this._now());\n }\n\n\n getLastTimeUserPerformedAction() {\n return parseInt(Store.get(TOKEN_PROPERTIES.OAUTH_LAST_TIME_ACTIVITY, 0));\n }\n\n getTimeSinceLastUserActivity() {\n return this._now() - this.getLastTimeUserPerformedAction();\n }\n\n getUserActivityDetectionInterval() {\n return this._userActivityDetectionInterval.totalMilliseconds;\n }\n\n _userActivityDetectionTimer = {\n dispose: () => { }\n };\n\n\n _startUserActivityDetectionTimer() {\n this._userActivityDetectionTimer = this._serviceFactory.observableFactoryService().fromInterval(this._userActivityDetectionInterval.totalMilliseconds)\n .forEach(() => {\n let lastTimeUserPerformedAction = this.getLastTimeUserPerformedAction();\n let userActivityDetectionInterval = this.getUserActivityDetectionInterval();\n let now = this._now();\n\n if (lastTimeUserPerformedAction + userActivityDetectionInterval > now) {\n this._onUserActivityCallback();\n }\n });\n }\n\n dispose() {\n this._userActivityDetectionTimer.dispose();\n this._userScrollDetector.dispose();\n this._unSubscribe();\n }\n}\n","import BaseObject from \"../../../base/base_object\";\n\nexport default class BaseFallbackHandler extends BaseObject {\n\n _isActive = false;\n\n init(params){\n super.init(params);\n this.serviceFactory = params.serviceFactory;\n }\n\n getFallbackName() {\n return 'BaseFallback';\n }\n\n start() {\n\n }\n\n stop() {}\n}","import BaseFallbackHandler from \"../base_fallback_handler\";\nimport {SYSTEM_EVENTS} from \"../../../../events/events\";\nimport Event from \"../../../../utils/event\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport _ from \"../../../../utils/underscore\";\nimport { IFreePlayVoucher } from \"../../../free_play/Free_play_voucher\";\n\nconst REFRESH_WALLET_INTERVAL = 30; // in seconds\n\nexport default class WalletFallbackHandler extends BaseFallbackHandler {\n\n static CLASS = 'WalletFallbackHandler';\n static FallbackName = 'Wallet';\n private _subscription;\n private _eventInstances = [];\n\t_uri = '';\n\t_refreshInterval = 0;\n\n init(params) {\n super.init(params);\n if (params) {\n this._uri = params.uri || '/capi/wallet/getplayerwallet/';\n this._refreshInterval = params.refreshInterval || REFRESH_WALLET_INTERVAL;\n }\n }\n\n start() {\n if (true === this._isActive) {\n this.logger.debug('Fallback is already running');\n return;\n }\n this._startWalletRefresh();\n }\n\n\n getFallbackName() {\n return 'Wallet';\n }\n\n\n /**\n * Update wallet over API\n * @private\n */\n private _receiveWallet() {\n if (this.serviceFactory.oAuth2Service().isAuthorized()) {\n this.serviceFactory.http2Service().post(this._uri)\n .then((walletResponse) => {\n // reduce data to update separate system parts (wallet and free play services)\n const walletData = Object.assign({}, walletResponse);\n delete walletData['FreePlay'];\n this._handleWalletData(walletData);\n this._handleFreePlay(walletResponse.FreePlay);\n });\n }\n }\n\n private _handleWalletData(walletData) {\n this.logger.debug('Received Wallet data', JSON.stringify(walletData));\n Event.fire(SYSTEM_EVENTS.SESSION_EVENT_WALLET, {\n Balance: walletData.AvailableMoney,\n Currency: walletData.CurrencyCode,\n RealMoneyBankroll: walletData.RealMoneyBankroll\n });\n }\n\n\tprivate _convertWalletFreePlays(fpData: any): IFreePlayVoucher[] {\n if (!fpData || !fpData.FreePlayList || !fpData.FreePlayList.FreePlay) {\n this.logger.debug('Unable to convert wallet FP data to FP Message format. FreePlay data is empty');\n return [];\n }\n this.logger.debug('Received Free Play data', JSON.stringify(fpData));\n let vouchers: IFreePlayVoucher[] = [];\n if (_.isArray(fpData.FreePlayList.FreePlay)) {\n\t\t\tvouchers = fpData.FreePlayList.FreePlay.map(freePlay => this._convertToVoucher(freePlay));\n\t\t} else if (_.isObject(fpData.FreePlayList.FreePlay)) {\n\t\t\tvouchers = [this._convertToVoucher(fpData.FreePlayList.FreePlay)];\n\t\t}\n return vouchers;\n\t}\n\n\tprivate _convertToVoucher(freePlay: any): IFreePlayVoucher {\n\t\tconst voucher: IFreePlayVoucher = {\n\t\t\tID: freePlay.Id.toString(),\n\t\t\tCurrentBalance: _.safeStringToNumber(freePlay.CurrAmount, 0),\n\t\t\tWinnings: _.safeStringToNumber(freePlay.FreeBetWinning, 0),\n\t\t\tFreePlayTypeId: freePlay.FreePlayTypeID ? freePlay.FreePlayTypeID.toString() : '1',\n\t\t\tOriginAmount: _.safeStringToNumber(freePlay.OrigAmount, 0),\n\t\t\tExpirationDate: new Date(freePlay.FreePlayExpirationDate),\n\t\t\tSpinBetAmount: _.safeStringToNumber(freePlay.MaxBetAmount, 0),\n\t\t\tGameTypeIDList: freePlay.GameTypeList ? this._getGameTypesFromWalletFreePlay(freePlay.GameTypeList) : []\n\t\t};\n\t\treturn voucher;\n\t}\n\n\n\tprivate _getGameTypesFromWalletFreePlay(gameTypeList: any): number[] {\n const gameTypes: number[] = [];\n if (_.isArray(gameTypeList.GameType)) {\n gameTypeList.GameType.forEach((game) => {\n gameTypes.push(Number(game[\"@id\"]));\n });\n } else {\n gameTypes.push(Number(gameTypeList.GameType[\"@id\"]));\n }\n return gameTypes;\n }\n\n private _lastReceivedVouchers: IFreePlayVoucher[] = null;\n private _handleFreePlay(fpData: any) {\n\t\tconst newReceivedVouchers = this._convertWalletFreePlays(fpData);\n\t\tif(this._lastReceivedVouchers) {\n\t\t const removedVouchers = this._extractRemovedVouchers(newReceivedVouchers);\n\t\t if(removedVouchers.length > 0) {\n\t\t removedVouchers.forEach( voucher => {\n Event.fire(SYSTEM_EVENTS.SESSION_EVENT_FREE_PLAY_REMOVED, voucher.ID);\n })\n }\n }\n this.logger.debug('Received FreePlay voucers', JSON.stringify(newReceivedVouchers));\n Event.fire(SYSTEM_EVENTS.SESSION_EVENT_FREE_PLAY_RECEIVED, newReceivedVouchers);\n this._lastReceivedVouchers = newReceivedVouchers;\n }\n\n private _extractRemovedVouchers(newVouchers:IFreePlayVoucher[]): IFreePlayVoucher[] {\n return this._lastReceivedVouchers.filter(oldVoucher => newVouchers.findIndex( newVoucher => newVoucher.ID === oldVoucher.ID) === -1)\n }\n\n /**\n * Refresh wallet.\n */\n private _startWalletRefresh() {\n if (false === this.serviceFactory.oAuth2Service().isAuthorized()) {\n this.stop();\n return;\n }\n this._isActive = true;\n // Get wallet and FP data from token and local storage\n this._receiveWallet();\n\n this._subscription = this.serviceFactory.observableFactoryService().fromInterval(TimeSpan.fromSeconds(this._refreshInterval)).forEach(() => {\n this._receiveWallet();\n });\n\n this._eventInstances.push(Event.on([SYSTEM_EVENTS.OAUTH_STATE_CHANGE, SYSTEM_EVENTS.CLOSE_GAME, SYSTEM_EVENTS.ROUTE_CHANGED], () => {\n this._receiveWallet();\n }, this));\n }\n\n stop() {\n // clear interval\n if (this._subscription) {\n this._subscription.dispose();\n }\n // unsubscribe from events\n Event.detachEvents(this._eventInstances);\n this._isActive = false;\n }\n}","import BaseObject from '../../../../../base/base_object';\nimport ServiceFactory from '../../../../service_factory';\n\nexport class DkStructuredLogging extends BaseObject {\n static CLASS = 'DkStructuredLogging';\n\n init(params = {}) {\n super.init(params);\n this.serviceFactory = params.serviceFactory || ServiceFactory.create();\n }\n\n realityCheckMessageSuccess(regulationData, sessionTime) {\n this._getLogger({\n event: 'RealityCheckMessage',\n currencyType: this.serviceFactory.currencyService().getCurrency(),\n netLoss: regulationData.TotalNetLoss / 100,\n loggedInTime: sessionTime,\n fullMessage: true,\n })\n .setTarget('Denmark-realityCheck')\n .info();\n }\n\n realityCheckMessageError(error, sessionTime) {\n this._getLogger({\n event: 'RealityCheckMessage',\n currencyType: this.serviceFactory.currencyService().getCurrency(),\n loggedInTime: sessionTime,\n fullMessage: false,\n errorDescription: error.ErrorDescription,\n })\n .setTarget('Denmark-realityCheck')\n .error();\n }\n\n _getLogger(eventData) {\n return this.serviceFactory.structuredLoggingService().getLogger(eventData);\n }\n}\n","import BaseRegulation from '../base_regulation';\nimport TempAccountMessageRegulationHelper from '../../helpers/temp_account_message_helper';\nimport { DkStructuredLogging } from './logging/dk_structured_logging';\nimport LastLoginComponentController\n from '../../../../components/regulation_components/base/last_login/last_login_component_controller';\nimport LastLoginCompositeController\n from '../../../../components/regulation_components/base/last_login/last_login_composite_controller';\nimport SessionTimerController from '../../../../components/session_timer/session_timer_controller';\nimport DKResponsibleGamingIconsController\n from '../../../../components/regulation_components/denmark/responsible_gaming_icons/dk_responsible_gaming_icons_controller';\nimport {Check} from \"@sparkware/app-utils\";\n\nexport default class DkRegulation extends BaseRegulation {\n static CLASS = 'DkRegulation';\n\n _structuredLogger = null;\n _selfTestLink = \"\";\n _selfExclusionLink = \"\";\n\n\n init(params) {\n super.init(params);\n\n this._structuredLogger = DkStructuredLogging.create({\n serviceFactory: this.serviceFactory,\n });\n this._selfTestLink = params.selfTestLink;\n this._selfExclusionLink = params.selfExclusionLink;\n }\n\n sessionTimerVisible() {\n return true;\n }\n realityCheckEnabled() {\n return true;\n }\n\n sessionTimerEnabled() {\n return true;\n }\n\n showResponsibleIcons() {\n return true;\n }\n\n showAgeResponsibleGameInDetailedHistory() {\n return true;\n }\n\n showAgeResponsibleIconInGame() {\n return true;\n }\n\n getLastLoginComponent(params) {\n let lastLoginComponent = LastLoginComponentController.create(params);\n let sessionTimerComponent = SessionTimerController.create();\n return LastLoginCompositeController.create({lastLoginComponent: lastLoginComponent, sessionTimerComponent: sessionTimerComponent});\n }\n\n\n getResponsibleGamingIconsComponent(params){\n return DKResponsibleGamingIconsController.create(params);\n }\n\n showTempAccountMessage(closeFunc) {\n TempAccountMessageRegulationHelper.create({\n serviceFactory: this.serviceFactory,\n }).showTempAccountMessage({\n closeFunc: closeFunc,\n messageKey: 'dk_temp_account_message',\n titleKey: 'temp_account_title',\n btnNameKey: 'temp_account_upload_btn',\n });\n }\n\n _handleRealityCheckMessage(sessionTimer) {\n const isGameRunning = this.serviceFactory.gameService().isGameRunning();\n if (isGameRunning) {\n if (!this._realityCheckShouldBeDisplayedInGame()) {\n return;\n }\n }\n\n this.serviceFactory.userService().getRealityCheckData().then(data => {\n\n this.serviceFactory.gameService().stopCurrentGameAutoplay();\n\n this.serviceFactory.orbitComponentRenderService().showTimeSpentReminderWithBalance({\n playingTime: this.getCurrentSessionTime(),\n totalNetLoss: Check.isNullOrUndefined(data?.TotalNetLoss) ? 0 : data.TotalNetLoss,\n isInGame: isGameRunning\n });\n\n this._structuredLogger.realityCheckMessageSuccess(data, this.getCurrentSessionTime());\n }).catch(err => {\n\n this.serviceFactory.gameService().stopCurrentGameAutoplay();\n\n this.serviceFactory.orbitComponentRenderService().showTimeSpentReminderWithBalance({\n playingTime: this.getCurrentSessionTime(),\n totalNetLoss: 0,\n isInGame: isGameRunning\n });\n\n this._structuredLogger.realityCheckMessageError(err, this.getCurrentSessionTime().toString());\n });\n\n }\n\n\n _realityCheckShouldBeDisplayedInGame() {\n return this.serviceFactory\n .gameService()\n .getCurrentRunningGameCompany()\n .shouldShowRealityCheckMessageWhileGameIsOpen();\n }\n\n openSelfExclusion(view) {\n if(!this._selfExclusionLink){\n this.logger.error(\"Self exclusion link for dk is missing!\");\n return;\n }\n this.serviceFactory.openLinkService().openLink({\n sourceLink: this._selfExclusionLink,\n view: view\n });\n }\n\n\n openSelfTest(view) {\n if(!this._selfTestLink){\n this.logger.error(\"Self test link for dk is missing!\");\n return;\n }\n this.serviceFactory.openLinkService().openLink({\n sourceLink: this._selfTestLink,\n view: view\n });\n }\n}\n","import BaseObject from '../../../../../base/base_object';\nimport _ from '../../../../../utils/underscore';\nimport ServiceFactory from \"../../../../service_factory\";\n\nexport class SwedenStructuredLogging extends BaseObject {\n\n static CLASS = \"SwedenStructuredLogging\";\n\n init(params = {}) {\n super.init(params);\n this.serviceFactory = params.serviceFactory || ServiceFactory.create();\n }\n\n loginMessageSuccess(limitsData) {\n this._getLogger(this._buildLoginSuccessEvent(limitsData)).setTarget('project-sweden-loginMessage').info();\n }\n\n loginMessageError(errorMessage = '') {\n this._getLogger(this._buildLoginErrorEvent(errorMessage)).setTarget('project-sweden-loginMessage').error();\n }\n\n realityCheckMessageSuccess(regulationData, sessionTime) {\n this._getLogger({\n event: 'RealityCheckMessage',\n currencyType: this.serviceFactory.currencyService().getCurrency(),\n netLoss: regulationData.TotalNetLoss / 100,\n loggedInTime: sessionTime,\n fullMessage: true\n }).setTarget('project-sweden-realityCheck').info();\n }\n\n realityCheckMessageError(error, sessionTime) {\n this._getLogger({\n event: 'RealityCheckMessage',\n currencyType: this.serviceFactory.currencyService().getCurrency(),\n loggedInTime: sessionTime,\n fullMessage: false,\n errorDescription: error.ErrorDescription\n }).setTarget('project-sweden-realityCheck').error();\n }\n\n _getLogger(eventData) {\n return this.serviceFactory.structuredLoggingService().getLogger(eventData);\n }\n\n _buildLoginSuccessEvent(limitsData) {\n let limits = [],\n currencyService = this.serviceFactory.currencyService();\n\n if (limitsData.DefinedDepositLimits.length !== 0) {\n limits = limitsData.DefinedDepositLimits.map(limit => {\n return {\n limitType: limit.Type,\n limitAmount: _.isNullOrUndefined(limit.Amount) ? 0 : limit.Amount / 100\n }\n })\n }\n\n return {\n event: 'LoginMessage',\n limits: limits,\n netLoss: _.isNullOrUndefined(limitsData.TotalNetLoss) ? 0 : limitsData.TotalNetLoss / 100,\n currencyType: currencyService.getCurrency(),\n fullMessage: true\n }\n\n }\n\n _buildLoginErrorEvent(errorMessage) {\n return {\n event: 'LoginMessage',\n currencyType: this.serviceFactory.currencyService().getCurrency(),\n fullMessage: false,\n errorDescription: errorMessage\n }\n }\n}","import BaseRegulation from '../base_regulation';\nimport {NAVIGATION_VIEWS, GNWP_SOURCES} from '../../../../components/external_links/external_links_consts';\nimport TempAccountMessageRegulationHelper from '../../helpers/temp_account_message_helper';\nimport _ from '../../../../utils/underscore';\nimport {KICK_REASON, KICK_TYPE} from '../../../player_messages_service/player_messages_consts';\nimport {CGP_ERROR_CODES} from '../../../../exceptions/cgp_error_codes';\nimport Event from '../../../../utils/event';\nimport {SYSTEM_EVENTS} from '../../../../events/events';\nimport {DEEP_LINK_MAP} from '../../../../components/external_links/handlers/external_links_base_handler_consts';\nimport {LOGIN_TYPE} from '../../../oauth/oauth_const';\nimport {SwedenStructuredLogging} from './logging/sweden_structured_logging';\nimport LastLoginCompositeController from '../../../../components/regulation_components/base/last_login/last_login_composite_controller';\nimport SessionTimerController from '../../../../components/session_timer/session_timer_controller';\nimport LastLoginComponentController from '../../../../components/regulation_components/base/last_login/last_login_component_controller';\nimport {CLOCK_LOCALIZATION} from '../../../clock/clock_service_consts';\nimport SwedenResponsibleGamingIconsController from '../../../../components/regulation_components/sweden/responsible_gaming_icons/sweden_responsible_gaming_icons_controller';\nimport {Check} from \"@sparkware/app-utils\";\n\nconst DEPOSIT_LIMIT_TYPES = {\n DAILY: 1,\n WEEKLY: 2,\n MONTHLY: 5\n};\n\nconst PENDING_APP_PP = 27;\n\nconst LOGIN_MESSAGE_DURATION_SEC = 8;\n\n\nexport default class SwedenRegulation extends BaseRegulation {\n\n\n static CLASS = 'SwedenRegulation';\n\n\n // logging object\n _structuredLogger = null;\n\n /**\n *\n * @param params\n */\n init(params) {\n super.init(params);\n\n params = params || {};\n this._selfTestLink = params.selfTestLink;\n this._selfExlusionLink = params.selfExclusionLink;\n this._structuredLogger = SwedenStructuredLogging.create({\n serviceFactory: this.serviceFactory\n });\n\n }\n\n\n getExternalLinksConfig() {\n return {\n 'sport': {\n view: {\n mobile: NAVIGATION_VIEWS.WINDOW\n },\n backToView: {\n mobile: NAVIGATION_VIEWS.REDIRECT\n }\n },\n 'poker': {\n view: {\n mobile: NAVIGATION_VIEWS.WINDOW\n },\n backToView: {\n mobile: NAVIGATION_VIEWS.REDIRECT\n }\n }\n };\n }\n\n showSessionBalanceInAboutBox() {\n return true;\n }\n\n\n sessionTimerVisible() {\n return true;\n }\n\n realityCheckEnabled() {\n return true;\n }\n\n sessionTimerEnabled() {\n return true;\n }\n\n showResponsibleIcons() {\n return true;\n }\n\n getLastLoginComponent(params) {\n let lastLoginComponent = LastLoginComponentController.create(params);\n let sessionTimerComponent = SessionTimerController.create();\n return LastLoginCompositeController.create({lastLoginComponent: lastLoginComponent, sessionTimerComponent: sessionTimerComponent});\n }\n\n\n getResponsibleGamingIconsComponent(params){\n return SwedenResponsibleGamingIconsController.create(params);\n }\n\n _realityCheckShouldBeDisplayedInGame() {\n return this.serviceFactory\n .gameService()\n .getCurrentRunningGameCompany()\n .shouldShowRealityCheckMessageWhileGameIsOpen();\n }\n\n /**\n * Overrides base class\n * @param sessionTimer\n * @private\n */\n _handleRealityCheckMessage(sessionTimer) {\n const isGameRunning = this.serviceFactory.gameService().isGameRunning();\n if (isGameRunning) {\n if (!this._realityCheckShouldBeDisplayedInGame()) {\n return;\n }\n }\n\n this.serviceFactory.userService().getRealityCheckData().then(data => {\n\n this.serviceFactory.gameService().stopCurrentGameAutoplay();\n\n this._structuredLogger.realityCheckMessageSuccess(data, this.getCurrentSessionTime());\n\n this.serviceFactory.orbitComponentRenderService().showTimeSpentReminderWithBalance({\n playingTime: this.getCurrentSessionTime(),\n totalNetLoss: Check.isNullOrUndefined(data?.TotalNetLoss) ? 0 : data.TotalNetLoss,\n isInGame: isGameRunning\n });\n }).catch(err => {\n\n this.serviceFactory.gameService().stopCurrentGameAutoplay();\n\n this._structuredLogger.realityCheckMessageError(err, this.getCurrentSessionTime().toString());\n\n this.serviceFactory.orbitComponentRenderService().showTimeSpentReminderWithBalance({\n playingTime: this.getCurrentSessionTime(),\n totalNetLoss: 0,\n isInGame: isGameRunning\n });\n });\n }\n\n\n showTempAccountMessage(closeFunc) {\n TempAccountMessageRegulationHelper.create({\n serviceFactory: this.serviceFactory\n }).showTempAccountMessage({\n closeFunc: closeFunc,\n messageKey: 'sw_temp_account_message',\n titleKey: 'temp_account_title',\n btnNameKey: 'temp_account_upload_btn'\n });\n }\n\n /**\n * When got soft kick should open message when no open game.\n * @param kickParams\n */\n onKickEvent(kickParams) {\n let messageText = '';\n\n if (typeof kickParams !== 'object' || kickParams.KickType !== KICK_TYPE.SOFT_KICK) {\n return;\n }\n\n switch (kickParams.KickReasonId) {\n case KICK_REASON.KickUserDailyReached:\n messageText = this.getErrorMessage(CGP_ERROR_CODES.TIME_LIMIT_REACHED_DAILY);\n break;\n case KICK_REASON.KickUserWeeklyReached:\n messageText = this.getErrorMessage(CGP_ERROR_CODES.TIME_LIMIT_REACHED_WEEKLY);\n break;\n case KICK_REASON.KickUserMonthlyReached:\n messageText = this.getErrorMessage(CGP_ERROR_CODES.TIME_LIMIT_REACHED_MONTHLY);\n break;\n default:\n messageText = this.getErrorMessage(CGP_ERROR_CODES.GENERAL_ERROR_SUPPORT);\n break;\n }\n\n // no message means no popup\n if(!messageText) {\n return;\n }\n\n const shouldShowMessage = this._shouldShowMessage();\n\n if(shouldShowMessage) {\n this.serviceFactory.gameService().stopCurrentGameAutoplay();\n\n this.serviceFactory.messageManagerService().openMessage({\n text: messageText,\n closeButton:false,\n hasDefaultButton: false,\n buttons: [\n {\n name: this.serviceFactory.languageService().translation('mdp_ok'),\n callback: ()=> {\n this.serviceFactory.gameService().closeRunningGame();\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {category: 'time_limit_message', action: 'acknowledge'});\n },\n isClosable: true\n }\n ]\n });\n }\n }\n\n _shouldShowMessage() {\n const isGameRunning = this.serviceFactory.gameService().isGameRunning();\n\n // open message when no game opened\n let shouldShowMessage = !isGameRunning;\n\n // if game is running\n if (isGameRunning) {\n const isGameRunningInFP = this.serviceFactory.gameService().isGameRunningInFreePlayMode();\n const company = this.serviceFactory.gameService().getCurrentRunningGameCompany();\n // Open message when company supports it and game is run in free play mode\n if (isGameRunningInFP && company && company.shouldShowTimeLimitMessageWhileGameIsOpen()) {\n shouldShowMessage = true;\n }\n }\n return shouldShowMessage;\n }\n\n showLoginMessage() {\n let oAuth2Service = this.serviceFactory.oAuth2Service();\n if (!oAuth2Service.isAuthorized()) {\n this.logger.debug('User is not authorized. Login message should not be displayed');\n return;\n }\n\n if (oAuth2Service.getLoginType() === LOGIN_TYPE.AUTOLOGIN && oAuth2Service.getSourceProductPackage() !== PENDING_APP_PP) { // autologin\n this.logger.debug('User has been authorized by autologin without Pending Application product package');\n return;\n }\n\n let limitsData = _.safeJSON(oAuth2Service.extractTokenProperty('regulationMessages'), null);\n\n let messageParams = this._getLoginMessageParams(limitsData);\n let closeNotificationListenerGA, hideNotificationListenerGA;\n\n if (!_.isNullOrUndefined(limitsData)) {\n if (!_.isNullOrUndefined(limitsData.DefinedDepositLimits)) {\n this._structuredLogger.loginMessageSuccess(limitsData);\n } else {\n this._structuredLogger.loginMessageError(limitsData.ErrorMessage);\n }\n } else {\n this._structuredLogger.loginMessageError();\n }\n\n this.serviceFactory.toasterService().showToasterNotification({\n MessageID: 'sweden_login_message',\n Title: messageParams.title,\n SubTitle: messageParams.body,\n DurationInSec: LOGIN_MESSAGE_DURATION_SEC\n });\n\n closeNotificationListenerGA = Event.on(SYSTEM_EVENTS.TOAST_CLOSE_BUTTON, (params) => {\n if (params.toastObj.id !== 'sweden_login_message') {\n return;\n }\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Login_message_toaster',\n action: 'close',\n label: 'Sweden'\n });\n closeNotificationListenerGA.off();\n hideNotificationListenerGA.off();\n }, this);\n\n hideNotificationListenerGA = Event.on(SYSTEM_EVENTS.TOAST_HIDE, (params) => {\n if (params.config.id !== 'sweden_login_message') {\n return;\n }\n closeNotificationListenerGA.off();\n hideNotificationListenerGA.off();\n });\n }\n\n _getLoginMessageParams(limitsData) {\n\n let languageService = this.serviceFactory.languageService();\n let currencyService = this.serviceFactory.currencyService();\n\n if(!limitsData) {\n limitsData = {}\n }\n\n if(!limitsData.DefinedDepositLimits || limitsData.DefinedDepositLimits.length === 0) {\n limitsData.DefinedDepositLimits = [\n {Type: DEPOSIT_LIMIT_TYPES.DAILY, Amount: null},\n {Type: DEPOSIT_LIMIT_TYPES.WEEKLY, Amount: null},\n {Type: DEPOSIT_LIMIT_TYPES.MONTHLY, Amount: null}\n ];\n\n }\n\n let abs = (amount) => {\n if(_.isNullOrUndefined(amount)) {\n return null;\n }\n return Math.abs(amount);\n };\n\n let formatAmount = (amount) => {\n if(_.isNullOrUndefined(amount)) {\n return '';\n } else {\n return currencyService.formatMoney(amount);\n }\n };\n\n\n let bindingParams = {\n net_loss: formatAmount(abs(limitsData.TotalNetLoss))\n };\n\n // prepare deposit limit messages\n limitsData.DefinedDepositLimits.forEach((depositLimit) => {\n\n switch (depositLimit.Type) {\n case DEPOSIT_LIMIT_TYPES.DAILY:\n bindingParams.daily_limit = formatAmount(depositLimit.Amount);\n break;\n case DEPOSIT_LIMIT_TYPES.WEEKLY:\n bindingParams.weekly_limit = formatAmount(depositLimit.Amount);\n break;\n case DEPOSIT_LIMIT_TYPES.MONTHLY:\n bindingParams.monthly_limit = formatAmount(depositLimit.Amount);\n break;\n default:\n // maybe should throw an Exception here\n break;\n }\n });\n // prepare net loss message\n // A negative amount means the player won more than he lost\n // so in case the total loss less than 0, won message will be displayed\n let lossMsgSchema = (limitsData.TotalNetLoss || 0) < 0 ? 'login_message_total_win' : 'login_message_total_loss';\n\n return {\n title: languageService.translation('login_message_title'),\n body: languageService.translation(lossMsgSchema, bindingParams)\n }\n }\n\n openSelfTest(view) {\n this._sendAnalytics('SelfTest', view);\n this.serviceFactory.openLinkService().openLink({\n sourceLink: this._selfTestLink,\n view: view,\n });\n }\n\n openLimits() {\n this._sendAnalytics('OpenLimits');\n this.serviceFactory.openLinkService().openLink({\n source: GNWP_SOURCES.MY_ACCOUNT,\n options: {tabId: DEEP_LINK_MAP.MY_ACCOUNT_DL_RESPONSIBLE_GAMING}\n });\n }\n\n openSelfExclusion(view) {\n this._sendAnalytics('SelfExclusion');\n this.serviceFactory.openLinkService().openLink({\n sourceLink: this._selfExlusionLink,\n view: view\n });\n\n }\n\n _sendAnalytics(action, value) {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Regulation',\n action: action,\n label: 'Sweden',\n value: value\n });\n }\n\n\n getClockLocalization() {\n return CLOCK_LOCALIZATION.LOCAL;\n }\n}\n","import Event from '../../../../utils/event';\nimport {USER_EVENTS, SYSTEM_EVENTS} from '../../../../events/events';\nimport BaseComponent from '../../../../base/base_component';\nimport {NAVIGATION_VIEWS} from \"../../../external_links/external_links_consts\";\nlet view = require('./view/netherlands_responsible_gaming_icons.html');\n\nexport default class NetherlandsResponsibleGamingIconsController extends BaseComponent {\n static CLASS = 'NetherlandsResponsibleGamingIconsController';\n\n _model = null;\n\n start() {\n let bakedHTML = this.bake(view);\n this.setHTML(bakedHTML);\n this._subscribe();\n return this;\n }\n\n\n _subscribe() {\n this.onDOMEvent(this.getDOMElementByClassName('cgp-themes-nl-resp-game-ksa'), USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics('ksa_click');\n this.serviceFactory.regulationService().getRegulation().openSelfTest(NAVIGATION_VIEWS.WINDOW);\n });\n\n }\n\n _sendAnalytics(label) {\n const analyticObject = {\n category: 'Navigation',\n action: 'Header',\n label: 'Icon_' + label\n };\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticObject);\n }\n}\n","import Event from '../../../../utils/event';\nimport {SYSTEM_EVENTS} from '../../../../events/events';\nimport BaseRegulation from '../base_regulation';\nimport LastLoginCompositeController from '../../../../components/regulation_components/base/last_login/last_login_composite_controller';\nimport SessionTimerController from '../../../../components/session_timer/session_timer_controller';\nimport LastLoginComponentController from '../../../../components/regulation_components/base/last_login/last_login_component_controller';\nimport NetherlandsResponsibleGamingIconsController from \"../../../../components/regulation_components/netherlands/responsible_gaming_icons/netherlands_responsible_gaming_icons_controller\";\n\ninterface AccountData {\n RegulationStatusId: number,\n}\n\nconst RegulationStatusIdMap = {\n ApprovedForRegulation: 0,\n PendingDocuments: 2\n};\n\nexport default class NetherlandsRegulation extends BaseRegulation {\n static CLASS = 'NetherlandsRegulation';\n\n private _selfTestLink: string = \"\";\n\n /**\n *\n * @param params\n */\n init(params) {\n super.init(params);\n\n params = params || {};\n this._selfTestLink = params.selfTestLink;\n }\n\n private _getAccountData(): AccountData {\n return this.serviceFactory.userService().getAccountData() as AccountData;\n }\n\n isAnonymousPlayAllowed() : boolean {\n if(!this.serviceFactory.oAuth2Service().isAuthorized()) {\n return false;\n }\n\n return this._getAccountData().RegulationStatusId === RegulationStatusIdMap.ApprovedForRegulation;\n }\n\n openSelfTest(view) {\n this._sendAnalytics('SelfTest', view);\n this.serviceFactory.openLinkService().openLink({\n sourceLink: this._selfTestLink,\n view,\n });\n }\n\n\n shouldShowPlayerLimitsToaster(): boolean {\n return true;\n }\n\n _sendAnalytics(action, value) {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Regulation',\n action: action,\n label: 'Netherlands',\n value: value\n });\n }\n\n getExternalLinksConfig() {\n return {\n 'membership': {\n isCloseBtnAllowed: false\n },\n 'upload_document': {\n isCloseBtnAllowed: false\n },\n 'pending_play': {\n isCloseBtnAllowed: false\n }\n\n };\n }\n\n sessionTimerEnabled() {\n return true;\n }\n\n sessionTimerVisible() {\n return true;\n }\n\n getLastLoginComponent(params) {\n let lastLoginComponent = LastLoginComponentController.create(params);\n let sessionTimerComponent = SessionTimerController.create();\n return LastLoginCompositeController.create({lastLoginComponent: lastLoginComponent, sessionTimerComponent: sessionTimerComponent});\n }\n\n showResponsibleIcons() {\n return true;\n }\n\n showAgeResponsibleIconInGame() {\n return true;\n }\n\n showAgeResponsibleGameInDetailedHistory() {\n return true;\n }\n\n getResponsibleGamingIconsComponent(params){\n return NetherlandsResponsibleGamingIconsController.create(params);\n }\n\n getAgeResponsibleGamingLabel() {\n return this.serviceFactory.languageService().translation('responsible_gaming_age_label');\n }\n}\n","module.exports = \"\\n\";","var map = {\n\t\"./layout/base/base_layout.js\": 301,\n\t\"./layout/cashier_only/loggedin_cashier_only_layout.js\": 1036,\n\t\"./layout/inline/loggedin_inline_layout.js\": 1037\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 695;","module.exports = \"\";","module.exports = \"
\\n {showCashier | show}\\n
\";","module.exports = \"
\\n
\\n \\n
\\n\\n
\\n \\n
\\n
\";","module.exports = \"
\";","module.exports = \"\";","module.exports = \"
\\n
\\n {logged_in_greeting_text | translate}\\n
\\n {showBalance | show}\\n
\\n
\\n
\\n {showCashier | show}\\n
\\n
\\n\\n
\\n
\\n\\n
\\n {showBalance | show}\\n
\\n\\n
\\n\\n\\n\";","var map = {\n\t\"./cashier/external_links_cashier_handler.js\": 703,\n\t\"./common/external_links_common_link_handler.js\": 704,\n\t\"./document _upload/external_links_document_upload_handler.js\": 705,\n\t\"./external_links_base_handler.js\": 97,\n\t\"./fyp/external_links_forgot_handler.js\": 302,\n\t\"./fyp/external_links_forgot_password_handler.js\": 706,\n\t\"./fyp/external_links_forgot_username_handler.js\": 707,\n\t\"./membership/external_links_membership_handler.js\": 708,\n\t\"./my_account/external_links_my_account_handler.js\": 709,\n\t\"./omg/external_links_omg_handler.js\": 710,\n\t\"./pending_login/pending_login_handler.js\": 711,\n\t\"./pending_play/pending_play_handler.js\": 712,\n\t\"./rich/external_links_rich_handler.js\": 713,\n\t\"./sport/external_links_sport_handler.js\": 714\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 702;","import ExternalLinksBaseHandler from '../external_links_base_handler';\n\n/**\n *\n */\nclass ExternalLinksCashiertHandler extends ExternalLinksBaseHandler {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ExternalLinksCashiertHandler';\n static HandlerName = 'cashier';\n\n\t/**\n * Overrides base class checkPostMessageData\n\t * Skips the postMessageData test since it wasn't required ( always returns true\n\t * @param postMessageData\n\t */\n\tcheckPostMessageData(postMessageData) {\n return true;\n }\n\n\n /**\n * Overrides base class\n * @param postMessageData\n */\n\texecutePostMessageAction(postMessageData) {\n if (postMessageData && postMessageData.state === 'backtogame') {\n this.close();\n } else {\n this.logger.warn('Invalid cashier post event message. PostData is null or contains not supported state');\n }\n }\n\n\n getHandlerName() {\n return ExternalLinksCashiertHandler.HandlerName;\n }\n\n}\n\nexport default ExternalLinksCashiertHandler;","import ExternalLinksBaseHandler from '../external_links_base_handler';\n\n/**\n * Handler for FYP\n */\nclass ExternalLinksCommonLinkHandler extends ExternalLinksBaseHandler {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ExternalLinksCommonLinkHandler';\n static HandlerName = 'common_link';\n\n /**\n *\n * @param params\n */\n init(params) {\n super.init(params);\n }\n\n /**\n * decide if iframe needs to be displayed\n *\n */\n display() {\n this.componentControllerRef.display();\n }\n\n\n /**\n * Handle link close\n */\n onComponentClose() {}\n\n\n /**\n * Handle overlay close button click event\n */\n onBtnCloseClicked() {}\n\n\n\t/**\n * Overrides base class checkPostMessageData.\n\t * This handler uses \"action\" instead of \"ActionId\" so this test function must be overridden\n\t * @param postMessageData\n\t * @returns {boolean}\n\t */\n\tcheckPostMessageData(postMessageData) {\n\t\tif (!postMessageData || !postMessageData.action) {\n\t\t\tthis.logger.debug('action is null or undefined');\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\n /**\n *\n * Overrides base class executePostMessageAction.\n * @param postMessageData\n * @returns {handleResult}\n */\n\texecutePostMessageAction(postMessageData) {\n switch (postMessageData.action) {\n // general pages which needs to open login form will be handled in this case\n default:\n this.logger.warn('Not supported action. action = ' + postMessageData.action);\n break;\n }\n }\n\n\n\t/**\n\t * Overrides base class executePostMessageActionFallback.\n\t * This handler doesn't really care about productPackageOrigin, so we need to call executePostMessageAction either way\n\t * Another approach would've been to override the origin test and make it return true\n\t * @param postMessageData\n\t */\n\texecutePostMessageActionFallback(postMessageData) {\n\t\tthis.executePostMessageAction(postMessageData);\n\t}\n\n\n getHandlerName() {\n return ExternalLinksCommonLinkHandler.HandlerName;\n }\n\n}\n\nexport default ExternalLinksCommonLinkHandler;","import ExternalLinksBaseHandler from '../external_links_base_handler';\nimport _ from '../../../../utils/underscore';\nimport {MY_ACCOUNT_POST_ACTIONS} from '../my_account/external_links_my_account_handler_consts';\n\nclass ExternalLinksDocumentUploadHandler extends ExternalLinksBaseHandler {\n static CLASS = 'ExternalLinksDocumentUploadHandler';\n static HandlerName = 'upload_document';\n\n /**\n * Overrides base class\n * @param postMessageData\n */\n executePostMessageAction(postMessageData) {\n let postDataObjLower = _.toLowerCaseKeys(postMessageData);\n switch (postDataObjLower.actionid.toString()) {\n case MY_ACCOUNT_POST_ACTIONS.CLOSE:\n this.close();\n break;\n case MY_ACCOUNT_POST_ACTIONS.CASHIER:\n this._handleCashierOpening(postMessageData);\n this.close();\n break;\n case MY_ACCOUNT_POST_ACTIONS.QUICK_DEPOSIT:\n this._handleQuickDeposit(postMessageData);\n this.close();\n break;\n default:\n this.logger.warn('Not supported ActionID. ActionID = ' + postDataObjLower.actionid);\n break;\n }\n }\n getHandlerName() {\n return ExternalLinksDocumentUploadHandler.HandlerName;\n }\n}\n\nexport default ExternalLinksDocumentUploadHandler;","import ExternalLinksForgotHandler from './external_links_forgot_handler';\n\n/**\n * Handler for FYP\n */\nclass ExternalLinksForgotPasswordHandler extends ExternalLinksForgotHandler {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ExternalLinksFYPHandler';\n static HandlerName = 'forgot_password';\n}\n\nexport default ExternalLinksForgotPasswordHandler;","import ExternalLinksForgotHandler from './external_links_forgot_handler';\n\n/**\n * Handler for FYP\n */\nclass ExternalLinksForgotUsernameHandler extends ExternalLinksForgotHandler {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ExternalLinksForgotUsernameHandler';\n static HandlerName = 'forgot_username';\n\n\n\t/**\n\t * Overrides base class executePostMessageActionFallback.\n\t * This handler doesn't really care about productPackageOrigin, so we need to call executePostMessageAction either way\n\t * Another approach would've been to override the origin test and make it return true\n\t * @param postMessageData\n\t */\n executePostMessageActionFallback(postMessageData) {\n super.executePostMessageAction(postMessageData);\n }\n}\n\nexport default ExternalLinksForgotUsernameHandler;","import ExternalLinksBaseHandler from '../external_links_base_handler';\nimport {MEMBERSHIP_POST_ACTIONS, REGISTRATION_DATA_KEY} from './external_links_membership_handler_consts';\nimport Event from '../../../../utils/event';\nimport {SYSTEM_EVENTS} from '../../../../events/events';\nimport {POST_ACTIONS} from '../../../../events/post_actions';\nimport {CASHIER_ACTIONS} from '../../external_links_consts';\nimport ServiceFactory from '../../../../services/service_factory';\nimport Device from \"../../../../utils/device/device\";\nimport Store from \"../../../../utils/store\";\n\n/**\n *\n */\nclass ExternalLinkMembershipHandler extends ExternalLinksBaseHandler {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ExternalLinkMembershipHandler';\n static HandlerName = 'membership';\n\n /**\n * Override base class onBtnCloseClicked\n * Handle overlay close button click event\n * Send event to b2c when user is finished a registration\n */\n onBtnCloseClicked() {\n super.onBtnCloseClicked();\n if (ServiceFactory.create().oAuth2Service().isAuthorized()) {\n Event.fire(SYSTEM_EVENTS.PLAYER_ACTION, {\n source: this.HandlerName,\n actionName: POST_ACTIONS.REGISTRATION_COMPLETED\n });\n }\n }\n\n\n getHandlerName() {\n return ExternalLinkMembershipHandler.HandlerName;\n }\n\n\n /**\n * Overrides base class\n * @param postMessageData\n */\n\texecutePostMessageAction(postMessageData) {\n switch (postMessageData.ActionId.toString()) {\n case MEMBERSHIP_POST_ACTIONS.PLAY:\n if (!this.componentControllerRef.getIsHasActionCallback()) {\n Event.fire(SYSTEM_EVENTS.PLAYER_ACTION, {\n source: ExternalLinkMembershipHandler.HandlerName,\n actionName: POST_ACTIONS.PLAY\n });\n }\n this.close(POST_ACTIONS.PLAY);\n break;\n case MEMBERSHIP_POST_ACTIONS.DEPOSIT:\n if (!this.componentControllerRef.getIsHasActionCallback()) {\n Event.fire(SYSTEM_EVENTS.PLAYER_ACTION, {\n source: ExternalLinkMembershipHandler.HandlerName,\n actionName: POST_ACTIONS.DEPOSIT\n });\n }\n this.close(POST_ACTIONS.DEPOSIT);\n break;\n case MEMBERSHIP_POST_ACTIONS.BACK:\n this.close();\n break;\n case MEMBERSHIP_POST_ACTIONS.UPLOAD_DOCUMENTS_CASHIER:\n // Post Action is not supported in case of Upload Documents,\n // So if this action received, the user should be redirected to cashier anyway and post action (deeplink) will be terminated\n Event.fire(SYSTEM_EVENTS.PLAYER_ACTION, {\n source: ExternalLinkMembershipHandler.HandlerName,\n actionName: POST_ACTIONS.DEPOSIT,\n options: {sessionType: Device.isMobile() ? CASHIER_ACTIONS.MOBILE_VERIFY_ID : CASHIER_ACTIONS.VERIFY_ID}\n });\n this.close(POST_ACTIONS.CLOSE);\n break;\n case MEMBERSHIP_POST_ACTIONS.SHOW_LOGIN:\n //Close membership window and open login\n this.close(POST_ACTIONS.CLOSE);\n this._handleOpenWebLogin();\n break;\n case MEMBERSHIP_POST_ACTIONS.REGISTRATION_COMPLETED:\n Event.fire(SYSTEM_EVENTS.REGISTRATION_COMPLETED, postMessageData);\n break;\n case MEMBERSHIP_POST_ACTIONS.OPEN_BANK_ID:\n ServiceFactory.create().windowService().openBankId(postMessageData.AppUrl);\n break;\n case MEMBERSHIP_POST_ACTIONS.DOWNLOAD_APP:\n ServiceFactory.create().windowService().redirect(ServiceFactory.create().skinService().getAppDownloadPageURL());\n break;\n case MEMBERSHIP_POST_ACTIONS.STORE_REGISTRATION_COOKIES_DATA:\n if(postMessageData && postMessageData.StoreRegistrationCookiesData) {\n Store.set(REGISTRATION_DATA_KEY, JSON.stringify(postMessageData.StoreRegistrationCookiesData));\n }\n break;\n case MEMBERSHIP_POST_ACTIONS.UPLOAD_DOCUMENTS_IV:\n this.close(POST_ACTIONS.CLOSE);\n this._handleUploadDocumentsIv();\n break;\n default:\n this.logger.warn('Not supported ActionID. ActionID = ' + postMessageData.ActionId);\n break;\n }\n }\n\n\n}\n\nexport default ExternalLinkMembershipHandler;","import ExternalLinksBaseHandler from '../external_links_base_handler';\nimport {MY_ACCOUNT_POST_ACTIONS} from './external_links_my_account_handler_consts';\nimport _ from '../../../../utils/underscore';\nimport * as EXTERNAL_LINKS_CONSTS from '../../external_links_consts';\nimport ServiceFactory from '../../../../services/service_factory';\nimport {OMG_POST_ACTIONS} from \"../omg/external_links_omg_handler_consts\";\nimport Event from \"../../../../utils/event\";\nimport {SYSTEM_EVENTS} from \"../../../../events/events\";\nimport {NAVIGATION_VIEWS} from \"../../external_links_consts\";\nimport Device from \"../../../../utils/device/device\";\nimport {PRIORITY_LEVEL} from \"../../../../services/overlay_manager/overlay_manager_levels\";\n\n\n/**\n *\n */\nclass ExternalLinksMyAccountHandler extends ExternalLinksBaseHandler {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ExternalLinksMyAccountHandler';\n static HandlerName = 'my_account';\n\n /**\n * Overrides base class\n * @param postMessageData\n */\n\texecutePostMessageAction(postMessageData) {\n let postDataObjLower = _.toLowerCaseKeys(postMessageData);\n switch (postDataObjLower.actionid.toString()) {\n\t\t\tcase MY_ACCOUNT_POST_ACTIONS.EXTERNAL_URL:\n\t\t\t\tlet navView = Device.isMobile() ? NAVIGATION_VIEWS.IFRAME : NAVIGATION_VIEWS.WINDOW;\n\t\t\t\t/* 'addCloseOption' param is drilled down into external link component for add close overlay option.)\n\t\t\t\t\tnow it's disabled by css for mobile external link overlay */\n\t\t\t\tthis.openExternalLink({sourceLink: postMessageData.url, addCloseOption: true, view: navView, priorityLevel: PRIORITY_LEVEL.INTERNAL_OVER_EXTERNAL_LINK});\n\t\t\t\tbreak;\n case MY_ACCOUNT_POST_ACTIONS.GAME:\n this.close();\n if (_.isUndefined(postDataObjLower.gameid) || _.isNull(postDataObjLower.gameid)) {\n this.logger.warn('GameId is undefined or empty. Unable to open real game from MyAccount');\n break;\n }\n this.openRealGame(postDataObjLower.gameid, postDataObjLower.origininformation.originDeepLinkID);\n break;\n case MY_ACCOUNT_POST_ACTIONS.RICH:\n this.close();\n let richPageUrl = ServiceFactory.create().integrationService().getRichPageUrl(postDataObjLower.campaignid);\n this._serviceFactory.windowService().redirect(richPageUrl);\n break;\n case MY_ACCOUNT_POST_ACTIONS.CASHIER:\n this._handleCashierOpening(postMessageData);\n this.close();\n break;\n case MY_ACCOUNT_POST_ACTIONS.QUICK_DEPOSIT:\n this._handleQuickDeposit(postMessageData);\n this.close();\n break;\n\t\t\tcase OMG_POST_ACTIONS.SPORT:\n\t\t\t\tthis.openExternalLink({\n\t\t\t\t\tsource: EXTERNAL_LINKS_CONSTS.GNWP_SOURCES.SPORT\n\t\t\t\t});\n\t\t\t\tthis.close();\n\t\t\t\tbreak;\n case MY_ACCOUNT_POST_ACTIONS.CASINO:\n //SpecificNavigation should be used only from OMG\n if (postDataObjLower.specificnavigation) {\n //add logic here\n }\n //TODO maybe it is prefer to check if we are on the same web site, and do not redirect in this case\n this._serviceFactory.windowService().redirect(ServiceFactory.create().integrationService().getLobbyUrlLink());\n this.close();\n break;\n case MY_ACCOUNT_POST_ACTIONS.CLOSE:\n this.close();\n break;\n case MY_ACCOUNT_POST_ACTIONS.INTERNAL_URL:\n\t\t\t this._openInternalLink(postMessageData);\n\t\t\t break;\n default:\n this.logger.warn('Not supported ActionID. ActionID = ' + postDataObjLower.actionid);\n break;\n }\n }\n\n\n\n getHandlerName() {\n return ExternalLinksMyAccountHandler.HandlerName;\n }\n\n\n\t/**\n\t * Open Internal Link url over the same page\n\t * @private\n\t */\n\t_openInternalLink(postData) {\n\t\tif (postData && postData.Url) {\n\t\t\t//verify if it's internal url\n\t\t\tif (this._serviceFactory.windowService().getDomain() === this._serviceFactory.windowService().extractDomain(postData.Url)) {\n this._serviceFactory.windowService().redirect(postData.Url);\n\t\t\t} else {\n\t\t\t\tthis.logger.error('Redirect to internal url ' + postData.Url + ' has been prevented. ' + postData.Url + ' is not an internal url of ' + this._serviceFactory.windowService().getDomain());\n\t\t\t\tEvent.fire(SYSTEM_EVENTS.INTERNAL_URL_NAVIGATION, {url: postData.Url});\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport default ExternalLinksMyAccountHandler;","import ExternalLinksBaseHandler from '../external_links_base_handler';\nimport * as EXTERNAL_LINKS_CONSTS from '../../external_links_consts';\nimport {OMG_POST_ACTIONS} from './external_links_omg_handler_consts';\nimport Device from '../../../../utils/device/device';\nimport ServiceFactory from '../../../../services/service_factory';\nimport {PRODUCT_PACKAGE_MAP} from '../external_links_base_handler_consts';\nimport {CHANNEL_SOURCE} from \"../../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core/lib/apps/app-enums\";\n\nclass ExternalLinksOMGHandler extends ExternalLinksBaseHandler {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ExternalLinksOMGHandler';\n static HandlerName = 'omg';\n\n /**\n * decide if iframe needs to be displayed\n *\n */\n display() {}\n\n\n getAcceptedSourcesMap() {\n return [\n PRODUCT_PACKAGE_MAP.OMG_PP_ID\n ];\n }\n\n\n /**\n * Overrides base class executePostMessageAction\n * @param postMessageData\n * @returns {handleResult}\n */\n executePostMessageAction(postMessageData) {\n const actionId = postMessageData.ActionId.toString();\n this._sendAnalytic(actionId);\n switch (actionId) {\n case OMG_POST_ACTIONS.SHOW_ME:\n let dimensions = {width: postMessageData.Width, height: postMessageData.Height};\n if (Device.isMobile()) {\n this.componentControllerRef.addAttrToIframe('scrolling', 'no');\n }\n // clearTimeout(this._showMeTimer);\n // this.componentControllerRef.openAwaitOverlay();\n this.componentControllerRef.setSize(dimensions).display();\n break;\n case OMG_POST_ACTIONS.MY_ACCOUNT:\n this.close();\n this.openExternalLink({\n source: EXTERNAL_LINKS_CONSTS.GNWP_SOURCES.MY_ACCOUNT,\n options: Object.assign(postMessageData.TabId ? {tabId: postMessageData.TabId} : {})\n });\n break;\n case OMG_POST_ACTIONS.CASHIER:\n this.close();\n this.openCashier(postMessageData, {\n source: CHANNEL_SOURCE.omg,\n area: AreaType.OMG,\n element: OMG_POST_ACTIONS.CASHIER\n });\n break;\n case OMG_POST_ACTIONS.QUICK_DEPOSIT:\n this.close();\n const options = postMessageData.PromCode ? {PromCode: postMessageData.PromCode} : {};\n this._serviceFactory.cashierProxyService().openDeposit({\n ...options,\n channel: {\n source: CHANNEL_SOURCE.omg,\n area: AreaType.OMG,\n element: OMG_POST_ACTIONS.QUICK_DEPOSIT\n }\n });\n break;\n case OMG_POST_ACTIONS.OPEN_REAL_GAME:\n this.close();\n this.openRealGame(postMessageData.GameId);\n break;\n case OMG_POST_ACTIONS.OPEN_ANONYMOUS_GAME:\n this.close();\n this.openAnonymousGame(postMessageData.GameId);\n break;\n case OMG_POST_ACTIONS.SPORT:\n this.close();\n this.openExternalLink({\n source: EXTERNAL_LINKS_CONSTS.GNWP_SOURCES.SPORT\n });\n break;\n case OMG_POST_ACTIONS.EXTERNAL_LINK:\n this.close();\n this.openExternalLink({\n source: postMessageData.Url,\n view: EXTERNAL_LINKS_CONSTS.NAVIGATION_VIEWS.IFRAME\n });\n break;\n\n case OMG_POST_ACTIONS.INTERNAL_URL:\n this.close();\n this._openInternalLink(postMessageData);\n break;\n case OMG_POST_ACTIONS.CLOSE_ME:\n this.componentControllerRef.closeLink();\n break;\n case OMG_POST_ACTIONS.RICH:\n this.close();\n let richPageUrl = ServiceFactory.create().integrationService().getRichPageUrl(postMessageData.campaignID);\n this._serviceFactory.windowService().redirect(richPageUrl);\n break;\n default:\n this.logger.warn('Not supported ActionID. ActionID = ' + postMessageData.ActionId);\n break;\n }\n }\n\n\n /**\n * Open Internal Link url over the same page\n * @private\n */\n _openInternalLink(postData) {\n if (postData && postData.Url) {\n let internalLink = postData.Url;\n if(Device.hybrid.isEmbedded){\n //when it is internal link we need to redirect to the Hybrid localhost and not to the full url\n internalLink = this._serviceFactory.hybridService().getRedirectInternalPageUrl(postData.Url);\n }\n\n this._serviceFactory.windowService().redirect(internalLink);\n }\n }\n\n\n /**\n * Open real game by gameType.\n * Function extracts game name automatically from game type mapper\n *\n * @param gameType\n * @private\n */\n _openGame(gameType, isReal) {\n this.componentControllerRef.closeLink();\n if(isReal) {\n return super.openRealGame(gameType);\n } else {\n return super.openAnonymousGame(gameType);\n }\n\n }\n\n\n getHandlerName() {\n return ExternalLinksOMGHandler.HandlerName;\n }\n\n\n /**\n * Prepare and send analytics\n * @param analyticObject\n * @private\n */\n _sendAnalytic(actionId) {\n this.sendAnalytics({\n category: 'Client_OMG',\n action: Object.keys(OMG_POST_ACTIONS).find(k => OMG_POST_ACTIONS[k] === actionId)\n });\n }\n}\n\nexport default ExternalLinksOMGHandler;","import ExternalLinksBaseHandler from '../external_links_base_handler';\nimport ServiceFactory from '../../../../services/service_factory';\nimport {MEMBERSHIP_POST_ACTIONS} from \"../membership/external_links_membership_handler_consts\";\nimport {POST_ACTIONS} from \"../../../../events/post_actions\";\nconst PENDING_APPS_POST_ACTIONS = {\n CLOSE: 'pending' // no idea why they send 'pending' when they want to close the pending screen but it is what it is\n};\nexport default class ExternalLinksPendingLoginHandler extends ExternalLinksBaseHandler {\n static CLASS = 'ExternalLinksPendingLoginHandler';\n static HandlerName = 'pending_login';\n\n executePostMessageAction(postMessageData) {\n //Actions that need with auto login before\n if (postMessageData.Token) {\n this.close();\n ServiceFactory.create().oAuth2Service().runAutoLogin(postMessageData.Token, null, postMessageData?.originInformation?.originProductPackageID).then(()=> {\n if(postMessageData.ActionId) {\n switch (postMessageData.ActionId.toString()) {\n case MEMBERSHIP_POST_ACTIONS.UPLOAD_DOCUMENTS_IV:\n this.close(POST_ACTIONS.CLOSE);\n this._handleUploadDocumentsIv();\n break;\n default:\n this.logger.warn('Not supported ActionID. ActionID = ' + postMessageData.ActionId);\n break;\n }\n }\n });\n }\n else{\n //action without Auto login\n switch (postMessageData.ActionId.toString().toLowerCase()) {\n case MEMBERSHIP_POST_ACTIONS.SHOW_LOGIN:\n this.close();\n this.handleOpenWebLogin();\n break;\n case PENDING_APPS_POST_ACTIONS.CLOSE:\n this.close();\n break;\n default:\n this.logger.warn('Not supported ActionID. ActionID = ' + postMessageData.ActionId);\n break;\n }\n }\n }\n\n getHandlerName() {\n return ExternalLinksPendingLoginHandler.HandlerName;\n }\n}","import ExternalLinksBaseHandler from '../external_links_base_handler';\nimport ServiceFactory from '../../../../services/service_factory';\n\nexport default class ExternalLinksPendingPlayHandler extends ExternalLinksBaseHandler {\n static CLASS = 'ExternalLinksPendingPlayHandler';\n static HandlerName = 'pending_play';\n\n executePostMessageAction(postMessageData) {\n if(postMessageData.Token) {\n this.close();\n ServiceFactory.create().pendingActionService().executeAction();\n } else {\n if ((postMessageData.ActionId || '').toLowerCase() === 'pending') {\n this.close();\n }\n this._clearOpenGamePendingAction();\n }\n }\n\n onBtnCloseClicked() {\n super.onBtnCloseClicked();\n this._clearOpenGamePendingAction();\n }\n\n getHandlerName() {\n return ExternalLinksPendingPlayHandler.HandlerName;\n }\n\n _clearOpenGamePendingAction() {\n ServiceFactory.create().pendingActionService().clearPendingAction();\n }\n\n}","/**\n * Created by florinia on 09/10/2017.\n */\nimport ExternalLinksBaseHandler from '../external_links_base_handler';\nimport * as EXTERNAL_LINKS_CONSTS from '../../external_links_consts';\nimport {PRODUCT_PACKAGE_MAP} from '../external_links_base_handler_consts';\nimport Event from \"../../../../utils/event\";\nimport {SYSTEM_EVENTS} from \"../../../../events/events\";\n\nconst RICH_POST_ACTIONS = {\n OPEN_REAL_GAME: '1',\n OPEN_ANONYMOUS_GAME: '36',\n CASHIER: '6',\n\tSPORT: '24',\n EXTERNAL_URL: '27',\n REMOVE_INDICATION: '64',\n};\n\nclass ExternalLinksRichHandler extends ExternalLinksBaseHandler {\n static CLASS = 'ExternalLinksRichHandler';\n static HandlerName = 'rich';\n\n\n\tgetAcceptedSourcesMap() {\n\t\treturn [\n\t\t\tPRODUCT_PACKAGE_MAP.RICH_PP_ID\n\t\t];\n\t}\n\n\n /**\n * Overrides base class\n * @param postMessageData\n */\n\texecutePostMessageAction(postMessageData) {\n switch (postMessageData.ActionId.toString()) {\n case RICH_POST_ACTIONS.EXTERNAL_URL:\n this.close();\n this._serviceFactory.windowService().redirect(postMessageData.Url);\n break;\n case RICH_POST_ACTIONS.CASHIER:\n this.openCashier(postMessageData);\n break;\n case RICH_POST_ACTIONS.OPEN_REAL_GAME:\n this.openRealGame(postMessageData.GameId);\n break;\n case RICH_POST_ACTIONS.OPEN_ANONYMOUS_GAME:\n this.openAnonymousGame(postMessageData.GameId);\n break;\n\t\t\tcase RICH_POST_ACTIONS.SPORT:\n\t\t\t\tthis.close();\n\t\t\t\tthis.openExternalLink({\n\t\t\t\t\tsource: EXTERNAL_LINKS_CONSTS.GNWP_SOURCES.SPORT\n\t\t\t\t});\n\t\t\t\tbreak;\n case RICH_POST_ACTIONS.REMOVE_INDICATION:\n Event.fire(SYSTEM_EVENTS.DAILY_DEAL_REMOVE_INDICATION);\n break;\n default:\n // maybe should throw an Exception here\n break;\n }\n }\n\n}\n\nexport default ExternalLinksRichHandler;","import ExternalLinksBaseHandler from '../external_links_base_handler';\n\n/**\n * Handler for FYP\n */\nclass ExternalLinksSportHandler extends ExternalLinksBaseHandler {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ExternalLinksSportHandler';\n static HandlerName = 'sport';\n\n /**\n * Overrides base class executePostMessageAction\n * @param postMessageData\n */\n\texecutePostMessageAction(postMessageData) {\n }\n\n}\n\nexport default ExternalLinksSportHandler;","module.exports = \"
\\n
\\n
\\n\\n\\n\\n\\n\";","module.exports = \"
\\n
\\n
\";","module.exports = \"
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n
{amount | inject}
\\n
{voucherName | inject}
\\n
\\n
{balance | inject}
\\n
\\n
\\n
{expiration | inject}
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n
{voucherName | inject}
\\n
{voucherDesc | inject}
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\";","module.exports = \"
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n
\";","module.exports = \"
\\n {voucherTitle | inject}\\n
\\n
\\n\\n
\";","module.exports = \"
\\n
\\n
\\n
\\n
\\n\\n
\\n
{gameTitle | inject}
\\n
\\n
\\n
\\n\\n
\\n \\n \\n
\\n\\n
\";","module.exports = \"
\\n {free_play_message_voucher_games_title | translate}{free_play_message_voucher_title_good_luck | translate}\\n
\\n\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n
\\n
\\n
\";","module.exports = \"
\\n \\n
\";","module.exports = \"
\\n
\\n
\\n
{free_play_message_back_to_vouchers | translate}\\n
\\n
\\n
{free_play_message_no_vouchers | translate}
\\n
\\n\\n
\\n
\\n
\\n\\n
\\n\\n\\n\\n\";","module.exports = \"
\\n
\\n\";","module.exports = \"
\\n
\\n
\\n
\";","module.exports = \"{game_window_sessionid | translate}\";","module.exports = \"
\\n
\\n \\n
\\n
{}
\\n
\";","module.exports = \"
\\n
{session_timer_description | translate}
\\n
\\n
\\n
\\n
\\n
\";","module.exports = \"
\\n {rgLabel | inject}\\n
\";","var map = {\n\t\"./ab_testing/ab_testing_service.ts\": 731,\n\t\"./ai_list/ai_list_service.ts\": 1018,\n\t\"./analytics/analytics_service.ts\": 732,\n\t\"./blue_ribbon/blue_ribbon_service.ts\": 976,\n\t\"./bonus_abuse/bonus_abuse_parking_money_in_sport_and_poker_service.ts\": 737,\n\t\"./cashier_proxy/cashier_proxy_service.ts\": 738,\n\t\"./clock/clock_service.ts\": 739,\n\t\"./company_selector/company_selector_service.js\": 740,\n\t\"./component_factory/component_factory_service.js\": 992,\n\t\"./component_tester/component_tester_service.js\": 742,\n\t\"./config/config_service.ts\": 306,\n\t\"./country/country_service.ts\": 1019,\n\t\"./currency/currency_service.ts\": 1020,\n\t\"./domain_detection/domain_detection_service.ts\": 746,\n\t\"./evolution/evolution_service.ts\": 747,\n\t\"./free_play/free_play_service.ts\": 1021,\n\t\"./game/game_service.js\": 978,\n\t\"./game/max_one_open_game_service.ts\": 749,\n\t\"./game_conversion/game_conversion_service.js\": 1022,\n\t\"./game_manager/game_manager_service.js\": 1023,\n\t\"./game_reason/game_reason_service.js\": 1024,\n\t\"./games_correlation/games_correlation_service.js\": 750,\n\t\"./games_information/games_information_service.ts\": 993,\n\t\"./games_questionnaire/games_questionnaire_service.ts\": 1025,\n\t\"./geo_location/geo_service.ts\": 983,\n\t\"./gnwp/gnwp_service.ts\": 1003,\n\t\"./history/history_service.ts\": 751,\n\t\"./http/http2_service.ts\": 1026,\n\t\"./hybrid/hybrid_service.js\": 333,\n\t\"./hybrid/hybrid_version_handler_service.js\": 1027,\n\t\"./idle_recommendations/idle_recommendations_service.ts\": 1028,\n\t\"./integration/integration_service.js\": 994,\n\t\"./jackpot_toasters/jackpot_toasters_service.ts\": 1029,\n\t\"./language/language_service.ts\": 765,\n\t\"./live_feeds/jackpots/jackpot_feeds_service.ts\": 995,\n\t\"./live_tables/live_tables_service.ts\": 1030,\n\t\"./loyalty/loyalty_service.ts\": 766,\n\t\"./menu/menu_service.js\": 1031,\n\t\"./message_manager/message_manager_service.ts\": 996,\n\t\"./net_position/net_position_service.ts\": 769,\n\t\"./netent/netent_service.ts\": 1032,\n\t\"./oauth/oauth2_service.js\": 979,\n\t\"./oauth/user/user_service.ts\": 773,\n\t\"./observable_factory/observable_factory_service.ts\": 774,\n\t\"./omg/omg_service.js\": 775,\n\t\"./open_link/open_link_service.js\": 776,\n\t\"./open_sessions/open_sessions_service.ts\": 777,\n\t\"./orbit_component_renderer/orbit_component_render_service.ts\": 778,\n\t\"./overlay_manager/overlay_manager_service.ts\": 984,\n\t\"./pariplay/pariplay_service.ts\": 781,\n\t\"./pending_action/pending_action_service.js\": 1033,\n\t\"./player_messages_service/fallback/fallback_service.js\": 1034,\n\t\"./player_messages_service/firebase/firebase_elastic_service.ts\": 783,\n\t\"./player_messages_service/player_messages_service.js\": 985,\n\t\"./post_message/post_message_service.js\": 788,\n\t\"./query_string_detector/query_string_detector_service.js\": 789,\n\t\"./recently_played/recently_played_service.ts\": 790,\n\t\"./red_tiger/red_tiger_service.ts\": 791,\n\t\"./regulation/regulation_service.js\": 997,\n\t\"./resize_detector/resize_detector_service.js\": 1035,\n\t\"./restrictions/restrictions_service.ts\": 981,\n\t\"./safezone_loader/safezone_loader_service.ts\": 802,\n\t\"./script_loader/script_loader_service.ts\": 803,\n\t\"./skin/skin_service.ts\": 980,\n\t\"./structured_logging/structured_logging_service.ts\": 986,\n\t\"./themes/themes_service.js\": 1004,\n\t\"./third_party_free_play/third_party_free_play_service.ts\": 804,\n\t\"./time/time_service.ts\": 805,\n\t\"./toaster/toaster_service.ts\": 998,\n\t\"./trackjs/trackjs_service.ts\": 806,\n\t\"./triple_eight/triple_eight_service.ts\": 808,\n\t\"./visibility_detector/visibility_detector_service.ts\": 809,\n\t\"./wallet/wallet_service.js\": 810,\n\t\"./web_login/web_login_service.js\": 987,\n\t\"./web_push/web_push_service.ts\": 889,\n\t\"./window/window_service.ts\": 890\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 730;","import BaseService from '../../base/base_service';\nimport _ from '../../utils/underscore';\nimport { IAbTestingData } from \"./ab_testing_service_interface\";\nimport { SYSTEM_EVENTS } from '../../events/events';\nimport IAbTestingService from './ab_testing_service_interface';\nimport { IAbTestingFeatureProperties } from '../../../../common/interfaces/ab-testing-interface';\nimport Store from '../../utils/store';\nimport Device from '../../utils/device/device';\n\nconst AB_TESTING_DATA_LOCAL_STORAGE_KEY = \"ABTestingDataForUser\";\nconst AB_TESTING_ANONYMOUS_PLAYER_ID_LOCAL_STORAGE_KEY = \"ABTestingAnonymousPlayerId\";\n\ninterface AbTestingServiceParams {\n enableABFiltering: true;\n isAnonymousPlayerSupportEnabled: boolean;\n getTestsForAnonymousPlayerUrl: string;\n}\n\n\nexport default class AbTestingService extends BaseService implements IAbTestingService {\n\n static CLASS = 'AbTestingService';\n\n private _params: AbTestingServiceParams;\n\n private _cachedABTestingData: IAbTestingData;\n\n private _anonymousPlayerId: string = null;\n\n private _anonymousPlayerData: IAbTestingData = {\n ErrorDescription: \"\",\n Features: {},\n AnonymousPlayerId: null\n };\n\n public init(params: AbTestingServiceParams): void {\n super.init(params);\n\t\tthis._params = params;\n this._resetCache();\n this._subscribe();\n }\n\n onInitializationCompleted(): Promise {\n this._readAbTestingDataFromToken();\n this._updateAnonymousAbTestingData();\n return super.onInitializationCompleted();\n }\n\n private _subscribe(): void {\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, () => {\n this._resetCacheData();\n });\n }\n\n private _resetCacheData(): void {\n this._resetCache();\n this._readAbTestingDataFromToken();\n }\n\n private _resetCache(): void {\n this._cachedABTestingData = {\n ErrorDescription: null,\n Features: {},\n AnonymousPlayerId: null\n };\n }\n\n getAnonymousPlayerId(): string {\n return this._anonymousPlayerId;\n }\n\n getAbTestingDataForFeature(featureName: string): IAbTestingFeatureProperties {\n if (this._cachedABTestingData?.Features) {\n const feature: IAbTestingFeatureProperties = this._cachedABTestingData.Features[featureName];\n if (feature?.Properties) {\n if(feature.Properties.featureToggle){\n const toggle: string = feature.Properties.featureToggle.toString().toLowerCase();\n if(toggle === \"false\") return null;\n }\n return feature;\n }\n }\n return null;\n }\n\n getAnonymousPlayerAbTestingDataForFeature(featureName: string): IAbTestingFeatureProperties {\n if (this._anonymousPlayerData?.Features) {\n const feature: IAbTestingFeatureProperties = this._cachedABTestingData.Features[featureName];\n if (feature?.Properties) {\n if(feature.Properties.featureToggle){\n const toggle: string = feature.Properties.featureToggle.toString().toLowerCase();\n if(toggle === \"false\") return null;\n }\n return feature;\n }\n }\n return null;\n }\n\n private async _updateAnonymousAbTestingData(): Promise {\n if (!this._params.isAnonymousPlayerSupportEnabled || this.serviceFactory.oAuth2Service().isAuthorized()) {\n return;\n }\n\n if (!this._anonymousPlayerId) {\n this._anonymousPlayerId = this._getLocalStorageAnonymousPlayerId();\n }\n\n try {\n const request: any = {\n brandId: this.serviceFactory.skinService().getBrandID(),\n subBrandId: this.serviceFactory.skinService().getSubBrandID(),\n countryCode: this.serviceFactory.countryService().getCountry(),\n isMobile: Device.os.isMobileOS\n };\n if (this._anonymousPlayerId) {\n request.anonymousPlayerId = this._anonymousPlayerId;\n }\n this._anonymousPlayerData = await this.serviceFactory.http2Service().post(this._params.getTestsForAnonymousPlayerUrl, request);\n if (!this._anonymousPlayerId && this._anonymousPlayerData?.AnonymousPlayerId) {\n //we got new anonymous id to save and store\n this._anonymousPlayerId = this._anonymousPlayerData.AnonymousPlayerId;\n this._saveLocalStorageAnonymousPlayerId();\n }\n }\n catch (err) {\n this.logger.error(`AbTestingService.FetTestsForAnonymousPlayer failed`, err);\n }\n }\n\n getAbTestingData(): { [key: string]: IAbTestingFeatureProperties } {\n if (this._cachedABTestingData?.Features && !this._cachedABTestingData.ErrorDescription) {\n const result: { [key: string]: IAbTestingFeatureProperties } = {};\n for (const featureName in this._cachedABTestingData.Features) {\n result[featureName] = this.getAbTestingDataForFeature(featureName);\n }\n return result;\n } else {\n return null;\n }\n }\n\n private _readAbTestingDataFromToken(): void {\n const abTestingDataTokenProperty = this.serviceFactory.oAuth2Service().extractTokenProperty('abTestingData');\n if (abTestingDataTokenProperty) {\n this._cachedABTestingData = _.safeJSON(abTestingDataTokenProperty);\n this._saveLocalStorageABTestingData();\n if (this._cachedABTestingData.AnonymousPlayerId &&\n this._cachedABTestingData.AnonymousPlayerId !== this._anonymousPlayerId\n ) {\n if (this._anonymousPlayerId) {\n this.logger.warn(`For user ${this.serviceFactory.userService().getCID()} existing anonymous id ${this._anonymousPlayerId} was replaced by token anonymous id ${this._cachedABTestingData.AnonymousPlayerId}`)\n } else {\n this.logger.debug(`For user ${this.serviceFactory.userService().getCID()} anonymous id was set with token anonymous id ${this._cachedABTestingData.AnonymousPlayerId}`)\n }\n this._anonymousPlayerId = this._cachedABTestingData.AnonymousPlayerId;\n this._saveLocalStorageAnonymousPlayerId();\n }\n } else {\n const localStorageABTestingData = this._getLocalStorageABTestingData();\n if (localStorageABTestingData) {\n this._cachedABTestingData = localStorageABTestingData;\n }\n }\n }\n\n private _saveLocalStorageABTestingData(): void {\n const abTestingData = this._cachedABTestingData;\n if (abTestingData && !abTestingData.ErrorDescription) {\n Store.set(AB_TESTING_DATA_LOCAL_STORAGE_KEY, JSON.stringify(abTestingData));\n }\n }\n\n private _getLocalStorageAnonymousPlayerId(): string {\n return Store.get(AB_TESTING_ANONYMOUS_PLAYER_ID_LOCAL_STORAGE_KEY, null);\n }\n\n private _saveLocalStorageAnonymousPlayerId(): void {\n Store.set(AB_TESTING_ANONYMOUS_PLAYER_ID_LOCAL_STORAGE_KEY, this._anonymousPlayerId);\n }\n\n private _getLocalStorageABTestingData(): IAbTestingData {\n return JSON.parse(Store.get(AB_TESTING_DATA_LOCAL_STORAGE_KEY, null));\n }\n}\n","import _ from '../../utils/underscore';\nimport BaseService from '../../base/base_service';\nimport Event from '../../utils/event';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport IAnalyticsService, { AnalyticsServiceInitParams, IAnalyticsData } from './analytics_service_interface';\nimport { IElasticEventData } from '../../../../common/interfaces/structured-logging-service-interface';\n\nconst GTM_URL = 'www.googletagmanager.com/gtm.js';\nconst PROD_DATA_LAYER_NAME = 'dataLayer';\n\nclass AnalyticsService extends BaseService implements IAnalyticsService{\n\n static CLASS: string = 'AnalyticsService';\n private _initParams: AnalyticsServiceInitParams = null;\n private _GTMDataLayer: any = null;\n\n private _isInitialisedByB2C: boolean = false;\n\n init(params: AnalyticsServiceInitParams) {\n super.init(params);\n this._setInitParams(params);\n this._subscribe();\n }\n\n private _setInitParams(params: AnalyticsServiceInitParams): void {\n this._initParams = {\n GTMContainerID: params.GTMContainerID,\n UATrackingID: params.UATrackingID,\n GTMDataLayerName: params.GTMDataLayerName\n };\n this._initGTMDataLayer();\n }\n\n private _initGTMDataLayer(): void {\n this._GTMDataLayer = {\n cgpIsAuthenticated: false,\n cgpIsRegistered: false,\n cgpCID: undefined,\n cgpIsFTD: false,\n cgpPlayerStatus: undefined,\n cgpLoginSessionID: undefined\n };\n }\n\n\n private _loadGTM(document: Document, dataLayerName: string, GTMContainerId: string): void {\n this.pushDataToDataLayer({'gtm.start': new Date().getTime(), 'event': 'gtm.js'});\n\n const firstScript: HTMLScriptElement = document.getElementsByTagName(\"script\")[0];\n\n const newScript: HTMLScriptElement = document.createElement(\"script\");\n const dataLayer: string = dataLayerName !== PROD_DATA_LAYER_NAME ? '&l=' + dataLayerName : '';\n newScript.async = true;\n newScript.src = '//' + GTM_URL + '?id=' + GTMContainerId + dataLayer;\n firstScript.parentNode.insertBefore(newScript, firstScript);\n }\n\n\n /**\n * Gathering analytic data from CGP\n *\n * @returns {*}\n * @private\n */\n private _getCGPEventData(): any {\n this._initGTMDataLayer();\n // tslint:disable-next-line:no-console\n console.log(\"PASSED\");\n const dataLayer = this._GTMDataLayer;\n\n // get authorized data\n if (this.serviceFactory.oAuth2Service().isAuthorized()) {\n // authorization data\n dataLayer.cgpLoginSessionID = +this.serviceFactory.oAuth2Service().getToken().sessionId;\n\n // user service data\n const accountData = this.serviceFactory.userService().getAccountData();\n if (accountData) {\n dataLayer.cgpCID = accountData.Cid;\n dataLayer.cgpIsVip = accountData.IsVip;\n }\n\n // b2c data\n const b2cData = this._getB2CData();\n if (b2cData && b2cData.sessionParamsMsg) {\n dataLayer.cgpPlayerStatus = b2cData.sessionParamsMsg.PlayerStatus;\n dataLayer.cgpIsFTD = b2cData.sessionParamsMsg.IsFTD;\n dataLayer.cgpIsRegistered = b2cData.sessionParamsMsg.IsRegistered;\n dataLayer.cgpIsAuthenticated = b2cData.sessionParamsMsg.IsAuthenticated;\n }\n }\n\n dataLayer.cgpExperiment = undefined;\n\n return dataLayer;\n }\n\n /**\n * Extract b2c data\n * @returns {any}\n * @private\n */\n private _getB2CData(): any {\n const b2cData = this.serviceFactory.oAuth2Service().extractTokenProperty('b2c');\n if (b2cData) {\n return JSON.parse(b2cData);\n }\n }\n\n /**\n * Temp function to select B2C dataLayer if initialized before our dataLayer (Use their over ours)\n */\n _selectPlatformDataLayerIfExists() {\n if(window[PROD_DATA_LAYER_NAME]) {\n this._initParams.GTMDataLayerName = PROD_DATA_LAYER_NAME;\n this._isInitialisedByB2C = true;\n }\n }\n\n /**\n * initialization of datalayer and GTM\n * @private\n */\n private _initGTM(): void {\n const dataLayerName = this._initParams.GTMDataLayerName;\n\n window[dataLayerName] = window[dataLayerName] || [];\n this.pushDataToDataLayer(this._createDataLayer());\n\n if (!this._isInitialisedByB2C) {\n this._loadGTM(document, this._initParams.GTMDataLayerName, this._initParams.GTMContainerID);\n }\n }\n\n\n private _subscribe(): void {\n this.onSystemEvent(SYSTEM_EVENTS.ON_INIT_COMPLETE, () => {\n this._selectPlatformDataLayerIfExists();\n this._initGTM();\n });\n\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, () => {\n this.pushDataToDataLayer(this._createDataLayer());\n });\n\n this.onSystemEvent(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, (data) => {\n this._sendAnalytics(data);\n });\n }\n\n\n private _sendAnalytics(data: IAnalyticsData): void {\n const dataToSend = Object.assign({},\n {\n event: data.eventName || 'CGP_GENERIC_EVENT',\n CGP_EventCategory: data.category,\n CGP_EventAction: data.action,\n CGP_EventLabel: data.label,\n CGP_EventValue: data.value\n });\n\n if (!data.omitStructuredLogger) {\n this._sendAnalyticsToElasticSearch(data);\n }\n\n this.pushDataToDataLayer(dataToSend);\n this._resetDataLayer();\n }\n\n private _sendAnalyticsToElasticSearch(data: IAnalyticsData) {\n const dataToSend: IElasticEventData = {\n CGPEventCategory: data.category,\n CGPEventAction: data.action,\n CGPEventLabel: data.label,\n CGPEventValue: data.value\n };\n\n if (!_.isNullOrUndefined(dataToSend.CGPEventValue)) {\n const valueAsNumber = (dataToSend.CGPEventValue as any) * 1;\n if (_.isNumber(valueAsNumber)) {\n dataToSend.CGPEventValueAsNumber = valueAsNumber;\n }\n }\n\n this.serviceFactory.structuredLoggingService().getLogger(dataToSend).info();\n }\n\n /**\n * Clear GTM dataLayer for avoid memory leak\n * GTM persists dataLayer properties, so in order to send each time the new data, we have to reset dataLayer at all, otherwise we should provide\n * undefined value for each property we don't want to send, for example user properties if they are not exist anymore\n * @private\n */\n private _resetDataLayer(): void {\n this._getDataLayerObject().pop();\n // window.google_tag_manager[this._model.getGTMContainerID()].dataLayer.reset();\n }\n\n private _getDataLayerObject(){\n return window[this._initParams.GTMDataLayerName] || {pop: () =>{} , push : ()=>{}};\n }\n\n\n /**\n * Get data layer object to be send\n * @returns {{} & any & any}\n * @private\n */\n private _createDataLayer(): any {\n return Object.assign({},\n {\n cgpUATrackingID: this._initParams.UATrackingID,\n },\n this._getCGPVersionInfo(),\n this._getCGPEventData());\n }\n\n\n private _getCGPVersionInfo(): any {\n const skinService = this.serviceFactory.skinService();\n return {\n cgpProductPackage: skinService.getProductPackageID(),\n cgpVersion: skinService.getVersion()\n };\n }\n\n public sendEvent(analyticsData: IAnalyticsData): void {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticsData);\n }\n\n\n private _getGoogleSessionObject() {\n const ga = this.serviceFactory.windowService().getGlobalProperty('ga');\n if (ga && _.isFunction(ga.getAll)) {\n return ga.getAll()[0] || {\n get: () => {}\n };\n } else {\n return {\n get: () => {}\n }\n }\n\n }\n\n public getGoogleSessionID(): string {\n return this._getGoogleSessionObject().get('linkerParam') || '';\n }\n\n public getGoogleClientID(): string {\n return this._getGoogleSessionObject().get('clientId') || '';\n }\n\n public pushDataToDataLayer(data:{}):void {\n this._getDataLayerObject().push(data);\n }\n\n}\n\nexport default AnalyticsService;","module.exports = \"
\\n
\\n
\\n\\n
\\n
\\n
\\n {title | inject}\\n
\\n
\\n {subtitle | inject}\\n
\\n
\\n\\n
\\n {value | inject}\\n
\\n
\\n
\\n\";","module.exports = \"
\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n {title | inject}\\n
\\n
\\n {subtitle | inject}\\n
\\n
\\n\\n
\\n {value | inject}\\n
\\n
\\n
\\n \\n
\\n\\n
\";","module.exports = \"
\\n
\\n
\\n
\\n {br_welcome_personal_jackpot | injectAndTranslate}\\n
\\n
\\n\\n
\\n
\\n
\\n {br_welcome_short_descr | injectAndTranslate}\\n
\\n
\\n {br_welcome_descr | injectAndTranslate}\\n
\\n
\\n
\\n
\\n\";","module.exports = \"\\n\";","import BaseService from \"../../base/base_service\";\nimport {SYSTEM_EVENTS} from \"../../events/events\";\nimport Event from \"../../utils/event\";\nimport * as MDP_CONSTS from \"../../components/message/message_consts\";\nimport {CASHIER_ACTIONS, GNWP_SOURCES} from \"../../components/external_links/external_links_consts\";\n\ninterface IBetRejectedData {\n RejectionReasonId: number;\n GameTypeID: number;\n RealMoneyBalance: number;\n BetCurrencyCode: string;\n}\n\nconst BET_REJECT_REASON_ID_MAP = {\n 'Sport': 1,\n 'Poker': 2,\n 'PokerAndSport': 3,\n};\n\nexport default class BonusAbuseParkingMoneyInSportAndPokerService extends BaseService {\n static CLASS = \"BonusAbuseParkingMoneyInSportAndPokerService\";\n\n init() {\n this._subscribe();\n }\n\n private _subscribe() {\n this.onSystemEvent(SYSTEM_EVENTS.BONUS_ABUSE_PARKING_MONEY, this._showBonusAbuseParkingMoneyMessage)\n }\n\n private _showBonusAbuseParkingMoneyMessage(data: IBetRejectedData) {\n let contentText;\n switch(data.RejectionReasonId){\n case BET_REJECT_REASON_ID_MAP.Poker:\n contentText = `bonus_abuse_parking_money_text_poker_${data.RealMoneyBalance > 0 ? 'with' : 'without'}_real_money`;\n break;\n case BET_REJECT_REASON_ID_MAP.Sport:\n contentText = `bonus_abuse_parking_money_text_sport_${data.RealMoneyBalance > 0 ? 'with' : 'without'}_real_money`;\n break;\n case BET_REJECT_REASON_ID_MAP.PokerAndSport:\n contentText = `bonus_abuse_parking_money_text_poker_and_sport_${data.RealMoneyBalance > 0 ? 'with' : 'without'}_real_money`;\n break;\n }\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Bonus_Availability_Popup',\n action: 'Show' ,\n label: data.GameTypeID,\n value: data.RejectionReasonId\n });\n Event.fire(SYSTEM_EVENTS.MESSAGE_OPEN, {\n title: this.serviceFactory.languageService().translation('bonus_abuse_parking_money_title'),\n text: this.serviceFactory.languageService().translation(contentText, {\n RealMoneyBalance: this.serviceFactory.currencyService().formatMoney(data.RealMoneyBalance)\n }),\n closeButton: false,\n hasDefaultButton: false,\n contentAlign: MDP_CONSTS.TEXT_ALIGNMENT.LEFT,\n customCSSClassList: ['cgp-mdp-text-support-slash-n'],\n buttons: [\n {\n name: this.serviceFactory.languageService().translation('logged_in_cashier_btn'),\n callback: () => {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Bonus_Availability_Popup',\n action: 'CTA_Click' ,\n label: 'cashier_btn'\n });\n\n this.serviceFactory.openLinkService().openLink({\n source: GNWP_SOURCES.CASHIER,\n options: {sessionType: CASHIER_ACTIONS.FULL_CASHIER}\n });\n }\n },\n {\n name: this.serviceFactory.languageService().translation(this.serviceFactory.gameService().isGameRunning() ? 'close_game' : 'close_btn'),\n type: \"secondary\",\n callback: () => {\n let label = 'Close Message';\n if(this.serviceFactory.gameService().isGameRunning()) {\n label = 'Close Game';\n this.serviceFactory.gameService().closeRunningGame();\n }\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Bonus_Availability_Popup',\n action: 'CTA_Click' ,\n label: label\n });\n }\n }\n ],\n showPopupAboveSecondWebViewHybrid: true\n });\n }\n}\n","import ICashierProxy from \"./cashier_proxy_service_interface\";\nimport BaseService from \"../../base/base_service\";\nimport {\n ICashierService,\n OpenCashierOptions,\n OpenDepositOptions,\n OpenWithdrawOptions\n} from \"../../../../common/interfaces/cashier.service.interface\";\nimport {MarketingParams} from \"../../../../common/interfaces/marketing-params.interface\";\n\ninterface CashierProxyServiceParams {\n getCashierService: () => ICashierService;\n}\nexport default class CashierProxyService extends BaseService implements ICashierProxy {\n static CLASS = 'CashierProxyService';\n private _params: CashierProxyServiceParams;\n\n init(params: CashierProxyServiceParams) {\n this._params = params;\n }\n\n getProductPackage() {\n return this._params.getCashierService().getProductPackage();\n }\n\n openDeposit(options: OpenDepositOptions): Promise {\n return this._params.getCashierService().openDeposit(options);\n }\n \n openWithdraw(options: OpenWithdrawOptions): Promise {\n return this._params.getCashierService().openWithdraw(options);\n }\n\n openCashier(options?: OpenCashierOptions, marketingParams?: MarketingParams, resolveByCallback?: boolean): Promise {\n return this._params.getCashierService().openCashier(options, marketingParams, resolveByCallback);\n }\n openVerifyId(): Promise {\n return this._params.getCashierService().openVerifyId();\n }\n\n openOldCashier(options?: OpenCashierOptions): Promise {\n return this._params.getCashierService().openOldCashier(options);\n }\n\n}","import BaseService from '../../base/base_service';\nimport {CLOCK_CONSTS, CLOCK_LOCALIZATION} from './clock_service_consts';\nimport DOM from '../../utils/dom';\nimport Event from '../../utils/event';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport _ from \"../../utils/underscore\";\nimport IClockService, {\n ClockServiceInitParams,\n ClockServiceParsedInitParams,\n DateFormattedToRegulationOffset,\n} from './clock_service_interface';\nimport ReconnectHelper, {RetryItem} from \"../../utils/reconnect_helper\";\n\nexport const RETRY_INTERVALS: RetryItem[] = [\n {durationInSeconds:3, repeatTimes:3},\n {durationInSeconds:30, repeatTimes:0},\n];\n\nclass ClockService extends BaseService implements IClockService{\n static CLASS: string = 'ClockService';\n\n private _timeClockInterval: number = null;\n private _serverUpdateInterval: number = null;\n private _timeData: Date = null;\n private _updateOnce: boolean = null;\n private _initParams: ClockServiceParsedInitParams = null;\n private _regulationOffset: number = null;\n private _retryGetClockHelper: ReconnectHelper;\n\n init(params: ClockServiceInitParams) {\n super.init(params);\n\n this._setInitParams(params);\n this._subscribe();\n }\n\n private _setInitParams(params: ClockServiceInitParams): void {\n const clockUpdateFromServerInterval = params.clockUpdateFromServerInterval || CLOCK_CONSTS.DEFAULT_CLOCK_UPDATE_FROM_SERVER_INTERVAL;\n this._initParams = {\n getClockUrl: params.getClockUrl,\n clockUpdateFromServerInterval: TimeSpan.parse(clockUpdateFromServerInterval),\n };\n if (params) {\n this._getLocalDate = params.getLocalDate || this._getLocalDate;\n }\n }\n\n private _subscribe(): void {\n this.onSystemEvent(SYSTEM_EVENTS.ON_INIT_COMPLETE, this._onInitComplete);\n this.onSystemEvent(SYSTEM_EVENTS.APP_RESUMED, this._readServerClock);\n }\n\n private _onInitComplete(): void {\n this._tryReadServerClock();\n if (!this._serverUpdateInterval) {\n this._serverUpdateInterval = DOM.setInterval(() => this._tryReadServerClock(), this._initParams.clockUpdateFromServerInterval.totalMilliseconds);\n }\n }\n\n private _tryReadServerClock(){\n this._removeRetryReadClockHelper();\n this._retryGetClockHelper = this._createRetryReadClockHelper();\n this._retryGetClockHelper.start();\n }\n private _createRetryReadClockHelper() {\n return ReconnectHelper.create({\n retryFunc: () => this._readServerClock(),\n retryIntervals: RETRY_INTERVALS,\n name: 'CLOCK',\n });\n }\n\n private _removeRetryReadClockHelper() {\n if (!_.isNullOrUndefined(this._retryGetClockHelper)) {\n this._retryGetClockHelper.stop();\n this._retryGetClockHelper = null;\n }\n }\n\n private _restartTimerInterval(): void {\n if (this._timeClockInterval) {\n DOM.clearInterval(this._timeClockInterval);\n }\n this._timeClockInterval = DOM.setInterval(() => this._increaseTimer(),\n CLOCK_CONSTS.TIMER_UPDATE_INTERVAL, 'CLOCK_INCREMENT_INTERVAL_TIMER');\n }\n\n private _increaseTimer(): void {\n const utcTime = this._timeData.getTime();\n this._timeData = new Date(utcTime + CLOCK_CONSTS.TIMER_UPDATE_INTERVAL);\n }\n\n private _getClockLocalization(): string {\n return this.serviceFactory.regulationService().getClockLocalization();\n }\n\n public setServerTime(serverTime: string|number): void {\n this._timeData = new Date(serverTime);\n this._restartTimerInterval();\n }\n\n public setRegulationOffset(regOffset: number): void {\n this._regulationOffset = regOffset;\n }\n\n public getCurrentDate(): Date {\n return this._timeData || this._getLocalDate();\n }\n\n public getCurrentServerDate(): Date {\n return this._timeData;\n }\n\n public getRegulationOffset(): number {\n return this._regulationOffset;\n }\n\n private _getLocalDate(): Date {\n return new Date();\n }\n\n //Convert utc date to its equivalent in regulation timezone.\n public convertToRegulationTimeZone(date: Date): DateFormattedToRegulationOffset {\n date = date || this._getLocalDate();\n const useLocalTime = CLOCK_LOCALIZATION.LOCAL === this._getClockLocalization() || null == this.getRegulationOffset();// if offset not defined -> fallback to local time. Please note offset = 0 is accessible value\n if (!useLocalTime) {\n // convert to regulation date\n const utcTime = date.getTime();\n date = new Date(utcTime + this.getRegulationOffset());\n }\n return {\n date: date,\n isUTC: !useLocalTime\n };\n }\n\n private _readServerClock(): Promise {\n return this.serviceFactory.http2Service().post(this._initParams.getClockUrl)\n .then(response => {\n this.setServerTime((response as any).DateTimeUtcFormated);\n this.setRegulationOffset((response as any).RegulationOffsetInMilliseconds);\n this._timeUpdatedFromServer();\n }).catch(err => {\n this.logger.error('Failed to retrieve server clock', err);\n throw err;\n });\n }\n\n private _timeUpdatedFromServer(): void {\n if (!this._updateOnce) {\n Event.fire(SYSTEM_EVENTS.TIME_UPDATED_FROM_SERVER);\n this._updateOnce = true;\n }\n }\n\n // Decides which parameter to use regular or regulation\n // If exists regulation time use it without any conversion\n // if regulation parameter not excist - use regular and shift local PC timezone\n public formatToRegulationOffset(date: Date, dateFormattedToRegulation: Date): DateFormattedToRegulationOffset {\n let isUTC = false;\n // if we already have date in regulation timezone - use it\n if (!_.isNullOrUndefined(dateFormattedToRegulation)) {\n date = dateFormattedToRegulation;\n isUTC = true;\n }\n return {\n date: date,\n isUTC: isUTC\n };\n }\n}\nexport default ClockService;","import BaseService from '../../base/base_service';\n\nexport default class CompanySelectorService extends BaseService {\n static CLASS = 'CompanySelectorService';\n\n init(params) {\n super.init(params);\n }\n\n async getCompany(companyName) {\n let regulation = this.serviceFactory.regulationService().getRegulation();\n\n const dependenciesFactory = (await import('./dependencies/company_selector_service_dependencies_factory')).default.create({\n getServicesFactoryCallback: () => this.serviceFactory\n });\n let company = dependenciesFactory.companyImplementationReader().getCompany(companyName);\n let specificRegulatedCompany = dependenciesFactory.regulatedCompanySpecificImplementationReader().tryApplyRegulation(regulation, company);\n if(specificRegulatedCompany) {\n return specificRegulatedCompany;\n }\n\n return dependenciesFactory.regulatedCompanyDefaultImplementationReader().applyRegulation(regulation, company);\n }\n}","module.exports = \"
\\n\";","/**\n * Created by andreyna on 7/30/2017.\n */\nimport BaseService from '../../base/base_service';\nimport Event from '../../utils/event';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport DOM from '../../utils/dom';\nimport FreePlayComponent from '../../components/free_play/free_play_component_controller';\nimport ScrollableContainerComponent from '../../components/scrollable_container/scrollable_container_controller';\nimport TouchIDComponentController\n from '../../components/options/option_components/touch_id/touch_id_component_controller';\n\n\nclass ComponentTesterService extends BaseService {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'ComponentTesterService';\n\n /**\n * Factory method for creation components by name\n * @param componentName\n * @private\n */\n componentCreateMapper = {\n 'fp': {\n create: (params) => {\n return FreePlayComponent.create(params);\n }\n },\n 'scroll': {\n create: (params) => {\n let createHTMLElements = (count) => {\n let elements = [];\n for (let i = 0; i < count; i++) {\n elements.push(DOM.createElement('div',\n `
DIV${i}
`));\n }\n return elements;\n };\n return ScrollableContainerComponent.create(Object.assign({}, params, {\n items: createHTMLElements(20),\n arrowsPadding: [30, 20, 30, 20],\n itemGap: 5,\n scrollingStep: 1,\n //scrollingDuration: 1000,\n // grid: {\n // itemsInRow: 5,\n // gap: 10\n // },\n // direction: 'vertical'\n }));\n }\n },\n 'touch_id': {\n create: (params) => {\n return TouchIDComponentController.create(params);\n },\n skipOverlay: true\n }\n }\n\n /**\n *\n * @param params\n */\n init(params) {\n super.init(params);\n }\n\n\n /**\n * Create component by name and open it on Overlay\n * @param componentName\n */\n openComponentOnOverlay(componentName, params) {\n\n const componentMapper = this.componentCreateMapper[componentName];\n\n const component = componentMapper.create(params);\n component.start();\n\n if(!componentMapper.skipOverlay) {\n Event.fire(SYSTEM_EVENTS.OPEN_OVERLAY, {\n component,\n // el: component.getEl(),\n priority: this.componentCreateMapper[componentName].priority,\n isCloseBtnAllowed: true,\n isHasHeader: false,\n // additionalClasses: ['cgp-fp-vouchers-msg-dialog'],\n // contentAdditionalClasses: ['cgp-theme-property-corner-radius', 'cgp-theme-property-border-size', 'cgp-theme-property-border-color-secondary'],\n // openCallback: () => {\n // component.onAppendedToDOM();\n // //component.scrollTo(5);\n // //component.setStyle({arrowsPadding: [40, 30], direction: 'vertical', itemGap: 10});\n // },\n // closeCallback: () => {\n // //this.shutDown();\n // }\n });\n }\n }\n}\n\nexport default ComponentTesterService;","module.exports = \"
\\n \\n {touch_id_caption | translate}\\n \\n\\n
\\n \\n
\\n\\n \\n {touch_id_sub_caption | translate}\\n \\n\\n
\\n \\n \\n\\n \\n { touch_id_info | translate }\\n \\n
\\n
\";","module.exports = \"
\\n \\n {touch_id_caption | translate}\\n \\n\\n
\\n {touch_id_info_caption | translate}\\n\\n
\\n \\n \\n
\\n\\n
\\n
\";","import BaseService from \"../../base/base_service\";\nimport _ from '../../utils/underscore';\nimport Device from '../../utils/device/device';\nimport DOM from '../../utils/dom';\n\ninterface IParams {\n domains: string[];\n enable: boolean;\n}\n\nexport default class DomainDetectionService extends BaseService{\n static CLASS=\"DomainDetectionService\";\n\n _params: IParams;\n\n init(params: IParams){\n this._params = params;\n }\n\n onInitializationCompleted(): Promise {\n if(!_.isNullOrUndefined(this._params)){\n this._verifyDomain();\n }\n\n return Promise.resolve();\n }\n\n private _verifyDomain(){\n\n if(_.isNullOrUndefined(this._params.domains) ||\n (!_.isNullOrUndefined(this._params.domains) && this._params.domains.length === 0) ||\n Device.hybrid.isHybrid ||\n this.serviceFactory.windowService().getDomain() === 'localhost' ||\n (!_.isNullOrUndefined(this._params.enable) && _.toBoolean(this._params.enable) === false)) {\n return;\n }\n\n if (!this._isDomainApproved()) {\n this._cleanDom();\n this._sendElasticEvent();\n }\n }\n\n private _isDomainApproved(): boolean {\n const currentDomain = this.serviceFactory.windowService().getHost();\n const verifyCurrentDomain = domain => currentDomain.endsWith(domain);\n return this._params.domains.some(verifyCurrentDomain);\n }\n\n private _cleanDom(){\n DOM.getBody().innerHTML = \"\";\n this.logger.info(\"Not approved domain! Content removed.\");\n }\n\n private _sendElasticEvent(){\n const data = {\n CGPEventCategory: 'DOMAIN_DETECTION',\n CGPEventAction: \"BLOCKED_DOMAIN\",\n CGPEventLabel: this.serviceFactory.windowService().getHref()\n };\n this.serviceFactory.structuredLoggingService().getLogger(data).info();\n }\n}","import BaseService from '../../base/base_service';\nimport IEvolutionService from './evolution_service_interface';\n\ninterface IEvolutionServiceParams {\n\tuseNewIntegration: boolean;\n supportOneStopShop: boolean;\n}\n\nexport default class EvolutionService extends BaseService implements IEvolutionService {\n\n static CLASS = 'EvolutionService';\n\n\tprivate _params: IEvolutionServiceParams;\n\n init(params: IEvolutionServiceParams) {\n\t\tsuper.init(params);\n\t\tthis._params = params;\n\t}\n\n shouldUseNewIntegration(): boolean {\n return this._params.useNewIntegration;\n\t}\n\n shouldUseOneStopShopIntegration(): boolean {\n return this._params.useNewIntegration && this._params.supportOneStopShop;\n\t}\n}\n","module.exports = \"
\\n
\\n
\\n
GAME NAME
\\n
DATE
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n
\";","import BaseService from '../../base/base_service';\nimport Store from '../../utils/store';\nimport _ from '../../utils/underscore';\nimport {SystemEventSubscription} from '../../utils/event';\nimport {IObservableSubscription} from '../../utils/observable';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport { ServiceDependencies } from '../../base/base_service_interface';\nimport Device from \"../../utils/device/device\";\n\n\nconst CURRENT_RUNNING_GAME_TAB = 'CURRENT_RUNNING_GAME_TAB';\nconst CURRENT_RUNNING_GAME_TYPE = 'CURRENT_RUNNING_GAME_TYPE'\n\nexport default class MaxOneOpenGameService extends BaseService {\n static CLASS = 'MaxOneOpenGameService';\n\n private _fromIntervalSubscription: IObservableSubscription;\n\n injectDependencies(dependencies: ServiceDependencies): void {\n super.injectDependencies(dependencies);\n this._startCheckingGameRunningInAnotherTab();\n this._subscribe();\n }\n\n private _startCheckingGameRunningInAnotherTab() {\n if(this.serviceFactory.regulationService().shouldPreventMoreThanOneOpenGame()) {\n this._fromIntervalSubscription = this.serviceFactory.observableFactoryService().fromInterval(1000).forEach(() => {\n if(this.isGameRunningInAnotherTab()) {\n this.serviceFactory.gameService().closeRunningGame();\n }\n });\n }\n }\n\n private _onOauthChangeSubscription: SystemEventSubscription;\n private _onGameOpenSubscription: SystemEventSubscription;\n private _onCloseGameSubscription: SystemEventSubscription;\n private _onCloseAllOverlaySubscription: SystemEventSubscription;\n private _onBrowserPageHideSubscription: SystemEventSubscription;\n\n private _subscribe(): void {\n if(this.serviceFactory.regulationService().shouldPreventMoreThanOneOpenGame()) {\n this._onOauthChangeSubscription = this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, this._onOauthChange.bind(this));\n this._onGameOpenSubscription = this.onSystemEvent(SYSTEM_EVENTS.GAME_OPEN, this._onGameOpen.bind(this));\n this._onCloseGameSubscription = this.onSystemEvent(SYSTEM_EVENTS.CLOSE_GAME, this._onCloseGame.bind(this));\n this._onCloseAllOverlaySubscription = this.onSystemEvent(SYSTEM_EVENTS.CLOSE_ALL_OVERLAY, this._onCloseAllOverlay.bind(this));\n this._onBrowserPageHideSubscription = this.onSystemEvent(SYSTEM_EVENTS.ON_BROWSER_PAGE_HIDE, this._onBrowserTabUnload.bind(this));\n }\n }\n\n private _onOauthChange() {\n if(!this.serviceFactory.oAuth2Service().isAuthorized) {\n this._clearStorage();\n }\n }\n\n private _onGameOpen(gameInfo): void {\n Store.set(CURRENT_RUNNING_GAME_TAB, this.serviceFactory.windowService().getCurrentBrowserTabId());\n Store.set(CURRENT_RUNNING_GAME_TYPE, gameInfo.gameType);\n }\n\n private _clearStorage(): void {\n Store.del(CURRENT_RUNNING_GAME_TAB);\n Store.del(CURRENT_RUNNING_GAME_TYPE);\n }\n\n private _onCloseGame(gameInfo): void {\n if(this._isGameRunningInTheCurrentTab() && this.getCurrentRunningGameType() === gameInfo.gameType) {\n this._clearStorage();\n }\n }\n\n private _onCloseAllOverlay(): void {\n if(this._isGameRunningInTheCurrentTab()) {\n this._clearStorage();\n }\n }\n\n private _onBrowserTabUnload(): void {\n if(this._isGameRunningInTheCurrentTab()) {\n this._clearStorage();\n }\n }\n\n isGameRunningInAnotherTab(): boolean {\n if (this.serviceFactory.integrationService().isMiniOrbit()) {\n return false;\n }\n\n if (Device.hybrid.isHybrid) {\n return false;\n }\n\n let runningTabId = this._getRunningGameTabId();\n if (_.isEmpty(runningTabId)) {\n return false;\n }\n\n if (runningTabId !== this.serviceFactory.windowService().getCurrentBrowserTabId()) {\n return true;\n }\n return false;\n }\n\n private _isGameRunningInTheCurrentTab() {\n return !this.isGameRunningInAnotherTab();\n }\n\n private _getRunningGameTabId(): string {\n return Store.get(CURRENT_RUNNING_GAME_TAB);\n }\n\n getCurrentRunningGameType(): number {\n\n let gameType = parseInt(Store.get(CURRENT_RUNNING_GAME_TYPE));\n if(_.isNumber(gameType)) {\n return gameType;\n } else {\n return null;\n }\n }\n\n dispose() {\n if(this._fromIntervalSubscription) {\n this._fromIntervalSubscription.dispose();\n }\n if(this._onGameOpenSubscription) {\n this._onGameOpenSubscription.off();\n }\n\n if(this._onOauthChangeSubscription) {\n this._onOauthChangeSubscription.off();\n }\n\n if(this._onCloseGameSubscription) {\n this._onCloseGameSubscription.off();\n }\n\n\n\n if(this._onBrowserPageHideSubscription) {\n this._onBrowserPageHideSubscription.off();\n }\n\n if(this._onCloseAllOverlaySubscription) {\n this._onCloseAllOverlaySubscription.off();\n }\n }\n}","import BaseService from '../../base/base_service';\n\nexport default class GamesCorrelationService extends BaseService {\n static CLASS = 'GamesCorrelationService';\n\n init(params) {\n super.init(params);\n this._getCorrelatedGamesUrl = params.getCorrelatedGamesUrl;\n }\n\n getCorrelatedGames(gameType, numberOfGames = 3) {\n return this._readCorrelatedGames(gameType)\n .then(correlatedGames => {\n\n if(correlatedGames.length === 0) {\n return [];\n }\n\n return this._filterRecentlyPlayed(correlatedGames)\n .then(filteredGames => this._filterByGamesInformation(filteredGames))\n .then(filteredGames => this._filterByLayout(filteredGames))\n .then(filteredGames => filteredGames.slice(0, numberOfGames));\n });\n }\n\n\n _cachedCorrelatedGames = {};\n\n _readCorrelatedGames(gameType) {\n let correlatedGames = this._cachedCorrelatedGames[gameType];\n if(correlatedGames) {\n return Promise.resolve(correlatedGames);\n }\n\n return this.serviceFactory.http2Service()\n .post(this._getCorrelatedGamesUrl, {\n gameType: gameType\n })\n .then(correlatedGames => {\n correlatedGames = correlatedGames || [];\n this._cachedCorrelatedGames[gameType] = correlatedGames;\n return correlatedGames;\n });\n\n }\n\n _filterRecentlyPlayed(correlatedGameTypes) {\n return this.serviceFactory.recentlyPlayedService().getRecentlyPlayedList().then(gameTypes => {\n let recentlyPlayedMap = {};\n gameTypes.forEach(gt => recentlyPlayedMap[gt] = gt);\n\n return correlatedGameTypes.filter(gt => !recentlyPlayedMap[gt]);\n })\n }\n\n _filterByGamesInformation(correlatedGameTypes) {\n return this.serviceFactory.gamesInformationService().getGamesInfo(correlatedGameTypes)\n .then(gamesInfo => {\n let result = [];\n correlatedGameTypes.forEach(gt => {\n let gameInfo = gamesInfo[gt];\n if(gameInfo && gameInfo.restriction.isGameAllowedToPlayReal()) {\n result.push(gt);\n }\n });\n\n return result;\n });\n }\n\n _filterByLayout(correlatedGameTypes) {\n let result = this.serviceFactory.integrationService().filterInLayoutGames(correlatedGameTypes);\n if(result) {\n return result;\n }\n\n return Promise.resolve(correlatedGameTypes);\n\n }\n}","import BaseService from '../../base/base_service';\nimport _ from '../../utils/underscore';\nimport IHistoryService, { IDailyDealCampaign } from './history_service_interface';\n\nexport interface IHistoryServiceParams {\n uri: string;\n gameSessionUri: string;\n recentlyPlayedUri: string;\n aiRecommendedGameListUri: string;\n popupCampaignsUrl: string;\n}\n\n\nexport default class HistoryService extends BaseService implements IHistoryService {\n static CLASS = 'HistoryService';\n\n private _params: IHistoryServiceParams;\n\n\n init(params: IHistoryServiceParams) {\n super.init(params);\n this._params = params;\n }\n\n\n getRecentlyPlayed(): Promise<{gameTypes: number[]}> {\n return this.serviceFactory.http2Service().post(this._params.recentlyPlayedUri);\n }\n\n /**\n * Gets the AI Recommended Game List from the server / platform\n * @returns {Promise|Object{RecommendedGameList : Object}\n */\n getAIRecommendedGameList(): Promise<{[gameType: number]: number}> {\n return new Promise((resolve) => {\n this.serviceFactory.http2Service().post(this._params.aiRecommendedGameListUri).then((data: any) => {\n try {\n if (typeof data !== 'object')\n resolve({});\n\n resolve(data.RecommendedGameList);\n } catch (e) {\n this.logger.error('Failed to parse get AI recommended list response, error:' + e);\n resolve({});\n }\n });\n });\n }\n\n public getDailyDealCampaigns(): Promise {\n if (_.isEmpty(this._params.popupCampaignsUrl)) {\n return Promise.resolve([]);\n }\n return this.serviceFactory.http2Service().post(this._params.popupCampaignsUrl)\n .then((data: any) => (data && data.MarketingCampaigns) || [])\n .catch(() => []);\n }\n}\n","var map = {\n\t\"./3d_touch/three_d_touch_hybrid_feature.js\": 1005,\n\t\"./deep_link/deep_link_hybrid_feature.js\": 1006,\n\t\"./depositwidget/deposit_widget_hybrid_feature.js\": 753,\n\t\"./fabric/fabric_hybrid_feature.js\": 1007,\n\t\"./firebase/firebase_hybrid_feature.js\": 1038,\n\t\"./geo/geo_hybrid_feature.js\": 1008,\n\t\"./info/info_hybrid_feature.js\": 536,\n\t\"./lexis_nexis/lexis_nexis_hybrid_feature.js\": 1039,\n\t\"./lobby_pop_up/lobby_pop_up_hybrid_feature.js\": 754,\n\t\"./native_logs/native_logs_hybrid_feature.js\": 1040,\n\t\"./on_demand/on_demand_hybrid_feature.js\": 1041,\n\t\"./on_demand/on_demand_nyx_hybrid_feature.js\": 755,\n\t\"./push/push_hybrid_feature.js\": 1009,\n\t\"./rating_popup/rating_popup_hybrid_feature.js\": 763,\n\t\"./touch_id/touch_id_hybrid_feature.js\": 999,\n\t\"./url_scheme/url_scheme_hybrid_feature.js\": 1000,\n\t\"./web_view_manager/web_view_manager_hybrid_feature.js\": 988\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 752;","import BaseObject from '../../../../base/base_object';\nimport _ from \"../../../../utils/underscore\";\nimport Device from '../../../../utils/device/device';\nimport {KEY_NAME} from \"../../native/native_const\";\n\n/**\n *\n *\n */\n\n\nconst DEPOSIT_WIDGET_KEY = 'shouldOpenInSecoundWebView=true';\n\nclass DepositWidget extends BaseObject {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'DepositWidget';\n _HybridService = null;\n _bEnable = false;\n _bDepositWidgetSupported = false;\n\n\n\n\n init(params) {\n\n super.init();\n\n if(_.isNullOrUndefined(params)){\n return;\n }\n\n if (Device.os.isIOS) {\n params = params.ios;\n } else if (Device.os.isAndroid) {\n params = params.android;\n }\n\n if(!_.isNullOrUndefined(params)){\n this._bEnable = params.enable;\n }\n }\n\n initFeatures(hybridSrv) {\n\n this._HybridService = hybridSrv;\n\n if(this._bEnable){\n this.initFeature();\n }\n\n return this;\n }\n\n initFeature(){\n\n let dt = {[KEY_NAME.URL]: DEPOSIT_WIDGET_KEY};\n\n this._HybridService.checkHybridSupportDepositWidget(dt).then(data => {\n this._bDepositWidgetSupported = true;\n this._HybridService.updateDepositWidgetSupported();\n });\n }\n\n isDepositWidgetSupported() {\n return this._bDepositWidgetSupported;\n }\n\n}\n\n\nexport default DepositWidget;\n","import _ from \"../../../../utils/underscore\";\nimport Device from '../../../../utils/device/device';\nimport {FEATURE_CB_FUNC, KEY_NAME, SERIVCES_FUNC_LIST} from \"../../native/native_const\";\nimport Event from \"../../../../utils/event\";\nimport {SYSTEM_EVENTS, USER_EVENTS} from \"../../../../events/events\";\nimport DOM from \"../../../../utils/dom\";\nimport BaseObject from \"../../../../base/base_object\";\n\n\n\n\nconst GAME_SUPPORTED_NYX = 'NYX';\nconst TIME_OUT_GAME_LOAD = 30;\nconst CB_FN = 'cbfn';\n\n/**\n *\n *\n */\nclass LobbyPopUp extends BaseObject{\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'LobbyPopUp';\n _HybridService = null;\n _bEnable = false;\n _nPreviosHeight = 0;\n _bLobbyPopUpSupport = false;\n _popUpTimeOut = null;\n _dataObjSrc = null;\n _onResizeEvent = null;\n\n _nCountInterval = 0;\n _resizeInterval = null;\n _left = -1;\n _right = -1;\n _top = -1;\n _bottom = -1;\n _timeout=0;\n\n\n init(params) {\n\n super.init();\n\n\n if(_.isNullOrUndefined(params)){\n return;\n }\n\n if (Device.hybrid.isEmbedded) {\n params = params.ios;\n }\n\n if(!_.isNullOrUndefined(params) && params.enable){\n\n this._bEnable = true;\n }\n }\n\n initFeatures(hybridSrv) {\n\n this._HybridService = hybridSrv;\n\n if(this._bEnable){\n this._HybridService.isPopUpAboveSecounpSupported().then(data => {\n this._bLobbyPopUpSupport = true;\n this._HybridService.setCbFunction(SERIVCES_FUNC_LIST.LOBBY_POPUP_SET_CB, FEATURE_CB_FUNC.HYBRID_LOBBY_POP_UP_CALL);\n });\n }\n\n this._subscribe();\n\n return this;\n }\n\n _subscribe() {\n Event.on(SYSTEM_EVENTS.SHOW_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW, this._onShow, this);\n Event.on(SYSTEM_EVENTS.CLOSE_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW, this._onClose, this);\n }\n\n\n onHybridDirectCall(data) {\n this._executeFunc(data);\n }\n\n _executeFunc(data) {\n let fn = this.getFuncName(data);\n\n if('function' === typeof this[fn]) {\n this[fn](data);\n }\n }\n\n getFuncName(data) {\n let fn = data[CB_FN];\n\n return (undefined !== fn) ? fn : '';\n }\n\n _getContent(){\n if(null !== this._dataObjSrc) {\n this._onShow(this._dataObjSrc);\n }\n }\n\n _getParams(dataObj) {\n\n if (_.isNullOrUndefined(dataObj) || _.isNullOrUndefined(dataObj.content)) {\n return null;\n }\n\n let rect = null;\n let msgObj = null;\n let content = document.querySelector(dataObj.content);\n\n if (content) {\n rect = content.getBoundingClientRect();\n if (rect) {\n msgObj = {\n height: window.outerHeight,\n width: window.outerWidth,\n rectwidth: rect.width,\n rectheight: rect.height,\n left: rect.x,\n right: window.outerWidth - rect.width - rect.x,\n top: rect.y,\n bottom: window.outerHeight - rect.height - rect.y,\n timeout: 0,\n showHybridPopUp: dataObj.showHybridPopUp,\n isFirstShow: dataObj.isFirstShow\n };\n }\n }\n return msgObj;\n }\n\n _onShow(dataObj) {\n\n const msgObj = this._getParams(dataObj);\n\n this._timeout = 300;\n if(msgObj.isFirstShow) {\n this._timeout = dataObj.timeout * 1;\n }\n\n this.clearTimeOut();\n\n this._popUpTimeOut = DOM.setTimeout(() => {\n this._onShowTimeOut(dataObj);\n }, this._timeout);\n\n }\n\n _onShowTimeOut(dataObj) {\n\n const msgObj = this._getParams(dataObj);\n\n if(!this.isGameOpenAndSupportLobbyPopUp(msgObj)){\n if(true === msgObj.isFirstShow){\n Event.fire(SYSTEM_EVENTS.SECOND_WEB_VIEW_CLOSE_ALL);\n return;\n }\n }\n\n if(msgObj.isFirstShow) {\n this._dataObjSrc = dataObj;\n this._onResizeEvent = DOM.addEventListener(window, USER_EVENTS.ON_RESIZE, this._onResize.bind(this), false);\n }\n\n //the popup size is not correct yet\n if(msgObj.rectwidth > msgObj.width || msgObj.rectheight > msgObj.height) {\n return;\n }\n\n this._nPreviosHeight = msgObj.height;\n\n this._left = msgObj.left;\n this._right = msgObj.right;\n this._top = msgObj.top;\n this._bottom = msgObj.bottom;\n\n\n let data = {[KEY_NAME.LEFT]: msgObj.left, [KEY_NAME.RIGHT]: msgObj.right, [KEY_NAME.TOP]: msgObj.top,[KEY_NAME.BOTTOM]: msgObj.bottom,\n [KEY_NAME.SHOW]: msgObj.isFirstShow.toString() , [KEY_NAME.TIME_OUT]: msgObj.timeout, [KEY_NAME.TIME_OUT_BEFORE_DISPLAY]:TIME_OUT_GAME_LOAD};\n\n this._HybridService.popUpAboveSecoundShow(data);\n\n }\n\n _isValid(newParam, oldParam, val){\n\n return val && (newParam !== oldParam) && oldParam > 0;\n }\n\n _isPopUpReady(){\n const msgObj = this._getParams(this._dataObjSrc);\n\n let bValid = this._isValid(this._top, msgObj.top, true);\n bValid = this._isValid(this._left, msgObj.left, bValid);\n bValid = this._isValid(this._right, msgObj.right, bValid);\n bValid = this._isValid(this._bottom, msgObj.bottom, bValid);\n\n return bValid;\n }\n\n _onResize(){\n this._dataObjSrc.isFirstShow = false;\n\n let self = this;\n this._nCountInterval = 0;\n\n DOM.setTimeout(() => {\n self._resizeInterval = setInterval(function(){\n let bClearInterval = 10 < ++self._nCountInterval;//wait maximum 1 sec\n let bCheckReady = self._isPopUpReady();\n if(bCheckReady){\n self._onShow(self._dataObjSrc);\n bClearInterval = true;\n }\n\n if(bClearInterval && null !== self._resizeInterval) {\n clearInterval(self._resizeInterval);\n self._resizeInterval = null;\n }\n }, 100);\n }, 300);\n\n }\n\n isGameOpenAndSupportLobbyPopUp(msgObj){\n\n const gameSupported = GAME_SUPPORTED_NYX === this._HybridService.serviceFactory.gameService().getCurrentRunningGamecompanyName();\n\n if (!msgObj || !this._bLobbyPopUpSupport || !msgObj.showHybridPopUp || !gameSupported) {\n return false;\n }\n\n return true;\n }\n\n _onClose(){\n\n this._nPreviosHeight = 0;\n this._HybridService.popUpAboveSecoundClose();\n this._onResizeEvent && this._onResizeEvent.remove();\n this._dataObjSrc = null;\n clearInterval(this._resizeInterval);\n this._resizeInterval = null;\n\n }\n\n clearTimeOut() {\n if (this._popUpTimeOut) {\n DOM.clearTimeout(this._popUpTimeOut);\n this._popUpTimeOut = null;\n }\n }\n\n}\n\n//TEST_ORBIT_POPUP\n\nexport default LobbyPopUp;\n","import BaseObject from '../../../../base/base_object';\nimport {FEATURE_CB_FUNC, KEY_NAME, SERIVCES_FUNC_LIST} from '../../native/native_const';\nimport Device from '../../../../utils/device/device';\nimport {ON_DEMAND} from \"./on_demand_hybrid_consts\";\nimport ServiceFactory from \"../../../service_factory\";\nimport {SYSTEM_EVENTS} from \"../../../../events/events\";\nimport Event from \"../../../../utils/event\";\nimport _ from \"../../../../utils/underscore\";\nimport DOM from \"../../../../utils/dom\";\nimport {BRANDS} from \"../../../regulation/regulation_const\";\nimport {UK_STRIP_COMPONENT_SELECTOR} from \"../../../../components/regulation_components/uk/game_stripe/uk_game_stripe_component.ts\"\nimport {CANADA_ONTARIO_STRIP_COMPONENT_SELECTOR} from \"../../../../components/regulation_components/canada/ontario/game_stripe/canada_ontario_game_stripe_component\";\nimport {SPAIN_STRIP_COMPONENT_SELECTOR} from \"../../../../components/regulation_components/spain/game_stripe/spain_game_stripe_component\";\n\n\n\nclass OnDemandNyx extends BaseObject {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'OnDemandNyx';\n static NYX_TYPE = 'NYX';\n\n _HybridService = null;\n _bUpdateHeaderHeight = false;\n _onDemandGameIsRunning = false;\n\n init(params) {\n\n super.init();\n if (_.isNullOrUndefined(params)) {\n return;\n }\n if (Device.os.isIOS) {\n params = params.ios;\n if (_.isNullOrUndefined(params)) {\n return;\n }\n\n if (!_.isNullOrUndefined(params.headerShift)) {\n this._bUpdateHeaderHeight = params.headerShift.enable;\n }\n }\n }\n\n initFeatures(hybridSrv) {\n this._HybridService = hybridSrv;\n\n if (Device.hybrid.isEmbedded) {\n this._HybridService.setCbFunction(SERIVCES_FUNC_LIST.ON_DEMAND_NYX_SET_CB, FEATURE_CB_FUNC.HYBRID_ON_DEMAND_NYX_CALL);\n }\n return this;\n }\n\n canHandle(companyName) {\n return OnDemandNyx.NYX_TYPE === companyName;\n }\n\n navigate(companyName, url) {\n if (this.canHandle(companyName)) {\n Event.on(SYSTEM_EVENTS.SCREEN_RESIZE_CHANGED, this._onResize, this);\n Event.once(SYSTEM_EVENTS.GAME_SEQUENCE_FINISH,(status)=>{\n this._onGameSequenceFinish(status)\n }, this)\n\n\n this._HybridService.navigateForOnDemandNyx(url);\n this._updateHeaderheight();\n this._onDemandGameIsRunning = true;\n return true;\n }\n\n return false;\n }\n\n _getHeaderheight(){\n //todo refactor this function, we need to remove it, the game step need to send new event to Hybrid to move the web view down with X pixel\n let headerClassName = '.cy-header-regulation-data';\n\n const headerShiftDisable = !this._bUpdateHeaderHeight;\n const netPositionDisable = !this._HybridService.serviceFactory.regulationService().getRegulation().showNetPosition();\n\n if(headerShiftDisable && netPositionDisable){\n return 0;\n }\n\n const brandID = this._HybridService.serviceFactory.skinService().getBrandID();\n\n if(this._HybridService.serviceFactory.skinService().isCOMBrand()){\n headerClassName = '.' + UK_STRIP_COMPONENT_SELECTOR;\n }else if(BRANDS.SPAIN === brandID){\n headerClassName = '.' + SPAIN_STRIP_COMPONENT_SELECTOR;\n }else if(BRANDS.CANADA === brandID){\n headerClassName = '.' + CANADA_ONTARIO_STRIP_COMPONENT_SELECTOR;\n }\n\n const topHeader = DOM.querySelector(headerClassName); //todo should be refactor and use await ServiceFactory.create().integrationService().getHeaderRegulationDataElement()\n\n return topHeader ? topHeader.offsetHeight : 0;\n }\n\n _getBrandenable(){\n const isEnable = this._HybridService.serviceFactory.regulationService().getRegulation().hybridNyxClosedButtonEnabled();\n return isEnable ? 'true' : 'false'\n }\n\n _getCloseButPosition(){\n\n let xp = 0;\n let yp = 0;\n let xl = 0;\n let yl = 0;\n\n if(Device.hybrid.isEmbedded && !Device.hybrid.inPoker && !Device.hybrid.inSport) {\n if(Device.isIphoneX()) {\n xp = -10;\n yp = 10;\n xl = -10;\n yl = 20;\n }\n }\n\n let enable = this._getBrandenable();\n\n let dt = {\n 'enable': enable,\n 'xp': xp,\n 'yp': yp,\n 'xl': xl,\n 'yl': yl\n };\n\n return dt;\n }\n\n _updateHeaderheight(){\n\n let headerheight = this._getHeaderheight();\n\n let dt = this._getCloseButPosition();\n\n this._HybridService.changeHeaderHeightOnDemandNyx(headerheight, dt);\n }\n\n _onResize() {\n this._updateHeaderheight();\n }\n\n _onGameSequenceFinish(status){\n if(status) {\n this._updateHeaderheight();\n }\n }\n\n onHybridDirectCall(data) {\n\n let fn = this.getFuncName(data);\n\n if ('function' === typeof this[fn]) {\n this[fn](data);\n }\n }\n\n getFuncName(data) {\n let fn = data[ON_DEMAND.CB_FN];\n\n return undefined !== fn ? fn : '';\n }\n\n onNyxEvent(data) {\n\n let reason = this._getReason(data);\n\n let isClose = ServiceFactory.create().gameReasonService().handleReason(reason);\n if (isClose) {\n this.onclose();\n }\n }\n\n onNyxPostMsg(data){\n\n let msg = {\n data: {}\n };\n\n try {\n let val = data[KEY_NAME.DATA];\n msg.data.gcmevent = decodeURIComponent(val);\n }\n catch (e) {\n msg.data.gcmevent = '';\n }\n\n Event.fire(SYSTEM_EVENTS.HYBRID_POST_MESSAGE_ARRIVE, msg);\n }\n\n onclose() {\n this._HybridService.closeNyxODRGame();\n this._onDemandGameIsRunning = false;\n Event.off(SYSTEM_EVENTS.SCREEN_RESIZE_CHANGED, this._onResize, this);\n Event.fire(SYSTEM_EVENTS.CLOSE_GAME);\n }\n\n isOnDemandStandAloneGameRunning() {\n return this._onDemandGameIsRunning;\n }\n\n _getReason(data) {\n\n let url;\n\n try {\n let val = data[KEY_NAME.DATA];\n url = decodeURIComponent(val);\n }\n catch (e) {\n url = null;\n }\n\n if (null === url) {\n return null;\n }\n\n let extractFirstPart = url.split('?')[1];\n\n if ('undefined' === typeof extractFirstPart) {\n return null;\n }\n\n let allowedPattern = /^reason=([0-9]{1,2})/,\n matchedURL = extractFirstPart.match(allowedPattern),\n reasonID = Array.isArray(matchedURL) ? Number(matchedURL[1]) : false;\n\n return reasonID;\n }\n\n}\nexport default OnDemandNyx;\n","module.exports = \"
\\n
{game_session_timer_description | translate}
\\n
\\n
\\n
\";","module.exports = \"
\\n
{net_position_balance | translate}
\\n
\\n
\\n
\";","module.exports = \"
\\n
\";","module.exports = \"
\\n
\\n \\n
\\n
\";","module.exports = \"
\\n
\\n
\\n
\";","module.exports = \"
\\n
\\n
{es_stripe_session_bets | translate}
\\n
\\n
\\n
\\n
{es_stripe_session_wins | translate}
\\n
\\n
\\n
\\n
{es_stripe_session_balance | translate}
\\n
\\n
\\n
\";","module.exports = \"
\\n
\\n
\\n
{es_stripe_session_player_balance | translate}
\\n
\\n
\\n
\\n
{es_stripe_session_balance | translate}
\\n
\\n
\\n
\\n\\n
\\n\\n
\\n
\\n
{es_stripe_session_bets | translate}
\\n
\\n
\\n
\\n
{es_stripe_session_wins | translate}
\\n
\\n
\\n
\\n\\n
\";","import BaseObject from '../../../../base/base_object';\nimport {SERIVCES_FUNC_LIST} from '../../native/native_const';\nimport {SYSTEM_EVENTS} from '../../../../events/events';\nimport _ from '../../../../utils/underscore';\nimport Device from '../../../../utils/device/device';\nimport Event from '../../../../utils/event';\nimport {LOGIN_TYPE} from '../../../oauth/oauth_const';\n\nclass Rating extends BaseObject {\n\n static CLASS = 'Rating';\n _hybridService = null;\n isFeatureEnable = false;\n init(params) {\n super.init();\n if (_.isNullOrUndefined(params)) {\n return;\n }\n if (Device.os.isIOS) {\n params = params.ios;\n } else if (Device.os.isAndroid) {\n params = params.android;\n }\n if (params.enable) {\n this.isFeatureEnable = true;\n }\n }\n\n initFeatures(hybridSrv) {\n this._hybridService = hybridSrv;\n if (this.isFeatureEnable) {\n this._subscribe();\n }\n return this;\n }\n\n _subscribe() {\n Event.on(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, this.onOauthChange, this);\n }\n\n onOauthChange(params) {\n if ( this._hybridService.serviceFactory.oAuth2Service().isAuthorized() && ((params && params.loginType) === LOGIN_TYPE.NEW_LOGIN.toString())) {\n this.popUpRating();\n }\n }\n\n popUpRating() {\n this._hybridService.msgToHybrid(SERIVCES_FUNC_LIST.RATE_APP);\n this.logger.info('Rating PopUp Triggered');\n }\n}\n\nexport default Rating;\n","module.exports = \"
\\n
\\n
\\n
{ title | inject }
\\n { second_title | inject }\\n
\\n
\\n
\\n
\";","import BaseService from '../../base/base_service';\nimport _ from '../../utils/underscore';\nimport DOM from '../../utils/dom';\nimport Strings from '../../utils/strings';\nimport ILanguageService from './language_service_interface';\n\n\nexport interface LanguageServiceParams {\n iso3: string;\n iso2: string;\n isRTL: boolean;\n text: {[key: string]: string};\n};\n\n\n/**\n *\n * Language class is used for string translation\n *\n */\nexport default class LanguageService extends BaseService implements ILanguageService {\n static CLASS = 'LanguageService';\n\n\n private _params: LanguageServiceParams = null;\n\n\n init(params: LanguageServiceParams) {\n super.init(params);\n\n this._params = params || {} as LanguageServiceParams;\n this._setRTLLanguageClass();\n }\n\n getIsRTL(): boolean {\n return this._params.isRTL;\n }\n\n getISO3(): string {\n return this._params.iso3;\n }\n\n getISO2(): string {\n return this._params.iso2;\n }\n\n\n translation(key: string, params?: {[key: string]: any}): string {\n if (_.isNullOrUndefined(key)) {\n this.logger.error('The key to translate is null or undefined, key: ' + key);\n return '';\n }\n\n key = key.toString().trim().toLowerCase();\n if (_.isEmpty(key)) {\n this.logger.error('The key to translate is empty');\n return '';\n }\n\n const text = this._params.text;\n\n if (!text) {\n this.logger.error(`There are no translation for ${this._params.iso3} language`);\n return '';\n }\n\n if (!text[key]) {\n this.logger.error(`The key ${key} does not exists in the translation`);\n return '';\n }\n\n const textTemplate = text[key];\n if (params) {\n return new Strings(textTemplate).injectIntoCurly(params);\n } else {\n return textTemplate;\n }\n }\n\n private _setRTLLanguageClass(): void {\n const CGP_RTL = 'cgp-rtl';\n if (this._params.isRTL) {\n DOM.addClass(DOM.getHTML(), CGP_RTL);\n } else {\n DOM.removeClass(DOM.getHTML(), CGP_RTL);\n }\n }\n}\n","import BaseService from '../../base/base_service';\nimport ILoyalty, { LoyaltyServiceInitParams } from './loyalty_service_interface';\n\nclass LoyaltyService extends BaseService implements ILoyalty {\n\n static CLASS: string = 'LoyaltyService';\n private _initParams: LoyaltyServiceInitParams = null;\n\n init(params: LoyaltyServiceInitParams) {\n super.init(params);\n this._initParams = params;\n }\n\n public getScriptLink(): string {\n return this._initParams.scriptLink;\n }\n\n public getClientPlatform(): number {\n return this._initParams.clientPlatform;\n }\n\n}\n\nexport default LoyaltyService;","module.exports = \"
\\n
\\n
{title | text}
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n\\n\";","module.exports = \"
\\n {titleEl | inject}\\n
\\n\";","import BaseService from '../../base/base_service';\nimport Event from '../../utils/event';\n\nimport INetPositionService, {INetPositionGameInfo} from './netent_service_interface';\nimport {SYSTEM_EVENTS} from \"../../events/events\";\nimport {INetPositionGameTypeData} from \"../player_messages_service/firebase/handlers/netposition_handler\";\nimport {Check} from \"@sparkware/app-utils\";\n\n\ninterface NetPositionServiceParams {\n readonly initializeGameTypeUrl: string\n}\n\nexport default class NetPositionService extends BaseService implements INetPositionService {\n static CLASS = 'NetPositionService';\n\n private _params: NetPositionServiceParams;\n private gamesNetPositions: INetPositionGameInfo = {};\n\n init(params: NetPositionServiceParams) {\n super.init(params);\n this._params = params;\n\n this._subscribe();\n }\n\n async initializeNetPositionOnGameType(gameType: number) {\n try{\n return await this.serviceFactory.http2Service().post(this._params.initializeGameTypeUrl, {gameType})\n }catch (e) {\n this.logger.error(\"NetPosition initialize request for gameType \"+gameType+\" failed.\");\n return null;\n }\n }\n\n private _onReceivedData(gamesTypesData: INetPositionGameTypeData[]) {\n const netPositions = (gamesTypesData || []).reduce((acc, gameData: INetPositionGameTypeData) => {\n if (Check.isNumber(gameData?.gameTypeId) && Check.isNumber(gameData?.amount))\n acc[gameData.gameTypeId] = gameData.amount;\n\n return acc;\n }, {});\n\n this.logger.debug(\"NetPosition Firebase amount received\", this.gamesNetPositions);\n Event.fire(SYSTEM_EVENTS.NET_POSITION_VALUE_UPDATE, netPositions);\n }\n\n private _subscribe() {\n Event.on(SYSTEM_EVENTS.SESSION_EVENT_NET_POSITION_UPDATE, this._onReceivedData.bind(this));\n }\n}\n","import BaseService from '../../../base/base_service';\nimport _ from '../../../utils/underscore';\nimport IUserService, {\n UserServiceInitParams,\n ITokenResponse,\n IValidateGeolocationResponse\n} from './user_service_interface';\nimport {ICashierWidgetsEligibilityDetails} from \"../../../../../common/interfaces/cashier-widgets-eligibility-details.interface\";\nimport { SYSTEM_EVENTS } from '../../../events/events';\n\nclass UserService extends BaseService implements IUserService{\n static CLASS: string = 'UserService';\n\n private _initParams: UserServiceInitParams = null;\n private _firebaseLoginToken: string = '';\n\n protected init(params: UserServiceInitParams): void {\n super.init(params);\n this._initParams = {\n tokenUrl: params.tokenUrl ? params.tokenUrl : '/cgpapi/user/gettoken',\n realityCheckDataUrl: params.realityCheckDataUrl,\n validateGeoLocationUrl: params.validateGeoLocationUrl,\n initRetryGeoUrl: params.initRetryGeoUrl,\n updateRealityCheckDataUrl: params.updateRealityCheckDataUrl\n };\n\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, () => {\n if (this.serviceFactory.oAuth2Service().isAuthorized()) {\n this._onLogin();\n }\n });\n }\n\n private _onLogin() {\n const regulation = this.serviceFactory.regulationService().getRegulation();\n if (regulation.attemptRealityCheckIntervalMigrationFromLocalStorageToControlCenter) {\n regulation.attemptRealityCheckIntervalMigrationFromLocalStorageToControlCenter();\n }\n }\n\n private _oAuth2Service(): any { // need interface for OAuth2Service\n return this.serviceFactory.oAuth2Service();\n }\n\n public validateGeoLocation(geoLocationEncryptedResponse: string, isPeriodicFlow: boolean, errorCode: number =-1, errorMsg: string =''): Promise {\n const requestParams = {\n geoLocationEncryptedResponse: geoLocationEncryptedResponse,\n isPeriodicFlow: isPeriodicFlow.toString(),\n errorCode: errorCode.toString(),\n errorMsg: errorMsg\n };\n return this.serviceFactory.http2Service().post(this._initParams.validateGeoLocationUrl, requestParams);\n }\n\n public initGeoRetry(): Promise {\n return this.serviceFactory.http2Service().post(this._initParams.initRetryGeoUrl);\n }\n\n private _getHistory(): any {\n return this._oAuth2Service().extractTokenProperty('historyData');\n }\n\n private _getB2C(): any {\n return this._oAuth2Service().extractTokenProperty('b2c');\n }\n\n public getCID(): string {\n // Get token from local storage.\n const accountData = this.getAccountData();\n return accountData && accountData.Cid;\n }\n\n public getTaxID(): string {\n const accountData = this.getAccountData();\n return accountData && accountData.TaxId;\n }\n\n public getUsername(): string {\n return this._oAuth2Service().extractTokenProperty('userName');\n }\n\n public getAccountData(): any {\n return this.serviceFactory.oAuth2Service().getAccountData();\n }\n\n public getB2CData(): any {\n const b2c = this._getB2C();\n\n if (!b2c) {\n return null;\n }\n\n const parseB2CData = JSON.parse(b2c);\n\n return parseB2CData.message;\n }\n\n public getHistoryToken(): any {\n const history = this._getHistory();\n\n if (!history) {\n return null;\n }\n return JSON.parse(history);\n }\n\n public getPlatformTokenFromLogin(): string {\n return this._extractTokenPropertyByName('login', 'Token');\n }\n\n public getUserFirstName(): string {\n return this._extractTokenPropertyByName('accountData', 'FirstName');\n }\n\n public getUserLastName(): string {\n return this._extractTokenPropertyByName('accountData', 'LastName');\n }\n\n public getPlatformToken(params?: object):Promise{\n return this.serviceFactory.http2Service().post(this._initParams.tokenUrl, params)\n .then((response: ITokenResponse) => {\n return response;\n });\n }\n\n public renewLoginToken(params?: object): Promise {\n return this.getPlatformToken(params).then( (response:ITokenResponse) => {\n this._oAuth2Service().updateTokenData('login', {Token: response.token});\n return response;\n })\n }\n\n public updateTokenData(propertyName: string, propertyValue: any): void {\n this._oAuth2Service().updateTokenData(propertyName, propertyValue);\n }\n\n private _extractTokenPropertyByName(properyToExtract: any, propertyToReturn: any): any {\n const loginData = this._oAuth2Service().extractTokenProperty(properyToExtract);\n\n if (!loginData) {\n return null;\n }\n\n const parseLoginData = JSON.parse(loginData);\n\n return parseLoginData[propertyToReturn];\n }\n\n public countPlayerChallenges(): number {\n const accountData = this.getAccountData();\n const numberOfChallenges = accountData && accountData.NumberOfChallenges;\n if(_.isNullOrUndefined(numberOfChallenges)) {\n return 0;\n }\n return numberOfChallenges;\n }\n\n public getRealityCheckData(): Promise {\n if(!this.serviceFactory.oAuth2Service().isAuthorized()) {\n return Promise.resolve();\n }\n\n return this.serviceFactory.http2Service().post(this._initParams.realityCheckDataUrl);\n }\n\n public async updateRealityCheckData(realityCheckIntevalMin: number): Promise {\n return this.serviceFactory.regulationService().getRegulation().updateRealityCheckData(realityCheckIntevalMin);\n }\n\n public getUpdateRealityCheckDataUrl() {\n return this._initParams.updateRealityCheckDataUrl;\n }\n\n public getDepositWidgetEligibilityDetails(): ICashierWidgetsEligibilityDetails {\n if(this.serviceFactory.oAuth2Service().isAuthorized()) {\n return _.safeJSON(this.serviceFactory.oAuth2Service().extractTokenProperty('depositWidgetEligibilityDetails'), null);\n } else {\n return null;\n }\n }\n\n public getCashoutWidgetEligibilityDetails(): ICashierWidgetsEligibilityDetails {\n if(this.serviceFactory.oAuth2Service().isAuthorized()) {\n return _.safeJSON(this.serviceFactory.oAuth2Service().extractTokenProperty('cashoutWidgetEligibilityDetails'), null);\n } else {\n return null;\n }\n }\n\n public geoLocationFromLogin(): any {\n\n if(!this.serviceFactory.oAuth2Service().isAuthorized()) {\n return false;\n }\n\n return _.safeJSON(this.serviceFactory.oAuth2Service().extractTokenProperty('geoLocation'), {});\n }\n\n public clearGeoLocationFromLogin(): void {\n this.updateTokenData('geoLocation', null);\n }\n\n public setFirebaseLoginToken(token: string): void{\n this._firebaseLoginToken = token;\n }\n\n public getFirebaseLoginToken(): string{\n return this._firebaseLoginToken;\n }\n}\n\nexport default UserService;\n","import BaseService from '../../base/base_service';\nimport ObservableFactory from '../../utils/observable_factory';\nimport IObservableFactoryService from './observable_factory_service_interface';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {TimeIntervalName} from '../../../../common/utils/time-interval-names';\nimport Observable from '../../utils/observable';\n\n\nexport default class ObservableFactoryService extends BaseService implements IObservableFactoryService {\n static CLASS = 'ObservableFactoryService';\n\n _observableFactory: ObservableFactory = null;\n init(params) {\n super.init(params);\n this._observableFactory = ObservableFactory.create();\n }\n\n fromTimeout(timeout: TimeSpan | number, name?: TimeIntervalName) : Observable {\n return this._observableFactory.fromTimeout(timeout, name);\n }\n\n fromInterval(interval: TimeSpan | number, name?: TimeIntervalName) : Observable {\n return this._observableFactory.fromInterval(interval, name);\n }\n\n fromEvent(element: HTMLElement, eventName: string, options: any) : Observable {\n return this._observableFactory.fromEvent(element, eventName, options);\n }\n}","import Event from '../../utils/event';\nimport BaseService from '../../base/base_service';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport * as EXTERNAL_LINKS_CONSTS from '../../components/external_links/external_links_consts';\nimport {GNWP_SOURCES} from '../../components/external_links/external_links_consts';\nimport _ from '../../utils/underscore';\nimport {PRIORITY_LEVEL} from '../overlay_manager/overlay_manager_levels'\nimport Store from \"../../utils/store\";\n\nconst UCC_PERSISTANT_KEY = 'ucc';\n\nclass OmgService extends BaseService {\n\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'OmgService';\n\n /**\n * Url for GetAwaitingMessages API\n * @type {string}\n * @private\n */\n _uccURL = '/cgpapi/omg/GetAwaitingMessages';\n _ignorePopopURLs = [];\n _UCCMessages = [];\n _currentNumberOfMessages = 0;\n\n\n /**\n *\n * @param params\n */\n init(params) {\n // init params\n this._uccURL = (params && params.getAwaitingMessagesUrl) || this._uccURL;\n this._setIgnorePopupURLs(params && params.ignorePopopURLs);\n\n this._subscribe();\n }\n\n\n\n /**\n *\n * @public\n */\n start() {\n this._subscribe();\n }\n\n onInitializationCompleted() {\n return this._getAwaitingMessages();\n }\n\n _setIgnorePopupURLs(ignorePopopURLs = []) {\n let pathsList = [];\n if (_.isString(ignorePopopURLs)) {\n pathsList = _.safeJSON(ignorePopopURLs, this.ignorePopopURLs);\n } else if(_.isArray(ignorePopopURLs)) {\n pathsList = ignorePopopURLs;\n }\n\n this._ignorePopopURLs = pathsList;\n return this;\n }\n\n /**\n * Subscribe application events.\n *\n * @private\n */\n _subscribe() {\n this.onSystemEvent(SYSTEM_EVENTS.SESSION_EVENT_OMG_RECEIVED, this._openOMG, this);\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, this._onOAuthStateChanged, this);\n this.onSystemEvent(SYSTEM_EVENTS.DEPOSIT_WIDGET_CLOSED, this._onDepositWidgetClosed)\n this.onSystemEvent(SYSTEM_EVENTS.EXTERNAL_LINK_CLOSED, (linkSource) => {\n this._onExternalLinkClosed(linkSource);\n });\n this.onSystemEvent(SYSTEM_EVENTS.OMG_OPEN_AWAITING_MESSAGES, () => {\n this._openUCCMessages();\n });\n this.onSystemEvent(SYSTEM_EVENTS.EXTERNAL_LINK_OPENED, (source) => {\n if (source === GNWP_SOURCES.OMG) {\n this._onOMGOpenedHandler();\n }\n });\n\n }\n\n _onOAuthStateChanged() {\n if(!this.serviceFactory.oAuth2Service().isAuthorized()) {\n this._notifyOnUCCChanges(0);\n return;\n }\n\n this._getAwaitingMessages().then(() => {\n this._openUCCMessages();\n });\n }\n\n\n /**\n * Validates whether current url path is under one of the folders that are in the ignore list urls\n * @example if current path is /promotion/game/ and /promotion/ is part of the ignore list - will return true (is ignore path)\n * @returns {boolean}\n * @private\n */\n _isPathIgnored() {\n let currentPath = this.serviceFactory.windowService().getPathName();\n\n let ignoreUrlsArray = this._ignorePopopURLs.filter((ignoreUrl)=>{\n return currentPath.startsWith(ignoreUrl)\n });\n\n return ignoreUrlsArray.length > 0;\n }\n\n\n /**\n * decision function for showing OMG\n * @param OMGData\n * @private\n */\n _getOmgOpenOptions(OMGData) {\n let gameService = this.serviceFactory.gameService();\n this.logger.debug(`is game running flag is: ${gameService.isGameRunning()}`);\n\n if (this._isPathIgnored()) {\n this.logger.debug('open OMG is triggered but the user is on an ignored pathname, skipping');\n return;\n } else\n if ((\n gameService.isGameRunning() ||\n this.serviceFactory.overlayManagerService().isCashierOpen() ||\n this.serviceFactory.overlayManagerService().isMembershipOpen()) &&\n '0' === OMGData.OpenedWithinGame) {\n this.logger.debug('open OMG is triggered but game is running & OpenedWithinGame omg property is false so open OMG behind');\n return {priorityLevel: PRIORITY_LEVEL.OMG_BEHIND};\n } else\n if (!this.serviceFactory.visibilityDetectorService().isActive()) {\n this.logger.debug('open OMG is triggered but tab isnt active so aborting OMG process');\n return;\n }\n\n return {priorityLevel: PRIORITY_LEVEL.OMG};\n }\n\n\n /**\n * open omg messages through web platform gnwp\n * @param OMGData\n * @private\n */\n _openOMG(OMGData) {\n let omgOptions = this._getOmgOpenOptions(OMGData);\n if (!omgOptions) {\n return;\n }\n\n Event.fire(SYSTEM_EVENTS.OMG_DISPLAYED, OMGData);\n\n this._openOMGMessage(OMGData, omgOptions);\n }\n\n\n /**\n * Open OMG messages in External link\n * @param OMGData\n */\n _openOMGMessage(messages, options) {\n this.serviceFactory.openLinkService().openLink({\n source: EXTERNAL_LINKS_CONSTS.GNWP_SOURCES.OMG,\n view: 'iframe',\n priorityLevel: options && options.priorityLevel,\n /* TODO ExternalLinkInPopUp param needs to be populated dynamically and not hard-coded to '1'.\n ( '1' - external link will be opened by we b team from omg iframe , '0' - cgp will get post msg )*/\n options: Object.assign({ExternalLinkInPopUp: '1'}, messages)\n });\n }\n\n\n /**\n * Open awaiting messages\n * @private\n */\n _openUCCMessages() {\n let omgMessages = this._UCCMessages;\n let xmlFormattedMessages = this._convertToXMLMessages(omgMessages);\n if (xmlFormattedMessages) {\n this._openOMG({Messages: xmlFormattedMessages, OpenedWithinGame: '0'});\n }\n }\n\n\n /**\n * Update awaiting messages state after opening OMG link\n * @private\n */\n _onOMGOpenedHandler() {\n this._saveUCCMessages(); // when external link open\n if (this._UCCMessages) {\n this._notifyOnUCCChanges(this._UCCMessages.length);\n }\n }\n\n\n /**\n * Get awaiting OMG messages from UCC Service\n * @private\n */\n _getAwaitingMessages() {\n if (!this.serviceFactory.oAuth2Service().isAuthorized()) {\n this._notifyOnUCCChanges(0);\n return Promise.resolve();\n }\n\n return this.serviceFactory.http2Service().post(this._uccURL)\n .then((response) => {\n if (response && response.MessagesJSON) {\n this._onUCCMessagesReceived(response.MessagesJSON);\n }\n\n return response;\n })\n .catch((error) => {\n this.logger.error(this);\n throw error;\n });\n }\n\n\n /**\n *\n * @param messages\n * @private\n */\n _onUCCMessagesReceived(messages) {\n this.logger.debug('UCC messages received: ' + JSON.stringify(messages));\n let displayedMessages = this._getDisplayedUCCMessages();\n // in case there is only single message, server converts it to object and not messages array\n if (!messages) {\n return;\n }\n if (false === _.isArray(messages)) {\n let messageArray = [];\n messageArray.push(messages);\n messages = messageArray;\n }\n let newNumberOfMessages = this._getCurrentNumberOfMessagesByComparison(messages, displayedMessages);\n this.logger.debug('New number of awaiting messages after comparison = ' + newNumberOfMessages);\n this._UCCMessages = messages;\n this._notifyOnUCCChanges(newNumberOfMessages);\n }\n\n\n /**\n * Fire event on any state change in number of awaiting messages\n * @private\n */\n _notifyOnUCCChanges(updatedNumberOfMessages) {\n this._currentNumberOfMessages = updatedNumberOfMessages;\n Event.fire(SYSTEM_EVENTS.OMG_AWAITING_MESSAGES_UPDATED, updatedNumberOfMessages);\n }\n\n\n /**\n * Compare received UCC messages with already read and get the number of awaiting messages\n * @param receivedMessages\n * @param readMessages\n * @returns {*}\n * @private\n */\n _getCurrentNumberOfMessagesByComparison(receivedMessages, readMessages) {\n if (0 === receivedMessages.length || false === this.serviceFactory.oAuth2Service().isAuthorized()) {\n this.logger.debug('There are no received messages or user is not authorized. Change current number of messages to 0');\n return 0;\n }\n\n if (!readMessages || 0 === readMessages.length) {\n this.logger.debug('There are no read messages. Change state to number of received messages');\n return receivedMessages.length;\n }\n\n let newCompareSet = receivedMessages.slice(0, receivedMessages.length > 3 ? 3 : receivedMessages.length);\n let existCompareSet = readMessages.slice(0, readMessages.length > 3 ? 3 : readMessages.length);\n\n let newMessages = newCompareSet.filter((newMessage) => {\n let isExist = false;\n\n for (let i = 0, len = existCompareSet.length; i < len; i++) {\n let existMessage = existCompareSet[i];\n if (newMessage['@id'] === existMessage['@id']) {\n isExist = true;\n break;\n }\n }\n\n return !isExist;\n });\n\n this.logger.debug('Comparison between messages finished. Received Messages ' + JSON.stringify(receivedMessages));\n this.logger.debug('Comparison between messages finished. Read Messages ' + JSON.stringify(readMessages));\n this.logger.debug('Comparison between messages finished. New messages ' + JSON.stringify(newMessages));\n return newMessages.length > 0 ? newMessages.length : receivedMessages.length;\n }\n\n /**\n * Convert JSON messages to XML format for OMG\n * @param messages\n * @returns {string}\n * @private\n */\n _convertToXMLMessages(messages) {\n if (!_.isArray(messages) || messages.length === 0) {\n return;\n }\n let rootNode = '';\n messages.forEach((message) => {\n rootNode += this._createXMLMessage(message);\n });\n rootNode += '';\n\n return rootNode;\n }\n\n\n /**\n * Create JSON message to XML\n * @param jsonMessage\n * @returns {string}\n * @private\n */\n _createXMLMessage(jsonMessage) {\n let messageNode = ' {\n xmlAttrs.push(this._createXMLAtribute(key.replace('@', ''), jsonMessage[key]));\n });\n messageNode += xmlAttrs.join(' ') + '>';\n return messageNode;\n }\n\n /**\n * Create xml attribute\n * @param attrName\n * @param attrValue\n * @returns {string}\n * @private\n */\n _createXMLAtribute(attrName, attrValue) {\n return '' + attrName + '=\"' + attrValue + '\"';\n }\n\n\n /**\n * Handle close of external links\n * In case OMG, MyAccount or cashier closed, we need to udpate awaiting messages\n * @param linkSource\n * @private\n */\n _onExternalLinkClosed(linkSource) {\n if (GNWP_SOURCES.CASHIER === linkSource || GNWP_SOURCES.MY_ACCOUNT === linkSource || GNWP_SOURCES.OMG === linkSource) {\n this._getAwaitingMessages();\n }\n }\n\n _onDepositWidgetClosed = () => {\n this._getAwaitingMessages();\n }\n\n /**\n * Save new UCC messages to local storage\n * @param messages\n */\n _saveUCCMessages() {\n Store.set(UCC_PERSISTANT_KEY, JSON.stringify(this._UCCMessages));\n }\n\n\n _getDisplayedUCCMessages() {\n return _.safeJSON(Store.get(UCC_PERSISTANT_KEY));\n }\n\n\n getNumberOfAwaitingMessages() {\n return this._currentNumberOfMessages;\n }\n}\n\nexport default OmgService;","import BaseService from '../../base/base_service';\nimport _ from '../../utils/underscore';\nimport ExternalLinksController from '../../components/external_links/external_links_component_controller';\nimport * as EXTERNAL_LINKS_CONSTS from '../../components/external_links/external_links_consts';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport {RESPONSIBLE_GAMBLING_VIEW} from '../../components/game_navigation_bar/navbar_const';\nimport {NAVIGATION_VIEWS} from \"../../components/external_links/external_links_consts\";\n\n/**\n * GnwpService enables perform navigation / redirect appropriate to specified template and some additional parameters.\n * Template describes the service (web site) GNWP should redirect to.\n */\nclass OpenLinkService extends BaseService {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'OpenLinkService';\n\n\n /**\n * @property\n * @type {null}\n * @private\n */\n _model = null;\n\n\n /**\n *\n * @param params\n */\n init(params) {\n super.init(params);\n this._subscribe();\n }\n\n\n\n /**\n * Handle open external link event\n * @private\n */\n _subscribe() {\n this.onSystemEvent(SYSTEM_EVENTS.EXTERNAL_LINK_OPEN, (params) => {\n this.openLink(params);\n });\n }\n\n /**\n *\n * @params {object} linkParams {\n * source {string} - link or predefined key to open\n * view {string} - target that link will be open in. Values: 'iframe', 'window'. Default for regular link is 'iframe', for predefined - see documentation\n * options {object} - addinional parameters for link. Used for open page in specified mode\n * }\n *\n */\n openLink(linkParams) {\n if (!linkParams) {\n this.logger.warn('openLink called without parameters. Opening link was terminated');\n return;\n }\n let externalLinkComponent = ExternalLinksController.create(Object.assign(linkParams, {type: EXTERNAL_LINKS_CONSTS.COMPONENT_TYPES.API}));\n\n // execute open link\n return externalLinkComponent.openLink();\n }\n\n /**\n * load lobby page\n * @param view {string}\n */\n goToLobby(view = NAVIGATION_VIEWS.WINDOW){\n let lobbyUrl = this.serviceFactory.integrationService().getLobbyUrlLink();\n if (!lobbyUrl) {\n this.logger.error('Lobby url is not configured');\n return;\n }\n this.openLink({sourceLink: lobbyUrl, view: view});\n }\n\n openResponsibleGamblingLink(responsibleGamblingView) {\n let link = this.serviceFactory.skinService().getResponsibleGamblingLink();\n\n if (!link) {\n this.logger.error('Responsible gambling link is not configured');\n return;\n }\n\n if(_.isNullOrUndefined(responsibleGamblingView)) {\n responsibleGamblingView = this.serviceFactory.gameManagerService().responsibleGamblingView();\n }\n\n let view;\n switch (responsibleGamblingView) {\n case RESPONSIBLE_GAMBLING_VIEW.IFRAME:\n view = NAVIGATION_VIEWS.IFRAME;\n break;\n case RESPONSIBLE_GAMBLING_VIEW.WINDOW:\n view = NAVIGATION_VIEWS.WINDOW;\n break;\n case RESPONSIBLE_GAMBLING_VIEW.REDIRECT:\n view = NAVIGATION_VIEWS.REDIRECT;\n break;\n default:\n view = NAVIGATION_VIEWS.WINDOW;\n break;\n }\n this.openLink({sourceLink: link, view: view});\n }\n}\n\nexport default OpenLinkService;","import BaseService from '../../base/base_service';\nimport _ from '../../utils/underscore';\nimport IOpenSessions, {IOpenSessionDetails, OpenSessionsServiceInitParams} from './open_sessions_service_interface';\n\nclass OpenSessionsService extends BaseService implements IOpenSessions{\n\n static CLASS: string = 'OpenSessionsService';\n private _initParams: OpenSessionsServiceInitParams = null;\n\n init(params: OpenSessionsServiceInitParams) {\n super.init(params);\n this._setInitParams(params);\n }\n\n private _setInitParams(params: OpenSessionsServiceInitParams): void {\n this._initParams = {\n uri: params.uri,\n showBtnReminder: !_.isBoolean(params.showBtnReminder) ? true : params.showBtnReminder\n };\n }\n\n public getOpenSession(): any[] {\n if (this._isAuthorized()) {\n return this.serviceFactory.oAuth2Service().extractTokenProperty('openSessions');\n }\n\n this.logger.debug('The user is not authorized so getting empty open session => ', []);\n return [];\n }\n\n public getRealGameOpenSessions(gameType: number): Promise {\n const uri = this._initParams.uri + '/getOpenSessions';\n return this.serviceFactory.http2Service().post(uri, {\n gameTypes: [gameType],\n includeFreePlaySessions: false\n })\n .then(data => (data as any).sessionDetails);\n }\n\n public getAllGamesOpenSessions(): Promise {\n const uri = this._initParams.uri + '/getOpenSessions';\n return this.serviceFactory.http2Service().post(uri, {\n includeFreePlaySessions: false\n })\n .then(data => (data as any).sessionDetails);\n }\n\n public getPlayerOpenSessionsBalance(): Promise {\n return this.getPlayerRealMoneyOpenSessions().then((openSessions)=> {\n let sum = 0;\n for(let index=0, openSessionsLength = openSessions.length; index < openSessionsLength; index++) {\n const credit = openSessions[index].Credit;\n if(!_.isNullOrUndefined(credit)){\n sum += Number(credit);\n }\n }\n\n return sum;\n });\n }\n\n public getPlayerRealMoneyOpenSessions(): Promise {\n const uri = this._initParams.uri + '/getOpenSessions';\n return this.serviceFactory.http2Service().post(uri, {\n includeFreePlaySessions: false\n })\n .then(data => (data as any).sessionDetails);\n }\n\n private _filterOpenSessions(openSessions: any): Promise {\n return this._filterOpenSessionsByRestrictions(this._filterOpenSessionsByProductPackage(openSessions));\n }\n\n private _filterOpenSessionsByProductPackage(openSessions: any[]): any[]{\n openSessions = openSessions || [];\n const productPackageList = this.serviceFactory.skinService().getProductPackageActiveGroup();\n return openSessions.filter(openSession => {\n return -1 !== productPackageList.indexOf(openSession.ProductPackage);\n });\n }\n\n private _filterOpenSessionsByRestrictions(openSessions: any[]): Promise {\n const gameTypes = openSessions.map(openSession => openSession.GameTypeID);\n return this.serviceFactory.gamesInformationService().getGamesInfo(gameTypes)\n .then(gamesInfo => {\n const filteredOpenSessions = [];\n openSessions.forEach(openSession => {\n if (gamesInfo[openSession.GameTypeID]) {\n filteredOpenSessions.push(openSession);\n }\n });\n return filteredOpenSessions;\n });\n }\n\n private _isAuthorized(): boolean {\n return this.serviceFactory.oAuth2Service().isAuthorized();\n }\n}\n\nexport default OpenSessionsService;","import BaseService from '../../base/base_service';\nimport IOrbitComponentRenderService from './orbit_component_render_service_interface';\nimport {IPartyJackpotInGameWidgetComponentProps} from '../../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/party-jackpot-ingame-widget.component-props';\nimport {\n IGermanyResponsibleGamingButtonOptions,\n IOrbitComponentInSdk,\n IOrbitComponentToSdkAdapterService, IOrbitDialogInSdk\n} from '../../../../common/interfaces/orbit-component-to-sdk-adapter/orbit-component-to-sdk-adapter.service.interface';\nimport {\n ITimeSpentReminderWithBalanceComponentProps,\n ITimeSpentReminderOptions\n} from '../../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/time-spent-reminder-options';\nimport {IShowPartyJackpotWelcomePopupOptions} from '../../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/show-party-jackpot-welcome-popup-options';\nimport {IStatePopupOptions} from \"../../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/state-popup.component-props\";\nimport Event from \"../../utils/event\";\nimport {SYSTEM_EVENTS} from \"../../events/events\";\n\ninterface OrbitComponentRendererServiceParams {\n getOrbitComponentToSdkAdapter: () => IOrbitComponentToSdkAdapterService;\n}\n\nexport default class OrbitComponentRenderService extends BaseService implements IOrbitComponentRenderService {\n static CLASS = 'OrbitComponentRenderService';\n\n init(params: OrbitComponentRendererServiceParams) {\n super.init(params);\n this._getOrbitComponentToSdkAdapter = params.getOrbitComponentToSdkAdapter;\n }\n\n private _getOrbitComponentToSdkAdapter: () => IOrbitComponentToSdkAdapterService;\n\n renderPartyJackpotInGameWidget(element: HTMLElement, props: IPartyJackpotInGameWidgetComponentProps): IOrbitComponentInSdk {\n return this._getOrbitComponentToSdkAdapter().renderPartyJackpotInGameWidget(element, props);\n }\n\n renderGermanyResponsibleGamingButtons(element: HTMLElement, options?:IGermanyResponsibleGamingButtonOptions): IOrbitComponentInSdk{\n return this._getOrbitComponentToSdkAdapter().renderGermanyResponsibleGamingButtons(element, options);\n }\n\n showPartyJackpotWelcomePopup(props: IShowPartyJackpotWelcomePopupOptions): IOrbitDialogInSdk {\n return this._getOrbitComponentToSdkAdapter().showPartyJackpotWelcomePopup(props);\n }\n\n showLocationPopup(props: IStatePopupOptions) {\n Event.fire(SYSTEM_EVENTS.LOCATION_POPUP_OPEN);\n return this._getOrbitComponentToSdkAdapter().showLocationPopup(props);\n }\n\n showTimeSpentReminderWithDropdown(options: ITimeSpentReminderOptions): IOrbitDialogInSdk {\n return this._getOrbitComponentToSdkAdapter().showTimeSpentReminderWithDropdown(options);\n }\n\n showTimeSpentReminderWithBalance(options: ITimeSpentReminderWithBalanceComponentProps): IOrbitDialogInSdk {\n return this._getOrbitComponentToSdkAdapter().showTimeSpentReminderWithBalance(options);\n }\n}","module.exports = \"
\\n\\n\\n\";","module.exports = \"
\\n
\\n
\\n
\\n
\";","import BaseService from '../../base/base_service';\nimport IPariPlayService, {IPariplayFusion} from './pariplay_service_interface';\n\n\ninterface PariPlayServiceParams {\n fusionInclusionUrl: string;\n}\n\nexport default class PariPlayService extends BaseService implements IPariPlayService {\n static CLASS = 'PariPlayService';\n\n private _initParams: PariPlayServiceParams = null;\n\n init(params: PariPlayServiceParams) {\n super.init(params);\n this._initParams = params;\n }\n\n private _fusion: IPariplayFusion = null;\n\n\n private _getFusion(): Promise {\n if(this._fusion) {\n this.logger.info(`Pariplay fusion object was already loaded`);\n return Promise.resolve(this._fusion);\n }\n return this.serviceFactory.scriptLoaderService().loadScript(this._initParams.fusionInclusionUrl, 'PariPlayFusion')\n .then(() => {\n const fusion = this.serviceFactory.windowService().getGlobalProperty('fusion');\n if(!fusion) {\n throw new Error('Pariplay fusion object was not found in the window global scope');\n }\n this.logger.info(`Pariplay fusion inclusion script was successfully loaded`);\n this._fusion = fusion;\n return this._fusion;\n });\n }\n\n initFusion(pariplayGameCode: string): Promise {\n this.logger.info(`Initializing Pariplay fusion for game code ${pariplayGameCode}`);\n return this._getFusion().then(fusion => {\n\n return new Promise((resolve, reject) => {\n let timeout = setTimeout(() => {\n const msg = 'Pariplay fusion.init() timeout';\n this.logger.error(msg);\n reject(msg);\n }, 10000); // this is just in case fusion.init() doesn't call either onSuccess or onError.\n\n fusion.init({\n gameCode: pariplayGameCode,\n onSuccess: () => {\n clearTimeout(timeout);\n this.logger.info(`Initialized Pariplay fusion for game code ${pariplayGameCode}`);\n resolve(fusion);\n },\n onError: (err) => {\n clearTimeout(timeout);\n this.logger.error(`Failed to init Pariplay fusion for game code ${pariplayGameCode}; errorDetails: ${JSON.stringify(err)}`);\n reject(err);\n }\n });\n });\n }).then(fusion => {\n return fusion as IPariplayFusion;\n });\n }\n}\n","var map = {\n\t\"./wallet_fallback_handler.ts\": 549\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 782;","import BaseService from \"../../../base/base_service\";\nimport { IElasticEventData } from \"../../../../../common/interfaces/structured-logging-service-interface\";\n\nexport default class FirebaseElasticService extends BaseService{\n\n static CLASS = 'FirebaseElasticService';\n\n sendConnected(){\n this._sendElasticEvent('FIREBASE_CONNECTED');\n }\n\n sendFallbackStarted(label: string, forced: boolean = false){\n this._sendElasticEvent('FIREBASE_FALLBACK_STARTED', label, forced ? \"Forced\" : \"Not Forced\");\n }\n\n sendConnectionFailed(label: string, value: string){\n this._sendElasticEvent('FIREBASE_CONNECTION_FAILED', label, value);\n }\n\n sendSubscriptionError(label: string, value: string){\n this._sendElasticEvent('FIREBASE_SUBSCRIPTION_ERROR', label, value);\n }\n\n sendMessageUpdate(label: string, value: string){\n this._sendElasticEvent('FIREBASE_MESSAGE_UPDATE', label, value);\n }\n\n private _sendElasticEvent(action: string, label: string = null, value: string = null){\n const data: IElasticEventData = {\n CGPEventCategory: 'FIREBASE',\n CGPEventAction: action\n };\n if (label) data.CGPEventLabel = label;\n if (value) data.CGPEventValue = value;\n this.serviceFactory.structuredLoggingService().getLogger(data).info();\n }\n}\n","var map = {\n\t\"./bankroll_handler.ts\": 785,\n\t\"./freeplay_handler.ts\": 786,\n\t\"./messages_handler.ts\": 1043,\n\t\"./netposition_handler.ts\": 787\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 784;","import FirebaseHandlerBase from \"../firebase_handler_base\";\nimport {SYSTEM_EVENTS} from \"../../../../events/events\";\nimport Event from \"../../../../utils/event\";\nimport {ISubscriptionParams} from \"../firebase_const\";\n\ninterface BankrollData {\n casinoRM: number;\n cid: number;\n currency: string;\n dateUpdated: {};\n pokerRM: number;\n realBR: number;\n sportRM: number;\n updateCounter: number;\n IsCasinoBankrollRestricted?: boolean | string | number;\n}\n\nexport default class BankrollHandler extends FirebaseHandlerBase{\n static CLASS = 'BankrollHandler';\n\n protected getSubscriptionParams(): ISubscriptionParams {\n return {\n eventName: 'bankroll',\n successCallback: this._updateBankroll,\n params: {currency: this.serviceFactory.currencyService().getCurrency()}\n };\n }\n\n protected getFeatureName(): string {\n return \"BR\";\n }\n\n protected getFeatureLabel(): string {\n return \"Bankroll\";\n }\n\n\n protected getFallbackServiceName(): string{\n return \"Wallet\";\n }\n\n private _updateBankroll = (data: BankrollData) => {\n this.logger.debug('Firebase got BR message. Raw data: ' + JSON.stringify(data));\n\n const balanceData = {\n Balance: this._getBalance(data),\n Currency: data.currency,\n RealMoneyBankroll: data.realBR,\n };\n\n Event.fire(SYSTEM_EVENTS.SESSION_EVENT_WALLET, balanceData);\n\n this.logger.debug('FIREBASE got BR message. Parsed data: ' + JSON.stringify(balanceData));\n\n // filter elastic bankroll updates only for vip users, avoiding too much reporting\n const accountData = this.serviceFactory.userService().getAccountData();\n if (accountData && accountData.IsVip) {\n this.serviceFactory.firebaseElasticService().sendMessageUpdate(this.getFeatureLabel(), JSON.stringify(data));\n }\n \n };\n\n private _getBalance(data: BankrollData): number{\n const bonus = data.casinoRM || 0;\n const isRestricted: boolean = data.IsCasinoBankrollRestricted === \"true\" ||\n data.IsCasinoBankrollRestricted === true ||\n data.IsCasinoBankrollRestricted === \"1\" ||\n data.IsCasinoBankrollRestricted === 1;\n return (isRestricted) ? 0 : (data.realBR + bonus);\n }\n}\n","import FirebaseHandlerBase from \"../firebase_handler_base\";\nimport {IFreePlayVoucher} from \"../../../free_play/Free_play_voucher\";\nimport {SYSTEM_EVENTS} from \"../../../../events/events\";\nimport Event from '../../../../utils/event';\nimport _ from \"../../../../utils/underscore\";\nimport {FP_VOUCHER_TYPES} from \"../../../free_play/free_play_consts\";\nimport {IExpirationDate, ISubscriptionParams} from \"../firebase_const\";\n\n\nenum TYPES{\n ADDED = \"added\",\n REMOVED = \"removed\",\n MODIFIED = \"modified\"\n}\n\ninterface FPVoucherData{\n CurrentBalance: number;\n ExpirationDate: IExpirationDate;\n FreePlayId: number;\n FreePlayTypeId: number;\n GameTypeIdList: number[];\n MaxBetAmount: number;\n OriginAmount: number;\n UpdateCounter: number;\n Winnings: number;\n PendingDeletion?: boolean;\n}\n\ninterface IFPReceivedVoucher{\n data: FPVoucherData;\n type: TYPES;\n id: string;\n}\n\nexport default class FreeplayHandler extends FirebaseHandlerBase{\n static class: string = \"FreeplayHandler\";\n\n protected getSubscriptionParams(): ISubscriptionParams {\n return {\n eventName: 'freePlay',\n successCallback: this._updateFreePlay,\n };\n }\n\n protected getFeatureName(): string {\n return \"FP\";\n }\n\n protected getFeatureLabel(): string {\n return \"FreePlay\";\n }\n\n protected getFallbackServiceName(): string{\n return \"Wallet\";\n }\n\n private _updateFreePlay = (data: IFPReceivedVoucher[]) => {\n this.logger.debug('Firebase got FP message. Raw data: ' + JSON.stringify(data));\n\n if(data.length !== 0){\n const updatedVouchers = this._parseVouchers(data);\n Event.fire(SYSTEM_EVENTS.SESSION_EVENT_FREE_PLAY_RECEIVED, updatedVouchers);\n this.logger.debug('Firebase got FP message. Parsed data: ' + JSON.stringify(updatedVouchers));\n }\n this.serviceFactory.firebaseElasticService().sendMessageUpdate(this.getFeatureLabel(), JSON.stringify(data));\n }\n\n private _parseVouchers(freeplayData: IFPReceivedVoucher[]): IFreePlayVoucher[]{\n const updatedVouchers = [] as IFreePlayVoucher[];\n freeplayData.forEach((voucher: IFPReceivedVoucher) => {\n const receivedData: FPVoucherData = voucher.data;\n const FPvoucher: IFreePlayVoucher = {\n ID: receivedData.FreePlayId.toString(),\n CurrentBalance: receivedData.CurrentBalance,\n Winnings: receivedData.Winnings,\n FreePlayTypeId: (receivedData.FreePlayTypeId ? receivedData.FreePlayTypeId.toString() : '1') as FP_VOUCHER_TYPES,\n OriginAmount: receivedData.OriginAmount,\n ExpirationDate: receivedData.ExpirationDate ? new Date(1000*receivedData.ExpirationDate.seconds) : undefined,\n SpinBetAmount: receivedData.MaxBetAmount,\n GameTypeIDList: receivedData.GameTypeIdList,\n PendingDeletion: _.isNullOrUndefined(receivedData.PendingDeletion) ? false : _.toBoolean(receivedData.PendingDeletion)\n };\n switch(voucher.type) {\n case TYPES.ADDED:\n case TYPES.MODIFIED:\n updatedVouchers.push(FPvoucher);\n break;\n case TYPES.REMOVED:\n this.logger.debug(`Firebase got FP message. Remove voucher id: ${FPvoucher.ID}`);\n Event.fire(SYSTEM_EVENTS.SESSION_EVENT_FREE_PLAY_REMOVED, FPvoucher.ID);\n break;\n }\n });\n\n return updatedVouchers;\n }\n}","import FirebaseHandlerBase from \"../firebase_handler_base\";\nimport {ISubscriptionParams} from \"../firebase_const\";\nimport {SYSTEM_EVENTS} from \"../../../../events/events\";\nimport Event from '../../../../utils/event';\n\n\nexport interface INetPositionGameTypeData{\n currency: string;\n amount: number;\n cid: number;\n gameTypeId: number;\n playerSessionId: number;\n timestamp: number;\n}\n\ninterface INPReceivedInfo{\n data: INetPositionGameTypeData;\n id: string;\n}\n\nexport default class NetPositionHandler extends FirebaseHandlerBase{\n static class: string = \"NetPositionHandler\";\n\n protected getSubscriptionParams(): ISubscriptionParams {\n return {\n eventName: 'casinoGamesNetPosition',\n successCallback: this._updateNetPosition\n };\n }\n\n protected getFeatureName(): string {\n return \"NetPosition\";\n }\n\n protected getFeatureLabel(): string {\n return \"NetPosition\";\n }\n\n protected getFallbackServiceName(): string{\n return null;\n }\n\n private _updateNetPosition = (collectionData: INPReceivedInfo[]) => {\n if(collectionData.length !== 0){\n const updatedGameTypes: INetPositionGameTypeData[] = collectionData.map(t => t.data);\n\n Event.fire(SYSTEM_EVENTS.SESSION_EVENT_NET_POSITION_UPDATE, updatedGameTypes);\n\n this.logger.debug('Firebase got net positions message. Parsed data: ' + JSON.stringify(updatedGameTypes));\n\n //Filter elastic Net position updates only for vip users, avoiding too much reporting\n const accountData = this.serviceFactory.userService().getAccountData();\n if (accountData && accountData.IsVip) {\n this.serviceFactory.firebaseElasticService().sendMessageUpdate(this.getFeatureLabel(), JSON.stringify(updatedGameTypes));\n }\n }\n }\n}","import BaseService from '../../base/base_service';\nimport DOM from '../../utils/dom';\nimport Event from '../../utils/event';\nimport {SYSTEM_EVENTS} from '../../events/events';\n\nclass PostMessageService extends BaseService {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'PostMessageService';\n\n\n /**\n *\n * @param params\n */\n init(params) {\n super.init(params);\n\n this._onListenEvent();\n }\n\n\n /**\n * Getting the post message object, and should get in the event.data a function name\n * And the listener should redirect and fire the specifiec function if it exist in the\n * Post messages.\n *\n * @param postEvent\n * @public\n */\n listener(postEvent) {\n if (!postEvent) {\n this.logger.error('The incoming event in undefined');\n return;\n }\n\n this.logger.debug(postEvent);\n Event.fire(SYSTEM_EVENTS.POST_MESSAGE_ARRIVE, postEvent);\n }\n\n\n /**\n * Listen to the message event, and when it kick in the listener function should fire.\n *\n * @private\n */\n _onListenEvent() {\n if (window.addEventListener) {\n DOM.addEventListener(window, 'message', this.listener.bind(this), false);\n } else {\n // IE shits..\n window.attachEvent('onmessage', this.listener.bind(this));\n }\n }\n\n\n /**\n * Send post message\n */\n sendPostMessage(targetWindow, message = {}, targetOrigin = \"*\"){\n this.logger.info('Send post message', message);\n targetWindow.postMessage(message, targetOrigin);\n }\n}\n\n\nexport default PostMessageService;","import BaseService from '../../base/base_service';\nimport _ from '../../utils/underscore';\nimport Event from '../../utils/event';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport Store from '../../utils/store';\n\n\nconst EMPTY = '';\n\nclass QueryStringDetectorService extends BaseService {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'QueryStringDetectorService';\n\n _handlersMap = null;\n\n /**\n * Initialize query string detector service.\n *\n * @param params\n */\n init(params) {\n super.init(params);\n this.onPageLoadCGP();\n }\n\n\n\n\n /**\n * On page load cgp for handling.\n *\n * @returns {QueryStringDetectorService}\n */\n onPageLoadCGP() {\n this.onSystemEvent(SYSTEM_EVENTS.ON_ORBIT_INIT_COMPLETE, () => {\n let queryStringParams = _.getQueryParameters();\n Object.keys(queryStringParams).forEach((queryParamName) => {\n if (EMPTY === queryParamName) {\n return;\n }\n\n let handler = this._getQueryHandler(queryParamName);\n\n if (_.isFunction(handler)) {\n handler.call(this, queryStringParams);\n }\n });\n\n // we subscribe to this only after all handlers run becasue if we have autologin it will logout and login the user.\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, () => {\n if(!this.serviceFactory.oAuth2Service().isAuthorized()) {\n this._clearStore();\n }\n });\n });\n\n return this;\n }\n\n isInAutologin() {\n return !_.isEmpty(this._getAutologinToken(_.getQueryParameters()));\n }\n\n _initializeHandlersMap() {\n this._handlersMap = {\n [this._autologinParameterName()]: this.tokenHandler,\n reason: this.reasonHandler,\n sourcesubbrand: this.sourceSubBrandHandler,\n linkid: this.linkIDHandler,\n sourceproductpackage: this.sourceProductPackageHandler,\n clientversion:this.clientVersionHandler,\n specificnavigation: this.specificNavigationHandler\n };\n }\n\n /**\n *\n * @param queryParamName\n * @returns {*}\n * @private\n */\n _getQueryHandler(queryParamName) {\n queryParamName = queryParamName.toLowerCase();\n\n if(!this._handlersMap) {\n this._initializeHandlersMap();\n }\n\n return this._handlersMap[queryParamName];\n }\n\n _autologinParameterName() {\n return this.serviceFactory.oAuth2Service().getAutologinKey().toLowerCase();\n }\n\n /**\n * Reason handler.\n *\n * @param reason\n */\n reasonHandler(queryStringParams) {\n let reason = this._getQueryParamValue(queryStringParams,'reason');\n this.serviceFactory.gameReasonService().handleReason(reason);\n }\n\n _clearStore() {\n Store.del(['linkID', 'sourceProductPackage','sourceSubBrand', 'specificNavigation']);\n }\n\n _sendAnalytics(label, value) {\n let analyticsData = {\n category: '[Technical-event]',\n action: 'QueryDetector',\n label: label,\n value: value\n };\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticsData);\n }\n\n\n sourceProductPackageHandler(queryStringParams) {\n let sourceProductPackage = this._getQueryParamValue(queryStringParams, 'sourceProductPackage');\n Store.set('sourceProductPackage', sourceProductPackage);\n }\n\n clientVersionHandler(queryStringParams) {\n let clientVersion = this._getQueryParamValue(queryStringParams, 'ClientVersion');\n Store.set('ClientVersion', clientVersion);\n }\n\n sourceSubBrandHandler(queryStringParams) {\n let sourceSubBrand = this._getQueryParamValue(queryStringParams, 'sourceSubBrand');\n Store.set('sourceSubBrand', sourceSubBrand);\n }\n\n linkIDHandler(queryStringParams) {\n let linkID = this._getQueryParamValue(queryStringParams, 'linkID');\n Store.set('linkID', linkID);\n }\n\n _getAutologinToken(queryStringParams) {\n return this._getQueryParamValue(queryStringParams, this._autologinParameterName());\n }\n /**\n *\n * @param queryStringParams\n */\n tokenHandler(queryStringParams) {\n let token = this._getAutologinToken(queryStringParams);\n let sessionTimerOffset = this._extractSessionTimerOffset(queryStringParams);\n let sourceProductPackage = this._getQueryParamValue(queryStringParams, 'sourceProductPackage');\n let brandId = this._getQueryParamValue(queryStringParams, 'brandId');\n let sourceSubBrandId = this._getQueryParamValue(queryStringParams, 'sourceSubBrand');\n let targetSubBrandId = this._getQueryParamValue(queryStringParams, 'targetSubBrand');\n\n this.serviceFactory.oAuth2Service().runAutoLogin(token, sessionTimerOffset, sourceProductPackage, brandId, sourceSubBrandId, targetSubBrandId);\n }\n\n specificNavigationHandler(queryStringParams) {\n let specificNavigation = this._getQueryParamValue(queryStringParams, 'specificNavigation');\n\n Store.set('specificNavigation', specificNavigation);\n }\n\n getSourceSubBrand() {\n return Store.get('sourceSubBrand');\n }\n\n getExternalBrandCallbackURL() {\n if(!this._externalBrandCallbackURL) {\n this._parseSpecificNavigation();\n }\n\n return this._externalBrandCallbackURL;\n }\n\n getExternalBrandCallbackURLMethod() {\n if(!this._externalBrandCallbackURL) {\n this._parseSpecificNavigation();\n }\n\n return this._externalBrandCallbackURLMethod;\n }\n\n _parseSpecificNavigation() {\n let specificNavigationString = Store.get('specificNavigation');\n if(!specificNavigationString) {\n return;\n } else if (specificNavigationString.startsWith('http')) {\n this._externalBrandCallbackURL = specificNavigationString;\n } else {\n const specificNavigationDoc = _.parseXml(specificNavigationString);\n if (specificNavigationDoc) {\n const callbackUrlElems = specificNavigationDoc.getElementsByTagName(\"CallBackURL\");\n if (callbackUrlElems && callbackUrlElems.length) {\n this._externalBrandCallbackURL = callbackUrlElems.item(0).textContent;\n }\n\n const callbackMethodElems = specificNavigationDoc.getElementsByTagName(\"callbackMethod\");\n if (callbackMethodElems && callbackMethodElems.length) {\n this._externalBrandCallbackURLMethod = callbackMethodElems.item(0).textContent;\n }\n }\n }\n }\n\n _getQueryParamValue(queryStringParams, paramName) {\n paramName = paramName.toLowerCase();\n let keys = Object.keys(queryStringParams);\n\n for (let i = 0; i < keys.length; i++) {\n if (keys[i].toLowerCase() === paramName) {\n return queryStringParams[keys[i]];\n }\n }\n\n return null;\n }\n\n _extractSessionTimerOffset(queryStringParams) {\n let sessionTimerOffset = this._getQueryParamValue(queryStringParams, 'sessionTimer');\n try {\n if (sessionTimerOffset) {\n return TimeSpan.fromSeconds(sessionTimerOffset);\n }\n } catch (err) {\n this.logger.error(`Failed to parse sessionTimer from the query params! sessionTimer=${sessionTimerOffset}; Error: ${err}`);\n }\n\n return null;\n }\n}\n\n\nexport default QueryStringDetectorService;","import _ from '../../utils/underscore'; // eslint-disable-line id-length\nimport Event from '../../utils/event';\nimport BaseService from '../../base/base_service';\nimport { SYSTEM_EVENTS } from '../../events/events';\nimport IRecentlyPlayedService from './recently_played_service_interface';\nimport Store from \"../../utils/store\";\n\nconst RECENTLY_PLAYED_LOCAL_STORAGE_KEY= \"recently_played_games\";\n\nclass RecentlyPlayedService extends BaseService implements IRecentlyPlayedService{\n\n static CLASS: string = 'RecentlyPlayedService';\n\n //Internal copy of the recently played games list\n private _recentlyPlayedList: number[] = [];\n private _lastUpdateTime: number = null;\n private _refreshInterval: number = 10000;\n\n init(params) {\n super.init(params);\n this._subscribe();\n }\n\n //closeGame from GameManagerService triggers this update MANUALLY ( only if the game was in real mode ) since there is no event for this !!!\n private _subscribe(): void {\n this.onSystemEvent(SYSTEM_EVENTS.ON_ORBIT_INIT_COMPLETE, this._onOrbitInitComplete);\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, this._updateRecentlyPlayedGames);\n this.onSystemEvent(SYSTEM_EVENTS.CLOSE_GAME, (data)=> {this._onCloseGame(data.gameType)});\n }\n\n private _isUpdateRequired(newTime: number): boolean {\n return _.isNull(this._lastUpdateTime) || newTime - this._lastUpdateTime >= this._refreshInterval;\n }\n\n //Getter for the internal games list -< will result in an update call if the list is undefined\n public getRecentlyPlayedList(): Promise {\n if (_.isEmpty(this._recentlyPlayedList) || this._isUpdateRequired(new Date().getTime())) {\n return this._updateRecentlyPlayedGames();\n }\n return Promise.resolve(this._recentlyPlayedList || []);\n }\n\n private _onCloseGame(gameType: number): void {\n if(!this._isAuthorized()) {\n return;\n }\n\n let recentlyPlayedListCopy = [...this._recentlyPlayedList];\n let gameTypeIndexInList = recentlyPlayedListCopy.indexOf(gameType);\n if(gameTypeIndexInList !== -1) {\n recentlyPlayedListCopy.splice(gameTypeIndexInList, 1);\n }\n\n recentlyPlayedListCopy.unshift(gameType);\n this._fireUpdateEvent(recentlyPlayedListCopy);\n }\n\n private _onOrbitInitComplete() {\n const recentlyPlayedFromLocalStorage = Store.get(RECENTLY_PLAYED_LOCAL_STORAGE_KEY);\n if(recentlyPlayedFromLocalStorage) {\n this._recentlyPlayedList = recentlyPlayedFromLocalStorage.split(\",\")?.map(Number);\n this._fireUpdateEvent(this._recentlyPlayedList);\n }\n }\n\n private _updateRecentlyPlayedGames(): Promise {\n if (!this._isAuthorized()) {\n return Promise.resolve(this._recentlyPlayedList || []);\n }\n\n return this._getRecentlyPlayedFromServer().then(recentlyPlayedList => {\n this._fireUpdateEvent(recentlyPlayedList);\n return this._recentlyPlayedList;\n });\n }\n\n private _getRecentlyPlayedFromServer(): Promise {\n return this.serviceFactory.historyService().getRecentlyPlayed()\n .then(data => {\n return data.gameTypes || [];\n })\n .then(recentlyPlayedGames => {\n return this._filterRestrictedGames(recentlyPlayedGames);\n })\n .then(recentlyPlayedGamesFilterRestrictions => {\n return this._filterByLayout(recentlyPlayedGamesFilterRestrictions);\n }).catch(() => []);\n }\n\n //Updates the internal refference to the recently played list received from the server\n //Fires a RECENTLY_PLAYED_GAMES_UPDATED event to notify the system of the update\n private _fireUpdateEvent(recentlyPlayedList: number[]): void {\n this._lastUpdateTime = new Date().getTime();\n this._recentlyPlayedList = recentlyPlayedList;\n Event.fire(SYSTEM_EVENTS.RECENTLY_PLAYED_GAMES_UPDATED, this._recentlyPlayedList || []);\n Store.set(RECENTLY_PLAYED_LOCAL_STORAGE_KEY, this._recentlyPlayedList || []);\n }\n\n //Filters the recently games list according to IntegrationService and restrictions\n private _filterRestrictedGames(recentlyPlayedGameTypes): Promise {\n return this.serviceFactory.gamesInformationService().getAllGamesInfo()\n .then((gamesInfo) => {\n const result = [];\n for (const gameType of recentlyPlayedGameTypes) {\n if (gamesInfo[gameType]) {\n result.push(gameType);\n }\n }\n return result;\n });\n }\n\n private _isAuthorized(): boolean {\n return this.serviceFactory.oAuth2Service().isAuthorized();\n }\n\n private _filterByLayout(recentlyPlayedGameTypes: number[]): Promise {\n const result = this.serviceFactory.integrationService().filterInLayoutGames(recentlyPlayedGameTypes);\n if (result) {\n return result;\n }\n\n return Promise.resolve(recentlyPlayedGameTypes);\n }\n}\n\nexport default RecentlyPlayedService;","import BaseService from '../../base/base_service';\nimport IRedTigerService from './red_tiger_service_interface';\n\ninterface RedTigerServiceParams {\n RedTigerEnvironment: string;\n}\n\nexport default class RedTigerService extends BaseService implements IRedTigerService {\n\n static CLASS = 'RedTigerService';\n\n private _initParams: RedTigerServiceParams = null;\n\n init(params: RedTigerServiceParams) {\n super.init(params);\n this._initParams = params;\n }\n\n public getRedTigerEnvironment(): string {\n return this._initParams.RedTigerEnvironment;\n }\n}\n","module.exports = \"\\n\";","module.exports = \"\\n\\n\";","module.exports = \"\";","module.exports = \"
\\n
\";","module.exports = \"
\\n
\\n \\n \\n \\n
\\n
\";","module.exports = \"
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\";","module.exports = \"
\\n
\\n \\n
\\n
\";","module.exports = \"
\\n
\\n
\\n {nj_jersey_country_name | translate}\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\";","module.exports = \"\\n \\n \\n \\n \\n \\n \\n \\n \\n
{reality_check_session_time_description | translate}{elapsed_time | inject}
{session_balance_description | inject}{session_balance | inject}
\\n\";","module.exports = \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{reality_check_session_cooldown_description | translate}
{reality_check_session_time_description | translate}{elapsed_time | inject}
{session_balance_description | inject}{session_balance | inject}
{reality_check_session_cooldown_remaining | translate}
{reality_check_thank_you_message | translate}
\\n\";","import BaseService from \"../../base/base_service\";\nimport ISafezoneLoaderService, {SafezoneLoaderServiceInitParams} from \"./safezone_loader_service_interface\";\nimport _ from \"../../utils/underscore\";\n\nclass SafezoneLoaderService extends BaseService implements ISafezoneLoaderService {\n static CLASS: string = 'SafezoneLoaderService';\n private sdkUrl:string = null;\n\n init(params:SafezoneLoaderServiceInitParams):void {\n super.init(params);\n if(_.isNullOrUndefined(params.sdkUrl)) {\n this.throwError('12',`${this.getClassName()} expects parameter sdkUrl which was not supplied`, {params});\n }\n this.sdkUrl = params.sdkUrl;\n }\n\n public loadSafezoneSdk():Promise{\n return this.serviceFactory.scriptLoaderService().loadScript(this.sdkUrl, \"safezonelibrary\");\n }\n}\nexport default SafezoneLoaderService;","import BaseService from '../../base/base_service';\nimport DOM from '../../utils/dom';\nimport IScriptLoaderService from './script_loader_service_interface';\n\nexport default class ScriptLoaderService extends BaseService implements IScriptLoaderService {\n static CLASS = 'ScriptLoaderService'\n\n loadScript(url: string, tagId?: string, type?: string): Promise {\n\n return new Promise((resolve, reject) => {\n let loadScriptWithRetry = (retryCount: number) => {\n let scriptTag = document.createElement('script');\n const ignoreOneTrustAtt = document.createAttribute(\"data-ot-ignore\");\n scriptTag.setAttributeNode(ignoreOneTrustAtt);\n scriptTag.id = tagId;\n scriptTag.src = url;\n if(type) {\n scriptTag.type = type;\n }\n scriptTag.onload = () => resolve();\n scriptTag.onerror = (err) => {\n document.body.removeChild(scriptTag);\n if(retryCount === 0) {\n reject(err);\n this.logger.error(`Failed to load script: ${url}`);\n\n } else {\n DOM.setTimeout(() => loadScriptWithRetry(retryCount - 1), 500);\n }\n };\n\n document.body.appendChild(scriptTag);\n };\n\n loadScriptWithRetry(6);\n });\n }\n}\n","import BaseService from \"../../base/base_service\";\nimport Event from '../../utils/event';\nimport { SYSTEM_EVENTS } from \"../../events/events\";\nimport { FP_VOUCHER_TYPES } from \"../free_play/free_play_consts\";\nimport { IFreePlayVoucher } from \"../free_play/Free_play_voucher\";\nimport { FreePlayVoucherList } from \"../free_play/free_play_voucher_list\";\nimport IThirdPartyFreePlayService from \"./third_party_free_play_service_interface\";\nimport _ from '../../utils/underscore';\nimport { GAMES_INFO } from \"../games_information/games_information_service_interface\";\nimport { GNWP_SOURCES } from \"../../components/external_links/external_links_consts\";\n\ninterface ThirdPartyFreePlayServiceParams {\n uri: string;\n enabled: boolean;\n}\n\nexport interface FreePlayResponse {\n FreePlayBonusList: FreePlayDataInfo[];\n}\n\ninterface IFreeSpinsInfo {\n BetPerSpin: number;\n\n NumberOfAwardedFreeSpins: number;\n\n NumberOfFreeSpinsLeft: number;\n}\n\ninterface IVoucherInfo {\n RemainingFreePlayAmount: number;\n}\n\nenum FREE_PLAY_TYPE {FreePlay = 1, Voucher = 2}\n\ninterface FreePlayDataInfo {\n CompanyID: number;\n CurrencyCode: string;\n CurrentWinningAmount: number;\n ExpirationDate: Date;\n FreePlayID: number;\n FreePlayTypeID: FREE_PLAY_TYPE;\n GameTypesIDs: number[];\n BonusStatus: number;\n AwardedFreePlayAmount: number;\n FreeSpinsInfo?: IFreeSpinsInfo;\n VoucherInfo?: IVoucherInfo;\n}\n\n\nexport default class ThirdPartyFreePlayService extends BaseService implements IThirdPartyFreePlayService {\n\n static CLASS = 'ThirdPartyFreePlayService';\n \n _serviceUri: string = '';\n \n _enabled = false;\n\n private _thirdPartyVouchers = new FreePlayVoucherList();\n\n protected init(params: ThirdPartyFreePlayServiceParams): void {\n super.init(params);\n this._serviceUri = params.uri || '';\n if (!this._serviceUri.endsWith('/')) {\n this._serviceUri += '/';\n }\n this._enabled = params.enabled ? params.enabled : false;\n this._subscribe();\n }\n\n private _subscribe() {\n if (this._enabled) {\n this.onSystemEvent([SYSTEM_EVENTS.OAUTH_STATE_CHANGE, SYSTEM_EVENTS.ON_INIT_COMPLETE], this.refreshVouchers);\n this.onSystemEvent([SYSTEM_EVENTS.CLOSE_GAME], this.refreshVouchers);\n this.onSystemEvent([SYSTEM_EVENTS.EXTERNAL_LINK_CLOSED], (linkSource) => {\n if (GNWP_SOURCES.MY_ACCOUNT === linkSource || GNWP_SOURCES.OMG === linkSource || GNWP_SOURCES.CASHIER === linkSource) {\n this.refreshVouchers();\n }\n });\n\n this.onSystemEvent(SYSTEM_EVENTS.DEPOSIT_WIDGET_CLOSED, this.refreshVouchers)\n }\n }\n\n refreshVouchers(): Promise {\n if (!this.serviceFactory.oAuth2Service().isAuthorized()) {\n // reset stored voucher info\n this._updateThirdPartyVouchers([]);\n return Promise.resolve([]);\n } else {\n return this._getThirdPartyVouchers();\n }\n }\n\n private _updateThirdPartyVouchers(vouchers: IFreePlayVoucher[]) {\n this._thirdPartyVouchers.reset(vouchers);\n Event.fire(SYSTEM_EVENTS.SESSION_EVENT_THIRD_PARTY_FREE_PLAY_UPDATED, vouchers);\n }\n\n private _convertToVoucher(voucherData: FreePlayDataInfo, gamesInfo: GAMES_INFO): IFreePlayVoucher {\n const activeCurrency = this.serviceFactory.currencyService().getCurrency();\n if (!voucherData.CurrencyCode || voucherData.CurrencyCode !== activeCurrency) {\n throw new Error(`Received third party voucher currency ${voucherData.CurrencyCode} is different than current currency ${activeCurrency}`);\n }\n\n const gameTypes: number[] = voucherData.GameTypesIDs && _.isArray(voucherData.GameTypesIDs) ? voucherData.GameTypesIDs : [];\n const availableGames: number[] = gameTypes.filter(gt => gamesInfo[gt] != null);\n const betAmounts: number[] = availableGames.map(gt => gamesInfo[gt].maxBet);\n\n if (voucherData.FreePlayTypeID === FREE_PLAY_TYPE.FreePlay) {\n if (!voucherData.FreeSpinsInfo) {\n throw new Error(`Received voucher ${voucherData.FreePlayID} has no FreeSpinsInfo.`);\n }\n \n // normally we should get bet per spin from backend\n let spinBetAmount = voucherData.FreeSpinsInfo.BetPerSpin;\n if (!spinBetAmount) {\n // maxBetAmount information is required since:\n // 1) in _formatVoucherUnit() for free play formula is value = value / maxBet;\n // 2) in _filterGamesByMinBet() it is required that CurrentBallance >= minBet\n const maxBetAmount = Math.max(...betAmounts);\n spinBetAmount = maxBetAmount;\n }\n\n const voucher: IFreePlayVoucher = {\n ID: voucherData.FreePlayID.toString(),\n CurrentBalance: voucherData.FreeSpinsInfo.NumberOfFreeSpinsLeft * spinBetAmount,\n Winnings: Number(voucherData.CurrentWinningAmount),\n FreePlayTypeId: FP_VOUCHER_TYPES.FreeSpin,\n OriginAmount: voucherData.FreeSpinsInfo.NumberOfAwardedFreeSpins * spinBetAmount,\n ExpirationDate: new Date(voucherData.ExpirationDate),\n SpinBetAmount: spinBetAmount, \n GameTypeIDList: availableGames,\n CompanyID: voucherData.CompanyID\n };\n return voucher;\n }\n\n if (voucherData.FreePlayTypeID === FREE_PLAY_TYPE.Voucher) {\n if (!voucherData.VoucherInfo) {\n throw new Error(`Received voucher ${voucherData.FreePlayID} has no VoucherInfo.`);\n }\n\n const voucher: IFreePlayVoucher = {\n ID: voucherData.FreePlayID.toString(),\n CurrentBalance: voucherData.VoucherInfo.RemainingFreePlayAmount,\n Winnings: Number(voucherData.CurrentWinningAmount),\n FreePlayTypeId: FP_VOUCHER_TYPES.FreePlay,\n OriginAmount: voucherData.AwardedFreePlayAmount,\n ExpirationDate: new Date(voucherData.ExpirationDate),\n SpinBetAmount: 0, \n GameTypeIDList: availableGames,\n CompanyID: voucherData.CompanyID\n };\n return voucher;\n }\n\n throw new Error(`Received third party voucher type ${voucherData.FreePlayTypeID} is not supported.`);\n }\n\n getStoredFreePlays(): IFreePlayVoucher[] {\n return this._thirdPartyVouchers.values();\n }\n\n getFreePlays(): Promise {\n return this._getThirdPartyVouchers();\n }\n\n getFreePlaysForGameType(gameType: number): Promise {\n return this._getThirdPartyVouchers()\n .then(vouchers => {\n return vouchers.filter(voucher => voucher && voucher.GameTypeIDList.includes(gameType));\n });\n }\n\n private _httpGetThirdPartyVouchers(): Promise {\n // make sure we don't call API in case of !enabled\n if (!this._enabled) {\n this.logger.info(`Prevented getting third party vouchers in the case service is not enabled`);\n return Promise.resolve([]);\n }\n\n return this.serviceFactory.http2Service().post(this._serviceUri + 'GetAllVouchers')\n .then((backendVouchers: FreePlayResponse) => {\n if (!backendVouchers.FreePlayBonusList \n || !_.isArray(backendVouchers.FreePlayBonusList)\n || backendVouchers.FreePlayBonusList.length === 0) {\n return Promise.resolve([]);\n }\n\n // compose all game type list\n const allGameTypes: number[] = this._getAllGameTypes(backendVouchers);\n\n // filter available vouchers according to current platform information through gamesInformationService\n return this.serviceFactory.gamesInformationService().getGamesInfo(allGameTypes)\n .then((gamesInfo: GAMES_INFO) => {\n const vouchers: IFreePlayVoucher[] = [];\n backendVouchers.FreePlayBonusList.forEach( backEndVoucher => {\n let voucher = null;\n try {\n voucher = this._convertToVoucher(backEndVoucher, gamesInfo);\n } catch (ex) {\n this.logger.error('Cannot convert backend voucher ', backEndVoucher, ' exception is ', ex);\n }\n\n // filter only vouchers with specified game types\n if (voucher && voucher.GameTypeIDList.length > 0) {\n vouchers.push(voucher);\n }\n });\n return vouchers;\n });\n });\n }\n\n private _getThirdPartyVouchers(): Promise {\n return this._httpGetThirdPartyVouchers().then(vouchers => {\n this._updateThirdPartyVouchers(vouchers);\n return vouchers;\n });\n }\n\n private _getAllGameTypes(backendVouchers: FreePlayResponse) {\n const allGameTypes: number[] = [];\n if (backendVouchers && _.isArray(backendVouchers.FreePlayBonusList)) {\n backendVouchers.FreePlayBonusList.forEach(voucher => {\n if (_.isArray(voucher.GameTypesIDs)) {\n voucher.GameTypesIDs.forEach(gt => {\n const index = allGameTypes.findIndex(item => item === gt);\n if (index < 0) {\n allGameTypes.push(gt);\n }\n });\n }\n });\n }\n return allGameTypes;\n }\n}\n","import BaseService from '../../base/base_service';\nimport DateFormatter from '../../utils/date_formatter';\n\nexport default class TimeService extends BaseService {\n\n static CLASS = 'TimeService';\n\n now() {\n return Date.now();\n }\n\n getCurrentDate() {\n return new Date();\n }\n\n formatUtc(date) {\n return DateFormatter.formatUtc(date);\n }\n\n findDifferenceBetweenDatesInDays(firstDate: Date, secondDate: Date) {\n return this._findDifferenceBetweenDates(firstDate, secondDate, 'days');\n }\n\n findDifferenceBetweenDatesInHours(firstDate: Date, secondDate: Date) {\n return this._findDifferenceBetweenDates(firstDate, secondDate, 'hours');\n }\n\n findDifferenceBetweenDatesInMinutes(firstDate: Date, secondDate: Date) {\n return this._findDifferenceBetweenDates(firstDate, secondDate, 'minutes');\n }\n\n findDifferenceBetweenDatesInSeconds(firstDate: Date, secondDate: Date) {\n return this._findDifferenceBetweenDates(firstDate, secondDate, 'seconds');\n }\n\n private _findDifferenceBetweenDates(firstDate: Date, secondDate: Date, differenceType: string) {\n // seconds = milliseconds/1000\n // minutes = seconds/60\n // hours = minutes/60\n // Days = hours/24\n let divideBy;\n switch (differenceType && differenceType.toLowerCase()) {\n case 'days':\n divideBy = 1000 * 60 * 60 * 24;\n break;\n case 'hours':\n divideBy = 1000 * 60 * 60;\n break;\n case 'minutes':\n divideBy = 1000 * 60;\n break;\n case 'seconds':\n default:\n divideBy = 1000;\n break;\n }\n\n return Math.floor((Number(firstDate) - Number(secondDate)) / divideBy);\n }\n\n parseDate(dateAsString: string) {\n return new Date(dateAsString);\n }\n}","import BaseService from '../../base/base_service';\nimport { SYSTEM_EVENTS } from '../../events/events';\nimport { TrackJS } from \"trackjs\";\n\ninterface ITrackJsParams {\n enabled: boolean;\n application: string;\n token: string;\n}\n\nclass TrackjsService extends BaseService {\n\n static CLASS = 'TrackjsService';\n\n private _application: string;\n private _token: string;\n private _userCID: string;\n private _version: string;\n\n init(params: ITrackJsParams) {\n super.init(params);\n\n this._application = params.application;\n this._token = params.token;\n\n if(params.enabled) {\n this.onSystemEvent(SYSTEM_EVENTS.ON_INIT_COMPLETE, () => {\n this._initTrackJS();\n });\n }\n }\n\n private _initTrackJsExtraInformation(): void {\n this._userCID = this._getUserCID();\n this._version = this.serviceFactory.skinService().getVersion();\n\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, () => {\n this._userCID = this._getUserCID();\n\n TrackJS.removeMetadata(\"CID\");\n TrackJS.addMetadata(\"CID\", this._userCID);\n });\n }\n\n private _initTrackJS(): void {\n this._initTrackJsExtraInformation();\n\n TrackJS.install({\n token: this._token,\n version: this._version,\n application: this._application\n });\n\n TrackJS.addMetadata(\"CID\", this._userCID);\n }\n\n private _getUserCID(): string {\n if (this.serviceFactory.oAuth2Service().isAuthorized())\n return this.serviceFactory.userService().getCID();\n\n return \"user_not_logged\";\n }\n}\n\nexport default TrackjsService;","import BaseService from '../../base/base_service';\nimport _ from '../../utils/underscore';\nimport ITripleEightService from './triple_eight_service_interface';\n\ninterface TripleEightServiceParams {\n readonly useGameLauncher: boolean;\n readonly gameLauncherUrl: string;\n readonly isUsingGGPMock: boolean;\n}\n\nexport default class TripleEightService extends BaseService implements ITripleEightService {\n\n static CLASS = 'TripleEightService';\n\n _params: TripleEightServiceParams;\n\n init(params: TripleEightServiceParams) {\n\t\tsuper.init(params);\n this._params = {\n\t\t\tuseGameLauncher: params.useGameLauncher || false,\n\t\t\tgameLauncherUrl: params.gameLauncherUrl || '',\n\t\t\tisUsingGGPMock: params.isUsingGGPMock || false\n\t\t}\n }\n\n isUsingGGPMock(): boolean {\n \treturn this._params.isUsingGGPMock;\n\t}\n\n\tgameLauncherUrl(): string {\n return this._params.gameLauncherUrl;\n\t}\n\n\tuseGameLauncher(): boolean {\n\t\treturn this._params.useGameLauncher &&\n\t\t\t_.isString(this._params.gameLauncherUrl) && this._params.gameLauncherUrl.length > 0;\n\t}\n}\n","import BaseService from '../../base/base_service';\nimport DOM from '../../utils/dom';\nimport Event from '../../utils/event';\nimport {SYSTEM_EVENTS} from '../../events/events';\n\nexport default class VisibilityDetectorService extends BaseService {\n static CLASS = 'VisibilityDetectorService';\n\n init(params) {\n super.init(params);\n this.start();\n }\n\n start() {\n this.logger.debug('Start visibility detector service.');\n DOM.addEventListener(window.document, 'visibilitychange', this.onVisibilityChange);\n }\n\n /**\n * Listener for the visibilitychange event\n */\n private onVisibilityChange = () => {\n if (this.isActive()) {\n Event.fire(SYSTEM_EVENTS.APP_RESUMED);\n } else {\n Event.fire(SYSTEM_EVENTS.APP_PAUSED);\n }\n return this;\n }\n\n /**\n * check if current tab is active\n */\n isActive() {\n if (!window.document.visibilityState) {\n return true;\n }\n return window.document.visibilityState === \"visible\";\n }\n\n}\n","import BaseService from '../../base/base_service';\nimport Event from '../../utils/event';\nimport _ from '../../utils/underscore';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport { BalanceType } from '../../../../common/const/wallet_balance_type';\n\nclass WalletService extends BaseService {\n /**\n * @static\n * @type {string}\n */\n static CLASS = 'WalletService';\n\n _previousBalance = null;\n\n /**\n *\n * @param params\n */\n init(params) {\n super.init(params);\n this._subscribe();\n }\n\n\n /**\n *\n *\n * @description subscribe language service events.\n * @private\n */\n _subscribe() {\n this.onSystemEvent(SYSTEM_EVENTS.SESSION_EVENT_WALLET, (data) => {\n this.refreshWallet(data);\n });\n\n\n this.onSystemEvent([SYSTEM_EVENTS.ON_INIT_COMPLETE, SYSTEM_EVENTS.OAUTH_STATE_CHANGE], () => {\n this._updateWalletLocally();\n });\n }\n\n\n /**\n * Update wallet data and refresh balance from local storage\n * @private\n */\n _updateWalletLocally() {\n if (this.serviceFactory.oAuth2Service().isAuthorized()) {\n this.refreshWallet();\n return;\n }\n this._previousBalance = null;\n }\n\n /**\n * Refresh wallet.\n */\n refreshWallet(bankroll = {}) {\n let originalWalletData = _.safeJSON(this._previousBalance);\n let newWalletData = this._updateWallet(bankroll.Balance, bankroll.Currency, bankroll.RealMoneyBankroll);\n\n const isNewBCurrency = !_.isNullOrUndefined(bankroll.Currency) &&\n (_.isNullOrUndefined(originalWalletData) || (!_.isNullOrUndefined(originalWalletData) && originalWalletData.currency !== bankroll.Currency));\n\n if (isNewBCurrency){\n Event.fire(SYSTEM_EVENTS.CURRENCY_UPDATED, newWalletData.currency);\n }\n\n const isNewBalance = !_.isNullOrUndefined(bankroll.Balance) &&\n (_.isNullOrUndefined(originalWalletData) || (_.safeStringToNumber(originalWalletData.balance) !== _.safeStringToNumber(bankroll.Balance)));\n const isNewRealMoneyBankroll = !_.isNullOrUndefined(bankroll.RealMoneyBankroll) &&\n (_.isNullOrUndefined(originalWalletData) || (_.safeStringToNumber(originalWalletData.RealMoneyBankroll) !== _.safeStringToNumber(bankroll.RealMoneyBankroll)));\n\n if (isNewBalance || isNewRealMoneyBankroll) {\n Event.fire(SYSTEM_EVENTS.BALANCE_UPDATED, newWalletData.balance);\n }\n }\n\n\n /**\n * Update balance and currency in local storage\n * Strategy to update / initialize wallet data\n * 1. Get from params (real time update)\n * 2. Get from local storage (updated before refresh)\n * 3. Get from token (updated on last Login)\n * @private\n */\n _updateWallet(balance, currency, RealMoneyBankroll) {\n let walletData = _.safeJSON(this._previousBalance);\n let tokenWallet = this._getTokenWalletData();\n\n if (_.isUndefined(walletData) || _.isNull(walletData)) {\n walletData = {};\n if (!_.isNull(tokenWallet)) {\n walletData.balance = tokenWallet.AvailableMoney;\n walletData.currency = tokenWallet.CurrencyCode;\n walletData.RealMoneyBankroll = tokenWallet.RealMoneyBankroll;\n }\n }\n\n walletData.balance = !_.isNullOrUndefined(balance) ? Math.floor(balance) : walletData.balance;\n walletData.currency = !_.isNullOrUndefined(currency) ? currency : walletData.currency;\n walletData.RealMoneyBankroll = !_.isNullOrUndefined(RealMoneyBankroll) ? Math.floor(RealMoneyBankroll) : walletData.RealMoneyBankroll;\n this._previousBalance = JSON.stringify(walletData);\n\n return walletData;\n }\n\n\n /**\n * Get wallet data from local storage if exist.\n *\n * @private\n */\n _getTokenWalletData() {\n return _.safeJSON(this.serviceFactory.oAuth2Service().extractTokenProperty('walletData'), null);\n }\n\n\n /**\n * Get the wallet data that exist in the model.\n *\n * @returns {*}\n * @public\n */\n getBalance(balanceType) {\n balanceType = _.isNullOrUndefined(balanceType) ? BalanceType.BOTH : balanceType;\n let balanceProperties = _.safeJSON(this._previousBalance, {});\n let balance;\n let tokenWalletData = this._getTokenWalletData();\n\n switch (balanceType) {\n case BalanceType.CASH:\n balance = balanceProperties.RealMoneyBankroll;\n if (_.isUndefined(balance) && !_.isNull(tokenWalletData)) {\n balance = tokenWalletData.RealMoneyBankroll;\n }\n break;\n case BalanceType.BONUS:\n balance = balanceProperties.balance - balanceProperties.RealMoneyBankroll;\n if (_.isUndefined(balance) && !_.isNull(tokenWalletData)) {\n balance = tokenWalletData.AvailableMoney - tokenWalletData.RealMoneyBankroll;\n }\n break;\n case BalanceType.BOTH:\n default:\n balance = balanceProperties.balance;\n if (_.isUndefined(balance) && !_.isNull(tokenWalletData)) {\n balance = tokenWalletData.AvailableMoney;\n }\n }\n\n if (_.isNullOrUndefined(balance)) {\n throw Error('Could not get balance.');\n }\n\n return balance;\n }\n\n\n /**\n * Get active currency code.\n *\n * @returns {string}\n */\n getCurrency() {\n let currency = this.serviceFactory.currencyService().getCurrency();\n\n return currency.toUpperCase();\n }\n\n getBonusBalance() {\n return this.getBalance(BalanceType.BONUS);\n }\n\n getCashBalance() {\n return this.getBalance(BalanceType.CASH);\n }\n\n /**\n * Get current bankroll (balance) string appropriate to currency symbol and thousand and decimal separators\n *\n * @return {string|number}\n */\n getBankroll(bankrollType = BalanceType.BOTH, plainNumber = false) {\n if (!this.serviceFactory.oAuth2Service().isAuthorized()) {\n return null;\n }\n\n if(plainNumber){\n return this.getBalance(bankrollType);\n }\n\n return this.serviceFactory.currencyService().formatMoney(this.getBalance(bankrollType));\n }\n}\n\nexport default WalletService;","var map = {\n\t\"./close_actionhandler.js\": 879,\n\t\"./externallink_actionhandler.js\": 880,\n\t\"./forgot_your_password_actionhandler.js\": 881,\n\t\"./forgot_your_username_actionhandler.js\": 882,\n\t\"./playforfun_actionhandler.js\": 883,\n\t\"./registration_actionhandler.js\": 884,\n\t\"./submit_actionhandler.js\": 885\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 878;","import LoginActionHandlerBase from './action_handler_base';\nimport {SYSTEM_EVENTS} from '../../../events/events';\nimport Event from '../../../utils/event';\n\nexport default class CloseActionHandler extends LoginActionHandlerBase {\n static CLASS = 'CloseActionHandler';\n\n actionName() {\n return 'onclose';\n }\n\n execute() {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {category: 'Client_LoginPopup', action: 'CloseClick'});\n\n return this.serviceFactory.webLoginService().closeLoginForm();\n\n }\n}","import LoginActionHandlerBase from './action_handler_base';\nimport Event from '../../../utils/event';\nimport {SYSTEM_EVENTS} from '../../../events/events';\n\n\nexport default class ExternalLinkActionHandler extends LoginActionHandlerBase {\n static CLASS = 'ExternalLinkActionHandler';\n\n actionName() {\n return 'onexternallink';\n }\n\n execute(params) {\n this.serviceFactory.windowService().openInNewWindow(params.target);\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Client_LoginPopup',\n action: 'ExternalLink',\n label: params.target\n });\n }\n}","import LoginActionHandlerBase from './action_handler_base';\nimport {SYSTEM_EVENTS} from '../../../events/events';\nimport {GNWP_SOURCES} from '../../../components/external_links/external_links_consts';\nimport Event from '../../../utils/event';\n\n\nexport default class ForgotYourPasswordActionHandler extends LoginActionHandlerBase {\n static CLASS = 'ForgotYourPasswordActionHandler';\n\n actionName() {\n return 'onfyp';\n }\n\n execute() {\n this.serviceFactory.webLoginService().closeLoginForm();\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Client_LoginPopup',\n action: 'ForgotPassword'\n });\n\n this.serviceFactory.openLinkService().openLink({\n source: GNWP_SOURCES.FORGOT_PASSWORD\n });\n }\n}","import LoginActionHandlerBase from './action_handler_base';\nimport {SYSTEM_EVENTS} from '../../../events/events';\nimport {GNWP_SOURCES} from '../../../components/external_links/external_links_consts';\nimport Event from '../../../utils/event';\n\n\nexport default class ForgotYourUsernameActionHandler extends LoginActionHandlerBase {\n static CLASS = 'ForgotYourUsernameActionHandler';\n\n actionName() {\n return 'onfyu';\n }\n\n execute() {\n this.serviceFactory.webLoginService().closeLoginForm();\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Client_LoginPopup',\n action: 'ForgotUsername'\n });\n\n this.serviceFactory.openLinkService().openLink({\n source: GNWP_SOURCES.FORGOT_USERNAME\n });\n }\n}","import LoginActionHandlerBase from './action_handler_base';\n\nexport default class PlayForFunActionHandler extends LoginActionHandlerBase {\n static CLASS = 'PlayForFunActionHandler';\n\n actionName() {\n return 'onplayforfun';\n }\n\n execute() {\n this.serviceFactory.webLoginService().closeLoginForm();\n }\n}","import LoginActionHandlerBase from './action_handler_base';\nimport {SYSTEM_EVENTS} from '../../../events/events';\nimport {GNWP_SOURCES} from '../../../components/external_links/external_links_consts';\nimport Event from '../../../utils/event';\nimport * as INTEGRATION from '../../integration/integration_const';\n\nexport default class RegistrationActionHandler extends LoginActionHandlerBase {\n static CLASS = 'RegistrationActionHandler';\n\n actionName() {\n return 'onregister';\n }\n\n execute() {\n this.serviceFactory.webLoginService().closeLoginForm();\n\n let marketingFunction = this.serviceFactory.webLoginService().getMarketingDataFunction();\n this.serviceFactory.integrationService().executeMarketingDataFunction(marketingFunction);\n Event.fire(SYSTEM_EVENTS.WEB_LOGIN_OPEN_REGISTER);\n Event.fire(SYSTEM_EVENTS.INCOMING_MARKETING_FLOW, INTEGRATION.MARKETING_FLOWS.REGISTER_IN_LOGIN);\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {\n category: 'Client_LoginPopup',\n action: 'Register'\n });\n\n this.serviceFactory.openLinkService().openLink({\n source: GNWP_SOURCES.MEMBERSHIP\n });\n }\n}","import LoginActionHandlerBase from './action_handler_base';\nimport {SYSTEM_EVENTS} from '../../../events/events';\nimport Event from '../../../utils/event';\nimport {Check} from \"@sparkware/app-utils\";\n\nexport default class SubmitActionHandler extends LoginActionHandlerBase {\n static CLASS = 'SubmitActionHandler';\n\n actionName() {\n return 'onsubmit';\n }\n\n execute(params) {\n let marketingFunction = this.serviceFactory.webLoginService().getMarketingDataFunction();\n this.serviceFactory.integrationService().executeMarketingDataFunction(marketingFunction);\n\n if(Check.isObject(params) && Check.isEmpty(params)){\n const fitToPlayModeEnabled = this.serviceFactory.regulationService().fitToPlayModeEnabled();\n\n if(fitToPlayModeEnabled){\n Event.fire(SYSTEM_EVENTS.TOUCH_ID_AUTO_LOGIN, { fitToPlaySubmit: true });\n this.serviceFactory.webLoginService().closeLoginForm();\n\n return Promise.resolve();\n }\n }\n\n return this.serviceFactory.oAuth2Service().login({\n authenticationdata: JSON.stringify(params.authenticationdata),\n remember_me: params.isremembermerequest\n })\n .then(() => {\n this.serviceFactory.webLoginService().closeLoginForm();\n if(params.isremembermerequest) {\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, {category: 'Client_LoginPopup', action: 'RememberMe'});\n }\n })\n .catch(err => {\n this.logger.error('SubmitActionHandler.execute failed', err);\n this.serviceFactory.webLoginService().processLoginResponse(err);\n });\n }\n}","var map = {\n\t\"./pending_action_errorhandler.js\": 887,\n\t\"./token_not_valid_errorhandler.js\": 888\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 886;","import LoginErrorHandlerBase from './login_error_hadler_base';\nimport {CGP_ERROR_CODES} from '../../../exceptions/cgp_error_codes';\nimport {GNWP_SOURCES} from '../../../components/external_links/external_links_consts';\n\nexport default class PendingActionErrorHandler extends LoginErrorHandlerBase {\n static CLASS = 'PendingActionErrorHandler';\n\n _handledErrorCode() {\n return CGP_ERROR_CODES.PENDING_ACTION_REQUIRED;\n }\n\n handle(errorProcessingResult) {\n this.serviceFactory.webLoginService().closeLoginForm();\n\n this.serviceFactory.openLinkService().openLink({\n source: GNWP_SOURCES.PENDING_LOGIN,\n options: {\n token: errorProcessingResult.loginResponse.data.pendingActionToken\n }\n });\n\n }\n}","import LoginErrorHandlerBase from './login_error_hadler_base';\nimport {CGP_ERROR_CODES} from '../../../exceptions/cgp_error_codes';\n\nexport default class TokenNotValidErrorHandler extends LoginErrorHandlerBase {\n static CLASS = 'TokenNotValidErrorHandler';\n\n _handledErrorCode() {\n return CGP_ERROR_CODES.TOKEN_NOT_VALID;\n }\n\n handle(errorProcessingResult) {\n this.serviceFactory.oAuth2Service().clearTokenInfoFromLocalStorage();\n }\n}\n","import BaseService from '../../base/base_service';\nimport { SYSTEM_EVENTS } from '../../events/events';\nimport Device from '../../utils/device/device';\nimport _ from '../../utils/underscore';\nimport {QA_ENV_URBAN_DEFAULT_SETTINGS} from \"../../../../common/const/service-worker-constants\";\nimport IWebPushService from \"./web_push_service_interface\";\nimport {isOrbitInQAMode} from \"../../../../utils/qa-mode-utils\";\n\nexport interface IUrbanAirshipData {\n defaultIcon: string;\n defaultTitle: string;\n defaultActionURL: string;\n appKey: string;\n token: string;\n vapidPublicKey: string;\n}\n\nexport interface IWebPushParams {\n enabled: boolean;\n urbanAirshipSdkUrl: string;\n prodSettings: IUrbanAirshipData;\n loadWebPush: () => Promise;\n testSettings?: IUrbanAirshipData;\n uaSdkLoadTestPromise?: (uaSdkLoadPromise: Promise) => void;\n}\n\nexport interface IUASdk {\n register: () => Promise;\n canRegister:boolean;\n getChannel: () => Promise<{\n namedUser: {\n set: (paramName: string) => void;\n remove: (paramName: string) => void;\n };\n\n tags: {\n add: (paramName: string) => void;\n remove: (paramName: string) => void;\n }\n }>\n}\n\nconst LOAD_UA_SDK_INTERVAL: number = 40000;\n\nexport default class WebPushService extends BaseService implements IWebPushService{\n static CLASS = 'WebPushService';\n\n private _initParams: IWebPushParams;\n private _swUrl:string;\n private _loadUAScriptObservable;\n\n private _uaSdkLoadPromise: Promise = null;\n private _uaSdkLoadPromiseResolve = null;\n private _uaSdkLoadPromiseReject = null;\n\n init(params: IWebPushParams): void {\n super.init(params);\n\n if (!params.enabled || Device.hybrid.isHybrid || Device.os.isIOS){\n return;\n }\n\n if(_.isNullOrUndefined(params.urbanAirshipSdkUrl)) {\n this.throwError('64',`${this.getClassName()} expects parameter urbanAirshipSdkUrl which was not supplied`, {params});\n }\n\n this._initParams = params;\n\n this._uaSdkLoadPromise = new Promise( (resolve,reject) => {\n this._uaSdkLoadPromiseResolve = () => {\n this._clearTimeout();\n resolve();\n }\n this._uaSdkLoadPromiseReject = reject;\n });\n\n this._uaSdkLoadPromise\n .then(() => this._setChannelInfo())\n .catch( err => {\n this._sendElasticData('Web push fatal error: Airship SDK load error:' + (err && err.message), true);\n })\n\n this.onSystemEvent(SYSTEM_EVENTS.ON_INIT_COMPLETE, () => this._onInitComplete());\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, () => this._uaSdkLoadPromise.then( () => this._setChannelInfo()));\n\n // used for unit tests\n if (_.isFunction(params.loadWebPush)) {\n this._loadWebPush = params.loadWebPush;\n }\n if(_.isFunction(params.uaSdkLoadTestPromise)){\n params.uaSdkLoadTestPromise(this._uaSdkLoadPromise);\n }\n //\n }\n\n private _onInitComplete(){\n const getServiceWorkerUrl = this.serviceFactory.windowService().getGlobalProperty('getOrbitServiceWorkerUrl');\n if (_.isFunction(getServiceWorkerUrl)) {\n this._swUrl = getServiceWorkerUrl();\n } else {\n this._sendElasticData('Web push fatal error: getOrbitServiceWorkerUrl does not exist in window, service-worker.js was not loaded', true);\n return;\n }\n\n this._startTimeout();\n }\n\n private _startTimeout(){\n this._loadUAScriptObservable = this.serviceFactory.observableFactoryService().fromTimeout(LOAD_UA_SDK_INTERVAL)\n .forEach(() => {\n this._loadWebPush();\n })\n }\n\n private _getSDK(): PromiseLike {\n const UA = this.serviceFactory.windowService().getGlobalProperty('UA');\n\n UA.catch(() => {\n this._sendElasticData('Error Loading UA SDK object', true);\n });\n\n return UA;\n }\n\n private _registerToUA(): void {\n this._uaSdkLoadPromise && this._uaSdkLoadPromise.then(() => {\n return this._getSDK().then( (SDK: IUASdk) => {\n return SDK.canRegister && SDK.register();\n })\n });\n }\n\n private async _setChannelInfo() {\n if (!this.serviceFactory.oAuth2Service().isAuthorized()) { // are we sure we don't have to do anything when the user logs out?\n return;\n }\n\n this._getSDK().then( async (SDK: IUASdk) => {\n const channel = await SDK.getChannel();\n\n const cid = this.serviceFactory.userService().getCID();\n channel.namedUser.set(String(cid));\n channel.tags.add(`CID-${String(cid)}`);\n\n const lang = this.serviceFactory.languageService().getISO3();\n channel.tags.add(`Language-${lang}`);\n\n const b2cDataString = this.serviceFactory.oAuth2Service().extractTokenProperty('b2c');\n const b2cData = b2cDataString ? JSON.parse(b2cDataString) : null;\n\n if (b2cData && b2cData.sessionParamsMsg) {\n\n const spm = b2cData.sessionParamsMsg;\n\n channel.tags.add(`RegistrationCountry-${spm.RegistrationCountry}`);\n channel.tags.add(`PlayerStatus-${spm.PlayerStatus}`);\n channel.tags.add(`CStatus-${spm.IsFTD ? 'ftd' : 'reg'}`);\n }\n this._sendElasticData(`Web push registered for CID: ${cid}`);\n });\n }\n\n private _getUASettings():IUrbanAirshipData{\n const isQAModeEnabledFromWindow = isOrbitInQAMode();\n const isQAEnv = isQAModeEnabledFromWindow ? isQAModeEnabledFromWindow : false;\n if (isQAEnv){\n return this._initParams.testSettings ? this._initParams.testSettings : QA_ENV_URBAN_DEFAULT_SETTINGS;\n } else {\n return this._initParams.prodSettings\n }\n }\n\n private _getUrbanAppDetails(): Partial & {workerUrl: string} {\n const settings = this._getUASettings();\n return {\n workerUrl: this._swUrl,\n vapidPublicKey: settings?.vapidPublicKey || '',\n appKey: settings?.appKey || '',\n token: settings?.token || ''\n };\n }\n\n _clearTimeout() {\n if (this._loadUAScriptObservable) {\n this._loadUAScriptObservable.dispose();\n this._loadUAScriptObservable = null;\n }\n }\n\n private _sendElasticData(logText: string, isError:boolean = false): void {\n const analyticsData: any = {\n CGPEventCategory: WebPushService.CLASS,\n CGPEventAction: logText\n };\n if(isError){\n this.serviceFactory.structuredLoggingService().getLogger(analyticsData).error();\n } else {\n this.serviceFactory.structuredLoggingService().getLogger(analyticsData).info();\n }\n }\n\n private _uaSDKOnLoad(){\n this._uaSdkLoadPromiseResolve();\n }\n\n // tslint:disable\n /**\n * @param {} n - window\n * @param {} t - document\n * @param {} c - urban sdk\n * @param {} e -'UA'\n * @param {} u - urban app details\n * @returns {}\n */\n private _loadWebPush = _.once(async () => {\n if(!this._initParams || !this._initParams.urbanAirshipSdkUrl){\n return;\n }\n\n let n = window,\n t = document,\n c = this._initParams.urbanAirshipSdkUrl,\n e = 'UA',\n u = this._getUrbanAppDetails();\n\n this._clearTimeout();\n\n const waitForScriptLoad = new Promise(resolve => {\n function r(n){ try{ f=n(u) } catch(n){ return (h=n,void i(p,n)) } i(s,f) }\n function i(n,t){ for(let c=0;c {\n Event.fire(SYSTEM_EVENTS.LOCAL_STORAGE_CHANGED);\n });\n\n window.addEventListener(USER_EVENTS.ON_FOCUS, () => {\n Event.fire(SYSTEM_EVENTS.WINDOW_FOCUS_GAIN);\n });\n\n window.addEventListener(USER_EVENTS.ON_BLUR, () => {\n Event.fire(SYSTEM_EVENTS.WINDOW_FOCUS_LOSS);\n });\n\n\n window.addEventListener('pagehide', () => {\n Event.fire(SYSTEM_EVENTS.ON_BROWSER_PAGE_HIDE);\n });\n\n }\n\n\n getCurrentBrowserTabId() {\n return this._browserTabId;\n }\n\n\n getLocationOrigin() {\n return window.location.origin;\n }\n\n getComputedStyle(element: Element) {\n return window.getComputedStyle(element);\n }\n\n getComputedSize(element: Element) {\n if (Check.isNullOrUndefined(element)) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const elementStyle: any = this.getComputedStyle(element);\n return {\n width: elementStyle.width.replace('px', '') * 1,\n height: elementStyle.height.replace('px', '') * 1\n };\n }\n\n createBlankWindow() {\n return window.open('about:blank', '_blank');\n }\n\n getPathName(){\n return window.location.pathname;\n }\n\n getProtocol() {\n return window.location.protocol;\n }\n\n /**\n * Get the domain hostname.\n */\n getDomain() {\n return window.location.hostname;\n }\n\n getHost() {\n return window.location.host;\n }\n\n getHref() {\n return window.location.href;\n }\n\n /**\n * Refresh the web page.\n *\n */\n reload() {\n window.location.reload();\n }\n\n /**\n * Get Query String or \"string\" as Object\n *\n */\n getQueryParameters() {\n const pairs = window.location.search.slice(1).split('&');\n const result = {};\n\n pairs.forEach(pair => {\n try {\n const pairMatch = pair.match(/([^?=]+)=(([^&]*))/).slice(1);\n result[pairMatch[0]] = decodeURIComponent(pairMatch[1] || '');\n } catch(e) {\n //failed to parse QS\n }\n });\n\n return JSON.parse(JSON.stringify(result));\n }\n\n /**\n * Get domain from specific url\n *\n */\n extractDomain(url: string): string {\n let domain: string;\n //find & remove protocol (http, ftp, etc.) and get domain\n if (url.indexOf('://') > -1) {\n domain = url.split('/')[2];\n }\n else {\n domain = url.split('/')[0];\n }\n\n //find & remove port number\n return domain.split(':')[0];\n }\n\n private _getLinkProxyExecution() {\n return this.serviceFactory.integrationService().getLinkProxyExecution();\n }\n\n private get _openInNewWindowHook() {\n return this.serviceFactory.integrationService().openInNewWindowHook();\n }\n\n /**\n * Redirect the web page to other url.\n */\n redirect(url: string) {\n\n const linkExecutionProxy = this._getLinkProxyExecution();\n if (_.isFunction(linkExecutionProxy)) {\n linkExecutionProxy(url);\n } else {\n window.location.href = url;\n }\n\n this.serviceFactory.gameService().closeRunningGame();\n }\n\n openInNewWindow(url, specs?) {\n const randomHash = Math.random();\n\n if((Device.hybrid.inCasino || Device.hybrid.isEmbedded) && !this._openInNewWindowHook) {\n return this.serviceFactory.hybridService().openExternalLink(url);\n } else {\n if(this._openInNewWindowHook) {\n return this._openInNewWindowHook(url);\n } else {\n return window.open(url, '_blank'+randomHash, specs);\n }\n }\n }\n\n getWindowInnerDimensions() {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n }\n\n getScreenDimensions(){\n return {\n width: window.screen.width,\n height: window.screen.height\n };\n }\n\n scrollTo(x: number, y: number) {\n window.scrollTo(x, y);\n }\n\n getGlobalProperty(propertyName: string) {\n return window[propertyName];\n }\n\n openBankId(url: string): void {\n if(Device.hybrid.inCasino) {\n this.serviceFactory.hybridService().openExternalLink(url);\n } else {\n /*\n BankId url is an url with custom schema something like 'bankid:///?autostarttoken\n This will basically rely on the browser that will ask the operating system to handle bankid schema which in the end will open an application.\n On some browsers this works with window.location.assign and on others with window.open. This is the reason we do those two subsequent calls.\n Only one of them will be succesfull. And even if both will succeed the BankID application is a single instance application so only one instance will be opened.\n */\n window.location.assign(url);\n const tab = window.open(url);\n tab && tab.close();\n }\n }\n getHash(): string {\n return window.location.hash;\n }\n}\n","var map = {\n\t\"./about/about_component_controller.js\": 543,\n\t\"./base_options_component_controller.js\": 154,\n\t\"./geo_location/geo_location_component_controller.js\": 544,\n\t\"./inactivity_timeout_settings/inactivity_timeout_settings_controller.js\": 470,\n\t\"./reminder_settings/reminder_settings_component_controller.js\": 535,\n\t\"./touch_id/touch_id_component_controller.js\": 335\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 891;","module.exports = \"
\\n
\\n
{about_support_id_title | translate}:
\\n
{cid | text}
\\n
\\n
\\n
{about_fiscal_code_title | translate}:
\\n
{taxID | text}
\\n
\\n
\\n
{about_open_session_title | translate}:
\\n
\\n
\\n
\\n
{about_client_version_title | translate}:
\\n
{clientVersion | text}
\\n
\\n
\\n
\\n
\";","module.exports = \"
\\n\\n
\\n\\n \\n
\";","module.exports = \"
\\n
\\n {reminder_content | translate}\\n
\\n \\n\\n
\\n
\\n
\\n \\n
\\n {reminder_more_info_title | translate}\\n
\\n
\\n { reminder_more_info | translate }\\n
\\n
\\n
\\n\";","var map = {\n\t\"./affiliates_game_host/affiliates_game_host_component_controller.js\": 425,\n\t\"./external_links/external_links_component_controller.js\": 216,\n\t\"./free_play/step_message/free_step_message_component_controller.js\": 471,\n\t\"./game_host/game_host_component_controller.js\": 305,\n\t\"./game_navigation_bar/game_navigation_bar_component_controller.js\": 520,\n\t\"./history/detail_history_component_controller.js\": 431,\n\t\"./live_feeds/game_jackpot/game_jackpot_component_controller.js\": 422,\n\t\"./loggedin/loggedin_component_controller.js\": 533,\n\t\"./login_buttons/login_buttons_component_controller.js\": 337,\n\t\"./options/option_components/about/about_component_controller.js\": 543,\n\t\"./options/option_components/base_options_component_controller.js\": 154,\n\t\"./options/option_components/geo_location/geo_location_component_controller.js\": 544,\n\t\"./options/option_components/inactivity_timeout_settings/inactivity_timeout_settings_controller.js\": 470,\n\t\"./options/option_components/reminder_settings/reminder_settings_component_controller.js\": 535,\n\t\"./options/option_components/touch_id/touch_id_component_controller.js\": 335,\n\t\"./options/options_component_controller.js\": 133,\n\t\"./regulation_components/base/game_stripe/stripe_component_controller.js\": 182,\n\t\"./regulation_components/canada/ontario/responsible_gaming_icons/ontario_responsible_gaming_icons_controller.js\": 314,\n\t\"./regulation_components/denmark/responsible_gaming_icons/dk_responsible_gaming_icons_controller.js\": 439,\n\t\"./regulation_components/spain/responsible_gaming_icons/spain_responsible_gaming_icons_controller.js\": 904,\n\t\"./regulation_components/sweden/responsible_gaming_icons/sweden_responsible_gaming_icons_controller.js\": 542,\n\t\"./regulation_components/us/new_jersey/responsible_gaming_icons/new_jersey_responsilbe_gaming_icons_controller.js\": 448,\n\t\"./rich/rich_component_controller.js\": 424,\n\t\"./screen_lock/screen_lock_component_controller.js\": 423,\n\t\"./scrollable_container/scrollable_container_controller.js\": 264,\n\t\"./welcome/welcome_component_controller.js\": 530\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 895;","module.exports = \"
\\n
\\n
\\n
\\n
\\n
\\n
\";","module.exports = \"
\\n
\\n
\\n \\n\\n
    \\n
  • {game_window_mode_real | translate}
  • \\n\\n
  • \\n \\n
  • \\n\\n
  • {game_window_mode_anonymous | translate}
  • \\n
\\n
\\n
\\n
\\n\\n\";","module.exports = \"\";","module.exports = \"\";","module.exports = \"{game_window_sessionid | translate}\";","module.exports = \"
\\n
\\n \\n\\n \\n
\\n
\\n\\n\";","module.exports = \"
\\n
\\n
\\n\\n
\\n
\\n
\\n\";","module.exports = \"\";","import Event from '../../../../utils/event';\nimport {USER_EVENTS, SYSTEM_EVENTS} from '../../../../events/events';\nimport BaseComponent from '../../../../base/base_component';\nimport {NAVIGATION_VIEWS} from \"../../../external_links/external_links_consts\";\n\nconst view = require('./view/spain_responsible_gaming_icons.html');\n\nexport default class SpainResponsibleGamingIconsController extends BaseComponent {\n\n static CLASS = 'SpainResponsibleGamingIconsController';\n\n init(params) {\n super.init(params);\n this._params = params;\n }\n\n start() {\n\n this.setHTML(this.bake(view, {\n themeClass: \"cgp-themes-es-regulatory-icons\"\n }));\n\n this._subscribe();\n }\n\n _sendAnalytics(label) {\n const analyticObject = {\n category: 'Navigation',\n action: 'Header',\n label: 'Icon_' + label\n };\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, analyticObject);\n }\n\n _subscribe() {\n\n this.onDOMEvent(this.getDOMElementByClassName('cgp-themes-es-over-eighteen-icon'), USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics('spain_over_eighteen_icon_click');\n this.serviceFactory.openLinkService().openResponsibleGamblingLink(NAVIGATION_VIEWS.WINDOW);\n });\n\n this.onDOMEvent(this.getDOMElementByClassName('cgp-themes-es-jugar-bien-icon'), USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics('spain_jugar_bien_icon_click');\n this.serviceFactory.openLinkService().openLink(\n {\n sourceLink: this.serviceFactory.skinService().getSafeToPlayURL(),\n view: NAVIGATION_VIEWS.WINDOW\n }\n );\n });\n\n this.onDOMEvent(this.getDOMElementByClassName('cgp-themes-es-auto-prohibicion-icon'), USER_EVENTS.ON_CLICK, () => {\n this._sendAnalytics('spain_self_exclusion_icon_click');\n this.serviceFactory.regulationService().getRegulation().openSelfExclusion(NAVIGATION_VIEWS.WINDOW);\n });\n }\n}\n","module.exports = \"
\\n
\\n
\\n
\\n
\";","import { SYSTEM_EVENTS } from \"../../events/events\";\nimport Event from '../../utils/event';\nimport ToasterBaseComponent from \"../../base/toaster_base_component\";\nimport { BaseComponentParams } from '../../base/base_component_interface';\n\nconst VIEW = require('./view/blue_ribbon_jp_status.html');\n\ninterface BlueRibbonJackpotStatusComponentParams extends BaseComponentParams {\n jackPotValue: number;\n}\n\nexport default class BlueRibbonJackpotStatusComponent extends ToasterBaseComponent {\n private _initialParams: BlueRibbonJackpotStatusComponentParams;\n\n init(params: BlueRibbonJackpotStatusComponentParams) {\n this._initialParams = params;\n super.init(params);\n this._bakeContent();\n }\n\n _bakeContent() {\n const title = this.translate('br_status_title', {});\n const subTitle = this.translate('br_status_subtitle', {amount: ''});\n const value = this.serviceFactory.currencyService().formatMoney(this._initialParams.jackPotValue);\n const content = this.bake(VIEW, {\n title: title,\n subtitle: subTitle,\n value: value\n });\n this.setHTML(content);\n }\n\n _onOpened() {\n this._sendAnalytics({action: 'blue_ribbon_toaster_view'});\n }\n\n _onClicked() {\n this._sendAnalytics({action: 'blue_ribbon_toaster_click'});\n this.closeToaster();\n this.serviceFactory.blueRibbonService().showPersonalJackpotPromotionPage();\n }\n\n _onClosed() {\n this._sendAnalytics({action: 'blue_ribbon_toaster_close'});\n }\n\n _sendAnalytics(analyticsData: {action: string}): void{\n const analyticsObject = {\n category: 'Personal_Jackpot',\n label: this._initialParams.jackPotValue\n };\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, Object.assign(analyticsObject, analyticsData));\n }\n}\n","import ToasterBaseComponent from \"../../base/toaster_base_component\";\nimport Event from \"../../utils/event\";\nimport {SYSTEM_EVENTS} from \"../../events/events\";\nimport { BaseComponentParams } from '../../base/base_component_interface';\n\nconst VIEW = require('./view/blue_ribbon_jp_win_view.html');\n\ninterface BlueRibbonJackpotWinComponentParams extends BaseComponentParams {\n wonAmount: number;\n}\n\nexport default class BlueRibbonJackpotWinToasterComponent extends ToasterBaseComponent{\n private _params: BlueRibbonJackpotWinComponentParams;\n\n init(params: BlueRibbonJackpotWinComponentParams) {\n this._params = params;\n super.init(params);\n this._bakeContent();\n }\n\n _bakeContent() {\n const title = this.translate('br_win_celebration_title', {});\n const subTitle = this.translate('br_win_celebration_text', {amount: ''});\n const yesBtn = this.translate('br_win_celebration_btn', {});\n const value = this.serviceFactory.currencyService().formatMoney(this._params.wonAmount);\n const content = this.bake(VIEW, {\n title: title,\n subtitle: subTitle,\n yesbtn: yesBtn,\n value: value\n });\n this.setHTML(content);\n const yesBtnEl = this.getEl().querySelector(\".cgp-br-jp-win-yes-button\");\n yesBtnEl.addEventListener(\"click\",() => this._onYesBtnClicked());\n }\n\n _onOpened() {\n this._sendAnalytics({action: 'Win_Toaster_view'});\n }\n\n _onYesBtnClicked() {\n this._sendAnalytics({action: 'Win_Toaster_click'});\n this.closeToaster();\n }\n\n _sendAnalytics(analyticsData: {action: string}): void{\n const analyticsObject = {\n category: 'Personal_Jackpot',\n label: this._params.wonAmount,\n };\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, Object.assign(analyticsObject, analyticsData));\n }\n\n}","import { SYSTEM_EVENTS } from \"../../events/events\";\nimport Event from '../../utils/event';\nimport BaseComponent from \"../../base/base_component\";\nimport { PRIORITY_LEVEL } from \"../../services/overlay_manager/overlay_manager_levels\";\n\n\nconst VIEW = require('./view/blue_ribbon_welcome_popup.html');\nconst footerView = require('./view/blue_ribbon_welcome_popup_footer.html');\n\nexport default class BlueRibbonJackpotWelcomeComponent extends BaseComponent {\n init(params) {\n super.init(params);\n this._bakeContent();\n this._subscribe();\n }\n\n _subscribe() {\n this.onceSystemEvent(SYSTEM_EVENTS.GAME_OPEN, () => {\n this.closePopup();\n });\n\n this.onceSystemEvent(SYSTEM_EVENTS.CLOSE_ALL_OVERLAY, () => {\n this.closePopup();\n });\n }\n\n _bakeContent() {\n const content = this.bake(VIEW, {});\n this.setHTML(content);\n }\n\n showPopup() {\n const footerText = this.bake(footerView, {});\n\n this.serviceFactory.messageManagerService().openMessage({\n text: this.getEl(),\n hasTitle: false,\n buttonPosition: 'center',\n customCSSClassList: ['cgp-blue-ribbon-welcome-component'],\n footerText: footerText,\n buttons: [{\n name: this.serviceFactory.languageService().translation('br_welcome_continue_btn'),\n isClosable: true,\n callback: () => { \n this._onContinue();\n }\n }],\n openCallback: () => {\n this._onOpened();\n },\n footerClickedCallback: () =>{\n this._onReadMore();\n this.closePopup();\n },\n priority: PRIORITY_LEVEL.POP_UP\n });\n \n return this;\n }\n\n closePopup() {\n Event.fire(SYSTEM_EVENTS.CLOSE_OVERLAY, {priority: PRIORITY_LEVEL.POP_UP});\n }\n\n _onOpened() {\n this._sendAnalytics({label: 'blue_ribbon_join_view'});\n }\n\n _onContinue() {\n this._sendAnalytics({label: 'blue_ribbon_join_click'});\n }\n\n _onReadMore() {\n this._sendAnalytics({label: 'blue_ribbon_join_read_more'});\n this.serviceFactory.blueRibbonService().showPersonalJackpotPromotionPage();\n }\n\n _sendAnalytics(analyticsData: {label: string}): void{\n const analyticsObject = {\n category: 'Personal_Jackpot',\n action: 'Intro_Message',\n label: analyticsData.label\n };\n\n Event.fire(SYSTEM_EVENTS.ANALYTIC_TRIGGER_ACTIVATED, Object.assign(analyticsObject, analyticsData));\n }\n}\n","import {TimeSpan} from \"@sparkware/app-utils\";\n\nexport default class StopWatch {\n\n private _start: number = 0;\n private _elapsed: number = 0;\n\n constructor(autoStart = false) {\n if (autoStart) {\n this.start();\n }\n }\n\n start() {\n this._start = new Date().getTime();\n this._elapsed = 0;\n }\n\n stop(): TimeSpan {\n const end = new Date().getTime();\n this._elapsed = end - this._start;\n this._start = 0;\n return this.getElapsedTime();\n }\n\n // two scenarios: \n // 1. start(); stop(); then getElapsedTime() -> will return stored elapsed value\n // 2. start(); getElapsedTime(); getElapsedTime(); -> will return ad-hoc value\n getElapsedTime(): TimeSpan {\n\n if (this._start === 0) {\n // normal use case, when we called stop() before\n return TimeSpan.fromMilliseconds(this._elapsed);\n }\n\n // if we forgot to call stop() or we want to use same stop watch for multiple operations we can on the fly getElapsedTime\n const end = new Date().getTime();\n const elapsed = end - this._start;\n return TimeSpan.fromMilliseconds(elapsed);\n }\n}\n","import _ from '../../utils/underscore';\nimport Store from '../../utils/store';\nimport ServiceFactory from '../service_factory';\nimport StopWatch from '../../utils/stop_watch';\nimport BaseObject from '../../base/base_object';\nimport {IElasticEventData} from '../../../../common/interfaces/structured-logging-service-interface';\n\nexport function convertToCents(value: number) {\n const result = Math.floor(value * 100 + .001);\n return result;\n}\n\nexport function isValidJackpotValue(jpValue: any) {\n if (!_.isNumber(jpValue)) {\n return false;\n }\n const value = jpValue as number;\n if (value <= 0) {\n return false;\n }\n return true;\n}\n\nconst STORAGE_KEY_PREFIX = 'BlueRibbon';\n\nfunction composeBlueRibbonLocalStorageKey(keyName: string) {\n return `${STORAGE_KEY_PREFIX}_${keyName}`;\n}\n\nexport function setBlueRibbonLocalStorageKey(keyName: string, value: string): void {\n Store.set(composeBlueRibbonLocalStorageKey(keyName), value);\n}\n\nexport function deleteBlueRibbonLocalStorageKey(keyName: string): void {\n Store.del(composeBlueRibbonLocalStorageKey(keyName));\n}\n\nexport function getBlueRibbonLocalStorageKey(keyName: string): string {\n return Store.get(composeBlueRibbonLocalStorageKey(keyName));\n}\n\nexport function clearBlueRibbonLocalStorageKey(keyName: string): void {\n Store.del(composeBlueRibbonLocalStorageKey(keyName));\n}\n\nexport function formatBlueRibbonLogMessage(message: string): string {\n return `BlueRibbon: ${message}`;\n}\n\ninterface BlueRibbonOperationExecutionMonitorOptions {\n operationName: string;\n operationParams?: any;\n logExecutionTimeToElastic?: boolean;\n}\n\nexport class BlueRibbonExecutionMonitor extends BaseObject {\n static CLASS = \"BlueRibbonExecutionMonitor\";\n\n constructor(private _serviceFactory: ServiceFactory) {\n super();\n }\n\n execute(options: BlueRibbonOperationExecutionMonitorOptions, operationToExecute: () => Promise): Promise {\n const stopWatch = new StopWatch(true);\n const operationId = Date.now();\n\n const operationExecutionTimer = setTimeout(() => {\n this.logger.warn(`[${operationId}] Operation ${options.operationName} still not finished after ${stopWatch.getElapsedTime().toString()}`)\n this._sendElasticError(options.operationName, 'long_running_operation');\n }, 30000);\n let params: any = [];\n if(options.operationParams) {\n params = ['with params', options.operationParams];\n }\n this.logger.info(`[${operationId}]Begin ${options.operationName}`, ...params);\n\n return operationToExecute().then(data => {\n clearTimeout(operationExecutionTimer);\n this.logger.info(`[${operationId}] Finished ${options.operationName} after ${stopWatch.stop().toString()} with response`, data);\n if(options.logExecutionTimeToElastic) {\n this._sendElasticInfo(options.operationName, 'execution_time', stopWatch.getElapsedTime().totalSeconds);\n }\n\n return data;\n }).catch(err => {\n clearTimeout(operationExecutionTimer);\n this.logger.info(`[${operationId}] Failed ${options.operationName} after ${stopWatch.stop().toString()};`, err);\n this._sendElasticError(options.operationName, err, stopWatch.getElapsedTime().totalSeconds);\n throw err;\n });\n }\n\n executeSync(options: BlueRibbonOperationExecutionMonitorOptions, operationToExecute: () => TResult): TResult {\n const stopWatch = new StopWatch(true);\n const operationId = Date.now();\n\n const operationExecutionTimer = setTimeout(() => {\n this.logger.warn(`[${operationId}] Operation ${options.operationName} still not finished after ${stopWatch.getElapsedTime().toString()}`)\n this._sendElasticError(options.operationName, 'long_running_operation');\n }, 30000);\n let params: any = [];\n if(options.operationParams) {\n params = ['with params', options.operationParams];\n }\n this.logger.info(`[${operationId}]Begin ${options.operationName}`, ...params);\n\n let data: TResult;\n try {\n data = operationToExecute();\n }\n catch(err) {\n clearTimeout(operationExecutionTimer);\n this.logger.info(`[${operationId}] Failed ${options.operationName} after ${stopWatch.stop().toString()};`, err);\n this._sendElasticError(options.operationName, err, stopWatch.getElapsedTime().totalSeconds);\n throw err;\n }\n\n clearTimeout(operationExecutionTimer);\n this.logger.info(`[${operationId}] Finished ${options.operationName} after ${stopWatch.stop().toString()} with response`, data);\n if(options.logExecutionTimeToElastic) {\n this._sendElasticInfo(options.operationName, 'execution_time', stopWatch.getElapsedTime().totalSeconds);\n }\n\n return data;\n }\n\n eventReceived(eventName: string, data: any): void {\n this.logger.info(`Received event ${eventName} with params`, data);\n }\n\n info(...logData) {\n this.logger.info(...logData);\n }\n\n error(...logData) {\n this.logger.error(...logData);\n }\n\n private _sendElasticInfo(action: string, label: string, value?: any) {\n try {\n const data: IElasticEventData = this._composeElasticLog(action, label, value);\n this._serviceFactory.structuredLoggingService().getLogger(data).info();\n } catch(ex) {\n this.logger.error(`BlueRibbon ${action} - sendElasticInfo exception`, ex);\n }\n }\n\n private _sendElasticError(action: string, label: string, value?: any) {\n try {\n const data: IElasticEventData = this._composeElasticLog(action, label, value);\n this._serviceFactory.structuredLoggingService().getLogger(data).error();\n } catch(ex) {\n this.logger.error(`BlueRibbon ${action} - sendElasticError exception`, ex);\n }\n }\n\n private _composeElasticLog(action: string, label: string, value: any): IElasticEventData {\n const data: IElasticEventData = {\n CGPEventCategory: 'Blue_Ribbon',\n CGPEventAction: action\n };\n if (label) {\n data.CGPEventLabel = label;\n }\n\n if (!_.isNullOrUndefined(value)) {\n const valueAsNumber = Number(value);\n if (_.isNumber(valueAsNumber)) {\n data.CGPEventValueAsNumber = valueAsNumber;\n } else {\n data.CGPEventValue = value;\n }\n }\n return data;\n }\n}","import { BLUE_RIBBON_INACTIVE_REASONS } from './../../../../../common/interfaces/blue-ribbon-party-jackpot.interface';\nimport {action, observable} from 'mobx';\nimport {\n BLUE_RIBBON_POT_STATE,\n IBlueRibbonJackpot\n} from '../../../../../common/interfaces/blue-ribbon-party-jackpot.interface';\nimport {JACKPOT_STATE} from '../../../../../common/const/jackpot_map_ids';\nimport ServiceFactory from '../../service_factory';\n\n\nexport abstract class BlueRibbonJackpot implements IBlueRibbonJackpot {\n\n constructor(public readonly jackpotId: string, protected readonly _serviceFactory: ServiceFactory) {\n }\n\n\n @observable.ref\n private _initialValue: number = 0;\n public get initialValue(): number {\n return this._initialValue;\n }\n\n @action.bound\n public setInitialValue(value: number): void {\n this._initialValue = value;\n }\n\n @observable.ref\n private _currentValue: number = 0;\n public get currentValue(): number {\n return this._currentValue;\n }\n @action.bound\n public setCurrentValue(value: number): void {\n this._currentValue = value;\n }\n\n @observable.ref\n private _isOptedIn: boolean = false;\n public get isOptedIn(): boolean {\n return this._isOptedIn;\n }\n\n //We need this function because mobx actions cannot be overridden in derived classes.\n protected _updateIsOptedIn(value: boolean): void {\n this._isOptedIn = value;\n }\n\n @action.bound\n public setIsOptedIn(value: boolean): void {\n this._updateIsOptedIn(value);\n }\n\n @observable.ref\n protected _isActive: boolean = false;\n public get isActive(): boolean {\n return this._isActive;\n }\n\n @observable.ref\n protected _inactiveReason: BLUE_RIBBON_INACTIVE_REASONS = null;\n public get inactiveReason(): BLUE_RIBBON_INACTIVE_REASONS {\n return this._inactiveReason;\n }\n\n //We need this function because mobx actions cannot be overridden in derived classes.\n protected _updateIsActive(value: boolean, inactiveReason: BLUE_RIBBON_INACTIVE_REASONS): void {\n this._isActive = value;\n this._inactiveReason = inactiveReason ?? null;\n }\n \n\n @action.bound\n public setIsActive(value: boolean, inactiveReason: BLUE_RIBBON_INACTIVE_REASONS): void {\n this._updateIsActive(value, inactiveReason);\n }\n\n public get hasWin(): boolean {\n return this.winAmount > 0;\n }\n\n @observable.ref\n private _winAmount: number = 0;\n public get winAmount(): number {\n return this._winAmount;\n }\n\n @observable.ref\n private _winningPlayer: string = null;\n public get winningPlayer(): string {\n return this._winningPlayer;\n }\n\n @observable.ref\n private _winISO3Currency: string = null;\n public get winISO3Currency(): string {\n return this._winISO3Currency;\n }\n\n @action.bound\n public setWinAmount(currency: string, value: number, winningPlayer: string): void {\n this._winAmount = value;\n this._winISO3Currency = currency;\n this._winningPlayer = winningPlayer;\n }\n\n @observable.ref\n private _potState: BLUE_RIBBON_POT_STATE = \"COLD\";\n public get potState(): BLUE_RIBBON_POT_STATE {\n return this._potState;\n }\n @action.bound\n public setPotState(value: BLUE_RIBBON_POT_STATE): void {\n this._potState = value;\n }\n\n getStandardJackpotState(): JACKPOT_STATE {\n switch (this.potState) {\n case \"COLD\":\n return JACKPOT_STATE.Cold;\n case \"CHILLY\":\n return JACKPOT_STATE.Regular;\n case \"WARM\":\n case \"HOT\":\n return JACKPOT_STATE.Hot;\n default:\n return JACKPOT_STATE.Cold;\n }\n }\n\n get isEligible(): boolean {\n return this.isOptedIn && this.isActive && !this.hasWin;\n }\n\n get hasBetContributions(): boolean {\n return this.initialValue > 0\n && this.initialValue !== this.currentValue;\n\n }\n}\n","import {BlueRibbonJackpot} from './blue_ribbon_jackpot';\n\nexport class BlueRibbonPersonalJackpot extends BlueRibbonJackpot {\n}","import BlueRibbonJackpotStatusComponent from \"../../../components/blue_ribbon_jackpot_status_toaster/blue_ribbon_jackpot_status_toaster_component\";\nimport BlueRibbonJackpotWinToasterComponent from \"../../../components/blue_ribbon_jackpot_win_toaster/blue_ribbon_jp_win_toaster_component\";\nimport {\n OptEvent,\n GameDetailsChangedEvent,\n GameStatusChangedEvent,\n PotStateChangedEvent,\n WinEvent,\n ComplexMatchDetails,\n GameObject\n} from \"../blue_ribbon_api_interfaces\";\nimport { SYSTEM_EVENTS } from \"../../../events/events\";\nimport { POSITION } from \"../../toaster/toaster_service_consts\";\nimport BlueRibbonJackpotWelcomeComponent from \"../../../components/blue_ribbon_jackpot_welcome/blue_ribbon_welcome_component\";\nimport {\n IBlueRibbonEventsHandler\n} from \"./blue_ribbon_event_handler_interface\";\nimport Event from '../../../utils/event';\nimport Device from '../../../utils/device/device';\nimport BaseObject from \"../../../base/base_object\";\nimport {\n BlueRibbonExecutionMonitor,\n clearBlueRibbonLocalStorageKey,\n convertToCents,\n getBlueRibbonLocalStorageKey,\n isValidJackpotValue,\n setBlueRibbonLocalStorageKey\n} from '../blue_ribbon_helpers';\nimport ServiceFactory from '../../service_factory';\nimport {BlueRibbonPersonalJackpot} from '../jackpots/blue_ribbon_personal_jackpot';\nimport {BLUE_RIBBON_POT_STATE, IBlueRibbonPersonalJackpot} from '../../../../../common/interfaces/blue-ribbon-party-jackpot.interface';\nimport {IBlueRibbonConnection} from '../blue_ribbon_connection_interface';\n\nconst PersonalJackpotWelcomePopupShownStorageKey = 'BRPersonalJackpotWelcomePopupShown';\n\nexport default class BlueRibbonPersonalJackpotEventsHandler extends BaseObject implements IBlueRibbonEventsHandler {\n static CLASS = \"BlueRibbonPersonalJackpotEventsHandler\";\n\n private _welcomeToaster: BlueRibbonJackpotStatusComponent;\n private _winToaster: BlueRibbonJackpotWinToasterComponent;\n\n constructor(private _blueRibbonConnection: IBlueRibbonConnection,\n private _serviceFactory: ServiceFactory,\n private _getPersonalJackpotId: () => string) {\n super();\n this._executionMonitor = new BlueRibbonExecutionMonitor(this._serviceFactory);\n }\n\n private _executionMonitor: BlueRibbonExecutionMonitor;\n\n private _personalJackPot: BlueRibbonPersonalJackpot;\n get personalJackPot(): IBlueRibbonPersonalJackpot {\n return this._personalJackPot;\n }\n\n\n onConnected(matchedOperatorGames: ComplexMatchDetails[]) {\n this._personalJackPot = new BlueRibbonPersonalJackpot(this._getPersonalJackpotId(), this._serviceFactory);\n const personalJackpotExists = (0 <= matchedOperatorGames.findIndex(gameObj => this._isMyPersonalJackpot(gameObj.jackpotGameId)));\n if (!personalJackpotExists) {\n return;\n }\n\n this._fireStateChangedEvent();\n }\n\n private _onStartGamesFeedCount = 0;\n onGamesFeedStarted(data: GameObject[]): void {\n\n // we only show the toaster or the popup only if this is the first start games feed on this session\n this._onStartGamesFeedCount++;\n if(this._onStartGamesFeedCount > 1) {\n return;\n }\n\n this._blueRibbonConnection.isPlayerOptInToJackpotGame({\n gameId: this._personalJackPot.jackpotId\n }).then(data => {\n\n this._personalJackPot.setIsOptedIn(data.playerOptState.isOptIn);\n\n if(this._wasPersonalJackpotWelcomePopupShown()) {\n this._showWelcomeToaster();\n } else {\n // show opt in popup if player didn't contributed to this jackpot and he's eligible\n if (this._personalJackPot.isEligible && !this._personalJackPot.hasBetContributions) {\n this._showOptInPopup();\n }\n }\n });\n\n }\n\n private _wasPersonalJackpotWelcomePopupShown(): boolean {\n return 'true' === getBlueRibbonLocalStorageKey(PersonalJackpotWelcomePopupShownStorageKey);\n }\n\n private _setPersonalJackpotWelcomePopUpShownInLocalStorage() {\n setBlueRibbonLocalStorageKey(PersonalJackpotWelcomePopupShownStorageKey, 'true');\n }\n\n private _clearPersonalJackpotWelcomePopUpShownFromLocalStorage() {\n clearBlueRibbonLocalStorageKey(PersonalJackpotWelcomePopupShownStorageKey);\n }\n\n dispose() {\n if (this._welcomeToaster) {\n this._welcomeToaster.closeToaster();\n this._welcomeToaster = null;\n }\n\n if (this._winToaster) {\n this._winToaster.closeToaster();\n this._winToaster = null;\n }\n }\n\n onOptIn(data: OptEvent) {\n if (!this._isMyPersonalJackpot(data.playerOptState.gameId)) {\n return;\n }\n\n this._personalJackPot.setIsOptedIn(true);\n this._fireStateChangedEvent();\n this._showOptInPopup();\n }\n\n private _isMyPersonalJackpot(jackpotId: string): boolean {\n return this._personalJackPot.jackpotId === jackpotId;\n }\n\n onOptOut(data: OptEvent) {\n if (!this._isMyPersonalJackpot(data.playerOptState.gameId)) {\n return;\n }\n\n this._personalJackPot.setIsOptedIn(false);\n this._fireStateChangedEvent();\n }\n\n onGameDetailsChanged(data: GameDetailsChangedEvent) {\n if (!this._isMyPersonalJackpot(data.gameDetails.gameId)) {\n return;\n }\n\n if (data.gameDetails.pots?.length >= 1) {\n this._personalJackPot.setInitialValue(convertToCents(data.gameDetails.pots[0].seedPotAmount));\n }\n }\n\n onGameStatusChanged(data: GameStatusChangedEvent) {\n if (!this._isMyPersonalJackpot( data.gameStatus.gameId)) {\n return;\n }\n\n this._personalJackPot.setIsActive(data.gameStatus.status === 'ACTIVE', data.gameStatus.inactiveReason);\n this._fireStateChangedEvent();\n }\n\n onPotStateChanged(data: PotStateChangedEvent) {\n if (!this._isMyPersonalJackpot(data.jackpotPotState.gameId)) {\n return;\n }\n\n this._personalJackPot.setPotState(data.jackpotPotState.potStatus as BLUE_RIBBON_POT_STATE);\n this._personalJackPot.setCurrentValue(convertToCents(data.jackpotPotState.progressive));\n this._fireStateChangedEvent();\n }\n\n onWin(data: WinEvent) {\n if (!this._isMyPersonalJackpot(data.winningDetails.gameId)) {\n return;\n }\n\n this._personalJackPot.setWinAmount(data.winningDetails.currency, convertToCents(data.winningDetails.amount), data.winningDetails.playerId);\n this._fireStateChangedEvent();\n this._showWinToaster();\n }\n\n private _fireStateChangedEvent() {\n Event.fire(SYSTEM_EVENTS.BLUE_RIBBON_PERSONAL_JP_STATE_CHANGED);\n }\n\n private _showWelcomeToaster() {\n if (!this._personalJackPot.isEligible) {\n return;\n }\n\n\n if (!isValidJackpotValue(this._personalJackPot.currentValue)) {\n this._executionMonitor.error(`_showWelcomeToaster: Current Jackpot value ${this._personalJackPot.currentValue} is invalid`);\n //this.operations.sendElasticError(\"showWelcomeToaster\", \"invalidJPValue\", this._personalJackPotInfo.currentValue);\n return;\n }\n\n this._welcomeToaster = this._serviceFactory.componentFactoryService().createComponent(BlueRibbonJackpotStatusComponent, {\n jackPotValue: this._personalJackPot.currentValue\n });\n\n const position: keyof typeof POSITION = !Device.os.isMobileOS? \"BOTTOM_RIGHT\" : \"TOP_CENTER\";\n this._welcomeToaster.showAsToaster({\n timeoutInSecs: 7,\n position: position,\n additionalClass: 'cgp-toaster-component-no-padding cgp-toaster-component-primary-border'\n });\n }\n\n private _showWinToaster() {\n this._winToaster = this._serviceFactory.componentFactoryService().createComponent(BlueRibbonJackpotWinToasterComponent, {\n wonAmount: this._personalJackPot.winAmount\n });\n\n const position: keyof typeof POSITION = !Device.os.isMobileOS? \"BOTTOM_RIGHT\" : \"TOP_CENTER\";\n this._winToaster.showAsToaster({\n timeoutInSecs: 15,\n position: position,\n close: false,\n additionalClass: 'cgp-toaster-component-no-padding cgp-toaster-component-secondary-border'\n });\n }\n\n private _showOptInPopup() {\n if (this._personalJackPot.isEligible) {\n // popup auto-hides by clicking the buttons or react itself to OVERLAY messages\n const welcomePopup = this._serviceFactory.componentFactoryService().createComponent(BlueRibbonJackpotWelcomeComponent);\n welcomePopup.showPopup();\n this._setPersonalJackpotWelcomePopUpShownInLocalStorage();\n }\n }\n\n}\n","import { BLUE_RIBBON_INACTIVE_REASONS, PartyJackpotType } from './../../../../../common/interfaces/blue-ribbon-party-jackpot.interface';\nimport { IAnalyticsData } from './../../analytics/analytics_service_interface';\nimport {BlueRibbonJackpot} from './blue_ribbon_jackpot';\nimport {\n IBlueRibbonPartyJackpot,\n PartyJackpotJoinStatus\n} from '../../../../../common/interfaces/blue-ribbon-party-jackpot.interface';\nimport { TimeSpan, Check } from '@sparkware/app-utils';\nimport ServiceFactory from '../../service_factory';\nimport Logger from '../../../utils/logger';\nimport { observable, action } from 'mobx';\nimport { JACKPOT_STATE } from '../../../../../common/const/jackpot_map_ids';\n\nconst INVALID_DATE = new Date(0);\n\nexport class BlueRibbonPartyJackpot extends BlueRibbonJackpot implements IBlueRibbonPartyJackpot {\n constructor(private readonly serviceFactory: ServiceFactory,\n private readonly logger: Logger,\n jackpotId: string,\n private readonly _games: string[]\n ) {\n super(jackpotId, serviceFactory);\n }\n\n public hasGame(gameType: number): boolean {\n return this._games.includes(gameType.toString());\n }\n\n public getStandardJackpotState(): JACKPOT_STATE {\n if (this._isInOffHours()) {\n return JACKPOT_STATE.OffHours;\n }\n\n // return COLD status if JP is not active\n if (!this.isActive) {\n return JACKPOT_STATE.Cold;\n }\n\n // status is active below\n // if next drop will be tomorrow it means we are off hours\n if (this._nextDropWillBeTomorrow()) {\n return JACKPOT_STATE.OffHours;\n }\n\n switch (this.potState) {\n case \"COLD\":\n case \"CHILLY\":\n // even if status is cold we avoid returning it since widget component thinks it was won already and hides timer\n return JACKPOT_STATE.Regular;\n case \"WARM\":\n case \"HOT\":\n return JACKPOT_STATE.Hot;\n default:\n return JACKPOT_STATE.Regular;\n }\n }\n\n @observable.ref\n private _type: PartyJackpotType = PartyJackpotType.Daily;\n\n public get type(): PartyJackpotType {\n return this._type;\n }\n\n @action.bound\n public setType(value: string): void {\n try {\n const type = value.trim().toUpperCase();\n switch(type) {\n case \"HOURLY\":\n this._type = PartyJackpotType.Hourly;\n break;\n case \"DAILY\":\n this._type = PartyJackpotType.Daily;\n break;\n\n default:\n this._type = PartyJackpotType.Daily;\n this.logger.warn(`Invalid jpType received: ${value}, defaulting to daily`);\n }\n } catch(err) {\n this.logger.warn(`Invalid jpType received: ${value} for jackpotID ${this.jackpotId}`, err);\n }\n }\n\n\n @observable.ref\n private _lastWin: number = null;\n\n get lastWin() {\n return this._lastWin;\n }\n\n @action.bound\n setLastWin(lastWin: number | null) {\n if (Check.isNumber(lastWin)) {\n const now = this._now();\n const delta = Number(now) - lastWin;\n if (delta < 0) {\n // last win is in the future?\n // yes, it can happen unfortunately because our _mow() function is not so accurate\n // set it anyway, but log this info to have evidence\n const secondsDifference = Math.floor(TimeSpan.fromMilliseconds(-delta).totalSeconds);\n const msg = `Invalid lastWin received (greater than current time)! LastWin: (${lastWin}) Now: ${now}: DifferenceInSeconds: ${secondsDifference}`;\n if (secondsDifference >= 10) {\n this.logger.error(msg);\n } else {\n this.logger.warn(msg);\n }\n }\n }\n\n if (this._lastWin !== lastWin) {\n this.logger.info(`LastWin updated from ${this._lastWin} to ${lastWin} for jackpotID ${this.jackpotId}`);\n }\n this._lastWin = lastWin;\n }\n\n @observable.ref\n private _hasRealMoneyPrize: boolean = true;\n\n get hasRealMoneyWinPrize() {\n return this._hasRealMoneyPrize;\n }\n\n @action.bound\n setHasRealMoneyWinPrize(isRealPrizeCustomField: string) {\n try {\n if (!Check.isNullOrUndefined(isRealPrizeCustomField)) {\n this._hasRealMoneyPrize = isRealPrizeCustomField?.toString().toLocaleLowerCase() === \"true\";\n this.logger.info(`isRealPrize received as ${this._hasRealMoneyPrize} for jackpotID ${this.jackpotId}`);\n } else {\n this._hasRealMoneyPrize = true;\n this.logger.warn(`isRealPrize not specified for jackpotID ${this.jackpotId}, defaulting to real money prize`);\n }\n } catch(err) {\n this.logger.warn(`Invalid isRealPrize received: ${isRealPrizeCustomField} for jackpotID ${this.jackpotId}`, err);\n }\n }\n\n @observable.ref\n private _mustDropHour: TimeSpan = TimeSpan.fromSeconds(0);\n\n @action.bound\n setMustDropHour(mustDropValue: string) {\n try {\n this._mustDropHour = TimeSpan.parse(mustDropValue);\n this.logger.info(`mustDropValue ${mustDropValue} set for jackpotID ${this.jackpotId}`);\n } catch(err) {\n this.logger.warn(`Invalid mustDropValue received ${mustDropValue} for jackpotID ${this.jackpotId}`, err);\n }\n }\n\n @observable.ref\n private _startHour: TimeSpan = TimeSpan.fromSeconds(0);\n\n get startHour(): string {\n return BlueRibbonPartyJackpot._getFormattedLocalTime(this._startHour);\n }\n\n private static _getFormattedLocalTime(utcTime: TimeSpan) {\n const localDate = utcTime.toLocalTime();\n let result = (localDate.hours >= 12)? `${localDate.hours === 12? localDate.hours : localDate.hours - 12}PM` : `${localDate.hours}AM`;\n if (localDate.minutes > 0) {\n result += `:${localDate.minutes}`;\n }\n return result;\n }\n\n @action.bound\n setStartHour(startHourValue: string) {\n try {\n this._startHour = TimeSpan.parse(startHourValue);\n this.logger.info(`startHour ${startHourValue} set for jackpotID ${this.jackpotId}`);\n } catch(err) {\n this.logger.warn(`Invalid startHour received ${startHourValue} for jackpotID ${this.jackpotId}`, err);\n }\n }\n\n @observable.ref\n private _endHour: TimeSpan = TimeSpan.fromSeconds(0);\n\n get endHour(): string {\n return BlueRibbonPartyJackpot._getFormattedLocalTime(this._endHour);\n }\n\n @action.bound\n setEndHour(endHourValue: string) {\n try {\n this._endHour = TimeSpan.parse(endHourValue);\n this.logger.info(`endHour ${endHourValue} set for jackpotID ${this.jackpotId}`);\n } catch(err) {\n this.logger.warn(`Invalid endHour received ${endHourValue} for jackpotID ${this.jackpotId}`, err);\n }\n }\n\n @observable.ref\n private _b2cLink: string;\n\n get B2CLink() {\n return this._b2cLink;\n }\n\n @action.bound\n setB2CLink(B2CLinkUrl: string) {\n this._b2cLink = B2CLinkUrl;\n }\n\n @observable.ref\n private _liveCasino: string = '';\n\n @action.bound\n setLiveCasino(liveCasinoValue: string) {\n try {\n this._liveCasino = liveCasinoValue.toString().toUpperCase();\n this.logger.info(`liveCasino ${liveCasinoValue} set for jackpotID ${this.jackpotId}`);\n } catch(err) {\n this.logger.warn(`Invalid liveCasinoValue received ${liveCasinoValue} for jackpotID ${this.jackpotId}`, err);\n }\n }\n\n get supportsAllLiveGames(): boolean {\n return this._liveCasino === \"ALL\";\n }\n\n // in all computations (for example in _getDailyMustHitDate() and _getHourlyMustHitDate())\n // we use UTC functions because JackpotWidgetComponent do this \n // mustHitTime.getTime() - serverTime\n // to compute time left \n // and both getTime and serverTime returns UTC values\n get mustHitTime(): Date {\n if (this.isExpired) {\n return INVALID_DATE;\n }\n\n if (this.type === PartyJackpotType.Daily) {\n if (!this._mustDropHour.totalSeconds) {\n return INVALID_DATE;\n }\n \n return this._getDailyMustHitDate();\n }\n\n if (this.type === PartyJackpotType.Hourly) {\n if (!this._startHour.totalSeconds || !this._endHour.totalSeconds) {\n return INVALID_DATE;\n }\n \n return this._getHourlyMustHitDate();\n }\n\n return INVALID_DATE;\n }\n\n private _getDailyMustHitDate(): Date {\n let todayMustHitDate = this._getTodayMustHitDate();\n if (Check.isNullOrUndefined(this._lastWin)) {\n return todayMustHitDate;\n }\n\n if (!this._jackpotWillDropToday()) {\n // make it day++ (tomorrow)\n todayMustHitDate.setUTCDate(todayMustHitDate.getUTCDate() + 1);\n }\n\n return todayMustHitDate;\n }\n\n private _now(): Date {\n let now = new Date(this.serviceFactory.clockService().getCurrentServerDate());\n if (Number(now) === 0) {\n now = new Date(this.serviceFactory.timeService().now()); \n this.logger.warn(`for jackpotID ${this.jackpotId}, clockService().getCurrentServerDate() returned Date(0), defaulting to timeService().now(): ${now.toString()}`);\n }\n return now;\n }\n\n private _getTodayMustHitDate(): Date {\n const now = this._now();\n const todayMustHit = new Date(0);\n todayMustHit.setUTCFullYear(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate());\n todayMustHit.setUTCHours(this._mustDropHour.hours, this._mustDropHour.minutes, this._mustDropHour.seconds, 0);\n return todayMustHit;\n }\n\n private _getHourlyMustHitDate(): Date {\n const now = this._now();\n const nowStartHour = this._getHourlyNextHour(now, 0);\n const nowEndHour = this._getHourlyNextHour(now, 1);\n let nextComputedDrop = nowEndHour;\n\n if (this._lastWin) {\n const lastWinDate = new Date(this._lastWin);\n // if lastWin is in-between current hour\n if (lastWinDate >= nowStartHour && lastWinDate < nowEndHour) {\n nextComputedDrop = this._getHourlyNextHour(now, 2);\n }\n }\n const tomorrowAtStartDate = this._getHourlyStartDate(1);\n\n // if date is changed, this means we reached with nextDrop next day\n if (nextComputedDrop.getUTCDate() !== now.getUTCDate()) {\n // we arrived in next day, it should be tomorrow at start date\n return tomorrowAtStartDate;\n }\n\n // this means that we are before operating hours\n const startDateToday = this._getHourlyStartDate(0);\n if (nextComputedDrop < startDateToday) {\n return startDateToday;\n }\n\n // inside operating hours\n const endDateToday = this._getHourlyEndDate();\n if (nextComputedDrop >= startDateToday && nextComputedDrop <= endDateToday) {\n return nextComputedDrop;\n }\n\n // after operating hours\n return tomorrowAtStartDate;\n }\n\n private _nextDropWillBeTomorrow() {\n if (!this.isActive || !this._lastWin) {\n return false;\n }\n\n const tomorrowAtStartDate = this._getHourlyStartDate(1);\n const nextDrop = this._getHourlyMustHitDate();\n return nextDrop.getTime() === tomorrowAtStartDate.getTime();\n }\n\n private _getHourlyNextHour(source: Date, hourOffset: number): Date {\n const nextDrop = new Date(0);\n nextDrop.setUTCFullYear(source.getUTCFullYear(), source.getUTCMonth(), source.getUTCDate());\n nextDrop.setUTCHours(source.getUTCHours() + hourOffset, 0, 0, 0);\n return nextDrop;\n }\n\n private _getHourlyStartDate(daysToAdd: number): Date {\n const now = this._now();\n const startDate = new Date(0);\n startDate.setUTCFullYear(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() + daysToAdd);\n startDate.setUTCHours(this._startHour.hours, this._startHour.minutes, this._startHour.seconds, 0);\n return startDate;\n }\n\n private _getHourlyEndDate(): Date | null {\n const now = this._now();\n const startDate = new Date(0);\n startDate.setUTCFullYear(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate());\n startDate.setUTCHours(this._endHour.hours, this._endHour.minutes, this._endHour.seconds, 0);\n return startDate;\n }\n\n private _jackpotWillDropToday(): boolean {\n if (Check.isNullOrUndefined(this.lastWin)) {\n return true;\n }\n\n const lastWin = new Date(this.lastWin);\n const now = this._now();\n if (Number(lastWin) > Number(now)) {\n // last win is in the future?\n return false;\n }\n\n\n if (lastWin.getUTCDate() === now.getUTCDate() &&\n lastWin.getUTCMonth() === now.getUTCMonth() &&\n lastWin.getUTCFullYear() === now.getUTCFullYear()\n ) {\n return false;\n }\n\n const todayMustHit = this._getTodayMustHitDate();\n const delta = Number(todayMustHit) - Number(now);\n if (delta < 0) {\n return false;\n }\n\n return true;\n }\n\n get joinStatus(): PartyJackpotJoinStatus {\n return this._serviceFactory.blueRibbonService().getPartyJackpotJoinStatus(this.jackpotId);\n }\n\n protected _updateIsOptedIn(value: boolean): void {\n const originalIsOptedIn = this.isOptedIn;\n super._updateIsOptedIn(value);\n if(!value){\n if (originalIsOptedIn && this.isActive) {\n let analyticsData: IAnalyticsData = {\n category: \"Party_Jackpot\",\n action: \"InGame_Widget_Hide\",\n label: this.name\n };\n this._serviceFactory.analyticsService().sendEvent(analyticsData);\n }\n }\n }\n\n protected _updateIsActive(value: boolean, inactiveReason: BLUE_RIBBON_INACTIVE_REASONS): void {\n const originalIsActive = this.isActive;\n super._updateIsActive(value, inactiveReason);\n if(!value && this.type === PartyJackpotType.Daily) {\n this._serviceFactory.blueRibbonService().makePartyJackpotStatusNeutral(this.jackpotId);\n if (originalIsActive && this.isOptedIn) {\n let analyticsData: IAnalyticsData = {\n category: \"Party_Jackpot\",\n action: \"InGame_Widget_Hide_PartyEnded\",\n label: this.name\n };\n this._serviceFactory.analyticsService().sendEvent(analyticsData);\n }\n }\n }\n\n private _isInOffHours() {\n return (this.type === PartyJackpotType.Hourly && this.inactiveReason === \"ACTIVE_TIME\" && !this._isActive);\n }\n\n // we consider an hourly JP still active if inactiveReason is ACTIVE_TIME\n get isExpired() {\n const isInOffHours = this._isInOffHours();\n const isActive = this._isActive;\n return !(isInOffHours || isActive);\n }\n\n private _name: string = \"\";\n\n get name() {\n return this._name;\n }\n\n setName(name: string) {\n this._name = name;\n }\n}\n","import {IBlueRibbonEventsHandler} from './blue_ribbon_event_handler_interface';\nimport {\n OptEvent,\n GameDetailsChangedEvent,\n GameStatusChangedEvent,\n PotStateChangedEvent,\n WinEvent,\n ComplexMatchDetails,\n GameObject\n} from '../blue_ribbon_api_interfaces';\nimport Event from '../../../utils/event';\nimport { SYSTEM_EVENTS } from \"../../../events/events\";\nimport BaseObject from \"../../../base/base_object\";\nimport { BlueRibbonPartyJackpot } from \"../jackpots/blue_ribbon_party_jackpot\";\nimport {BlueRibbonExecutionMonitor, convertToCents} from '../blue_ribbon_helpers';\nimport ServiceFactory from '../../service_factory';\nimport {IBlueRibbonConnection} from '../blue_ribbon_connection_interface';\nimport { BLUE_RIBBON_POT_STATE, PartyJackpotType } from '../../../../../common/interfaces/blue-ribbon-party-jackpot.interface';\n\nconst MUST_JP_TYPE_CUSTOM_OBJECT_KEY = \"JP_TYPE\";\nconst MUST_DROP_HOUR_CUSTOM_OBJECT_KEY = \"DROP_HOUR\";\nconst START_HOUR_CUSTOM_OBJECT_KEY = \"START_HOUR\";\nconst END_HOUR_CUSTOM_OBJECT_KEY = \"END_HOUR\";\nconst B2C_LINK_CUSTOM_OBJECT_KEY = \"B2C_LINK\";\nconst HAS_REAL_MONEY_WIN_PRIZE_CUSTOM_OBJECT_KEY = \"HAS_REAL_MONEY_WIN_PRIZE\";\nconst LIVE_CASINO_CUSTOM_OBJECT_KEY = \"LIVE_CASINO\";\n\nexport default class BlueRibbonPartyJackpotEventsHandler extends BaseObject implements IBlueRibbonEventsHandler {\n static CLASS = \"BlueRibbonPartyJackpotEventsHandler\";\n\n private _partyJackpotsMap: Record = {};\n\n constructor(private _serviceFactory: ServiceFactory,\n private _blueRibbonConnection: IBlueRibbonConnection,\n private _getPersonalJackpotId: () => string) {\n super();\n this._executionMonitor = new BlueRibbonExecutionMonitor(this._serviceFactory);\n }\n\n private _executionMonitor: BlueRibbonExecutionMonitor;\n \n dispose() {\n\n }\n\n onConnected(matchedOperatorGames: ComplexMatchDetails[]) {\n this._loadAllPartyJackpots(matchedOperatorGames);\n }\n\n onGamesFeedStarted(data: GameObject[]): void {\n if (!this._serviceFactory.oAuth2Service().isAuthorized()) {\n return;\n }\n\n for(let jackpotId in this._partyJackpotsMap) {\n const partyJackpot = this._partyJackpotsMap[jackpotId];\n if(partyJackpot.isActive) {\n this._blueRibbonConnection.isPlayerOptInToJackpotGame({\n gameId: jackpotId\n }).then(data => {\n partyJackpot.setIsOptedIn(data.playerOptState.isOptIn);\n });\n }\n }\n }\n\n getAllPartyJackpots(): BlueRibbonPartyJackpot[] {\n return Object.values(this._partyJackpotsMap);\n }\n\n public onOptIn(data: OptEvent): void {\n const partyJackpot = this._partyJackpotsMap[data.playerOptState.gameId];\n if (!partyJackpot) {\n return;\n }\n\n partyJackpot.setIsOptedIn(true);\n this._fireStateChangedEvent(partyJackpot);\n }\n\n public onOptOut(data: OptEvent): void {\n const partyJackpot = this._partyJackpotsMap[data.playerOptState.gameId];\n if (!partyJackpot) {\n return;\n }\n\n partyJackpot.setIsOptedIn(false);\n this._serviceFactory.blueRibbonService().makePartyJackpotStatusNeutral(partyJackpot.jackpotId);\n this._fireStateChangedEvent(partyJackpot);\n }\n\n public onGameDetailsChanged(data: GameDetailsChangedEvent): void {\n const partyJackpot = this._partyJackpotsMap[data.gameDetails.gameId];\n if (!partyJackpot) {\n return;\n }\n\n partyJackpot.setName(data.gameDetails.name);\n if (data.gameDetails.pots?.length >= 1) {\n const value = convertToCents(data.gameDetails.pots[0].seedPotAmount);\n partyJackpot.setInitialValue(value);\n if (partyJackpot.currentValue === 0) {\n partyJackpot.setCurrentValue(value);\n }\n }\n\n partyJackpot.setType(data.gameDetails.customJackpotParams[MUST_JP_TYPE_CUSTOM_OBJECT_KEY]);\n if (partyJackpot.type === PartyJackpotType.Daily) {\n partyJackpot.setMustDropHour(data.gameDetails.customJackpotParams[MUST_DROP_HOUR_CUSTOM_OBJECT_KEY]);\n } else if (partyJackpot.type === PartyJackpotType.Hourly) {\n partyJackpot.setStartHour(data.gameDetails.customJackpotParams[START_HOUR_CUSTOM_OBJECT_KEY]);\n partyJackpot.setEndHour(data.gameDetails.customJackpotParams[END_HOUR_CUSTOM_OBJECT_KEY]);\n }\n partyJackpot.setB2CLink(data.gameDetails.customJackpotParams[B2C_LINK_CUSTOM_OBJECT_KEY]);\n partyJackpot.setHasRealMoneyWinPrize(data.gameDetails.customJackpotParams[HAS_REAL_MONEY_WIN_PRIZE_CUSTOM_OBJECT_KEY]);\n partyJackpot.setLiveCasino(data.gameDetails.customJackpotParams[LIVE_CASINO_CUSTOM_OBJECT_KEY]);\n\n this._fireStateChangedEvent(partyJackpot);\n }\n\n public onGameStatusChanged(data: GameStatusChangedEvent): void {\n const partyJackpot = this._partyJackpotsMap[data.gameStatus.gameId];\n if (!partyJackpot) {\n return;\n }\n\n partyJackpot.setIsActive(data.gameStatus.status === 'ACTIVE', data.gameStatus.inactiveReason);\n this._fireStateChangedEvent(partyJackpot);\n }\n\n public onPotStateChanged(data: PotStateChangedEvent): void {\n const partyJackpot = this._partyJackpotsMap[data.jackpotPotState.gameId];\n if (!partyJackpot) {\n return;\n }\n\n partyJackpot.setPotState(data.jackpotPotState.potStatus as BLUE_RIBBON_POT_STATE);\n partyJackpot.setCurrentValue(convertToCents(data.jackpotPotState.progressive));\n partyJackpot.setLastWin(data.jackpotPotState.lastWinTs);\n this._fireStateChangedEvent(partyJackpot);\n }\n\n public onWin(data: WinEvent): void {\n const partyJackpot = this._partyJackpotsMap[data.winningDetails.gameId];\n if (!partyJackpot) {\n return;\n }\n\n partyJackpot.setWinAmount(data.winningDetails.currency,\n convertToCents( data.winningDetails.amount),\n data.winningDetails.playerId);\n this._fireStateChangedEvent(partyJackpot);\n Event.fire(SYSTEM_EVENTS.BLUE_RIBBON_PARTY_JACKPOT_WIN, partyJackpot);\n }\n\n private _fireStateChangedEvent(jackpot: BlueRibbonPartyJackpot) {\n Event.fire(SYSTEM_EVENTS.BLUE_RIBBON_PARTY_JP_STATE_CHANGED, jackpot);\n }\n\n\n private _loadAllPartyJackpots(operatorGames: ComplexMatchDetails[]): void {\n const operatorGamesGroupedByJackpotId = this._groupGamesByPartyJackpotId(operatorGames);\n const partyJackpots: Record = {};\n for(let jackpotId in operatorGamesGroupedByJackpotId) {\n const gamesInJackpot = operatorGamesGroupedByJackpotId[jackpotId];\n partyJackpots[jackpotId] = new BlueRibbonPartyJackpot(this._serviceFactory, this.logger, jackpotId, gamesInJackpot.map(g => g.gameId))\n }\n\n this._partyJackpotsMap = partyJackpots;\n this._executionMonitor.info('Received party jackpot games:', partyJackpots);\n }\n\n private _groupGamesByPartyJackpotId(operatorGames: ComplexMatchDetails[]): Record {\n const operatorGamesGroupedByJackpotId: Record = {};\n operatorGames.forEach(gameInfo => {\n if (gameInfo.jackpotGameId === this._getPersonalJackpotId())\n return;\n\n if(!operatorGamesGroupedByJackpotId[gameInfo.jackpotGameId]) {\n operatorGamesGroupedByJackpotId[gameInfo.jackpotGameId] = [];\n }\n operatorGamesGroupedByJackpotId[gameInfo.jackpotGameId].push(gameInfo);\n\n });\n return operatorGamesGroupedByJackpotId\n }\n\n}\n","// Note: this file was downloaded from https://sdk.demo00.bluerbn.com/br-sdk-types-1.3.4.ts\n// update it when used version is changed\n\ndeclare global {\n interface Window {\n BlueRibbon: {\n constants: {\n events: Events;\n gamesMode: GameMode;\n winningStrategies: WinningStrategies;\n };\n SdkCoreManager: SdkCoreManagerConstructor;\n };\n }\n}\n\nexport enum Events {\n WIN_EVENT = 'WIN_EVENT',\n POT_STATE_CHANGED_EVENT = 'POT_STATE_CHANGED_EVENT',\n GAME_DETAILS_CHANGED_EVENT = 'GAME_DETAILS_CHANGED_EVENT',\n OPT_IN_EVENT = 'OPT_IN_EVENT',\n OPT_OUT_EVENT = 'OPT_OUT_EVENT',\n GAME_CODE_MATCHING_STATE_CHANGED_EVENT = 'GAME_CODE_MATCHING_STATE_CHANGED_EVENT',\n GAME_STATUS_CHANGED_EVENT = 'GAME_STATUS_CHANGED_EVENT',\n CONNECTION_ACTIVITY_CHANGED = 'CONNECTION_ACTIVITY_CHANGED',\n}\n\nexport enum GameMode {\n LOBBY = 'LOBBY',\n IN_GAME = 'IN_GAME',\n}\n\nexport enum WinningStrategies {\n SINGLE_WIN = 'SINGLE_WIN',\n COMMUNITY_WIN = 'COMMUNITY_WIN',\n}\n\nexport interface SdkCoreManagerConstructor {\n new (config: BlueRibbonConfig): SDKInterface;\n}\n\nexport interface SDKInterface {\n connect: (connectConfiguration: ConnectConfiguration) => Promise;\n startGamesFeed?: (gamesConfiguration: StartFeedConfiguration) => Promise;\n startGamesFeedWithOverlays?: (\n gamesConfigurationWithOverlays: StartFeedWithOverlaysConfiguration\n ) => Promise;\n stopGamesFeed: (stoppedGamesConfiguration: StopFeedConfiguration) => StopFeedResponse;\n stopAllGamesFeed: () => StopFeedResponse;\n reset: () => Promise;\n events: {\n on: {\n (eventName: Events.WIN_EVENT, handler: (eventDetails: WinEvent) => void): string | void;\n (eventName: Events.POT_STATE_CHANGED_EVENT, handler: (eventDetails: PotStateChangedEvent) => void): string | void;\n (eventName: Events.GAME_DETAILS_CHANGED_EVENT, handler: (eventDetails: GameDetailsChangedEvent) => void): string | void;\n (eventName: Events.GAME_STATUS_CHANGED_EVENT, handler: (eventDetails: GameStatusChangedEvent) => void): string | void;\n (\n eventName: Events.GAME_CODE_MATCHING_STATE_CHANGED_EVENT,\n handler: (eventDetails: GameCodeMatchingStateChangedEvent) => void\n ): string | void;\n (eventName: Events.OPT_IN_EVENT, handler: (eventDetails: OptEvent) => void): string | void;\n (eventName: Events.OPT_OUT_EVENT, handler: (eventDetails: OptEvent) => void): string | void;\n (eventName: Events.CONNECTION_ACTIVITY_CHANGED, handler: (eventDetails: FBConnectivityStatus) => void): string | void;\n };\n listHandlers: () => HandlersList;\n off: (eventName: Events | 'ALL', handlerId?: string) => string | void;\n };\n player: {\n optInPlayerToJackpotGame: (game: GameObject) => Promise;\n optOutPlayerToJackpotGame: (game: GameObject) => Promise;\n isPlayerOptInToJackpotGame: (game: GameObject) => Promise;\n };\n ticker: {\n getJackpotsPotState: (games: GameObject[]) => Promise;\n getGameDetailsByGameIds: (games: GameObject[]) => Promise<{ gamesDetails: FullGameDetails[] }>;\n };\n operatorGames: {\n getOperatorGamesMatchDetails: (options?: GetOperatorGamesMatchOptions) => GetOperatorGamesMatchDetailsResponse;\n getOperatorGamesMatchDetailsByGameIds: (games: GameObject[]) => GetOperatorGamesMatchDetailsResponse;\n getOperatorGamesMatchByComplexSegment: (complexSegments: ComplexSegment[]) => ComplexMatchDetails[];\n };\n}\n\ninterface EventDetails {\n eventType: Events;\n gameId: string;\n}\n\nexport interface OnEventTriggeredFunc {\n (eventDetails: EventDetails, callback: VoidFunction): void;\n}\n\nexport interface LoginFuncResponse {\n meta?: Record;\n data: {\n fbJWT: string;\n userJWT: string;\n };\n}\n\nexport interface LoginFunc {\n (): Promise;\n}\n\nexport enum LogLevel {\n debug = 'debug',\n info = 'info',\n warn = 'warn',\n error = 'error',\n}\n\nexport interface OverlayConfig {\n containerId: string;\n}\nexport interface BlueRibbonConfig {\n operatorId: string;\n loginAnonymousPlayer: LoginFunc;\n loginAuthenticatedPlayer: LoginFunc;\n baseServiceUrl: string;\n logLevel: LogLevel;\n withOverlays: boolean;\n overlaysDetails?: OverlayConfig;\n onEventTriggered?: OnEventTriggeredFunc;\n overrideFBVersion?: string;\n loadFBAnalytics?: boolean;\n emitWinsInLobby?: boolean;\n}\n\nexport interface ConnectConfiguration {\n currency: string;\n playerId?: string;\n}\n\nexport interface StartFeedConfiguration {\n games: (GameObject | ComplexSegment)[] | null;\n gamesMode: GameMode;\n}\n\nexport interface GameObject {\n gameId: string;\n segments?: string[];\n}\n\nexport interface ComplexSegment {\n gameId?: string;\n complexSegment: Segment[];\n}\n\nexport interface Segment {\n segmentKey: string;\n segmentCode: string;\n}\n\nexport interface StartFeedResponse {\n startedGames: {\n games: GameObject[];\n };\n}\n\nexport interface StartFeedWithOverlaysConfiguration {\n games: (OverlayGameObject | OverlayGameObjectWithComplexSegment)[];\n gamesMode: GameMode;\n}\n\nexport interface OverlayGameObject {\n gameId: string;\n segments?: string[];\n overlayContainerId: string;\n}\n\nexport interface OverlayGameObjectWithComplexSegment {\n gameId: string;\n complexSegment: Segment[];\n overlayContainerId: string;\n}\n\nexport interface StopFeedConfiguration {\n games: (GameObject | ComplexSegment)[];\n}\n\nexport interface StopFeedResponse {\n stoppedGames: {\n games: GameObject[];\n };\n}\n\nexport interface CommunityWinner {\n playerId: string;\n winAmount: number;\n isMainWinner: boolean;\n}\n\nexport interface WinEvent {\n winningDetails: {\n playerId?: string; // only for games with SINGLE_WIN strategy\n gameId: string;\n segments?: string[]; // optional\n potId: string;\n currency: string;\n amount?: number; // only for games with SINGLE_WIN strategy\n seedPotAmount: number;\n updateTimestamp: number;\n communityWinners?: CommunityWinner[]; // only for games with COMMUNITY_WIN strategy\n };\n}\n\nexport interface JackpotState {\n gameId: string;\n segments?: string[];\n potId: string;\n progressive: number;\n currency: string;\n potStatus: string;\n updateTimestamp: number;\n lastWinTs: number | null;\n}\n\nexport interface PotStateChangedEvent {\n jackpotPotState: JackpotState;\n}\n\nexport interface GameDetailsChangedEvent {\n gameDetails: FullGameDetails;\n}\n\nexport interface FullGameDetails extends GameDetails, GameObject {\n pots: PotDetails[];\n}\n\nexport interface GameDetails {\n description: string;\n jackpotGameId: string;\n name: string;\n type: JackpotGameTypes;\n version: string;\n termsAndConditions: string;\n startDate: string;\n isAutoOptIn: boolean;\n customJackpotParams: Record;\n supportedCurrencies: string;\n winningDetails: WinningDetails;\n}\n\nexport enum JackpotGameTypes {\n PUBLIC = 'PUBLIC',\n PRIVATE = 'PRIVATE',\n}\n\nexport interface WinningDetails {\n [key: string /* potId */]: PotWinningDetails;\n}\n\nexport interface PotWinningDetails {\n winningStrategy: WinningStrategies;\n communityRatio?: number;\n communityCondition?: {\n type: 'WAGER' | 'BETS';\n activePlayers?: {\n condition: 'ALL' | 'BY_NUMBER' | 'BY_PERCENT';\n amount?: number;\n };\n period?: {\n units: 'HOURS' | 'DAYS';\n amount: number;\n };\n condition?: {\n type: 'GREATER_THAN' | 'GREATEST_AMOUNT';\n amount?: number;\n };\n };\n}\n\nexport interface PotDetails {\n potId: string;\n name: string;\n seedPotAmount: number;\n}\n\nexport interface GameStatusChangedEvent {\n gameStatus: GameStatus;\n}\n\nexport interface GameStatus {\n gameId: string;\n segments?: string[];\n status: GameStates;\n remainingIterations?: number;\n inactiveReason: GameInactiveReason | null;\n}\n\nexport type GameInactiveReason = 'ACTIVE_TIME' | 'COOL_DOWN' | 'MAX_ITERATIONS_EXCEEDED' | 'GAME_ENDED' | 'FUTURE_GAME';\n\nexport enum GameStates {\n ACTIVE = 'ACTIVE',\n INACTIVE = 'INACTIVE',\n}\n\nexport interface GameCodeMatchingStateChangedEvent {\n operatorGameMatchingState: {\n gameId?: string;\n segments?: string[];\n conditionDetails?: ConditionDetails;\n jackpotGameId: string;\n state: OperatorGameMatchingState;\n unmatchConditions?: {\n afterWin: boolean;\n unmatchDate: Date;\n };\n };\n}\n\ninterface ConditionDetails {\n id: string;\n condition: ComplexCondition;\n}\n\nexport enum OperatorGameMatchingState {\n MATCHED = 'MATCHED',\n UNMATCH_PENDING = 'UNMATCH_PENDING',\n UNMATCHED = 'UNMATCHED',\n}\n\ninterface Operand {\n type: 'operand';\n segmentKey: string;\n segmentCodes: string[];\n}\n\ninterface Operator {\n type: 'operator';\n value: 'OR' | 'AND';\n}\n\nexport type ComplexCondition = (Operand | Operator)[];\n\nexport interface OptEvent {\n playerOptState: {\n playerId: string;\n gameId: string;\n segments?: string[];\n gameName: string;\n };\n}\n\nexport interface FBConnectivityStatus {\n connectionDetails: {\n isActive: boolean;\n };\n}\n\nexport interface PlayerOptResponse {\n playerOptState: {\n playerId: string;\n gameId: string;\n segments?: string[];\n gameName: string;\n isOptIn: boolean;\n };\n}\n\nexport interface PotStates {\n jackpotsPotStates: JackpotState[];\n}\n\nexport interface GetOperatorGamesMatchOptions {\n filter: 'WITH_SEGMENTS' | 'WITH_COMPLEX_SEGMENTS';\n}\n\nexport interface GetOperatorGamesMatchDetailsResponse {\n matchedOperatorGames: (MatchDetails | ComplexMatchDetails)[];\n}\n\nexport interface MatchDetails extends GameObject {\n jackpotGameId: string;\n}\n\nexport interface ComplexMatchDetails {\n jackpotGameId: string;\n gameId?: string;\n conditionDetails: ConditionDetails;\n}\n\nexport type HandlersList = Record;\n","import BaseObject from '../../../base/base_object';\nimport {\n BLUE_RIBBON_NATIVE_EVENTS,\n IBlueRibbonNativeEvents,\n GameDetailsChangedEvent, \n GameStatusChangedEvent,\n ComplexMatchDetails,\n OptEvent,\n PotStateChangedEvent,\n WinEvent,\n GameObject\n} from '../blue_ribbon_api_interfaces';\nimport {BlueRibbonExecutionMonitor} from '../blue_ribbon_helpers';\nimport {IBlueRibbonEventsHandler} from './blue_ribbon_event_handler_interface';\n\ntype BlueRibbonEventListenerCallback = (data: any) => void;\n\ntype CustomBlueRibbonEventName = 'onConnected' | 'onGamesFeedStarted';\n\nexport class BlueRibbonEventsDispatcher extends BaseObject {\n static CLASS = \"BlueRibbonEventsDispatcher\";\n\n constructor(private _blueRibbonNativeEvents: IBlueRibbonNativeEvents,\n private _executionMonitor: BlueRibbonExecutionMonitor,\n private readonly _eventsHandlers: IBlueRibbonEventsHandler[]) {\n super();\n this._addNativeBlueRibbonListener('OPT_IN_EVENT',\n (handler, data) => handler.onOptIn(data));\n this._addNativeBlueRibbonListener('OPT_OUT_EVENT',\n (handler, data) => handler.onOptOut(data));\n this._addNativeBlueRibbonListener('GAME_DETAILS_CHANGED_EVENT',\n (handler, data) => handler.onGameDetailsChanged(data));\n this._addNativeBlueRibbonListener('GAME_STATUS_CHANGED_EVENT',\n (handler, data) => handler.onGameStatusChanged(data));\n this._addNativeBlueRibbonListener('GAME_STATUS_CHANGED_EVENT',\n (handler, data) => handler.onGameStatusChanged(data));\n this._addNativeBlueRibbonListener('POT_STATE_CHANGED_EVENT',\n (handler, data) => handler.onPotStateChanged(data));\n this._addNativeBlueRibbonListener('WIN_EVENT',\n (handler, data) => handler.onWin(data));\n\n this._addCustomEventListener('onConnected',\n (handler, data) => handler.onConnected(data));\n\n this._addCustomEventListener('onGamesFeedStarted',\n (handler, data) => handler.onGamesFeedStarted(data));\n }\n\n private _isDisposed = false;\n dispose() {\n this._isDisposed = true;\n this._eventsHandlers.forEach(h => h.dispose());\n }\n\n\n private _addNativeBlueRibbonListener(eventName: BLUE_RIBBON_NATIVE_EVENTS, callback: (eventsHandler: IBlueRibbonEventsHandler, data: TEventData) => void): void {\n\n this._blueRibbonNativeEvents.on(eventName, (data) => {\n if(this._isDisposed) {\n this._executionMonitor.error(`Received ${eventName} event for disposed blue ribbon events dispatcher`);\n return;\n }\n\n this._executionMonitor.eventReceived(eventName, data);\n\n this._eventsHandlers.forEach(handler => {\n try {\n callback(handler, data)\n } catch (err) {\n this._executionMonitor.error(`Callback for blue ribbon event failed! EventName: ${eventName}; handler: ${handler}`, err);\n }\n\n })\n });\n }\n\n private _customEventsListeners: Record> = {};\n\n fireOnConnected(data: ComplexMatchDetails[]) {\n this._fireCustomEvent('onConnected', data);\n }\n\n fireOnGamesFeedStarted(data: GameObject[]) {\n this._fireCustomEvent('onGamesFeedStarted', data);\n }\n\n private _addCustomEventListener(eventName: CustomBlueRibbonEventName, callback: (handler: IBlueRibbonEventsHandler, data: TEventData) => void): void {\n if(!this._customEventsListeners[eventName]) {\n this._customEventsListeners[eventName] = [];\n }\n\n this._customEventsListeners[eventName].push((data) => {\n this._eventsHandlers.forEach(handler => {\n try {\n callback(handler, data);\n } catch (err) {\n this._executionMonitor.error(`Callback for custom blue ribbon event failed! EventName: ${eventName}; handler: ${handler}`, err);\n }\n\n })\n });\n }\n\n private _fireCustomEvent(eventName: CustomBlueRibbonEventName, data: any): void {\n if(!this._customEventsListeners[eventName]) {\n return;\n }\n\n this._customEventsListeners[eventName].forEach(callBack => {\n try {\n callBack(data);\n } catch (ex) {\n this._executionMonitor.error(`Callback for custom blue ribbon event failed! EventName: ${eventName}; Callback: ${callBack}`, ex);\n }\n\n });\n }\n\n}\n","import {\n GameMode,\n SDKInterface,\n StartFeedConfiguration,\n StartFeedResponse,\n StopFeedResponse\n} from './blue_ribbon_api_interfaces';\nimport {BlueRibbonExecutionMonitor} from './blue_ribbon_helpers';\nimport {BlueRibbonEventsDispatcher} from './event_handlers/blue_ribbon_events_dispatcher';\n\nexport class BlueRibbonFeedsController {\n constructor(private readonly _blueRibbonCoreManager: SDKInterface,\n private readonly _blueRibbonEventsDispatcher: BlueRibbonEventsDispatcher,\n private readonly _operationExecutionMonitor: BlueRibbonExecutionMonitor) {\n }\n public startAllFeeds(): Promise {\n return this._startGamesFeed('startAllFeeds', {\n gamesMode: GameMode.LOBBY,\n games: null\n });\n }\n\n public startOneJackpotFeed(jackpotId: string, gameMode: GameMode): Promise {\n return this._startGamesFeed('startOneJackpotFeed', {\n games: [{gameId: jackpotId}],\n gamesMode: gameMode\n });\n }\n\n public stopOneJackpotFeed(jackpotId: string): StopFeedResponse {\n const stopGamesFeedParams = {\n games: [{gameId: jackpotId}]\n };\n\n const executeStopGamesFeed = () => {\n return this._blueRibbonCoreManager.stopGamesFeed(stopGamesFeedParams);\n };\n\n return this._operationExecutionMonitor.executeSync({\n operationName: 'stopGamesFeed [stopOneJackpotFeed]',\n operationParams: stopGamesFeedParams\n }, executeStopGamesFeed);\n }\n\n private _startGamesFeed(sourceOperationName: string, startGamesFeedParams: StartFeedConfiguration): Promise {\n const executeStartGamesFeed = () => {\n return this._blueRibbonCoreManager.startGamesFeed(startGamesFeedParams).then(data => {\n this._blueRibbonEventsDispatcher.fireOnGamesFeedStarted(data?.startedGames?.games || []);\n return data;\n });\n };\n\n return this._operationExecutionMonitor.execute({\n operationName: `startGamesFeed [${sourceOperationName}]`,\n operationParams: startGamesFeedParams,\n logExecutionTimeToElastic: true\n },\n executeStartGamesFeed);\n }\n}","import ServiceFactory from '../service_factory';\nimport {\n SDKInterface,\n ConnectConfiguration,\n GameObject,\n ComplexMatchDetails,\n PlayerOptResponse,\n FullGameDetails,\n GameMode\n} from './blue_ribbon_api_interfaces';\nimport BaseObject from '../../base/base_object';\nimport {BlueRibbonExecutionMonitor} from './blue_ribbon_helpers';\nimport {BlueRibbonEventsDispatcher} from './event_handlers/blue_ribbon_events_dispatcher';\nimport {IBlueRibbonConnection} from './blue_ribbon_connection_interface';\nimport {IBlueRibbonEventsHandler} from './event_handlers/blue_ribbon_event_handler_interface';\nimport {BlueRibbonFeedsController} from './blue_ribbon_feeds_controller';\nimport Event from '../../utils/event';\nimport { SYSTEM_EVENTS } from '../../events/events';\n\n\nexport class BlueRibbonConnection extends BaseObject implements IBlueRibbonConnection {\n static CLASS = \"BlueRibbonConnection\";\n\n private readonly _operationExecutionMonitor: BlueRibbonExecutionMonitor;\n private readonly _blueRibbonEventsDispatcher: BlueRibbonEventsDispatcher = null;\n private readonly _feedsController: BlueRibbonFeedsController = null;\n private _connectionFailed: boolean = false;\n\n constructor(private readonly _blueRibbonCoreManager: SDKInterface,\n private readonly _serviceFactory: ServiceFactory,\n eventsHandlers: IBlueRibbonEventsHandler[]) {\n super();\n\n this._operationExecutionMonitor = new BlueRibbonExecutionMonitor(this._serviceFactory);\n this._blueRibbonEventsDispatcher = new BlueRibbonEventsDispatcher(_blueRibbonCoreManager.events, this._operationExecutionMonitor, eventsHandlers);\n this._feedsController = new BlueRibbonFeedsController(this._blueRibbonCoreManager, this._blueRibbonEventsDispatcher, this._operationExecutionMonitor);\n\n this._connectPromise = this._startConnection();\n }\n\n private _startConnection() {\n let connectOptions: ConnectConfiguration = {\n currency: this._serviceFactory.currencyService().getCurrency()\n };\n\n if(this._serviceFactory.oAuth2Service().isAuthorized()) {\n connectOptions.playerId = this._serviceFactory.userService().getCID().toString();\n }\n\n const executeConnect = () => this._blueRibbonCoreManager.connect(connectOptions).then(() => {\n this._isConnected = true;\n const matchedGames = this._blueRibbonCoreManager.operatorGames.getOperatorGamesMatchDetails().matchedOperatorGames as ComplexMatchDetails[] || [];\n this._blueRibbonEventsDispatcher.fireOnConnected(matchedGames);\n });\n\n return this._operationExecutionMonitor.execute({\n operationName: 'connect',\n operationParams: connectOptions,\n logExecutionTimeToElastic: true\n },\n executeConnect)\n .then(() => {\n if(this._isDisposed) { // no need to start all feeds if the connection was disposed meanwhile\n return Promise.resolve();\n } else {\n return this._feedsController.startAllFeeds().then(() => {\n Event.fire(SYSTEM_EVENTS.BLUE_RIBBON_CONNECTION_COMPLETE);\n return Promise.resolve();\n });\n }\n })\n .catch(err => {\n this._connectionFailed = true;\n throw err;\n });\n }\n\n private _isDisposed = false;\n dispose(): Promise {\n this._isDisposed = true;\n const executeReset = () => this._blueRibbonCoreManager.reset().then(() => this._blueRibbonEventsDispatcher.dispose());\n\n return this.waitForConnect().then(() => {\n return this._operationExecutionMonitor.execute({\n operationName: 'reset'\n }, executeReset)\n }).catch(err => {\n // we don't want to fail the dispose because probably a new connect is going to happen\n this._operationExecutionMonitor.error('BlueRibbonConnection dispose failed', err);\n });\n }\n\n private _isConnected: boolean = false;\n public get isConnected(): boolean {\n return this._isConnected;\n }\n\n private _connectPromise: Promise = null;\n\n public waitForConnect(): Promise {\n if(this.isConnected) {\n return Promise.resolve();\n } else {\n if (this._connectionFailed) {\n this._connectionFailed = false;\n this._connectPromise = this._startConnection();\n }\n return this._connectPromise;\n }\n }\n\n getOperatorGamesMatchDetails(): Promise {\n return this.waitForConnect().then(() => {\n return this._blueRibbonCoreManager.operatorGames.getOperatorGamesMatchDetails({filter: 'WITH_COMPLEX_SEGMENTS'}).matchedOperatorGames as ComplexMatchDetails[] || [];\n });\n }\n\n isPlayerOptInToJackpotGame(game: GameObject): Promise {\n return this.waitForConnect().then(() => {\n return this._blueRibbonCoreManager.player.isPlayerOptInToJackpotGame(game);\n });\n }\n\n getGameDetailsByGameIds(gameIds: GameObject[]): Promise {\n const executeGetGameDetailsByGameIds = () => {\n return this.waitForConnect().then(() => this._blueRibbonCoreManager.ticker.getGameDetailsByGameIds(gameIds).then(response => response.gamesDetails));\n }\n\n return this._operationExecutionMonitor.execute({\n operationName: 'getGameDetailsByGameIds',\n operationParams: gameIds\n },\n executeGetGameDetailsByGameIds);\n }\n\n\n public async startOneJackpotFeed(jackpotId: string): Promise {\n await this.waitForConnect();\n this._feedsController.stopOneJackpotFeed(jackpotId);\n await this._feedsController.startOneJackpotFeed(jackpotId, GameMode.IN_GAME);\n }\n\n public async stopOneJackpotFeed(jackpotId: string): Promise {\n await this.waitForConnect();\n this._feedsController.stopOneJackpotFeed(jackpotId);\n await this._feedsController.startOneJackpotFeed(jackpotId, GameMode.LOBBY);\n }\n\n}","import {BlueRibbonConnection} from './blue_ribbon_connection';\nimport {\n FullGameDetails,\n GameObject,\n PlayerOptResponse,\n ComplexMatchDetails,\n} from './blue_ribbon_api_interfaces';\nimport {IBlueRibbonConnection} from './blue_ribbon_connection_interface';\n\nexport class BlueRibbonConnectionProxy implements IBlueRibbonConnection {\n constructor() {\n this._waitForInnerConnectionPromise = new Promise((resolve, reject) => {\n this._resolveWaitPromise = resolve;\n this._rejectWaitPromise = reject;\n });\n }\n\n dispose(): Promise {\n if(this._innerConnection) {\n return this._innerConnection.dispose().then(() => this._resolveWaitPromise());\n } else {\n return Promise.resolve().then(() => this._resolveWaitPromise());\n }\n }\n\n private _innerConnection: BlueRibbonConnection = null;\n\n public setInnerConnection(innerConnection: BlueRibbonConnection): void {\n this._innerConnection = innerConnection;\n this._innerConnection.waitForConnect()\n .then(() => {\n this._resolveWaitPromise();\n })\n .catch(err => {\n this._rejectWaitPromise(err);\n });\n }\n\n get isConnected() {\n if(this._innerConnection) {\n return this._innerConnection.isConnected;\n } else {\n return false;\n }\n }\n\n private _resolveWaitPromise: Function;\n private _rejectWaitPromise: Function;\n private readonly _waitForInnerConnectionPromise: Promise;\n\n waitForConnect() {\n return this._waitForInnerConnectionPromise;\n }\n\n getOperatorGamesMatchDetails(): Promise {\n return this._waitForInnerConnectionPromise.then(() => {\n return this._innerConnection.getOperatorGamesMatchDetails();\n });\n }\n isPlayerOptInToJackpotGame(game: GameObject): Promise {\n return this._waitForInnerConnectionPromise.then(() => {\n return this._innerConnection.isPlayerOptInToJackpotGame(game);\n });\n }\n\n getGameDetailsByGameIds(gameIds: GameObject[]): Promise {\n return this._waitForInnerConnectionPromise.then(() => {\n return this._innerConnection.getGameDetailsByGameIds(gameIds);\n });\n }\n\n startOneJackpotFeed(jackpotId: string): Promise {\n return this._waitForInnerConnectionPromise.then(() => {\n return this._innerConnection.startOneJackpotFeed(jackpotId);\n });\n }\n\n stopOneJackpotFeed(jackpotId: string): Promise {\n return this._waitForInnerConnectionPromise.then(() => {\n return this._innerConnection.stopOneJackpotFeed(jackpotId);\n });\n }\n}","import BaseObject from \"../../base/base_object\";\nimport Event, {SystemEventSubscription} from '../../utils/event';\nimport _ from '../../utils/underscore';\nimport DOM from '../../utils/dom';\nimport Device from '../../utils/device/device';\nimport ServiceFactory from \"../service_factory\";\nimport { SYSTEM_EVENTS } from \"../../events/events\";\nimport {IBlueRibbonConnection} from './blue_ribbon_connection_interface';\nimport {\n IBlueRibbonPartyJackpot,\n PartyJackpotJoinStatus\n} from '../../../../common/interfaces/blue-ribbon-party-jackpot.interface';\nimport {BlueRibbonExecutionMonitor} from './blue_ribbon_helpers';\nimport {IOrbitComponentInSdk} from '../../../../common/interfaces/orbit-component-to-sdk-adapter/orbit-component-to-sdk-adapter.service.interface';\n\n\n\nexport default class PartyJackpotOpenedGameFlowHandler extends BaseObject {\n static CLASS = 'PartyJackpotOpenedGameFlowHandler';\n\n private _serviceFactory: ServiceFactory;\n private _blueRibbonConnection: IBlueRibbonConnection;\n private _gameType: number = 0;\n private _widgetContainer: HTMLElement;\n private _blueRibbonExecutionMonitor: BlueRibbonExecutionMonitor;\n private _openGameSubscription: SystemEventSubscription = null;\n private _openGameErrorSubscription: SystemEventSubscription = null;\n private _closeGameSubscription: SystemEventSubscription = null;\n\n init(params) {\n super.init(params);\n\n if(_.isNullOrUndefined(params.serviceFactory)) {\n this.throwArgumentExpected('34', 'init', 'serviceFactory');\n }\n\n if(_.isNullOrUndefined(params.blueRibbonConnection)) {\n this.throwArgumentExpected('38', 'init', 'blueRibbonConnection');\n }\n\n if(_.isNullOrUndefined(params.gameType)) {\n this.throwArgumentExpected('42', 'init', 'gameType');\n }\n\n this._serviceFactory = params.serviceFactory;\n this._blueRibbonConnection = params.blueRibbonConnection;\n this._gameType = params.gameType;\n this._blueRibbonExecutionMonitor = new BlueRibbonExecutionMonitor(params.serviceFactory);\n\n\n this._openGameSubscription = Event.once(SYSTEM_EVENTS.GAME_OPEN, this._onOpenGame, this);\n this._closeGameSubscription = Event.once(SYSTEM_EVENTS.CLOSE_GAME, this._onCloseGame, this);\n this._openGameErrorSubscription = Event.once(SYSTEM_EVENTS.OPEN_GAME_ERROR, this._onOpenGameError, this);\n\n\n }\n\n private _onOpenGameError = () => {\n this._openGameSubscription.off();\n this._closeGameSubscription.off();\n };\n\n private _startOneFeedPromise: Promise = null;\n private _onOpenGame = () => {\n this._blueRibbonExecutionMonitor.info('Game open');\n this._openGameErrorSubscription.off();\n\n this._startOneFeedPromise = this._serviceFactory.blueRibbonService().getPartyJackpotByGameType(this._gameType)\n .then((partyJackpot) => {\n if(this._isGameClosed) { // It means that the game was closed right after opening so no need to proceed with start one feed.\n return null;\n }\n if (partyJackpot) {\n return this._blueRibbonConnection.startOneJackpotFeed(partyJackpot.jackpotId).then(() => {\n if(partyJackpot.isActive) {\n this._serviceFactory.blueRibbonService().showPartyJackpotWelcomePopup(partyJackpot).then(status => {\n if (status === PartyJackpotJoinStatus.Joined) {\n this._injectPartyJPWidget(partyJackpot, this._widgetContainer);\n }\n });\n }\n return partyJackpot;\n });\n } else {\n return null;\n }\n\n });\n }\n\n private _isGameClosed = false;\n\n private _onCloseGame = (gameInfo) => {\n this._blueRibbonExecutionMonitor.info('Game closed');\n if(gameInfo.gameType === this._gameType) {\n this._isGameClosed = true;\n const stopOneJackpotFeed = (partyJackpot: IBlueRibbonPartyJackpot) => {\n if(partyJackpot) {\n return this._blueRibbonConnection.stopOneJackpotFeed(partyJackpot.jackpotId);\n } else {\n return Promise.resolve();\n }\n }\n this._startOneFeedPromise?.then(stopOneJackpotFeed).catch(stopOneJackpotFeed);\n }\n\n if(this._inGameWidgetComponent) {\n this._inGameWidgetComponent.unmount();\n }\n }\n\n setContainer(containerElement: HTMLElement) {\n this._widgetContainer = containerElement;\n }\n\n\n private _inGameWidgetComponent: IOrbitComponentInSdk;\n private _injectPartyJPWidget(partyJackpot: IBlueRibbonPartyJackpot, containerDOMElement: HTMLElement) {\n\n // compute top offset\n let topOffset = 0;\n const gameIFrame = DOM.querySelector(\".cgp-game-iframe-container\") as HTMLElement;\n if (gameIFrame) {\n const regulationStripeWidth = parseInt(DOM.getCurrentStyle(gameIFrame).top.replace(\"px\", \"\"));\n if (_.isNumber(regulationStripeWidth)) {\n topOffset = regulationStripeWidth;\n }\n }\n\n // compute left offset\n let leftOffset = 0;\n if (Device.isMobile()) {\n leftOffset = 105 / 2;\n }\n\n this._inGameWidgetComponent = this._serviceFactory.orbitComponentRenderService().renderPartyJackpotInGameWidget(containerDOMElement, {\n partyJackpot: partyJackpot,\n boundSelector: '.cgp-game-window-content-body',\n onClick: () => {\n this._serviceFactory.blueRibbonService().showPartyJackpotPromotionPage();\n },\n initialX: leftOffset,\n initialY: topOffset,\n });\n }\n}\n","import BaseService from '../../base/base_service';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport IBlueRibbonService from './blue_ribbon_service_interface';\nimport {\n BlueRibbonLoginResult,\n LogLevel,\n SDKInterface,\n IBlueRibbonWindowObject\n} from './blue_ribbon_api_interfaces';\nimport BlueRibbonPersonalJackpotEventsHandler from './event_handlers/blue_ribbon_personal_jackpot_events_handler';\nimport BlueRibbonPartyJackpotEventsHandler from './event_handlers/blue_ribbon_party_jackpot_events_handler';\nimport {IBlueRibbonEventsHandler} from './event_handlers/blue_ribbon_event_handler_interface';\nimport {BlueRibbonConnection} from './blue_ribbon_connection';\nimport {BlueRibbonConnectionProxy} from './blue_ribbon_connection_proxy';\nimport {\n BlueRibbonExecutionMonitor,\n deleteBlueRibbonLocalStorageKey,\n getBlueRibbonLocalStorageKey,\n setBlueRibbonLocalStorageKey\n} from './blue_ribbon_helpers';\nimport PartyJackpotOpenedGameFlowHandler from './party_jackpot_open_game_flow_handler';\nimport {\n IBlueRibbonPartyJackpot,\n IBlueRibbonPersonalJackpot,\n PartyJackpotJoinStatus\n} from '../../../../common/interfaces/blue-ribbon-party-jackpot.interface';\nimport {IBlueRibbonConnection} from './blue_ribbon_connection_interface';\nimport _ from '../../utils/underscore';\nimport {action, observable} from 'mobx';\nimport Event from '../../utils/event';\nimport { FEATURE_NAME_PARTY_JACKPOTS } from '../../../../common/const/ab-testing-names';\n\nconst BlueRibbonOperatorIdKey = 'OperatorId';\nconst PartyJackpotsJoinStatus = 'PartyJackpotsJoinStatus';\n\nexport interface IBlueRibbonServiceParams {\n enabled: boolean;\n isAllLiveGamesPromotion: boolean;\n getBlueRibbonTokenUrl: string;\n getBlueRibbonAnonymousTokenUrl: string;\n joinPartyJackpotUrl: string;\n doNotJoinPartyJackpotUrl: string;\n getOperatorIdUrl: string;\n sdkUrl: string;\n personalJackpotPromotionUrl: string;\n partyJackpotPromotionUrl: string;\n apiHost: string;\n logLevel: LogLevel;\n}\n\nexport default class BlueRibbonService extends BaseService implements IBlueRibbonService {\n\n static CLASS = \"BlueRibbonService\";\n private _initialParams: IBlueRibbonServiceParams;\n\n private _lastIsEnabled: boolean = null;\n\n private _insufficientFundsSent: boolean = false;\n\n init(params: IBlueRibbonServiceParams) {\n this._initialParams = params;\n this._subscribe();\n this._setPartyJackpotsJoinStatus(this._getPartyJackpotsJoinStatusFromLocalStorage());\n }\n\n isEnabled(): boolean {\n if(this._initialParams.enabled) {\n return true;\n }\n\n const featureData = this.serviceFactory.abTestingService().getAbTestingDataForFeature(FEATURE_NAME_PARTY_JACKPOTS);\n if (featureData) {\n return true;\n } else {\n this.logger.debug(`BlueRibbon feature ${FEATURE_NAME_PARTY_JACKPOTS} is disabled or hasn't been read from token yet`);\n return false;\n }\n }\n\n private _fireIsEnabledChanged() {\n const isEnabled = this.isEnabled();\n if (this._lastIsEnabled !== isEnabled) {\n this.logger.debug(`BlueRibbon isEnabled changed from ${this._lastIsEnabled} to ${isEnabled}`);\n const isAllLiveGamesPromotion = this._initialParams.isAllLiveGamesPromotion ?? false;\n Event.fire(SYSTEM_EVENTS.BLUE_RIBBON_IS_ENABLED_CHANGED, { isEnabled, isAllLiveGamesPromotion });\n this._lastIsEnabled = isEnabled;\n }\n }\n\n private _operationExecutionMonitor: BlueRibbonExecutionMonitor;\n private get operationExecutionMonitor() {\n if(!this._operationExecutionMonitor) {\n this._operationExecutionMonitor = new BlueRibbonExecutionMonitor(this.serviceFactory);\n }\n return this._operationExecutionMonitor;\n }\n\n private _subscribe() {\n this.onSystemEvent(SYSTEM_EVENTS.ON_ORBIT_INIT_COMPLETE, this._onInitComplete);\n }\n\n private _onInitComplete() {\n this._fireIsEnabledChanged();\n\n if (this.isEnabled()) {\n this._connect().then(() => {\n // We start listening for OAUTH_STATE_CHANGED only after we do initial connect\n // This way we avoid duplicate connect when the user does 2 subsequents autologins\n // (click on a game in Sports then closes the Orbit browser and click again on a game in sport)\n // https://dev.azure.com/888holdings/GamingNDL/_workitems/edit/1677717\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, this._onOAuthStateChange);\n }).catch(err => {\n this._operationExecutionMonitor.error('BlueRibbon connect on init complete failed', err);\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, this._onOAuthStateChange);\n });\n } else {\n this.onSystemEvent(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, this._onOAuthStateChange);\n }\n }\n\n private _onOAuthStateChange() {\n this._fireIsEnabledChanged();\n \n if(!this.serviceFactory.oAuth2Service().isAuthorized()) {\n this._insufficientFundsSent = false;\n }\n\n if(this.isEnabled()) {\n this._connect();\n } else {\n this._dispose();\n }\n }\n\n isConnected(): boolean {\n return this._blueRibbonConnectionProxy?.isConnected || false;\n }\n\n private _partyJackpotHandler: BlueRibbonPartyJackpotEventsHandler;\n private _personalJackpotHandler: BlueRibbonPersonalJackpotEventsHandler;\n private _blueRibbonConnectionProxy: BlueRibbonConnectionProxy = new BlueRibbonConnectionProxy();\n\n private _connect(): Promise {\n\n return this.serviceFactory.oAuth2Service().waitForAutologin().then(() => {\n return this._blueRibbonConnectionProxy.dispose().then(() => {\n this._blueRibbonConnectionProxy = new BlueRibbonConnectionProxy();\n\n return this._createBlueRibbonSdkCoreManager().then(blueRibbonCoreManager => {\n const blueRibbonConnection = new BlueRibbonConnection(\n blueRibbonCoreManager,\n this.serviceFactory,\n this._createEventsHandlers(this._blueRibbonConnectionProxy)\n );\n\n this._blueRibbonConnectionProxy.setInnerConnection(blueRibbonConnection);\n\n }).catch(err => {\n this.logger.error('Failed to create BlueRibbon.SdkCoreManager instance', err);\n });\n });\n });\n }\n\n private _dispose(): Promise {\n if (!this._blueRibbonConnectionProxy || !this._blueRibbonConnectionProxy.isConnected) {\n return Promise.resolve();\n }\n \n return this._blueRibbonConnectionProxy.dispose().then(() => {\n // force sending isEnabled changed event after dispose()\n // because some events may be interleaved with reset() call\n this._lastIsEnabled = null;\n this._fireIsEnabledChanged();\n });\n }\n\n private _createEventsHandlers(blueRibbonConnection: IBlueRibbonConnection): IBlueRibbonEventsHandler[] {\n this._partyJackpotHandler = new BlueRibbonPartyJackpotEventsHandler(this.serviceFactory, blueRibbonConnection, () => this._personalJackpotId);\n let eventsHandlers: IBlueRibbonEventsHandler[] = [this._partyJackpotHandler];\n\n if(this.serviceFactory.oAuth2Service().isAuthorized()) {\n this._personalJackpotHandler = new BlueRibbonPersonalJackpotEventsHandler(blueRibbonConnection, this.serviceFactory, () => this._personalJackpotId);\n eventsHandlers.push(this._personalJackpotHandler);\n } else {\n this._personalJackpotHandler = null;\n }\n\n return eventsHandlers;\n }\n\n\n get personalJackpotInfo(): IBlueRibbonPersonalJackpot | null {\n return this._personalJackpotHandler?.personalJackPot;\n }\n\n\n private _createBlueRibbonSdkCoreManager(): Promise {\n\n const loadSkdPromise = this._loadBlueRibbonSdk();\n const getOperatorIdPromise = this._getOperatorId();\n\n return Promise.all([getOperatorIdPromise, loadSkdPromise]).then(data => {\n const operatorId: string = data[0];\n const BlueRibbon = this.serviceFactory.windowService().getGlobalProperty('BlueRibbon') as IBlueRibbonWindowObject;\n return new BlueRibbon.SdkCoreManager({\n operatorId: operatorId,\n logLevel: this._initialParams.logLevel,\n baseServiceUrl: this._initialParams.apiHost,\n loginAuthenticatedPlayer: () => this._loginPlayer(this._initialParams.getBlueRibbonTokenUrl, 'loginAuthenticatedPlayer'),\n loginAnonymousPlayer: () => this._loginPlayer(this._initialParams.getBlueRibbonAnonymousTokenUrl, 'loginAnonymousPlayer'),\n withOverlays: false,\n emitWinsInLobby: true\n });\n });\n }\n\n private _loadBlueRibbonSdkPromise: Promise = null;\n private _loadBlueRibbonSdk(): Promise {\n if (!this._loadBlueRibbonSdkPromise) {\n const executeLoadBlueRibbonSdk = () => this.serviceFactory.scriptLoaderService().loadScript(this._initialParams.sdkUrl, 'blue-ribbon-sdk');\n this._loadBlueRibbonSdkPromise = this.operationExecutionMonitor.execute({\n operationName: 'loadBlueRibbonSdk',\n operationParams:{\n url: this._initialParams.sdkUrl\n }\n }, executeLoadBlueRibbonSdk);\n }\n\n return this._loadBlueRibbonSdkPromise;\n }\n\n private _getOperatorId(): Promise {\n const operatorId = this._getOperatorIdFromLocalStorage();\n if(operatorId) {\n return Promise.resolve(operatorId);\n }\n const subBrandId = this.serviceFactory.skinService().getSubBrandID();\n const getOperatorIdParams = {\n url: this._initialParams.getOperatorIdUrl,\n request: {subBrandId: subBrandId}\n }\n const executeGetOperatorId = () => {\n return this.serviceFactory.http2Service().post(getOperatorIdParams.url, getOperatorIdParams.request).then(operatorId => {\n this._setOperatorIdInLocalStorage(operatorId);\n return operatorId;\n });\n };\n return this.operationExecutionMonitor.execute({\n operationName: 'getOperatorId',\n operationParams: getOperatorIdParams\n },\n executeGetOperatorId);\n }\n\n private _personalJackpotId: string = null;\n @observable.ref private _partyJackpotsJoinStatus: Record = {};\n\n @action.bound\n private _setPartyJackpotsJoinStatus(newStatus: Record) {\n this._setPartyJackpotsJoinStatusInLocalStorage(newStatus);\n this._partyJackpotsJoinStatus = newStatus || {};\n }\n\n private _loginPlayer(url: string, operationName: string): Promise {\n\n const executeLogin = () => this.serviceFactory.http2Service().post(url);\n\n return this.operationExecutionMonitor.execute({\n operationName: operationName,\n logExecutionTimeToElastic: true\n }, executeLogin)\n .then((loginData: BlueRibbonLoginResult) => {\n if (!loginData) {\n throw new Error(`Adapter login player response is empty for url ${url}`);\n }\n this._personalJackpotId = loginData.GameCode;\n if(this.serviceFactory.oAuth2Service().isAuthorized()) {\n this._setPartyJackpotsJoinStatus(loginData.JackpotsJoinStatus);\n }\n\n const info = JSON.parse(loginData.LoginResponse);\n return info;\n }\n );\n }\n\n getPartyJackpotJoinStatus(jackpotId: string): PartyJackpotJoinStatus {\n if(_.isNullOrUndefined(this._partyJackpotsJoinStatus[jackpotId])) {\n return PartyJackpotJoinStatus.Neutral;\n }\n return this._partyJackpotsJoinStatus[jackpotId];\n }\n\n getPartyJackpotByGameType(gameType: number): Promise {\n return this._blueRibbonConnectionProxy.waitForConnect().then(() => {\n const allJPs = this._partyJackpotHandler.getAllPartyJackpots();\n for (let i = 0; i < allJPs.length; i++) {\n const jackpot = allJPs[i];\n if(jackpot.hasGame(gameType)) {\n return jackpot;\n }\n }\n return null;\n });\n }\n\n showPersonalJackpotPromotionPage() {\n if (this._initialParams.personalJackpotPromotionUrl) {\n this.serviceFactory.windowService().redirect(this._initialParams.personalJackpotPromotionUrl);\n }\n }\n\n showPartyJackpotPromotionPage() {\n if (this._initialParams.partyJackpotPromotionUrl) {\n this.serviceFactory.windowService().redirect(this._initialParams.partyJackpotPromotionUrl);\n }\n }\n\n createPartyJackpotOpenedGameHandler(gameType: number): PartyJackpotOpenedGameFlowHandler {\n return PartyJackpotOpenedGameFlowHandler.create({\n serviceFactory: this.serviceFactory,\n blueRibbonConnection: this._blueRibbonConnectionProxy,\n gameType: gameType\n })\n }\n\n private _getOperatorIdLocalStorageKey() {\n // this is necessary because in mirage under the same domain we can load multiple sub brands using the launcher\n return BlueRibbonOperatorIdKey + '_' + this.serviceFactory.skinService().getSubBrandID();\n }\n private _setOperatorIdInLocalStorage(operatorId: string): void {\n if(operatorId) {\n setBlueRibbonLocalStorageKey(this._getOperatorIdLocalStorageKey(), operatorId);\n } else {\n deleteBlueRibbonLocalStorageKey(this._getOperatorIdLocalStorageKey());\n }\n }\n\n private _getOperatorIdFromLocalStorage(): string {\n return getBlueRibbonLocalStorageKey(this._getOperatorIdLocalStorageKey());\n }\n\n private _setPartyJackpotsJoinStatusInLocalStorage(jackpotsStatuses: Record) {\n if(_.isEmpty(jackpotsStatuses)) {\n deleteBlueRibbonLocalStorageKey(PartyJackpotsJoinStatus);\n } else {\n setBlueRibbonLocalStorageKey(PartyJackpotsJoinStatus, JSON.stringify(jackpotsStatuses));\n }\n }\n\n private _getPartyJackpotsJoinStatusFromLocalStorage(): Record {\n const statuses = getBlueRibbonLocalStorageKey(PartyJackpotsJoinStatus);\n if(statuses) {\n try {\n return JSON.parse(statuses);\n } catch (err) {\n this.logger.error('Failed to parse party jackpot join status from local storage', err);\n return {};\n }\n } else {\n return {};\n }\n\n }\n\n private _isPartyJackpotJoinStatusNeutral(partyJackpotId: string): boolean {\n return this.getPartyJackpotJoinStatus(partyJackpotId) === PartyJackpotJoinStatus.Neutral;\n }\n\n makePartyJackpotStatusNeutral(jackpotId: string): void {\n let clonedJackpotStatuses = {...this._partyJackpotsJoinStatus};\n delete clonedJackpotStatuses[jackpotId];\n this._setPartyJackpotsJoinStatus(clonedJackpotStatuses);\n }\n\n showPartyJackpotWelcomePopup(partyJackpot: IBlueRibbonPartyJackpot): Promise {\n if(!partyJackpot.isActive) {\n return Promise.resolve(PartyJackpotJoinStatus.NotJoined);\n }\n\n const currentStatus = this.getPartyJackpotJoinStatus(partyJackpot.jackpotId);\n\n if(this.serviceFactory.walletService().getCashBalance() === 0) {\n if (currentStatus !== PartyJackpotJoinStatus.NotJoined) {\n this._showInsufficientRealMoneyToaster(partyJackpot);\n return Promise.resolve(PartyJackpotJoinStatus.Neutral);\n }\n }\n\n if (!this._isPartyJackpotJoinStatusNeutral(partyJackpot.jackpotId)) {\n return Promise.resolve(currentStatus);\n }\n\n return new Promise((resolve, reject) => {\n this.serviceFactory.orbitComponentRenderService().showPartyJackpotWelcomePopup({\n partyJackpot: partyJackpot,\n onAcceptButtonClicked: () => {\n this.serviceFactory.http2Service().post(this._initialParams.joinPartyJackpotUrl, {\n jackpotId: partyJackpot.jackpotId\n }).then(() => {\n this._setPartyJackpotsJoinStatus({...this._partyJackpotsJoinStatus, [partyJackpot.jackpotId]: PartyJackpotJoinStatus.Joined})\n resolve(PartyJackpotJoinStatus.Joined);\n }).catch(err => {\n this.logger.error(`Failed to join player to party jackpot ${partyJackpot.jackpotId}`, err);\n reject(err);\n })\n },\n onDeclineButtonClicked: () => {\n if (!partyJackpot.hasRealMoneyWinPrize) {\n this.serviceFactory.http2Service().post(this._initialParams.doNotJoinPartyJackpotUrl, {\n jackpotId: partyJackpot.jackpotId\n }).then(() => {\n this._setPartyJackpotsJoinStatus({...this._partyJackpotsJoinStatus, [partyJackpot.jackpotId]: PartyJackpotJoinStatus.NotJoined})\n resolve(PartyJackpotJoinStatus.NotJoined);\n }).catch(err => {\n reject(err);\n });\n } else {\n resolve(PartyJackpotJoinStatus.Neutral);\n }\n }\n });\n });\n }\n\n private _showInsufficientRealMoneyToaster(partyJackpot: IBlueRibbonPartyJackpot) {\n if (!this._insufficientFundsSent) {\n Event.fire(SYSTEM_EVENTS.BLUE_RIBBON_PARTY_JACKPOT_INSUFFICIENT_MONEY, partyJackpot);\n this._insufficientFundsSent = true;\n } else {\n this.logger.debug(\"BlueRibbon 0 ballance detected, insufficient toaster already sent once in this session\");\n }\n }\n}\n","import BaseObject from '../../../base/base_object';\n\nexport default class GameSequenceHelper extends BaseObject {\n init(params) {\n super.init(params);\n\n if(!params.createGameSequenceBuilderCallback) {\n this.throwArgumentExpected('8', 'init', 'createGameSequenceBuilderCallback');\n }\n\n this._currentSteps = params.currentSteps || [];\n this._createGameSequenceBuilderCallback = params.createGameSequenceBuilderCallback;\n this.isGameStepOrDescriptorCallback = params.isGameStepOrDescriptorCallback;\n }\n\n _findStepIndex(gameStepPrototype) {\n return this._currentSteps.findIndex(step => step instanceof gameStepPrototype);\n }\n\n _createNewGameSequenceBuilder() {\n return this._createGameSequenceBuilderCallback(this._currentSteps);\n }\n\n _checkIsGameStep(prototypeOrDescriptor) {\n if(!this.isGameStepOrDescriptorCallback(prototypeOrDescriptor)) {\n this.throwError('26', `Provided game step prototype ${prototypeOrDescriptor} doesn't inherit from GameStepBase and is not an instance of GameStepInstanceDescriptor either`);\n }\n }\n}","import GameSequenceHelper from './game_sequence_helper';\n\nexport default class GameStepInserter extends GameSequenceHelper {\n static CLASS = 'GameStepInserter';\n\n init(params) {\n super.init(params);\n\n if(!params.newSteps) {\n this.throwArgumentExpected('10', 'init', 'newSteps');\n }\n\n this._newSteps = params.newSteps;\n }\n\n last() {\n this._newSteps.forEach((step) => {\n this._currentSteps.push(step);\n });\n\n return this._createNewGameSequenceBuilder();\n }\n\n first() {\n this._currentSteps.splice(0, 0, ...this._newSteps);\n return this._createNewGameSequenceBuilder();\n }\n\n before(gameStepPrototype) {\n this._checkIsGameStep(gameStepPrototype);\n let index = this._findStepIndex(gameStepPrototype);\n if(index < 0) {\n this.throwError('33', `Cannot insert before because there is no game step of type ${gameStepPrototype}`);\n }\n this._currentSteps.splice(index, 0, ...this._newSteps);\n return this._createNewGameSequenceBuilder();\n }\n\n after(gameStepPrototype) {\n this._checkIsGameStep(gameStepPrototype);\n\n let index = this._findStepIndex(gameStepPrototype);\n if(index < 0) {\n this.throwError('44', `Cannot insert after because there is no game step of type ${gameStepPrototype}`);\n }\n this._currentSteps.splice(index + 1, 0, ...this._newSteps);\n return this._createNewGameSequenceBuilder();\n }\n}","import GameSequenceHelper from './game_sequence_helper';\nimport _ from '../../../utils/underscore';\n\nexport default class GameStepReplacer extends GameSequenceHelper {\n static CLASS = 'GameStepReplacer';\n\n init(params) {\n super.init(params);\n this._createGameStepsCallback = params.createGameStepsCallback;\n this._replacedGameStepPrototype = params.replacedGameStepPrototype;\n }\n\n With(stepPrototypeOrDescriptor, params) {\n\n if(_.isArray(stepPrototypeOrDescriptor)) {\n stepPrototypeOrDescriptor.forEach(protOrDescriptor => this._checkIsGameStep(protOrDescriptor));\n } else {\n this._checkIsGameStep(stepPrototypeOrDescriptor);\n }\n\n\n let stepIndex = this._findStepIndex(this._replacedGameStepPrototype);\n if(stepIndex < 0) {\n this.throwError('24', `Cannot replace game step of type ${stepPrototypeOrDescriptor} because it cannot be found`);\n }\n let newSteps = this._createGameStepsCallback(stepPrototypeOrDescriptor, params);\n this._currentSteps.splice(stepIndex, 1, ...newSteps);\n return this._createNewGameSequenceBuilder();\n }\n\n}","import BaseObject from '../../../base/base_object';\nimport _ from '../../../utils/underscore';\nimport GameStepInserter from './game_step_inserter';\nimport GameStepReplacer from './game_step_replacer';\nimport GameStepBase from '../game_steps/game_step_base';\nimport GameStepInstanceDescriptor from './GameStepInstanceDescriptor';\n\nexport default class GameSequenceBuilder extends BaseObject {\n static CLASS = 'GameSequenceBuilder';\n\n init(params) {\n super.init(params);\n if(!params.serviceFactory) {\n this.throwArgumentExpected('14', 'init', 'serviceFactory');\n }\n this.serviceFactory = params.serviceFactory;\n this._steps = params.steps || [];\n }\n\n _steps = [];\n\n\n hasStep(gameStepPrototype) {\n if(!this._isGameStep(gameStepPrototype)) {\n this.throwError('25', 'gameStepPrototype argument should be a class that inherits from GameStepBase', {gameStepPrototype});\n }\n\n let stepIndex = this._steps.findIndex(step => step instanceof gameStepPrototype);\n\n return stepIndex >= 0;\n }\n\n getStepInstance(gameStepPrototype) {\n let stepIndex = this._steps.findIndex(step => step instanceof gameStepPrototype);\n if (stepIndex >= 0){\n return this._steps[stepIndex];\n }\n\n return null;\n }\n\n insert(gameStepPrototypes, params = null) {\n if(_.isArray(gameStepPrototypes)) {\n if(params) {\n this.throwError('45', 'When `gameStepPrototypes` argument is an array then `params` argument should not be provided! Try provide an array of GameStepInstanceDescriptor');\n }\n }\n return GameStepInserter.create(Object.assign(this._getGameSequenceHelperCommonParameters(), {\n newSteps: this._createMultipleGameStepInstances(gameStepPrototypes, params),\n }));\n }\n\n replace(gameStepPrototype) {\n if(!this._isGameStep(gameStepPrototype)) {\n this.throwError('55', 'gameStepPrototype argument should be a class that inherits from GameStepBase', {gameStepPrototype});\n }\n\n return GameStepReplacer.create(Object.assign(this._getGameSequenceHelperCommonParameters(), {\n replacedGameStepPrototype: gameStepPrototype,\n createGameStepsCallback: this._createMultipleGameStepInstances.bind(this)\n }));\n }\n\n remove(gameStepPrototypes) {\n\n if(!_.isArray(gameStepPrototypes)) {\n gameStepPrototypes = [gameStepPrototypes];\n }\n\n gameStepPrototypes.forEach(stepProto => {\n if(!this._isGameStep(stepProto)) {\n this.throwError('72', 'gameStepPrototypes argument should be a class that inherits from GameStepBase', {gameStepPrototype: stepProto});\n }\n });\n\n let clonedSteps = this._cloneSteps();\n\n gameStepPrototypes.forEach(stepProto => {\n let stepIndex = clonedSteps.findIndex(step => step instanceof stepProto);\n if(stepIndex >= 0) {\n clonedSteps.splice(stepIndex, 1);\n }\n });\n\n return this._createGameSequenceBuilder(clonedSteps);\n\n }\n\n _getGameSequenceHelperCommonParameters() {\n return {\n currentSteps: this._cloneSteps(),\n createGameSequenceBuilderCallback: this._createGameSequenceBuilder.bind(this),\n isGameStepOrDescriptorCallback: this._isGameStepOrDescriptor.bind(this)\n };\n }\n\n _createMultipleGameStepInstances(gameStepPrototypes, params) {\n if(!_.isArray(gameStepPrototypes)) { //it means that the caller wants to create just one step\n return [this._createSingleGameStepInstance(gameStepPrototypes, params)];\n }\n\n // so we create multiple steps\n return gameStepPrototypes.map(stepPrototype => this._createSingleGameStepInstance(stepPrototype));\n }\n\n _createSingleGameStepInstance(stepPrototypeOrDescriptor, params) {\n if(!this._isGameStepOrDescriptor(stepPrototypeOrDescriptor)) {\n this.throwError('108', `Provided stepPrototypeOrDescriptor argument doesn't inherit from GameStepBase and is not an instance of GameStepInstanceDescriptor either!`, {stepPrototypeOrDescriptor, params});\n }\n\n // if stepPrototypeOrDescriptor is an instance of GameStepInstanceDescriptor then\n // we create a step according with the information inside the GameStepInstanceDescriptor\n if(this._isStepInstanceDescriptor(stepPrototypeOrDescriptor)) {\n return stepPrototypeOrDescriptor.stepPrototype.create(Object.assign({\n serviceFactory: this.serviceFactory\n }, stepPrototypeOrDescriptor.stepParams))\n }\n\n // here we have a game step class so we just call the create method of that game step.\n return stepPrototypeOrDescriptor.create(Object.assign({\n serviceFactory: this.serviceFactory\n }, params));\n }\n\n\n _isGameStep(stepPrototype) {\n if(_.isNullOrUndefined(stepPrototype)) {\n return false;\n }\n\n if(stepPrototype instanceof GameStepBase) {\n return true;\n }\n\n if(stepPrototype.prototype instanceof GameStepBase) {\n return true;\n }\n\n\n return false;\n }\n\n _isStepInstanceDescriptor(descriptor) {\n if(_.isNullOrUndefined(descriptor)) {\n return false;\n }\n\n if(descriptor.prototype instanceof GameStepInstanceDescriptor) {\n return true;\n }\n\n if(descriptor instanceof GameStepInstanceDescriptor) {\n return true;\n }\n\n return false;\n }\n\n _isGameStepOrDescriptor(stepPrototypeOrDescriptor) {\n\n if(this._isGameStep(stepPrototypeOrDescriptor)) {\n return true;\n }\n\n if(this._isStepInstanceDescriptor(stepPrototypeOrDescriptor)) {\n return true;\n }\n\n return false;\n }\n\n _cloneSteps() {\n return [].concat(this._steps);\n }\n\n build() {\n let duplicatedSteps = [];\n for(let i = 0; i < this._steps.length - 1; i++) {\n for(let k = i + 1; k < this._steps.length; k++) {\n if(this._steps[i].constructor === this._steps[k].constructor) {\n duplicatedSteps.push(this._steps[i]);\n }\n }\n }\n\n if(duplicatedSteps.length > 0) {\n const msg = 'Duplicated game steps detected';\n this.logger.error(msg, ...duplicatedSteps);\n throw new Error(msg);\n }\n return this._cloneSteps();\n }\n\n _createGameSequenceBuilder = (steps) => {\n return GameSequenceBuilder.create({\n serviceFactory: this.serviceFactory,\n steps: steps\n })\n }\n}","import BaseObject from '../../../base/base_object';\nimport GameSequenceBuilder from '../game_sequence_builder/game_sequence_builder';\nimport ServiceFactory from '../../service_factory';\n\nexport default class GameSequenceInitializerBase extends BaseObject {\n static CLASS = 'GameSequenceInitializerBase';\n protected serviceFactory: ServiceFactory;\n\n init(params) {\n if(!params.serviceFactory) {\n this.throwArgumentExpected('11', 'init', 'serviceFactory');\n }\n this.serviceFactory = params.serviceFactory;\n }\n\n initSequenceBuilder() {\n this.throwNotImplemented('17', 'initSequenceBuilder');\n }\n\n _createSequenceBuilder(): GameSequenceBuilder {\n return GameSequenceBuilder.create({\n serviceFactory: this.serviceFactory\n });\n }\n}","import LoginGameStep from '../game_steps/login_gamestep';\nimport RestrictionsGameStep from '../game_steps/restrictions_gamestep';\nimport GameSequenceInitializerBase from './game_sequence_initializer_base';\nimport BuildGamePostMessageHandlerGameStep from '../game_steps/build_game_post_message_handler_gamestep';\nimport RealityCheckIntervalAppenderGameStep from '../game_steps/reality_check_interval_appender_gamestep';\nimport GameSequenceBuilder from '../game_sequence_builder/game_sequence_builder';\n\nexport default class RealGameSequenceInitializer extends GameSequenceInitializerBase {\n static CLASS = 'RealGameSequenceInitializer';\n\n initSequenceBuilder(): GameSequenceBuilder {\n let gameSequenceBuilder: GameSequenceBuilder = this._createSequenceBuilder();\n let builder: GameSequenceBuilder = gameSequenceBuilder.insert(LoginGameStep).last()\n .insert(RestrictionsGameStep, {isReal: true}).last()\n .insert(BuildGamePostMessageHandlerGameStep, {isReal: true}).last()\n .insert(RealityCheckIntervalAppenderGameStep).last();\n\n return builder;\n }\n}\n","import GameSequenceInitializerBase from './game_sequence_initializer_base';\nimport RestrictionsGameStep from '../game_steps/restrictions_gamestep';\nimport BuildGamePostMessageHandlerGameStep from '../game_steps/build_game_post_message_handler_gamestep';\nimport GameSequenceBuilder from '../game_sequence_builder/game_sequence_builder';\n\nexport default class AnonymousGameSequenceInitializer extends GameSequenceInitializerBase {\n static CLASS = 'AnonymousGameSequenceInitializer';\n\n initSequenceBuilder(): GameSequenceBuilder {\n let sequenceBuilder = this._createSequenceBuilder();\n return sequenceBuilder.insert(RestrictionsGameStep, {isReal: false}).last()\n .insert(BuildGamePostMessageHandlerGameStep, {isReal: false}).last();\n }\n}\n","import GameSequenceInitializerBase from './game_sequence_initializer_base';\nimport LoginGameStep from '../game_steps/login_gamestep';\nimport GameSequenceBuilder from '../game_sequence_builder/game_sequence_builder';\n\nexport default class HistoryGameSequenceInitializer extends GameSequenceInitializerBase {\n static CLASS = 'HistoryGameSequenceInitializer';\n\n initSequenceBuilder(): GameSequenceBuilder {\n let gameSequenceBuilder = this._createSequenceBuilder();\n return gameSequenceBuilder.insert(LoginGameStep).last();\n }\n}\n","import BaseSingleton from '../../../base/base_singleton';\nimport BaseObject from '../../../base/base_object';\nimport Event from '../../../utils/event';\nimport {SYSTEM_EVENTS} from '../../../events/events';\nimport {isCancelGameFlowResponse} from \"../game_steps/game_step_base\";\n\n\n/**\n * The reason for Runner class is to make sure that nobody will call the same sequence twice.\n * A game sequence instance can only run once.\n */\nclass Runner extends BaseObject {\n static CLASS = \"Runner\";\n\n _serviceFactory = null;\n\n init(params) {\n super.init(params);\n this._steps = params.steps || [];\n this._serviceFactory = params.serviceFactory;\n }\n\n run(gameOptions) {\n if(this._steps.length === 0) {\n return Promise.resolve(gameOptions);\n }\n\n let step = this._steps.shift();\n return step.run(gameOptions)\n .then(gameOptions => this.run(gameOptions))\n .catch((err) => {\n if (!err) {\n this._serviceFactory\n .structuredLoggingService()\n .getLogger()\n .addCategory('game_service_sequence_runner')\n .addAction('undefined_error')\n .addValue(step.getClassName())\n .error();\n\n } else if (!isCancelGameFlowResponse(err)) {\n this.logger.debug(`Game step ${step.getClassName()} failed!`, err);\n err.failedGameStep = step.getClassName();\n }\n\n throw err;\n });\n }\n}\n\n\nexport default class GameServiceSequenceRunner extends BaseSingleton {\n static CLASS = 'GameServiceSequenceRunner';\n _serviceFactory = null;\n\n init(params) {\n super.init(params);\n this._subscribe();\n this._serviceFactory = params.serviceFactory;\n\n }\n\n _subscribe() {\n Event.on(SYSTEM_EVENTS.OAUTH_STATE_CHANGE, () => {\n this._sequenceInProgress = false;\n }, this);\n }\n\n _sequenceInProgress = false;\n run(gameOptions, steps) {\n if (this._sequenceInProgress) {\n this.logger.warn('There is already a game sequence in progress');\n return Promise.reject();\n }\n\n\n let runner = Runner.create({\n steps: steps,\n serviceFactory: this._serviceFactory\n });\n\n try {\n this._sequenceInProgress = true;\n\n return runner.run(gameOptions)\n .then((result) => {\n this._sequenceInProgress = false;\n Event.fire(SYSTEM_EVENTS.GAME_SEQUENCE_FINISH, true);\n return result;\n })\n .catch(err => {\n this._sequenceInProgress = false;\n Event.fire(SYSTEM_EVENTS.GAME_SEQUENCE_FINISH, false);\n this.reThrowError('94', 'Game sequence failed!', err, {gameOptions});\n });\n }\n catch(err) {\n this._sequenceInProgress = false;\n Event.fire(SYSTEM_EVENTS.GAME_SEQUENCE_FINISH, false);\n this.reThrowError('100', 'Game sequence failed!', err, {gameOptions});\n }\n }\n}\n","import Event from '../../utils/event';\nimport DOM from '../../utils/dom';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport {PRIORITY_LEVEL} from '../../services/overlay_manager/overlay_manager_levels';\nimport {TYPES} from '../../services/overlay_manager/overlay_manager_types';\nimport BaseComponent from \"../../base/base_component\";\n\nexport default class LoadingIndicator extends BaseComponent {\n static CLASS = 'LoadingIndicator';\n\n _isShowingHimself = false;\n _isClosingHimself = false;\n _loader = null;\n _loaderWrapper = null;\n\n showLoadingIndicator() {\n this._loaderWrapper = DOM.$$('
');\n this._loader = DOM.$$('
');\n\n DOM.addClass(this._loaderWrapper, ['cgp-loader']);\n this.addChildrenElements();\n DOM.append(this._loaderWrapper, this._loader);\n\n this._isShowingHimself = true;\n try {\n Event.fire(SYSTEM_EVENTS.OPEN_OVERLAY, {\n el: this._loaderWrapper,\n type: TYPES.FULL_SCREEN,\n priority: PRIORITY_LEVEL.GAME_LOADING_INDICATOR,\n additionalClasses: ['cgp-overlay-gamewindow'],\n isCloseBtnAllowed: false\n });\n }\n finally {\n this._isShowingHimself = false;\n }\n\n\n this.onSystemEvent([SYSTEM_EVENTS.OPEN_OVERLAY, SYSTEM_EVENTS.LOGIN_FORM_OPEN, SYSTEM_EVENTS.LOCATION_POPUP_OPEN], this._onOtherOverlayOpen);\n this.onSystemEvent([SYSTEM_EVENTS.CLOSE_OVERLAY, SYSTEM_EVENTS.LOGIN_FORM_CLOSE, SYSTEM_EVENTS.LOCATION_POPUP_CLOSED], this._onOtherOverlayClose);\n }\n\n addChildrenElements() {\n DOM.addClass(this._loader, 'cgp-loading');\n }\n\n closeLoadingIndicator() {\n this._isClosingHimself = true;\n try {\n Event.fire(SYSTEM_EVENTS.CLOSE_OVERLAY, {priority: PRIORITY_LEVEL.GAME_LOADING_INDICATOR});\n }\n finally {\n this._isClosingHimself = false;\n }\n }\n\n _otherOverlaysOpenCount = 0;\n\n _onOtherOverlayOpen(data) {\n if (this._isShowingHimself) {\n return;\n }\n this._otherOverlaysOpenCount++;\n this.closeLoadingIndicator();\n\n if(data?.priority === PRIORITY_LEVEL.GAME_FRAME) {\n this.shutDown();\n }\n }\n\n _onOtherOverlayClose() {\n if (this._isClosingHimself) {\n return;\n }\n this._otherOverlaysOpenCount--;\n if (this._otherOverlaysOpenCount === 0) {\n this.showLoadingIndicator();\n }\n }\n}","import LoadingIndicator from './loading_indicator';\nimport Event from '../../utils/event';\nimport DOM from '../../utils/dom';\nimport {SYSTEM_EVENTS} from '../../events/events';\nimport {ON_DEMAND} from \"../../services/hybrid/native/native_const\";\nimport _ from '../../utils/underscore';\n\n\nexport default class LoadingIndicatorEmbedded extends LoadingIndicator {\n static CLASS = 'LoadingIndicatorEmbedded';\n\n _toasterIndicatorTimeoutInSeconds = 15;\n _minPercentForIndicatorToater = 10;\n _progressWrap = null;\n _progressPercent = null;\n _circleBg = null;\n _circlebginner = null;\n _circlebgouter = null;\n _canvas = null;\n _closeButton = null;\n _nLineWidth = 6;\n _percent = 0;\n _numberOfPackagesElem= null;\n _toasterIndicatorTimeout = null;\n _packageNumber = 1;\n\n showLoadingIndicator() {\n this.onSystemEvent([SYSTEM_EVENTS.LOADING_INDICATOR_EMBEDDED_UPDATE, SYSTEM_EVENTS.LOADING_INDICATOR_EMBEDDED_UPDATE_V2], this._onUpdateProgressBar);\n super.showLoadingIndicator();\n this._startToasterIndicatorTimeout();\n const analyticsData = {\n category: ON_DEMAND.ON_DEMAND_CATEGORY,\n action: \"show_hybrid_loader\"\n };\n\n this._sendAnalytics(analyticsData);\n }\n\n _showToaster(){\n this.serviceFactory.toasterService().showToasterNotification({\n MessageID: 'loading_indication_message',\n Type: 'timed_toaster',\n Title: this.serviceFactory.languageService().translation('hybrid_embedded_slow_connection_toaster_title'),\n SubTitle: this.serviceFactory.languageService().translation('hybrid_embedded_slow_connection_toaster_text'),\n DurationInSec: 10\n });\n\n const analyticsData = {\n category: ON_DEMAND.ON_DEMAND_CATEGORY,\n action: \"slow_internet_toaster\",\n label: this._toasterIndicatorTimeoutInSeconds,\n value: this._percent\n };\n\n this._sendAnalytics(analyticsData);\n }\n\n _startToasterIndicatorTimeout() {\n this._toasterIndicatorTimeout = this.setTimeout(()=> {\n if(this._percent < this._minPercentForIndicatorToater) {\n this._showToaster();\n }\n }, this._toasterIndicatorTimeoutInSeconds * 1000);\n }\n\n _paintCircle() {\n this._circleBg = this.createClassWithId('circle-bg', '
', true);\n this._circlebginner = this.createClassWithId('circle-bg-inner', '
', true);\n this._circlebgouter = this.createClassWithId('circle-bg-outer', '
', true);\n this._canvas = this.createClassWithId('progress-canvas', '', true);\n this._canvas.width = 125;\n this._canvas.height = this._canvas.width;\n this._center = this._canvas.width / 2;\n this._radius = (this._canvas.width - this._nLineWidth) / 2;\n }\n\n _showPackageStatus() {\n this._numberOfPackagesElem = this.createClassWithId('packages-status', '
', false);\n DOM.append(this._loader, this._numberOfPackagesElem);\n }\n\n _clearPreviousChildrenElements() {\n if(this._progressWrap) {\n DOM.removeElement(this._loader, this._progressWrap);\n this._progressWrap = null;\n }\n if(this._numberOfPackagesElem) {\n DOM.removeElement(this._loader, this._numberOfPackagesElem);\n this._numberOfPackagesElem = null;\n }\n }\n\n addChildrenElements() {\n this._clearPreviousChildrenElements();\n\n if(this._percent === 0 && this._packageNumber === 1) {\n this._progressWrap = this.createClassWithId('loading-animation-container', '
', false);\n this.createClassWithId('loading-animation-text', '
', true, this.serviceFactory.languageService().translation('hybrid_embedded_loading_game'));\n this.createClassWithId('loading-animation', '
', true);\n } else {\n this._showPackageStatus();\n this._progressWrap = this.createClassWithId('progress-wrap', '
', false);\n this._progressPercent = this.createClassWithId('progress-percent', '', true);\n DOM.addClass(this._progressPercent,'cgp-theme-property-color-main');\n this._paintCircle();\n }\n\n this._closeButton = this.createClassWithId('button-progress', '