@maestro_io/maestro-web-sdk 3.3.0 → 4.0.0-beta.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.
Files changed (370) hide show
  1. package/dist/f8820fca3a2a7957f753167da0884f9d.png +0 -0
  2. package/dist/maestro-web-sdk.esm.js +12 -12
  3. package/dist/maestro-web-sdk.esm.js.map +1 -1
  4. package/dist/maestro-web-sdk.umd.js +12 -12
  5. package/dist/maestro-web-sdk.umd.js.map +1 -1
  6. package/dist/package.json +91 -0
  7. package/dist/src/__mocks__/sentry.d.ts +4 -0
  8. package/dist/src/components/atoms/BaseButton/BaseButton.d.ts +1 -1
  9. package/dist/src/components/atoms/BaseButton/BaseButton.js +11 -0
  10. package/dist/src/components/atoms/BaseButton/index.js +2 -0
  11. package/dist/src/components/atoms/Image/index.d.ts +1 -1
  12. package/dist/src/components/atoms/Image/index.js +34 -0
  13. package/dist/src/components/atoms/Rive/index.d.ts +141 -11
  14. package/dist/src/components/atoms/Rive/index.js +53 -0
  15. package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.d.ts +1 -2
  16. package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.js +9 -0
  17. package/dist/src/components/atoms/SvgIcon/BetsIcon.d.ts +1 -1
  18. package/dist/src/components/atoms/SvgIcon/BetsIcon.js +11 -0
  19. package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.d.ts +1 -1
  20. package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.js +11 -0
  21. package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.d.ts +1 -2
  22. package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.js +6 -0
  23. package/dist/src/components/atoms/SvgIcon/CollapseIcon.d.ts +1 -2
  24. package/dist/src/components/atoms/SvgIcon/CollapseIcon.js +6 -0
  25. package/dist/src/components/atoms/SvgIcon/ExpandIcon.d.ts +1 -2
  26. package/dist/src/components/atoms/SvgIcon/ExpandIcon.js +6 -0
  27. package/dist/src/components/atoms/SvgIcon/FantasyIcon.d.ts +1 -1
  28. package/dist/src/components/atoms/SvgIcon/FantasyIcon.js +15 -0
  29. package/dist/src/components/atoms/SvgIcon/FlameIcon.d.ts +1 -1
  30. package/dist/src/components/atoms/SvgIcon/FlameIcon.js +11 -0
  31. package/dist/src/components/atoms/SvgIcon/Icon.d.ts +5 -5
  32. package/dist/src/components/atoms/SvgIcon/Icon.js +44 -0
  33. package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.d.ts +1 -1
  34. package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.js +10 -0
  35. package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.d.ts +1 -1
  36. package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.js +11 -0
  37. package/dist/src/components/atoms/SvgIcon/PlayIcon.d.ts +1 -1
  38. package/dist/src/components/atoms/SvgIcon/PlayIcon.js +8 -0
  39. package/dist/src/components/atoms/SvgIcon/ShopIcon.d.ts +1 -1
  40. package/dist/src/components/atoms/SvgIcon/ShopIcon.js +7 -0
  41. package/dist/src/components/atoms/SvgIcon/StatsIcon.d.ts +1 -1
  42. package/dist/src/components/atoms/SvgIcon/StatsIcon.js +12 -0
  43. package/dist/src/components/atoms/SvgIcon/TimesIcon.d.ts +1 -2
  44. package/dist/src/components/atoms/SvgIcon/TimesIcon.js +6 -0
  45. package/dist/src/components/atoms/SvgIcon/WarningIcon.d.ts +1 -1
  46. package/dist/src/components/atoms/SvgIcon/WarningIcon.js +8 -0
  47. package/dist/src/components/atoms/SvgIcon/index.js +2 -0
  48. package/dist/src/components/core/App/App.d.ts +1 -1
  49. package/dist/src/components/core/App/App.js +35 -0
  50. package/dist/src/components/core/App/index.js +2 -0
  51. package/dist/src/components/core/OverlayContainer.js +58 -0
  52. package/dist/src/components/core/PanelManager/PanelManager.d.ts +1 -1
  53. package/dist/src/components/core/PanelManager/PanelManager.js +86 -0
  54. package/dist/src/components/core/PanelManager/index.js +2 -0
  55. package/dist/src/components/core/ScrollableContainer/FocusableItem.js +38 -0
  56. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.d.ts +8 -7
  57. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.js +169 -0
  58. package/dist/src/components/core/ScrollableContainer/index.js +2 -0
  59. package/dist/src/components/molecules/ActionButton/ActionButton.d.ts +53 -7
  60. package/dist/src/components/molecules/ActionButton/ActionButton.js +10 -0
  61. package/dist/src/components/molecules/ActionButton/index.js +2 -0
  62. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.d.ts +1 -1
  63. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.js +50 -0
  64. package/dist/src/components/molecules/HeadshotImage/index.js +2 -0
  65. package/dist/src/components/molecules/Overlay/Overlay.d.ts +1 -1
  66. package/dist/src/components/molecules/Overlay/Overlay.js +139 -0
  67. package/dist/src/components/molecules/Overlay/index.js +2 -0
  68. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.d.ts +57 -10
  69. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.js +27 -0
  70. package/dist/src/components/molecules/PanelNavButton/index.js +2 -0
  71. package/dist/src/components/molecules/SegmentButton/SegmentButton.js +10 -0
  72. package/dist/src/components/molecules/SegmentButton/index.js +2 -0
  73. package/dist/src/components/molecules/TabLoadError/TabLoadError.d.ts +53 -7
  74. package/dist/src/components/molecules/TabLoadError/TabLoadError.js +14 -0
  75. package/dist/src/components/molecules/TabLoadError/index.js +2 -0
  76. package/dist/src/components/molecules/WatchButton/WatchButton.d.ts +1 -1
  77. package/dist/src/components/molecules/WatchButton/WatchButton.js +15 -0
  78. package/dist/src/components/molecules/WatchButton/index.js +2 -0
  79. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.d.ts +1 -1
  80. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.js +60 -0
  81. package/dist/src/components/organisms/PanelNavigation/index.js +2 -0
  82. package/dist/src/components/organisms/SegmentController/SegmentController.d.ts +5 -4
  83. package/dist/src/components/organisms/SegmentController/SegmentController.js +76 -0
  84. package/dist/src/components/organisms/SegmentController/index.js +2 -0
  85. package/dist/src/development/MaestroEventDelegate.js +109 -0
  86. package/dist/src/development/TimeSeek.d.ts +1 -1
  87. package/dist/src/development/TimeSeek.js +218 -0
  88. package/dist/src/development/development.js +36 -0
  89. package/dist/src/external/AxiosNetworkClient.js +110 -0
  90. package/dist/src/external/LocalStorageCacheManager.js +213 -0
  91. package/dist/src/external/ReactRenderer.js +65 -0
  92. package/dist/src/external/mocks/MockExternalNetworkClient.js +187 -0
  93. package/dist/src/external/ports/cacheManager.js +1 -0
  94. package/dist/src/external/ports/networkClient.js +1 -0
  95. package/dist/src/external/ports/renderer.d.ts +1 -2
  96. package/dist/src/external/ports/renderer.js +1 -0
  97. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.d.ts +8 -0
  98. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.js +7 -0
  99. package/dist/src/external/spatial-navigation/index.js +3 -0
  100. package/dist/src/external/spatial-navigation/measureLayout.js +30 -0
  101. package/dist/src/external/spatial-navigation/spatialNavigation.js +876 -0
  102. package/dist/src/external/spatial-navigation/utils.js +6 -0
  103. package/dist/src/external/spatial-navigation/visualDebugger.js +76 -0
  104. package/dist/src/external/spatial-navigation/withFocusable.d.ts +53 -7
  105. package/dist/src/external/spatial-navigation/withFocusable.js +245 -0
  106. package/dist/src/helpers/Observable.js +37 -0
  107. package/dist/src/helpers/strings.js +14 -0
  108. package/dist/src/helpers/url.js +12 -0
  109. package/dist/src/index.d.ts +5 -5
  110. package/dist/src/index.js +165 -0
  111. package/dist/src/interfaces/IMaestroEvent.js +18 -0
  112. package/dist/src/interfaces/IMaestroEventDelegate.js +1 -0
  113. package/dist/src/interfaces/IMaestroManager.js +1 -0
  114. package/dist/src/interfaces/IUserSettings.js +20 -0
  115. package/dist/src/models/IModel.js +1 -0
  116. package/dist/src/models/IPanel.js +40 -0
  117. package/dist/src/models/ITheme.js +20 -0
  118. package/dist/src/models/IWinningBet.js +1 -0
  119. package/dist/src/modules/bets/interfaces/IBets.js +1 -0
  120. package/dist/src/modules/bets/mocks.js +573 -0
  121. package/dist/src/modules/bets/types/BetsAnalyticsTypes.js +1 -0
  122. package/dist/src/modules/bets/view/BetsView.d.ts +3 -3
  123. package/dist/src/modules/bets/view/BetsView.js +143 -0
  124. package/dist/src/modules/bets/view/HotProps/HotPropsView.d.ts +53 -7
  125. package/dist/src/modules/bets/view/HotProps/HotPropsView.js +150 -0
  126. package/dist/src/modules/bets/view/SixPack/SixPackView.d.ts +5 -4
  127. package/dist/src/modules/bets/view/SixPack/SixPackView.js +110 -0
  128. package/dist/src/modules/bets/view/UserBets/BetResult/BetResult.d.ts +1 -1
  129. package/dist/src/modules/bets/view/UserBets/BetResult/BetResult.js +6 -0
  130. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCard.d.ts +53 -7
  131. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCard.js +149 -0
  132. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.d.ts +5 -4
  133. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.js +34 -0
  134. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardFooter.d.ts +1 -2
  135. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardFooter.js +18 -0
  136. package/dist/src/modules/bets/view/UserBets/Boost/Boost.d.ts +1 -2
  137. package/dist/src/modules/bets/view/UserBets/Boost/Boost.js +6 -0
  138. package/dist/src/modules/bets/view/UserBets/OutcomeBadge/OutcomeBadge.d.ts +1 -2
  139. package/dist/src/modules/bets/view/UserBets/OutcomeBadge/OutcomeBadge.js +9 -0
  140. package/dist/src/modules/bets/view/UserBets/Parlay/Parlay.d.ts +1 -2
  141. package/dist/src/modules/bets/view/UserBets/Parlay/Parlay.js +13 -0
  142. package/dist/src/modules/bets/view/UserBets/Straight/Straight.d.ts +1 -2
  143. package/dist/src/modules/bets/view/UserBets/Straight/Straight.js +6 -0
  144. package/dist/src/modules/bets/view/UserBets/Teaser/Teaser.d.ts +1 -2
  145. package/dist/src/modules/bets/view/UserBets/Teaser/Teaser.js +13 -0
  146. package/dist/src/modules/bets/view/UserBets/UserBetsView.d.ts +3 -3
  147. package/dist/src/modules/bets/view/UserBets/UserBetsView.js +107 -0
  148. package/dist/src/modules/bets/view/components/Bet/Bet.d.ts +99 -11
  149. package/dist/src/modules/bets/view/components/Bet/Bet.js +32 -0
  150. package/dist/src/modules/bets/view/components/BetPill/BetPill.d.ts +1 -1
  151. package/dist/src/modules/bets/view/components/BetPill/BetPill.js +6 -0
  152. package/dist/src/modules/bets/view/components/BetsCard/BetsCard.js +15 -0
  153. package/dist/src/modules/bets/view/components/BetsCard/BetsCardHeader.d.ts +1 -1
  154. package/dist/src/modules/bets/view/components/BetsCard/BetsCardHeader.js +20 -0
  155. package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.d.ts +1 -1
  156. package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.js +14 -0
  157. package/dist/src/modules/bets/view/components/LocationWarning/LocationWarning.d.ts +1 -1
  158. package/dist/src/modules/bets/view/components/LocationWarning/LocationWarning.js +16 -0
  159. package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.d.ts +5 -4
  160. package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.js +78 -0
  161. package/dist/src/modules/bets/view/components/PromoCodeBanner/index.js +1 -0
  162. package/dist/src/modules/bets/view-model/BetsViewModel.js +974 -0
  163. package/dist/src/modules/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.d.ts +1 -1
  164. package/dist/src/modules/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.js +107 -0
  165. package/dist/src/modules/fantasy/components/ExpandedAthleteList/index.js +1 -0
  166. package/dist/src/modules/fantasy/components/LeagueCard/LeagueCard.d.ts +53 -7
  167. package/dist/src/modules/fantasy/components/LeagueCard/LeagueCard.js +20 -0
  168. package/dist/src/modules/fantasy/components/LeagueCard/index.js +2 -0
  169. package/dist/src/modules/fantasy/components/TopPlayerCard/TopPlayerCard.d.ts +53 -7
  170. package/dist/src/modules/fantasy/components/TopPlayerCard/TopPlayerCard.js +29 -0
  171. package/dist/src/modules/fantasy/components/TopPlayerCard/index.js +2 -0
  172. package/dist/src/modules/fantasy/mocks.js +3682 -0
  173. package/dist/src/modules/fantasy/types.js +6 -0
  174. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.d.ts +1 -1
  175. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.js +74 -0
  176. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/index.js +2 -0
  177. package/dist/src/modules/fantasy/view/ErrorBoundary.d.ts +13 -0
  178. package/dist/src/modules/fantasy/view/FantasyItemView.d.ts +6 -5
  179. package/dist/src/modules/fantasy/view/FantasyItemView.js +74 -0
  180. package/dist/src/modules/fantasy/view/FantasyView.d.ts +3 -3
  181. package/dist/src/modules/fantasy/view/FantasyView.js +133 -0
  182. package/dist/src/modules/fantasy/view/InactiveLeague/DraftDateCountdown.d.ts +1 -1
  183. package/dist/src/modules/fantasy/view/InactiveLeague/DraftDateCountdown.js +95 -0
  184. package/dist/src/modules/fantasy/view/InactiveLeague/InactiveLeague.d.ts +53 -7
  185. package/dist/src/modules/fantasy/view/InactiveLeague/InactiveLeague.js +13 -0
  186. package/dist/src/modules/fantasy/view/InactiveLeague/index.js +2 -0
  187. package/dist/src/modules/fantasy/view/LoginView/LoginView.d.ts +53 -7
  188. package/dist/src/modules/fantasy/view/LoginView/LoginView.js +27 -0
  189. package/dist/src/modules/fantasy/view/LoginView/index.js +2 -0
  190. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.d.ts +53 -7
  191. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.js +25 -0
  192. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/index.js +2 -0
  193. package/dist/src/modules/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.d.ts +1 -1
  194. package/dist/src/modules/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.js +9 -0
  195. package/dist/src/modules/fantasy/view/MatchupPair/MatchupPair.d.ts +53 -7
  196. package/dist/src/modules/fantasy/view/MatchupPair/MatchupPair.js +118 -0
  197. package/dist/src/modules/fantasy/view/MatchupPair/index.js +2 -0
  198. package/dist/src/modules/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.d.ts +1 -1
  199. package/dist/src/modules/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.js +9 -0
  200. package/dist/src/modules/fantasy/view/MatchupSingle/MatchupSingle.d.ts +53 -7
  201. package/dist/src/modules/fantasy/view/MatchupSingle/MatchupSingle.js +108 -0
  202. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.d.ts +53 -7
  203. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.js +18 -0
  204. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/index.js +2 -0
  205. package/dist/src/modules/fantasy/view/MatchupSingle/index.js +2 -0
  206. package/dist/src/modules/fantasy/view/PromoView/PromoView.d.ts +53 -7
  207. package/dist/src/modules/fantasy/view/PromoView/PromoView.js +12 -0
  208. package/dist/src/modules/fantasy/view/PromoView/index.js +2 -0
  209. package/dist/src/modules/fantasy/view/index.js +2 -0
  210. package/dist/src/modules/fantasy/view-model/FantasyViewModel.FantasyPolling.js +132 -0
  211. package/dist/src/modules/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.js +141 -0
  212. package/dist/src/modules/fantasy/view-model/FantasyViewModel.js +534 -0
  213. package/dist/src/modules/key-plays/constants.js +292 -0
  214. package/dist/src/modules/key-plays/interfaces/IKeyPlays.js +14 -0
  215. package/dist/src/modules/key-plays/interfaces/IKeyPlaysResponse.js +1 -0
  216. package/dist/src/modules/key-plays/view/KeyPlayCardScoreTagView.d.ts +1 -1
  217. package/dist/src/modules/key-plays/view/KeyPlayCardScoreTagView.js +16 -0
  218. package/dist/src/modules/key-plays/view/KeyPlayCardView.d.ts +7 -6
  219. package/dist/src/modules/key-plays/view/KeyPlayCardView.js +139 -0
  220. package/dist/src/modules/key-plays/view/KeyPlayErrorStateView.d.ts +1 -1
  221. package/dist/src/modules/key-plays/view/KeyPlayErrorStateView.js +65 -0
  222. package/dist/src/modules/key-plays/view/KeyPlaysView.d.ts +3 -3
  223. package/dist/src/modules/key-plays/view/KeyPlaysView.js +151 -0
  224. package/dist/src/modules/key-plays/view-model/KeyPlaysViewModel.js +247 -0
  225. package/dist/src/modules/shop/mocks.js +390 -0
  226. package/dist/src/modules/shop/types.js +7 -0
  227. package/dist/src/modules/shop/view/ProductDetailView/ProductDetailView.d.ts +1 -2
  228. package/dist/src/modules/shop/view/ProductDetailView/ProductDetailView.js +56 -0
  229. package/dist/src/modules/shop/view/ProductDetailView/index.js +2 -0
  230. package/dist/src/modules/shop/view/ShopView.d.ts +3 -3
  231. package/dist/src/modules/shop/view/ShopView.js +182 -0
  232. package/dist/src/modules/shop/view/components/BrowseCard/BrowseCard.d.ts +54 -8
  233. package/dist/src/modules/shop/view/components/BrowseCard/BrowseCard.js +23 -0
  234. package/dist/src/modules/shop/view/components/BrowseCard/index.js +2 -0
  235. package/dist/src/modules/shop/view/components/ProductSummaryCard/ProductSummaryCard.d.ts +53 -7
  236. package/dist/src/modules/shop/view/components/ProductSummaryCard/ProductSummaryCard.js +26 -0
  237. package/dist/src/modules/shop/view/components/ProductSummaryCard/index.js +1 -0
  238. package/dist/src/modules/shop/view/components/ShopPromoView/ShopPromoView.d.ts +1 -2
  239. package/dist/src/modules/shop/view/components/ShopPromoView/ShopPromoView.js +19 -0
  240. package/dist/src/modules/shop/view/components/ShopPromoView/index.js +1 -0
  241. package/dist/src/modules/shop/view/components/ShopSection/ShopSection.d.ts +6 -4
  242. package/dist/src/modules/shop/view/components/ShopSection/ShopSection.js +61 -0
  243. package/dist/src/modules/shop/view/components/ShopSection/ShopSectionItem.d.ts +18 -0
  244. package/dist/src/modules/shop/view/components/ShopSection/ShopSectionItem.js +22 -0
  245. package/dist/src/modules/shop/view/components/ShopSection/index.js +1 -0
  246. package/dist/src/modules/shop/view/index.js +2 -0
  247. package/dist/src/modules/shop/view-model/ShopViewModel.ShopPolling.js +111 -0
  248. package/dist/src/modules/shop/view-model/ShopViewModel.js +353 -0
  249. package/dist/src/modules/stats/interfaces/IStats.js +1 -0
  250. package/dist/src/modules/stats/mocks.js +746 -0
  251. package/dist/src/modules/stats/utils/driveSummaryUtils.js +48 -0
  252. package/dist/src/modules/stats/utils/renderTeamStatistic.d.ts +1 -2
  253. package/dist/src/modules/stats/utils/renderTeamStatistic.js +16 -0
  254. package/dist/src/modules/stats/utils.js +62 -0
  255. package/dist/src/modules/stats/view/ActiveAthletes/ActiveAthletes.d.ts +2 -2
  256. package/dist/src/modules/stats/view/ActiveAthletes/ActiveAthletes.js +98 -0
  257. package/dist/src/modules/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.d.ts +1 -2
  258. package/dist/src/modules/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.js +27 -0
  259. package/dist/src/modules/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.d.ts +1 -1
  260. package/dist/src/modules/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.js +89 -0
  261. package/dist/src/modules/stats/view/ActiveAthletes/index.js +2 -0
  262. package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.d.ts +53 -7
  263. package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.js +70 -0
  264. package/dist/src/modules/stats/view/DriveSummary/DriveSummary.d.ts +1 -1
  265. package/dist/src/modules/stats/view/DriveSummary/DriveSummary.js +87 -0
  266. package/dist/src/modules/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.d.ts +1 -1
  267. package/dist/src/modules/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.js +129 -0
  268. package/dist/src/modules/stats/view/DriveSummary/Header/DriveSummaryHeader.d.ts +1 -2
  269. package/dist/src/modules/stats/view/DriveSummary/Header/DriveSummaryHeader.js +26 -0
  270. package/dist/src/modules/stats/view/DriveSummary/MainStat/MainStat.d.ts +1 -2
  271. package/dist/src/modules/stats/view/DriveSummary/MainStat/MainStat.js +24 -0
  272. package/dist/src/modules/stats/view/DriveSummary/index.js +2 -0
  273. package/dist/src/modules/stats/view/GameLeaders/GameLeaders.d.ts +5 -4
  274. package/dist/src/modules/stats/view/GameLeaders/GameLeaders.js +48 -0
  275. package/dist/src/modules/stats/view/GameLeaders/index.js +2 -0
  276. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/DonutChart.d.ts +2 -2
  277. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/DonutChart.js +55 -0
  278. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/index.js +1 -0
  279. package/dist/src/modules/stats/view/MatchPredictor/MatchPredictorView.d.ts +53 -7
  280. package/dist/src/modules/stats/view/MatchPredictor/MatchPredictorView.js +60 -0
  281. package/dist/src/modules/stats/view/MatchPredictor/index.js +2 -0
  282. package/dist/src/modules/stats/view/Penalties/Penalties.d.ts +1 -2
  283. package/dist/src/modules/stats/view/Penalties/Penalties.js +6 -0
  284. package/dist/src/modules/stats/view/Penalties/index.js +2 -0
  285. package/dist/src/modules/stats/view/RecentGames/RecentGames.d.ts +53 -7
  286. package/dist/src/modules/stats/view/RecentGames/RecentGames.js +23 -0
  287. package/dist/src/modules/stats/view/RecentGames/index.js +2 -0
  288. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.d.ts +1 -1
  289. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.js +121 -0
  290. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/index.js +2 -0
  291. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/ScoreItem.d.ts +53 -7
  292. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/ScoreItem.js +62 -0
  293. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/index.js +2 -0
  294. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/ScoresSection.d.ts +1 -2
  295. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/ScoresSection.js +23 -0
  296. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/index.js +2 -0
  297. package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.d.ts +2 -2
  298. package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.js +106 -0
  299. package/dist/src/modules/stats/view/ScoringSummary/index.js +2 -0
  300. package/dist/src/modules/stats/view/StatsItemView.d.ts +6 -5
  301. package/dist/src/modules/stats/view/StatsItemView.js +92 -0
  302. package/dist/src/modules/stats/view/StatsQRCode/StatsQRCodeView.d.ts +53 -7
  303. package/dist/src/modules/stats/view/StatsQRCode/StatsQRCodeView.js +36 -0
  304. package/dist/src/modules/stats/view/StatsQRCode/index.js +1 -0
  305. package/dist/src/modules/stats/view/StatsView.d.ts +3 -3
  306. package/dist/src/modules/stats/view/StatsView.js +137 -0
  307. package/dist/src/modules/stats/view/TeamStats/TeamStatsView.d.ts +53 -7
  308. package/dist/src/modules/stats/view/TeamStats/TeamStatsView.js +43 -0
  309. package/dist/src/modules/stats/view/TeamStats/index.js +1 -0
  310. package/dist/src/modules/stats/view/Teams/StatsCarousel.d.ts +2 -2
  311. package/dist/src/modules/stats/view/Teams/StatsCarousel.js +83 -0
  312. package/dist/src/modules/stats/view/Teams/StatsProgressBar.d.ts +1 -2
  313. package/dist/src/modules/stats/view/Teams/StatsProgressBar.js +19 -0
  314. package/dist/src/modules/stats/view/Teams/Teams.d.ts +53 -7
  315. package/dist/src/modules/stats/view/Teams/Teams.js +43 -0
  316. package/dist/src/modules/stats/view/Teams/index.js +2 -0
  317. package/dist/src/modules/stats/view/WinProbability/WinProbability.d.ts +53 -7
  318. package/dist/src/modules/stats/view/WinProbability/WinProbability.js +28 -0
  319. package/dist/src/modules/stats/view/WinProbability/index.js +2 -0
  320. package/dist/src/modules/stats/view/components/AthletesStatistics/AthletesStatistics.d.ts +53 -7
  321. package/dist/src/modules/stats/view/components/AthletesStatistics/AthletesStatistics.js +89 -0
  322. package/dist/src/modules/stats/view/components/AthletesStatistics/StatisticTable.d.ts +1 -2
  323. package/dist/src/modules/stats/view/components/AthletesStatistics/StatisticTable.js +12 -0
  324. package/dist/src/modules/stats/view/components/AthletesStatistics/index.js +2 -0
  325. package/dist/src/modules/stats/view/index.js +2 -0
  326. package/dist/src/modules/stats/view-model/StatsViewModel.js +966 -0
  327. package/dist/src/sentry.js +31 -0
  328. package/dist/src/services/AnalyticsService/AnalyticsService.d.ts +12 -7
  329. package/dist/src/services/AnalyticsService/AnalyticsService.js +402 -0
  330. package/dist/src/services/AnalyticsService/types.js +1 -0
  331. package/dist/src/services/BetsService.js +122 -0
  332. package/dist/src/services/FantasyService.js +92 -0
  333. package/dist/src/services/GlobalService/GlobalService.d.ts +9 -0
  334. package/dist/src/services/GlobalService/PageService.d.ts +9 -0
  335. package/dist/src/services/GlobalService/index.d.ts +2 -0
  336. package/dist/src/services/GlobalService/mocks.d.ts +2 -0
  337. package/dist/src/services/GlobalService/types.d.ts +11 -0
  338. package/dist/src/services/InsightsService/InsightsPayloadBuilder.d.ts +1 -2
  339. package/dist/src/services/InsightsService/InsightsPayloadBuilder.js +386 -0
  340. package/dist/src/services/InsightsService/InsightsService.js +74 -0
  341. package/dist/src/services/NetworkManager/NetworkManager.js +457 -0
  342. package/dist/src/services/NetworkManager/NetworkManagerFactory.js +101 -0
  343. package/dist/src/services/NetworkManager/errors.js +45 -0
  344. package/dist/src/services/NetworkManager/types.js +10 -0
  345. package/dist/src/services/PageService/PageService.d.ts +9 -0
  346. package/dist/src/services/PageService/PageService.js +39 -0
  347. package/dist/src/services/PageService/index.d.ts +2 -0
  348. package/dist/src/services/PageService/index.js +2 -0
  349. package/dist/src/services/PageService/mocks.d.ts +2 -0
  350. package/dist/src/services/PageService/mocks.js +104 -0
  351. package/dist/src/services/PageService/types.d.ts +76 -0
  352. package/dist/src/services/PageService/types.js +1 -0
  353. package/dist/src/services/ShopService.js +46 -0
  354. package/dist/src/services/StaticService/PageService.d.ts +9 -0
  355. package/dist/src/services/StaticService/StaticService.d.ts +3 -1
  356. package/dist/src/services/StaticService/StaticService.js +59 -0
  357. package/dist/src/services/StaticService/index.js +2 -0
  358. package/dist/src/services/StaticService/mocks.js +104 -0
  359. package/dist/src/services/StaticService/types.js +1 -0
  360. package/dist/src/services/StatsService.js +136 -0
  361. package/dist/src/services/ThemeManager/constants.js +47 -0
  362. package/dist/src/services/UserSettingsManager.js +155 -0
  363. package/dist/src/test-polyfills.js +15 -0
  364. package/dist/src/types/OverlayTypes.js +4 -0
  365. package/dist/src/view-models/MaestroEventViewModel.d.ts +0 -2
  366. package/dist/src/view-models/MaestroEventViewModel.js +280 -0
  367. package/dist/src/view-models/OverlayViewModel.js +222 -0
  368. package/dist/src/view-models/PanelManagerViewModel.js +212 -0
  369. package/dist/src/view-models/ViewModel.js +32 -0
  370. package/package.json +13 -9
