@maestro_io/maestro-web-sdk 5.2.1 → 5.3.0

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 (688) hide show
  1. package/README.md +25 -0
  2. package/dist/index.d.ts +7 -6
  3. package/dist/maestro-web-sdk.esm.js +1 -10
  4. package/dist/maestro-web-sdk.esm.js.map +1 -1
  5. package/dist/maestro-web-sdk.umd.js +1 -10
  6. package/dist/maestro-web-sdk.umd.js.map +1 -1
  7. package/package.json +32 -33
  8. package/dist/1.maestro-web-sdk.esm.js +0 -2
  9. package/dist/1.maestro-web-sdk.esm.js.map +0 -1
  10. package/dist/10.maestro-web-sdk.esm.js +0 -2
  11. package/dist/10.maestro-web-sdk.esm.js.map +0 -1
  12. package/dist/11.maestro-web-sdk.esm.js +0 -2
  13. package/dist/11.maestro-web-sdk.esm.js.map +0 -1
  14. package/dist/12.maestro-web-sdk.esm.js +0 -2
  15. package/dist/12.maestro-web-sdk.esm.js.map +0 -1
  16. package/dist/13.maestro-web-sdk.esm.js +0 -2
  17. package/dist/13.maestro-web-sdk.esm.js.map +0 -1
  18. package/dist/14.maestro-web-sdk.esm.js +0 -2
  19. package/dist/14.maestro-web-sdk.esm.js.map +0 -1
  20. package/dist/15.maestro-web-sdk.esm.js +0 -2
  21. package/dist/15.maestro-web-sdk.esm.js.map +0 -1
  22. package/dist/16.maestro-web-sdk.esm.js +0 -2
  23. package/dist/16.maestro-web-sdk.esm.js.map +0 -1
  24. package/dist/17.maestro-web-sdk.esm.js +0 -2
  25. package/dist/17.maestro-web-sdk.esm.js.map +0 -1
  26. package/dist/18.maestro-web-sdk.esm.js +0 -2
  27. package/dist/18.maestro-web-sdk.esm.js.map +0 -1
  28. package/dist/19.maestro-web-sdk.esm.js +0 -2
  29. package/dist/19.maestro-web-sdk.esm.js.map +0 -1
  30. package/dist/2.maestro-web-sdk.esm.js +0 -2
  31. package/dist/2.maestro-web-sdk.esm.js.map +0 -1
  32. package/dist/20.maestro-web-sdk.esm.js +0 -2
  33. package/dist/20.maestro-web-sdk.esm.js.map +0 -1
  34. package/dist/21.maestro-web-sdk.esm.js +0 -2
  35. package/dist/21.maestro-web-sdk.esm.js.map +0 -1
  36. package/dist/22.maestro-web-sdk.esm.js +0 -2
  37. package/dist/22.maestro-web-sdk.esm.js.map +0 -1
  38. package/dist/23.maestro-web-sdk.esm.js +0 -2
  39. package/dist/23.maestro-web-sdk.esm.js.map +0 -1
  40. package/dist/24.maestro-web-sdk.esm.js +0 -2
  41. package/dist/24.maestro-web-sdk.esm.js.map +0 -1
  42. package/dist/25.maestro-web-sdk.esm.js +0 -2
  43. package/dist/25.maestro-web-sdk.esm.js.map +0 -1
  44. package/dist/26.maestro-web-sdk.esm.js +0 -2
  45. package/dist/26.maestro-web-sdk.esm.js.map +0 -1
  46. package/dist/27.maestro-web-sdk.esm.js +0 -2
  47. package/dist/27.maestro-web-sdk.esm.js.map +0 -1
  48. package/dist/28.maestro-web-sdk.esm.js +0 -2
  49. package/dist/28.maestro-web-sdk.esm.js.map +0 -1
  50. package/dist/29.maestro-web-sdk.esm.js +0 -2
  51. package/dist/29.maestro-web-sdk.esm.js.map +0 -1
  52. package/dist/3.maestro-web-sdk.esm.js +0 -2
  53. package/dist/3.maestro-web-sdk.esm.js.map +0 -1
  54. package/dist/30.maestro-web-sdk.esm.js +0 -2
  55. package/dist/30.maestro-web-sdk.esm.js.map +0 -1
  56. package/dist/31.maestro-web-sdk.esm.js +0 -2
  57. package/dist/31.maestro-web-sdk.esm.js.map +0 -1
  58. package/dist/32.maestro-web-sdk.esm.js +0 -2
  59. package/dist/32.maestro-web-sdk.esm.js.map +0 -1
  60. package/dist/33.maestro-web-sdk.esm.js +0 -2
  61. package/dist/33.maestro-web-sdk.esm.js.map +0 -1
  62. package/dist/34.maestro-web-sdk.esm.js +0 -2
  63. package/dist/34.maestro-web-sdk.esm.js.map +0 -1
  64. package/dist/35.maestro-web-sdk.esm.js +0 -2
  65. package/dist/35.maestro-web-sdk.esm.js.map +0 -1
  66. package/dist/36.maestro-web-sdk.esm.js +0 -2
  67. package/dist/36.maestro-web-sdk.esm.js.map +0 -1
  68. package/dist/37.maestro-web-sdk.esm.js +0 -2
  69. package/dist/37.maestro-web-sdk.esm.js.map +0 -1
  70. package/dist/38.maestro-web-sdk.esm.js +0 -2
  71. package/dist/38.maestro-web-sdk.esm.js.map +0 -1
  72. package/dist/39.maestro-web-sdk.esm.js +0 -2
  73. package/dist/39.maestro-web-sdk.esm.js.map +0 -1
  74. package/dist/4.maestro-web-sdk.esm.js +0 -2
  75. package/dist/4.maestro-web-sdk.esm.js.map +0 -1
  76. package/dist/40.maestro-web-sdk.esm.js +0 -2
  77. package/dist/40.maestro-web-sdk.esm.js.map +0 -1
  78. package/dist/5.maestro-web-sdk.esm.js +0 -2
  79. package/dist/5.maestro-web-sdk.esm.js.map +0 -1
  80. package/dist/6.maestro-web-sdk.esm.js +0 -2
  81. package/dist/6.maestro-web-sdk.esm.js.map +0 -1
  82. package/dist/7.maestro-web-sdk.esm.js +0 -2
  83. package/dist/7.maestro-web-sdk.esm.js.map +0 -1
  84. package/dist/8.maestro-web-sdk.esm.js +0 -2
  85. package/dist/8.maestro-web-sdk.esm.js.map +0 -1
  86. package/dist/9.maestro-web-sdk.esm.js +0 -2
  87. package/dist/9.maestro-web-sdk.esm.js.map +0 -1
  88. package/dist/package.json +0 -94
  89. package/dist/src/components/atoms/BaseButton/BaseButton.d.ts +0 -7
  90. package/dist/src/components/atoms/BaseButton/BaseButton.js +0 -11
  91. package/dist/src/components/atoms/BaseButton/index.d.ts +0 -2
  92. package/dist/src/components/atoms/BaseButton/index.js +0 -2
  93. package/dist/src/components/atoms/Image/index.d.ts +0 -13
  94. package/dist/src/components/atoms/Image/index.js +0 -34
  95. package/dist/src/components/atoms/Rive/index.d.ts +0 -221
  96. package/dist/src/components/atoms/Rive/index.js +0 -53
  97. package/dist/src/components/atoms/SvgIcon/AddIcon.d.ts +0 -3
  98. package/dist/src/components/atoms/SvgIcon/AddIcon.js +0 -6
  99. package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.d.ts +0 -3
  100. package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.js +0 -9
  101. package/dist/src/components/atoms/SvgIcon/BetsIcon.d.ts +0 -3
  102. package/dist/src/components/atoms/SvgIcon/BetsIcon.js +0 -8
  103. package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.d.ts +0 -7
  104. package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.js +0 -11
  105. package/dist/src/components/atoms/SvgIcon/BuilderIcon.d.ts +0 -3
  106. package/dist/src/components/atoms/SvgIcon/BuilderIcon.js +0 -8
  107. package/dist/src/components/atoms/SvgIcon/ChatIcon.d.ts +0 -3
  108. package/dist/src/components/atoms/SvgIcon/ChatIcon.js +0 -6
  109. package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.d.ts +0 -3
  110. package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.js +0 -6
  111. package/dist/src/components/atoms/SvgIcon/CollapseIcon.d.ts +0 -3
  112. package/dist/src/components/atoms/SvgIcon/CollapseIcon.js +0 -6
  113. package/dist/src/components/atoms/SvgIcon/ExpandIcon.d.ts +0 -3
  114. package/dist/src/components/atoms/SvgIcon/ExpandIcon.js +0 -6
  115. package/dist/src/components/atoms/SvgIcon/FantasyIcon.d.ts +0 -7
  116. package/dist/src/components/atoms/SvgIcon/FantasyIcon.js +0 -15
  117. package/dist/src/components/atoms/SvgIcon/FlameIcon.d.ts +0 -7
  118. package/dist/src/components/atoms/SvgIcon/FlameIcon.js +0 -11
  119. package/dist/src/components/atoms/SvgIcon/FoxKeyPlaysIcon.d.ts +0 -3
  120. package/dist/src/components/atoms/SvgIcon/FoxKeyPlaysIcon.js +0 -7
  121. package/dist/src/components/atoms/SvgIcon/FoxMultiViewIcon.d.ts +0 -3
  122. package/dist/src/components/atoms/SvgIcon/FoxMultiViewIcon.js +0 -10
  123. package/dist/src/components/atoms/SvgIcon/FoxStatsIcon.d.ts +0 -3
  124. package/dist/src/components/atoms/SvgIcon/FoxStatsIcon.js +0 -7
  125. package/dist/src/components/atoms/SvgIcon/HelloWorldIcon.d.ts +0 -3
  126. package/dist/src/components/atoms/SvgIcon/HelloWorldIcon.js +0 -6
  127. package/dist/src/components/atoms/SvgIcon/Icon.d.ts +0 -15
  128. package/dist/src/components/atoms/SvgIcon/Icon.js +0 -70
  129. package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.d.ts +0 -6
  130. package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.js +0 -10
  131. package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.d.ts +0 -7
  132. package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.js +0 -11
  133. package/dist/src/components/atoms/SvgIcon/PlayIcon.d.ts +0 -6
  134. package/dist/src/components/atoms/SvgIcon/PlayIcon.js +0 -8
  135. package/dist/src/components/atoms/SvgIcon/ShopIcon.d.ts +0 -5
  136. package/dist/src/components/atoms/SvgIcon/ShopIcon.js +0 -7
  137. package/dist/src/components/atoms/SvgIcon/ShopifyIcon.d.ts +0 -3
  138. package/dist/src/components/atoms/SvgIcon/ShopifyIcon.js +0 -6
  139. package/dist/src/components/atoms/SvgIcon/StatsIcon.d.ts +0 -6
  140. package/dist/src/components/atoms/SvgIcon/StatsIcon.js +0 -12
  141. package/dist/src/components/atoms/SvgIcon/TimesIcon.d.ts +0 -3
  142. package/dist/src/components/atoms/SvgIcon/TimesIcon.js +0 -6
  143. package/dist/src/components/atoms/SvgIcon/WarningIcon.d.ts +0 -6
  144. package/dist/src/components/atoms/SvgIcon/WarningIcon.js +0 -8
  145. package/dist/src/components/atoms/SvgIcon/index.d.ts +0 -2
  146. package/dist/src/components/atoms/SvgIcon/index.js +0 -2
  147. package/dist/src/components/core/App/App.d.ts +0 -11
  148. package/dist/src/components/core/App/App.js +0 -35
  149. package/dist/src/components/core/App/index.d.ts +0 -2
  150. package/dist/src/components/core/App/index.js +0 -2
  151. package/dist/src/components/core/PanelManager/PanelManager.d.ts +0 -21
  152. package/dist/src/components/core/PanelManager/PanelManager.js +0 -104
  153. package/dist/src/components/core/PanelManager/index.d.ts +0 -2
  154. package/dist/src/components/core/PanelManager/index.js +0 -2
  155. package/dist/src/components/core/ScrollableContainer/FocusableItem.d.ts +0 -11
  156. package/dist/src/components/core/ScrollableContainer/FocusableItem.js +0 -24
  157. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.d.ts +0 -54
  158. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.js +0 -111
  159. package/dist/src/components/core/ScrollableContainer/index.d.ts +0 -6
  160. package/dist/src/components/core/ScrollableContainer/index.js +0 -5
  161. package/dist/src/components/core/ScrollableContainer/useScrollableContainer.d.ts +0 -14
  162. package/dist/src/components/core/ScrollableContainer/useScrollableContainer.js +0 -22
  163. package/dist/src/components/molecules/ActionButton/ActionButton.d.ts +0 -96
  164. package/dist/src/components/molecules/ActionButton/ActionButton.js +0 -15
  165. package/dist/src/components/molecules/ActionButton/index.d.ts +0 -2
  166. package/dist/src/components/molecules/ActionButton/index.js +0 -2
  167. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.d.ts +0 -16
  168. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.js +0 -50
  169. package/dist/src/components/molecules/HeadshotImage/index.d.ts +0 -2
  170. package/dist/src/components/molecules/HeadshotImage/index.js +0 -2
  171. package/dist/src/components/molecules/NetworkDialog/NetworkDialog.d.ts +0 -11
  172. package/dist/src/components/molecules/NetworkDialog/NetworkDialog.js +0 -34
  173. package/dist/src/components/molecules/NetworkDialog/index.d.ts +0 -2
  174. package/dist/src/components/molecules/NetworkDialog/index.js +0 -2
  175. package/dist/src/components/molecules/NetworkError/NetworkError.d.ts +0 -104
  176. package/dist/src/components/molecules/NetworkError/NetworkError.js +0 -26
  177. package/dist/src/components/molecules/NetworkError/index.d.ts +0 -2
  178. package/dist/src/components/molecules/NetworkError/index.js +0 -2
  179. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.d.ts +0 -107
  180. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.js +0 -36
  181. package/dist/src/components/molecules/PanelNavButton/index.d.ts +0 -2
  182. package/dist/src/components/molecules/PanelNavButton/index.js +0 -2
  183. package/dist/src/components/molecules/SegmentButton/SegmentButton.d.ts +0 -9
  184. package/dist/src/components/molecules/SegmentButton/SegmentButton.js +0 -10
  185. package/dist/src/components/molecules/SegmentButton/index.d.ts +0 -2
  186. package/dist/src/components/molecules/SegmentButton/index.js +0 -2
  187. package/dist/src/components/molecules/TabLoadError/TabLoadError.d.ts +0 -96
  188. package/dist/src/components/molecules/TabLoadError/TabLoadError.js +0 -14
  189. package/dist/src/components/molecules/TabLoadError/index.d.ts +0 -2
  190. package/dist/src/components/molecules/TabLoadError/index.js +0 -2
  191. package/dist/src/components/molecules/WatchButton/WatchButton.d.ts +0 -10
  192. package/dist/src/components/molecules/WatchButton/WatchButton.js +0 -15
  193. package/dist/src/components/molecules/WatchButton/index.d.ts +0 -2
  194. package/dist/src/components/molecules/WatchButton/index.js +0 -2
  195. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.d.ts +0 -17
  196. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.js +0 -64
  197. package/dist/src/components/organisms/PanelNavigation/index.d.ts +0 -2
  198. package/dist/src/components/organisms/PanelNavigation/index.js +0 -2
  199. package/dist/src/components/organisms/SegmentController/SegmentController.d.ts +0 -12
  200. package/dist/src/components/organisms/SegmentController/SegmentController.js +0 -35
  201. package/dist/src/components/organisms/SegmentController/index.d.ts +0 -3
  202. package/dist/src/components/organisms/SegmentController/index.js +0 -2
  203. package/dist/src/development/MaestroEventDelegate.d.ts +0 -27
  204. package/dist/src/development/MaestroEventDelegate.js +0 -110
  205. package/dist/src/development/TimeSeek.d.ts +0 -22
  206. package/dist/src/development/TimeSeek.js +0 -218
  207. package/dist/src/development/development.d.ts +0 -1
  208. package/dist/src/development/development.js +0 -39
  209. package/dist/src/external/AxiosNetworkClient.d.ts +0 -28
  210. package/dist/src/external/AxiosNetworkClient.js +0 -110
  211. package/dist/src/external/LocalStorageCacheManager.d.ts +0 -65
  212. package/dist/src/external/LocalStorageCacheManager.js +0 -213
  213. package/dist/src/external/ReactRenderer.d.ts +0 -17
  214. package/dist/src/external/ReactRenderer.js +0 -66
  215. package/dist/src/external/mocks/MockExternalNetworkClient.d.ts +0 -104
  216. package/dist/src/external/mocks/MockExternalNetworkClient.js +0 -187
  217. package/dist/src/external/ports/cacheManager.d.ts +0 -17
  218. package/dist/src/external/ports/cacheManager.js +0 -1
  219. package/dist/src/external/ports/networkClient.d.ts +0 -19
  220. package/dist/src/external/ports/networkClient.js +0 -1
  221. package/dist/src/external/ports/renderer.d.ts +0 -4
  222. package/dist/src/external/ports/renderer.js +0 -1
  223. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.d.ts +0 -8
  224. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.js +0 -7
  225. package/dist/src/external/spatial-navigation/index.d.ts +0 -4
  226. package/dist/src/external/spatial-navigation/index.js +0 -3
  227. package/dist/src/external/spatial-navigation/measureLayout.d.ts +0 -2
  228. package/dist/src/external/spatial-navigation/measureLayout.js +0 -30
  229. package/dist/src/external/spatial-navigation/spatialNavigation.d.ts +0 -160
  230. package/dist/src/external/spatial-navigation/spatialNavigation.js +0 -944
  231. package/dist/src/external/spatial-navigation/utils.d.ts +0 -22
  232. package/dist/src/external/spatial-navigation/utils.js +0 -6
  233. package/dist/src/external/spatial-navigation/visualDebugger.d.ts +0 -17
  234. package/dist/src/external/spatial-navigation/visualDebugger.js +0 -76
  235. package/dist/src/external/spatial-navigation/withFocusable.d.ts +0 -131
  236. package/dist/src/external/spatial-navigation/withFocusable.js +0 -254
  237. package/dist/src/helpers/Observable.d.ts +0 -12
  238. package/dist/src/helpers/Observable.js +0 -37
  239. package/dist/src/helpers/site.d.ts +0 -1
  240. package/dist/src/helpers/site.js +0 -6
  241. package/dist/src/helpers/siteConfig.d.ts +0 -1
  242. package/dist/src/helpers/siteConfig.js +0 -5
  243. package/dist/src/helpers/strings.d.ts +0 -2
  244. package/dist/src/helpers/strings.js +0 -14
  245. package/dist/src/helpers/url.d.ts +0 -1
  246. package/dist/src/helpers/url.js +0 -12
  247. package/dist/src/hooks/useMaxHeightToBottom.d.ts +0 -11
  248. package/dist/src/hooks/useMaxHeightToBottom.js +0 -48
  249. package/dist/src/index.d.ts +0 -53
  250. package/dist/src/index.js +0 -197
  251. package/dist/src/interfaces/IMaestroEvent.d.ts +0 -108
  252. package/dist/src/interfaces/IMaestroEvent.js +0 -1
  253. package/dist/src/interfaces/IMaestroEventDelegate.d.ts +0 -81
  254. package/dist/src/interfaces/IMaestroEventDelegate.js +0 -1
  255. package/dist/src/interfaces/IMaestroManager.d.ts +0 -81
  256. package/dist/src/interfaces/IMaestroManager.js +0 -1
  257. package/dist/src/interfaces/IUserSettings.d.ts +0 -44
  258. package/dist/src/interfaces/IUserSettings.js +0 -20
  259. package/dist/src/models/IModel.d.ts +0 -7
  260. package/dist/src/models/IModel.js +0 -1
  261. package/dist/src/models/IPanel.d.ts +0 -19
  262. package/dist/src/models/IPanel.js +0 -12
  263. package/dist/src/models/ITheme.d.ts +0 -77
  264. package/dist/src/models/ITheme.js +0 -20
  265. package/dist/src/modules/espn/bets/interfaces/IBets.d.ts +0 -192
  266. package/dist/src/modules/espn/bets/interfaces/IBets.js +0 -1
  267. package/dist/src/modules/espn/bets/interfaces/IBetsViewModel.d.ts +0 -5
  268. package/dist/src/modules/espn/bets/interfaces/IBetsViewModel.js +0 -1
  269. package/dist/src/modules/espn/bets/mocks.d.ts +0 -2
  270. package/dist/src/modules/espn/bets/mocks.js +0 -573
  271. package/dist/src/modules/espn/bets/services/BetsService.d.ts +0 -81
  272. package/dist/src/modules/espn/bets/services/BetsService.js +0 -123
  273. package/dist/src/modules/espn/bets/types/BetsAnalyticsTypes.d.ts +0 -8
  274. package/dist/src/modules/espn/bets/types/BetsAnalyticsTypes.js +0 -1
  275. package/dist/src/modules/espn/bets/view/BetsView.d.ts +0 -30
  276. package/dist/src/modules/espn/bets/view/BetsView.js +0 -169
  277. package/dist/src/modules/espn/bets/view/HotProps/HotPropsView.d.ts +0 -103
  278. package/dist/src/modules/espn/bets/view/HotProps/HotPropsView.js +0 -133
  279. package/dist/src/modules/espn/bets/view/SixPack/SixPackView.d.ts +0 -9
  280. package/dist/src/modules/espn/bets/view/SixPack/SixPackView.js +0 -77
  281. package/dist/src/modules/espn/bets/view/UserBets/BetResult/BetResult.d.ts +0 -6
  282. package/dist/src/modules/espn/bets/view/UserBets/BetResult/BetResult.js +0 -6
  283. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCard.d.ts +0 -104
  284. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCard.js +0 -140
  285. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCardEvent.d.ts +0 -16
  286. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCardEvent.js +0 -8
  287. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCardFooter.d.ts +0 -7
  288. package/dist/src/modules/espn/bets/view/UserBets/BetsCard/BetsCardFooter.js +0 -18
  289. package/dist/src/modules/espn/bets/view/UserBets/Boost/Boost.d.ts +0 -7
  290. package/dist/src/modules/espn/bets/view/UserBets/Boost/Boost.js +0 -6
  291. package/dist/src/modules/espn/bets/view/UserBets/OutcomeBadge/OutcomeBadge.d.ts +0 -6
  292. package/dist/src/modules/espn/bets/view/UserBets/OutcomeBadge/OutcomeBadge.js +0 -9
  293. package/dist/src/modules/espn/bets/view/UserBets/Parlay/Parlay.d.ts +0 -8
  294. package/dist/src/modules/espn/bets/view/UserBets/Parlay/Parlay.js +0 -13
  295. package/dist/src/modules/espn/bets/view/UserBets/Straight/Straight.d.ts +0 -7
  296. package/dist/src/modules/espn/bets/view/UserBets/Straight/Straight.js +0 -6
  297. package/dist/src/modules/espn/bets/view/UserBets/Teaser/Teaser.d.ts +0 -7
  298. package/dist/src/modules/espn/bets/view/UserBets/Teaser/Teaser.js +0 -13
  299. package/dist/src/modules/espn/bets/view/UserBets/UserBetsView.d.ts +0 -25
  300. package/dist/src/modules/espn/bets/view/UserBets/UserBetsView.js +0 -107
  301. package/dist/src/modules/espn/bets/view/components/Bet/Bet.d.ts +0 -10
  302. package/dist/src/modules/espn/bets/view/components/Bet/Bet.js +0 -41
  303. package/dist/src/modules/espn/bets/view/components/BetPill/BetPill.d.ts +0 -6
  304. package/dist/src/modules/espn/bets/view/components/BetPill/BetPill.js +0 -6
  305. package/dist/src/modules/espn/bets/view/components/BetsCard/BetsCard.d.ts +0 -10
  306. package/dist/src/modules/espn/bets/view/components/BetsCard/BetsCard.js +0 -24
  307. package/dist/src/modules/espn/bets/view/components/BetsCard/BetsCardHeader.d.ts +0 -16
  308. package/dist/src/modules/espn/bets/view/components/BetsCard/BetsCardHeader.js +0 -20
  309. package/dist/src/modules/espn/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.d.ts +0 -7
  310. package/dist/src/modules/espn/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.js +0 -31
  311. package/dist/src/modules/espn/bets/view/components/GamblingDisclaimer/index.d.ts +0 -1
  312. package/dist/src/modules/espn/bets/view/components/GamblingDisclaimer/index.js +0 -1
  313. package/dist/src/modules/espn/bets/view/components/LocationWarning/LocationWarning.d.ts +0 -10
  314. package/dist/src/modules/espn/bets/view/components/LocationWarning/LocationWarning.js +0 -16
  315. package/dist/src/modules/espn/bets/view/components/PromoCodeBanner/PromoCodeBanner.d.ts +0 -5
  316. package/dist/src/modules/espn/bets/view/components/PromoCodeBanner/PromoCodeBanner.js +0 -45
  317. package/dist/src/modules/espn/bets/view/components/PromoCodeBanner/index.d.ts +0 -1
  318. package/dist/src/modules/espn/bets/view/components/PromoCodeBanner/index.js +0 -1
  319. package/dist/src/modules/espn/bets/view-model/BetsViewModel.d.ts +0 -218
  320. package/dist/src/modules/espn/bets/view-model/BetsViewModel.js +0 -947
  321. package/dist/src/modules/espn/components/TabLoadError/TabLoadError.d.ts +0 -96
  322. package/dist/src/modules/espn/components/TabLoadError/TabLoadError.js +0 -14
  323. package/dist/src/modules/espn/components/TabLoadError/index.d.ts +0 -2
  324. package/dist/src/modules/espn/components/TabLoadError/index.js +0 -2
  325. package/dist/src/modules/espn/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.d.ts +0 -28
  326. package/dist/src/modules/espn/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.js +0 -107
  327. package/dist/src/modules/espn/fantasy/components/ExpandedAthleteList/index.d.ts +0 -1
  328. package/dist/src/modules/espn/fantasy/components/ExpandedAthleteList/index.js +0 -1
  329. package/dist/src/modules/espn/fantasy/components/LeagueCard/LeagueCard.d.ts +0 -104
  330. package/dist/src/modules/espn/fantasy/components/LeagueCard/LeagueCard.js +0 -20
  331. package/dist/src/modules/espn/fantasy/components/LeagueCard/index.d.ts +0 -2
  332. package/dist/src/modules/espn/fantasy/components/LeagueCard/index.js +0 -2
  333. package/dist/src/modules/espn/fantasy/components/TopPlayerCard/TopPlayerCard.d.ts +0 -101
  334. package/dist/src/modules/espn/fantasy/components/TopPlayerCard/TopPlayerCard.js +0 -29
  335. package/dist/src/modules/espn/fantasy/components/TopPlayerCard/index.d.ts +0 -2
  336. package/dist/src/modules/espn/fantasy/components/TopPlayerCard/index.js +0 -2
  337. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/TournamentOverflowQR.d.ts +0 -103
  338. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/TournamentOverflowQR.js +0 -28
  339. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/index.d.ts +0 -1
  340. package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/index.js +0 -1
  341. package/dist/src/modules/espn/fantasy/mocks.d.ts +0 -7620
  342. package/dist/src/modules/espn/fantasy/mocks.js +0 -3682
  343. package/dist/src/modules/espn/fantasy/services/FantasyService.d.ts +0 -76
  344. package/dist/src/modules/espn/fantasy/services/FantasyService.js +0 -127
  345. package/dist/src/modules/espn/fantasy/types.d.ts +0 -294
  346. package/dist/src/modules/espn/fantasy/types.js +0 -9
  347. package/dist/src/modules/espn/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.d.ts +0 -21
  348. package/dist/src/modules/espn/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.js +0 -74
  349. package/dist/src/modules/espn/fantasy/view/ActiveAthletesMarquee/index.d.ts +0 -2
  350. package/dist/src/modules/espn/fantasy/view/ActiveAthletesMarquee/index.js +0 -2
  351. package/dist/src/modules/espn/fantasy/view/FantasyHeaderView.d.ts +0 -8
  352. package/dist/src/modules/espn/fantasy/view/FantasyHeaderView.js +0 -8
  353. package/dist/src/modules/espn/fantasy/view/FantasyItemView.d.ts +0 -8
  354. package/dist/src/modules/espn/fantasy/view/FantasyItemView.js +0 -48
  355. package/dist/src/modules/espn/fantasy/view/FantasyView.d.ts +0 -34
  356. package/dist/src/modules/espn/fantasy/view/FantasyView.js +0 -213
  357. package/dist/src/modules/espn/fantasy/view/InactiveLeague/DraftDateCountdown.d.ts +0 -23
  358. package/dist/src/modules/espn/fantasy/view/InactiveLeague/DraftDateCountdown.js +0 -95
  359. package/dist/src/modules/espn/fantasy/view/InactiveLeague/InactiveLeague.d.ts +0 -100
  360. package/dist/src/modules/espn/fantasy/view/InactiveLeague/InactiveLeague.js +0 -13
  361. package/dist/src/modules/espn/fantasy/view/InactiveLeague/index.d.ts +0 -2
  362. package/dist/src/modules/espn/fantasy/view/InactiveLeague/index.js +0 -2
  363. package/dist/src/modules/espn/fantasy/view/LoginView/LoginView.d.ts +0 -96
  364. package/dist/src/modules/espn/fantasy/view/LoginView/LoginView.js +0 -27
  365. package/dist/src/modules/espn/fantasy/view/LoginView/index.d.ts +0 -2
  366. package/dist/src/modules/espn/fantasy/view/LoginView/index.js +0 -2
  367. package/dist/src/modules/espn/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.d.ts +0 -97
  368. package/dist/src/modules/espn/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.js +0 -25
  369. package/dist/src/modules/espn/fantasy/view/MatchupPair/DoubleAthleteCard/index.d.ts +0 -2
  370. package/dist/src/modules/espn/fantasy/view/MatchupPair/DoubleAthleteCard/index.js +0 -2
  371. package/dist/src/modules/espn/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.d.ts +0 -14
  372. package/dist/src/modules/espn/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.js +0 -9
  373. package/dist/src/modules/espn/fantasy/view/MatchupPair/MatchupPair.d.ts +0 -102
  374. package/dist/src/modules/espn/fantasy/view/MatchupPair/MatchupPair.js +0 -118
  375. package/dist/src/modules/espn/fantasy/view/MatchupPair/index.d.ts +0 -2
  376. package/dist/src/modules/espn/fantasy/view/MatchupPair/index.js +0 -2
  377. package/dist/src/modules/espn/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.d.ts +0 -14
  378. package/dist/src/modules/espn/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.js +0 -9
  379. package/dist/src/modules/espn/fantasy/view/MatchupSingle/MatchupSingle.d.ts +0 -102
  380. package/dist/src/modules/espn/fantasy/view/MatchupSingle/MatchupSingle.js +0 -108
  381. package/dist/src/modules/espn/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.d.ts +0 -97
  382. package/dist/src/modules/espn/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.js +0 -18
  383. package/dist/src/modules/espn/fantasy/view/MatchupSingle/SingleAthleteCard/index.d.ts +0 -2
  384. package/dist/src/modules/espn/fantasy/view/MatchupSingle/SingleAthleteCard/index.js +0 -2
  385. package/dist/src/modules/espn/fantasy/view/MatchupSingle/index.d.ts +0 -2
  386. package/dist/src/modules/espn/fantasy/view/MatchupSingle/index.js +0 -2
  387. package/dist/src/modules/espn/fantasy/view/PromoView/PromoView.d.ts +0 -100
  388. package/dist/src/modules/espn/fantasy/view/PromoView/PromoView.js +0 -12
  389. package/dist/src/modules/espn/fantasy/view/PromoView/index.d.ts +0 -2
  390. package/dist/src/modules/espn/fantasy/view/PromoView/index.js +0 -2
  391. package/dist/src/modules/espn/fantasy/view/TournamentBracketCard/TournamentBracketCard.d.ts +0 -101
  392. package/dist/src/modules/espn/fantasy/view/TournamentBracketCard/TournamentBracketCard.js +0 -37
  393. package/dist/src/modules/espn/fantasy/view/TournamentBracketCard/index.d.ts +0 -2
  394. package/dist/src/modules/espn/fantasy/view/TournamentBracketCard/index.js +0 -2
  395. package/dist/src/modules/espn/fantasy/view/index.d.ts +0 -2
  396. package/dist/src/modules/espn/fantasy/view/index.js +0 -2
  397. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.FantasyPolling.d.ts +0 -32
  398. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.FantasyPolling.js +0 -135
  399. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.d.ts +0 -32
  400. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.js +0 -144
  401. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.TournamentPolling.d.ts +0 -32
  402. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.TournamentPolling.js +0 -143
  403. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.d.ts +0 -168
  404. package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.js +0 -815
  405. package/dist/src/modules/espn/key-plays/constants.d.ts +0 -3
  406. package/dist/src/modules/espn/key-plays/constants.js +0 -292
  407. package/dist/src/modules/espn/key-plays/interfaces/IKeyPlays.d.ts +0 -32
  408. package/dist/src/modules/espn/key-plays/interfaces/IKeyPlays.js +0 -14
  409. package/dist/src/modules/espn/key-plays/interfaces/IKeyPlaysResponse.d.ts +0 -44
  410. package/dist/src/modules/espn/key-plays/interfaces/IKeyPlaysResponse.js +0 -1
  411. package/dist/src/modules/espn/key-plays/interfaces/IKeyPlaysViewModel.d.ts +0 -17
  412. package/dist/src/modules/espn/key-plays/interfaces/IKeyPlaysViewModel.js +0 -1
  413. package/dist/src/modules/espn/key-plays/view/KeyPlayCardScoreTagView.d.ts +0 -9
  414. package/dist/src/modules/espn/key-plays/view/KeyPlayCardScoreTagView.js +0 -16
  415. package/dist/src/modules/espn/key-plays/view/KeyPlayCardView.d.ts +0 -27
  416. package/dist/src/modules/espn/key-plays/view/KeyPlayCardView.js +0 -115
  417. package/dist/src/modules/espn/key-plays/view/KeyPlayErrorStateView.d.ts +0 -13
  418. package/dist/src/modules/espn/key-plays/view/KeyPlayErrorStateView.js +0 -65
  419. package/dist/src/modules/espn/key-plays/view/KeyPlaysView.d.ts +0 -39
  420. package/dist/src/modules/espn/key-plays/view/KeyPlaysView.js +0 -179
  421. package/dist/src/modules/espn/key-plays/view-model/KeyPlaysViewModel.d.ts +0 -37
  422. package/dist/src/modules/espn/key-plays/view-model/KeyPlaysViewModel.js +0 -245
  423. package/dist/src/modules/espn/shop/mocks.d.ts +0 -22
  424. package/dist/src/modules/espn/shop/mocks.js +0 -391
  425. package/dist/src/modules/espn/shop/services/ShopService.d.ts +0 -23
  426. package/dist/src/modules/espn/shop/services/ShopService.js +0 -44
  427. package/dist/src/modules/espn/shop/types.d.ts +0 -164
  428. package/dist/src/modules/espn/shop/types.js +0 -7
  429. package/dist/src/modules/espn/shop/view/ProductDetailView/ProductDetailView.d.ts +0 -10
  430. package/dist/src/modules/espn/shop/view/ProductDetailView/ProductDetailView.js +0 -60
  431. package/dist/src/modules/espn/shop/view/ProductDetailView/index.d.ts +0 -2
  432. package/dist/src/modules/espn/shop/view/ProductDetailView/index.js +0 -2
  433. package/dist/src/modules/espn/shop/view/ShopView.d.ts +0 -38
  434. package/dist/src/modules/espn/shop/view/ShopView.js +0 -223
  435. package/dist/src/modules/espn/shop/view/components/BrowseCard/BrowseCard.d.ts +0 -103
  436. package/dist/src/modules/espn/shop/view/components/BrowseCard/BrowseCard.js +0 -23
  437. package/dist/src/modules/espn/shop/view/components/BrowseCard/index.d.ts +0 -2
  438. package/dist/src/modules/espn/shop/view/components/BrowseCard/index.js +0 -2
  439. package/dist/src/modules/espn/shop/view/components/ProductSummaryCard/ProductSummaryCard.d.ts +0 -104
  440. package/dist/src/modules/espn/shop/view/components/ProductSummaryCard/ProductSummaryCard.js +0 -26
  441. package/dist/src/modules/espn/shop/view/components/ProductSummaryCard/index.d.ts +0 -2
  442. package/dist/src/modules/espn/shop/view/components/ProductSummaryCard/index.js +0 -1
  443. package/dist/src/modules/espn/shop/view/components/ShopPromoView/ShopPromoView.d.ts +0 -8
  444. package/dist/src/modules/espn/shop/view/components/ShopPromoView/ShopPromoView.js +0 -19
  445. package/dist/src/modules/espn/shop/view/components/ShopPromoView/index.d.ts +0 -1
  446. package/dist/src/modules/espn/shop/view/components/ShopPromoView/index.js +0 -1
  447. package/dist/src/modules/espn/shop/view/components/ShopSection/ShopSection.d.ts +0 -12
  448. package/dist/src/modules/espn/shop/view/components/ShopSection/ShopSection.js +0 -34
  449. package/dist/src/modules/espn/shop/view/components/ShopSection/index.d.ts +0 -1
  450. package/dist/src/modules/espn/shop/view/components/ShopSection/index.js +0 -1
  451. package/dist/src/modules/espn/shop/view/index.d.ts +0 -2
  452. package/dist/src/modules/espn/shop/view/index.js +0 -2
  453. package/dist/src/modules/espn/shop/view-model/ShopViewModel.ShopPolling.d.ts +0 -31
  454. package/dist/src/modules/espn/shop/view-model/ShopViewModel.ShopPolling.js +0 -111
  455. package/dist/src/modules/espn/shop/view-model/ShopViewModel.d.ts +0 -73
  456. package/dist/src/modules/espn/shop/view-model/ShopViewModel.js +0 -323
  457. package/dist/src/modules/espn/stats/components/TeamStatistic.d.ts +0 -16
  458. package/dist/src/modules/espn/stats/components/TeamStatistic.js +0 -13
  459. package/dist/src/modules/espn/stats/interfaces/IStats.d.ts +0 -330
  460. package/dist/src/modules/espn/stats/interfaces/IStats.js +0 -46
  461. package/dist/src/modules/espn/stats/interfaces/IStatsViewModel.d.ts +0 -7
  462. package/dist/src/modules/espn/stats/interfaces/IStatsViewModel.js +0 -1
  463. package/dist/src/modules/espn/stats/mocks.d.ts +0 -2
  464. package/dist/src/modules/espn/stats/mocks.js +0 -746
  465. package/dist/src/modules/espn/stats/services/StatsService.d.ts +0 -54
  466. package/dist/src/modules/espn/stats/services/StatsService.js +0 -155
  467. package/dist/src/modules/espn/stats/utils/driveSummaryUtils.d.ts +0 -18
  468. package/dist/src/modules/espn/stats/utils/driveSummaryUtils.js +0 -48
  469. package/dist/src/modules/espn/stats/utils/playerStatusUtils.d.ts +0 -4
  470. package/dist/src/modules/espn/stats/utils/playerStatusUtils.js +0 -17
  471. package/dist/src/modules/espn/stats/utils.d.ts +0 -39
  472. package/dist/src/modules/espn/stats/utils.js +0 -62
  473. package/dist/src/modules/espn/stats/view/ActiveAthletes/ActiveAthletes.d.ts +0 -22
  474. package/dist/src/modules/espn/stats/view/ActiveAthletes/ActiveAthletes.js +0 -98
  475. package/dist/src/modules/espn/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.d.ts +0 -4
  476. package/dist/src/modules/espn/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.js +0 -27
  477. package/dist/src/modules/espn/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.d.ts +0 -22
  478. package/dist/src/modules/espn/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.js +0 -89
  479. package/dist/src/modules/espn/stats/view/ActiveAthletes/index.d.ts +0 -2
  480. package/dist/src/modules/espn/stats/view/ActiveAthletes/index.js +0 -2
  481. package/dist/src/modules/espn/stats/view/CareerMatchup/CareerMatchup.d.ts +0 -101
  482. package/dist/src/modules/espn/stats/view/CareerMatchup/CareerMatchup.js +0 -59
  483. package/dist/src/modules/espn/stats/view/CareerMatchup/index.d.ts +0 -1
  484. package/dist/src/modules/espn/stats/view/CareerMatchup/index.js +0 -1
  485. package/dist/src/modules/espn/stats/view/DriveSummary/DrivePlayCard.d.ts +0 -105
  486. package/dist/src/modules/espn/stats/view/DriveSummary/DrivePlayCard.js +0 -32
  487. package/dist/src/modules/espn/stats/view/DriveSummary/DriveSummary.d.ts +0 -10
  488. package/dist/src/modules/espn/stats/view/DriveSummary/DriveSummary.js +0 -40
  489. package/dist/src/modules/espn/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.d.ts +0 -27
  490. package/dist/src/modules/espn/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.js +0 -129
  491. package/dist/src/modules/espn/stats/view/DriveSummary/Header/DriveSummaryHeader.d.ts +0 -12
  492. package/dist/src/modules/espn/stats/view/DriveSummary/Header/DriveSummaryHeader.js +0 -26
  493. package/dist/src/modules/espn/stats/view/DriveSummary/MainStat/MainStat.d.ts +0 -10
  494. package/dist/src/modules/espn/stats/view/DriveSummary/MainStat/MainStat.js +0 -24
  495. package/dist/src/modules/espn/stats/view/DriveSummary/index.d.ts +0 -2
  496. package/dist/src/modules/espn/stats/view/DriveSummary/index.js +0 -2
  497. package/dist/src/modules/espn/stats/view/GameLeaders/GameLeaders.d.ts +0 -9
  498. package/dist/src/modules/espn/stats/view/GameLeaders/GameLeaders.js +0 -22
  499. package/dist/src/modules/espn/stats/view/GameLeaders/index.d.ts +0 -2
  500. package/dist/src/modules/espn/stats/view/GameLeaders/index.js +0 -2
  501. package/dist/src/modules/espn/stats/view/MatchPredictor/DonutChart/DonutChart.d.ts +0 -17
  502. package/dist/src/modules/espn/stats/view/MatchPredictor/DonutChart/DonutChart.js +0 -55
  503. package/dist/src/modules/espn/stats/view/MatchPredictor/DonutChart/index.d.ts +0 -2
  504. package/dist/src/modules/espn/stats/view/MatchPredictor/DonutChart/index.js +0 -1
  505. package/dist/src/modules/espn/stats/view/MatchPredictor/MatchPredictorView.d.ts +0 -100
  506. package/dist/src/modules/espn/stats/view/MatchPredictor/MatchPredictorView.js +0 -60
  507. package/dist/src/modules/espn/stats/view/MatchPredictor/index.d.ts +0 -3
  508. package/dist/src/modules/espn/stats/view/MatchPredictor/index.js +0 -2
  509. package/dist/src/modules/espn/stats/view/Penalties/Penalties.d.ts +0 -9
  510. package/dist/src/modules/espn/stats/view/Penalties/Penalties.js +0 -6
  511. package/dist/src/modules/espn/stats/view/Penalties/index.d.ts +0 -2
  512. package/dist/src/modules/espn/stats/view/Penalties/index.js +0 -2
  513. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/ExpandedPlayerStats.d.ts +0 -16
  514. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/ExpandedPlayerStats.js +0 -66
  515. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/PlayerSeasonStatsCard.d.ts +0 -99
  516. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/PlayerSeasonStatsCard.js +0 -26
  517. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/PlayerSeasonStatsMinified.d.ts +0 -6
  518. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/PlayerSeasonStatsMinified.js +0 -17
  519. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/PlayerSeasonStatsView.d.ts +0 -8
  520. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/PlayerSeasonStatsView.js +0 -165
  521. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/index.d.ts +0 -1
  522. package/dist/src/modules/espn/stats/view/PlayerSeasonStats/index.js +0 -1
  523. package/dist/src/modules/espn/stats/view/RecentGames/RecentGames.d.ts +0 -100
  524. package/dist/src/modules/espn/stats/view/RecentGames/RecentGames.js +0 -23
  525. package/dist/src/modules/espn/stats/view/RecentGames/index.d.ts +0 -2
  526. package/dist/src/modules/espn/stats/view/RecentGames/index.js +0 -2
  527. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.d.ts +0 -30
  528. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.js +0 -123
  529. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/ExpandedSummary.d.ts +0 -100
  530. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/ExpandedSummary.js +0 -24
  531. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/index.d.ts +0 -2
  532. package/dist/src/modules/espn/stats/view/ScoringSummary/ExpandedScores/index.js +0 -2
  533. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoreItem/ScoreItem.d.ts +0 -100
  534. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoreItem/ScoreItem.js +0 -62
  535. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoreItem/index.d.ts +0 -2
  536. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoreItem/index.js +0 -2
  537. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoresSection/ScoresSection.d.ts +0 -6
  538. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoresSection/ScoresSection.js +0 -23
  539. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoresSection/index.d.ts +0 -2
  540. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoresSection/index.js +0 -2
  541. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoringSummary.d.ts +0 -12
  542. package/dist/src/modules/espn/stats/view/ScoringSummary/ScoringSummary.js +0 -167
  543. package/dist/src/modules/espn/stats/view/ScoringSummary/index.d.ts +0 -1
  544. package/dist/src/modules/espn/stats/view/ScoringSummary/index.js +0 -1
  545. package/dist/src/modules/espn/stats/view/StatsItemView.d.ts +0 -8
  546. package/dist/src/modules/espn/stats/view/StatsItemView.js +0 -66
  547. package/dist/src/modules/espn/stats/view/StatsQRCode/StatsQRCodeView.d.ts +0 -100
  548. package/dist/src/modules/espn/stats/view/StatsQRCode/StatsQRCodeView.js +0 -36
  549. package/dist/src/modules/espn/stats/view/StatsQRCode/index.d.ts +0 -2
  550. package/dist/src/modules/espn/stats/view/StatsQRCode/index.js +0 -1
  551. package/dist/src/modules/espn/stats/view/StatsView.d.ts +0 -29
  552. package/dist/src/modules/espn/stats/view/StatsView.js +0 -164
  553. package/dist/src/modules/espn/stats/view/TeamStats/TeamStatsView.d.ts +0 -101
  554. package/dist/src/modules/espn/stats/view/TeamStats/TeamStatsView.js +0 -77
  555. package/dist/src/modules/espn/stats/view/TeamStats/index.d.ts +0 -2
  556. package/dist/src/modules/espn/stats/view/TeamStats/index.js +0 -1
  557. package/dist/src/modules/espn/stats/view/Teams/StatsCarousel.d.ts +0 -25
  558. package/dist/src/modules/espn/stats/view/Teams/StatsCarousel.js +0 -83
  559. package/dist/src/modules/espn/stats/view/Teams/StatsProgressBar.d.ts +0 -6
  560. package/dist/src/modules/espn/stats/view/Teams/StatsProgressBar.js +0 -19
  561. package/dist/src/modules/espn/stats/view/Teams/Teams.d.ts +0 -100
  562. package/dist/src/modules/espn/stats/view/Teams/Teams.js +0 -39
  563. package/dist/src/modules/espn/stats/view/Teams/index.d.ts +0 -2
  564. package/dist/src/modules/espn/stats/view/Teams/index.js +0 -2
  565. package/dist/src/modules/espn/stats/view/WinProbability/WinProbability.d.ts +0 -100
  566. package/dist/src/modules/espn/stats/view/WinProbability/WinProbability.js +0 -28
  567. package/dist/src/modules/espn/stats/view/WinProbability/index.d.ts +0 -2
  568. package/dist/src/modules/espn/stats/view/WinProbability/index.js +0 -2
  569. package/dist/src/modules/espn/stats/view/components/AthletesStatistics/AthletesStatistics.d.ts +0 -115
  570. package/dist/src/modules/espn/stats/view/components/AthletesStatistics/AthletesStatistics.js +0 -89
  571. package/dist/src/modules/espn/stats/view/components/AthletesStatistics/StatisticTable.d.ts +0 -3
  572. package/dist/src/modules/espn/stats/view/components/AthletesStatistics/StatisticTable.js +0 -12
  573. package/dist/src/modules/espn/stats/view/components/AthletesStatistics/index.d.ts +0 -2
  574. package/dist/src/modules/espn/stats/view/components/AthletesStatistics/index.js +0 -2
  575. package/dist/src/modules/espn/stats/view/index.d.ts +0 -2
  576. package/dist/src/modules/espn/stats/view/index.js +0 -2
  577. package/dist/src/modules/espn/stats/view-model/StatsViewModel.d.ts +0 -322
  578. package/dist/src/modules/espn/stats/view-model/StatsViewModel.js +0 -1416
  579. package/dist/src/modules/fox/components/TabLoadError/TabLoadError.d.ts +0 -96
  580. package/dist/src/modules/fox/components/TabLoadError/TabLoadError.js +0 -19
  581. package/dist/src/modules/fox/components/TabLoadError/index.d.ts +0 -2
  582. package/dist/src/modules/fox/components/TabLoadError/index.js +0 -2
  583. package/dist/src/modules/fox/key-plays/view/FoxKeyPlays.d.ts +0 -2
  584. package/dist/src/modules/fox/key-plays/view/FoxKeyPlays.js +0 -5
  585. package/dist/src/modules/fox/multi-view/interfaces/IMultiViewViewModel.d.ts +0 -3
  586. package/dist/src/modules/fox/multi-view/interfaces/IMultiViewViewModel.js +0 -1
  587. package/dist/src/modules/fox/multi-view/services/MultiViewService.d.ts +0 -104
  588. package/dist/src/modules/fox/multi-view/services/MultiViewService.js +0 -97
  589. package/dist/src/modules/fox/multi-view/types.d.ts +0 -68
  590. package/dist/src/modules/fox/multi-view/types.js +0 -86
  591. package/dist/src/modules/fox/multi-view/view/BuildYourOwn/BuildYourOwn.d.ts +0 -7
  592. package/dist/src/modules/fox/multi-view/view/BuildYourOwn/BuildYourOwn.js +0 -99
  593. package/dist/src/modules/fox/multi-view/view/BuildYourOwn/index.d.ts +0 -2
  594. package/dist/src/modules/fox/multi-view/view/BuildYourOwn/index.js +0 -2
  595. package/dist/src/modules/fox/multi-view/view/CuratedMultiview/CuratedMultiviews.d.ts +0 -8
  596. package/dist/src/modules/fox/multi-view/view/CuratedMultiview/CuratedMultiviews.js +0 -92
  597. package/dist/src/modules/fox/multi-view/view/CuratedMultiview/index.d.ts +0 -2
  598. package/dist/src/modules/fox/multi-view/view/CuratedMultiview/index.js +0 -2
  599. package/dist/src/modules/fox/multi-view/view/FoxMultiView.d.ts +0 -3
  600. package/dist/src/modules/fox/multi-view/view/FoxMultiView.js +0 -68
  601. package/dist/src/modules/fox/multi-view/view/components/BuildYourOwnTabs/BuildYourOwnTabs.d.ts +0 -8
  602. package/dist/src/modules/fox/multi-view/view/components/BuildYourOwnTabs/BuildYourOwnTabs.js +0 -30
  603. package/dist/src/modules/fox/multi-view/view/components/BuildYourOwnTabs/index.d.ts +0 -2
  604. package/dist/src/modules/fox/multi-view/view/components/BuildYourOwnTabs/index.js +0 -2
  605. package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/CustomMultiviewStreamsCard.d.ts +0 -118
  606. package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/CustomMultiviewStreamsCard.js +0 -51
  607. package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/index.d.ts +0 -2
  608. package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/index.js +0 -2
  609. package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/LayoutSelector.d.ts +0 -13
  610. package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/LayoutSelector.js +0 -40
  611. package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/index.d.ts +0 -2
  612. package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/index.js +0 -2
  613. package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/CuratedMultiviewCard.d.ts +0 -101
  614. package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/CuratedMultiviewCard.js +0 -41
  615. package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/index.d.ts +0 -2
  616. package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/index.js +0 -2
  617. package/dist/src/modules/fox/multi-view/view-model/MultiViewViewModel.d.ts +0 -84
  618. package/dist/src/modules/fox/multi-view/view-model/MultiViewViewModel.js +0 -509
  619. package/dist/src/modules/fox/multi-view/view-model/index.d.ts +0 -1
  620. package/dist/src/modules/fox/multi-view/view-model/index.js +0 -1
  621. package/dist/src/modules/fox/stats/view/FoxStatsView.d.ts +0 -2
  622. package/dist/src/modules/fox/stats/view/FoxStatsView.js +0 -5
  623. package/dist/src/modules/maestro/builder/components/BuilderSection/BuilderSection.d.ts +0 -11
  624. package/dist/src/modules/maestro/builder/components/BuilderSection/BuilderSection.js +0 -52
  625. package/dist/src/modules/maestro/builder/components/BuilderSection/index.d.ts +0 -2
  626. package/dist/src/modules/maestro/builder/components/BuilderSection/index.js +0 -2
  627. package/dist/src/modules/maestro/builder/components/ExpandableCard/ExpandableCard.d.ts +0 -110
  628. package/dist/src/modules/maestro/builder/components/ExpandableCard/ExpandableCard.js +0 -37
  629. package/dist/src/modules/maestro/builder/components/ExpandableCard/index.d.ts +0 -2
  630. package/dist/src/modules/maestro/builder/components/ExpandableCard/index.js +0 -2
  631. package/dist/src/modules/maestro/builder/components/SimpleCard/SimpleCard.d.ts +0 -104
  632. package/dist/src/modules/maestro/builder/components/SimpleCard/SimpleCard.js +0 -12
  633. package/dist/src/modules/maestro/builder/components/SimpleCard/index.d.ts +0 -2
  634. package/dist/src/modules/maestro/builder/components/SimpleCard/index.js +0 -2
  635. package/dist/src/modules/maestro/builder/index.d.ts +0 -7
  636. package/dist/src/modules/maestro/builder/index.js +0 -7
  637. package/dist/src/modules/maestro/builder/mocks/mockBuilderPanel.d.ts +0 -149
  638. package/dist/src/modules/maestro/builder/mocks/mockBuilderPanel.js +0 -240
  639. package/dist/src/modules/maestro/builder/types.d.ts +0 -52
  640. package/dist/src/modules/maestro/builder/types.js +0 -1
  641. package/dist/src/modules/maestro/builder/view/BuilderPanelView.d.ts +0 -4
  642. package/dist/src/modules/maestro/builder/view/BuilderPanelView.js +0 -52
  643. package/dist/src/modules/maestro/builder/view-model/BuilderPanelViewModel.d.ts +0 -40
  644. package/dist/src/modules/maestro/builder/view-model/BuilderPanelViewModel.js +0 -229
  645. package/dist/src/modules/maestro/builder/view-model/index.d.ts +0 -1
  646. package/dist/src/modules/maestro/builder/view-model/index.js +0 -1
  647. package/dist/src/modules/maestro/hello-world/HelloWorldImage.d.ts +0 -2
  648. package/dist/src/modules/maestro/hello-world/HelloWorldImage.js +0 -32
  649. package/dist/src/modules/maestro/hello-world/HelloWorldView.d.ts +0 -11
  650. package/dist/src/modules/maestro/hello-world/HelloWorldView.js +0 -40
  651. package/dist/src/modules/maestro/hello-world/index.d.ts +0 -2
  652. package/dist/src/modules/maestro/hello-world/index.js +0 -2
  653. package/dist/src/sentry.d.ts +0 -3
  654. package/dist/src/sentry.js +0 -51
  655. package/dist/src/services/AnalyticsService/AnalyticsService.d.ts +0 -85
  656. package/dist/src/services/AnalyticsService/AnalyticsService.js +0 -406
  657. package/dist/src/services/AnalyticsService/types.d.ts +0 -65
  658. package/dist/src/services/AnalyticsService/types.js +0 -1
  659. package/dist/src/services/InsightsService/InsightsPayloadBuilder.d.ts +0 -279
  660. package/dist/src/services/InsightsService/InsightsPayloadBuilder.js +0 -385
  661. package/dist/src/services/InsightsService/InsightsService.d.ts +0 -11
  662. package/dist/src/services/InsightsService/InsightsService.js +0 -74
  663. package/dist/src/services/NetworkManager/NetworkManager.d.ts +0 -153
  664. package/dist/src/services/NetworkManager/NetworkManager.js +0 -434
  665. package/dist/src/services/NetworkManager/errors.d.ts +0 -19
  666. package/dist/src/services/NetworkManager/errors.js +0 -59
  667. package/dist/src/services/NetworkManager/types.d.ts +0 -7
  668. package/dist/src/services/NetworkManager/types.js +0 -1
  669. package/dist/src/services/StaticService/StaticService.d.ts +0 -20
  670. package/dist/src/services/StaticService/StaticService.js +0 -86
  671. package/dist/src/services/StaticService/index.d.ts +0 -2
  672. package/dist/src/services/StaticService/index.js +0 -2
  673. package/dist/src/services/StaticService/mocks.d.ts +0 -3
  674. package/dist/src/services/StaticService/mocks.js +0 -119
  675. package/dist/src/services/StaticService/types.d.ts +0 -78
  676. package/dist/src/services/StaticService/types.js +0 -1
  677. package/dist/src/services/ThemeManager/constants.d.ts +0 -2
  678. package/dist/src/services/ThemeManager/constants.js +0 -47
  679. package/dist/src/services/UserSettingsManager.d.ts +0 -63
  680. package/dist/src/services/UserSettingsManager.js +0 -158
  681. package/dist/src/test-polyfills.d.ts +0 -1
  682. package/dist/src/test-polyfills.js +0 -15
  683. package/dist/src/view-models/MaestroEventViewModel.d.ts +0 -96
  684. package/dist/src/view-models/MaestroEventViewModel.js +0 -386
  685. package/dist/src/view-models/PanelManagerViewModel.d.ts +0 -49
  686. package/dist/src/view-models/PanelManagerViewModel.js +0 -195
  687. package/dist/src/view-models/ViewModel.d.ts +0 -12
  688. package/dist/src/view-models/ViewModel.js +0 -32
