@maestro_io/maestro-web-sdk 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/maestro-web-sdk.esm.js +2 -2
- package/dist/maestro-web-sdk.esm.js.map +1 -1
- package/dist/maestro-web-sdk.umd.js +2 -2
- package/dist/maestro-web-sdk.umd.js.map +1 -1
- package/dist/package.json +92 -0
- package/dist/src/components/atoms/BaseButton/BaseButton.d.ts +7 -0
- package/dist/src/components/atoms/BaseButton/BaseButton.js +11 -0
- package/dist/src/components/atoms/BaseButton/index.d.ts +2 -0
- package/dist/src/components/atoms/BaseButton/index.js +2 -0
- package/dist/src/components/atoms/Image/index.d.ts +13 -0
- package/dist/src/components/atoms/Image/index.js +34 -0
- package/dist/src/components/atoms/Rive/index.d.ts +219 -0
- package/dist/src/components/atoms/Rive/index.js +53 -0
- package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.d.ts +3 -0
- package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.js +9 -0
- package/dist/src/components/atoms/SvgIcon/BetsIcon.d.ts +3 -0
- package/dist/src/components/atoms/SvgIcon/BetsIcon.js +8 -0
- package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.d.ts +7 -0
- package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.js +11 -0
- package/dist/src/components/atoms/SvgIcon/ChatIcon.d.ts +3 -0
- package/dist/src/components/atoms/SvgIcon/ChatIcon.js +6 -0
- package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.d.ts +3 -0
- package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.js +6 -0
- package/dist/src/components/atoms/SvgIcon/CollapseIcon.d.ts +3 -0
- package/dist/src/components/atoms/SvgIcon/CollapseIcon.js +6 -0
- package/dist/src/components/atoms/SvgIcon/ExpandIcon.d.ts +3 -0
- package/dist/src/components/atoms/SvgIcon/ExpandIcon.js +6 -0
- package/dist/src/components/atoms/SvgIcon/FantasyIcon.d.ts +7 -0
- package/dist/src/components/atoms/SvgIcon/FantasyIcon.js +15 -0
- package/dist/src/components/atoms/SvgIcon/FlameIcon.d.ts +7 -0
- package/dist/src/components/atoms/SvgIcon/FlameIcon.js +11 -0
- package/dist/src/components/atoms/SvgIcon/HelloWorldIcon.d.ts +3 -0
- package/dist/src/components/atoms/SvgIcon/HelloWorldIcon.js +6 -0
- package/dist/src/components/atoms/SvgIcon/Icon.d.ts +39 -0
- package/dist/src/components/atoms/SvgIcon/Icon.js +44 -0
- package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.d.ts +6 -0
- package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.js +10 -0
- package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.d.ts +7 -0
- package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.js +11 -0
- package/dist/src/components/atoms/SvgIcon/PlayIcon.d.ts +6 -0
- package/dist/src/components/atoms/SvgIcon/PlayIcon.js +8 -0
- package/dist/src/components/atoms/SvgIcon/ShopIcon.d.ts +5 -0
- package/dist/src/components/atoms/SvgIcon/ShopIcon.js +7 -0
- package/dist/src/components/atoms/SvgIcon/ShopifyIcon.d.ts +3 -0
- package/dist/src/components/atoms/SvgIcon/ShopifyIcon.js +6 -0
- package/dist/src/components/atoms/SvgIcon/StatsIcon.d.ts +6 -0
- package/dist/src/components/atoms/SvgIcon/StatsIcon.js +12 -0
- package/dist/src/components/atoms/SvgIcon/TimesIcon.d.ts +3 -0
- package/dist/src/components/atoms/SvgIcon/TimesIcon.js +6 -0
- package/dist/src/components/atoms/SvgIcon/WarningIcon.d.ts +6 -0
- package/dist/src/components/atoms/SvgIcon/WarningIcon.js +8 -0
- package/dist/src/components/atoms/SvgIcon/index.d.ts +2 -0
- package/dist/src/components/atoms/SvgIcon/index.js +2 -0
- package/dist/src/components/core/App/App.d.ts +11 -0
- package/dist/src/components/core/App/App.js +35 -0
- package/dist/src/components/core/App/index.d.ts +2 -0
- package/dist/src/components/core/App/index.js +2 -0
- package/dist/src/components/core/PanelManager/PanelManager.d.ts +21 -0
- package/dist/src/components/core/PanelManager/PanelManager.js +86 -0
- package/dist/src/components/core/PanelManager/index.d.ts +2 -0
- package/dist/src/components/core/PanelManager/index.js +2 -0
- package/dist/src/components/core/ScrollableContainer/FocusableItem.d.ts +6 -0
- package/dist/src/components/core/ScrollableContainer/FocusableItem.js +38 -0
- package/dist/src/components/core/ScrollableContainer/ScrollableContainer.d.ts +78 -0
- package/dist/src/components/core/ScrollableContainer/ScrollableContainer.js +169 -0
- package/dist/src/components/core/ScrollableContainer/index.d.ts +2 -0
- package/dist/src/components/core/ScrollableContainer/index.js +2 -0
- package/dist/src/components/molecules/ActionButton/ActionButton.d.ts +94 -0
- package/dist/src/components/molecules/ActionButton/ActionButton.js +10 -0
- package/dist/src/components/molecules/ActionButton/index.d.ts +2 -0
- package/dist/src/components/molecules/ActionButton/index.js +2 -0
- package/dist/src/components/molecules/HeadshotImage/HeadshotImage.d.ts +16 -0
- package/dist/src/components/molecules/HeadshotImage/HeadshotImage.js +50 -0
- package/dist/src/components/molecules/HeadshotImage/index.d.ts +2 -0
- package/dist/src/components/molecules/HeadshotImage/index.js +2 -0
- package/dist/src/components/molecules/Overlay/Overlay.d.ts +34 -0
- package/dist/src/components/molecules/Overlay/Overlay.js +139 -0
- package/dist/src/components/molecules/Overlay/index.d.ts +2 -0
- package/dist/src/components/molecules/Overlay/index.js +2 -0
- package/dist/src/components/molecules/PanelNavButton/PanelNavButton.d.ts +104 -0
- package/dist/src/components/molecules/PanelNavButton/PanelNavButton.js +27 -0
- package/dist/src/components/molecules/PanelNavButton/index.d.ts +2 -0
- package/dist/src/components/molecules/PanelNavButton/index.js +2 -0
- package/dist/src/components/molecules/SegmentButton/SegmentButton.d.ts +9 -0
- package/dist/src/components/molecules/SegmentButton/SegmentButton.js +10 -0
- package/dist/src/components/molecules/SegmentButton/index.d.ts +2 -0
- package/dist/src/components/molecules/SegmentButton/index.js +2 -0
- package/dist/src/components/molecules/TabLoadError/TabLoadError.d.ts +94 -0
- package/dist/src/components/molecules/TabLoadError/TabLoadError.js +14 -0
- package/dist/src/components/molecules/TabLoadError/index.d.ts +2 -0
- package/dist/src/components/molecules/TabLoadError/index.js +2 -0
- package/dist/src/components/molecules/WatchButton/WatchButton.d.ts +10 -0
- package/dist/src/components/molecules/WatchButton/WatchButton.js +15 -0
- package/dist/src/components/molecules/WatchButton/index.d.ts +2 -0
- package/dist/src/components/molecules/WatchButton/index.js +2 -0
- package/dist/src/components/organisms/PanelNavigation/PanelNavigation.d.ts +16 -0
- package/dist/src/components/organisms/PanelNavigation/PanelNavigation.js +60 -0
- package/dist/src/components/organisms/PanelNavigation/index.d.ts +2 -0
- package/dist/src/components/organisms/PanelNavigation/index.js +2 -0
- package/dist/src/components/organisms/SegmentController/SegmentController.d.ts +30 -0
- package/dist/src/components/organisms/SegmentController/SegmentController.js +76 -0
- package/dist/src/components/organisms/SegmentController/index.d.ts +3 -0
- package/dist/src/components/organisms/SegmentController/index.js +2 -0
- package/dist/src/development/MaestroEventDelegate.d.ts +27 -0
- package/dist/src/development/MaestroEventDelegate.js +109 -0
- package/dist/src/development/TimeSeek.d.ts +22 -0
- package/dist/src/development/TimeSeek.js +218 -0
- package/dist/src/development/development.d.ts +1 -0
- package/dist/src/development/development.js +36 -0
- package/dist/src/external/AxiosNetworkClient.d.ts +28 -0
- package/dist/src/external/AxiosNetworkClient.js +110 -0
- package/dist/src/external/LocalStorageCacheManager.d.ts +65 -0
- package/dist/src/external/LocalStorageCacheManager.js +213 -0
- package/dist/src/external/ReactRenderer.d.ts +17 -0
- package/dist/src/external/ReactRenderer.js +65 -0
- package/dist/src/external/mocks/MockExternalNetworkClient.d.ts +104 -0
- package/dist/src/external/mocks/MockExternalNetworkClient.js +187 -0
- package/dist/src/external/ports/cacheManager.d.ts +17 -0
- package/dist/src/external/ports/cacheManager.js +1 -0
- package/dist/src/external/ports/networkClient.d.ts +19 -0
- package/dist/src/external/ports/networkClient.js +1 -0
- package/dist/src/external/ports/renderer.d.ts +4 -0
- package/dist/src/external/ports/renderer.js +1 -0
- package/dist/src/external/spatial-navigation/__mocks__/withFocusable.d.ts +8 -0
- package/dist/src/external/spatial-navigation/__mocks__/withFocusable.js +7 -0
- package/dist/src/external/spatial-navigation/index.d.ts +4 -0
- package/dist/src/external/spatial-navigation/index.js +3 -0
- package/dist/src/external/spatial-navigation/measureLayout.d.ts +2 -0
- package/dist/src/external/spatial-navigation/measureLayout.js +30 -0
- package/dist/src/external/spatial-navigation/spatialNavigation.d.ts +155 -0
- package/dist/src/external/spatial-navigation/spatialNavigation.js +876 -0
- package/dist/src/external/spatial-navigation/utils.d.ts +20 -0
- package/dist/src/external/spatial-navigation/utils.js +6 -0
- package/dist/src/external/spatial-navigation/visualDebugger.d.ts +17 -0
- package/dist/src/external/spatial-navigation/visualDebugger.js +76 -0
- package/dist/src/external/spatial-navigation/withFocusable.d.ts +123 -0
- package/dist/src/external/spatial-navigation/withFocusable.js +245 -0
- package/dist/src/helpers/Observable.d.ts +12 -0
- package/dist/src/helpers/Observable.js +37 -0
- package/dist/src/helpers/strings.d.ts +2 -0
- package/dist/src/helpers/strings.js +14 -0
- package/dist/src/helpers/url.d.ts +1 -0
- package/dist/src/helpers/url.js +12 -0
- package/dist/src/index.d.ts +54 -0
- package/dist/src/index.js +165 -0
- package/dist/src/interfaces/IMaestroEvent.d.ts +126 -0
- package/dist/src/interfaces/IMaestroEvent.js +18 -0
- package/dist/src/interfaces/IMaestroEventDelegate.d.ts +74 -0
- package/dist/src/interfaces/IMaestroEventDelegate.js +1 -0
- package/dist/src/interfaces/IMaestroManager.d.ts +45 -0
- package/dist/src/interfaces/IMaestroManager.js +1 -0
- package/dist/src/interfaces/IUserSettings.d.ts +44 -0
- package/dist/src/interfaces/IUserSettings.js +20 -0
- package/dist/src/models/IModel.d.ts +7 -0
- package/dist/src/models/IModel.js +1 -0
- package/dist/src/models/IPanel.d.ts +15 -0
- package/dist/src/models/IPanel.js +40 -0
- package/dist/src/models/ITheme.d.ts +77 -0
- package/dist/src/models/ITheme.js +20 -0
- package/dist/src/models/IWinningBet.d.ts +7 -0
- package/dist/src/models/IWinningBet.js +1 -0
- package/dist/src/modules/bets/interfaces/IBets.d.ts +192 -0
- package/dist/src/modules/bets/interfaces/IBets.js +1 -0
- package/dist/src/modules/bets/mocks.d.ts +2 -0
- package/dist/src/modules/bets/mocks.js +573 -0
- package/dist/src/modules/bets/types/BetsAnalyticsTypes.d.ts +8 -0
- package/dist/src/modules/bets/types/BetsAnalyticsTypes.js +1 -0
- package/dist/src/modules/bets/view/BetsView.d.ts +28 -0
- package/dist/src/modules/bets/view/BetsView.js +143 -0
- package/dist/src/modules/bets/view/HotProps/HotPropsView.d.ts +100 -0
- package/dist/src/modules/bets/view/HotProps/HotPropsView.js +150 -0
- package/dist/src/modules/bets/view/SixPack/SixPackView.d.ts +23 -0
- package/dist/src/modules/bets/view/SixPack/SixPackView.js +110 -0
- package/dist/src/modules/bets/view/UserBets/BetResult/BetResult.d.ts +6 -0
- package/dist/src/modules/bets/view/UserBets/BetResult/BetResult.js +6 -0
- package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCard.d.ts +101 -0
- package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCard.js +149 -0
- package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.d.ts +26 -0
- package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.js +34 -0
- package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardFooter.d.ts +7 -0
- package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardFooter.js +18 -0
- package/dist/src/modules/bets/view/UserBets/Boost/Boost.d.ts +7 -0
- package/dist/src/modules/bets/view/UserBets/Boost/Boost.js +6 -0
- package/dist/src/modules/bets/view/UserBets/OutcomeBadge/OutcomeBadge.d.ts +6 -0
- package/dist/src/modules/bets/view/UserBets/OutcomeBadge/OutcomeBadge.js +9 -0
- package/dist/src/modules/bets/view/UserBets/Parlay/Parlay.d.ts +8 -0
- package/dist/src/modules/bets/view/UserBets/Parlay/Parlay.js +13 -0
- package/dist/src/modules/bets/view/UserBets/Straight/Straight.d.ts +7 -0
- package/dist/src/modules/bets/view/UserBets/Straight/Straight.js +6 -0
- package/dist/src/modules/bets/view/UserBets/Teaser/Teaser.d.ts +7 -0
- package/dist/src/modules/bets/view/UserBets/Teaser/Teaser.js +13 -0
- package/dist/src/modules/bets/view/UserBets/UserBetsView.d.ts +25 -0
- package/dist/src/modules/bets/view/UserBets/UserBetsView.js +107 -0
- package/dist/src/modules/bets/view/components/Bet/Bet.d.ts +158 -0
- package/dist/src/modules/bets/view/components/Bet/Bet.js +32 -0
- package/dist/src/modules/bets/view/components/BetPill/BetPill.d.ts +6 -0
- package/dist/src/modules/bets/view/components/BetPill/BetPill.js +6 -0
- package/dist/src/modules/bets/view/components/BetsCard/BetsCard.d.ts +10 -0
- package/dist/src/modules/bets/view/components/BetsCard/BetsCard.js +15 -0
- package/dist/src/modules/bets/view/components/BetsCard/BetsCardHeader.d.ts +16 -0
- package/dist/src/modules/bets/view/components/BetsCard/BetsCardHeader.js +20 -0
- package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.d.ts +8 -0
- package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.js +14 -0
- package/dist/src/modules/bets/view/components/LocationWarning/LocationWarning.d.ts +10 -0
- package/dist/src/modules/bets/view/components/LocationWarning/LocationWarning.js +16 -0
- package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.d.ts +18 -0
- package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.js +78 -0
- package/dist/src/modules/bets/view/components/PromoCodeBanner/index.d.ts +1 -0
- package/dist/src/modules/bets/view/components/PromoCodeBanner/index.js +1 -0
- package/dist/src/modules/bets/view-model/BetsViewModel.d.ts +219 -0
- package/dist/src/modules/bets/view-model/BetsViewModel.js +974 -0
- package/dist/src/modules/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.d.ts +28 -0
- package/dist/src/modules/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.js +107 -0
- package/dist/src/modules/fantasy/components/ExpandedAthleteList/index.d.ts +1 -0
- package/dist/src/modules/fantasy/components/ExpandedAthleteList/index.js +1 -0
- package/dist/src/modules/fantasy/components/LeagueCard/LeagueCard.d.ts +102 -0
- package/dist/src/modules/fantasy/components/LeagueCard/LeagueCard.js +20 -0
- package/dist/src/modules/fantasy/components/LeagueCard/index.d.ts +2 -0
- package/dist/src/modules/fantasy/components/LeagueCard/index.js +2 -0
- package/dist/src/modules/fantasy/components/TopPlayerCard/TopPlayerCard.d.ts +99 -0
- package/dist/src/modules/fantasy/components/TopPlayerCard/TopPlayerCard.js +29 -0
- package/dist/src/modules/fantasy/components/TopPlayerCard/index.d.ts +2 -0
- package/dist/src/modules/fantasy/components/TopPlayerCard/index.js +2 -0
- package/dist/src/modules/fantasy/mocks.d.ts +7620 -0
- package/dist/src/modules/fantasy/mocks.js +3682 -0
- package/dist/src/modules/fantasy/types.d.ts +176 -0
- package/dist/src/modules/fantasy/types.js +6 -0
- package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.d.ts +21 -0
- package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.js +74 -0
- package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/index.d.ts +2 -0
- package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/index.js +2 -0
- package/dist/src/modules/fantasy/view/FantasyItemView.d.ts +22 -0
- package/dist/src/modules/fantasy/view/FantasyItemView.js +74 -0
- package/dist/src/modules/fantasy/view/FantasyView.d.ts +27 -0
- package/dist/src/modules/fantasy/view/FantasyView.js +133 -0
- package/dist/src/modules/fantasy/view/InactiveLeague/DraftDateCountdown.d.ts +23 -0
- package/dist/src/modules/fantasy/view/InactiveLeague/DraftDateCountdown.js +95 -0
- package/dist/src/modules/fantasy/view/InactiveLeague/InactiveLeague.d.ts +98 -0
- package/dist/src/modules/fantasy/view/InactiveLeague/InactiveLeague.js +13 -0
- package/dist/src/modules/fantasy/view/InactiveLeague/index.d.ts +2 -0
- package/dist/src/modules/fantasy/view/InactiveLeague/index.js +2 -0
- package/dist/src/modules/fantasy/view/LoginView/LoginView.d.ts +94 -0
- package/dist/src/modules/fantasy/view/LoginView/LoginView.js +27 -0
- package/dist/src/modules/fantasy/view/LoginView/index.d.ts +2 -0
- package/dist/src/modules/fantasy/view/LoginView/index.js +2 -0
- package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.d.ts +95 -0
- package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.js +25 -0
- package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/index.d.ts +2 -0
- package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/index.js +2 -0
- package/dist/src/modules/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.d.ts +14 -0
- package/dist/src/modules/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.js +9 -0
- package/dist/src/modules/fantasy/view/MatchupPair/MatchupPair.d.ts +100 -0
- package/dist/src/modules/fantasy/view/MatchupPair/MatchupPair.js +118 -0
- package/dist/src/modules/fantasy/view/MatchupPair/index.d.ts +2 -0
- package/dist/src/modules/fantasy/view/MatchupPair/index.js +2 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.d.ts +14 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.js +9 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/MatchupSingle.d.ts +100 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/MatchupSingle.js +108 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.d.ts +95 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.js +18 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/index.d.ts +2 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/index.js +2 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/index.d.ts +2 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/index.js +2 -0
- package/dist/src/modules/fantasy/view/PromoView/PromoView.d.ts +98 -0
- package/dist/src/modules/fantasy/view/PromoView/PromoView.js +12 -0
- package/dist/src/modules/fantasy/view/PromoView/index.d.ts +2 -0
- package/dist/src/modules/fantasy/view/PromoView/index.js +2 -0
- package/dist/src/modules/fantasy/view/index.d.ts +2 -0
- package/dist/src/modules/fantasy/view/index.js +2 -0
- package/dist/src/modules/fantasy/view-model/FantasyViewModel.FantasyPolling.d.ts +32 -0
- package/dist/src/modules/fantasy/view-model/FantasyViewModel.FantasyPolling.js +132 -0
- package/dist/src/modules/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.d.ts +32 -0
- package/dist/src/modules/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.js +141 -0
- package/dist/src/modules/fantasy/view-model/FantasyViewModel.d.ts +148 -0
- package/dist/src/modules/fantasy/view-model/FantasyViewModel.js +534 -0
- package/dist/src/modules/hello-world/HelloWorldImage.d.ts +2 -0
- package/dist/src/modules/hello-world/HelloWorldImage.js +32 -0
- package/dist/src/modules/hello-world/HelloWorldView.d.ts +11 -0
- package/dist/src/modules/hello-world/HelloWorldView.js +34 -0
- package/dist/src/modules/hello-world/index.d.ts +2 -0
- package/dist/src/modules/hello-world/index.js +2 -0
- package/dist/src/modules/key-plays/constants.d.ts +3 -0
- package/dist/src/modules/key-plays/constants.js +292 -0
- package/dist/src/modules/key-plays/interfaces/IKeyPlays.d.ts +32 -0
- package/dist/src/modules/key-plays/interfaces/IKeyPlays.js +14 -0
- package/dist/src/modules/key-plays/interfaces/IKeyPlaysResponse.d.ts +44 -0
- package/dist/src/modules/key-plays/interfaces/IKeyPlaysResponse.js +1 -0
- package/dist/src/modules/key-plays/view/KeyPlayCardScoreTagView.d.ts +9 -0
- package/dist/src/modules/key-plays/view/KeyPlayCardScoreTagView.js +16 -0
- package/dist/src/modules/key-plays/view/KeyPlayCardView.d.ts +39 -0
- package/dist/src/modules/key-plays/view/KeyPlayCardView.js +139 -0
- package/dist/src/modules/key-plays/view/KeyPlayErrorStateView.d.ts +13 -0
- package/dist/src/modules/key-plays/view/KeyPlayErrorStateView.js +65 -0
- package/dist/src/modules/key-plays/view/KeyPlaysView.d.ts +37 -0
- package/dist/src/modules/key-plays/view/KeyPlaysView.js +151 -0
- package/dist/src/modules/key-plays/view-model/KeyPlaysViewModel.d.ts +37 -0
- package/dist/src/modules/key-plays/view-model/KeyPlaysViewModel.js +246 -0
- package/dist/src/modules/shop/mocks.d.ts +22 -0
- package/dist/src/modules/shop/mocks.js +391 -0
- package/dist/src/modules/shop/types.d.ts +161 -0
- package/dist/src/modules/shop/types.js +7 -0
- package/dist/src/modules/shop/view/ProductDetailView/ProductDetailView.d.ts +9 -0
- package/dist/src/modules/shop/view/ProductDetailView/ProductDetailView.js +60 -0
- package/dist/src/modules/shop/view/ProductDetailView/index.d.ts +2 -0
- package/dist/src/modules/shop/view/ProductDetailView/index.js +2 -0
- package/dist/src/modules/shop/view/ShopView.d.ts +35 -0
- package/dist/src/modules/shop/view/ShopView.js +182 -0
- package/dist/src/modules/shop/view/components/BrowseCard/BrowseCard.d.ts +101 -0
- package/dist/src/modules/shop/view/components/BrowseCard/BrowseCard.js +23 -0
- package/dist/src/modules/shop/view/components/BrowseCard/index.d.ts +2 -0
- package/dist/src/modules/shop/view/components/BrowseCard/index.js +2 -0
- package/dist/src/modules/shop/view/components/ProductSummaryCard/ProductSummaryCard.d.ts +102 -0
- package/dist/src/modules/shop/view/components/ProductSummaryCard/ProductSummaryCard.js +26 -0
- package/dist/src/modules/shop/view/components/ProductSummaryCard/index.d.ts +2 -0
- package/dist/src/modules/shop/view/components/ProductSummaryCard/index.js +1 -0
- package/dist/src/modules/shop/view/components/ShopPromoView/ShopPromoView.d.ts +8 -0
- package/dist/src/modules/shop/view/components/ShopPromoView/ShopPromoView.js +19 -0
- package/dist/src/modules/shop/view/components/ShopPromoView/index.d.ts +1 -0
- package/dist/src/modules/shop/view/components/ShopPromoView/index.js +1 -0
- package/dist/src/modules/shop/view/components/ShopSection/ShopSection.d.ts +23 -0
- package/dist/src/modules/shop/view/components/ShopSection/ShopSection.js +61 -0
- package/dist/src/modules/shop/view/components/ShopSection/index.d.ts +1 -0
- package/dist/src/modules/shop/view/components/ShopSection/index.js +1 -0
- package/dist/src/modules/shop/view/index.d.ts +2 -0
- package/dist/src/modules/shop/view/index.js +2 -0
- package/dist/src/modules/shop/view-model/ShopViewModel.ShopPolling.d.ts +31 -0
- package/dist/src/modules/shop/view-model/ShopViewModel.ShopPolling.js +111 -0
- package/dist/src/modules/shop/view-model/ShopViewModel.d.ts +77 -0
- package/dist/src/modules/shop/view-model/ShopViewModel.js +357 -0
- package/dist/src/modules/stats/interfaces/IStats.d.ts +226 -0
- package/dist/src/modules/stats/interfaces/IStats.js +1 -0
- package/dist/src/modules/stats/mocks.d.ts +2 -0
- package/dist/src/modules/stats/mocks.js +746 -0
- package/dist/src/modules/stats/utils/driveSummaryUtils.d.ts +18 -0
- package/dist/src/modules/stats/utils/driveSummaryUtils.js +48 -0
- package/dist/src/modules/stats/utils/renderTeamStatistic.d.ts +20 -0
- package/dist/src/modules/stats/utils/renderTeamStatistic.js +16 -0
- package/dist/src/modules/stats/utils.d.ts +39 -0
- package/dist/src/modules/stats/utils.js +62 -0
- package/dist/src/modules/stats/view/ActiveAthletes/ActiveAthletes.d.ts +22 -0
- package/dist/src/modules/stats/view/ActiveAthletes/ActiveAthletes.js +98 -0
- package/dist/src/modules/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.d.ts +4 -0
- package/dist/src/modules/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.js +27 -0
- package/dist/src/modules/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.d.ts +22 -0
- package/dist/src/modules/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.js +89 -0
- package/dist/src/modules/stats/view/ActiveAthletes/index.d.ts +2 -0
- package/dist/src/modules/stats/view/ActiveAthletes/index.js +2 -0
- package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.d.ts +106 -0
- package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.js +70 -0
- package/dist/src/modules/stats/view/DriveSummary/DriveSummary.d.ts +17 -0
- package/dist/src/modules/stats/view/DriveSummary/DriveSummary.js +87 -0
- package/dist/src/modules/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.d.ts +27 -0
- package/dist/src/modules/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.js +129 -0
- package/dist/src/modules/stats/view/DriveSummary/Header/DriveSummaryHeader.d.ts +12 -0
- package/dist/src/modules/stats/view/DriveSummary/Header/DriveSummaryHeader.js +26 -0
- package/dist/src/modules/stats/view/DriveSummary/MainStat/MainStat.d.ts +10 -0
- package/dist/src/modules/stats/view/DriveSummary/MainStat/MainStat.js +24 -0
- package/dist/src/modules/stats/view/DriveSummary/index.d.ts +2 -0
- package/dist/src/modules/stats/view/DriveSummary/index.js +2 -0
- package/dist/src/modules/stats/view/GameLeaders/GameLeaders.d.ts +21 -0
- package/dist/src/modules/stats/view/GameLeaders/GameLeaders.js +48 -0
- package/dist/src/modules/stats/view/GameLeaders/index.d.ts +2 -0
- package/dist/src/modules/stats/view/GameLeaders/index.js +2 -0
- package/dist/src/modules/stats/view/MatchPredictor/DonutChart/DonutChart.d.ts +17 -0
- package/dist/src/modules/stats/view/MatchPredictor/DonutChart/DonutChart.js +55 -0
- package/dist/src/modules/stats/view/MatchPredictor/DonutChart/index.d.ts +2 -0
- package/dist/src/modules/stats/view/MatchPredictor/DonutChart/index.js +1 -0
- package/dist/src/modules/stats/view/MatchPredictor/MatchPredictorView.d.ts +98 -0
- package/dist/src/modules/stats/view/MatchPredictor/MatchPredictorView.js +60 -0
- package/dist/src/modules/stats/view/MatchPredictor/index.d.ts +3 -0
- package/dist/src/modules/stats/view/MatchPredictor/index.js +2 -0
- package/dist/src/modules/stats/view/Penalties/Penalties.d.ts +9 -0
- package/dist/src/modules/stats/view/Penalties/Penalties.js +6 -0
- package/dist/src/modules/stats/view/Penalties/index.d.ts +2 -0
- package/dist/src/modules/stats/view/Penalties/index.js +2 -0
- package/dist/src/modules/stats/view/PlayerSeasonStats/ExpandedPlayerStats.d.ts +16 -0
- package/dist/src/modules/stats/view/PlayerSeasonStats/ExpandedPlayerStats.js +66 -0
- package/dist/src/modules/stats/view/PlayerSeasonStats/PlayerSeasonStatsCard.d.ts +97 -0
- package/dist/src/modules/stats/view/PlayerSeasonStats/PlayerSeasonStatsCard.js +23 -0
- package/dist/src/modules/stats/view/PlayerSeasonStats/PlayerSeasonStatsMinified.d.ts +6 -0
- package/dist/src/modules/stats/view/PlayerSeasonStats/PlayerSeasonStatsMinified.js +13 -0
- package/dist/src/modules/stats/view/PlayerSeasonStats/PlayerSeasonStatsView.d.ts +8 -0
- package/dist/src/modules/stats/view/PlayerSeasonStats/PlayerSeasonStatsView.js +148 -0
- package/dist/src/modules/stats/view/PlayerSeasonStats/index.d.ts +1 -0
- package/dist/src/modules/stats/view/PlayerSeasonStats/index.js +1 -0
- package/dist/src/modules/stats/view/RecentGames/RecentGames.d.ts +98 -0
- package/dist/src/modules/stats/view/RecentGames/RecentGames.js +23 -0
- package/dist/src/modules/stats/view/RecentGames/index.d.ts +2 -0
- package/dist/src/modules/stats/view/RecentGames/index.js +2 -0
- package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.d.ts +30 -0
- package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.js +123 -0
- package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/index.d.ts +2 -0
- package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/index.js +2 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/ScoreItem.d.ts +98 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/ScoreItem.js +62 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/index.d.ts +2 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/index.js +2 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/ScoresSection.d.ts +6 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/ScoresSection.js +23 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/index.d.ts +2 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/index.js +2 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.d.ts +29 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.js +125 -0
- package/dist/src/modules/stats/view/ScoringSummary/index.d.ts +2 -0
- package/dist/src/modules/stats/view/ScoringSummary/index.js +2 -0
- package/dist/src/modules/stats/view/StatsItemView.d.ts +22 -0
- package/dist/src/modules/stats/view/StatsItemView.js +92 -0
- package/dist/src/modules/stats/view/StatsQRCode/StatsQRCodeView.d.ts +98 -0
- package/dist/src/modules/stats/view/StatsQRCode/StatsQRCodeView.js +36 -0
- package/dist/src/modules/stats/view/StatsQRCode/index.d.ts +2 -0
- package/dist/src/modules/stats/view/StatsQRCode/index.js +1 -0
- package/dist/src/modules/stats/view/StatsView.d.ts +27 -0
- package/dist/src/modules/stats/view/StatsView.js +137 -0
- package/dist/src/modules/stats/view/TeamStats/TeamStatsView.d.ts +98 -0
- package/dist/src/modules/stats/view/TeamStats/TeamStatsView.js +43 -0
- package/dist/src/modules/stats/view/TeamStats/index.d.ts +2 -0
- package/dist/src/modules/stats/view/TeamStats/index.js +1 -0
- package/dist/src/modules/stats/view/Teams/StatsCarousel.d.ts +25 -0
- package/dist/src/modules/stats/view/Teams/StatsCarousel.js +83 -0
- package/dist/src/modules/stats/view/Teams/StatsProgressBar.d.ts +6 -0
- package/dist/src/modules/stats/view/Teams/StatsProgressBar.js +19 -0
- package/dist/src/modules/stats/view/Teams/Teams.d.ts +98 -0
- package/dist/src/modules/stats/view/Teams/Teams.js +43 -0
- package/dist/src/modules/stats/view/Teams/index.d.ts +2 -0
- package/dist/src/modules/stats/view/Teams/index.js +2 -0
- package/dist/src/modules/stats/view/WinProbability/WinProbability.d.ts +98 -0
- package/dist/src/modules/stats/view/WinProbability/WinProbability.js +28 -0
- package/dist/src/modules/stats/view/WinProbability/index.d.ts +2 -0
- package/dist/src/modules/stats/view/WinProbability/index.js +2 -0
- package/dist/src/modules/stats/view/components/AthletesStatistics/AthletesStatistics.d.ts +113 -0
- package/dist/src/modules/stats/view/components/AthletesStatistics/AthletesStatistics.js +89 -0
- package/dist/src/modules/stats/view/components/AthletesStatistics/StatisticTable.d.ts +3 -0
- package/dist/src/modules/stats/view/components/AthletesStatistics/StatisticTable.js +12 -0
- package/dist/src/modules/stats/view/components/AthletesStatistics/index.d.ts +2 -0
- package/dist/src/modules/stats/view/components/AthletesStatistics/index.js +2 -0
- package/dist/src/modules/stats/view/index.d.ts +2 -0
- package/dist/src/modules/stats/view/index.js +2 -0
- package/dist/src/modules/stats/view-model/StatsViewModel.d.ts +241 -0
- package/dist/src/modules/stats/view-model/StatsViewModel.js +989 -0
- package/dist/src/sentry.d.ts +3 -0
- package/dist/src/sentry.js +31 -0
- package/dist/src/services/AnalyticsService/AnalyticsService.d.ts +84 -0
- package/dist/src/services/AnalyticsService/AnalyticsService.js +404 -0
- package/dist/src/services/AnalyticsService/types.d.ts +65 -0
- package/dist/src/services/AnalyticsService/types.js +1 -0
- package/dist/src/services/BetsService.d.ts +81 -0
- package/dist/src/services/BetsService.js +122 -0
- package/dist/src/services/FantasyService.d.ts +53 -0
- package/dist/src/services/FantasyService.js +92 -0
- package/dist/src/services/InsightsService/InsightsPayloadBuilder.d.ts +279 -0
- package/dist/src/services/InsightsService/InsightsPayloadBuilder.js +386 -0
- package/dist/src/services/InsightsService/InsightsService.d.ts +11 -0
- package/dist/src/services/InsightsService/InsightsService.js +74 -0
- package/dist/src/services/NetworkManager/NetworkManager.d.ts +147 -0
- package/dist/src/services/NetworkManager/NetworkManager.js +457 -0
- package/dist/src/services/NetworkManager/NetworkManagerFactory.d.ts +42 -0
- package/dist/src/services/NetworkManager/NetworkManagerFactory.js +101 -0
- package/dist/src/services/NetworkManager/errors.d.ts +17 -0
- package/dist/src/services/NetworkManager/errors.js +45 -0
- package/dist/src/services/NetworkManager/types.d.ts +103 -0
- package/dist/src/services/NetworkManager/types.js +10 -0
- package/dist/src/services/ShopService.d.ts +23 -0
- package/dist/src/services/ShopService.js +46 -0
- package/dist/src/services/StaticService/StaticService.d.ts +12 -0
- package/dist/src/services/StaticService/StaticService.js +59 -0
- package/dist/src/services/StaticService/index.d.ts +2 -0
- package/dist/src/services/StaticService/index.js +2 -0
- package/dist/src/services/StaticService/mocks.d.ts +2 -0
- package/dist/src/services/StaticService/mocks.js +104 -0
- package/dist/src/services/StaticService/types.d.ts +76 -0
- package/dist/src/services/StaticService/types.js +1 -0
- package/dist/src/services/StatsService.d.ts +46 -0
- package/dist/src/services/StatsService.js +147 -0
- package/dist/src/services/ThemeManager/constants.d.ts +2 -0
- package/dist/src/services/ThemeManager/constants.js +47 -0
- package/dist/src/services/UserSettingsManager.d.ts +63 -0
- package/dist/src/services/UserSettingsManager.js +155 -0
- package/dist/src/test-polyfills.d.ts +1 -0
- package/dist/src/test-polyfills.js +15 -0
- package/dist/src/types/OverlayTypes.d.ts +43 -0
- package/dist/src/types/OverlayTypes.js +4 -0
- package/dist/src/view-models/MaestroEventViewModel.d.ts +63 -0
- package/dist/src/view-models/MaestroEventViewModel.js +304 -0
- package/dist/src/view-models/OverlayViewModel.d.ts +33 -0
- package/dist/src/view-models/OverlayViewModel.js +222 -0
- package/dist/src/view-models/PanelManagerViewModel.d.ts +46 -0
- package/dist/src/view-models/PanelManagerViewModel.js +212 -0
- package/dist/src/view-models/ViewModel.d.ts +12 -0
- package/dist/src/view-models/ViewModel.js +32 -0
- package/package.json +1 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service types for different NetworkManager contexts
|
|
3
|
+
*/
|
|
4
|
+
export declare const ServiceType: {
|
|
5
|
+
readonly STATS: "stats";
|
|
6
|
+
readonly BETS: "bets";
|
|
7
|
+
readonly MAESTRO: "maestro";
|
|
8
|
+
readonly FANTASY: "fantasy";
|
|
9
|
+
readonly SHOP: "shop";
|
|
10
|
+
};
|
|
11
|
+
export type ServiceType = typeof ServiceType[keyof typeof ServiceType];
|
|
12
|
+
/**
|
|
13
|
+
* Configuration for creating service-specific NetworkManager instances
|
|
14
|
+
*/
|
|
15
|
+
export interface ServiceNetworkManagerConfig {
|
|
16
|
+
serviceType: ServiceType;
|
|
17
|
+
externalBaseURL: string;
|
|
18
|
+
defaultCacheDuration?: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Base interface for all NetworkManager instances
|
|
22
|
+
*/
|
|
23
|
+
export interface IServiceNetworkManager {
|
|
24
|
+
readonly serviceType: ServiceType;
|
|
25
|
+
readonly externalBaseURL: string;
|
|
26
|
+
externalApiRequest<T = any>(options: {
|
|
27
|
+
endpoint: string;
|
|
28
|
+
method?: string;
|
|
29
|
+
params?: Record<string, any>;
|
|
30
|
+
headers?: Record<string, string>;
|
|
31
|
+
data?: any;
|
|
32
|
+
useCache?: boolean;
|
|
33
|
+
skipResponseBodyDeserialization?: boolean;
|
|
34
|
+
}): Promise<T>;
|
|
35
|
+
externalApiRequestWithHeaders<T = any>(options: {
|
|
36
|
+
endpoint: string;
|
|
37
|
+
method?: string;
|
|
38
|
+
params?: Record<string, any>;
|
|
39
|
+
headers?: Record<string, string>;
|
|
40
|
+
data?: any;
|
|
41
|
+
useCache?: boolean;
|
|
42
|
+
skipResponseBodyDeserialization?: boolean;
|
|
43
|
+
}): Promise<ResponseWithHeaders<T>>;
|
|
44
|
+
pollExternalApiRequest<T = any>(options: {
|
|
45
|
+
endpoint: string;
|
|
46
|
+
interval: number;
|
|
47
|
+
method?: string;
|
|
48
|
+
params?: Record<string, any>;
|
|
49
|
+
headers?: Record<string, string>;
|
|
50
|
+
data?: any;
|
|
51
|
+
onData: (data: T) => void;
|
|
52
|
+
onError?: (error: Error) => void;
|
|
53
|
+
}): {
|
|
54
|
+
stop: () => void;
|
|
55
|
+
};
|
|
56
|
+
pollExternalApiRequestWithHeaders<T = any>(options: {
|
|
57
|
+
endpoint: string;
|
|
58
|
+
interval: number;
|
|
59
|
+
method?: string;
|
|
60
|
+
params?: Record<string, any>;
|
|
61
|
+
headers?: Record<string, string>;
|
|
62
|
+
data?: any;
|
|
63
|
+
onData: (data: ResponseWithHeaders<T>) => void;
|
|
64
|
+
onError?: (error: Error) => void;
|
|
65
|
+
}): {
|
|
66
|
+
stop: () => void;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Stats service NetworkManager interface
|
|
71
|
+
*/
|
|
72
|
+
export interface IStatsNetworkManager extends IServiceNetworkManager {
|
|
73
|
+
serviceType: 'stats';
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Bets service NetworkManager interface
|
|
77
|
+
*/
|
|
78
|
+
export interface IBetsNetworkManager extends IServiceNetworkManager {
|
|
79
|
+
serviceType: 'bets';
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Maestro service NetworkManager interface
|
|
83
|
+
*/
|
|
84
|
+
export interface IMaestroNetworkManager extends IServiceNetworkManager {
|
|
85
|
+
serviceType: 'maestro';
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Union type for all service NetworkManager types
|
|
89
|
+
*/
|
|
90
|
+
export type ServiceNetworkManager = IStatsNetworkManager | IBetsNetworkManager | IMaestroNetworkManager;
|
|
91
|
+
/**
|
|
92
|
+
* Factory configuration for different service types
|
|
93
|
+
*/
|
|
94
|
+
export interface NetworkManagerFactoryConfig {
|
|
95
|
+
defaultCacheDuration?: number;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Interface for responses that include both data and headers
|
|
99
|
+
*/
|
|
100
|
+
export interface ResponseWithHeaders<T> {
|
|
101
|
+
data: T;
|
|
102
|
+
headers: Record<string, string>;
|
|
103
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import NetworkManager from './NetworkManager/NetworkManager';
|
|
2
|
+
import { IShopResponse } from '../modules/shop/types';
|
|
3
|
+
import { ResponseWithHeaders } from './NetworkManager/types';
|
|
4
|
+
/**
|
|
5
|
+
* Service for handling shop-related API calls
|
|
6
|
+
*/
|
|
7
|
+
declare class ShopService {
|
|
8
|
+
networkManager: NetworkManager;
|
|
9
|
+
private eventId;
|
|
10
|
+
constructor(eventId: string);
|
|
11
|
+
/**
|
|
12
|
+
* Start polling shop data
|
|
13
|
+
*
|
|
14
|
+
* @param interval - The polling interval in milliseconds
|
|
15
|
+
* @param onData - Callback for successful data fetch with headers
|
|
16
|
+
* @param onError - Callback for errors
|
|
17
|
+
* @returns Object with a stop function to stop polling
|
|
18
|
+
*/
|
|
19
|
+
pollShopData(interval: number, onData: (data: ResponseWithHeaders<IShopResponse>) => void, onError?: (error: Error) => void): {
|
|
20
|
+
stop: () => void;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export default ShopService;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { HttpMethod } from './NetworkManager/NetworkManager';
|
|
2
|
+
import NetworkManagerFactory from './NetworkManager/NetworkManagerFactory';
|
|
3
|
+
/**
|
|
4
|
+
* Service for handling shop-related API calls
|
|
5
|
+
*/
|
|
6
|
+
class ShopService {
|
|
7
|
+
constructor(eventId) {
|
|
8
|
+
Object.defineProperty(this, "networkManager", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
configurable: true,
|
|
11
|
+
writable: true,
|
|
12
|
+
value: void 0
|
|
13
|
+
});
|
|
14
|
+
Object.defineProperty(this, "eventId", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
writable: true,
|
|
18
|
+
value: void 0
|
|
19
|
+
});
|
|
20
|
+
this.eventId = eventId;
|
|
21
|
+
this.networkManager = NetworkManagerFactory.createForService({
|
|
22
|
+
externalBaseURL: 'https://site.api.espn.com',
|
|
23
|
+
serviceType: 'shop',
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Start polling shop data
|
|
28
|
+
*
|
|
29
|
+
* @param interval - The polling interval in milliseconds
|
|
30
|
+
* @param onData - Callback for successful data fetch with headers
|
|
31
|
+
* @param onError - Callback for errors
|
|
32
|
+
* @returns Object with a stop function to stop polling
|
|
33
|
+
*/
|
|
34
|
+
pollShopData(interval, onData, onError) {
|
|
35
|
+
return this.networkManager.pollExternalApiRequestWithHeaders({
|
|
36
|
+
endpoint: `/apis/site/v2/events/${this.eventId}/shop`,
|
|
37
|
+
interval,
|
|
38
|
+
method: HttpMethod.GET,
|
|
39
|
+
params: {},
|
|
40
|
+
headers: {},
|
|
41
|
+
onData,
|
|
42
|
+
onError,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export default ShopService;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Observable } from '../../helpers/Observable';
|
|
2
|
+
import { GlobalConfig, PageConfig } from './types';
|
|
3
|
+
export default class StaticService {
|
|
4
|
+
configObservable: Observable<PageConfig | null>;
|
|
5
|
+
private client;
|
|
6
|
+
constructor();
|
|
7
|
+
fetchPageConfig(siteId: string, eventId: string): Promise<PageConfig | null>;
|
|
8
|
+
static isPanelAvailable(pageConfig: PageConfig | null, panelType: string): boolean | undefined;
|
|
9
|
+
pollGlobalConfig(onData: (data: GlobalConfig) => void): {
|
|
10
|
+
stop: () => void;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Observable } from '../../helpers/Observable';
|
|
2
|
+
import AxiosNetworkClient from '@/external/AxiosNetworkClient';
|
|
3
|
+
import { captureException } from '@/sentry';
|
|
4
|
+
import NetworkManager from '../NetworkManager/NetworkManager';
|
|
5
|
+
export default class StaticService {
|
|
6
|
+
constructor() {
|
|
7
|
+
Object.defineProperty(this, "configObservable", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true,
|
|
11
|
+
value: new Observable(null)
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(this, "client", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
configurable: true,
|
|
16
|
+
writable: true,
|
|
17
|
+
value: void 0
|
|
18
|
+
});
|
|
19
|
+
this.client = new NetworkManager({
|
|
20
|
+
externalNetworkClient: new AxiosNetworkClient({
|
|
21
|
+
backoff: 2,
|
|
22
|
+
baseURL: 'https://static-prod.us-central1-espn-prod.gcp.maestro.io',
|
|
23
|
+
delay: 1000,
|
|
24
|
+
retries: 5,
|
|
25
|
+
}),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
fetchPageConfig(siteId, eventId) {
|
|
29
|
+
try {
|
|
30
|
+
return this.client.externalApiRequest({
|
|
31
|
+
endpoint: `/pages/sites/${siteId}/metadata/${eventId}.json`,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
captureException(err, { siteId, eventId });
|
|
36
|
+
console.error(`Failed to fetch page configuration for site ${siteId} and event ${eventId}:`, err instanceof Error ? err.message : String(err));
|
|
37
|
+
return Promise.resolve(null);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
static isPanelAvailable(pageConfig, panelType) {
|
|
41
|
+
return pageConfig?.panels?.some((panel) => panel.panel_type === panelType &&
|
|
42
|
+
panel.renderer?.supported_platforms?.bbd !== false);
|
|
43
|
+
}
|
|
44
|
+
pollGlobalConfig(onData) {
|
|
45
|
+
// random interval from 4 - 6 minutes
|
|
46
|
+
const interval = 240000 + Math.floor(Math.random() * 120000);
|
|
47
|
+
return this.client.pollExternalApiRequest({
|
|
48
|
+
endpoint: `/config/global.json`,
|
|
49
|
+
interval,
|
|
50
|
+
onData,
|
|
51
|
+
onError: (err) => {
|
|
52
|
+
captureException(err, {
|
|
53
|
+
context: 'StaticService.pollGlobalConfig',
|
|
54
|
+
});
|
|
55
|
+
console.error(`Failed to poll global configuration`, err instanceof Error ? err.message : String(err));
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
export const MOCK_PAGE_CONFIG = {
|
|
2
|
+
panels: [
|
|
3
|
+
{
|
|
4
|
+
_id: '687e7d03f8d920eec4c8e90f',
|
|
5
|
+
slug: 'panel-6879b0f23af9e9c90b42a24b-401769973-espnStats-generated',
|
|
6
|
+
panel_name: 'Stats',
|
|
7
|
+
panel_type: 'espnStats',
|
|
8
|
+
icon_name: 'stats',
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
_id: '687e7d03f8d920eec4c8e910',
|
|
12
|
+
slug: 'panel-6879b0f23af9e9c90b42a24b-401769973-espnKeyPlays-generated',
|
|
13
|
+
panel_name: 'Key Plays',
|
|
14
|
+
panel_type: 'espnKeyPlays',
|
|
15
|
+
icon_name: 'keyPlays',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
_id: '687e7d03f8d920eec4c8e911',
|
|
19
|
+
slug: 'panel-6879b0f23af9e9c90b42a24b-401769973-espnBet-generated',
|
|
20
|
+
panel_name: 'Bets',
|
|
21
|
+
panel_type: 'espnBet',
|
|
22
|
+
icon_name: 'bets',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
_id: '687e7d03f8d920eec4c8e912',
|
|
26
|
+
slug: 'panel-6879b0f23af9e9c90b42a24b-401769973-espnFantasy-generated',
|
|
27
|
+
panel_name: 'Fantasy',
|
|
28
|
+
panel_type: 'espnFantasy',
|
|
29
|
+
icon_name: 'fantasy',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
_id: '687e7d03f8d920eec4c8e913',
|
|
33
|
+
slug: 'panel-6879b0f23af9e9c90b42a24b-401769973-espnShop-generated',
|
|
34
|
+
panel_name: 'Espn Shop',
|
|
35
|
+
panel_type: 'espnShop',
|
|
36
|
+
icon_name: 'espnShop',
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
page: {
|
|
40
|
+
_id: '687e7d05f8d920eec4c8e924',
|
|
41
|
+
slug: '401769973-1a5f0227-a13e-396c-8cea-8961bc288666',
|
|
42
|
+
type: 'channel',
|
|
43
|
+
name: 'NHL Test Game',
|
|
44
|
+
metadata: {
|
|
45
|
+
external_field_1: '401769973',
|
|
46
|
+
external_field_2: '2512ac76-a335-39cb-af51-b9afffc6571d',
|
|
47
|
+
external_field_3: '1a5f0227-a13e-396c-8cea-8961bc288666',
|
|
48
|
+
external_field_4: 'event',
|
|
49
|
+
external_field_5: '{"leagueId":"3040"}',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
insights: {
|
|
53
|
+
_id: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkIjp7Il9pZCI6IjY2NGI5YzU3ZDU5YTdhNDMxNTQyZDgxNCIsImNyZWF0ZWQiOjE3MTYyMzEyNTguOTQ3LCJzbHVnIjoiZXNwbiIsInVpZCI6InNpdGVfdG9rZW4ifSwiaWF0IjoxNzE2MjMxMjU4fQ.Qtl9F3Cvk1wASCK0sycxwQcuih1exjTngfjqhb19oQA',
|
|
54
|
+
},
|
|
55
|
+
site: {
|
|
56
|
+
_id: '664b9c57d59a7a431542d814',
|
|
57
|
+
domainUrl: 'www.maestro.io/espn',
|
|
58
|
+
package: {
|
|
59
|
+
version: '4.06.0',
|
|
60
|
+
id: 'maestro',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
theme: {
|
|
64
|
+
_id: '66db3b75f682a8c91436c8fc',
|
|
65
|
+
button: {
|
|
66
|
+
borderRadius: 'rounded',
|
|
67
|
+
textCapitalization: 'uppercase',
|
|
68
|
+
},
|
|
69
|
+
colors: {
|
|
70
|
+
accentPrimary: '#fbc010FF',
|
|
71
|
+
accentSecondary: '#AD850A',
|
|
72
|
+
accentTertiary: '#FFFFFF',
|
|
73
|
+
alertConfirmation: '#43D48F',
|
|
74
|
+
alertError: '#FF0000',
|
|
75
|
+
alertWarning: '#F4D73D',
|
|
76
|
+
highlightPrimary: '#F3F7FF',
|
|
77
|
+
highlightSecondary: '#9DA0A6',
|
|
78
|
+
highlightTertiary: '#0C0D0D',
|
|
79
|
+
surface1: '#000000',
|
|
80
|
+
surface2: '#0D0D0D',
|
|
81
|
+
surface3: '#1A1A1A',
|
|
82
|
+
surface4: '#262626',
|
|
83
|
+
surface5: '#404040',
|
|
84
|
+
surface6: '#4D4D4D',
|
|
85
|
+
text100: '#FFF2F2',
|
|
86
|
+
text200: '#CCC2C2',
|
|
87
|
+
text300: '#999191',
|
|
88
|
+
text400: '#666161',
|
|
89
|
+
text500: '#0D0C0C',
|
|
90
|
+
},
|
|
91
|
+
name: 'Landing Page',
|
|
92
|
+
siteId: '664b9c57d59a7a431542d814',
|
|
93
|
+
type: 'custom',
|
|
94
|
+
typography: {
|
|
95
|
+
body: 'helvetica-lt-std-roman',
|
|
96
|
+
headline: 'industry-demi',
|
|
97
|
+
},
|
|
98
|
+
creator: '664b9c6b70e9a56febd2dbab',
|
|
99
|
+
owner: '664b9c6b70e9a56febd2dbab',
|
|
100
|
+
created: 1725643637480,
|
|
101
|
+
modified: 1733600558188,
|
|
102
|
+
tags: [],
|
|
103
|
+
},
|
|
104
|
+
};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import ITheme from '@/models/ITheme';
|
|
2
|
+
type PlatformConfig = {
|
|
3
|
+
analytics: {
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
beacon_interval: number;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
export interface GlobalConfig {
|
|
9
|
+
shards: string[];
|
|
10
|
+
bbd: PlatformConfig;
|
|
11
|
+
}
|
|
12
|
+
interface PageConfigPanel<TRendererData = unknown, TBlockData = any> {
|
|
13
|
+
_id: string;
|
|
14
|
+
slug: string;
|
|
15
|
+
panel_name?: string;
|
|
16
|
+
panel_type?: string;
|
|
17
|
+
icon_name?: string;
|
|
18
|
+
renderer?: {
|
|
19
|
+
block_data?: TBlockData;
|
|
20
|
+
icon_name?: string;
|
|
21
|
+
id?: string;
|
|
22
|
+
panel_name?: string;
|
|
23
|
+
panel_type?: string;
|
|
24
|
+
supported_platforms?: {
|
|
25
|
+
android?: boolean;
|
|
26
|
+
bbd?: boolean;
|
|
27
|
+
roku?: boolean;
|
|
28
|
+
tvos?: boolean;
|
|
29
|
+
} & TRendererData;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export type PageMetadata = {
|
|
33
|
+
/**
|
|
34
|
+
* Event ID or Airing ID
|
|
35
|
+
*/
|
|
36
|
+
external_field_1?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Sport guid
|
|
39
|
+
*/
|
|
40
|
+
external_field_2?: string;
|
|
41
|
+
/**
|
|
42
|
+
* League guid
|
|
43
|
+
*/
|
|
44
|
+
external_field_3?: string;
|
|
45
|
+
/**
|
|
46
|
+
* External field 1 identifier. Can be either 'airing' or 'event'.
|
|
47
|
+
*/
|
|
48
|
+
external_field_4?: 'airing' | 'event';
|
|
49
|
+
/**
|
|
50
|
+
* A stringified JSON object containing additional metadata.
|
|
51
|
+
*/
|
|
52
|
+
external_field_5?: string;
|
|
53
|
+
};
|
|
54
|
+
export interface PageConfig {
|
|
55
|
+
panels: PageConfigPanel[];
|
|
56
|
+
page: {
|
|
57
|
+
_id: string;
|
|
58
|
+
slug: string;
|
|
59
|
+
type: string;
|
|
60
|
+
name?: string;
|
|
61
|
+
metadata?: PageMetadata;
|
|
62
|
+
};
|
|
63
|
+
insights: {
|
|
64
|
+
_id: string | null;
|
|
65
|
+
};
|
|
66
|
+
site: {
|
|
67
|
+
_id: string;
|
|
68
|
+
domainUrl: string;
|
|
69
|
+
package: {
|
|
70
|
+
version: string;
|
|
71
|
+
id: string;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
theme?: ITheme | null;
|
|
75
|
+
}
|
|
76
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { IStatsNetworkManager } from './NetworkManager/types';
|
|
2
|
+
import { StatsApiResponse } from '../modules/stats/interfaces/IStats';
|
|
3
|
+
import IMaestroEventDelegate from '@/interfaces/IMaestroEventDelegate';
|
|
4
|
+
/**
|
|
5
|
+
* Service for handling stats-related API calls
|
|
6
|
+
*/
|
|
7
|
+
declare class StatsService {
|
|
8
|
+
networkManager: IStatsNetworkManager;
|
|
9
|
+
overrideUrl: string | null;
|
|
10
|
+
constructor(delegate: IMaestroEventDelegate);
|
|
11
|
+
/**
|
|
12
|
+
* Get stats using a full sync URL (for timecode support)
|
|
13
|
+
*
|
|
14
|
+
* @param timeCode - The timecode in milliseconds, or null for 'latest'
|
|
15
|
+
* @returns Promise with the stats data
|
|
16
|
+
*/
|
|
17
|
+
getStatsByUrl(timeCode: number | null): Promise<StatsApiResponse>;
|
|
18
|
+
/**
|
|
19
|
+
* Start polling using a full sync URL (for timecode support)
|
|
20
|
+
*
|
|
21
|
+
* @param timeCode - The timecode in milliseconds, or null for 'latest'
|
|
22
|
+
* @param interval - The polling interval in milliseconds
|
|
23
|
+
* @param onData - Callback for successful data fetch
|
|
24
|
+
* @param onError - Callback for errors
|
|
25
|
+
* @returns Object with a stop function to stop polling
|
|
26
|
+
*/
|
|
27
|
+
pollStatsByUrl(timeCode: number | null, interval: number, onData: (data: StatsApiResponse) => void, onError?: (error: Error) => void): {
|
|
28
|
+
stop: () => void;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Build sync URL for timecode-based stats fetching with enhanced logging
|
|
32
|
+
* Enhanced with comprehensive validation and fallback strategies
|
|
33
|
+
*
|
|
34
|
+
* @param timeCode - The timecode in milliseconds, or null for 'latest'
|
|
35
|
+
* @returns Complete sync URL for the fauxcast stats endpoint
|
|
36
|
+
* @throws Error if page config is not available or required fields are missing
|
|
37
|
+
*/
|
|
38
|
+
private getSyncEndpoint;
|
|
39
|
+
/**
|
|
40
|
+
* Format timecode for API consumption
|
|
41
|
+
* @param timeCode - Timecode in milliseconds or null
|
|
42
|
+
* @returns ISO date string, "pre.json" for pre-game, or "latest" for post-game
|
|
43
|
+
*/
|
|
44
|
+
private formatTimeCodeForAPI;
|
|
45
|
+
}
|
|
46
|
+
export default StatsService;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { HttpMethod } from './NetworkManager/NetworkManager';
|
|
2
|
+
import NetworkManagerFactory from './NetworkManager/NetworkManagerFactory';
|
|
3
|
+
import SDK from '..';
|
|
4
|
+
import { captureException } from '@/sentry';
|
|
5
|
+
/**
|
|
6
|
+
* Service for handling stats-related API calls
|
|
7
|
+
*/
|
|
8
|
+
class StatsService {
|
|
9
|
+
constructor(delegate) {
|
|
10
|
+
Object.defineProperty(this, "networkManager", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
writable: true,
|
|
14
|
+
value: void 0
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(this, "overrideUrl", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: null
|
|
21
|
+
});
|
|
22
|
+
this.networkManager = NetworkManagerFactory.createStatsNetworkManager(delegate.getStatsAPIBaseURL());
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get stats using a full sync URL (for timecode support)
|
|
26
|
+
*
|
|
27
|
+
* @param timeCode - The timecode in milliseconds, or null for 'latest'
|
|
28
|
+
* @returns Promise with the stats data
|
|
29
|
+
*/
|
|
30
|
+
async getStatsByUrl(timeCode) {
|
|
31
|
+
return this.networkManager.externalApiRequest({
|
|
32
|
+
endpoint: this.getSyncEndpoint(timeCode),
|
|
33
|
+
method: HttpMethod.GET,
|
|
34
|
+
params: {},
|
|
35
|
+
headers: {},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Start polling using a full sync URL (for timecode support)
|
|
40
|
+
*
|
|
41
|
+
* @param timeCode - The timecode in milliseconds, or null for 'latest'
|
|
42
|
+
* @param interval - The polling interval in milliseconds
|
|
43
|
+
* @param onData - Callback for successful data fetch
|
|
44
|
+
* @param onError - Callback for errors
|
|
45
|
+
* @returns Object with a stop function to stop polling
|
|
46
|
+
*/
|
|
47
|
+
pollStatsByUrl(timeCode, interval, onData, onError) {
|
|
48
|
+
return this.networkManager.pollExternalApiRequest({
|
|
49
|
+
endpoint: this.getSyncEndpoint(timeCode),
|
|
50
|
+
interval,
|
|
51
|
+
method: HttpMethod.GET,
|
|
52
|
+
params: {},
|
|
53
|
+
headers: {},
|
|
54
|
+
onData,
|
|
55
|
+
onError,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Build sync URL for timecode-based stats fetching with enhanced logging
|
|
60
|
+
* Enhanced with comprehensive validation and fallback strategies
|
|
61
|
+
*
|
|
62
|
+
* @param timeCode - The timecode in milliseconds, or null for 'latest'
|
|
63
|
+
* @returns Complete sync URL for the fauxcast stats endpoint
|
|
64
|
+
* @throws Error if page config is not available or required fields are missing
|
|
65
|
+
*/
|
|
66
|
+
getSyncEndpoint(timeCode) {
|
|
67
|
+
// Apply overrideUrl if set
|
|
68
|
+
if (this.overrideUrl) {
|
|
69
|
+
console.log('[StatsService] Using overrideUrl:', this.overrideUrl);
|
|
70
|
+
return this.overrideUrl;
|
|
71
|
+
}
|
|
72
|
+
const pageConfig = SDK.getPageConfig();
|
|
73
|
+
if (!pageConfig) {
|
|
74
|
+
throw new Error('Page config is null or undefined');
|
|
75
|
+
}
|
|
76
|
+
const metadata = pageConfig.page.metadata;
|
|
77
|
+
if (!metadata?.external_field_1 || !metadata?.external_field_5) {
|
|
78
|
+
throw new Error('Missing eventId or leagueId in page config metadata. Cannot build sync URL. ' +
|
|
79
|
+
`Required fields: external_field_1 (eventId), external_field_5 (leagueId). Available fields: ${Object.keys(metadata || {}).join(', ')}`);
|
|
80
|
+
}
|
|
81
|
+
const eventId = metadata.external_field_1;
|
|
82
|
+
let leagueId;
|
|
83
|
+
try {
|
|
84
|
+
if (metadata.external_field_5) {
|
|
85
|
+
const leagueData = JSON.parse(metadata.external_field_5);
|
|
86
|
+
leagueId = leagueData.leagueId;
|
|
87
|
+
if (!leagueId) {
|
|
88
|
+
throw new Error('leagueId not found in parsed JSON');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
throw new Error('external_field_5 is empty or undefined');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (parseError) {
|
|
96
|
+
const error = new Error(`Failed to parse leagueId from external_field_5. Raw value: ${metadata.external_field_5}`);
|
|
97
|
+
captureException(error, {
|
|
98
|
+
rawValue: metadata.external_field_5,
|
|
99
|
+
parseError,
|
|
100
|
+
});
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
if (!eventId.trim() || !leagueId.trim()) {
|
|
104
|
+
throw new Error('EventId or leagueId is empty string in page config metadata');
|
|
105
|
+
}
|
|
106
|
+
const formattedTimeCode = this.formatTimeCodeForAPI(timeCode);
|
|
107
|
+
return `/${leagueId}/${eventId}/en/us/${formattedTimeCode}`;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Format timecode for API consumption
|
|
111
|
+
* @param timeCode - Timecode in milliseconds or null
|
|
112
|
+
* @returns ISO date string, "pre.json" for pre-game, or "latest" for post-game
|
|
113
|
+
*/
|
|
114
|
+
formatTimeCodeForAPI(timeCode) {
|
|
115
|
+
if (!timeCode || timeCode === 0) {
|
|
116
|
+
return 'latest';
|
|
117
|
+
}
|
|
118
|
+
if (typeof timeCode !== 'number' ||
|
|
119
|
+
isNaN(timeCode) ||
|
|
120
|
+
!isFinite(timeCode)) {
|
|
121
|
+
console.warn('Invalid timecode provided, using "latest":', timeCode);
|
|
122
|
+
return 'latest';
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
const date = new Date(timeCode);
|
|
126
|
+
if (isNaN(date.getTime())) {
|
|
127
|
+
console.warn('Invalid date from timecode, using "latest":', timeCode);
|
|
128
|
+
return 'latest';
|
|
129
|
+
}
|
|
130
|
+
// For future timecodes, use "latest" since we can't fetch future data
|
|
131
|
+
const now = Date.now();
|
|
132
|
+
const timeDiff = now - timeCode;
|
|
133
|
+
if (timeDiff < 0) {
|
|
134
|
+
return 'latest';
|
|
135
|
+
}
|
|
136
|
+
// Return ISO date string without milliseconds to match API format
|
|
137
|
+
const isoString = date.toISOString().replace(/\.\d{3}Z$/, 'Z');
|
|
138
|
+
return isoString;
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
captureException(error, { timeCode });
|
|
142
|
+
console.warn('Error formatting timecode, using "latest":', timeCode, error);
|
|
143
|
+
return 'latest';
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export default StatsService;
|