@@ -0,0 +1,31 @@
1
+ import { BrowserClient, defaultStackParser, defaultIntegrations, makeFetchTransport, } from '@sentry/browser';
2
+ import pkg from '../package.json';
3
+ const DEV_DOMAINS = [/bbd-web-sdk\.us-central1-dev\.gcp\.maestro\.io/];
4
+ let sentryClient = null;
5
+ const initSentry = () => {
6
+ if (process.env.NODE_ENV === 'test') {
7
+ return;
8
+ }
9
+ const isDev = DEV_DOMAINS.find((domain) => domain.test(window.location.href)) !== null;
10
+ sentryClient = new BrowserClient({
11
+ dsn: 'https://91444a71cbaefc62e8dc813f22bad3bf@o4506894189330432.ingest.us.sentry.io/4509946717470720',
12
+ transport: makeFetchTransport,
13
+ stackParser: defaultStackParser,
14
+ integrations: defaultIntegrations.filter((integration) => {
15
+ // filter integrations that use the global variable
16
+ return !['BrowserApiErrors', 'Breadcrumbs', 'GlobalHandlers'].includes(integration.name);
17
+ }),
18
+ tracesSampleRate: isDev ? 1 : 0.1,
19
+ release: pkg.version,
20
+ environment: isDev ? 'development' : 'production',
21
+ enabled: !/localhost/.test(window.location.href),
22
+ });
23
+ };
24
+ export const captureException = (error, extra) => {
25
+ if (!sentryClient) {
26
+ console.error('[maestro-web-sdk] SDK - Sentry Browser Client is not initialized');
27
+ return;
28
+ }
29
+ sentryClient.captureException(error, extra);
30
+ };
31
+ export default initSentry;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import InsightsPayloadBuilder from '../InsightsService/InsightsPayloadBuilder';
3
2
  import InsightsService from '../InsightsService/InsightsService';