@@ -1 +0,0 @@
1
- {"version":3,"sources":["webpack:///./src/helpers/strings.ts","webpack:///./src/modules/espn/shop/types.ts","webpack:///./src/modules/espn/shop/services/ShopService.ts","webpack:///./src/modules/espn/shop/mocks.ts","webpack:///./src/modules/espn/shop/view-model/ShopViewModel.ShopPolling.ts","webpack:///./src/modules/espn/shop/view-model/ShopViewModel.ts"],"names":["slugify","str","toLowerCase","trim","replace","stringHashCode","hash","i","length","charCodeAt","isShopProduct","item","type","ShopService","constructor","eventId","_defineProperty","this","networkManager","NetworkManager","externalBaseURL","pollShopData","interval","onData","onError","pollExternalApiRequestWithHeaders","endpoint","method","HttpMethod","GET","params","deviceType","headers","MOCK_SHOP_NFL_RESPONSE","shop","sections","title","items","name","image","href","price","displayRetail","detail","qrCode","link","text","displaySale","caption","displayClearance","MOCK_SHOP_NBA_RESPONSE","MOCK_SHOP_NCF_RESPONSE","MOCK_SHOP_EMPTY_RESPONSE","defaultItem","disclaimer","backgroundImage","MOCK_SHOP_SINGLE_SECTION_RESPONSE","ShopPolling","service","task","lastResponseHash","shopService","refresh","callback","stop","start","polling","removeLastResponseHash","response","updateInterval","processPolledData","data","error","handlePollingError","captureException","context","console","headerInterval","getResponseHeaderPollingIntervalValue","log","newInterval","parsedInterval","parseInt","isNaN","warn","responseHash","JSON","stringify","extra","pollingInterval","ShopViewModel","ViewModel","analyticsService","options","super","Observable","shopPolling","useMockData","mockDataType","init","trackPanelView","fetchNewData","initialized","cleanup","_SDK$getMaestroEventV","gameState","SDK","getMaestroEventViewModel","statsViewModel","currentGameState","value","panelView","game_state","parsePriceToNumber","priceString","cleaned","lastComma","lastIndexOf","lastDot","normalized","Number","card","section","_SDK$getMaestroEventV2","_section$product","_section$product2","_section$product3","sale","_item$price","_item$price2","_item$price3","_item$price4","basePrice","currentPrice","basePriceNumber","salePriceNumber","Math","round","panelClick","metadata","product","id","entity_type","entity_name","shortDisplayName","refreshPolling","processShopData","bind","err","setTabLoadFailure","_data$shop","errorState","promoData","hasEverSuccessfullyLoaded","isDataLoading","fetchMockData","mockData","clearTabLoadFailure","setTimeout"],"mappings":"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","file":"11.maestro-web-sdk.esm.js","sourcesContent":["export const slugify = (str: string) =>\n str\n .toLowerCase()\n .trim()\n .replace(/[\\s\\W-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n\nexport function stringHashCode(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n}\n","/**\n * Shop module type definitions\n * Based on ESPN Shop API structure\n */\n\n/**\n * Image reference\n */\nexport interface IShopImage {\n /** Image URL */\n href?: string;\n /** Image width */\n width?: number;\n /** Image height */\n height?: number;\n}\n\n/**\n * Logo reference (same structure as image)\n */\nexport interface IShopLogo {\n /** Logo URL */\n href?: string;\n /** Logo width */\n width?: number;\n /** Logo height */\n height?: number;\n}\n\n/**\n * Link reference\n */\nexport interface IShopLink {\n /** Link URL */\n href?: string;\n /** Link text */\n text?: string;\n /** Link relations (e.g., [\"ictv\", \"fanatics\", \"index\", \"team\"]) */\n rel?: string[];\n}\n\n/**\n * Price information for a product\n */\nexport interface IShopPrice {\n /** Retail price display string (e.g., \"$29.99\") */\n displayRetail?: string;\n /** Sale price display string (e.g., \"$19.99\") - optional */\n displaySale?: string;\n /** Clearance price display string (e.g., \"$14.99\") - optional */\n displayClearance?: string;\n}\n\n/**\n * Product detail information shown in detail view\n */\nexport interface IShopDetail {\n /** Title for the detail view */\n title?: string;\n /** Description (optional, used for browse cards) */\n description?: string;\n /** Link information */\n link?: IShopLink;\n /** Background image URL */\n backgroundImage?: string;\n /** QR code image URL */\n qrCode?: string;\n /** Disclaimer text */\n disclaimer?: string;\n}\n\n/**\n * Product item in a shop section\n */\nexport interface IShopProduct {\n /** Item type discriminator */\n type?: 'product';\n /** Product name */\n name?: string;\n /** Product image */\n image?: IShopImage;\n /** Price information */\n price?: IShopPrice;\n /** Detail view information */\n detail?: IShopDetail;\n}\n\n/**\n * Browse card item (Want More?) in a shop section\n */\nexport interface IShopBrowseCard {\n /** Item type discriminator */\n type?: 'browse';\n /** Browse card name */\n name?: string;\n /** Caption text (e.g., \"Browse all Canadiens merch\") */\n caption?: string;\n /** Team/League/Event logo */\n image?: IShopImage;\n /** Detail view information */\n detail?: IShopDetail;\n}\n\n/**\n * Union type for all shop items\n */\nexport type IShopItem = IShopProduct | IShopBrowseCard;\n\n/**\n * Section product information (team/league info)\n */\nexport interface IShopSectionProduct {\n /** Product/Team ID */\n id?: string;\n /** Short display name (e.g., \"Canadiens\") */\n shortDisplayName?: string;\n /** Logo reference */\n logo?: IShopLogo;\n /** Type (e.g., \"team\") */\n type?: string;\n /** Link information */\n link?: IShopLink;\n /** Background image URL */\n backgroundImage?: string;\n}\n\n/**\n * Shop section containing a title and list of items\n */\nexport interface IShopSection {\n /** Section title (e.g., \"Shop Canadiens Merch\") */\n title?: string;\n /** Section product/team information */\n product?: IShopSectionProduct;\n /** Array of products or browse cards */\n items?: IShopItem[];\n}\n\nexport type IShopDefaultItem = {\n image?: {\n href?: string;\n width?: number;\n height?: number;\n };\n type?: string;\n detail?: {\n title?: string;\n link?: {\n href?: string;\n text?: string;\n };\n backgroundImage?: string;\n qrCode?: string;\n disclaimer?: string;\n };\n};\n\n/**\n * Shop container with sections\n */\nexport interface IShopContainer {\n /** Array of shop sections */\n sections?: IShopSection[];\n defaultItem?: IShopDefaultItem;\n}\n\n/**\n * Main shop API response\n */\nexport interface IShopResponse {\n /** Array of shop containers (typically one) */\n shop?: IShopContainer[];\n}\n\nexport const isShopProduct = (item: IShopItem): item is IShopProduct => {\n return item.type === 'product';\n};\n\nexport interface IShopViewModel {\n cleanup(): void;\n}\n","import NetworkManager, {\n HttpMethod,\n} from '../../../../services/NetworkManager/NetworkManager';\nimport { IShopResponse } from '../types';\nimport { ResponseWithHeaders } from '../../../../services/NetworkManager/types';\n\n/**\n * Service for handling shop-related API calls\n */\nclass ShopService {\n public networkManager: NetworkManager;\n private eventId: string;\n\n constructor(eventId: string) {\n this.eventId = eventId;\n this.networkManager = new NetworkManager({\n externalBaseURL: 'https://site.api.espn.com',\n });\n }\n\n /**\n * Start polling shop data\n *\n * @param interval - The polling interval in milliseconds\n * @param onData - Callback for successful data fetch with headers\n * @param onError - Callback for errors\n * @returns Object with a stop function to stop polling\n */\n pollShopData(\n interval: number,\n onData: (data: ResponseWithHeaders<IShopResponse>) => void,\n onError?: (error: Error) => void\n ): { stop: () => void } {\n return this.networkManager.pollExternalApiRequestWithHeaders({\n endpoint: `/apis/site/v2/events/${this.eventId}/shop`,\n interval,\n method: HttpMethod.GET,\n params: { deviceType: 'ictv' },\n headers: {},\n onData,\n onError,\n });\n }\n}\n\nexport default ShopService;\n","import { IShopResponse } from './types';\n\n/**\n * Mock shop data for NFL game with multiple sections\n * Covers: regular products, sale products, and browse card\n */\nexport const MOCK_SHOP_NFL_RESPONSE: IShopResponse = {\n shop: [\n {\n sections: [\n {\n title: 'Chiefs Shop',\n items: [\n {\n type: 'product',\n name:\n \"Men's Kansas City Chiefs Patrick Mahomes Nike Red Game Player Jersey\",\n image: {\n href:\n 'https://fanatics.frgimages.com/kansas-city-chiefs/mens-kansas-city-chiefs-patrick-mahomes-nike-red-game-player-jersey_pi3453000_ff_3453170-8a4fb50f27b4aacd8c3b_full.jpg',\n },\n price: {\n displayRetail: '$119.99',\n },\n detail: {\n title: 'Chiefs Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/chiefs-mahomes-jersey',\n link: {\n href: 'https://fanatics.com/chiefs-mahomes-jersey',\n text: 'Scan to shop',\n },\n },\n },\n {\n type: 'product',\n name:\n 'Kansas City Chiefs New Era 2024 AFC Conference Champions Locker Room 9FORTY Adjustable Hat - Red',\n image: {\n href:\n 'https://fanatics.frgimages.com/kansas-city-chiefs/kansas-city-chiefs-new-era-2024-afc-conference-champions-locker-room-9forty-adjustable-hat-red_pi5595000_ff_5595784_full.jpg',\n },\n price: {\n displayRetail: '$34.99',\n displaySale: '$24.99',\n },\n detail: {\n title: 'Chiefs Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/chiefs-hat',\n link: {\n href: 'https://fanatics.com/chiefs-hat',\n text: 'Scan to shop',\n },\n },\n },\n {\n type: 'browse',\n name: 'Want More?',\n caption: 'Browse all Chiefs merch',\n image: {\n href: 'https://a.espncdn.com/i/teamlogos/nfl/500/kc.png',\n },\n detail: {\n title: 'Chiefs Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/chiefs',\n link: {\n href: 'https://fanatics.com/chiefs',\n text: 'Scan to browse all',\n },\n },\n },\n ],\n },\n {\n title: '49ers Shop',\n items: [\n {\n type: 'product',\n name:\n \"Men's San Francisco 49ers Brock Purdy Nike Scarlet Game Player Jersey\",\n image: {\n href:\n 'https://fanatics.frgimages.com/san-francisco-49ers/mens-san-francisco-49ers-brock-purdy-nike-scarlet-game-player-jersey_pi5068000_ff_5068449_full.jpg',\n },\n price: {\n displayRetail: '$119.99',\n },\n detail: {\n title: '49ers Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/49ers-purdy-jersey',\n link: {\n href: 'https://fanatics.com/49ers-purdy-jersey',\n text: 'Scan to shop',\n },\n },\n },\n {\n type: 'product',\n name:\n \"Men's San Francisco 49ers George Kittle Nike Scarlet Game Player Jersey\",\n image: {\n href:\n 'https://fanatics.frgimages.com/san-francisco-49ers/mens-san-francisco-49ers-george-kittle-nike-scarlet-game-player-jersey_pi4234000_ff_4234524_full.jpg',\n },\n price: {\n displayRetail: '$119.99',\n displayClearance: '$79.99',\n },\n detail: {\n title: '49ers Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/49ers-kittle-jersey',\n link: {\n href: 'https://fanatics.com/49ers-kittle-jersey',\n text: 'Scan to shop',\n },\n },\n },\n {\n type: 'browse',\n name: 'Want More?',\n caption: 'Browse all 49ers merch',\n image: {\n href: 'https://a.espncdn.com/i/teamlogos/nfl/500/sf.png',\n },\n detail: {\n title: '49ers Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/49ers',\n link: {\n href: 'https://fanatics.com/49ers',\n text: 'Scan to browse all',\n },\n },\n },\n ],\n },\n {\n title: 'NFL Shop',\n items: [\n {\n type: 'product',\n name: 'NFL Nike Official Authentic Game Football',\n image: {\n href:\n 'https://fanatics.frgimages.com/nfl/nfl-nike-official-authentic-game-football_pi4759000_ff_4759291_full.jpg',\n },\n price: {\n displayRetail: '$99.99',\n },\n detail: {\n title: 'NFL Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/nfl-football',\n link: {\n href: 'https://fanatics.com/nfl-football',\n text: 'Scan to shop',\n },\n },\n },\n {\n type: 'browse',\n name: 'Want More?',\n caption: 'Browse all NFL merch',\n image: {\n href: 'https://a.espncdn.com/i/teamlogos/leagues/500/nfl.png',\n },\n detail: {\n title: 'NFL Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/nfl',\n link: {\n href: 'https://fanatics.com/nfl',\n text: 'Scan to browse all',\n },\n },\n },\n ],\n },\n ],\n },\n ],\n};\n\n/**\n * Mock shop data for NBA game\n */\nexport const MOCK_SHOP_NBA_RESPONSE: IShopResponse = {\n shop: [\n {\n sections: [\n {\n title: 'Lakers Shop',\n items: [\n {\n type: 'product',\n name:\n \"Men's Los Angeles Lakers LeBron James Nike Purple Swingman Jersey - Icon Edition\",\n image: {\n href:\n 'https://fanatics.frgimages.com/los-angeles-lakers/mens-los-angeles-lakers-lebron-james-nike-purple-swingman-jersey-icon-edition_pi4548000_ff_4548764_full.jpg',\n },\n price: {\n displayRetail: '$129.99',\n },\n detail: {\n title: 'Lakers Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/lakers-lebron-jersey',\n link: {\n href: 'https://fanatics.com/lakers-lebron-jersey',\n text: 'Scan to shop',\n },\n },\n },\n {\n type: 'product',\n name:\n \"Men's Los Angeles Lakers Anthony Davis Nike Gold Swingman Jersey - City Edition\",\n image: {\n href:\n 'https://fanatics.frgimages.com/los-angeles-lakers/mens-los-angeles-lakers-anthony-davis-nike-gold-swingman-jersey-city-edition_pi5129000_ff_5129446_full.jpg',\n },\n price: {\n displayRetail: '$129.99',\n },\n detail: {\n title: 'Lakers Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/lakers-davis-jersey',\n link: {\n href: 'https://fanatics.com/lakers-davis-jersey',\n text: 'Scan to shop',\n },\n },\n },\n {\n type: 'browse',\n name: 'Want More?',\n caption: 'Browse all Lakers merch',\n image: {\n href: 'https://a.espncdn.com/i/teamlogos/nba/500/lal.png',\n },\n detail: {\n title: 'Lakers Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/lakers',\n link: {\n href: 'https://fanatics.com/lakers',\n text: 'Scan to browse all',\n },\n },\n },\n ],\n },\n ],\n },\n ],\n};\n\n/**\n * Mock shop data for NCAA Football\n */\nexport const MOCK_SHOP_NCF_RESPONSE: IShopResponse = {\n shop: [\n {\n sections: [\n {\n title: 'Texas Football Shop',\n items: [\n {\n type: 'product',\n name: 'Texas Longhorns Champion University Tee - Burnt Orange',\n image: {\n href:\n 'https://fanatics.frgimages.com/texas-longhorns/texas-longhorns-champion-university-tee-burnt-orange_pi4892000_ff_4892615_full.jpg',\n },\n price: {\n displayRetail: '$34.99',\n },\n detail: {\n title: 'Texas Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/texas-tee',\n link: {\n href: 'https://fanatics.com/texas-tee',\n text: 'Scan to shop',\n },\n },\n },\n {\n type: 'browse',\n name: 'Want More?',\n caption: 'Browse all Texas merch',\n image: {\n href: 'https://a.espncdn.com/i/teamlogos/ncaa/500/251.png',\n },\n detail: {\n title: 'Texas Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/texas',\n link: {\n href: 'https://fanatics.com/texas',\n text: 'Scan to browse all',\n },\n },\n },\n ],\n },\n {\n title: 'Texas A&M Shop',\n items: [\n {\n type: 'product',\n name: 'Texas A&M Aggies New Era Maroon 9FORTY Adjustable Hat',\n image: {\n href:\n 'https://fanatics.frgimages.com/texas-am-aggies/texas-am-aggies-new-era-maroon-9forty-adjustable-hat_pi4156000_ff_4156429_full.jpg',\n },\n price: {\n displayRetail: '$29.99',\n },\n detail: {\n title: 'Texas A&M Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/texas-am-hat',\n link: {\n href: 'https://fanatics.com/texas-am-hat',\n text: 'Scan to shop',\n },\n },\n },\n {\n type: 'browse',\n name: 'Want More?',\n caption: 'Browse all Texas A&M merch',\n image: {\n href: 'https://a.espncdn.com/i/teamlogos/ncaa/500/245.png',\n },\n detail: {\n title: 'Texas A&M Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/texas-am',\n link: {\n href: 'https://fanatics.com/texas-am',\n text: 'Scan to browse all',\n },\n },\n },\n ],\n },\n ],\n },\n ],\n};\n\n/**\n * Mock shop data with empty sections\n */\nexport const MOCK_SHOP_EMPTY_RESPONSE: IShopResponse = {\n shop: [\n {\n sections: [],\n defaultItem: {\n detail: {\n disclaimer:\n 'Visit shop.espn.com to explore more products and exclusive offers.',\n title: 'Shop the ESPN Store',\n backgroundImage: 'https://placedog.net/568x704',\n },\n },\n },\n ],\n};\n\n/**\n * Mock shop data with single section\n */\nexport const MOCK_SHOP_SINGLE_SECTION_RESPONSE: IShopResponse = {\n shop: [\n {\n sections: [\n {\n title: 'Team Shop',\n items: [\n {\n type: 'product',\n name: 'Premium Team Jersey - Official Merchandise',\n image: {\n href:\n 'https://via.placeholder.com/400x400/0066cc/ffffff?text=Team+Jersey',\n },\n price: {\n displayRetail: '$89.99',\n },\n detail: {\n title: 'Team Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/team-jersey',\n link: {\n href: 'https://fanatics.com/team-jersey',\n text: 'Scan to shop',\n },\n },\n },\n {\n type: 'browse',\n name: 'Want More?',\n caption: 'Browse all team merch',\n image: {\n href:\n 'https://via.placeholder.com/400x400/0066cc/ffffff?text=Team+Logo',\n },\n detail: {\n title: 'Team Shop',\n qrCode:\n 'https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=https://fanatics.com/team',\n link: {\n href: 'https://fanatics.com/team',\n text: 'Scan to browse all',\n },\n },\n },\n ],\n },\n ],\n },\n ],\n};\n","import { captureException } from '@/sentry';\nimport ShopService from '@/modules/espn/shop/services/ShopService';\nimport { IShopResponse } from '../types';\nimport { stringHashCode } from '@/helpers/strings';\n\ntype Polling = {\n interval: number;\n task: { stop: () => void } | null;\n lastResponseHash: number | null;\n};\n\nconst DEFAULT_SHOP_POLLING_INTERVAL = 30000; // 30 seconds\n\nexport default class ShopPolling {\n private polling: Polling = {\n interval: DEFAULT_SHOP_POLLING_INTERVAL,\n task: null,\n lastResponseHash: null,\n };\n private shopService: ShopService;\n\n constructor(service: ShopService) {\n this.shopService = service;\n }\n\n /**\n * Refresh polling for shop data\n */\n refresh(callback: (data: IShopResponse) => void): void {\n // First stop any existing polling\n this.stop();\n\n // Start the poll loop\n this.start(callback);\n }\n\n /**\n * Stop polling for shop data\n */\n stop(): void {\n if (this.polling.task) {\n this.polling.task.stop();\n this.polling.task = null;\n }\n }\n\n removeLastResponseHash(): void {\n this.polling.lastResponseHash = null;\n }\n\n private start(callback: (data: IShopResponse) => void): void {\n try {\n this.polling.task = this.shopService.pollShopData(\n this.polling.interval,\n (response) => {\n this.updateInterval(response.headers, callback);\n this.processPolledData(response.data, callback);\n },\n (error) => this.handlePollingError(error)\n );\n } catch (error) {\n captureException(error, {\n context: 'ShopViewModel.pollShop',\n });\n console.error('[SHOP] Error setting up shop polling:', error);\n }\n }\n\n /**\n * @description Update polling interval checking either response header or panel config.\n * Refresh polling if necessary.\n */\n private updateInterval(\n headers: Record<string, string>,\n callback: (data: IShopResponse) => void\n ): void {\n const headerInterval = this.getResponseHeaderPollingIntervalValue(headers);\n\n // Only update if we have a valid new interval and it's different from current\n if (headerInterval && headerInterval !== this.polling.interval) {\n console.log(\n `[SHOP] Updating shop polling interval from ${this.polling.interval}ms to ${headerInterval}ms`\n );\n this.polling.interval = headerInterval;\n // Restart polling with the new interval\n this.refresh(callback);\n }\n }\n\n private getResponseHeaderPollingIntervalValue(\n headers: Record<string, string>\n ): number | null {\n const newInterval = headers['polling-interval'];\n if (!newInterval) {\n return null;\n }\n\n const parsedInterval = parseInt(newInterval, 10);\n if (isNaN(parsedInterval) || parsedInterval <= 0) {\n console.warn(\n `[SHOP] Invalid polling interval header received: ${newInterval}.`\n );\n return null;\n }\n\n return parsedInterval * 1000; // Convert seconds to milliseconds\n }\n\n /**\n * Process data received from polling\n */\n private processPolledData(\n data: IShopResponse,\n callback: (data: IShopResponse) => void\n ): void {\n // Calculate hash for the response to check if it's different from the last one\n const responseHash = stringHashCode(JSON.stringify(data));\n\n // Check if this is the same as the last successful response\n if (this.polling.lastResponseHash === responseHash) {\n console.log(\n '[SHOP] Shop Response hash is the same as last successful response - skipping update'\n );\n return;\n }\n\n this.polling.lastResponseHash = responseHash;\n callback(data);\n }\n\n /**\n * Handle errors that occur during shop polling\n */\n private handlePollingError(error: Error): void {\n console.error('[SHOP] Shop polling error:', error);\n\n captureException(error, {\n context: 'ShopViewModel.pollShop',\n extra: {\n pollingInterval: this.polling.interval,\n },\n });\n }\n}\n","import { Observable } from '../../../../helpers/Observable';\nimport ShopService from '../services/ShopService';\nimport AnalyticsService from '@/services/AnalyticsService/AnalyticsService';\nimport { ViewModel } from '../../../../view-models/ViewModel';\nimport {\n IShopResponse,\n IShopSection,\n IShopProduct,\n IShopBrowseCard,\n isShopProduct,\n IShopDefaultItem,\n} from '../types';\nimport {\n MOCK_SHOP_NFL_RESPONSE,\n MOCK_SHOP_NBA_RESPONSE,\n MOCK_SHOP_NCF_RESPONSE,\n MOCK_SHOP_EMPTY_RESPONSE,\n MOCK_SHOP_SINGLE_SECTION_RESPONSE,\n} from '../mocks';\n\nimport { captureException } from '@/sentry';\nimport ShopPolling from './ShopViewModel.ShopPolling';\nimport SDK from '@/index';\n\nconst SHOP_ERROR_STATE = {\n NONE: 'none',\n TAB_LOAD_FAILURE: 'tabLoadFailure',\n EMPTY_SHOP: 'emptyShop',\n} as const;\n\nexport type ShopErrorState = typeof SHOP_ERROR_STATE[keyof typeof SHOP_ERROR_STATE];\n\n/**\n * ViewModel for Shop panel\n * Manages shop data fetching, polling, and state\n */\nexport class ShopViewModel extends ViewModel {\n // Observable properties\n public sections = new Observable<IShopSection[]>([]);\n public isDataLoading = new Observable<boolean>(true);\n public errorState = new Observable<ShopErrorState>('none');\n public hasEverSuccessfullyLoaded = new Observable<boolean>(false);\n public promoData = new Observable<IShopDefaultItem | null>(null);\n\n // Properties\n private shopService: ShopService;\n private analyticsService: AnalyticsService;\n private shopPolling: ShopPolling;\n private useMockData: boolean = false;\n private mockDataType: string = 'nfl';\n initialized = false;\n\n constructor(\n eventId: string,\n analyticsService: AnalyticsService,\n options: {\n useMockData?: boolean;\n mockDataType?: 'nfl' | 'nba' | 'ncf' | 'empty' | 'single';\n } = {}\n ) {\n super();\n this.shopService = new ShopService(eventId);\n this.analyticsService = analyticsService;\n this.shopPolling = new ShopPolling(this.shopService);\n this.useMockData = options.useMockData || false;\n this.mockDataType = options.mockDataType || 'nfl';\n }\n\n /**\n * Initialize the ViewModel and start data fetching\n */\n init() {\n // Track panel view on initialization\n this.trackPanelView();\n\n this.fetchNewData();\n this.initialized = true;\n }\n\n /**\n * Clean up resources when the ViewModel is no longer needed\n */\n cleanup(): void {\n this.shopPolling.stop();\n this.initialized = false;\n }\n\n /**\n * Track panel view event\n */\n private async trackPanelView(): Promise<void> {\n try {\n const gameState =\n SDK.getMaestroEventViewModel().statsViewModel?.currentGameState.value ||\n 'unknown';\n\n await this.analyticsService.panelView('espnShop', {\n game_state: [gameState],\n });\n } catch (error) {\n captureException(error, {\n context: 'ShopViewModel.trackPanelView',\n });\n console.error('[SHOP] Error tracking panel view:', error);\n }\n }\n\n /**\n * Parse price string to number, handling currency formats\n */\n private parsePriceToNumber(priceString: string): number {\n // Remove currency symbols and spaces\n const cleaned = priceString.replace(/[^0-9.,]/g, '');\n\n // Find the last occurrence of comma or dot (decimal separator)\n const lastComma = cleaned.lastIndexOf(',');\n const lastDot = cleaned.lastIndexOf('.');\n\n let normalized: string;\n\n if (lastComma > lastDot) {\n // EU format: €1.234,56 -> comma is decimal separator\n normalized = cleaned.replace(/\\./g, '').replace(',', '.');\n } else if (lastDot > lastComma) {\n // US format: $1,234.56 -> dot is decimal separator\n normalized = cleaned.replace(/,/g, '');\n } else if (lastComma !== -1) {\n // Only comma present, assume decimal: €25,00\n normalized = cleaned.replace(',', '.');\n } else if (lastDot !== -1) {\n // Only dot present, assume decimal: $25.00\n normalized = cleaned;\n } else {\n // No separators: 25\n normalized = cleaned;\n }\n\n return Number(normalized) || 0;\n }\n\n /**\n * Track shop item card click event\n */\n async trackItemClick(\n card: 'product_summary' | 'want more' | 'product_detail' | 'fallback',\n item: IShopProduct | IShopBrowseCard | null,\n section: IShopSection | null\n ): Promise<void> {\n try {\n let sale = 0;\n let price: string | null = null;\n\n const gameState =\n SDK.getMaestroEventViewModel().statsViewModel?.currentGameState.value ||\n 'unknown';\n\n if (item && isShopProduct(item)) {\n const basePrice = item.price?.displayRetail;\n const currentPrice =\n item.price?.displayClearance ||\n item.price?.displaySale ||\n item.price?.displayRetail;\n\n if (currentPrice && basePrice) {\n const basePriceNumber = this.parsePriceToNumber(basePrice);\n const salePriceNumber = this.parsePriceToNumber(currentPrice);\n\n if (basePriceNumber > 0) {\n sale = Math.round((1 - salePriceNumber / basePriceNumber) * 100);\n } else {\n sale = 0;\n }\n price = currentPrice;\n }\n }\n\n await this.analyticsService.panelClick({\n type: 'espnShop',\n name: 'shop_item_clicked',\n metadata: {\n card: [card],\n game_state: [gameState],\n product: section?.product?.id || null,\n entity_type: [section?.product?.type || 'unknown'],\n entity_name: [section?.product?.shortDisplayName || 'unknown'],\n price,\n sale: [`${sale}%`],\n },\n });\n } catch (error) {\n captureException(error, {\n context: 'ShopViewModel.trackItemClick',\n item,\n section,\n });\n console.error('[SHOP] Error tracking shop item click:', error);\n }\n }\n\n /**\n * Refresh polling for shop data\n */\n refreshPolling(): void {\n try {\n if (this.useMockData) {\n return;\n }\n\n this.shopPolling.refresh(this.processShopData.bind(this));\n } catch (err) {\n this.setTabLoadFailure();\n }\n }\n\n /**\n * Process the shop data and update the sections\n */\n private processShopData(data: IShopResponse) {\n try {\n const shop = data.shop?.[0];\n const sections = shop?.sections || [];\n\n // Check if there are any sections\n if (!sections?.length && shop?.defaultItem) {\n this.errorState.value = 'emptyShop';\n this.sections.value = [];\n\n this.promoData.value = shop.defaultItem;\n return;\n }\n\n // Update sections and clear error state\n this.sections.value = sections;\n this.errorState.value = 'none';\n this.hasEverSuccessfullyLoaded.value = true;\n\n if (this.isDataLoading.value) {\n this.isDataLoading.value = false;\n }\n } catch (err) {\n captureException(err, {\n context: 'ShopViewModel.processShopData',\n });\n console.error('[SHOP] Error processing shop data:', err);\n this.setTabLoadFailure();\n }\n }\n\n setTabLoadFailure() {\n if (!this.hasEverSuccessfullyLoaded.value) {\n this.errorState.value = 'tabLoadFailure';\n this.sections.value = [];\n }\n\n if (this.isDataLoading.value) {\n this.isDataLoading.value = false;\n }\n }\n\n /**\n * Fetch new shop data immediately (one-time)\n */\n fetchNewData() {\n this.isDataLoading.value = true;\n\n try {\n // Handle mock data if enabled\n if (this.useMockData) {\n this.sections.value = [];\n this.fetchMockData();\n return;\n }\n\n this.refreshPolling();\n } catch (error) {\n captureException(error, {\n context: 'ShopViewModel.fetchNewData',\n });\n console.error('[SHOP] Error fetching shop data:', error);\n\n this.setTabLoadFailure();\n }\n }\n\n /**\n * Fetch mock data for testing\n */\n private fetchMockData() {\n let mockData: IShopResponse;\n\n switch (this.mockDataType) {\n case 'nba':\n mockData = MOCK_SHOP_NBA_RESPONSE;\n break;\n case 'ncf':\n mockData = MOCK_SHOP_NCF_RESPONSE;\n break;\n case 'empty':\n mockData = MOCK_SHOP_EMPTY_RESPONSE;\n break;\n case 'single':\n mockData = MOCK_SHOP_SINGLE_SECTION_RESPONSE;\n break;\n case 'nfl':\n default:\n mockData = MOCK_SHOP_NFL_RESPONSE;\n break;\n }\n\n this.processShopData(mockData);\n this.hasEverSuccessfullyLoaded.value = true;\n this.isDataLoading.value = false;\n }\n\n /**\n * Clear tab load failure and retry\n */\n clearTabLoadFailure() {\n this.errorState.value = 'none';\n this.shopPolling.removeLastResponseHash();\n setTimeout(() => {\n this.refreshPolling();\n }, 100);\n }\n}\n\nexport default ShopViewModel;\n"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- (window.webpackJsonp=window.webpackJsonp||[]).push([[12],{104:function(e,t,s){"use strict";s.d(t,"a",(function(){return a})),s.d(t,"b",(function(){return n}));const a=e=>e.toLowerCase().trim().replace(/[\s\W-]+/g,"-").replace(/^-+|-+$/g,"");function n(e){let t=0;for(let s=0;s<e.length;s++){t=(t<<5)-t+e.charCodeAt(s),t&=t}return t}},247:function(e,t,s){"use strict";s.r(t),s.d(t,"BetsViewModel",(function(){return h}));var a=s(3),n=s(35);function o(e,t,s){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var a=s.call(e,t||"default");if("object"!=typeof a)return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}var i=class{constructor(e){o(this,"networkManager",void 0),this.networkManager=new n.b({externalBaseURL:e.getBettingAPIBaseURL()})}async getNonPersonalizedBets(e){return this.networkManager.externalApiRequest({endpoint:this.nonPersonalizedBetsEndpoint(e),method:n.a.GET,params:{deviceType:"ictv"},headers:{}})}async getPersonalizedBets(e,t,s){return this.networkManager.externalApiRequest({endpoint:this.personalizedBetsEndpoint(e),method:n.a.GET,params:{swid:t,deviceType:"ictv"},headers:{"x-p13n-auth":s}})}async getPersonalizedBetsWithHeaders(e,t,s){return this.networkManager.externalApiRequestWithHeaders({endpoint:this.personalizedBetsEndpoint(e),method:n.a.GET,params:{swid:t,deviceType:"ictv"},headers:{"x-p13n-auth":s}})}pollPersonalizedBets(e,t,s,a,o,i){return this.networkManager.pollExternalApiRequest({endpoint:this.personalizedBetsEndpoint(e),interval:a,method:n.a.GET,params:{swid:t,deviceType:"ictv"},headers:{"x-p13n-auth":s},onData:o,onError:i})}pollPersonalizedBetsWithHeaders(e,t,s,a,o,i){return this.networkManager.pollExternalApiRequestWithHeaders({endpoint:this.personalizedBetsEndpoint(e),interval:a,method:n.a.GET,params:{swid:t,deviceType:"ictv"},headers:{"x-p13n-auth":s},onData:o,onError:i})}nonPersonalizedBetsEndpoint(e){return`/site/v2/events/${e}/odds`}personalizedBetsEndpoint(e){return`/personalized/site/v2/events/${e}/odds`}},r=s(10),d=s(34);const l={id:"401721458",sport:"basketball",date:"2025-02-28T02:00Z",gameState:"post",featured:[{date:"2024-06-09T17:35Z",id:"00015c79-3454-4356-bab6-af050554b761",selections:[{icon:"https://a.espncdn.com/i/espnbet/mybets_under_caret_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_under_caret_icon.png",id:"f54ad0791-304e-43fe-a45a-96bd237c9c78",odds:{},outcome:"PENDING",status:"upcoming",text:"Under 5.5",type:"under"},{icon:"https://a.espncdn.com/i/espnbet/mybets_under_caret_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_under_caret_icon.png",id:"f54ad079-3604e-43fe-a45a-96bd237c9c78",odds:{},outcome:"PENDING",status:"upcoming",text:"Under 5.5",type:"under"},{icon:"https://a.espncdn.com/i/espnbet/mybets_under_caret_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_under_caret_icon.png",id:"f54ad079-5304e-43fe-a45a-96bd237c9c78",odds:{},outcome:"PENDING",status:"upcoming",text:"Under 5.5",type:"under"},{icon:"https://a.espncdn.com/i/espnbet/mybets_under_caret_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_under_caret_icon.png",id:"f54ad079-3044e-43fe-a45a-96bd237c9c78",odds:{},outcome:"PENDING",status:"upcoming",text:"Under 5.5",type:"under"},{icon:"https://a.espncdn.com/i/espnbet/mybets_under_caret_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_under_caret_icon.png",id:"f54ad079-304e-43fe-a45a-96bd237c9c278",odds:{},outcome:"PENDING",status:"upcoming",text:"Under 5.5",type:"under"},{icon:"https://a.espncdn.com/i/espnbet/mybets_under_caret_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_under_caret_icon.png",id:"f54ad079-304e-43fe-a45a-96bd1237c9c78",odds:{},outcome:"PENDING",status:"upcoming",text:"Under 5.5",type:"under"}],text:"Carlos Santana Total Hits + Runs + RBIs"}],bets:{odds:[{displayName:"Moneyline",abbreviation:"ML",type:"moneyline",state:"close",values:[{odds:"-500",outcome:"WIN",team:"130",type:"home"},{odds:"+360",outcome:"LOSS",team:"164",type:"away"}]},{displayName:"Moneyline",abbreviation:"ML",type:"moneyline",state:"open",values:[{odds:"-700",team:"130",type:"home"},{odds:"+450",team:"164",type:"away"}]},{displayName:"Total Points",abbreviation:"Total",type:"total",state:"close",values:[{line:"o154.5",odds:"-115",outcome:"WIN",type:"over"},{line:"u154.5",odds:"-105",outcome:"LOSS",type:"under"}]},{displayName:"Total Points",abbreviation:"Total",type:"total",state:"open",values:[{line:"o154.5",odds:"-105",type:"over"},{line:"u154.5",odds:"-115",type:"under"}]},{displayName:"Spread",abbreviation:"Spread",type:"pointSpread",state:"close",values:[{line:"-9.5",odds:"-105",outcome:"LOSS",team:"130",type:"home"},{line:"+9.5",odds:"-115",outcome:"WIN",team:"164",type:"away"}]},{displayName:"Spread",abbreviation:"Spread",type:"pointSpread",state:"open",values:[{line:"-11.5",odds:"-105",team:"130",type:"home"},{line:"+11.5",odds:"-115",team:"164",type:"away"}]}]}},c={entities:{teams:{130:{id:"130",uid:"s:40~l:41~t:130",guid:"c00151c6-cdd4-5aab-0130-37416052eb2a",slug:"michigan-wolverines",abbreviation:"MICH",displayName:"Michigan Wolverines",shortDisplayName:"Michigan",name:"Wolverines",nickname:"Michigan",location:"Michigan",color:"00274c",alternateColor:"ffcb05",favored:!0},164:{id:"164",uid:"s:40~l:41~t:164",guid:"425c8e51-59d0-75a1-0815-dc3556c5cfda",slug:"rutgers-scarlet-knights",abbreviation:"RUTG",displayName:"Rutgers Scarlet Knights",shortDisplayName:"Rutgers",name:"Scarlet Knights",nickname:"Rutgers",location:"Rutgers",color:"d21034",alternateColor:"ffffff",favored:!1}}},event:l,betsModule:{defaultTab:"live",upcoming:[],live:[{id:"emnPo+hN/Q7CzX/obYcJZCYGql4=",type:"PARLAY",betStatus:"OPEN",outcome:"PENDING",overrideOutcome:"NOT_SET",betAmount:"10",payoutAmount:"171.55",odds:"+1616",startTime:"2022-11-29T17:54Z",events:[{displayName:"Investec South African Open Championship Future",legs:[{id:"71acdfe8-611e-47ae-b7ee-ba6684c6fefa",marketId:"fc47f9f9-2852-4f63-9a70-4adf5b4addd2",marketSelectionId:"92803c34-a8b7-476e-9136-b88729c7e51e",marketType:"list",status:"PENDING",odds:"+370",boostType:"NONE",selectionText:"Aaron Baddeley",type:"list",marketText:"Tournament Winner",icon:"https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png",url:"https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/golf/organization/dp-world-tour/competition/investec-south-african-open-championship/event/56773312-5fdb-4cb5-b387-df8c18a2c857&market_selection_id[0]=92803c34-a8b7-476e-9136-b88729c7e51e&odds_numerator[0]=11&odds_denominator[0]=2",marketStatus:"LIVE"}]},{displayName:"Lorem Ipsum Dolor Sit Amet",legs:[{id:"472f176b-7575-4d1d-ac63-bcb2d4ec6da9",marketId:"2e5fdfdf-7021-464f-939d-5497030fe765",marketSelectionId:"3727a3f5-5143-4616-ab4f-713bcf40aa21",marketType:"list",status:"PENDING",odds:"+265",boostType:"NONE",selectionText:"Aaron Pike",type:"list",marketText:"Tournament Winner",icon:"https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png",url:"https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/golf/organization/dp-world-tour/competition/isps-handa-australian-open/event/df8ba72f-4be8-4569-840e-954dbd9a7806&market_selection_id[0]=3727a3f5-5143-4616-ab4f-713bcf40aa21&odds_numerator[0]=73&odds_denominator[0]=20",marketStatus:"LIVE"}]},{displayName:"Australian Open Future",legs:[{id:"472f176b-7575-4d1d-ac63-bcb2d4ec6da9",marketId:"2e5fdfdf-7021-464f-939d-5497030fe765",marketSelectionId:"3727a3f5-5143-4616-ab4f-713bcf40aa21",marketType:"list",status:"PENDING",odds:"+265",boostType:"NONE",selectionText:"Aaron Pike",type:"list",marketText:"Tournament Winner",icon:"https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png",url:"https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/golf/organization/dp-world-tour/competition/isps-handa-australian-open/event/df8ba72f-4be8-4569-840e-954dbd9a7806&market_selection_id[0]=3727a3f5-5143-4616-ab4f-713bcf40aa21&odds_numerator[0]=73&odds_denominator[0]=20",marketStatus:"LIVE"}]},{displayName:"USA vs. Australia Future",legs:[{id:"472f176b-7575-4d1d-ac63-bcb2d4ec6da9",marketId:"2e5fdfdf-7021-464f-939d-5497030fe765",marketSelectionId:"3727a3f5-5143-4616-ab4f-713bcf40aa21",marketType:"list",status:"PENDING",odds:"+265",boostType:"NONE",selectionText:"Aaron Pike",type:"list",marketText:"Tournament Winner",icon:"https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png",url:"https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/golf/organization/dp-world-tour/competition/isps-handa-australian-open/event/df8ba72f-4be8-4569-840e-954dbd9a7806&market_selection_id[0]=3727a3f5-5143-4616-ab4f-713bcf40aa21&odds_numerator[0]=73&odds_denominator[0]=20",marketStatus:"LIVE"}]},{displayName:"Championship Future",legs:[{id:"472f176b-7575-4d1d-ac63-bcb2d4ec6da9",marketId:"2e5fdfdf-7021-464f-939d-5497030fe765",marketSelectionId:"3727a3f5-5143-4616-ab4f-713bcf40aa21",marketType:"list",status:"PENDING",odds:"+265",boostType:"NONE",selectionText:"Aaron Pike",type:"list",marketText:"Tournament Winner",icon:"https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png",url:"https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/golf/organization/dp-world-tour/competition/isps-handa-australian-open/event/df8ba72f-4be8-4569-840e-954dbd9a7806&market_selection_id[0]=3727a3f5-5143-4616-ab4f-713bcf40aa21&odds_numerator[0]=73&odds_denominator[0]=20",marketStatus:"LIVE"}]}],rewardInfo:{type:"NONE"},legCount:5,isNoAction:!1,betDisplayStatement:"to win"},{id:"9m1bBxUYPyPPjkpzT6buDlcuQng=",type:"STRAIGHT",betStatus:"OPEN",outcome:"PENDING",overrideOutcome:"NOT_SET",betAmount:"2",payoutAmount:"10.80",odds:"+440",startTime:"2025-04-30T15:12Z",events:[{displayName:"SBG/SBE Odds Boost Test",legs:[{id:"8061671d-6d38-4193-a5a6-beab37855840",marketId:"567d2a44-ba70-4881-86d7-d25fca94b592",marketSelectionId:"59b2b7ee-46c1-4cbc-9286-77fd8670cf9d",marketType:"list",status:"PENDING",odds:"+440",boostType:"ODDS_BOOST",selectionText:"Lauri Markkanen and Anfernee Simons to Each Record 20+ Points",type:"list",marketText:"SBG/SBE Odds Boost (Was +100)",icon:"https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png",url:"https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/odds-boost/organization/odds-boosts/competition/odds-boosts/event/218e1dca-f68d-4d61-9d79-394e7d752cae&market_selection_id[0]=59b2b7ee-46c1-4cbc-9286-77fd8670cf9d&odds_numerator[0]=27&odds_denominator[0]=5",marketStatus:"LIVE"}]}],rewardInfo:{type:"ODDS_BOOST",icon:{light:"https://a.espncdn.com/i/espnbet/boost.png",dark:"https://a.espncdn.com/i/espnbet/boost.png"}},legCount:1,isNoAction:!1,betDisplayStatement:"to win"},{id:"MCH06SyVYvu1UZkhj4KutmL9qKY=",type:"STRAIGHT",betStatus:"OPEN",outcome:"PENDING",overrideOutcome:"NOT_SET",betAmount:"3",payoutAmount:"16.20",odds:"+440",startTime:"2025-04-30T15:12Z",events:[{displayName:"SBG/SBE Odds Boost Test",legs:[{id:"020d7a12-3aa8-459e-8aa2-34eaced4ad7d",marketId:"567d2a44-ba70-4881-86d7-d25fca94b592",marketSelectionId:"59b2b7ee-46c1-4cbc-9286-77fd8670cf9d",marketType:"list",status:"PENDING",odds:"+440",boostType:"ODDS_BOOST",selectionText:"Lauri Markkanen and Anfernee Simons to Each Record 20+ Points",type:"list",marketText:"SBG/SBE Odds Boost (Was +100)",icon:"https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png",url:"https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/odds-boost/organization/odds-boosts/competition/odds-boosts/event/218e1dca-f68d-4d61-9d79-394e7d752cae&market_selection_id[0]=59b2b7ee-46c1-4cbc-9286-77fd8670cf9d&odds_numerator[0]=27&odds_denominator[0]=5",marketStatus:"LIVE"}]}],rewardInfo:{type:"ODDS_BOOST",icon:{light:"https://a.espncdn.com/i/espnbet/boost.png",dark:"https://a.espncdn.com/i/espnbet/boost.png"}},legCount:1,isNoAction:!1,betDisplayStatement:"to win"},{id:"xfFjqsLCjaFx93eH6c8bOQ9mEkI=",type:"STRAIGHT",betStatus:"OPEN",outcome:"PENDING",overrideOutcome:"NOT_SET",betAmount:"2",payoutAmount:"12.00",odds:"+500",startTime:"2025-04-30T17:11Z",events:[{displayName:"SBG NHL In The News Test",legs:[{id:"910a1ebf-592d-4ae6-9471-6f648786b7e6",marketId:"c5252e65-0999-40af-b366-11967f009871",marketSelectionId:"c9b1446c-26af-43c4-9705-3a2275dc0ee5",marketType:"list",status:"PENDING",odds:"+500",boostType:"NONE",selectionText:"Long Desc Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus non gravida mi. Aliquam volutpat felis ut tempor dictum.",type:"list",marketText:"SBG In The News NHL",icon:"https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png",url:"https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/odds-boost/organization/in-the-news/competition/in-the-news/event/4cd8e64d-472c-412f-b786-dd91c98ab74e&market_selection_id[0]=c9b1446c-26af-43c4-9705-3a2275dc0ee5&odds_numerator[0]=6&odds_denominator[0]=1",marketStatus:"LIVE"}]}],rewardInfo:{type:"NONE"},legCount:1,isNoAction:!1,betDisplayStatement:"to win"},{id:"A0RLmTR8mjEFSwaa21JeOhyVdXc=",type:"STRAIGHT",betStatus:"OPEN",outcome:"PENDING",overrideOutcome:"NOT_SET",betAmount:"1",payoutAmount:"3.00",odds:"+200",startTime:"2025-04-30T17:13Z",events:[{displayName:"SBG NBA Special Test",legs:[{id:"1aa22098-57b7-4a77-bbf2-ca7ebf812083",marketId:"bc783144-0a2c-465b-9e8f-2ef55a17705c",marketSelectionId:"7a91fb3d-1291-4163-b5e0-07fe63e8e706",marketType:"list",status:"PENDING",odds:"+200",boostType:"NONE",selectionText:"Tyrese Haliburton to Record 12+ Assists",type:"list",marketText:"SBG NBA Special Test",icon:"https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png",url:"https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/odds-boost/organization/specials/competition/specials/event/d53171e2-f821-4da8-9b1c-ce1a4b735914&market_selection_id[0]=7a91fb3d-1291-4163-b5e0-07fe63e8e706&odds_numerator[0]=33&odds_denominator[0]=10",marketStatus:"LIVE"}]}],rewardInfo:{type:"NONE"},legCount:1,isNoAction:!1,betDisplayStatement:"to win"},{id:"Qhelx5np79zhAchzXXTL1HdDb80=",type:"STRAIGHT",betStatus:"OPEN",outcome:"PENDING",overrideOutcome:"NOT_SET",betAmount:"2",payoutAmount:"10.00",odds:"+400",startTime:"2025-04-30T17:13Z",events:[{displayName:"SBG NBA Special Test",legs:[{id:"73f3af25-5e1a-47eb-bcec-5b23e911c14e",marketId:"bc783144-0a2c-465b-9e8f-2ef55a17705c",marketSelectionId:"0a898e16-2a0a-44dd-a580-3ae3bade3684",marketType:"list",status:"PENDING",odds:"+400",boostType:"NONE",selectionText:"Long Desc Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus non gravida mi. Aliquam volutpat felis ut tempor dictum.",type:"list",marketText:"SBG NBA Special Test",icon:"https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png",url:"https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/odds-boost/organization/specials/competition/specials/event/d53171e2-f821-4da8-9b1c-ce1a4b735914&market_selection_id[0]=0a898e16-2a0a-44dd-a580-3ae3bade3684&odds_numerator[0]=37&odds_denominator[0]=10",marketStatus:"LIVE"}]}],rewardInfo:{type:"NONE"},legCount:1,isNoAction:!1,betDisplayStatement:"to win"}],settled:[{id:"z/WEFT7NDVjgb0d/+Elr45MfuRg=",type:"STRAIGHT",betStatus:"SETTLED",outcome:"WIN",overrideOutcome:"NOT_SET",closedAtTime:"2025-03-08T05:33Z",betAmount:"1",payoutAmount:"1.91",odds:"-110",startTime:"2025-03-08T03:00Z",events:[{displayName:"San Antonio Spurs @ Sacramento Kings",legs:[{id:"05011199-c88f-4c0d-be31-1b1c7549e273",marketId:"728792c6-d2da-435b-920a-eb86bdc45e8c",marketSelectionId:"60f8aef9-4c98-4ce2-b861-34e72c2ad13b",marketType:"total",status:"WIN",odds:"-110",boostType:"NONE",selectionText:"Over 235",type:"over",points:"235.0",marketText:"Total Points",icon:"https://a.espncdn.com/i/espnbet/mybets_green_check_icon.png",iconDark:"https://a.espncdn.com/i/espnbet/dark/mybets_green_check_icon.png",url:"https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/basketball/organization/united-states/competition/nba/event/e1163795-ddfa-4bfc-9d52-018e8259e4b5&market_selection_id[0]=60f8aef9-4c98-4ce2-b861-34e72c2ad13b&odds_numerator[0]=2&odds_denominator[0]=1",marketStatus:"SETTLED",accrued:{goal:235}}]}],rewardInfo:{type:"NONE"},legCount:1,isNoAction:!1,betDisplayStatement:"you won"}]},promotion:{title:"The official sportsbook of ESPN",description:"Open the ESPN BET app on a mobile device and start betting!",logo:"https://a.espncdn.com/i/espnbet/ESPN_Bet_Sportsbook_Light.svg",qrCode:"https://assets.geo.hosted.espnsb.com/api/ext_mocks/qr.png",backgroundImage:"https://www.espn.com/redesign/assets/img/ictv/bkg_qr_bet.png"},disclaimers:{location:"Use a translation with a key based on location here",gambling:"Use a translation with some key based on gambling here"},...l};var p=s(8),u=s(4),m=s(104);function b(e,t,s){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var a=s.call(e,t||"default");if("object"!=typeof a)return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}const g=e=>"object"==typeof e&&null!==e&&"event"in e&&"object"==typeof e.event;class h extends d.a{constructor(e,t,s,n={}){super(),b(this,"betsItems",new a.a([])),b(this,"isDataLoading",new a.a(!0)),b(this,"errorState",new a.a("none")),b(this,"hasEverSuccessfullyLoaded",new a.a(!1)),b(this,"hideWagers",new a.a(!1)),b(this,"eventId",void 0),b(this,"delegate",void 0),b(this,"betsService",void 0),b(this,"analyticsService",void 0),b(this,"pollingInterval",void 0),b(this,"pollingTask",null),b(this,"lastNonPersonalizedResponseHash",null),b(this,"lastPersonalizedResponseHash",null),b(this,"useMockData",!1),b(this,"userSettingsManager",void 0),b(this,"settingsSubscription",null),b(this,"initialized",!1),this.eventId=e,this.delegate=t,this.betsService=new i(t),this.analyticsService=s,this.pollingInterval=3e4,this.useMockData=n.useMockData||!1,this.userSettingsManager=r.a.getInstance(),this.hideWagers.value=this.userSettingsManager.shouldHideWagers(),this.settingsSubscription=this.userSettingsManager.settings.subscribe(()=>{this.updateHideWagersFromSettings()}),this.betsService=new i(t)}async init(){this.trackPanelView(),await this.fetchNewData(),this.refreshPolling(),this.initialized=!0}cleanup(){this.stopPolling(),this.settingsSubscription&&(this.settingsSubscription(),this.settingsSubscription=null),this.initialized=!1}async trackPanelView(){try{const e=this.getUserBetCounts();await this.analyticsService.panelView("espnBet",e)}catch(e){Object(u.a)(e,{context:"BetsViewModel.trackPanelView"}),console.error("[BET] Error tracking panel view:",e)}}async trackCardClick(e,t){try{const s={...this.getUserBetCounts(),card:e,bet_type:t||null};await this.analyticsService.panelClick({type:"espnBet",name:"bets_item_clicked",metadata:s})}catch(s){Object(u.a)(s,{context:"BetsViewModel.trackCardClick",cardType:e,betType:t}),console.error("[BET] Error tracking card click:",s)}}getUserBetCounts(){try{let e=0,t=0;for(const s of this.betsItems.value)if("userBets"===s.type){const a=s;t=[...a.data.bets.live,...a.data.bets.settled,...a.data.bets.upcoming].length,e=a.data.bets.live.length;break}return{in_game_bets:e,total_bets:t}}catch(e){return Object(u.a)(e,{context:"BetsViewModel.getUserBetCounts"}),console.error("[BET] Error getting user bet counts:",e),{in_game_bets:0,total_bets:0}}}refreshPolling(){this.stopPolling(),this.useMockData||(this.pollingTask={stop:()=>{}},this.pollWithInterval())}async getUserCredentials(){return{swid:await this.delegate.getUserSWID()||"",jwt:await this.delegate.getUserToken()||""}}updatePollingInterval(e){const t=this.getResponseHeaderPollingIntervalValue(e),s=this.getPanelConfigInterval(),a=t||s;a&&a!==this.pollingInterval&&(this.pollingInterval=a,console.log(`[BET] Updating polling interval to ${this.pollingInterval} milliseconds`),this.refreshPolling())}getPanelConfigInterval(){var e,t,s;const a=p.default.getPageConfig(),n=null==a||null===(e=a.panels)||void 0===e?void 0:e.find(e=>"espnBet"===e.panel_type);if(!n)return null;const o=null===(t=n.renderer)||void 0===t||null===(s=t.block_data)||void 0===s?void 0:s.odds_polling_interval;if(!o)return null;const i=parseInt(o,10);return isNaN(i)||i<=0?(console.warn(`[BET] Invalid polling interval from panel config: ${o}.`),null):1e3*i}getResponseHeaderPollingIntervalValue(e){const t=e["polling-interval"];if(!t)return null;const s=parseInt(t,10);return isNaN(s)||s<=0?(console.warn(`[BET] Invalid polling interval header received: ${t}.`),null):1e3*s}async pollWithInterval(){try{const{swid:e,jwt:t}=await this.getUserCredentials();this.pollingTask=this.betsService.pollPersonalizedBetsWithHeaders(this.eventId,e,t,this.pollingInterval,e=>{this.updatePollingInterval(e.headers),this.processPolledData(e.data)},this.handlePollingError.bind(this))}catch(e){Object(u.a)(e,{context:"BetsViewModel.pollWithInterval"}),console.error("[BET] Error setting up polling:",e)}}processPolledData(e){const t=Object(m.b)(JSON.stringify(e));if(g(e)){if(this.lastPersonalizedResponseHash===t&&this.hasEverSuccessfullyLoaded.value)return void console.log("[BET] Response hash is the same as last successful response - skipping update");this.lastPersonalizedResponseHash=t}else{if(this.lastNonPersonalizedResponseHash===t&&this.hasEverSuccessfullyLoaded.value)return void console.log("[BET] Response hash is the same as last successful response - skipping update");this.lastNonPersonalizedResponseHash=t}this.hasEverSuccessfullyLoaded.value=!0,this.errorState.value="none",this.processBetsData(e)}processBetsData(e){const t=[];if(!Object.keys(e).length)return;const s=this.processSixPackData(e);s&&t.push(s);const a=this.processLocationDisclaimer(e);a&&t.push(a);const n=this.processUserBetsData(e);n&&t.push(n);const o=this.processHotProps(e);o&&t.push(o);const i=this.processPromoCode(e);i&&t.push(i);const r=this.processGamblingMessage(e);r&&t.push(r),this.betsItems.value=t}processLocationDisclaimer(e){var t;return g(e)&&null!==(t=e.disclaimers)&&void 0!==t&&t.location?{type:"locationDisclaimer",id:"locationDisclaimer",data:{text:e.disclaimers.location}}:null}processPromoCode(e){var t;return g(e)&&e.promotion?{type:"promo",data:{title:e.promotion.title||"",description:e.promotion.description||"",logo:e.promotion.logo||"",qrCode:e.promotion.qrCode||"",backgroundImage:e.promotion.backgroundImage||""},id:"promo-"+((null===(t=e.event)||void 0===t?void 0:t.id)||e.id)}:null}processGamblingMessage(e){var t;return g(e)&&null!==(t=e.disclaimers)&&void 0!==t&&t.gambling?{type:"gamblingMessage",id:"gamblingMessage",data:{text:e.disclaimers.gambling}}:null}processSixPackData(e){var t,s,a,n,o,i,r,d,l,c;const p=g(e),u=null===(t=e.entities)||void 0===t?void 0:t.teams,m=p?null===(a=e.event)||void 0===a||null===(n=a.bets)||void 0===n?void 0:n.odds:null===(s=e.bets)||void 0===s?void 0:s.odds,b=p?null===(o=e.event)||void 0===o?void 0:o.gameState:e.gameState,h=p?null===(i=e.event)||void 0===i?void 0:i.sport:e.sport,f=p?null===(r=e.event)||void 0===r?void 0:r.id:e.id,v=p?"soccer"===(null===(d=e.event)||void 0===d?void 0:d.sport):"soccer"===e.sport;if(!(m&&b&&h&&f&&u))return null;const y=Object.values(u);let _,k;for(const e of Object.values(u)){const t=m.find(e=>"pointSpread"===e.type);t&&(t.values.some(t=>t.team===e.id&&"home"===t.type)?k=e:t.values.some(t=>t.team===e.id&&"away"===t.type)&&(_=e))}if(!k||!_)switch(console.warn("Could not determine home/away teams from odds, using first two teams"),y.length){case 0:throw new Error("No teams found in response");case 1:k=y[0],_=y[0];break;case 2:k=y[0],_=y[1];break;default:k=y[0],_=y[1],console.warn(`Warning: Unexpected team count (${y.length}) in six pack response`)}if(!_||!k)throw new Error("Could not determine home or away team from response");const S="in"===b,T=v&&!S?null===(E=k.favoredAtOpen)||void 0===E||E:null===(N=k.favored)||void 0===N||N;var N,E;const w=v&&!S?null!==(P=_.favoredAtOpen)&&void 0!==P&&P:null!==(I=_.favored)&&void 0!==I&&I;var I,P;let D="",B="",O="",L="",A="",x="",G="",M="",W="",z="",C="",R="",H="",V="",j="",U="",q="";const F=new Set,$=[];for(const e of m){F.has(e.type)||($.push({type:e.type,abbreviation:e.abbreviation}),F.add(e.type));const t="live"===e.state,s="close"===e.state,a="open"===e.state;switch(e.type){case"pointSpread":if(S?t:s)for(const t of e.values){var Z,Y,J,K;if("home"===t.type)G=null!==(Z=t.line)&&void 0!==Z?Z:"",M=null!==(Y=t.odds)&&void 0!==Y?Y:"";if("away"===t.type)A=null!==(J=t.line)&&void 0!==J?J:"",x=null!==(K=t.odds)&&void 0!==K?K:""}if((S?s:a)&&!v){if(T)for(const t of e.values){var Q,X;if("home"===t.type)O=null!==(Q=t.line)&&void 0!==Q?Q:"",L=null!==(X=t.odds)&&void 0!==X?X:""}if(w)for(const t of e.values){var ee,te;if("away"===t.type)D=null!==(ee=t.line)&&void 0!==ee?ee:"",B=null!==(te=t.odds)&&void 0!==te?te:""}}break;case"total":if(S?t:s)for(const t of e.values){var se,ae,ne,oe,ie,re,de,le;if("over"===t.type)if(v)C=null!==(se=t.line)&&void 0!==se?se:"",R=null!==(ae=t.odds)&&void 0!==ae?ae:"";else W=null!==(ne=t.line)&&void 0!==ne?ne:"",z=null!==(oe=t.odds)&&void 0!==oe?oe:"";if("under"===t.type)if(v)W=null!==(ie=t.line)&&void 0!==ie?ie:"",z=null!==(re=t.odds)&&void 0!==re?re:"";else C=null!==(de=t.line)&&void 0!==de?de:"",R=null!==(le=t.odds)&&void 0!==le?le:""}if(S?s:a){if(!T)for(const t of e.values){var ce,pe;if(v&&"over"===t.type||!v&&"under"===t.type)O=null!==(ce=t.line)&&void 0!==ce?ce:"",L=null!==(pe=t.odds)&&void 0!==pe?pe:""}if(!w)for(const t of e.values){var ue,me;if(v&&"under"===t.type||!v&&"over"===t.type)D=null!==(ue=t.line)&&void 0!==ue?ue:"",B=null!==(me=t.odds)&&void 0!==me?me:""}}break;case"moneyline":{const n=S?t:s;if(n)for(const t of e.values){var be,ge;if("home"===t.type)V=null!==(be=t.odds)&&void 0!==be?be:"";if("away"===t.type)H=null!==(ge=t.odds)&&void 0!==ge?ge:""}if(v){const t=S?s:a;for(const s of e.values)if("draw"===s.type){var he,fe;if(t)j=null!==(he=s.odds)&&void 0!==he?he:"",U="DRAW";if(n)q=null!==(fe=s.odds)&&void 0!==fe?fe:""}if(t){if(T)for(const t of e.values){var ve,ye;if("home"===t.type)O=null!==(ve=t.odds)&&void 0!==ve?ve:"",L=null!==(ye=e.abbreviation)&&void 0!==ye?ye:""}if(w)for(const t of e.values){var _e,ke;if("away"===t.type)D=null!==(_e=t.odds)&&void 0!==_e?_e:"",B=null!==(ke=e.abbreviation)&&void 0!==ke?ke:""}}}break}}}const Se={teamAbbreviation:null!==(l=_.abbreviation)&&void 0!==l?l:"",startOfGameFirstLine:D,startOfGameSecondLine:B,gameSpreadFirstLine:A,gameSpreadSecondLine:x,totalPointsFirstLine:W,totalPointsSecondLine:z,moneylineFirstLine:H},Te={teamAbbreviation:null!==(c=k.abbreviation)&&void 0!==c?c:"",startOfGameFirstLine:O,startOfGameSecondLine:L,gameSpreadFirstLine:G,gameSpreadSecondLine:M,totalPointsFirstLine:C,totalPointsSecondLine:R,moneylineFirstLine:V};return{id:"sixpack-"+f,type:"sixPack",data:{topTeamOdds:v?Te:Se,bottomTeamOdds:v?Se:Te,drawOdds:j&&U&&q?{teamAbbreviation:"DRAW",startOfGameFirstLine:j,startOfGameSecondLine:U,gameSpreadFirstLine:"",gameSpreadSecondLine:"",totalPointsFirstLine:"",totalPointsSecondLine:"",moneylineFirstLine:q}:void 0,orderedColumns:$,gameState:b},teamInfo:{home:k,away:_},hideWagers:this.hideWagers.value}}processUserBetsData(e){if(!g(e)||!e.event||!e.betsModule)return null;return{data:{bets:{live:e.betsModule.live.filter(e=>"promo"!==e.type),settled:e.betsModule.settled.filter(e=>"promo"!==e.type),upcoming:e.betsModule.upcoming.filter(e=>"promo"!==e.type)},defaultTab:e.betsModule.defaultTab},id:"userBets-"+e.event.id,type:"userBets",hideWagers:this.hideWagers.value}}processHotProps(e){var t;const s=g(e)?null===(t=e.event)||void 0===t?void 0:t.featured:e.featured;if(!s||!Array.isArray(s))return null;if(!s.every(e=>Boolean(e&&e.id)))return null;const a=s.filter(e=>e.selections.length>0);return{type:"hotProps",hideWagers:this.hideWagers.value,id:"hotProps",data:{items:a.map(e=>{const t=e.selections[0];return{id:t.id,odds:t.odds.current||"",marketText:t.text,selectionText:e.text,status:t.status,type:t.type,icon:t.icon,iconDark:t.iconDark,outcome:t.outcome}})}}}handlePollingError(e){console.error("Polling error:",e),this.hasEverSuccessfullyLoaded.value||(this.errorState.value="tabLoadFailure",this.betsItems.value=[])}stopPolling(){this.pollingTask&&(this.pollingTask.stop(),this.pollingTask=null),this.isDataLoading.value&&(this.isDataLoading.value=!1)}async fetchNewData(){this.isDataLoading.value=!0;try{if(this.useMockData)return this.betsItems.value=[],void await this.fetchMockData();await this.fetchPersonalizedData(),this.isDataLoading.value=!1}catch(e){Object(u.a)(e,{context:"BetsViewModel.fetchNewData"}),console.error("[BET] Error fetching bet data:",e),this.hasEverSuccessfullyLoaded.value||(this.errorState.value="tabLoadFailure",this.betsItems.value=[]),this.isDataLoading.value=!1}}async fetchPersonalizedData(){try{const{swid:e,jwt:t}=await this.getUserCredentials(),s=await this.betsService.getPersonalizedBets(this.eventId,e,t);this.processPolledData(s)}catch(e){throw Object(u.a)(e,{context:"BetsViewModel.fetchPersonalizedData"}),console.error("[BET] Error fetching personalized bets:",e),e}}async fetchMockData(){this.processBetsData(c),this.hasEverSuccessfullyLoaded.value=!0,this.errorState.value="none",this.isDataLoading.value=!1}clearTabLoadFailure(){this.errorState.value="none",setTimeout(()=>{this.refreshPolling()},100)}shouldHideWagers(){return this.hideWagers.value}updateHideWagersFromSettings(){this.hideWagers.value=this.userSettingsManager.shouldHideWagers(),this.refreshBetItemsWithNewSettings()}refreshBetItemsWithNewSettings(){this.betsItems.value=this.betsItems.value.map(e=>"sixPack"===e.type||"userBets"===e.type||"hotProps"===e.type?{...e,hideWagers:this.hideWagers.value}:e)}}t.default=h}}]);
2
- //# sourceMappingURL=12.maestro-web-sdk.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["webpack:///./src/helpers/strings.ts","webpack:///./src/modules/espn/bets/services/BetsService.ts","webpack:///./src/modules/espn/bets/mocks.ts","webpack:///./src/modules/espn/bets/view-model/BetsViewModel.ts"],"names":["slugify","str","toLowerCase","trim","replace","stringHashCode","hash","i","length","charCodeAt","BetsService","constructor","delegate","_defineProperty","this","networkManager","NetworkManager","externalBaseURL","getBettingAPIBaseURL","eventID","externalApiRequest","endpoint","nonPersonalizedBetsEndpoint","method","HttpMethod","GET","params","deviceType","headers","swid","jwt","personalizedBetsEndpoint","externalApiRequestWithHeaders","pollPersonalizedBets","interval","onData","onError","pollExternalApiRequest","pollPersonalizedBetsWithHeaders","pollExternalApiRequestWithHeaders","event","id","sport","date","gameState","featured","selections","icon","iconDark","odds","outcome","status","text","type","bets","displayName","abbreviation","state","values","team","line","MOCK_BETS_API_RESPONSE","entities","teams","uid","guid","slug","shortDisplayName","name","nickname","location","color","alternateColor","favored","betsModule","defaultTab","upcoming","live","betStatus","overrideOutcome","betAmount","payoutAmount","startTime","events","legs","marketId","marketSelectionId","marketType","boostType","selectionText","marketText","url","marketStatus","rewardInfo","legCount","isNoAction","betDisplayStatement","light","dark","settled","closedAtTime","points","accrued","goal","promotion","title","description","logo","qrCode","backgroundImage","disclaimers","gambling","isPersonalizedBetsResponse","data","BetsViewModel","ViewModel","eventId","analyticsService","options","super","Observable","betsService","pollingInterval","useMockData","userSettingsManager","UserSettingsManager","getInstance","hideWagers","value","shouldHideWagers","settingsSubscription","settings","subscribe","updateHideWagersFromSettings","trackPanelView","fetchNewData","refreshPolling","initialized","cleanup","stopPolling","betCounts","getUserBetCounts","panelView","error","captureException","context","console","cardType","betType","metadata","card","bet_type","panelClick","inGameBets","totalBets","item","betsItems","userBetsItem","in_game_bets","total_bets","pollingTask","stop","pollWithInterval","getUserSWID","getUserToken","updatePollingInterval","headerInterval","getResponseHeaderPollingIntervalValue","panelConfigInterval","getPanelConfigInterval","newInterval","log","_config$panels","_panel$renderer","_panel$renderer$block","config","SDK","getPageConfig","panel","panels","find","p","panel_type","oddsPollingInterval","renderer","block_data","odds_polling_interval","parsedInterval","parseInt","isNaN","warn","getUserCredentials","response","processPolledData","handlePollingError","bind","responseHash","JSON","stringify","lastPersonalizedResponseHash","hasEverSuccessfullyLoaded","lastNonPersonalizedResponseHash","errorState","processBetsData","newItems","Object","keys","sixPack","processSixPackData","push","locationDisclaimer","processLocationDisclaimer","userBets","processUserBetsData","hotProps","processHotProps","promoCode","processPromoCode","gamblingMessage","processGamblingMessage","_data$disclaimers","_data$event","_data$disclaimers2","_response$entities","_response$bets","_response$event","_response$event$bets","_response$event2","_response$event3","_response$event4","_response$event5","_awayTeam$abbreviatio","_homeTeam$abbreviatio","isPersonalized","isSoccer","teamArray","awayTeam","homeTeam","spreadOdds","odd","some","v","Error","isInProgress","isHomeFavoured","_homeTeam$favoredAtOp","favoredAtOpen","_homeTeam$favored","isAwayFavoured","_awayTeam$favoredAtOp","_awayTeam$favored","awayTeamStartGameFirstLine","awayTeamStartGameSecondLine","homeTeamStartGameFirstLine","homeTeamStartGameSecondLine","awaySpreadFirstLine","awaySpreadSecondLine","homeSpreadFirstLine","homeSpreadSecondLine","awayTotalFirstLine","awayTotalSecondLine","homeTotalFirstLine","homeTotalSecondLine","awayMoneylineFirstLine","homeMoneylineFirstLine","drawGameStateFirstLine","drawGameStateSecondLine","drawMoneylineFirstLine","itemTypeSet","Set","orderedColumns","oddsItem","has","add","isLive","isClose","isOpen","_value$line","_value$odds","_value$line2","_value$odds2","_value$line3","_value$odds3","_value$line4","_value$odds4","_value$line5","_value$odds5","_value$line6","_value$odds6","_value$line7","_value$odds7","_value$line8","_value$odds8","_value$line9","_value$odds9","_value$line0","_value$odds0","mlCorrectState","_value$odds1","_value$odds10","moneyLineStartOfGameCorrectState","_value$odds11","_value$odds12","_value$odds13","_oddsItem$abbreviatio","_value$odds14","_oddsItem$abbreviatio2","awayTeamOdds","teamAbbreviation","startOfGameFirstLine","startOfGameSecondLine","gameSpreadFirstLine","gameSpreadSecondLine","totalPointsFirstLine","totalPointsSecondLine","moneylineFirstLine","homeTeamOdds","topTeamOdds","bottomTeamOdds","drawOdds","undefined","teamInfo","home","away","filter","bet","_response$event6","Array","isArray","every","hotProp","Boolean","filteredHotProps","items","map","current","isDataLoading","fetchMockData","fetchPersonalizedData","getPersonalizedBets","clearTabLoadFailure","setTimeout","refreshBetItemsWithNewSettings"],"mappings":"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","file":"12.maestro-web-sdk.esm.js","sourcesContent":["export const slugify = (str: string) =>\n str\n .toLowerCase()\n .trim()\n .replace(/[\\s\\W-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n\nexport function stringHashCode(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n}\n","import NetworkManager, {\n HttpMethod,\n} from '../../../../services/NetworkManager/NetworkManager';\nimport { IBetsResponse, IPersonalizedBetsResponse } from '../interfaces/IBets';\nimport IMaestroEventDelegate from '@/interfaces/IMaestroEventDelegate';\n\n/**\n * Service for handling bets-related API calls\n */\nclass BetsService {\n public networkManager: NetworkManager;\n\n constructor(delegate: IMaestroEventDelegate) {\n this.networkManager = new NetworkManager({\n externalBaseURL: delegate.getBettingAPIBaseURL(),\n });\n }\n\n /**\n * Get non-personalized bets for an event\n *\n * @deprecated Use getPersonalizedBets instead. This method is kept for backward compatibility.\n * @param eventID - The ID of the event\n * @returns Promise with the bets data\n */\n async getNonPersonalizedBets(eventID: string): Promise<IBetsResponse> {\n return this.networkManager.externalApiRequest({\n endpoint: this.nonPersonalizedBetsEndpoint(eventID),\n method: HttpMethod.GET,\n params: { deviceType: 'ictv' },\n headers: {},\n });\n }\n\n /**\n * Get personalized bets for an event\n *\n * @param eventID - The ID of the event\n * @param swid - The ESPN SWID parameter (format provided by client app delegate)\n * @param jwt - The authorization JWT (empty string for anonymous users)\n * @returns Promise with the personalized bets data\n */\n async getPersonalizedBets(\n eventID: string,\n swid: string,\n jwt: string\n ): Promise<IPersonalizedBetsResponse> {\n return this.networkManager.externalApiRequest({\n endpoint: this.personalizedBetsEndpoint(eventID),\n method: HttpMethod.GET,\n params: { swid, deviceType: 'ictv' },\n headers: { 'x-p13n-auth': jwt },\n });\n }\n\n /**\n * Get personalized bets for an event with headers\n *\n * @param eventID - The ID of the event\n * @param swid - The ESPN SWID parameter (format provided by client app delegate)\n * @param jwt - The authorization JWT (empty string for anonymous users)\n * @returns Promise with the personalized bets data and headers\n */\n async getPersonalizedBetsWithHeaders(\n eventID: string,\n swid: string,\n jwt: string\n ): Promise<{\n data: IPersonalizedBetsResponse;\n headers: Record<string, string>;\n }> {\n return this.networkManager.externalApiRequestWithHeaders({\n endpoint: this.personalizedBetsEndpoint(eventID),\n method: HttpMethod.GET,\n params: { swid, deviceType: 'ictv' },\n headers: { 'x-p13n-auth': jwt },\n });\n }\n\n /**\n * Start polling for personalized bets\n *\n * @param eventID - The ID of the event\n * @param swid - The ESPN SWID parameter\n * @param jwt - The authorization JWT\n * @param interval - The polling interval in milliseconds\n * @param onData - Callback for successful data fetch\n * @param onError - Callback for errors\n * @returns Object with a stop function to stop polling\n */\n pollPersonalizedBets(\n eventID: string,\n swid: string,\n jwt: string,\n interval: number,\n onData: (data: IPersonalizedBetsResponse) => void,\n onError?: (error: Error) => void\n ): { stop: () => void } {\n return this.networkManager.pollExternalApiRequest({\n endpoint: this.personalizedBetsEndpoint(eventID),\n interval,\n method: HttpMethod.GET,\n params: { swid, deviceType: 'ictv' },\n headers: { 'x-p13n-auth': jwt },\n onData,\n onError,\n });\n }\n\n /**\n * Start polling for personalized bets and return both data and headers\n *\n * @param eventID - The ID of the event\n * @param swid - The ESPN SWID parameter\n * @param jwt - The authorization JWT\n * @param interval - The polling interval in milliseconds\n * @param onData - Callback for successful data fetch with headers\n * @param onError - Callback for errors\n * @returns Object with a stop function to stop polling\n */\n pollPersonalizedBetsWithHeaders(\n eventID: string,\n swid: string,\n jwt: string,\n interval: number,\n onData: (response: {\n data: IPersonalizedBetsResponse;\n headers: Record<string, string>;\n }) => void,\n onError?: (error: Error) => void\n ): { stop: () => void } {\n return this.networkManager.pollExternalApiRequestWithHeaders({\n endpoint: this.personalizedBetsEndpoint(eventID),\n interval,\n method: HttpMethod.GET,\n params: { swid, deviceType: 'ictv' },\n headers: { 'x-p13n-auth': jwt },\n onData,\n onError,\n });\n }\n\n /**\n * Get the endpoint for non-personalized bets\n *\n * @deprecated This endpoint is no longer used.\n */\n nonPersonalizedBetsEndpoint(eventID: string): string {\n return `/site/v2/events/${eventID}/odds`;\n }\n\n /**\n * Get the endpoint for personalized bets\n */\n personalizedBetsEndpoint(eventID: string): string {\n return `/personalized/site/v2/events/${eventID}/odds`;\n }\n}\n\nexport default BetsService;\n","import { BetLiveEvent, IPersonalizedBetsResponse } from './interfaces/IBets';\n\nconst event: BetLiveEvent = {\n id: '401721458',\n sport: 'basketball',\n date: '2025-02-28T02:00Z',\n gameState: 'post',\n featured: [\n {\n date: '2024-06-09T17:35Z',\n id: '00015c79-3454-4356-bab6-af050554b761',\n selections: [\n {\n icon: 'https://a.espncdn.com/i/espnbet/mybets_under_caret_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_under_caret_icon.png',\n id: 'f54ad0791-304e-43fe-a45a-96bd237c9c78',\n odds: {},\n outcome: 'PENDING',\n status: 'upcoming',\n text: 'Under 5.5',\n type: 'under',\n },\n {\n icon: 'https://a.espncdn.com/i/espnbet/mybets_under_caret_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_under_caret_icon.png',\n id: 'f54ad079-3604e-43fe-a45a-96bd237c9c78',\n odds: {},\n outcome: 'PENDING',\n status: 'upcoming',\n text: 'Under 5.5',\n type: 'under',\n },\n {\n icon: 'https://a.espncdn.com/i/espnbet/mybets_under_caret_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_under_caret_icon.png',\n id: 'f54ad079-5304e-43fe-a45a-96bd237c9c78',\n odds: {},\n outcome: 'PENDING',\n status: 'upcoming',\n text: 'Under 5.5',\n type: 'under',\n },\n {\n icon: 'https://a.espncdn.com/i/espnbet/mybets_under_caret_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_under_caret_icon.png',\n id: 'f54ad079-3044e-43fe-a45a-96bd237c9c78',\n odds: {},\n outcome: 'PENDING',\n status: 'upcoming',\n text: 'Under 5.5',\n type: 'under',\n },\n {\n icon: 'https://a.espncdn.com/i/espnbet/mybets_under_caret_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_under_caret_icon.png',\n id: 'f54ad079-304e-43fe-a45a-96bd237c9c278',\n odds: {},\n outcome: 'PENDING',\n status: 'upcoming',\n text: 'Under 5.5',\n type: 'under',\n },\n {\n icon: 'https://a.espncdn.com/i/espnbet/mybets_under_caret_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_under_caret_icon.png',\n id: 'f54ad079-304e-43fe-a45a-96bd1237c9c78',\n odds: {},\n outcome: 'PENDING',\n status: 'upcoming',\n text: 'Under 5.5',\n type: 'under',\n },\n ],\n text: 'Carlos Santana Total Hits + Runs + RBIs',\n },\n ],\n bets: {\n odds: [\n {\n displayName: 'Moneyline',\n abbreviation: 'ML',\n type: 'moneyline',\n state: 'close',\n values: [\n { odds: '-500', outcome: 'WIN', team: '130', type: 'home' },\n { odds: '+360', outcome: 'LOSS', team: '164', type: 'away' },\n ],\n },\n {\n displayName: 'Moneyline',\n abbreviation: 'ML',\n type: 'moneyline',\n state: 'open',\n values: [\n { odds: '-700', team: '130', type: 'home' },\n { odds: '+450', team: '164', type: 'away' },\n ],\n },\n {\n displayName: 'Total Points',\n abbreviation: 'Total',\n type: 'total',\n state: 'close',\n values: [\n { line: 'o154.5', odds: '-115', outcome: 'WIN', type: 'over' },\n { line: 'u154.5', odds: '-105', outcome: 'LOSS', type: 'under' },\n ],\n },\n {\n displayName: 'Total Points',\n abbreviation: 'Total',\n type: 'total',\n state: 'open',\n values: [\n { line: 'o154.5', odds: '-105', type: 'over' },\n { line: 'u154.5', odds: '-115', type: 'under' },\n ],\n },\n {\n displayName: 'Spread',\n abbreviation: 'Spread',\n type: 'pointSpread',\n state: 'close',\n values: [\n {\n line: '-9.5',\n odds: '-105',\n outcome: 'LOSS',\n team: '130',\n type: 'home',\n },\n {\n line: '+9.5',\n odds: '-115',\n outcome: 'WIN',\n team: '164',\n type: 'away',\n },\n ],\n },\n {\n displayName: 'Spread',\n abbreviation: 'Spread',\n type: 'pointSpread',\n state: 'open',\n values: [\n { line: '-11.5', odds: '-105', team: '130', type: 'home' },\n { line: '+11.5', odds: '-115', team: '164', type: 'away' },\n ],\n },\n ],\n },\n};\n\nexport const MOCK_BETS_API_RESPONSE: IPersonalizedBetsResponse = {\n entities: {\n teams: {\n '130': {\n id: '130',\n uid: 's:40~l:41~t:130',\n guid: 'c00151c6-cdd4-5aab-0130-37416052eb2a',\n slug: 'michigan-wolverines',\n abbreviation: 'MICH',\n displayName: 'Michigan Wolverines',\n shortDisplayName: 'Michigan',\n name: 'Wolverines',\n nickname: 'Michigan',\n location: 'Michigan',\n color: '00274c',\n alternateColor: 'ffcb05',\n favored: true,\n },\n '164': {\n id: '164',\n uid: 's:40~l:41~t:164',\n guid: '425c8e51-59d0-75a1-0815-dc3556c5cfda',\n slug: 'rutgers-scarlet-knights',\n abbreviation: 'RUTG',\n displayName: 'Rutgers Scarlet Knights',\n shortDisplayName: 'Rutgers',\n name: 'Scarlet Knights',\n nickname: 'Rutgers',\n location: 'Rutgers',\n color: 'd21034',\n alternateColor: 'ffffff',\n favored: false,\n },\n },\n },\n event,\n betsModule: {\n defaultTab: 'live',\n upcoming: [],\n live: [\n {\n id: 'emnPo+hN/Q7CzX/obYcJZCYGql4=',\n type: 'PARLAY',\n betStatus: 'OPEN',\n outcome: 'PENDING',\n overrideOutcome: 'NOT_SET',\n betAmount: '10',\n payoutAmount: '171.55',\n odds: '+1616',\n startTime: '2022-11-29T17:54Z',\n events: [\n {\n displayName: 'Investec South African Open Championship Future',\n legs: [\n {\n id: '71acdfe8-611e-47ae-b7ee-ba6684c6fefa',\n marketId: 'fc47f9f9-2852-4f63-9a70-4adf5b4addd2',\n marketSelectionId: '92803c34-a8b7-476e-9136-b88729c7e51e',\n marketType: 'list',\n status: 'PENDING',\n odds: '+370',\n boostType: 'NONE',\n selectionText: 'Aaron Baddeley',\n type: 'list',\n marketText: 'Tournament Winner',\n icon:\n 'https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png',\n url:\n 'https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/golf/organization/dp-world-tour/competition/investec-south-african-open-championship/event/56773312-5fdb-4cb5-b387-df8c18a2c857&market_selection_id[0]=92803c34-a8b7-476e-9136-b88729c7e51e&odds_numerator[0]=11&odds_denominator[0]=2',\n marketStatus: 'LIVE',\n },\n ],\n },\n {\n displayName: 'Lorem Ipsum Dolor Sit Amet',\n legs: [\n {\n id: '472f176b-7575-4d1d-ac63-bcb2d4ec6da9',\n marketId: '2e5fdfdf-7021-464f-939d-5497030fe765',\n marketSelectionId: '3727a3f5-5143-4616-ab4f-713bcf40aa21',\n marketType: 'list',\n status: 'PENDING',\n odds: '+265',\n boostType: 'NONE',\n selectionText: 'Aaron Pike',\n type: 'list',\n marketText: 'Tournament Winner',\n icon:\n 'https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png',\n url:\n 'https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/golf/organization/dp-world-tour/competition/isps-handa-australian-open/event/df8ba72f-4be8-4569-840e-954dbd9a7806&market_selection_id[0]=3727a3f5-5143-4616-ab4f-713bcf40aa21&odds_numerator[0]=73&odds_denominator[0]=20',\n marketStatus: 'LIVE',\n },\n ],\n },\n {\n displayName: 'Australian Open Future',\n legs: [\n {\n id: '472f176b-7575-4d1d-ac63-bcb2d4ec6da9',\n marketId: '2e5fdfdf-7021-464f-939d-5497030fe765',\n marketSelectionId: '3727a3f5-5143-4616-ab4f-713bcf40aa21',\n marketType: 'list',\n status: 'PENDING',\n odds: '+265',\n boostType: 'NONE',\n selectionText: 'Aaron Pike',\n type: 'list',\n marketText: 'Tournament Winner',\n icon:\n 'https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png',\n url:\n 'https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/golf/organization/dp-world-tour/competition/isps-handa-australian-open/event/df8ba72f-4be8-4569-840e-954dbd9a7806&market_selection_id[0]=3727a3f5-5143-4616-ab4f-713bcf40aa21&odds_numerator[0]=73&odds_denominator[0]=20',\n marketStatus: 'LIVE',\n },\n ],\n },\n {\n displayName: 'USA vs. Australia Future',\n legs: [\n {\n id: '472f176b-7575-4d1d-ac63-bcb2d4ec6da9',\n marketId: '2e5fdfdf-7021-464f-939d-5497030fe765',\n marketSelectionId: '3727a3f5-5143-4616-ab4f-713bcf40aa21',\n marketType: 'list',\n status: 'PENDING',\n odds: '+265',\n boostType: 'NONE',\n selectionText: 'Aaron Pike',\n type: 'list',\n marketText: 'Tournament Winner',\n icon:\n 'https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png',\n url:\n 'https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/golf/organization/dp-world-tour/competition/isps-handa-australian-open/event/df8ba72f-4be8-4569-840e-954dbd9a7806&market_selection_id[0]=3727a3f5-5143-4616-ab4f-713bcf40aa21&odds_numerator[0]=73&odds_denominator[0]=20',\n marketStatus: 'LIVE',\n },\n ],\n },\n {\n displayName: 'Championship Future',\n legs: [\n {\n id: '472f176b-7575-4d1d-ac63-bcb2d4ec6da9',\n marketId: '2e5fdfdf-7021-464f-939d-5497030fe765',\n marketSelectionId: '3727a3f5-5143-4616-ab4f-713bcf40aa21',\n marketType: 'list',\n status: 'PENDING',\n odds: '+265',\n boostType: 'NONE',\n selectionText: 'Aaron Pike',\n type: 'list',\n marketText: 'Tournament Winner',\n icon:\n 'https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png',\n url:\n 'https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/golf/organization/dp-world-tour/competition/isps-handa-australian-open/event/df8ba72f-4be8-4569-840e-954dbd9a7806&market_selection_id[0]=3727a3f5-5143-4616-ab4f-713bcf40aa21&odds_numerator[0]=73&odds_denominator[0]=20',\n marketStatus: 'LIVE',\n },\n ],\n },\n ],\n rewardInfo: { type: 'NONE' },\n legCount: 5,\n isNoAction: false,\n betDisplayStatement: 'to win',\n },\n {\n id: '9m1bBxUYPyPPjkpzT6buDlcuQng=',\n type: 'STRAIGHT',\n betStatus: 'OPEN',\n outcome: 'PENDING',\n overrideOutcome: 'NOT_SET',\n betAmount: '2',\n payoutAmount: '10.80',\n odds: '+440',\n startTime: '2025-04-30T15:12Z',\n events: [\n {\n displayName: 'SBG/SBE Odds Boost Test',\n legs: [\n {\n id: '8061671d-6d38-4193-a5a6-beab37855840',\n marketId: '567d2a44-ba70-4881-86d7-d25fca94b592',\n marketSelectionId: '59b2b7ee-46c1-4cbc-9286-77fd8670cf9d',\n marketType: 'list',\n status: 'PENDING',\n odds: '+440',\n boostType: 'ODDS_BOOST',\n selectionText:\n 'Lauri Markkanen and Anfernee Simons to Each Record 20+ Points',\n type: 'list',\n marketText: 'SBG/SBE Odds Boost (Was +100)',\n icon:\n 'https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png',\n url:\n 'https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/odds-boost/organization/odds-boosts/competition/odds-boosts/event/218e1dca-f68d-4d61-9d79-394e7d752cae&market_selection_id[0]=59b2b7ee-46c1-4cbc-9286-77fd8670cf9d&odds_numerator[0]=27&odds_denominator[0]=5',\n marketStatus: 'LIVE',\n },\n ],\n },\n ],\n rewardInfo: {\n type: 'ODDS_BOOST',\n icon: {\n light: 'https://a.espncdn.com/i/espnbet/boost.png',\n dark: 'https://a.espncdn.com/i/espnbet/boost.png',\n },\n },\n legCount: 1,\n isNoAction: false,\n betDisplayStatement: 'to win',\n },\n {\n id: 'MCH06SyVYvu1UZkhj4KutmL9qKY=',\n type: 'STRAIGHT',\n betStatus: 'OPEN',\n outcome: 'PENDING',\n overrideOutcome: 'NOT_SET',\n betAmount: '3',\n payoutAmount: '16.20',\n odds: '+440',\n startTime: '2025-04-30T15:12Z',\n events: [\n {\n displayName: 'SBG/SBE Odds Boost Test',\n legs: [\n {\n id: '020d7a12-3aa8-459e-8aa2-34eaced4ad7d',\n marketId: '567d2a44-ba70-4881-86d7-d25fca94b592',\n marketSelectionId: '59b2b7ee-46c1-4cbc-9286-77fd8670cf9d',\n marketType: 'list',\n status: 'PENDING',\n odds: '+440',\n boostType: 'ODDS_BOOST',\n selectionText:\n 'Lauri Markkanen and Anfernee Simons to Each Record 20+ Points',\n type: 'list',\n marketText: 'SBG/SBE Odds Boost (Was +100)',\n icon:\n 'https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png',\n url:\n 'https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/odds-boost/organization/odds-boosts/competition/odds-boosts/event/218e1dca-f68d-4d61-9d79-394e7d752cae&market_selection_id[0]=59b2b7ee-46c1-4cbc-9286-77fd8670cf9d&odds_numerator[0]=27&odds_denominator[0]=5',\n marketStatus: 'LIVE',\n },\n ],\n },\n ],\n rewardInfo: {\n type: 'ODDS_BOOST',\n icon: {\n light: 'https://a.espncdn.com/i/espnbet/boost.png',\n dark: 'https://a.espncdn.com/i/espnbet/boost.png',\n },\n },\n legCount: 1,\n isNoAction: false,\n betDisplayStatement: 'to win',\n },\n {\n id: 'xfFjqsLCjaFx93eH6c8bOQ9mEkI=',\n type: 'STRAIGHT',\n betStatus: 'OPEN',\n outcome: 'PENDING',\n overrideOutcome: 'NOT_SET',\n betAmount: '2',\n payoutAmount: '12.00',\n odds: '+500',\n startTime: '2025-04-30T17:11Z',\n events: [\n {\n displayName: 'SBG NHL In The News Test',\n legs: [\n {\n id: '910a1ebf-592d-4ae6-9471-6f648786b7e6',\n marketId: 'c5252e65-0999-40af-b366-11967f009871',\n marketSelectionId: 'c9b1446c-26af-43c4-9705-3a2275dc0ee5',\n marketType: 'list',\n status: 'PENDING',\n odds: '+500',\n boostType: 'NONE',\n selectionText:\n 'Long Desc Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus non gravida mi. Aliquam volutpat felis ut tempor dictum.',\n type: 'list',\n marketText: 'SBG In The News NHL',\n icon:\n 'https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png',\n url:\n 'https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/odds-boost/organization/in-the-news/competition/in-the-news/event/4cd8e64d-472c-412f-b786-dd91c98ab74e&market_selection_id[0]=c9b1446c-26af-43c4-9705-3a2275dc0ee5&odds_numerator[0]=6&odds_denominator[0]=1',\n marketStatus: 'LIVE',\n },\n ],\n },\n ],\n rewardInfo: { type: 'NONE' },\n legCount: 1,\n isNoAction: false,\n betDisplayStatement: 'to win',\n },\n {\n id: 'A0RLmTR8mjEFSwaa21JeOhyVdXc=',\n type: 'STRAIGHT',\n betStatus: 'OPEN',\n outcome: 'PENDING',\n overrideOutcome: 'NOT_SET',\n betAmount: '1',\n payoutAmount: '3.00',\n odds: '+200',\n startTime: '2025-04-30T17:13Z',\n events: [\n {\n displayName: 'SBG NBA Special Test',\n legs: [\n {\n id: '1aa22098-57b7-4a77-bbf2-ca7ebf812083',\n marketId: 'bc783144-0a2c-465b-9e8f-2ef55a17705c',\n marketSelectionId: '7a91fb3d-1291-4163-b5e0-07fe63e8e706',\n marketType: 'list',\n status: 'PENDING',\n odds: '+200',\n boostType: 'NONE',\n selectionText: 'Tyrese Haliburton to Record 12+ Assists',\n type: 'list',\n marketText: 'SBG NBA Special Test',\n icon:\n 'https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png',\n url:\n 'https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/odds-boost/organization/specials/competition/specials/event/d53171e2-f821-4da8-9b1c-ce1a4b735914&market_selection_id[0]=7a91fb3d-1291-4163-b5e0-07fe63e8e706&odds_numerator[0]=33&odds_denominator[0]=10',\n marketStatus: 'LIVE',\n },\n ],\n },\n ],\n rewardInfo: { type: 'NONE' },\n legCount: 1,\n isNoAction: false,\n betDisplayStatement: 'to win',\n },\n {\n id: 'Qhelx5np79zhAchzXXTL1HdDb80=',\n type: 'STRAIGHT',\n betStatus: 'OPEN',\n outcome: 'PENDING',\n overrideOutcome: 'NOT_SET',\n betAmount: '2',\n payoutAmount: '10.00',\n odds: '+400',\n startTime: '2025-04-30T17:13Z',\n events: [\n {\n displayName: 'SBG NBA Special Test',\n legs: [\n {\n id: '73f3af25-5e1a-47eb-bcec-5b23e911c14e',\n marketId: 'bc783144-0a2c-465b-9e8f-2ef55a17705c',\n marketSelectionId: '0a898e16-2a0a-44dd-a580-3ae3bade3684',\n marketType: 'list',\n status: 'PENDING',\n odds: '+400',\n boostType: 'NONE',\n selectionText:\n 'Long Desc Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus non gravida mi. Aliquam volutpat felis ut tempor dictum.',\n type: 'list',\n marketText: 'SBG NBA Special Test',\n icon:\n 'https://a.espncdn.com/i/espnbet/mybets_allsports_green_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_allsports_green_icon.png',\n url:\n 'https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/odds-boost/organization/specials/competition/specials/event/d53171e2-f821-4da8-9b1c-ce1a4b735914&market_selection_id[0]=0a898e16-2a0a-44dd-a580-3ae3bade3684&odds_numerator[0]=37&odds_denominator[0]=10',\n marketStatus: 'LIVE',\n },\n ],\n },\n ],\n rewardInfo: { type: 'NONE' },\n legCount: 1,\n isNoAction: false,\n betDisplayStatement: 'to win',\n },\n ],\n settled: [\n {\n id: 'z/WEFT7NDVjgb0d/+Elr45MfuRg=',\n type: 'STRAIGHT',\n betStatus: 'SETTLED',\n outcome: 'WIN',\n overrideOutcome: 'NOT_SET',\n closedAtTime: '2025-03-08T05:33Z',\n betAmount: '1',\n payoutAmount: '1.91',\n odds: '-110',\n startTime: '2025-03-08T03:00Z',\n events: [\n {\n displayName: 'San Antonio Spurs @ Sacramento Kings',\n legs: [\n {\n id: '05011199-c88f-4c0d-be31-1b1c7549e273',\n marketId: '728792c6-d2da-435b-920a-eb86bdc45e8c',\n marketSelectionId: '60f8aef9-4c98-4ce2-b861-34e72c2ad13b',\n marketType: 'total',\n status: 'WIN',\n odds: '-110',\n boostType: 'NONE',\n selectionText: 'Over 235',\n type: 'over',\n points: '235.0',\n marketText: 'Total Points',\n icon:\n 'https://a.espncdn.com/i/espnbet/mybets_green_check_icon.png',\n iconDark:\n 'https://a.espncdn.com/i/espnbet/dark/mybets_green_check_icon.png',\n url:\n 'https://espnbet.test-app.link/qa_integrations?%243p=a_espn&clr=espnbettingintegration&$canonical_url=/sport/basketball/organization/united-states/competition/nba/event/e1163795-ddfa-4bfc-9d52-018e8259e4b5&market_selection_id[0]=60f8aef9-4c98-4ce2-b861-34e72c2ad13b&odds_numerator[0]=2&odds_denominator[0]=1',\n marketStatus: 'SETTLED',\n accrued: { goal: 235.0 },\n },\n ],\n },\n ],\n rewardInfo: { type: 'NONE' },\n legCount: 1,\n isNoAction: false,\n betDisplayStatement: 'you won',\n },\n ],\n },\n promotion: {\n title: 'The official sportsbook of ESPN',\n description: 'Open the ESPN BET app on a mobile device and start betting!',\n logo: 'https://a.espncdn.com/i/espnbet/ESPN_Bet_Sportsbook_Light.svg',\n qrCode: 'https://assets.geo.hosted.espnsb.com/api/ext_mocks/qr.png',\n backgroundImage:\n 'https://www.espn.com/redesign/assets/img/ictv/bkg_qr_bet.png',\n },\n disclaimers: {\n location: 'Use a translation with a key based on location here',\n gambling: 'Use a translation with some key based on gambling here',\n },\n ...event,\n};\n","import { Observable } from '../../../../helpers/Observable';\nimport BetsService from '../services/BetsService';\nimport { UserSettingsManager } from '../../../../services/UserSettingsManager';\nimport AnalyticsService from '@/services/AnalyticsService/AnalyticsService';\nimport {\n IBetsResponse,\n IPersonalizedBetsResponse,\n ITeam,\n IUserBet,\n IBetLeg,\n} from '../interfaces/IBets';\n\n// Import ViewModel with correct path\nimport { ViewModel } from '../../../../view-models/ViewModel';\nimport { MOCK_BETS_API_RESPONSE } from '../mocks';\n\nimport IMaestroEventDelegate from '@/interfaces/IMaestroEventDelegate';\nimport { BetCardType, BetType } from '../types/BetsAnalyticsTypes';\nimport SDK from '@/index';\nimport { captureException } from '@/sentry';\nimport { stringHashCode } from '@/helpers/strings';\n\n// The interval for polling bet data (in milliseconds)\nconst DEFAULT_POLLING_INTERVAL = 30000; // 30 seconds\n\nconst BET_ITEM_TYPE = {\n ODDS: 'odds',\n USER_BETS: 'userBets',\n PROMO: 'promo',\n HOT_PROPS: 'hotProps',\n LOCATION_DISCLAIMER: 'locationDisclaimer',\n GAMBLING_MESSAGE: 'gamblingMessage',\n} as const;\n\nexport type BetItemType = typeof BET_ITEM_TYPE[keyof typeof BET_ITEM_TYPE];\n\ntype TeamOdd = {\n teamAbbreviation: string;\n startOfGameFirstLine: string;\n startOfGameSecondLine: string;\n gameSpreadFirstLine: string;\n gameSpreadSecondLine: string;\n totalPointsFirstLine: string;\n totalPointsSecondLine: string;\n moneylineFirstLine: string;\n};\n\nexport type ISixPackOdds = {\n topTeamOdds: TeamOdd;\n bottomTeamOdds: TeamOdd;\n drawOdds?: TeamOdd;\n orderedColumns: { abbreviation: string; type: string }[];\n gameState: string; // 'in', 'pre', 'post'\n};\n\nexport type IUserBets = {\n defaultTab: string;\n bets: {\n live: IUserBet[];\n upcoming: IUserBet[];\n settled: IUserBet[];\n };\n};\n\nexport type IHotProps = {\n items: IBetLeg[];\n};\n\nexport type ILocationDisclaimer = {\n text: string;\n};\n\nexport type IGamblingMessage = {\n text: string;\n};\n\nexport type IBetPromo = {\n title: string;\n description: string;\n logo: string;\n qrCode: string;\n backgroundImage: string;\n};\n\nexport type PromoBetItem = {\n id: string;\n type: 'promo';\n data: IBetPromo;\n};\n\nexport type LocationDisclaimerBetItem = {\n type: 'locationDisclaimer';\n id: string;\n data: ILocationDisclaimer;\n};\n\nexport type GamblingMessageBetItem = {\n type: 'gamblingMessage';\n id: string;\n data: IGamblingMessage;\n};\n\nexport type SixPackBetItem = {\n type: 'sixPack';\n data: ISixPackOdds;\n teamInfo?: {\n home: ITeam;\n away: ITeam;\n };\n id: string;\n hideWagers: boolean;\n};\n\nexport type UserBetsBetItem = {\n type: 'userBets';\n data: IUserBets;\n id: string;\n hideWagers: boolean;\n};\n\nexport type HotPropsBetItem = {\n type: 'hotProps';\n data: IHotProps;\n id: string;\n hideWagers: boolean;\n};\n\nexport type BetItem =\n | SixPackBetItem\n | UserBetsBetItem\n | PromoBetItem\n | HotPropsBetItem\n | LocationDisclaimerBetItem\n | GamblingMessageBetItem;\n\nconst BET_ERROR_STATE = {\n NONE: 'none',\n TAB_LOAD_FAILURE: 'tabLoadFailure',\n} as const;\nexport type BetsErrorState = typeof BET_ERROR_STATE[keyof typeof BET_ERROR_STATE];\n\nexport interface IBetsViewModelDelegate {\n userIsAuthenticated(): Promise<boolean>;\n getUserSWID(): Promise<string | null>;\n getUserToken(): Promise<string | null>;\n}\n\nconst isPersonalizedBetsResponse = (\n data: any\n): data is IPersonalizedBetsResponse => {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'event' in data &&\n typeof data.event === 'object'\n );\n};\n\nexport class BetsViewModel extends ViewModel {\n // Observable properties\n public betsItems = new Observable<BetItem[]>([]);\n public isDataLoading = new Observable<boolean>(true);\n public errorState = new Observable<BetsErrorState>('none');\n public hasEverSuccessfullyLoaded = new Observable<boolean>(false);\n public hideWagers = new Observable<boolean>(false);\n\n // Properties\n private eventId: string;\n private delegate: IBetsViewModelDelegate;\n private betsService: BetsService;\n private analyticsService: AnalyticsService;\n private pollingInterval: number;\n private pollingTask: { stop: () => void } | null = null;\n private lastNonPersonalizedResponseHash: number | null = null;\n private lastPersonalizedResponseHash: number | null = null;\n private useMockData: boolean = false;\n private userSettingsManager: UserSettingsManager;\n private settingsSubscription: (() => void) | null = null;\n initialized = false;\n\n constructor(\n eventId: string,\n delegate: IMaestroEventDelegate,\n analyticsService: AnalyticsService,\n options: {\n useMockData?: boolean;\n } = {}\n ) {\n super();\n this.eventId = eventId;\n this.delegate = delegate;\n this.betsService = new BetsService(delegate);\n this.analyticsService = analyticsService;\n this.pollingInterval = DEFAULT_POLLING_INTERVAL;\n this.useMockData = options.useMockData || false;\n this.userSettingsManager = UserSettingsManager.getInstance();\n\n // Initialize hide_wagers setting\n this.hideWagers.value = this.userSettingsManager.shouldHideWagers();\n\n // Subscribe to settings changes\n this.settingsSubscription = this.userSettingsManager.settings.subscribe(\n () => {\n this.updateHideWagersFromSettings();\n }\n );\n\n this.betsService = new BetsService(delegate);\n }\n\n /**\n * Initialize the ViewModel and start data fetching\n */\n async init(): Promise<void> {\n // Track panel view on initialization\n this.trackPanelView();\n\n await this.fetchNewData();\n this.refreshPolling();\n this.initialized = true;\n }\n\n /**\n * Clean up resources when the ViewModel is no longer needed\n */\n cleanup(): void {\n this.stopPolling();\n\n // Clean up settings subscription\n if (this.settingsSubscription) {\n this.settingsSubscription();\n this.settingsSubscription = null;\n }\n\n this.initialized = false;\n }\n\n /**\n * Track panel view event\n */\n private async trackPanelView(): Promise<void> {\n try {\n const betCounts = this.getUserBetCounts();\n await this.analyticsService.panelView('espnBet', betCounts);\n } catch (error) {\n captureException(error, {\n context: 'BetsViewModel.trackPanelView',\n });\n console.error('[BET] Error tracking panel view:', error);\n }\n }\n\n /**\n * Track card click event\n */\n async trackCardClick(\n cardType: BetCardType,\n betType?: BetType | null\n ): Promise<void> {\n try {\n const betCounts = this.getUserBetCounts();\n\n const metadata = {\n ...betCounts,\n card: cardType,\n bet_type: betType || null,\n };\n\n await this.analyticsService.panelClick({\n type: 'espnBet',\n name: 'bets_item_clicked',\n metadata,\n });\n } catch (error) {\n captureException(error, {\n context: 'BetsViewModel.trackCardClick',\n cardType,\n betType,\n });\n console.error('[BET] Error tracking card click:', error);\n }\n }\n\n /**\n * Get user bet counts for analytics\n */\n private getUserBetCounts(): {\n in_game_bets: number;\n total_bets: number;\n } {\n try {\n let inGameBets = 0;\n let totalBets = 0;\n\n // Count bets from current data\n for (const item of this.betsItems.value) {\n if (item.type === 'userBets') {\n const userBetsItem = item as UserBetsBetItem;\n const allBets = [\n ...userBetsItem.data.bets.live,\n ...userBetsItem.data.bets.settled,\n ...userBetsItem.data.bets.upcoming,\n ];\n\n totalBets = allBets.length;\n\n inGameBets = userBetsItem.data.bets.live.length;\n break;\n }\n }\n\n return {\n in_game_bets: inGameBets,\n total_bets: totalBets,\n };\n } catch (error) {\n captureException(error, {\n context: 'BetsViewModel.getUserBetCounts',\n });\n console.error('[BET] Error getting user bet counts:', error);\n return {\n in_game_bets: 0,\n total_bets: 0,\n };\n }\n }\n\n /**\n * Refresh polling for bet data\n */\n refreshPolling(): void {\n // First stop any existing polling\n this.stopPolling();\n\n if (this.useMockData) {\n return;\n }\n\n // We'll determine whether to use authenticated polling in the polling task\n this.pollingTask = {\n stop: () => {\n // This will be replaced when actual polling starts\n },\n };\n\n // Start the poll loop\n this.pollWithInterval();\n }\n\n /**\n * Get user credentials from delegate\n */\n private async getUserCredentials(): Promise<{ swid: string; jwt: string }> {\n const swid = (await this.delegate.getUserSWID()) || '';\n const jwt = (await this.delegate.getUserToken()) || '';\n return { swid, jwt };\n }\n\n /**\n * @description Update polling interval checking either response header or panel config.\n * Refresh polling if necessary.\n */\n private updatePollingInterval(headers: Record<string, string>): void {\n const headerInterval = this.getResponseHeaderPollingIntervalValue(headers);\n const panelConfigInterval = this.getPanelConfigInterval();\n\n const newInterval = headerInterval || panelConfigInterval; // order matters here\n if (newInterval && newInterval !== this.pollingInterval) {\n this.pollingInterval = newInterval;\n console.log(\n `[BET] Updating polling interval to ${this.pollingInterval} milliseconds`\n );\n // If we have an active polling task, restart it with the new interval\n this.refreshPolling();\n }\n }\n\n private getPanelConfigInterval() {\n const config = SDK.getPageConfig();\n const panel = config?.panels?.find((p) => p.panel_type === 'espnBet');\n if (!panel) {\n return null;\n }\n\n const oddsPollingInterval =\n panel.renderer?.block_data?.odds_polling_interval;\n if (!oddsPollingInterval) {\n return null;\n }\n\n const parsedInterval = parseInt(oddsPollingInterval, 10);\n if (isNaN(parsedInterval) || parsedInterval <= 0) {\n console.warn(\n `[BET] Invalid polling interval from panel config: ${oddsPollingInterval}.`\n );\n return null;\n }\n\n return parsedInterval * 1000; // Convert seconds to milliseconds\n }\n\n private getResponseHeaderPollingIntervalValue(\n headers: Record<string, string>\n ): number | null {\n const newInterval = headers['polling-interval'];\n if (!newInterval) {\n return null;\n }\n\n const parsedInterval = parseInt(newInterval, 10);\n if (isNaN(parsedInterval) || parsedInterval <= 0) {\n console.warn(\n `[BET] Invalid polling interval header received: ${newInterval}.`\n );\n return null;\n }\n\n return parsedInterval * 1000; // Convert seconds to milliseconds\n }\n\n /**\n * Poll with the personalized endpoint for both authenticated and anonymous users\n *\n * SWID format is provided by the client app delegate:\n * - Logged in: {6D201B58-440C-47A6-970B-0F8C78C0BAB8} (with curly braces)\n * - Anonymous: 6D201B58-440C-47A6-970B-0F8C78C0BAB8 (without curly braces)\n * - Failsafe: Empty string if local storage fails\n */\n private async pollWithInterval(): Promise<void> {\n try {\n // Always use personalized endpoint\n const { swid, jwt } = await this.getUserCredentials();\n\n // Start personalized polling for both authenticated and anonymous users with headers\n this.pollingTask = this.betsService.pollPersonalizedBetsWithHeaders(\n this.eventId,\n swid,\n jwt,\n this.pollingInterval,\n (response) => {\n this.updatePollingInterval(response.headers);\n this.processPolledData(response.data);\n },\n this.handlePollingError.bind(this)\n );\n } catch (error) {\n captureException(error, {\n context: 'BetsViewModel.pollWithInterval',\n });\n console.error('[BET] Error setting up polling:', error);\n }\n }\n\n /**\n * Process data received from polling\n */\n private processPolledData(\n data: IBetsResponse | IPersonalizedBetsResponse\n ): void {\n // Calculate hash for the response to check if it's different from the last one\n const responseHash = stringHashCode(JSON.stringify(data));\n const isPersonalized = isPersonalizedBetsResponse(data);\n\n if (isPersonalized) {\n // Check if this is the same as the last successful response\n if (\n this.lastPersonalizedResponseHash === responseHash &&\n this.hasEverSuccessfullyLoaded.value\n ) {\n console.log(\n '[BET] Response hash is the same as last successful response - skipping update'\n );\n return;\n }\n\n // Update tracking variables\n this.lastPersonalizedResponseHash = responseHash;\n // this.lastSuccessfulResponsePersonalized =\n // data as IPersonalizedBetsResponse;\n } else {\n // Check if this is the same as the last successful response\n if (\n this.lastNonPersonalizedResponseHash === responseHash &&\n this.hasEverSuccessfullyLoaded.value\n ) {\n console.log(\n '[BET] Response hash is the same as last successful response - skipping update'\n );\n return;\n }\n\n // Update tracking variables\n this.lastNonPersonalizedResponseHash = responseHash;\n // this.lastSuccessfulResponseNonPersonalized = data as IBetsResponse;\n }\n\n // Update state\n this.hasEverSuccessfullyLoaded.value = true;\n this.errorState.value = 'none';\n\n // Process the response and update betsItems\n // This is a placeholder - you would need to implement the actual logic\n // for parsing different parts of the response (sixPacks, hot props, etc.)\n this.processBetsData(data);\n }\n\n /**\n * Process the bets data and update the betsItems\n */\n private processBetsData(\n data: IBetsResponse | IPersonalizedBetsResponse\n ): void {\n // Clear current items\n const newItems: BetItem[] = [];\n if (!Object.keys(data).length) {\n return;\n }\n\n // 1. Process regular odds (always available in both response types)\n const sixPack = this.processSixPackData(data);\n if (sixPack) {\n newItems.push(sixPack);\n }\n\n // 2. Process location disclaimer if this is a personalized response\n const locationDisclaimer = this.processLocationDisclaimer(data);\n if (locationDisclaimer) {\n newItems.push(locationDisclaimer);\n }\n\n // 3. Process user bets if this is a personalized response\n const userBets = this.processUserBetsData(data);\n if (userBets) {\n newItems.push(userBets);\n }\n\n // 4. Process featured(hot props) bets if available\n const hotProps = this.processHotProps(data);\n if (hotProps) {\n newItems.push(hotProps);\n }\n\n // 5. Process promo code\n const promoCode = this.processPromoCode(data);\n if (promoCode) {\n newItems.push(promoCode);\n }\n\n // 6. Process gambling message if available\n const gamblingMessage = this.processGamblingMessage(data);\n if (gamblingMessage) {\n newItems.push(gamblingMessage);\n }\n\n // Update the observable\n this.betsItems.value = newItems;\n }\n\n private processLocationDisclaimer(\n data: IBetsResponse | IPersonalizedBetsResponse\n ): LocationDisclaimerBetItem | null {\n const isPersonalized = isPersonalizedBetsResponse(data);\n if (!isPersonalized || !data.disclaimers?.location) {\n return null;\n }\n\n return {\n type: 'locationDisclaimer',\n id: 'locationDisclaimer',\n data: {\n text: data.disclaimers.location,\n },\n };\n }\n\n private processPromoCode(\n data: IBetsResponse | IPersonalizedBetsResponse\n ): PromoBetItem | null {\n const isPersonalized = isPersonalizedBetsResponse(data);\n if (!isPersonalized || !data.promotion) {\n return null;\n }\n\n return {\n type: 'promo',\n data: {\n title: data.promotion.title || '',\n description: data.promotion.description || '',\n logo: data.promotion.logo || '',\n qrCode: data.promotion.qrCode || '',\n backgroundImage: data.promotion.backgroundImage || '',\n },\n id: `promo-${data.event?.id || data.id}`,\n };\n }\n\n private processGamblingMessage(\n data: IBetsResponse | IPersonalizedBetsResponse\n ): GamblingMessageBetItem | null {\n const isPersonalized = isPersonalizedBetsResponse(data);\n if (!isPersonalized || !data.disclaimers?.gambling) {\n return null;\n }\n\n return {\n type: 'gamblingMessage',\n id: 'gamblingMessage',\n data: {\n text: data.disclaimers.gambling,\n },\n };\n }\n\n private processSixPackData(\n response: IBetsResponse | IPersonalizedBetsResponse\n ): SixPackBetItem | null {\n const isPersonalized = isPersonalizedBetsResponse(response);\n const teams = response.entities?.teams;\n\n const odds = !isPersonalized\n ? response.bets?.odds\n : response.event?.bets?.odds;\n const gameState = !isPersonalized\n ? response.gameState\n : response.event?.gameState;\n\n const sport = !isPersonalized ? response.sport : response.event?.sport;\n const eventId = !isPersonalized ? response.id : response.event?.id;\n const isSoccer = !isPersonalized\n ? response.sport === 'soccer'\n : response.event?.sport === 'soccer';\n\n if (!odds || !gameState || !sport || !eventId || !teams) {\n return null;\n }\n\n const teamArray = Object.values(teams);\n let awayTeam: ITeam | undefined;\n let homeTeam: ITeam | undefined;\n\n // Find home and away teams from odds\n for (const team of Object.values(teams)) {\n const spreadOdds = odds.find((odd) => odd.type === 'pointSpread');\n if (spreadOdds) {\n if (\n spreadOdds.values.some((v) => v.team === team.id && v.type === 'home')\n ) {\n homeTeam = team;\n } else if (\n spreadOdds.values.some((v) => v.team === team.id && v.type === 'away')\n ) {\n awayTeam = team;\n }\n }\n }\n\n // Fallback logic if we couldn't determine from odds\n if (!homeTeam || !awayTeam) {\n console.warn(\n 'Could not determine home/away teams from odds, using first two teams'\n );\n switch (teamArray.length) {\n case 0:\n throw new Error('No teams found in response');\n case 1:\n // Only one team - unusual case, but handle gracefully\n homeTeam = teamArray[0];\n awayTeam = teamArray[0]; // Same team as both home and away (shouldn't happen)\n break;\n case 2:\n // Default to first team as home, second as away\n homeTeam = teamArray[0];\n awayTeam = teamArray[1];\n break;\n default:\n // More than 2 teams - take first two and log warning\n homeTeam = teamArray[0];\n awayTeam = teamArray[1];\n console.warn(\n `Warning: Unexpected team count (${teamArray.length}) in six pack response`\n );\n }\n }\n\n if (!awayTeam || !homeTeam) {\n throw new Error('Could not determine home or away team from response');\n }\n\n const isInProgress = gameState === 'in';\n const isHomeFavoured = (() => {\n if (isSoccer && !isInProgress) {\n return homeTeam.favoredAtOpen ?? true;\n }\n\n return homeTeam.favored ?? true;\n })();\n const isAwayFavoured = (() => {\n if (isSoccer && !isInProgress) {\n return awayTeam.favoredAtOpen ?? false;\n }\n\n return awayTeam.favored ?? false;\n })();\n\n let awayTeamStartGameFirstLine = '';\n let awayTeamStartGameSecondLine = '';\n let homeTeamStartGameFirstLine = '';\n let homeTeamStartGameSecondLine = '';\n\n let awaySpreadFirstLine = '';\n let awaySpreadSecondLine = '';\n let homeSpreadFirstLine = '';\n let homeSpreadSecondLine = '';\n\n let awayTotalFirstLine = '';\n let awayTotalSecondLine = '';\n let homeTotalFirstLine = '';\n let homeTotalSecondLine = '';\n\n let awayMoneylineFirstLine = '';\n let homeMoneylineFirstLine = '';\n\n let drawGameStateFirstLine = '';\n let drawGameStateSecondLine = '';\n\n let drawMoneylineFirstLine = '';\n\n const itemTypeSet = new Set<string>();\n const orderedColumns: { abbreviation: string; type: string }[] = [];\n for (const oddsItem of odds) {\n if (!itemTypeSet.has(oddsItem.type)) {\n orderedColumns.push({\n type: oddsItem.type,\n abbreviation: oddsItem.abbreviation,\n });\n itemTypeSet.add(oddsItem.type);\n }\n\n const isLive = oddsItem.state === 'live';\n const isClose = oddsItem.state === 'close';\n const isOpen = oddsItem.state === 'open';\n\n // For every odd type and using the correct state based on game state, get the odds and lines for the home and away team.\n // There are special handlings for the 'start of game' lines. It can be from 'spread', 'total' or 'moneyline' depending on which team is favoured, sport, etc.\n switch (oddsItem.type) {\n case 'pointSpread': {\n const spreadCorrectState = isInProgress ? isLive : isClose;\n if (spreadCorrectState) {\n for (const value of oddsItem.values) {\n if (value.type === 'home') {\n homeSpreadFirstLine = value.line ?? '';\n homeSpreadSecondLine = value.odds ?? '';\n }\n\n if (value.type === 'away') {\n awaySpreadFirstLine = value.line ?? '';\n awaySpreadSecondLine = value.odds ?? '';\n }\n }\n }\n\n const pointsSpreadStartOfGameCorrectState = isInProgress\n ? isClose\n : isOpen;\n if (pointsSpreadStartOfGameCorrectState && !isSoccer) {\n if (isHomeFavoured) {\n for (const value of oddsItem.values) {\n if (value.type === 'home') {\n homeTeamStartGameFirstLine = value.line ?? '';\n homeTeamStartGameSecondLine = value.odds ?? '';\n }\n }\n }\n\n if (isAwayFavoured) {\n for (const value of oddsItem.values) {\n if (value.type === 'away') {\n awayTeamStartGameFirstLine = value.line ?? '';\n awayTeamStartGameSecondLine = value.odds ?? '';\n }\n }\n }\n }\n break;\n }\n\n case 'total': {\n const totalCorrectState = isInProgress ? isLive : isClose;\n if (totalCorrectState) {\n for (const value of oddsItem.values) {\n if (value.type === 'over') {\n if (isSoccer) {\n homeTotalFirstLine = value.line ?? '';\n homeTotalSecondLine = value.odds ?? '';\n } else {\n awayTotalFirstLine = value.line ?? '';\n awayTotalSecondLine = value.odds ?? '';\n }\n }\n\n if (value.type === 'under') {\n if (isSoccer) {\n awayTotalFirstLine = value.line ?? '';\n awayTotalSecondLine = value.odds ?? '';\n } else {\n homeTotalFirstLine = value.line ?? '';\n homeTotalSecondLine = value.odds ?? '';\n }\n }\n }\n }\n\n const totalStartOfGameCorrectState = isInProgress ? isClose : isOpen;\n if (totalStartOfGameCorrectState) {\n // If home is not favoured, use total as the start of the game line\n if (!isHomeFavoured) {\n for (const value of oddsItem.values) {\n if (\n (isSoccer && value.type === 'over') ||\n (!isSoccer && value.type === 'under')\n ) {\n homeTeamStartGameFirstLine = value.line ?? '';\n homeTeamStartGameSecondLine = value.odds ?? '';\n }\n }\n }\n\n // If away is not favoured, use total as the start of the game line\n if (!isAwayFavoured) {\n for (const value of oddsItem.values) {\n if (\n (isSoccer && value.type === 'under') ||\n (!isSoccer && value.type === 'over')\n ) {\n awayTeamStartGameFirstLine = value.line ?? '';\n awayTeamStartGameSecondLine = value.odds ?? '';\n }\n }\n }\n }\n break;\n }\n\n case 'moneyline': {\n const mlCorrectState = isInProgress ? isLive : isClose;\n if (mlCorrectState) {\n for (const value of oddsItem.values) {\n if (value.type === 'home') {\n homeMoneylineFirstLine = value.odds ?? '';\n }\n if (value.type === 'away') {\n awayMoneylineFirstLine = value.odds ?? '';\n }\n }\n }\n\n // soccer logic\n if (isSoccer) {\n const moneyLineStartOfGameCorrectState = isInProgress\n ? isClose\n : isOpen;\n\n // find draw value\n for (const value of oddsItem.values) {\n if (value.type === 'draw') {\n if (moneyLineStartOfGameCorrectState) {\n drawGameStateFirstLine = value.odds ?? '';\n drawGameStateSecondLine = 'DRAW';\n }\n\n if (mlCorrectState) {\n drawMoneylineFirstLine = value.odds ?? '';\n }\n }\n }\n\n if (moneyLineStartOfGameCorrectState) {\n if (isHomeFavoured) {\n for (const value of oddsItem.values) {\n if (value.type === 'home') {\n homeTeamStartGameFirstLine = value.odds ?? '';\n homeTeamStartGameSecondLine = oddsItem.abbreviation ?? '';\n }\n }\n }\n\n if (isAwayFavoured) {\n for (const value of oddsItem.values) {\n if (value.type === 'away') {\n awayTeamStartGameFirstLine = value.odds ?? '';\n awayTeamStartGameSecondLine = oddsItem.abbreviation ?? '';\n }\n }\n }\n }\n }\n break;\n }\n }\n }\n\n // Create the six pack data structure\n const awayTeamOdds: TeamOdd = {\n teamAbbreviation: awayTeam.abbreviation ?? '',\n startOfGameFirstLine: awayTeamStartGameFirstLine,\n startOfGameSecondLine: awayTeamStartGameSecondLine,\n gameSpreadFirstLine: awaySpreadFirstLine,\n gameSpreadSecondLine: awaySpreadSecondLine,\n totalPointsFirstLine: awayTotalFirstLine,\n totalPointsSecondLine: awayTotalSecondLine,\n moneylineFirstLine: awayMoneylineFirstLine,\n };\n\n const homeTeamOdds: TeamOdd = {\n teamAbbreviation: homeTeam.abbreviation ?? '',\n startOfGameFirstLine: homeTeamStartGameFirstLine,\n startOfGameSecondLine: homeTeamStartGameSecondLine,\n gameSpreadFirstLine: homeSpreadFirstLine,\n gameSpreadSecondLine: homeSpreadSecondLine,\n totalPointsFirstLine: homeTotalFirstLine,\n totalPointsSecondLine: homeTotalSecondLine,\n moneylineFirstLine: homeMoneylineFirstLine,\n };\n\n const drawOdds: TeamOdd = {\n teamAbbreviation: 'DRAW',\n startOfGameFirstLine: drawGameStateFirstLine,\n startOfGameSecondLine: drawGameStateSecondLine,\n gameSpreadFirstLine: '',\n gameSpreadSecondLine: '',\n totalPointsFirstLine: '',\n totalPointsSecondLine: '',\n moneylineFirstLine: drawMoneylineFirstLine,\n };\n\n const sixPack: ISixPackOdds = {\n topTeamOdds: isSoccer ? homeTeamOdds : awayTeamOdds,\n bottomTeamOdds: isSoccer ? awayTeamOdds : homeTeamOdds,\n drawOdds:\n drawGameStateFirstLine &&\n drawGameStateSecondLine &&\n drawMoneylineFirstLine\n ? drawOdds\n : undefined,\n orderedColumns,\n gameState,\n };\n\n return {\n id: `sixpack-${eventId}`,\n type: 'sixPack',\n data: sixPack,\n teamInfo: {\n home: homeTeam,\n away: awayTeam,\n },\n hideWagers: this.hideWagers.value,\n };\n }\n\n private processUserBetsData(\n data: IBetsResponse | IPersonalizedBetsResponse\n ): UserBetsBetItem | null {\n const isPersonalized = isPersonalizedBetsResponse(data);\n if (!isPersonalized || !data.event || !data.betsModule) {\n return null;\n }\n\n const betItems: IUserBets['bets'] = {\n live: data.betsModule.live.filter((bet) => bet.type !== 'promo'),\n settled: data.betsModule.settled.filter((bet) => bet.type !== 'promo'),\n upcoming: data.betsModule.upcoming.filter((bet) => bet.type !== 'promo'),\n };\n\n return {\n data: {\n bets: betItems,\n defaultTab: data.betsModule.defaultTab,\n },\n id: `userBets-${data.event.id}`,\n type: 'userBets',\n hideWagers: this.hideWagers.value,\n };\n }\n\n private processHotProps(\n response: IBetsResponse | IPersonalizedBetsResponse\n ): HotPropsBetItem | null {\n const isPersonalized = isPersonalizedBetsResponse(response);\n const hotProps = isPersonalized\n ? response.event?.featured\n : response.featured;\n\n if (!hotProps || !Array.isArray(hotProps)) {\n return null;\n }\n\n const hasData = hotProps.every((hotProp) => Boolean(hotProp && hotProp.id));\n if (!hasData) {\n return null;\n }\n\n const filteredHotProps = hotProps.filter(\n (hotProp) => hotProp.selections.length > 0\n );\n\n return {\n type: 'hotProps',\n hideWagers: this.hideWagers.value,\n id: 'hotProps',\n data: {\n items: filteredHotProps.map((hotProp) => {\n const bet = hotProp.selections[0];\n\n return {\n id: bet.id,\n odds: bet.odds.current || '',\n marketText: bet.text,\n selectionText: hotProp.text,\n status: bet.status,\n type: bet.type,\n icon: bet.icon,\n iconDark: bet.iconDark,\n outcome: bet.outcome,\n };\n }),\n },\n };\n }\n\n /**\n * Handle errors that occur during polling\n */\n private handlePollingError(error: Error): void {\n console.error('Polling error:', error);\n\n if (!this.hasEverSuccessfullyLoaded.value) {\n // If we've never had a successful load, show an error state\n this.errorState.value = 'tabLoadFailure';\n this.betsItems.value = [];\n } else {\n // If we had a previous successful load, keep showing the old data\n // No need to update errorState or betsItems\n }\n }\n\n /**\n * Stop polling for bet data\n */\n stopPolling(): void {\n if (this.pollingTask) {\n this.pollingTask.stop();\n this.pollingTask = null;\n }\n\n if (this.isDataLoading.value) {\n this.isDataLoading.value = false;\n }\n }\n\n /**\n * Fetch new bet data immediately (one-time)\n */\n async fetchNewData(): Promise<void> {\n this.isDataLoading.value = true;\n\n try {\n // Handle mock data if enabled\n if (this.useMockData) {\n this.betsItems.value = [];\n await this.fetchMockData();\n return;\n }\n\n // Always use personalized endpoint for both authenticated and anonymous users\n await this.fetchPersonalizedData();\n this.isDataLoading.value = false;\n } catch (error) {\n captureException(error, {\n context: 'BetsViewModel.fetchNewData',\n });\n console.error('[BET] Error fetching bet data:', error);\n\n if (!this.hasEverSuccessfullyLoaded.value) {\n this.errorState.value = 'tabLoadFailure';\n this.betsItems.value = [];\n }\n\n this.isDataLoading.value = false;\n }\n }\n\n /**\n * Fetch personalized bet data\n */\n private async fetchPersonalizedData(): Promise<void> {\n try {\n const { swid, jwt } = await this.getUserCredentials();\n\n const response = await this.betsService.getPersonalizedBets(\n this.eventId,\n swid,\n jwt\n );\n\n // Process the response\n this.processPolledData(response);\n } catch (error) {\n captureException(error, {\n context: 'BetsViewModel.fetchPersonalizedData',\n });\n console.error('[BET] Error fetching personalized bets:', error);\n throw error;\n }\n }\n\n /**\n * Fetch mock data for testing\n */\n private async fetchMockData(): Promise<void> {\n this.processBetsData(MOCK_BETS_API_RESPONSE);\n this.hasEverSuccessfullyLoaded.value = true;\n this.errorState.value = 'none';\n this.isDataLoading.value = false;\n }\n\n clearTabLoadFailure() {\n this.errorState.value = 'none';\n setTimeout(() => {\n this.refreshPolling();\n }, 100);\n }\n\n /**\n * Check if wagers should be hidden based on user settings\n */\n shouldHideWagers(): boolean {\n return this.hideWagers.value;\n }\n\n /**\n * Update hideWagers Observable from current settings\n */\n private updateHideWagersFromSettings(): void {\n this.hideWagers.value = this.userSettingsManager.shouldHideWagers();\n this.refreshBetItemsWithNewSettings();\n }\n\n private refreshBetItemsWithNewSettings(): void {\n this.betsItems.value = this.betsItems.value.map((item) => {\n if (item.type === 'sixPack') {\n return {\n ...item,\n hideWagers: this.hideWagers.value,\n };\n }\n if (item.type === 'userBets') {\n return {\n ...item,\n hideWagers: this.hideWagers.value,\n };\n }\n if (item.type === 'hotProps') {\n return {\n ...item,\n hideWagers: this.hideWagers.value,\n };\n }\n return item;\n });\n }\n}\n\nexport default BetsViewModel;\n"],"sourceRoot":""}