4
3
  import { PageConfig } from '../StaticService/types';
@@ -59,10 +58,12 @@ type PanelData = {
59
58
  declare class AnalyticsService {
60
59
  insightsService: InsightsService;
61
60
  insightsPayloadBuilder: InsightsPayloadBuilder;
62
- sessionId: string;
63
- sessionBeaconTimeoutId: NodeJS.Timeout | null;
64
- isSessionBeaconRunning: boolean;
65
- isSessionActive: boolean;
61
+ private SDKSessionId;
62
+ private pageSessionId;
63
+ private pinchBackSessionId;
64
+ private pageSessionBeaconTimeoutId;
65
+ private isPageSessionBeaconRunning;
66
+ private isPageSessionActive;
66
67
  constructor();
67
68
  private trackAction;
68
69
  private trackImpression;
@@ -70,8 +71,12 @@ declare class AnalyticsService {
70
71
  panelClick({ type, metadata, name }: PanelClickPayload): Promise<void>;
71
72
  getBaseMetadataFromPageConfig(pageConfig: PageConfig | null): BaseMetadata;
72
73
  getPanelDataFromPageConfig(type: 'espnBet' | 'espnStats' | 'espnKeyPlays' | 'espnFantasy' | 'espnShop', pageConfig: PageConfig | null): PanelData;
73
- sessionStart(): Promise<void>;
74
- sessionEnd(): Promise<void>;
74
+ SDKSessionStart(): Promise<void>;
75
+ pageSessionStart(): Promise<void>;
76
+ pageSessionEnd(): Promise<void>;
77
+ pinchBackSessionStart(): Promise<void>;
78
+ pinchBackSessionEnd(): Promise<void>;
79
+ SDKSessionEnd(): Promise<void>;
75
80
  private scheduleNextBeacon;
76
81
  private sendSessionBeacon;
77
82
  private sessionBeacon;
@@ -0,0 +1,402 @@
1
+ import SDK from '../..';
2
+ import InsightsPayloadBuilder from '../InsightsService/InsightsPayloadBuilder';
3
+ import InsightsService from '../InsightsService/InsightsService';
4
+ import { version } from '../../../package.json';
5
+ import { captureException } from '@/sentry';
6
+ const SESSION_BEACON_SECONDS = 240;
7
+ class AnalyticsService {
8
+ constructor() {
9
+ Object.defineProperty(this, "insightsService", {
10
+ enumerable: true,
11
+ configurable: true,
12
+ writable: true,
13
+ value: void 0
14
+ });
15
+ Object.defineProperty(this, "insightsPayloadBuilder", {
16
+ enumerable: true,
17
+ configurable: true,
18
+ writable: true,
19
+ value: void 0
20
+ });
21
+ Object.defineProperty(this, "SDKSessionId", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: ''
26
+ });
27
+ Object.defineProperty(this, "pageSessionId", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: ''
32
+ });
33
+ Object.defineProperty(this, "pinchBackSessionId", {
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true,
37
+ value: ''
38
+ });
39
+ Object.defineProperty(this, "pageSessionBeaconTimeoutId", {
40
+ enumerable: true,
41
+ configurable: true,
42
+ writable: true,
43
+ value: null
44
+ });
45
+ Object.defineProperty(this, "isPageSessionBeaconRunning", {
46
+ enumerable: true,
47
+ configurable: true,
48
+ writable: true,
49
+ value: false
50
+ });
51
+ Object.defineProperty(this, "isPageSessionActive", {
52
+ enumerable: true,
53
+ configurable: true,
54
+ writable: true,
55
+ value: false
56
+ });
57
+ this.insightsService = new InsightsService();
58
+ this.insightsPayloadBuilder = new InsightsPayloadBuilder();
59
+ }
60
+ async trackAction(event) {
61
+ if (process.env.NODE_ENV === 'test') {
62
+ return;
63
+ }
64
+ SDK.getMaestroEventViewModel().delegate.trackAction(event);
65
+ const eventInsightsData = await this.insightsPayloadBuilder.getPayload({
66
+ ontology: {
67
+ class: event.e2_class,
68
+ family: event.e4_family,
69
+ order: event.e3_order,
70
+ kingdom: event.e0_kingdom,
71
+ phylum: event.e1_phylum,
72
+ genus: event.e5_genus,
73
+ species: event.e6_species,
74
+ },
75
+ metadata: event.metadata,
76
+ });
77
+ await this.insightsService.action(eventInsightsData);
78
+ }
79
+ async trackImpression(event) {
80
+ if (process.env.NODE_ENV === 'test') {
81
+ return;
82
+ }
83
+ SDK.getMaestroEventViewModel().delegate.trackImpression(event);
84
+ const eventInsightsData = await this.insightsPayloadBuilder.getPayload({
85
+ ontology: {
86
+ kingdom: event.e0_kingdom,
87
+ phylum: event.e1_phylum,
88
+ class: event.e2_class,
89
+ order: event.e3_order,
90
+ family: event.e4_family,
91
+ genus: event.e5_genus,
92
+ species: event.e6_species,
93
+ },
94
+ metadata: event.metadata,
95
+ });
96
+ await this.insightsService.action(eventInsightsData);
97
+ }
98
+ async panelView(panelType, metadata) {
99
+ const config = SDK.getPageConfig();
100
+ const panelData = this.getPanelDataFromPageConfig(panelType, config);
101
+ await this.trackImpression({
102
+ name: 'panel_selected',
103
+ e0_kingdom: 'panel',
104
+ e1_phylum: 'view',
105
+ e2_class: panelData.panel_type,
106
+ e3_order: panelData.panel_id,
107
+ e4_family: panelData.panel_name,
108
+ metadata: {
109
+ ...(metadata || {}),
110
+ ...this.getBaseMetadataFromPageConfig(config),
111
+ },
112
+ });
113
+ }
114
+ async panelClick({ type, metadata, name }) {
115
+ const config = SDK.getPageConfig();
116
+ const panelData = this.getPanelDataFromPageConfig(type, config);
117
+ await this.trackAction({
118
+ name,
119
+ e0_kingdom: 'panel',
120
+ e1_phylum: 'engage',
121
+ e2_class: panelData.panel_type,
122
+ e3_order: panelData.panel_id,
123
+ e4_family: panelData.panel_name,
124
+ metadata: {
125
+ ...this.getBaseMetadataFromPageConfig(config),
126
+ ...metadata,
127
+ },
128
+ });
129
+ }
130
+ getBaseMetadataFromPageConfig(pageConfig) {
131
+ if (!pageConfig) {
132
+ console.warn('Page Config not found. Could not extract metadata.');
133
+ return {
134
+ league: '',
135
+ airing: '',
136
+ event: '',
137
+ sport: '',
138
+ };
139
+ }
140
+ const metadata = pageConfig.page.metadata;
141
+ const event = SDK.getMaestroEventViewModel().getCurrentEventID();
142
+ const airing = metadata?.external_field_4 === 'airing'
143
+ ? metadata.external_field_1 || ''
144
+ : '';
145
+ const sport = metadata?.external_field_2 || '';
146
+ const league = metadata?.external_field_3 || '';
147
+ return {
148
+ league,
149
+ airing,
150
+ event,
151
+ sport,
152
+ };
153
+ }
154
+ getPanelDataFromPageConfig(type, pageConfig) {
155
+ if (!pageConfig) {
156
+ console.warn('Page Config not found. Could not extract panel data.');
157
+ return {
158
+ panel_id: '',
159
+ panel_name: '',
160
+ panel_type: '',
161
+ };
162
+ }
163
+ const panel = pageConfig.panels.find((p) => p.panel_type === type);
164
+ if (!panel) {
165
+ console.warn(`Panel of type ${type} not found in Page Config.`);
166
+ return {
167
+ panel_id: '',
168
+ panel_name: '',
169
+ panel_type: '',
170
+ };
171
+ }
172
+ return {
173
+ panel_id: panel._id,
174
+ panel_name: panel.panel_name || '',
175
+ panel_type: panel.panel_type || '',
176
+ };
177
+ }
178
+ async SDKSessionStart() {
179
+ try {
180
+ this.SDKSessionId = Math.random().toString(36).substring(2, 15);
181
+ const eventInsightsData = await this.insightsPayloadBuilder.getPayload({
182
+ ontology: {
183
+ kingdom: 'session',
184
+ phylum: 'start',
185
+ class: 'sdk',
186
+ },
187
+ metadata: {
188
+ version,
189
+ },
190
+ });
191
+ await this.insightsService.action(eventInsightsData);
192
+ }
193
+ catch (err) {
194
+ console.error(`Failed to start SDK session: ${err}`);
195
+ captureException(err, {
196
+ context: 'AnalyticsService.SDKSessionStart',
197
+ });
198
+ }
199
+ }
200
+ async pageSessionStart() {
201
+ try {
202
+ this.pageSessionId = Math.random().toString(36).substring(2, 15);
203
+ this.isPageSessionActive = true;
204
+ const pageConfig = SDK.getPageConfig();
205
+ const baseMetadata = this.getBaseMetadataFromPageConfig(pageConfig);
206
+ const eventInsightsData = await this.insightsPayloadBuilder.getPayload({
207
+ ontology: {
208
+ kingdom: 'session',
209
+ phylum: 'start',
210
+ class: 'page',
211
+ },
212
+ metadata: {
213
+ ...baseMetadata,
214
+ version,
215
+ session: this.SDKSessionId,
216
+ page_session: this.pageSessionId,
217
+ },
218
+ });
219
+ await this.insightsService.action(eventInsightsData);
220
+ // Start the beacon cycle with recursive setTimeout
221
+ this.scheduleNextBeacon();
222
+ }
223
+ catch (err) {
224
+ console.error(`Failed to start page session: ${err}`);
225
+ captureException(err, {
226
+ context: 'AnalyticsService.pageSessionStart',
227
+ });
228
+ }
229
+ }
230
+ async pageSessionEnd() {
231
+ try {
232
+ this.isPageSessionActive = false;
233
+ const pageConfig = SDK.getPageConfig();
234
+ const baseMetadata = this.getBaseMetadataFromPageConfig(pageConfig);
235
+ const eventInsightsData = await this.insightsPayloadBuilder.getPayload({
236
+ ontology: {
237
+ kingdom: 'session',
238
+ phylum: 'end',
239
+ class: 'page',
240
+ },
241
+ metadata: {
242
+ ...baseMetadata,
243
+ version,
244
+ session: this.SDKSessionId,
245
+ page_session: this.pageSessionId,
246
+ },
247
+ });
248
+ await this.insightsService.action(eventInsightsData);
249
+ }
250
+ catch (err) {
251
+ console.error(`Failed to end page session: ${err}`);
252
+ captureException(err, {
253
+ context: 'AnalyticsService.pageSessionEnd',
254
+ });
255
+ }
256
+ finally {
257
+ // Clear any pending beacon timeouts
258
+ if (this.pageSessionBeaconTimeoutId) {
259
+ clearTimeout(this.pageSessionBeaconTimeoutId);
260
+ this.pageSessionBeaconTimeoutId = null;
261
+ }
262
+ this.pageSessionId = '';
263
+ }
264
+ }
265
+ async pinchBackSessionStart() {
266
+ try {
267
+ this.pinchBackSessionId = Math.random().toString(36).substring(2, 15);
268
+ const pageConfig = SDK.getPageConfig();
269
+ const baseMetadata = this.getBaseMetadataFromPageConfig(pageConfig);
270
+ const eventInsightsData = await this.insightsPayloadBuilder.getPayload({
271
+ ontology: {
272
+ kingdom: 'session',
273
+ phylum: 'start',
274
+ class: 'pinchback',
275
+ },
276
+ metadata: {
277
+ ...baseMetadata,
278
+ version,
279
+ session: this.SDKSessionId,
280
+ page_session: this.pageSessionId,
281
+ pinchback_session: this.pinchBackSessionId,
282
+ },
283
+ });
284
+ await this.insightsService.action(eventInsightsData);
285
+ }
286
+ catch (err) {
287
+ console.error(`Failed to start pinchback session: ${err}`);
288
+ captureException(err, {
289
+ context: 'AnalyticsService.pinchBackSessionStart',
290
+ });
291
+ }
292
+ }
293
+ async pinchBackSessionEnd() {
294
+ try {
295
+ const pageConfig = SDK.getPageConfig();
296
+ const baseMetadata = this.getBaseMetadataFromPageConfig(pageConfig);
297
+ const eventInsightsData = await this.insightsPayloadBuilder.getPayload({
298
+ ontology: {
299
+ kingdom: 'session',
300
+ phylum: 'end',
301
+ class: 'pinchback',
302
+ },
303
+ metadata: {
304
+ ...baseMetadata,
305
+ version,
306
+ session: this.SDKSessionId,
307
+ page_session: this.pageSessionId,
308
+ pinchback_session: this.pinchBackSessionId,
309
+ },
310
+ });
311
+ await this.insightsService.action(eventInsightsData);
312
+ }
313
+ catch (err) {
314
+ console.error(`Failed to end pinchback session: ${err}`);
315
+ captureException(err, {
316
+ context: 'AnalyticsService.pinchBackSessionEnd',
317
+ });
318
+ }
319
+ finally {
320
+ this.pinchBackSessionId = '';
321
+ }
322
+ }
323
+ async SDKSessionEnd() {
324
+ try {
325
+ const eventInsightsData = await this.insightsPayloadBuilder.getPayload({
326
+ ontology: {
327
+ kingdom: 'session',
328
+ phylum: 'end',
329
+ class: 'sdk',
330
+ },
331
+ metadata: {
332
+ version,
333
+ },
334
+ });
335
+ await this.insightsService.action(eventInsightsData);
336
+ }
337
+ catch (err) {
338
+ console.error(`Failed to end SDK session: ${err}`);
339
+ captureException(err, {
340
+ context: 'AnalyticsService.SDKSessionEnd',
341
+ });
342
+ }
343
+ finally {
344
+ this.SDKSessionId = '';
345
+ }
346
+ }
347
+ scheduleNextBeacon() {
348
+ // Only schedule if page session is still active
349
+ if (!this.isPageSessionActive) {
350
+ return;
351
+ }
352
+ const globalConfig = SDK.getGlobalConfig();
353
+ const beaconInterval = globalConfig?.bbd?.analytics?.beacon_interval || SESSION_BEACON_SECONDS;
354
+ this.pageSessionBeaconTimeoutId = setTimeout(async () => {
355
+ await this.sendSessionBeacon();
356
+ }, beaconInterval * 1000);
357
+ }
358
+ async sendSessionBeacon() {
359
+ // Prevent overlapping beacon calls
360
+ if (this.isPageSessionBeaconRunning || !this.isPageSessionActive) {
361
+ return;
362
+ }
363
+ this.isPageSessionBeaconRunning = true;
364
+ try {
365
+ await this.sessionBeacon();
366
+ }
367
+ catch (err) {
368
+ console.error(`Failed to send session beacon: ${err}`);
369
+ captureException(err, {
370
+ context: 'AnalyticsService.sendSessionBeacon',
371
+ SDKSessionId: this.SDKSessionId,
372
+ pageSessionId: this.pageSessionId,
373
+ });
374
+ }
375
+ finally {
376
+ this.isPageSessionBeaconRunning = false;
377
+ // Schedule next beacon only after current one completes
378
+ if (this.isPageSessionActive) {
379
+ this.scheduleNextBeacon();
380
+ }
381
+ }
382
+ }
383
+ async sessionBeacon() {
384
+ const eventInsightsData = await this.insightsPayloadBuilder.getPayload({
385
+ ontology: {
386
+ kingdom: 'session',
387
+ phylum: 'beacon',
388
+ class: 'frequent',
389
+ },
390
+ metadata: {
391
+ paywall_gated: false,
392
+ viewer_id: this.insightsPayloadBuilder.getDevicePermanentID(),
393
+ is_billable: false,
394
+ session: this.SDKSessionId,
395
+ page_session: this.pageSessionId,
396
+ pinchback_session: this.pinchBackSessionId,
397
+ },
398
+ });
399
+ await this.insightsService.action(eventInsightsData);
400
+ }
401
+ }
402
+ export default AnalyticsService;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,122 @@
1
+ import { HttpMethod } from './NetworkManager/NetworkManager';
2
+ import NetworkManagerFactory from './NetworkManager/NetworkManagerFactory';
3
+ /**
4
+ * Service for handling bets-related API calls
5
+ */
6
+ class BetsService {
7
+ constructor(delegate) {
8
+ Object.defineProperty(this, "networkManager", {
9
+ enumerable: true,
10
+ configurable: true,
11
+ writable: true,
12
+ value: void 0
13
+ });
14
+ this.networkManager = NetworkManagerFactory.createBetsNetworkManager(delegate.getBettingAPIBaseURL());
15
+ }
16
+ /**
17
+ * Get non-personalized bets for an event
18
+ *
19
+ * @deprecated Use getPersonalizedBets instead. This method is kept for backward compatibility.
20
+ * @param eventID - The ID of the event
21
+ * @returns Promise with the bets data
22
+ */
23
+ async getNonPersonalizedBets(eventID) {
24
+ return this.networkManager.externalApiRequest({
25
+ endpoint: this.nonPersonalizedBetsEndpoint(eventID),
26
+ method: HttpMethod.GET,
27
+ params: {},
28
+ headers: {},
29
+ });
30
+ }
31
+ /**
32
+ * Get personalized bets for an event
33
+ *
34
+ * @param eventID - The ID of the event
35
+ * @param swid - The ESPN SWID parameter (format provided by client app delegate)
36
+ * @param jwt - The authorization JWT (empty string for anonymous users)
37
+ * @returns Promise with the personalized bets data
38
+ */
39
+ async getPersonalizedBets(eventID, swid, jwt) {
40
+ return this.networkManager.externalApiRequest({
41
+ endpoint: this.personalizedBetsEndpoint(eventID),
42
+ method: HttpMethod.GET,
43
+ params: { swid },
44
+ headers: { 'x-p13n-auth': jwt },
45
+ });
46
+ }
47
+ /**
48
+ * Get personalized bets for an event with headers
49
+ *
50
+ * @param eventID - The ID of the event
51
+ * @param swid - The ESPN SWID parameter (format provided by client app delegate)
52
+ * @param jwt - The authorization JWT (empty string for anonymous users)
53
+ * @returns Promise with the personalized bets data and headers
54
+ */
55
+ async getPersonalizedBetsWithHeaders(eventID, swid, jwt) {
56
+ return this.networkManager.externalApiRequestWithHeaders({
57
+ endpoint: this.personalizedBetsEndpoint(eventID),
58
+ method: HttpMethod.GET,
59
+ params: { swid },
60
+ headers: { 'x-p13n-auth': jwt },
61
+ });
62
+ }
63
+ /**
64
+ * Start polling for personalized bets
65
+ *
66
+ * @param eventID - The ID of the event
67
+ * @param swid - The ESPN SWID parameter
68
+ * @param jwt - The authorization JWT
69
+ * @param interval - The polling interval in milliseconds
70
+ * @param onData - Callback for successful data fetch
71
+ * @param onError - Callback for errors
72
+ * @returns Object with a stop function to stop polling
73
+ */
74
+ pollPersonalizedBets(eventID, swid, jwt, interval, onData, onError) {
75
+ return this.networkManager.pollExternalApiRequest({
76
+ endpoint: this.personalizedBetsEndpoint(eventID),
77
+ interval,
78
+ method: HttpMethod.GET,
79
+ params: { swid },
80
+ headers: { 'x-p13n-auth': jwt },
81
+ onData,
82
+ onError,
83
+ });
84
+ }
85
+ /**
86
+ * Start polling for personalized bets and return both data and headers
87
+ *
88
+ * @param eventID - The ID of the event
89
+ * @param swid - The ESPN SWID parameter
90
+ * @param jwt - The authorization JWT
91
+ * @param interval - The polling interval in milliseconds
92
+ * @param onData - Callback for successful data fetch with headers
93
+ * @param onError - Callback for errors
94
+ * @returns Object with a stop function to stop polling
95
+ */
96
+ pollPersonalizedBetsWithHeaders(eventID, swid, jwt, interval, onData, onError) {
97
+ return this.networkManager.pollExternalApiRequestWithHeaders({
98
+ endpoint: this.personalizedBetsEndpoint(eventID),
99
+ interval,
100
+ method: HttpMethod.GET,
101
+ params: { swid },
102
+ headers: { 'x-p13n-auth': jwt },
103
+ onData,
104
+ onError,
105
+ });
106
+ }
107
+ /**
108
+ * Get the endpoint for non-personalized bets
109
+ *
110
+ * @deprecated This endpoint is no longer used.
111
+ */
112
+ nonPersonalizedBetsEndpoint(eventID) {
113
+ return `/site/v2/events/${eventID}/odds`;
114
+ }
115
+ /**
116
+ * Get the endpoint for personalized bets
117
+ */
118
+ personalizedBetsEndpoint(eventID) {
119
+ return `/personalized/site/v2/events/${eventID}/odds`;
120
+ }
121
+ }
122
+ export default BetsService;
@@ -0,0 +1,92 @@
1
+ import NetworkManagerFactory from './NetworkManager/NetworkManagerFactory';
2
+ /**
3
+ * Service for handling fantasy API calls
4
+ */
5
+ class FantasyService {
6
+ constructor() {
7
+ Object.defineProperty(this, "fantasyClient", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: void 0
12
+ });
13
+ Object.defineProperty(this, "leagueManagerClient", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: void 0
18
+ });
19
+ Object.defineProperty(this, "promoClient", {
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true,
23
+ value: void 0
24
+ });
25
+ this.fantasyClient = NetworkManagerFactory.createForService({
26
+ externalBaseURL: 'https://fan.api.espn.com/apis/v2/fans',
27
+ serviceType: 'fantasy',
28
+ });
29
+ this.leagueManagerClient = NetworkManagerFactory.createForService({
30
+ externalBaseURL: 'https://lm-api-reads.fantasy.espn.com/apis/v3/games',
31
+ serviceType: 'fantasy',
32
+ });
33
+ this.promoClient = NetworkManagerFactory.createForService({
34
+ externalBaseURL: 'https://client.espncdn.com/ictv/promo.json',
35
+ serviceType: 'fantasy',
36
+ });
37
+ }
38
+ /**
39
+ * Polls the fantasy API at regular intervals
40
+ * @param swid - The SWID of the user
41
+ * @param interval - Polling interval in milliseconds
42
+ * @param onData - Callback invoked with the data on each successful poll
43
+ * @param onError - Optional callback invoked on error
44
+ */
45
+ pollFantasy({ eventId, jwt, swid }, interval, onData, onError) {
46
+ return this.fantasyClient.pollExternalApiRequestWithHeaders({
47
+ endpoint: swid,
48
+ interval,
49
+ headers: {
50
+ 'x-p13n-auth': jwt,
51
+ },
52
+ onData,
53
+ onError,
54
+ params: {
55
+ displayHiddenPrefs: true,
56
+ prefType: 'fantasy',
57
+ context: 'fantasy',
58
+ useCookieAuth: true,
59
+ source: 'fantasyictv-bbd',
60
+ featureFlags: 'challengeEntries',
61
+ filterType: 'FANTASY_CTV',
62
+ platform: 'fantasyictv_bbd',
63
+ swid,
64
+ eventId,
65
+ },
66
+ });
67
+ }
68
+ pollLeagueManager({ game, leagueId, seasonId, token, proGameId, teamId, }, interval, onData, onError) {
69
+ return this.leagueManagerClient.pollExternalApiRequestWithHeaders({
70
+ endpoint: `/${game}/seasons/${seasonId}/segments/0/leagues/${leagueId}/scoreboard`,
71
+ interval,
72
+ onData,
73
+ onError,
74
+ headers: {
75
+ 'x-p13n-auth': token,
76
+ },
77
+ params: {
78
+ view: 'ictv_scoreboard',
79
+ platform: 'fantasyictv_bbd',
80
+ proGameId,
81
+ teamId,
82
+ },
83
+ });
84
+ }
85
+ getPromo() {
86
+ return this.promoClient.externalApiRequest({
87
+ endpoint: '',
88
+ useCache: true,
89
+ });
90
+ }
91
+ }
92
+ export default FantasyService;
@@ -0,0 +1,9 @@
1
+ import { Observable } from '../../helpers/Observable';
2
+ import { PageConfig } from './types';
3
+ export default class PageService {
4
+ configObservable: Observable<any>;
5
+ private client;
6
+ constructor();
7
+ fetchPageConfig(siteId: string, eventId: string): Promise<PageConfig | null>;
8
+ static isPanelAvailable(pageConfig: PageConfig | null, panelType: string): any;
9
+ }