@maestro_io/maestro-web-sdk 5.1.2 → 5.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/1.maestro-web-sdk.esm.js +1 -1
- package/dist/1.maestro-web-sdk.esm.js.map +1 -1
- package/dist/10.maestro-web-sdk.esm.js +1 -1
- package/dist/10.maestro-web-sdk.esm.js.map +1 -1
- package/dist/11.maestro-web-sdk.esm.js +1 -1
- package/dist/11.maestro-web-sdk.esm.js.map +1 -1
- package/dist/12.maestro-web-sdk.esm.js +1 -1
- package/dist/12.maestro-web-sdk.esm.js.map +1 -1
- package/dist/13.maestro-web-sdk.esm.js +1 -1
- package/dist/13.maestro-web-sdk.esm.js.map +1 -1
- package/dist/14.maestro-web-sdk.esm.js +1 -1
- package/dist/14.maestro-web-sdk.esm.js.map +1 -1
- package/dist/15.maestro-web-sdk.esm.js +1 -1
- package/dist/15.maestro-web-sdk.esm.js.map +1 -1
- package/dist/16.maestro-web-sdk.esm.js +1 -1
- package/dist/16.maestro-web-sdk.esm.js.map +1 -1
- package/dist/17.maestro-web-sdk.esm.js +1 -1
- package/dist/17.maestro-web-sdk.esm.js.map +1 -1
- package/dist/18.maestro-web-sdk.esm.js +1 -1
- package/dist/18.maestro-web-sdk.esm.js.map +1 -1
- package/dist/19.maestro-web-sdk.esm.js +1 -1
- package/dist/19.maestro-web-sdk.esm.js.map +1 -1
- package/dist/2.maestro-web-sdk.esm.js +1 -1
- package/dist/20.maestro-web-sdk.esm.js +1 -1
- package/dist/20.maestro-web-sdk.esm.js.map +1 -1
- package/dist/21.maestro-web-sdk.esm.js +1 -1
- package/dist/21.maestro-web-sdk.esm.js.map +1 -1
- package/dist/22.maestro-web-sdk.esm.js +1 -1
- package/dist/22.maestro-web-sdk.esm.js.map +1 -1
- package/dist/23.maestro-web-sdk.esm.js +1 -1
- package/dist/23.maestro-web-sdk.esm.js.map +1 -1
- package/dist/24.maestro-web-sdk.esm.js +1 -1
- package/dist/24.maestro-web-sdk.esm.js.map +1 -1
- package/dist/25.maestro-web-sdk.esm.js +1 -1
- package/dist/25.maestro-web-sdk.esm.js.map +1 -1
- package/dist/26.maestro-web-sdk.esm.js +1 -1
- package/dist/26.maestro-web-sdk.esm.js.map +1 -1
- package/dist/27.maestro-web-sdk.esm.js +1 -1
- package/dist/27.maestro-web-sdk.esm.js.map +1 -1
- package/dist/28.maestro-web-sdk.esm.js +1 -1
- package/dist/28.maestro-web-sdk.esm.js.map +1 -1
- package/dist/29.maestro-web-sdk.esm.js +1 -1
- package/dist/29.maestro-web-sdk.esm.js.map +1 -1
- package/dist/3.maestro-web-sdk.esm.js +1 -1
- package/dist/3.maestro-web-sdk.esm.js.map +1 -1
- package/dist/30.maestro-web-sdk.esm.js +1 -1
- package/dist/30.maestro-web-sdk.esm.js.map +1 -1
- package/dist/31.maestro-web-sdk.esm.js +1 -1
- package/dist/31.maestro-web-sdk.esm.js.map +1 -1
- package/dist/32.maestro-web-sdk.esm.js +1 -1
- package/dist/32.maestro-web-sdk.esm.js.map +1 -1
- package/dist/33.maestro-web-sdk.esm.js +1 -1
- package/dist/33.maestro-web-sdk.esm.js.map +1 -1
- package/dist/34.maestro-web-sdk.esm.js +1 -1
- package/dist/34.maestro-web-sdk.esm.js.map +1 -1
- package/dist/35.maestro-web-sdk.esm.js +1 -1
- package/dist/35.maestro-web-sdk.esm.js.map +1 -1
- package/dist/36.maestro-web-sdk.esm.js +1 -1
- package/dist/36.maestro-web-sdk.esm.js.map +1 -1
- package/dist/37.maestro-web-sdk.esm.js +1 -1
- package/dist/37.maestro-web-sdk.esm.js.map +1 -1
- package/dist/38.maestro-web-sdk.esm.js +1 -1
- package/dist/38.maestro-web-sdk.esm.js.map +1 -1
- package/dist/39.maestro-web-sdk.esm.js +2 -0
- package/dist/39.maestro-web-sdk.esm.js.map +1 -0
- package/dist/4.maestro-web-sdk.esm.js +1 -1
- package/dist/4.maestro-web-sdk.esm.js.map +1 -1
- package/dist/40.maestro-web-sdk.esm.js +2 -0
- package/dist/40.maestro-web-sdk.esm.js.map +1 -0
- package/dist/5.maestro-web-sdk.esm.js +1 -1
- package/dist/5.maestro-web-sdk.esm.js.map +1 -1
- package/dist/6.maestro-web-sdk.esm.js +1 -1
- package/dist/6.maestro-web-sdk.esm.js.map +1 -1
- package/dist/7.maestro-web-sdk.esm.js +1 -1
- package/dist/7.maestro-web-sdk.esm.js.map +1 -1
- package/dist/8.maestro-web-sdk.esm.js +1 -1
- package/dist/8.maestro-web-sdk.esm.js.map +1 -1
- package/dist/9.maestro-web-sdk.esm.js +1 -1
- package/dist/9.maestro-web-sdk.esm.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/maestro-web-sdk.esm.js +3 -3
- package/dist/maestro-web-sdk.esm.js.map +1 -1
- package/dist/maestro-web-sdk.umd.js +3 -3
- package/dist/maestro-web-sdk.umd.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/components/atoms/SvgIcon/AddIcon.d.ts +3 -0
- package/dist/src/components/atoms/SvgIcon/AddIcon.js +6 -0
- package/dist/src/components/atoms/SvgIcon/Icon.js +2 -0
- package/dist/src/components/core/PanelManager/PanelManager.js +5 -3
- package/dist/src/components/molecules/NetworkDialog/NetworkDialog.d.ts +11 -0
- package/dist/src/components/molecules/NetworkDialog/NetworkDialog.js +34 -0
- package/dist/src/components/molecules/NetworkDialog/index.d.ts +2 -0
- package/dist/src/components/molecules/NetworkDialog/index.js +2 -0
- package/dist/src/components/molecules/NetworkError/NetworkError.d.ts +104 -0
- package/dist/src/components/molecules/NetworkError/NetworkError.js +26 -0
- package/dist/src/components/molecules/NetworkError/index.d.ts +2 -0
- package/dist/src/components/molecules/NetworkError/index.js +2 -0
- package/dist/src/components/molecules/PanelNavButton/PanelNavButton.d.ts +1 -0
- package/dist/src/components/molecules/PanelNavButton/PanelNavButton.js +16 -7
- package/dist/src/components/organisms/PanelNavigation/PanelNavigation.d.ts +1 -0
- package/dist/src/components/organisms/PanelNavigation/PanelNavigation.js +11 -7
- package/dist/src/development/MaestroEventDelegate.js +1 -0
- package/dist/src/helpers/site.d.ts +1 -0
- package/dist/src/helpers/site.js +6 -0
- package/dist/src/helpers/siteConfig.d.ts +1 -0
- package/dist/src/helpers/siteConfig.js +5 -0
- package/dist/src/models/IPanel.d.ts +1 -1
- package/dist/src/models/IPanel.js +1 -1
- package/dist/src/modules/espn/bets/services/BetsService.js +5 -5
- package/dist/src/modules/espn/bets/view/BetsView.js +1 -1
- package/dist/src/modules/espn/components/TabLoadError/TabLoadError.d.ts +96 -0
- package/dist/src/modules/espn/components/TabLoadError/TabLoadError.js +14 -0
- package/dist/src/modules/espn/components/TabLoadError/index.d.ts +2 -0
- package/dist/src/modules/espn/components/TabLoadError/index.js +2 -0
- package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/TournamentOverflowQR.d.ts +5 -5
- package/dist/src/modules/espn/fantasy/components/TournamentOverflowQR/TournamentOverflowQR.js +7 -73
- package/dist/src/modules/espn/fantasy/services/FantasyService.js +4 -1
- package/dist/src/modules/espn/fantasy/view/FantasyItemView.js +1 -1
- package/dist/src/modules/espn/fantasy/view/FantasyView.js +3 -2
- package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.FantasyPolling.d.ts +1 -1
- package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.FantasyPolling.js +10 -7
- package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.d.ts +1 -1
- package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.js +10 -7
- package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.TournamentPolling.d.ts +1 -1
- package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.TournamentPolling.js +10 -7
- package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.d.ts +1 -0
- package/dist/src/modules/espn/fantasy/view-model/FantasyViewModel.js +42 -32
- package/dist/src/modules/espn/key-plays/view/KeyPlayErrorStateView.js +1 -1
- package/dist/src/modules/espn/shop/services/ShopService.js +1 -1
- package/dist/src/modules/espn/shop/view/ShopView.js +1 -1
- package/dist/src/modules/espn/stats/services/StatsService.js +2 -2
- package/dist/src/modules/espn/stats/view/StatsView.js +1 -1
- package/dist/src/modules/fox/components/TabLoadError/TabLoadError.d.ts +96 -0
- package/dist/src/modules/fox/components/TabLoadError/TabLoadError.js +19 -0
- package/dist/src/modules/fox/components/TabLoadError/index.d.ts +2 -0
- package/dist/src/modules/fox/components/TabLoadError/index.js +2 -0
- package/dist/src/modules/fox/multi-view/interfaces/IMultiViewViewModel.d.ts +3 -0
- package/dist/src/modules/fox/multi-view/interfaces/IMultiViewViewModel.js +1 -0
- package/dist/src/modules/fox/multi-view/services/MultiViewService.d.ts +104 -0
- package/dist/src/modules/fox/multi-view/services/MultiViewService.js +97 -0
- package/dist/src/modules/fox/multi-view/types.d.ts +48 -42
- package/dist/src/modules/fox/multi-view/types.js +79 -82
- package/dist/src/modules/fox/multi-view/view/BuildYourOwn/BuildYourOwn.d.ts +7 -0
- package/dist/src/modules/fox/multi-view/view/BuildYourOwn/BuildYourOwn.js +99 -0
- package/dist/src/modules/fox/multi-view/view/BuildYourOwn/index.d.ts +2 -0
- package/dist/src/modules/fox/multi-view/view/BuildYourOwn/index.js +2 -0
- package/dist/src/modules/fox/multi-view/view/CuratedMultiview/CuratedMultiviews.d.ts +8 -0
- package/dist/src/modules/fox/multi-view/view/CuratedMultiview/CuratedMultiviews.js +92 -0
- package/dist/src/modules/fox/multi-view/view/CuratedMultiview/index.d.ts +2 -0
- package/dist/src/modules/fox/multi-view/view/CuratedMultiview/index.js +2 -0
- package/dist/src/modules/fox/multi-view/view/FoxMultiView.d.ts +1 -0
- package/dist/src/modules/fox/multi-view/view/FoxMultiView.js +65 -2
- package/dist/src/modules/fox/multi-view/view/components/BuildYourOwnTabs/BuildYourOwnTabs.d.ts +8 -0
- package/dist/src/modules/fox/multi-view/view/components/BuildYourOwnTabs/BuildYourOwnTabs.js +30 -0
- package/dist/src/modules/fox/multi-view/view/components/BuildYourOwnTabs/index.d.ts +2 -0
- package/dist/src/modules/fox/multi-view/view/components/BuildYourOwnTabs/index.js +2 -0
- package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/CustomMultiviewStreamsCard.d.ts +118 -0
- package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/CustomMultiviewStreamsCard.js +51 -0
- package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/index.d.ts +2 -0
- package/dist/src/modules/fox/multi-view/view/components/CustomMultiviewStreamsCard/index.js +2 -0
- package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/LayoutSelector.d.ts +1 -1
- package/dist/src/modules/fox/multi-view/view/components/LayoutSelector/LayoutSelector.js +11 -14
- package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/CuratedMultiviewCard.d.ts +101 -0
- package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/CuratedMultiviewCard.js +41 -0
- package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/index.d.ts +2 -0
- package/dist/src/modules/fox/multi-view/view/components/curated-multiview-card/index.js +2 -0
- package/dist/src/modules/fox/multi-view/view-model/MultiViewViewModel.d.ts +84 -0
- package/dist/src/modules/fox/multi-view/view-model/MultiViewViewModel.js +509 -0
- package/dist/src/modules/fox/multi-view/view-model/index.d.ts +1 -0
- package/dist/src/modules/fox/multi-view/view-model/index.js +1 -0
- package/dist/src/services/NetworkManager/NetworkManager.js +1 -1
- package/dist/src/services/NetworkManager/errors.d.ts +3 -1
- package/dist/src/services/NetworkManager/errors.js +15 -1
- package/dist/src/services/StaticService/StaticService.js +1 -0
- package/dist/src/view-models/MaestroEventViewModel.d.ts +2 -0
- package/dist/src/view-models/MaestroEventViewModel.js +17 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/helpers/strings.ts","webpack:///./src/modules/espn/fantasy/services/FantasyService.ts","webpack:///./src/modules/espn/fantasy/types.ts","webpack:///./src/modules/espn/fantasy/view-model/FantasyViewModel.FantasyPolling.ts","webpack:///./src/modules/espn/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.ts","webpack:///./src/modules/espn/fantasy/view-model/FantasyViewModel.TournamentPolling.ts","webpack:///./src/modules/espn/fantasy/mocks.ts","webpack:///./src/modules/espn/fantasy/view-model/FantasyViewModel.ts"],"names":["slugify","str","toLowerCase","trim","replace","stringHashCode","hash","i","length","charCodeAt","FantasyService","constructor","_defineProperty","this","networkManager","NetworkManager","fantasyOverrideBaseUrl","leagueManagerOverrideBaseUrl","gambitOverrideBaseUrl","pollFantasy","eventId","jwt","swid","interval","onData","onError","pollExternalApiRequestWithHeaders","endpoint","fantasyBaseUrl","headers","params","displayHiddenPrefs","prefType","context","useCookieAuth","source","featureFlags","filterType","platform","pollLeagueManager","game","leagueId","seasonId","token","proGameId","teamId","leagueManagerBaseUrl","view","getPromo","externalApiRequest","useCache","pollTournamentChallenge","challengeId","competitionId","tournamentChallengeBaseUrl","isLeagueManagerRotoResponse","response","_matchups","_matchups$","undefined","matchups","teams","FantasyPolling","service","task","lastResponseHash","fantasyService","callback","stop","start","polling","removeLastResponseHash","updateInterval","processPolledData","data","error","handlePollingError","captureException","console","headerInterval","getResponseHeaderPollingIntervalValue","panelConfigInterval","getPanelConfigInterval","newInterval","log","refresh","parsedInterval","parseInt","isNaN","warn","_config$panels","_panel$renderer","_panel$renderer$block","config","SDK","getPageConfig","panel","panels","find","p","panel_type","fantasyPollingInterval","renderer","block_data","fan_polling_interval","responseHash","JSON","stringify","extra","substring","pollingInterval","LeagueManagerPolling","key","_this$polling$key","_this$polling$key2","_this$polling$key2$ta","_this$polling$key2$ta2","call","_this$polling$key3","_this$polling$key4","lm_polling_interval","stopAll","Object","keys","forEach","_this$polling$key5","TournamentPolling","tournamentPollingInterval","gambit_polling_interval","MOCK_FANTASY_RESPONSE","id","anon","profile","createDate","lastUpdateDate","hasNotificationPreferences","useSortGlobal","settings","videoAutoStart","value","hideSportsBetting","activeProducts","isInsider","isPremium","lastName","firstName","email","userName","lastAccessDate","bettingFeatures","name","preferences","metaData","entry","entryId","entryMetadata","teamName","teamAbbrev","leagueFormatTypeId","leagueSubTypeId","customizable","active","draftComplete","scoringTypeId","leagueTypeId","draftInProgress","scoringTypeName","leagueSubTypeName","firstScoringPeriodId","gameId","groups","groupId","groupSize","groupName","groupManager","draftDate","draftType","draftStatus","leagueStatus","fantasyCastHref","href","draftTypeName","logoType","logoUrl","restrictionType","entryURL","scoreboardFeedURL","abbrev","description","logoURL","signupURL","restrictionTypeName","inSeason","isLive","currentScoringPeriodId","contentSourceId","sortGlobal","isHidden","typeId","type","code","isDeletable","isDelegated","maxAllowed","bu","lineup","proGameToNumPlayersStarting","currentLineup","entryUuid","lastAvailableDate","logoURLs","logoSecondary","logoPrimary","darkLogoURL","lightLogoURL","gameUrl","entryName","challengeGroups","score","eliminated","overallScore","percentile","rank","record","losses","wins","scoreByGroup","scoringFormatId","isImplicit","affinity","groupSettings","fantasyData","totalFantasyLeagues","leaguesBySportLeague","NFL","MLB","NBA","NHL","WNBA","totalChallengeEntries","challengeInformation","gameType","challengeName","challengeAbbrev","scoringFormatIds","state","logoUrls","logo","logoDark","logo1x1","logo1x1Dark","mappings","userEntryCount","challengeScoreboardEnabled","leagueScoreboardEnabled","FantasyViewModel","delegate","analyticsService","options","Observable","Map","useMockData","fantasyPolling","leagueManagerPolling","tournamentPolling","trackPanelView","fetchData","isDataLoading","userIsAuthenticated","append","fantasyItems","getUserSWID","getUserToken","fetchMockData","processFantasy","bind","onEngage","panelClick","metadata","card","onAskLogin","onPanelEvent","payload","onLoginSuccess","async","cleanup","leagueSortOrder","clear","itemToLeagueKey","_fantasyLeagues","_tournamentChallenges","_promoItem","_tcProcessingCount","isLoadingTc","hasEverSuccessfullyLoaded","panelView","_data$fantasyData","_data$fantasyData2","_data$fantasyData3","hidePickems","hide_pickems","hasChallenges","noData","_data$fantasyData4","_data$fantasyData4$ch","challenge","String","parseTournamentChallenge","rebuildFantasyItems","promo","getPromoData","background","fantasy","promotion","qrCode","title","_pref$metaData","_entry$groups","_entry$groups$","_entry$groups2","_entry$groups2$","pref","set","_entry$entryMetadata","_matchups2","_matchups2$","parseInactiveLeague","home","items","parseHeadToHead","item","parseRoto","errorState","preference","_data$matchups","leagueName","scoringType","matchup","_matchup$teams","team","sportLogo","sportColor","points","roster","matchupRoster","activeAthletes","r","_r$player$proTeam","player","abbrevName","headshot","proTeam","triCode","slot","push","athleteHeadshot","athleteAbbrevName","athletesSlot","teamTriCode","proGameStatusLines","currentlyWatching","toString","topPlayers","parseTopPlayers","league","color","subtitle","includes","leagueKey","existingItemIndex","findIndex","sort","a","b","_this$leagueSortOrder","_this$leagueSortOrder2","keyA","get","keyB","Number","MAX_SAFE_INTEGER","existingGroupIndex","g","header","group","_data$matchups2","away","homeRoster","awayRoster","_singleAwayRoster$pla","_matchup$away","_singleHomeRoster$pla","_matchup$home","_singleHomeRoster$pla2","singleAwayRoster","singleHomeRoster","stats","projectedPoints","awayTeam","winProbability","homeTeam","players","_p$proTeam","_p$playerStatus","_p$positions","rosteredBy","percentRostered","playerStatus","startsWith","position","positions","split","draftDateNum","parsedDate","Date","getTime","leagueColor","leagueLogo","_promoData","_data$entries","validEntries","entries","filter","totalEntries","entriesToShow","slice","_outcomePicked","_outcomePicked2","userPickName","propositions","picks","pick","propositionId","outcomeId","proposition","outcomes","outcome","o","Math","round","entryStatusIcon","finalPick","primaryLogo","outcomePicked","secondaryLogo","result","isComplete","tournamentId","tournamentAbbrev","tournamentLogo","promoData","qrCodeVariant","locked","promoVariant","overflowQR","clearTabLoadFailure","setTimeout","setDataToPanel"],"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 from '../../../../services/NetworkManager/NetworkManager';\nimport {\n IFantasyResponse,\n ILeagueManagerResponse,\n IPromoResponse,\n TournamentChallenge,\n} from '@/modules/espn/fantasy/types';\n\nconst FANTASY_BASE_URL = 'https://fan.api.espn.com';\nconst LEAGUE_MANAGER_BASE_URL = 'https://lm-api-reads.fantasy.espn.com';\nconst TOURNAMENT_CHALLENGE_BASE_URL = 'https://gambit-api.fantasy.espn.com';\nconst PROMO_URL = 'https://client.espncdn.com/ictv/promo.json';\n\nexport type LeagueManagerPollingParams = {\n /**\n * NBA, NFL, etc.\n */\n game: string;\n /**\n * 2025\n */\n seasonId: number;\n /**\n * The league ID\n */\n leagueId: number;\n token: string;\n proGameId: string;\n teamId: number;\n};\n\nexport type FantasyPollingParams = {\n swid: string;\n jwt: string;\n eventId: string;\n};\n\nexport type TournamentChallengePollingParams = {\n challengeId: string;\n competitionId: string;\n token: string;\n};\n\n/**\n * Service for handling fantasy API calls\n */\nclass FantasyService {\n private networkManager: NetworkManager;\n leagueManagerOverrideBaseUrl = '';\n fantasyOverrideBaseUrl = '';\n gambitOverrideBaseUrl = '';\n\n constructor() {\n this.networkManager = new NetworkManager();\n }\n\n get fantasyBaseUrl() {\n return this.fantasyOverrideBaseUrl || FANTASY_BASE_URL;\n }\n\n get leagueManagerBaseUrl() {\n return this.leagueManagerOverrideBaseUrl || LEAGUE_MANAGER_BASE_URL;\n }\n\n get tournamentChallengeBaseUrl() {\n return this.gambitOverrideBaseUrl || TOURNAMENT_CHALLENGE_BASE_URL;\n }\n\n /**\n * Polls the fantasy API at regular intervals\n * @param swid - The SWID of the user\n * @param interval - Polling interval in milliseconds\n * @param onData - Callback invoked with the data on each successful poll\n * @param onError - Optional callback invoked on error\n */\n pollFantasy(\n { eventId, jwt, swid }: FantasyPollingParams,\n interval: number,\n onData: (data: {\n data: IFantasyResponse;\n headers: Record<string, string>;\n }) => void,\n onError?: (error: Error) => void\n ): { stop: () => void } {\n return this.networkManager.pollExternalApiRequestWithHeaders<\n IFantasyResponse\n >({\n endpoint: `${this.fantasyBaseUrl}/apis/v2/fans/${swid}`,\n interval,\n headers: {\n 'x-p13n-auth': jwt,\n },\n onData,\n onError,\n params: {\n displayHiddenPrefs: true,\n prefType: 'fantasy',\n context: 'fantasy',\n useCookieAuth: true,\n source: 'fantasyictv-bbd',\n featureFlags: 'challengeEntries',\n filterType: 'FANTASY_CTV',\n platform: 'fantasyictv_bbd',\n swid,\n eventId,\n },\n });\n }\n\n pollLeagueManager(\n {\n game,\n leagueId,\n seasonId,\n token,\n proGameId,\n teamId,\n }: LeagueManagerPollingParams,\n interval: number,\n onData: (data: {\n data: ILeagueManagerResponse;\n headers: Record<string, string>;\n }) => void,\n onError?: (error: Error) => void\n ): { stop: () => void } {\n return this.networkManager.pollExternalApiRequestWithHeaders<\n ILeagueManagerResponse\n >({\n endpoint: `${this.leagueManagerBaseUrl}/apis/v3/games/${game}/seasons/${seasonId}/segments/0/leagues/${leagueId}/scoreboard`,\n interval,\n onData,\n onError,\n headers: {\n 'x-p13n-auth': token,\n },\n params: {\n view: 'ictv_scoreboard',\n platform: 'fantasyictv_bbd',\n proGameId,\n teamId,\n },\n });\n }\n\n getPromo() {\n return this.networkManager.externalApiRequest<IPromoResponse>({\n endpoint: PROMO_URL,\n useCache: true,\n });\n }\n\n /**\n * Polls the tournament challenge API at regular intervals\n * @param challengeId - The challenge ID\n * @param interval - Polling interval in milliseconds\n * @param onData - Callback invoked with the data on each successful poll\n * @param onError - Optional callback invoked on error\n * @returns Object with a stop function to cancel polling\n */\n pollTournamentChallenge(\n { challengeId, competitionId, token }: TournamentChallengePollingParams,\n interval: number,\n onData: (data: {\n data: TournamentChallenge;\n headers: Record<string, string>;\n }) => void,\n onError?: (error: Error) => void\n ): { stop: () => void } {\n return this.networkManager.pollExternalApiRequestWithHeaders<\n TournamentChallenge\n >({\n endpoint: `${this.tournamentChallengeBaseUrl}/apis/v1/challenges/${challengeId}/scoreboard`,\n interval,\n onData,\n onError,\n headers: {\n 'x-p13n-auth': token,\n },\n params: {\n competitionId,\n view: 'ictv_challenges',\n platform: 'fantasyictv_bbd',\n },\n });\n }\n}\n\nexport default FantasyService;\n","export interface IPromoResponse {\n fantasy: {\n promotion: {\n title: string;\n description: string;\n background: string;\n logo: string;\n qrCode: string;\n fallbackUrl: string;\n };\n };\n 'tc-pre'?: {\n promotion: {\n title: string;\n description: string;\n background: string;\n logo: string;\n qrCode: string;\n fallbackUrl: string;\n };\n };\n 'tc-live'?: {\n promotion: {\n title: string;\n description: string;\n background: string;\n logo: string;\n qrCode: string;\n fallbackUrl: string;\n };\n };\n}\n\nexport interface IFantasyResponse {\n preferences?: Preference[];\n fantasyData?: FantasyData;\n}\n\nexport interface Preference {\n id?: string;\n createDate?: number;\n lastUpdateDate?: number;\n metaData?: {\n entry?: {\n entryId?: number;\n entryMetadata?: {\n teamName?: string;\n teamAbbrev?: string;\n leagueFormatTypeId?: number;\n leagueSubTypeId?: number;\n customizable?: boolean;\n active?: boolean;\n draftComplete?: boolean;\n scoringTypeId?: number;\n leagueTypeId?: number;\n draftInProgress?: boolean;\n };\n firstScoringPeriodId?: number;\n gameId?: number;\n groups?: {\n groupId?: number;\n groupSize?: number;\n groupName?: string;\n groupManager?: boolean;\n draftDate?: number | string | null;\n draftType?: number;\n draftStatus?: number;\n leagueStatus?: number;\n fantasyCastHref?: string;\n href?: string;\n }[];\n logoType?: string;\n logoUrl?: string;\n restrictionType?: number;\n seasonId?: number;\n entryURL?: string;\n scoreboardFeedURL?: string;\n abbrev?: string;\n name?: string;\n description?: string;\n logoURL?: string;\n signupURL?: string;\n href?: string;\n };\n inSeason?: boolean;\n isLive?: boolean;\n currentScoringPeriodId?: number;\n };\n contentSourceId?: number;\n sortGlobal?: number;\n isHidden?: boolean;\n typeId?: number;\n type?: {\n id?: number;\n name?: string;\n code?: string;\n isDeletable?: boolean;\n isDelegated?: boolean;\n maxAllowed?: number;\n };\n bu?: number;\n}\n\nexport interface ChallengeInformation {\n id: string | number;\n gameType: string;\n}\n\nexport interface FantasyData {\n totalFantasyLeagues?: number;\n leaguesBySportLeague?: Record<string, number>;\n totalChallengeEntries?: number;\n challengeInformation?: ChallengeInformation[];\n}\n\nexport interface ILeagueManagerResponse {\n gameId?: number;\n id?: number;\n leagueName?: string;\n livePlayers?: any[];\n matchups?: Matchup[];\n scoringPeriodId?: number;\n scoringType?: string;\n seasonId?: number;\n segmentId?: number;\n sportColor?: string;\n sportLogo?: string;\n topPlayers?: Player[];\n}\n\nexport interface Matchup {\n away?: Team;\n home?: Team;\n id?: number;\n name?: string;\n}\n\nexport interface Team {\n currentScoringPeriodPoints?: number;\n id?: number;\n logo?: string;\n name?: string;\n owners?: Owner[];\n points?: number;\n score?: string;\n record?: string;\n roster?: RosterItem[];\n winProbability?: number;\n projectedPoints?: string;\n}\n\nexport interface Owner {\n firstName?: string;\n id?: string;\n lastName?: string;\n}\n\nexport interface RosterItem {\n displayOrder?: number;\n player?: Player;\n slot?: string;\n}\n\nexport interface Player {\n abbrevName?: string;\n currentlyWatching?: boolean;\n firstName?: string;\n fullName?: string;\n headshot?: string;\n id?: number;\n injuryStatus?: string;\n lastName?: string;\n lastNewsDate?: number;\n percentRostered?: number;\n points?: number;\n projectedPoints?: number;\n positions?: string;\n statLine?: string;\n playerStatus?: string;\n proGameStatusLines?: string[];\n proTeam?: ProTeam;\n}\n\nexport interface ProTeam {\n alternateColor?: string;\n color?: string;\n darkLogo?: string;\n id?: number;\n live?: boolean;\n triCode?: string;\n}\n\nexport interface ILeagueManagerRotoResponse {\n gameId?: number;\n id?: number;\n leagueName?: string;\n name?: string;\n livePlayers?: any[]; // No structure provided\n matchups?: MatchupSingleEntry[];\n scoringPeriodId?: number;\n scoringType?: string;\n seasonId?: number;\n segmentId?: number;\n sportColor?: string;\n sportLogo?: string;\n topPlayers?: Player[];\n}\n\nexport interface MatchupSingleEntry {\n id?: number;\n teams?: Team[];\n}\n\nexport const isLeagueManagerRotoResponse = (\n response: ILeagueManagerResponse | ILeagueManagerRotoResponse\n): response is ILeagueManagerRotoResponse => {\n return (\n (response as ILeagueManagerRotoResponse).matchups?.[0]?.teams !== undefined\n );\n};\n\nexport const isLeagueManagerHeadToHeadResponse = (\n response: ILeagueManagerResponse | ILeagueManagerRotoResponse\n): response is ILeagueManagerResponse => {\n return (response as ILeagueManagerResponse).matchups?.[0]?.home !== undefined;\n};\n\nexport interface TournamentPick {\n propositionId?: string;\n outcomeId?: string;\n}\n\nexport interface TournamentPropositionOutcome {\n id?: string;\n name?: string;\n}\n\nexport interface TournamentProposition {\n id?: string;\n outcomes?: TournamentPropositionOutcome[];\n}\n\nexport interface TournamentChallengeEntry {\n id?: string;\n name?: string;\n rank?: number;\n score?: number;\n percentile?: number;\n isComplete?: boolean;\n entryStatusIcon?: string;\n finalPick?: TournamentPick & {\n primaryLogo?: string;\n secondaryLogo?: string;\n result?: string;\n };\n picks?: TournamentPick[];\n}\n\nexport interface TournamentChallenge {\n id?: string;\n key?: string;\n name?: string;\n abbrev?: string;\n logo?: string;\n logoDark?: string;\n state?: 'PRE' | 'LIVE' | 'POST';\n locked?: boolean;\n lockDate?: string | number;\n scoringPeriodLabel?: string;\n upcomingGames?: any[];\n entries?: TournamentChallengeEntry[];\n propositions?: TournamentProposition[];\n}\n\nexport const isTournamentChallenge = (\n data: any\n): data is TournamentChallenge => {\n return (data as TournamentChallenge).entries?.[0]?.id !== undefined;\n};\n\nexport type TournamentChallengeHeaderItem = {\n type: 'tournament-challenge-header';\n id: string;\n name: string;\n abbrev: string;\n logo: string;\n logoDark: string;\n state: 'PRE' | 'LIVE' | 'POST';\n scoringPeriodLabel: string;\n upcomingGames: any[];\n};\n\nexport type TournamentBracketCardItem = {\n type: 'tournament-bracket-card';\n id: string;\n name: string;\n rank: number;\n score: number;\n percentile: number;\n entryStatusIcon: string;\n finalPick: TournamentPick & {\n primaryLogo?: string;\n secondaryLogo?: string;\n result?: string;\n };\n picks?: TournamentPick[];\n isComplete: boolean;\n tournamentId: string;\n tournamentAbbrev: string;\n tournamentLogo: string;\n userPickName?: string;\n propositions?: TournamentProposition[];\n};\n\nexport type FantasyHeaderItem = {\n type: 'fantasy-header';\n id: string;\n title: string;\n};\n\nexport interface IFantasyViewModel {\n cleanup(): void;\n}\n\nexport type TournamentOverflowQRItem = {\n type: 'tournament-overflow-qr';\n id: string;\n background: string;\n logo: string;\n qrCode: string;\n title: string;\n description: string;\n tournamentId: string;\n};\n","import SDK from '@/index';\nimport { captureException } from '@/sentry';\nimport FantasyService, {\n FantasyPollingParams,\n} from '@/modules/espn/fantasy/services/FantasyService';\nimport { IFantasyResponse } 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_FANTASY_POLLING_INTERVAL = 60000;\n\nexport default class FantasyPolling {\n private polling: Polling = {\n interval: DEFAULT_FANTASY_POLLING_INTERVAL,\n task: null,\n lastResponseHash: null,\n };\n private fantasyService: FantasyService;\n\n constructor(service: FantasyService) {\n this.fantasyService = service;\n }\n\n /**\n * Refresh polling for fantasy data\n */\n async refresh(\n params: FantasyPollingParams,\n callback: (data: IFantasyResponse) => void\n ): Promise<void> {\n // First stop any existing polling\n this.stop();\n\n // Start the poll loop\n await this.start(params, callback);\n }\n\n /**\n * Stop polling for fantasy 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 async start(\n params: FantasyPollingParams,\n callback: (data: IFantasyResponse) => void\n ): Promise<void> {\n try {\n this.polling.task = this.fantasyService.pollFantasy(\n params,\n this.polling.interval,\n (response) => {\n this.updateInterval(params, response.headers, callback);\n this.processPolledData(response.data, callback);\n },\n (error) => this.handlePollingError(error, params.swid)\n );\n } catch (error) {\n captureException(error, {\n context: 'FantasyViewModel.pollFantasy',\n });\n console.error('[FANTASY] Error setting up fantasy 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 params: FantasyPollingParams,\n headers: Record<string, string>,\n callback: (data: IFantasyResponse) => void\n ): void {\n const headerInterval = this.getResponseHeaderPollingIntervalValue(headers);\n const panelConfigInterval = this.getPanelConfigInterval();\n\n const newInterval = headerInterval || panelConfigInterval; // order matters here\n\n // Only update if we have a valid new interval and it's different from current\n if (newInterval && newInterval !== this.polling.interval) {\n console.log(\n `[Fantasy] Updating fantasy polling interval from ${this.polling.interval}ms to ${newInterval}ms`\n );\n this.polling.interval = newInterval;\n // Restart polling with the new interval\n this.refresh(params, 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 `[Fantasy] Invalid polling interval header received: ${newInterval}.`\n );\n return null;\n }\n\n return parsedInterval * 1000; // Convert seconds to milliseconds\n }\n\n private getPanelConfigInterval(): number | null {\n const config = SDK.getPageConfig();\n const panel = config?.panels?.find((p) => p.panel_type === 'espnFantasy');\n if (!panel) {\n return null;\n }\n\n const fantasyPollingInterval =\n panel.renderer?.block_data?.fan_polling_interval;\n if (!fantasyPollingInterval) {\n return null;\n }\n\n const parsedInterval = parseInt(fantasyPollingInterval, 10);\n if (isNaN(parsedInterval) || parsedInterval <= 0) {\n console.warn(\n `[FANTASY] Invalid fantasy polling interval from panel config: ${fantasyPollingInterval}.`\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: IFantasyResponse,\n callback: (data: IFantasyResponse) => 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 '[Fantasy] Fantasy 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 fantasy polling\n */\n private handlePollingError(error: Error, swid: string): void {\n console.error('[FANTASY] Fantasy polling error:', error);\n\n captureException(error, {\n context: 'FantasyViewModel.pollFantasy',\n extra: {\n swid: swid ? `${swid.substring(0, 8)}...` : 'unknown',\n pollingInterval: this.polling.interval,\n },\n });\n }\n}\n","import SDK from '@/index';\nimport { captureException } from '@/sentry';\nimport FantasyService, {\n LeagueManagerPollingParams,\n} from '@/modules/espn/fantasy/services/FantasyService';\nimport { ILeagueManagerResponse, ILeagueManagerRotoResponse } 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_LEAGUE_MANAGER_POLLING_INTERVAL = 60000;\n\nexport default class LeagueManagerPolling {\n private polling: Record<string, Polling> = {};\n private fantasyService: FantasyService;\n\n constructor(service: FantasyService) {\n this.fantasyService = service;\n }\n\n /**\n * Refresh polling for league manager data\n */\n refresh(\n key: string,\n params: LeagueManagerPollingParams,\n callback: (\n data: ILeagueManagerResponse | ILeagueManagerRotoResponse\n ) => void\n ): void {\n // First stop any existing polling\n this.stop(key);\n\n // Initialize polling state if it doesn't exist\n if (!this.polling[key]) {\n this.polling[key] = {\n interval: DEFAULT_LEAGUE_MANAGER_POLLING_INTERVAL,\n lastResponseHash: null,\n task: null,\n };\n }\n\n // Start the poll loop\n this.start(key, params, callback);\n }\n\n /**\n * Stop polling for fantasy data\n */\n stop(key: string): void {\n if (this.polling[key]?.task) {\n this.polling[key]?.task?.stop?.();\n this.polling[key].task = null;\n }\n }\n\n private start(\n key: string,\n params: LeagueManagerPollingParams,\n callback: (\n data: ILeagueManagerResponse | ILeagueManagerRotoResponse\n ) => void\n ) {\n try {\n this.polling[key].task = this.fantasyService.pollLeagueManager(\n params,\n this.polling[key].interval,\n (response) => {\n this.updateInterval(key, params, callback, response.headers);\n this.processPolledData(key, response.data, callback);\n },\n (error) => this.handlePollingError(error, key, params)\n );\n } catch (error) {\n captureException(error, {\n context: 'FantasyViewModel.pollLeagueManager',\n });\n console.error(\n '[FANTASY] Error setting up league manager polling:',\n error\n );\n }\n }\n\n /**\n * Process data received from polling\n */\n private processPolledData(\n key: string,\n data: ILeagueManagerResponse | ILeagueManagerRotoResponse,\n callback: (\n data: ILeagueManagerResponse | ILeagueManagerRotoResponse\n ) => 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[key].lastResponseHash === responseHash) {\n console.log(\n '[Fantasy] League manager Response hash is the same as last successful response - skipping update'\n );\n return;\n }\n\n this.polling[key].lastResponseHash = responseHash;\n callback(data);\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 key: string,\n params: LeagueManagerPollingParams,\n callback: (\n data: ILeagueManagerResponse | ILeagueManagerRotoResponse\n ) => void,\n headers: Record<string, string>\n ): void {\n const headerInterval = this.getResponseHeaderPollingIntervalValue(headers);\n const panelConfigInterval = this.getPanelConfigInterval();\n\n const newInterval = headerInterval || panelConfigInterval; // order matters here\n\n // Only update if we have a valid new interval and it's different from current\n if (newInterval && newInterval !== this.polling[key]?.interval) {\n console.log(\n `[Fantasy] Updating league manager polling interval from ${this.polling[key]?.interval}ms to ${newInterval}ms`\n );\n this.polling[key].interval = newInterval;\n // Restart polling with the new interval\n this.refresh(key, params, 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 `[Fantasy] Invalid polling interval header received: ${newInterval}.`\n );\n return null;\n }\n\n return parsedInterval * 1000; // Convert seconds to milliseconds\n }\n\n private getPanelConfigInterval() {\n const config = SDK.getPageConfig();\n const panel = config?.panels?.find((p) => p.panel_type === 'espnFantasy');\n if (!panel) {\n return null;\n }\n\n const fantasyPollingInterval =\n panel.renderer?.block_data?.lm_polling_interval;\n if (!fantasyPollingInterval) {\n return null;\n }\n\n const parsedInterval = parseInt(fantasyPollingInterval, 10);\n if (isNaN(parsedInterval) || parsedInterval <= 0) {\n console.warn(\n `[FANTASY] Invalid league manager polling interval from panel config: ${fantasyPollingInterval}.`\n );\n return null;\n }\n\n return parsedInterval * 1000; // Convert seconds to milliseconds\n }\n\n stopAll() {\n Object.keys(this.polling).forEach((key) => {\n this.stop(key);\n });\n\n this.polling = {};\n }\n\n /**\n * Handle errors that occur during league manager polling\n */\n private handlePollingError(\n error: Error,\n key: string,\n params: LeagueManagerPollingParams\n ): void {\n console.error('[FANTASY] League manager polling error:', error);\n\n captureException(error, {\n context: 'FantasyViewModel.pollLeagueManager',\n extra: {\n key,\n leagueId: params?.leagueId,\n game: params?.game,\n pollingInterval: this.polling[key]?.interval,\n },\n });\n }\n}\n","import SDK from '@/index';\nimport { captureException } from '@/sentry';\nimport FantasyService, {\n TournamentChallengePollingParams,\n} from '@/modules/espn/fantasy/services/FantasyService';\nimport { TournamentChallenge } 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_TOURNAMENT_POLLING_INTERVAL = 60000;\n\nexport default class TournamentPolling {\n private polling: Record<string, Polling> = {};\n private fantasyService: FantasyService;\n\n constructor(service: FantasyService) {\n this.fantasyService = service;\n }\n\n /**\n * Refresh polling for tournament challenge data\n */\n refresh(\n key: string,\n params: TournamentChallengePollingParams,\n callback: (data: TournamentChallenge) => void\n ): void {\n // First stop any existing polling\n this.stop(key);\n\n // Initialize polling state if it doesn't exist\n if (!this.polling[key]) {\n this.polling[key] = {\n interval: DEFAULT_TOURNAMENT_POLLING_INTERVAL,\n lastResponseHash: null,\n task: null,\n };\n }\n\n // Start the poll loop\n this.start(key, params, callback);\n }\n\n /**\n * Stop polling for tournament challenge data\n */\n stop(key: string): void {\n if (this.polling[key]?.task) {\n this.polling[key]?.task?.stop?.();\n this.polling[key].task = null;\n }\n }\n\n private start(\n key: string,\n params: TournamentChallengePollingParams,\n callback: (data: TournamentChallenge) => void\n ): void {\n try {\n this.polling[key].task = this.fantasyService.pollTournamentChallenge(\n params,\n this.polling[key].interval,\n (response) => {\n this.updateInterval(key, params, callback, response.headers);\n this.processPolledData(key, response.data, callback);\n },\n (error) => this.handlePollingError(error, key, params)\n );\n } catch (error) {\n captureException(error, {\n context: 'FantasyViewModel.pollTournamentChallenge',\n });\n console.error('[TOURNAMENT] Error setting up tournament 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 key: string,\n params: TournamentChallengePollingParams,\n callback: (data: TournamentChallenge) => void,\n headers: Record<string, string>\n ): void {\n const headerInterval = this.getResponseHeaderPollingIntervalValue(headers);\n const panelConfigInterval = this.getPanelConfigInterval();\n\n const newInterval = headerInterval || panelConfigInterval; // order matters here\n\n // Only update if we have a valid new interval and it's different from current\n if (newInterval && newInterval !== this.polling[key]?.interval) {\n console.log(\n `[TOURNAMENT] Updating tournament polling interval from ${this.polling[key]?.interval}ms to ${newInterval}ms`\n );\n this.polling[key].interval = newInterval;\n // Restart polling with the new interval\n this.refresh(key, params, 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 `[TOURNAMENT] Invalid polling interval header received: ${newInterval}.`\n );\n return null;\n }\n\n return parsedInterval * 1000; // Convert seconds to milliseconds\n }\n\n private getPanelConfigInterval(): number | null {\n const config = SDK.getPageConfig();\n const panel = config?.panels?.find((p) => p.panel_type === 'espnFantasy');\n if (!panel) {\n return null;\n }\n\n const tournamentPollingInterval =\n panel.renderer?.block_data?.gambit_polling_interval;\n if (!tournamentPollingInterval) {\n return null;\n }\n\n const parsedInterval = parseInt(tournamentPollingInterval, 10);\n if (isNaN(parsedInterval) || parsedInterval <= 0) {\n console.warn(\n `[TOURNAMENT] Invalid tournament polling interval from panel config: ${tournamentPollingInterval}.`\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 key: string,\n data: TournamentChallenge,\n callback: (data: TournamentChallenge) => 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[key].lastResponseHash === responseHash) {\n console.log(\n '[TOURNAMENT] Tournament Response hash is the same as last successful response - skipping update'\n );\n return;\n }\n\n this.polling[key].lastResponseHash = responseHash;\n callback(data);\n }\n\n stopAll() {\n Object.keys(this.polling).forEach((key) => {\n this.stop(key);\n });\n\n this.polling = {};\n }\n\n /**\n * Handle errors that occur during tournament polling\n */\n private handlePollingError(\n error: Error,\n key: string,\n params: TournamentChallengePollingParams\n ): void {\n console.error('[TOURNAMENT] Tournament polling error:', error);\n\n captureException(error, {\n context: 'FantasyViewModel.pollTournamentChallenge',\n extra: {\n key,\n challengeId: params?.challengeId,\n pollingInterval: this.polling[key]?.interval,\n },\n });\n }\n}\n","import { ILeagueManagerResponse, ILeagueManagerRotoResponse } from './types';\n\nexport const MOCK_LEAGUE_MANAGER_HEAD_TO_HEAD_RESPONSE: ILeagueManagerResponse = {\n gameId: 5,\n id: 771877961,\n leagueName: \"It's mintyball, but for women.\",\n livePlayers: [],\n matchups: [\n {\n away: {\n projectedPoints: '50.00',\n winProbability: 0.36,\n currentScoringPeriodPoints: 0.0,\n id: 3,\n logo:\n 'https://mystique-api.fantasy.espn.com/apis/v1/domains/lm/images/71ec59b0-3b51-11f0-aeec-89a937148099',\n name: 'Minty 500',\n owners: [\n {\n firstName: 'Minty 500',\n id: '{CE2A7679-28E5-4B90-9510-6B56B944231F}',\n lastName: 'Quinty',\n },\n ],\n points: 906.0,\n record: '4-5-0',\n roster: [\n {\n displayOrder: 1,\n player: {\n abbrevName: 'P. Bueckers',\n currentlyWatching: true,\n firstName: 'Paige',\n fullName: 'Paige Bueckers',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/4433730.jpg',\n id: 4433730,\n lastName: 'Bueckers',\n lastNewsDate: 1758036180000,\n percentRostered: 99.59,\n points: 0.0,\n positions: 'G',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: 'c4d600',\n color: '002b5c',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/3.jpg',\n id: 3,\n live: false,\n triCode: 'Dal',\n },\n },\n slot: 'G',\n },\n {\n displayOrder: 1,\n player: {\n abbrevName: 'C. Clark',\n currentlyWatching: true,\n firstName: 'Caitlin',\n fullName: 'Caitlin Clark',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/4433403.jpg',\n id: 4433403,\n injuryStatus: 'O',\n lastName: 'Clark',\n lastNewsDate: 1757032140000,\n percentRostered: 78.79,\n points: 0.0,\n positions: 'G',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: 'e03a3e',\n color: '002d62',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/5.jpg',\n id: 5,\n live: false,\n triCode: 'Ind',\n },\n },\n slot: 'G',\n },\n {\n displayOrder: 5,\n player: {\n abbrevName: 'D. Bonner',\n currentlyWatching: false,\n firstName: 'DeWanna',\n fullName: 'DeWanna Bonner',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/869.jpg',\n id: 869,\n lastName: 'Bonner',\n lastNewsDate: 1758174780000,\n percentRostered: 65.6,\n points: 0.0,\n positions: 'F',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: 'e56020',\n color: '3c286e',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/11.jpg',\n id: 11,\n live: false,\n triCode: 'Phx',\n },\n },\n slot: 'F/C',\n },\n {\n displayOrder: 5,\n player: {\n abbrevName: 'N. Collier',\n currentlyWatching: false,\n firstName: 'Napheesa',\n fullName: 'Napheesa Collier',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/3917450.jpg',\n id: 3917450,\n lastName: 'Collier',\n lastNewsDate: 1758171180000,\n percentRostered: 99.96,\n points: 0.0,\n positions: 'F',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: '79bc43',\n color: '266092',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/8.jpg',\n id: 8,\n live: false,\n triCode: 'Min',\n },\n },\n slot: 'F/C',\n },\n {\n displayOrder: 5,\n player: {\n abbrevName: 'S. Sabally',\n currentlyWatching: false,\n firstName: 'Satou',\n fullName: 'Satou Sabally',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/4281929.jpg',\n id: 4281929,\n lastName: 'Sabally',\n lastNewsDate: 1758338400000,\n percentRostered: 99.26,\n points: 0.0,\n positions: 'F',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: 'e56020',\n color: '3c286e',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/11.jpg',\n id: 11,\n live: false,\n triCode: 'Phx',\n },\n },\n slot: 'F/C',\n },\n {\n displayOrder: 6,\n player: {\n abbrevName: 'B. Jones',\n currentlyWatching: false,\n firstName: 'Brionna',\n fullName: 'Brionna Jones',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/3058895.jpg',\n id: 3058895,\n lastName: 'Jones',\n lastNewsDate: 1758295080000,\n percentRostered: 96.03,\n points: 0.0,\n positions: 'C',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: '5091cc',\n color: 'e31837',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/20.jpg',\n id: 20,\n live: false,\n triCode: 'Atl',\n },\n },\n slot: 'UTIL',\n },\n ],\n },\n home: {\n currentScoringPeriodPoints: 0.0,\n id: 1,\n logo:\n 'https://mystique-api.fantasy.espn.com/apis/v1/domains/lm/images/ecd69140-3b51-11f0-af3b-457a6c0242e4',\n name: 'Quintan 9',\n owners: [\n {\n firstName: 'Quintan',\n id: '{94E5C32F-41BF-49C3-A863-3685A39D26AF}',\n lastName: 'p',\n },\n ],\n points: 801.0,\n record: '7-2-0',\n roster: [\n {\n displayOrder: 1,\n player: {\n abbrevName: 'S. Cunningham',\n currentlyWatching: true,\n firstName: 'Sophie',\n fullName: 'Sophie Cunningham',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/3907781.jpg',\n id: 3907781,\n injuryStatus: 'O',\n lastName: 'Cunningham',\n lastNewsDate: 1755628680000,\n percentRostered: 26.66,\n points: 0.0,\n positions: 'G',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: 'e03a3e',\n color: '002d62',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/5.jpg',\n id: 5,\n live: false,\n triCode: 'Ind',\n },\n },\n slot: 'G',\n },\n {\n displayOrder: 1,\n player: {\n abbrevName: 'S. Ionescu',\n currentlyWatching: true,\n firstName: 'Sabrina',\n fullName: 'Sabrina Ionescu',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/4066533.jpg',\n id: 4066533,\n lastName: 'Ionescu',\n lastNewsDate: 1758338640000,\n percentRostered: 99.97,\n points: 0.0,\n positions: 'G',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: '000000',\n color: '86cebc',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/9.jpg',\n id: 9,\n live: false,\n triCode: 'NY',\n },\n },\n slot: 'G',\n },\n {\n displayOrder: 5,\n player: {\n abbrevName: 'J. Jones',\n currentlyWatching: false,\n firstName: 'Jonquel',\n fullName: 'Jonquel Jones',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/2999101.jpg',\n id: 2999101,\n lastName: 'Jones',\n lastNewsDate: 1758175440000,\n percentRostered: 97.92,\n points: 0.0,\n positions: 'F',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: '000000',\n color: '86cebc',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/9.jpg',\n id: 9,\n live: false,\n triCode: 'NY',\n },\n },\n slot: 'F/C',\n },\n {\n displayOrder: 5,\n player: {\n abbrevName: 'E. Magbegor',\n currentlyWatching: false,\n firstName: 'Ezi',\n fullName: 'Ezi Magbegor',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/4420318.jpg',\n id: 4420318,\n lastName: 'Magbegor',\n lastNewsDate: 1758300600000,\n percentRostered: 87.63,\n points: 0.0,\n positions: 'C',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: 'fee11a',\n color: '2c5235',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/14.jpg',\n id: 14,\n live: false,\n triCode: 'Sea',\n },\n },\n slot: 'F/C',\n },\n {\n displayOrder: 5,\n player: {\n abbrevName: 'A. Reese',\n currentlyWatching: true,\n firstName: 'Angel',\n fullName: 'Angel Reese',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/4433402.jpg',\n id: 4433402,\n injuryStatus: 'O',\n lastName: 'Reese',\n lastNewsDate: 1757629500000,\n percentRostered: 95.99,\n points: 0.0,\n positions: 'F',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: 'ffd520',\n color: '5091cd',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/19.jpg',\n id: 19,\n live: false,\n triCode: 'Chi',\n },\n },\n slot: 'F/C',\n },\n {\n displayOrder: 6,\n player: {\n abbrevName: 'R. Howard',\n currentlyWatching: false,\n firstName: 'Rhyne',\n fullName: 'Rhyne Howard',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/4398674.jpg',\n id: 4398674,\n lastName: 'Howard',\n lastNewsDate: 1758295500000,\n percentRostered: 96.93,\n points: 0.0,\n positions: 'G',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: '5091cc',\n color: 'e31837',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/20.jpg',\n id: 20,\n live: false,\n triCode: 'Atl',\n },\n },\n slot: 'UTIL',\n },\n ],\n },\n id: 26,\n name: 'Matchup 13',\n },\n ],\n scoringPeriodId: 120,\n scoringType: 'H2H_POINTS',\n seasonId: 2025,\n segmentId: 0,\n sportColor: '#EE5C01',\n sportLogo:\n 'https://a.espncdn.com/assets/ESPN_IconUpdates_Jul252025/Fantasy/PNG/Fantasy_WFBA%2C%20Type%3DIcon.png',\n topPlayers: [\n {\n abbrevName: 'S. Ionescu',\n currentlyWatching: true,\n firstName: 'Sabrina',\n fullName: 'Sabrina Ionescu',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/4066533.jpg',\n id: 4066533,\n lastName: 'Ionescu',\n lastNewsDate: 1758338640000,\n percentRostered: 99.97,\n points: 0.0,\n positions: 'G',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: '000000',\n color: '86cebc',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/9.jpg',\n id: 9,\n live: false,\n triCode: 'NY',\n },\n },\n {\n abbrevName: 'S. Ionescu',\n currentlyWatching: true,\n firstName: 'Sabrina',\n fullName: 'Sabrina Ionescu',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/4066533.jpg',\n id: 4066533,\n lastName: 'Ionescu',\n lastNewsDate: 1758338640000,\n percentRostered: 99.97,\n points: 0.0,\n positions: 'G',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: '000000',\n color: '86cebc',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/9.jpg',\n id: 9,\n live: false,\n triCode: 'NY',\n },\n },\n {\n abbrevName: 'S. Ionescu',\n currentlyWatching: true,\n firstName: 'Sabrina',\n fullName: 'Sabrina Ionescu',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/4066533.jpg',\n id: 4066533,\n lastName: 'Ionescu',\n lastNewsDate: 1758338640000,\n percentRostered: 99.97,\n points: 0.0,\n positions: 'G',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: '000000',\n color: '86cebc',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/9.jpg',\n id: 9,\n live: false,\n triCode: 'NY',\n },\n },\n {\n abbrevName: 'S. Ionescu',\n currentlyWatching: true,\n firstName: 'Sabrina',\n fullName: 'Sabrina Ionescu',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/athletes/4066533.jpg',\n id: 4066533,\n lastName: 'Ionescu',\n lastNewsDate: 1758338640000,\n percentRostered: 99.97,\n points: 0.0,\n positions: 'G',\n proGameStatusLines: [],\n proTeam: {\n alternateColor: '000000',\n color: '86cebc',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/basketball/leagues/wnba/teams/9.jpg',\n id: 9,\n live: false,\n triCode: 'NY',\n },\n },\n ],\n};\n\nexport const MOCK_LEAGUE_MANAGER_ROTO_RESPONSE: ILeagueManagerRotoResponse = {\n gameId: 2,\n id: 1478040277,\n leagueName: \"It's mintyball.\",\n livePlayers: [],\n matchups: [\n {\n id: 1,\n teams: [\n {\n id: 1,\n logo:\n 'https://mystique-api.fantasy.espn.com/apis/v1/domains/lm/images/c5cc4860-21fc-11f0-a31a-a7584cabf55c',\n name: 'Quintan 9',\n owners: [\n {\n firstName: 'Quintan',\n id: '{94E5C32F-41BF-49C3-A863-3685A39D26AF}',\n lastName: 'p',\n },\n ],\n points: 30.0,\n roster: [\n {\n displayOrder: 0,\n player: {\n abbrevName: 'W. Contreras',\n currentlyWatching: true,\n firstName: 'William',\n fullName: 'William Contreras',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/39895.jpg',\n id: 39895,\n lastName: 'Contreras',\n lastNewsDate: 1758580908000,\n percentRostered: 96.88,\n positions: 'C, DH',\n proGameStatusLines: ['@SD, Tue 9:40 PM'],\n proTeam: {\n alternateColor: 'ffc72c',\n color: '13294b',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/8.jpg',\n id: 8,\n live: false,\n triCode: 'Mil',\n },\n },\n slot: 'C',\n },\n {\n displayOrder: 1,\n player: {\n abbrevName: 'D. Villar',\n currentlyWatching: true,\n firstName: 'David',\n fullName: 'David Villar',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/43031.jpg',\n id: 43031,\n lastName: 'Villar',\n lastNewsDate: 1755199119000,\n percentRostered: 0.01,\n positions: '1B',\n proGameStatusLines: ['StL, Tue 9:45 PM'],\n proTeam: {\n alternateColor: 'fd5a1e',\n color: '000000',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/26.jpg',\n id: 26,\n live: false,\n triCode: 'SF',\n },\n },\n slot: '1B',\n },\n {\n displayOrder: 2,\n player: {\n abbrevName: 'O. Albies',\n currentlyWatching: true,\n firstName: 'Ozzie',\n fullName: 'Ozzie Albies',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/33783.jpg',\n id: 33783,\n injuryStatus: 'IL10',\n lastName: 'Albies',\n lastNewsDate: 1758640556000,\n percentRostered: 82.52,\n positions: '2B',\n proGameStatusLines: ['Wsh, 7:15 PM'],\n proTeam: {\n alternateColor: 'ba0c2f',\n color: '0c2340',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/15.jpg',\n id: 15,\n live: false,\n triCode: 'Atl',\n },\n },\n slot: '2B',\n },\n {\n displayOrder: 3,\n player: {\n abbrevName: 'A. Riley',\n currentlyWatching: true,\n firstName: 'Austin',\n fullName: 'Austin Riley',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/34982.jpg',\n id: 34982,\n injuryStatus: 'IL60',\n lastName: 'Riley',\n lastNewsDate: 1756750771000,\n percentRostered: 58.25,\n positions: '3B',\n proGameStatusLines: ['Wsh, 7:15 PM'],\n proTeam: {\n alternateColor: 'ba0c2f',\n color: '0c2340',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/15.jpg',\n id: 15,\n live: false,\n triCode: 'Atl',\n },\n },\n slot: '3B',\n },\n {\n displayOrder: 4,\n player: {\n abbrevName: 'M. Betts',\n currentlyWatching: true,\n firstName: 'Mookie',\n fullName: 'Mookie Betts',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/33039.jpg',\n id: 33039,\n lastName: 'Betts',\n lastNewsDate: 1758348477000,\n percentRostered: 99.58,\n positions: 'SS, RF',\n proGameStatusLines: ['@Ari, Tue 9:40 PM'],\n proTeam: {\n alternateColor: 'ffffff',\n color: '005a9c',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/19.jpg',\n id: 19,\n live: false,\n triCode: 'LAD',\n },\n },\n slot: 'SS',\n },\n {\n displayOrder: 11,\n player: {\n abbrevName: 'C. Bellinger',\n currentlyWatching: true,\n firstName: 'Cody',\n fullName: 'Cody Bellinger',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/33912.jpg',\n id: 33912,\n lastName: 'Bellinger',\n lastNewsDate: 1758166367000,\n percentRostered: 98.16,\n positions: 'RF, 1B, CF, DH, LF',\n proGameStatusLines: ['ChW, 7:05 PM'],\n proTeam: {\n alternateColor: 'c4ced4',\n color: '132448',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/10.jpg',\n id: 10,\n live: false,\n triCode: 'NYY',\n },\n },\n slot: 'OF',\n },\n {\n displayOrder: 11,\n player: {\n abbrevName: 'J. Soto',\n currentlyWatching: true,\n firstName: 'Juan',\n fullName: 'Juan Soto',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/36969.jpg',\n id: 36969,\n lastName: 'Soto',\n lastNewsDate: 1758337911000,\n percentRostered: 99.79,\n positions: 'RF',\n proGameStatusLines: ['@ChC, 7:40 PM'],\n proTeam: {\n alternateColor: 'ff5910',\n color: '002d72',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/21.jpg',\n id: 21,\n live: false,\n triCode: 'NYM',\n },\n },\n slot: 'OF',\n },\n {\n displayOrder: 11,\n player: {\n abbrevName: 'F. Tatis Jr.',\n currentlyWatching: true,\n firstName: 'Fernando',\n fullName: 'Fernando Tatis Jr.',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/35983.jpg',\n id: 35983,\n injuryStatus: 'DTD',\n lastName: 'Tatis Jr.',\n lastNewsDate: 1758633324000,\n percentRostered: 99.33,\n positions: 'RF',\n proGameStatusLines: ['Mil, Tue 9:40 PM'],\n proTeam: {\n alternateColor: 'ffc425',\n color: '2f241d',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/25.jpg',\n id: 25,\n live: false,\n triCode: 'SD',\n },\n },\n slot: 'OF',\n },\n {\n displayOrder: 13,\n player: {\n abbrevName: 'J. Duran',\n currentlyWatching: true,\n firstName: 'Jarren',\n fullName: 'Jarren Duran',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/41610.jpg',\n id: 41610,\n lastName: 'Duran',\n lastNewsDate: 1758468245000,\n percentRostered: 95.0,\n positions: 'CF, LF',\n proGameStatusLines: [\n '@Tor, 7:07 PM',\n '@Tor, 7:07 PM',\n '@Tor, 7:07 PM',\n ],\n proTeam: {\n alternateColor: 'bd3039',\n color: '0d2b56',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/2.jpg',\n id: 2,\n live: false,\n triCode: 'Bos',\n },\n },\n slot: 'UTIL',\n },\n {\n displayOrder: 14,\n player: {\n abbrevName: 'L. Gilbert',\n currentlyWatching: true,\n firstName: 'Logan',\n fullName: 'Logan Gilbert',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/41221.jpg',\n id: 41221,\n lastName: 'Gilbert',\n lastNewsDate: 1758508657000,\n percentRostered: 96.67,\n positions: 'SP',\n proGameStatusLines: ['Col, Tue 9:40 PM'],\n proTeam: {\n alternateColor: '0c2c56',\n color: '005c5c',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/12.jpg',\n id: 12,\n live: false,\n triCode: 'Sea',\n },\n },\n slot: 'P',\n },\n {\n displayOrder: 14,\n player: {\n abbrevName: 'B. Miller',\n currentlyWatching: true,\n firstName: 'Bryce',\n fullName: 'Bryce Miller',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/4654313.jpg',\n id: 4654313,\n lastName: 'Miller',\n lastNewsDate: 1758176573000,\n percentRostered: 58.46,\n positions: 'SP',\n proGameStatusLines: ['Col, Tue 9:40 PM'],\n proTeam: {\n alternateColor: '0c2c56',\n color: '005c5c',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/12.jpg',\n id: 12,\n live: false,\n triCode: 'Sea',\n },\n },\n slot: 'P',\n },\n {\n displayOrder: 14,\n player: {\n abbrevName: 'S. Ohtani',\n currentlyWatching: true,\n firstName: 'Shohei',\n fullName: 'Shohei Ohtani',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/39832.jpg',\n id: 39832,\n lastName: 'Ohtani',\n lastNewsDate: 1758645863000,\n percentRostered: 99.88,\n positions: 'DH, SP',\n proGameStatusLines: ['@Ari, Tue 9:40 PM'],\n proTeam: {\n alternateColor: 'ffffff',\n color: '005a9c',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/19.jpg',\n id: 19,\n live: false,\n triCode: 'LAD',\n },\n },\n slot: 'P',\n },\n {\n displayOrder: 14,\n player: {\n abbrevName: 'T. Rogers',\n currentlyWatching: true,\n firstName: 'Tyler',\n fullName: 'Tyler Rogers',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/34026.jpg',\n id: 34026,\n lastName: 'Rogers',\n lastNewsDate: 1753906608000,\n percentRostered: 9.36,\n positions: 'RP',\n proGameStatusLines: ['@ChC, 7:40 PM'],\n proTeam: {\n alternateColor: 'ff5910',\n color: '002d72',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/21.jpg',\n id: 21,\n live: false,\n triCode: 'NYM',\n },\n },\n slot: 'P',\n },\n {\n displayOrder: 14,\n player: {\n abbrevName: 'S. Schwellenbach',\n currentlyWatching: true,\n firstName: 'Spencer',\n fullName: 'Spencer Schwellenbach',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/4424862.jpg',\n id: 4424862,\n injuryStatus: 'IL60',\n lastName: 'Schwellenbach',\n lastNewsDate: 1758589973000,\n percentRostered: 49.68,\n positions: 'SP',\n proGameStatusLines: ['Wsh, 7:15 PM'],\n proTeam: {\n alternateColor: 'ba0c2f',\n color: '0c2340',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/15.jpg',\n id: 15,\n live: false,\n triCode: 'Atl',\n },\n },\n slot: 'P',\n },\n {\n displayOrder: 14,\n player: {\n abbrevName: 'R. Suarez',\n currentlyWatching: true,\n firstName: 'Robert',\n fullName: 'Robert Suarez',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/4148749.jpg',\n id: 4148749,\n lastName: 'Suarez',\n lastNewsDate: 1758499911000,\n percentRostered: 92.9,\n positions: 'RP',\n proGameStatusLines: ['Mil, Tue 9:40 PM'],\n proTeam: {\n alternateColor: 'ffc425',\n color: '2f241d',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/25.jpg',\n id: 25,\n live: false,\n triCode: 'SD',\n },\n },\n slot: 'P',\n },\n {\n displayOrder: 14,\n player: {\n abbrevName: 'L. Webb',\n currentlyWatching: true,\n firstName: 'Logan',\n fullName: 'Logan Webb',\n headshot:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/athletes/41216.jpg',\n id: 41216,\n lastName: 'Webb',\n lastNewsDate: 1758261430000,\n percentRostered: 98.24,\n positions: 'SP',\n proGameStatusLines: ['StL, Tue 9:45 PM'],\n proTeam: {\n alternateColor: 'fd5a1e',\n color: '000000',\n darkLogo:\n 'https://stitcher.espn.com/ctv/sports/baseball/leagues/mlb/teams/26.jpg',\n id: 26,\n live: false,\n triCode: 'SF',\n },\n },\n slot: 'P',\n },\n ],\n },\n ],\n },\n ],\n scoringPeriodId: 190,\n scoringType: 'ROTO',\n seasonId: 2025,\n segmentId: 0,\n sportColor: '#F51824',\n sportLogo:\n 'https://a.espncdn.com/assets/ESPN_IconUpdates_Jul252025/Fantasy/PNG/Fantasy_FLB%2C%20Type%3DIcon.png',\n};\n\nexport const MOCK_FANTASY_RESPONSE = {\n id: '{969DDFA7-B575-4017-966C-ED83EC3EDF37}',\n anon: false,\n profile: {\n createDate: 1533061925808,\n lastUpdateDate: 1762527083860,\n hasNotificationPreferences: false,\n useSortGlobal: true,\n settings: {\n videoAutoStart: {\n value: '1',\n createDate: 1533061925808,\n },\n hideSportsBetting: {\n value: 'false',\n createDate: 1757023536525,\n },\n activeProducts: {\n value: 'true',\n createDate: 1533379743011,\n },\n },\n isInsider: true,\n isPremium: true,\n lastName: 'Janssen',\n firstName: 'Megan',\n email: 'megan.m.janssen@espn.com',\n userName: 'meganjanssen25',\n },\n lastAccessDate: '2025-11-10T05:27:31Z',\n createDate: '2018-07-31T18:32:05Z',\n lastUpdateDate: '2025-11-07T14:51:23Z',\n bettingFeatures: [\n {\n name: 'bettingContentEnabled',\n value: true,\n },\n {\n name: 'bettingLinksEnabled',\n value: false,\n },\n ],\n preferences: [\n {\n id: '1:549555067:1:2025',\n createDate: 1742909253422,\n lastUpdateDate: 1757380930299,\n metaData: {\n entry: {\n entryId: 1,\n entryMetadata: {\n teamName: 'Mother of Minigames',\n teamAbbrev: 'MoM',\n leagueFormatTypeId: 3,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: false,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 1,\n groups: [\n {\n groupId: 549555067,\n groupSize: 16,\n groupName: 'Fantasy Eng - Guillotine',\n groupManager: true,\n draftDate: '1794416827000',\n draftType: 1,\n draftStatus: 1,\n leagueStatus: 1,\n fantasyCastHref:\n 'https://fantasy.espn.com/football/fantasycast?leagueId=549555067&teamId=1',\n href:\n 'https://fantasy.espn.com/football/league?leagueId=549555067&seasonId=2025',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'CUSTOM_VALID',\n logoUrl:\n 'https://upload.wikimedia.org/wikipedia/en/0/0d/Daenerys_Targaryen_with_Dragon-Emilia_Clarke.jpg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'https://fantasy.espn.com/football/team?leagueId=549555067&teamId=1&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2025/segments/0/leagues/549555067?view=mScoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B1%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FFL',\n name: 'Fantasy Football 2025',\n description: 'Fantasy Football',\n logoURL:\n 'https://g.espncdn.com/s/ffllm/14/images/shell/bgHead_leaguemanager.png',\n signupURL: 'https://fantasy.espn.com/football/welcome',\n href: 'https://www.espn.com/fantasy/football/',\n restrictionTypeName: 'NONE',\n },\n inSeason: true,\n isLive: false,\n currentScoringPeriodId: 10,\n },\n contentSourceId: 10,\n sortGlobal: 7,\n isHidden: true,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '4:1278583616:1:2025',\n createDate: 1742915003927,\n lastUpdateDate: 1756670657496,\n metaData: {\n entry: {\n entryId: 4,\n entryMetadata: {\n teamName: 'Megantron',\n teamAbbrev: 'MEGA',\n leagueFormatTypeId: 3,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 1,\n groups: [\n {\n groupId: 1278583616,\n groupSize: 18,\n groupName: 'Tarps OFF',\n groupManager: false,\n draftDate: 1755777600000,\n draftType: 1,\n draftStatus: 2,\n leagueStatus: 3,\n fantasyCastHref:\n 'https://fantasy.espn.com/football/fantasycast?leagueId=1278583616&teamId=4',\n href:\n 'https://fantasy.espn.com/football/league?leagueId=1278583616&seasonId=2025',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'CUSTOM_VALID',\n logoUrl: 'https://i.giphy.com/media/fZ91xzFtKWmoJSD4TK/giphy.gif',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'https://fantasy.espn.com/football/team?leagueId=1278583616&teamId=4&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2025/segments/0/leagues/1278583616?view=mScoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B4%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FFL',\n name: 'Fantasy Football 2025',\n description: 'Fantasy Football',\n logoURL:\n 'https://g.espncdn.com/s/ffllm/14/images/shell/bgHead_leaguemanager.png',\n signupURL: 'https://fantasy.espn.com/football/welcome',\n href: 'https://www.espn.com/fantasy/football/',\n lineup: {\n proGameToNumPlayersStarting: {\n '401772771': 1,\n '401772944': 1,\n '401772630': 1,\n '401772772': 1,\n '401772773': 1,\n '401772927': 1,\n '401772879': 1,\n '401772636': 1,\n '401772876': 1,\n },\n },\n currentLineup: {\n '-16026': 16,\n '16800': 23,\n '3043078': 2,\n '3052587': 0,\n '3121023': 6,\n '3123052': 17,\n '3139477': 20,\n '4241985': 2,\n '4242355': 20,\n '4362238': 20,\n '4372016': 4,\n '4426385': 20,\n '4429025': 20,\n '4612826': 4,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: true,\n isLive: false,\n currentScoringPeriodId: 10,\n },\n contentSourceId: 10,\n sortGlobal: 9,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '1:1027557112:1:2025',\n createDate: 1742911155496,\n lastUpdateDate: 1756920410999,\n metaData: {\n entry: {\n entryId: 1,\n entryMetadata: {\n teamName: 'Mother of Minigames',\n teamAbbrev: 'MoM',\n leagueFormatTypeId: 3,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 1,\n groups: [\n {\n groupId: 1027557112,\n groupSize: 8,\n groupName: 'Fantasy Platform Engineers',\n groupManager: true,\n draftDate: 1756918800000,\n draftType: 1,\n draftStatus: 2,\n leagueStatus: 3,\n fantasyCastHref:\n 'https://fantasy.espn.com/football/fantasycast?leagueId=1027557112&teamId=1',\n href:\n 'https://fantasy.espn.com/football/league?leagueId=1027557112&seasonId=2025',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/logo-packs/core/Solo/ESPN_Star_Wars_Qira-01.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'https://fantasy.espn.com/football/team?leagueId=1027557112&teamId=1&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2025/segments/0/leagues/1027557112?view=mScoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B1%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FFL',\n name: 'Fantasy Football 2025',\n description: 'Fantasy Football',\n logoURL:\n 'https://g.espncdn.com/s/ffllm/14/images/shell/bgHead_leaguemanager.png',\n signupURL: 'https://fantasy.espn.com/football/welcome',\n href: 'https://www.espn.com/fantasy/football/',\n lineup: {\n proGameToNumPlayersStarting: {\n '401772771': 1,\n '401772630': 1,\n '401772927': 1,\n '401772879': 1,\n '401772876': 2,\n '401772636': 4,\n },\n },\n currentLineup: {\n '-16009': 16,\n '3040151': 6,\n '3121023': 20,\n '3123052': 17,\n '3139477': 20,\n '3917792': 7,\n '4239993': 20,\n '4242335': 2,\n '4372016': 4,\n '4429615': 4,\n '4430807': 2,\n '4433970': 0,\n '4569987': 23,\n '4683062': 20,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: true,\n isLive: false,\n currentScoringPeriodId: 10,\n },\n contentSourceId: 10,\n sortGlobal: 10,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '1:40059468:1:2025',\n createDate: 1742915689938,\n lastUpdateDate: 1756774193047,\n metaData: {\n entry: {\n entryId: 1,\n entryMetadata: {\n teamName: 'Lamb-da Functions',\n teamAbbrev: 'LAMB',\n leagueFormatTypeId: 3,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 1,\n groups: [\n {\n groupId: 40059468,\n groupSize: 8,\n groupName: 'The Bean Queens',\n groupManager: true,\n draftDate: 1756771200000,\n draftType: 1,\n draftStatus: 2,\n leagueStatus: 3,\n fantasyCastHref:\n 'https://fantasy.espn.com/football/fantasycast?leagueId=40059468&teamId=1',\n href:\n 'https://fantasy.espn.com/football/league?leagueId=40059468&seasonId=2025',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'CUSTOM_UPLOAD',\n logoUrl:\n 'https://mystique-api.fantasy.espn.com/apis/v1/domains/lm/images/bc9f0e30-8796-11f0-b6e4-9dd13c0fbbe2',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'https://fantasy.espn.com/football/team?leagueId=40059468&teamId=1&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2025/segments/0/leagues/40059468?view=mScoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B1%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FFL',\n name: 'Fantasy Football 2025',\n description: 'Fantasy Football',\n logoURL:\n 'https://g.espncdn.com/s/ffllm/14/images/shell/bgHead_leaguemanager.png',\n signupURL: 'https://fantasy.espn.com/football/welcome',\n href: 'https://www.espn.com/fantasy/football/',\n lineup: {\n proGameToNumPlayersStarting: {\n '401772771': 2,\n '401772772': 1,\n '401772773': 1,\n '401772927': 3,\n '401772876': 1,\n '401772636': 1,\n },\n },\n currentLineup: {\n '-16001': 16,\n '15818': 4,\n '3052587': 0,\n '3054850': 20,\n '3116365': 20,\n '3917792': 20,\n '4241389': 20,\n '4361307': 6,\n '4362081': 17,\n '4379399': 2,\n '4429025': 23,\n '4429160': 2,\n '4429615': 4,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: true,\n isLive: false,\n currentScoringPeriodId: 10,\n },\n contentSourceId: 10,\n sortGlobal: 11,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '2:2124806394:1:2025',\n createDate: 1742912327647,\n lastUpdateDate: 1757029916228,\n metaData: {\n entry: {\n entryId: 2,\n entryMetadata: {\n teamName: 'Team Baron',\n teamAbbrev: 'BARO',\n leagueFormatTypeId: 3,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 1,\n groups: [\n {\n groupId: 2124806394,\n groupSize: 16,\n groupName: 'Live Scoring',\n groupManager: false,\n draftDate: 1,\n draftType: 2,\n draftStatus: 2,\n leagueStatus: 3,\n fantasyCastHref:\n 'https://fantasy.espn.com/football/fantasycast?leagueId=2124806394&teamId=2',\n href:\n 'https://fantasy.espn.com/football/league?leagueId=2124806394&seasonId=2025',\n draftTypeName: 'Autopick',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/ffl/images/default_logos/19.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'https://fantasy.espn.com/football/team?leagueId=2124806394&teamId=2&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2025/segments/0/leagues/2124806394?view=mScoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B2%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FFL',\n name: 'Fantasy Football 2025',\n description: 'Fantasy Football',\n logoURL:\n 'https://g.espncdn.com/s/ffllm/14/images/shell/bgHead_leaguemanager.png',\n signupURL: 'https://fantasy.espn.com/football/welcome',\n href: 'https://www.espn.com/fantasy/football/',\n lineup: {\n proGameToNumPlayersStarting: {\n '401772770': 1,\n '401772771': 3,\n '401772944': 1,\n '401772630': 1,\n '401772772': 1,\n '401772773': 2,\n '401772875': 2,\n '401772878': 1,\n '401772879': 2,\n '401772927': 11,\n '401772876': 1,\n },\n },\n currentLineup: {\n '-16012': 16,\n '-16003': 16,\n '-14012': 19,\n '-14002': 19,\n '15818': 4,\n '2473037': 17,\n '2971573': 17,\n '3045138': 23,\n '3059915': 2,\n '3126368': 18,\n '3139477': 0,\n '3915411': 2,\n '3918298': 20,\n '4012556': 2,\n '4034779': 23,\n '4037457': 2,\n '4038941': 0,\n '4240472': 6,\n '4241985': 2,\n '4242369': 23,\n '4242557': 23,\n '4242558': 6,\n '4360797': 23,\n '4361432': 23,\n '4361496': 18,\n '4362087': 21,\n '4362477': 4,\n '4362921': 4,\n '4372414': 23,\n '4421446': 2,\n '4428331': 4,\n '4429025': 4,\n '4430723': 6,\n '4430968': 2,\n '4431611': 20,\n '4595342': 6,\n '4596602': 2,\n '4597703': 23,\n '4612826': 4,\n '4686612': 4,\n '4689988': 4,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: true,\n isLive: false,\n currentScoringPeriodId: 10,\n },\n contentSourceId: 10,\n sortGlobal: 12,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '1:1678259:1:2025',\n createDate: 1742913134199,\n lastUpdateDate: 1755702318851,\n metaData: {\n entry: {\n entryId: 1,\n entryMetadata: {\n teamName: \"Megan's Test Acct\",\n teamAbbrev: 'MEGA',\n leagueFormatTypeId: 0,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 1,\n groups: [\n {\n groupId: 1678259,\n groupSize: 4,\n groupName: 'BYE WEEK TEST!',\n groupManager: true,\n draftDate: null,\n draftType: 0,\n draftStatus: 2,\n leagueStatus: 3,\n fantasyCastHref:\n 'https://fantasy.espn.com/football/fantasycast?leagueId=1678259&teamId=1',\n href:\n 'https://fantasy.espn.com/football/league?leagueId=1678259&seasonId=2025',\n draftTypeName: 'Offline Draft',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/logo-packs/core/DIS_Avengers_EndGame/DIS_Avengers_EndGame_A_2.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'https://fantasy.espn.com/football/team?leagueId=1678259&teamId=1&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2025/segments/0/leagues/1678259?view=mScoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B1%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FFL',\n name: 'Fantasy Football 2025',\n description: 'Fantasy Football',\n logoURL:\n 'https://g.espncdn.com/s/ffllm/14/images/shell/bgHead_leaguemanager.png',\n signupURL: 'https://fantasy.espn.com/football/welcome',\n href: 'https://www.espn.com/fantasy/football/',\n lineup: {\n proGameToNumPlayersStarting: {\n '401772769': 1,\n '401772630': 2,\n '401772927': 2,\n '401772876': 1,\n },\n },\n currentLineup: {\n '2577417': 0,\n '3121023': 6,\n '4040715': 20,\n '4047646': 4,\n '4047650': 4,\n '4361579': 2,\n '4372019': 2,\n '4426354': 4,\n '4429615': 4,\n '4569987': 2,\n '4685016': 2,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: true,\n isLive: false,\n currentScoringPeriodId: 10,\n },\n contentSourceId: 10,\n sortGlobal: 13,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '8:1130440938:2:2025',\n createDate: 1737632028020,\n lastUpdateDate: 1759462119590,\n metaData: {\n entry: {\n entryId: 8,\n entryMetadata: {\n teamName: 'Mother of Minigames',\n teamAbbrev: 'MINI',\n leagueFormatTypeId: 2,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 2,\n groups: [\n {\n groupId: 1130440938,\n groupSize: 8,\n groupName: 'Interactive Platform Legends!',\n groupManager: false,\n draftDate: 1743012000000,\n draftType: 1,\n draftStatus: 2,\n leagueStatus: 5,\n fantasyCastHref:\n 'http://fantasy.espn.com/baseball/fantasycast?leagueId=1130440938&teamId=8',\n href:\n 'http://fantasy.espn.com/baseball/league?leagueId=1130440938&seasonId=2025',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/logo-packs/core/Solo/ESPN_Star_Wars_Qira-01.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'http://fantasy.espn.com/baseball/team?leagueId=1130440938&teamId=8&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/flb/seasons/2025/segments/0/leagues/1130440938?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B8%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FLB',\n name: 'Fantasy Baseball 2025',\n description: 'Fantasy Baseball',\n logoURL: 'https://g.espncdn.com/s/frontpage09/images/flb09_index.png',\n signupURL: 'http://fantasy.espn.com/baseball/welcome',\n href: 'https://www.espn.com/fantasy/baseball/',\n currentLineup: {\n '32157': 13,\n '32367': 3,\n '32685': 13,\n '32767': 12,\n '34945': 5,\n '34967': 17,\n '34995': 5,\n '36020': 5,\n '36071': 13,\n '36488': 16,\n '39895': 0,\n '40080': 17,\n '41179': 2,\n '41355': 4,\n '42433': 13,\n '42449': 13,\n '42796': 17,\n '4109109': 1,\n '4208281': 16,\n '4692526': 13,\n '5132011': 16,\n '5150939': 13,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: false,\n isLive: false,\n currentScoringPeriodId: 196,\n },\n contentSourceId: 10,\n sortGlobal: 13,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '1:1335047630:2:2025',\n createDate: 1742230557423,\n lastUpdateDate: 1755632109653,\n metaData: {\n entry: {\n entryId: 1,\n entryMetadata: {\n teamName: 'UnDrafted',\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 2,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: false,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 2,\n groups: [\n {\n groupId: 1335047630,\n groupSize: 10,\n groupName: 'Undrafted; Not Set',\n groupManager: true,\n draftDate: null,\n draftType: 1,\n draftStatus: 1,\n leagueStatus: 1,\n fantasyCastHref:\n 'http://fantasy.espn.com/baseball/fantasycast?leagueId=1335047630&teamId=1',\n href:\n 'http://fantasy.espn.com/baseball/league?leagueId=1335047630&seasonId=2025',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'CUSTOM_UPLOAD',\n logoUrl:\n 'https://mystique-api.fantasy.espn.com/apis/v1/domains/lm/images/5c82c630-212b-11f0-bf52-473646e3de99',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'http://fantasy.espn.com/baseball/team?leagueId=1335047630&teamId=1&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/flb/seasons/2025/segments/0/leagues/1335047630?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B1%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FLB',\n name: 'Fantasy Baseball 2025',\n description: 'Fantasy Baseball',\n logoURL: 'https://g.espncdn.com/s/frontpage09/images/flb09_index.png',\n signupURL: 'http://fantasy.espn.com/baseball/welcome',\n href: 'https://www.espn.com/fantasy/baseball/',\n restrictionTypeName: 'NONE',\n },\n inSeason: false,\n isLive: false,\n currentScoringPeriodId: 196,\n },\n contentSourceId: 10,\n sortGlobal: 17,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: 'cd9ccb60-2a84-11f0-a3e0-ffe8c80e5341',\n createDate: 1762778889707,\n metaData: {\n entry: {\n entryUuid: 'cd9ccb60-2a84-11f0-a3e0-ffe8c80e5341',\n lastAvailableDate: 1768193940000,\n challengeId: '263',\n logoURLs: {\n logoSecondary: '',\n logoPrimary:\n 'https://chui-assets-cdn.espn.com/1ab5b81f-0114-4ef0-aced-a096cfa487b1.png',\n darkLogoURL:\n 'https://chui-assets-cdn.espn.com/149a15a7-10e7-421a-ae38-d7ff4df3f8de.png',\n lightLogoURL:\n 'https://chui-assets-cdn.espn.com/1ab5b81f-0114-4ef0-aced-a096cfa487b1.png',\n },\n gameUrl: 'https://fantasy.espn.com/games/nfl-win-totals-2025',\n entryName: \"Megan_Janssen2's Picks 1\",\n challengeGroups: '',\n score: {\n eliminated: false,\n overallScore: 10,\n percentile: 0.73421348,\n rank: 43043,\n record: {\n losses: 2,\n wins: 1,\n },\n },\n scoreByGroup: '',\n scoringFormatId: 1,\n },\n },\n sortGlobal: 1382,\n isImplicit: false,\n isHidden: false,\n typeId: 14,\n affinity: 0,\n type: {\n id: 14,\n name: 'Challenge Entry',\n code: 'challengeEntry',\n isDeletable: true,\n isDelegated: true,\n maxAllowed: 200,\n },\n },\n {\n id: '10:978432872:1:2025',\n createDate: 1750808942792,\n lastUpdateDate: 1753110440776,\n metaData: {\n entry: {\n entryId: 10,\n entryMetadata: {\n teamName: \"Megan's Magnificent Team\",\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 7,\n leagueSubTypeId: 3,\n customizable: false,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 1,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'DRAFT_LOBBY',\n },\n firstScoringPeriodId: 1,\n gameId: 1,\n groups: [\n {\n groupId: 978432872,\n groupSize: 10,\n groupName: 'San Francisco Gridiron Gauntlet League',\n groupManager: false,\n draftDate: 1750809180000,\n draftType: 1,\n draftStatus: 2,\n leagueStatus: 3,\n fantasyCastHref:\n 'https://fantasy.espn.com/football/fantasycast?leagueId=978432872&teamId=10',\n href:\n 'https://fantasy.espn.com/football/league?leagueId=978432872&seasonId=2025',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/ffl/images/default_logos/8.svg',\n restrictionType: 5,\n seasonId: 2025,\n entryURL:\n 'https://fantasy.espn.com/football/team?leagueId=978432872&teamId=10&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2025/segments/0/leagues/978432872?view=mScoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B10%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FFL',\n name: 'Fantasy Football 2025',\n description: 'Fantasy Football',\n logoURL:\n 'https://g.espncdn.com/s/ffllm/14/images/shell/bgHead_leaguemanager.png',\n signupURL: 'https://fantasy.espn.com/football/welcome',\n href: 'https://www.espn.com/fantasy/football/',\n lineup: {\n proGameToNumPlayersStarting: {\n '401772770': 1,\n '401772771': 1,\n '401772944': 1,\n '401772630': 1,\n '401772773': 2,\n '401772875': 2,\n },\n },\n currentLineup: {\n '-16022': 16,\n '3050478': 17,\n '3116385': 2,\n '3915416': 4,\n '3916148': 20,\n '4241389': 4,\n '4361307': 6,\n '4361370': 20,\n '4428209': 20,\n '4429160': 2,\n '4431299': 20,\n '4431611': 0,\n '4567750': 20,\n '4568490': 23,\n '4569173': 20,\n '4882093': 20,\n },\n restrictionTypeName: 'GAUNTLET',\n },\n inSeason: true,\n isLive: false,\n currentScoringPeriodId: 10,\n },\n contentSourceId: 10,\n sortGlobal: 1398,\n isHidden: true,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '9:2118520298:1:2025',\n createDate: 1753457483090,\n lastUpdateDate: 1753459839424,\n metaData: {\n entry: {\n entryId: 9,\n entryMetadata: {\n teamName: \"Megan's Monstrous Team\",\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 3,\n leagueSubTypeId: 3,\n customizable: false,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 1,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'DRAFT_LOBBY',\n },\n firstScoringPeriodId: 1,\n gameId: 1,\n groups: [\n {\n groupId: 2118520298,\n groupSize: 10,\n groupName: 'Detroit Beginner H2H Points PPR League',\n groupManager: false,\n draftDate: 1753457880000,\n draftType: 1,\n draftStatus: 2,\n leagueStatus: 3,\n fantasyCastHref:\n 'https://fantasy.espn.com/football/fantasycast?leagueId=2118520298&teamId=9',\n href:\n 'https://fantasy.espn.com/football/league?leagueId=2118520298&seasonId=2025',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/ffl/images/default_logos/4.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'https://fantasy.espn.com/football/team?leagueId=2118520298&teamId=9&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2025/segments/0/leagues/2118520298?view=mScoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B9%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FFL',\n name: 'Fantasy Football 2025',\n description: 'Fantasy Football',\n logoURL:\n 'https://g.espncdn.com/s/ffllm/14/images/shell/bgHead_leaguemanager.png',\n signupURL: 'https://fantasy.espn.com/football/welcome',\n href: 'https://www.espn.com/fantasy/football/',\n lineup: {\n proGameToNumPlayersStarting: {\n '401772771': 1,\n '401772769': 1,\n '401772772': 1,\n '401772773': 1,\n '401772875': 1,\n '401772927': 1,\n '401772879': 2,\n '401772876': 1,\n },\n },\n currentLineup: {\n '-16016': 16,\n '16800': 4,\n '2977187': 23,\n '3052587': 0,\n '3123076': 6,\n '3925357': 20,\n '4360516': 20,\n '4360569': 20,\n '4362081': 17,\n '4362249': 20,\n '4429013': 20,\n '4429160': 2,\n '4429615': 20,\n '4430737': 2,\n '4569618': 20,\n '4595348': 4,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: true,\n isLive: false,\n currentScoringPeriodId: 10,\n },\n contentSourceId: 10,\n sortGlobal: 1402,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '1:1028491758:5:2025',\n createDate: 1747420135832,\n lastUpdateDate: 1757663182317,\n metaData: {\n entry: {\n entryId: 1,\n entryMetadata: {\n teamName: 'Megan Team 1',\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 2,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 5,\n groups: [\n {\n groupId: 1028491758,\n groupSize: 4,\n groupName: 'Multi Team Ownership',\n groupManager: true,\n draftDate: 1,\n draftType: 1,\n draftStatus: 2,\n leagueStatus: 5,\n fantasyCastHref:\n 'https://fantasy.espn.com/womens-basketball/fantasycast?leagueId=1028491758&teamId=1',\n href:\n 'https://fantasy.espn.com/womens-basketball/league?leagueId=1028491758&seasonId=2025',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/logo-packs/core/StarWarsTheRiseOfSkywalker/rise-skywalker-r2d2.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'https://fantasy.espn.com/womens-basketball/team?leagueId=1028491758&teamId=1&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/wfba/seasons/2025/segments/0/leagues/1028491758?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B1%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'WFBA',\n name: 'Fantasy Womens Basketball 2025',\n description: 'Fantasy Womens Basketball',\n logoURL: 'https://g.espncdn.com/s/fbalm/15/images/shell/bgHead.png',\n signupURL: 'https://fantasy.espn.com/womens-basketball/welcome',\n href: 'https://www.espn.com/fantasy/womens-basketball/',\n currentLineup: {\n '869': 4,\n '2529140': 4,\n '2529205': 6,\n '2998938': 1,\n '3058895': 6,\n '3058901': 5,\n '3146151': 6,\n '4432831': 4,\n '4433403': 1,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: false,\n isLive: false,\n currentScoringPeriodId: 120,\n },\n contentSourceId: 10,\n sortGlobal: 1383,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '4:1028491758:5:2025',\n createDate: 1747420173876,\n lastUpdateDate: 1757663182341,\n metaData: {\n entry: {\n entryId: 4,\n entryMetadata: {\n teamName: 'Megan Team 4',\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 2,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 5,\n groups: [\n {\n groupId: 1028491758,\n groupSize: 4,\n groupName: 'Multi Team Ownership',\n groupManager: true,\n draftDate: 1,\n draftType: 1,\n draftStatus: 2,\n leagueStatus: 5,\n fantasyCastHref:\n 'https://fantasy.espn.com/womens-basketball/fantasycast?leagueId=1028491758&teamId=4',\n href:\n 'https://fantasy.espn.com/womens-basketball/league?leagueId=1028491758&seasonId=2025',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/logo-packs/fba/Jerseys-ESPN/fba-jerseys-31.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'https://fantasy.espn.com/womens-basketball/team?leagueId=1028491758&teamId=4&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/wfba/seasons/2025/segments/0/leagues/1028491758?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B4%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'WFBA',\n name: 'Fantasy Womens Basketball 2025',\n description: 'Fantasy Womens Basketball',\n logoURL: 'https://g.espncdn.com/s/fbalm/15/images/shell/bgHead.png',\n signupURL: 'https://fantasy.espn.com/womens-basketball/welcome',\n href: 'https://www.espn.com/fantasy/womens-basketball/',\n currentLineup: {\n '2529130': 6,\n '2998928': 4,\n '3065570': 1,\n '3913881': 6,\n '4066533': 1,\n '4398674': 5,\n '4420318': 4,\n '4433402': 4,\n '4433630': 6,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: false,\n isLive: false,\n currentScoringPeriodId: 120,\n },\n contentSourceId: 10,\n sortGlobal: 1384,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '3:1028491758:5:2025',\n createDate: 1747420178168,\n lastUpdateDate: 1757663182333,\n metaData: {\n entry: {\n entryId: 3,\n entryMetadata: {\n teamName: 'Megan Team 3',\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 2,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 5,\n groups: [\n {\n groupId: 1028491758,\n groupSize: 4,\n groupName: 'Multi Team Ownership',\n groupManager: true,\n draftDate: 1,\n draftType: 1,\n draftStatus: 2,\n leagueStatus: 5,\n fantasyCastHref:\n 'https://fantasy.espn.com/womens-basketball/fantasycast?leagueId=1028491758&teamId=3',\n href:\n 'https://fantasy.espn.com/womens-basketball/league?leagueId=1028491758&seasonId=2025',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/logo-packs/core/DIS_Avengers_EndGame/DIS_Avengers_EndGame_Rocket.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'https://fantasy.espn.com/womens-basketball/team?leagueId=1028491758&teamId=3&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/wfba/seasons/2025/segments/0/leagues/1028491758?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B3%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'WFBA',\n name: 'Fantasy Womens Basketball 2025',\n description: 'Fantasy Womens Basketball',\n logoURL: 'https://g.espncdn.com/s/fbalm/15/images/shell/bgHead.png',\n signupURL: 'https://fantasy.espn.com/womens-basketball/welcome',\n href: 'https://www.espn.com/fantasy/womens-basketball/',\n currentLineup: {\n '1068': 4,\n '2529137': 6,\n '2987869': 1,\n '2987891': 6,\n '3904577': 1,\n '3913903': 6,\n '3917450': 4,\n '4281929': 4,\n '4433730': 5,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: false,\n isLive: false,\n currentScoringPeriodId: 120,\n },\n contentSourceId: 10,\n sortGlobal: 1385,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '2:1028491758:5:2025',\n createDate: 1747420181784,\n lastUpdateDate: 1757663182325,\n metaData: {\n entry: {\n entryId: 2,\n entryMetadata: {\n teamName: 'Megan Team 2',\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 2,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 5,\n groups: [\n {\n groupId: 1028491758,\n groupSize: 4,\n groupName: 'Multi Team Ownership',\n groupManager: true,\n draftDate: 1,\n draftType: 1,\n draftStatus: 2,\n leagueStatus: 5,\n fantasyCastHref:\n 'https://fantasy.espn.com/womens-basketball/fantasycast?leagueId=1028491758&teamId=2',\n href:\n 'https://fantasy.espn.com/womens-basketball/league?leagueId=1028491758&seasonId=2025',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/logo-packs/core/StarsAndFlames/stars_flames-4.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'https://fantasy.espn.com/womens-basketball/team?leagueId=1028491758&teamId=2&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/wfba/seasons/2025/segments/0/leagues/1028491758?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B2%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'WFBA',\n name: 'Fantasy Womens Basketball 2025',\n description: 'Fantasy Womens Basketball',\n logoURL: 'https://g.espncdn.com/s/fbalm/15/images/shell/bgHead.png',\n signupURL: 'https://fantasy.espn.com/womens-basketball/welcome',\n href: 'https://www.espn.com/fantasy/womens-basketball/',\n currentLineup: {\n '2490553': 6,\n '2491205': 1,\n '2566106': 4,\n '2988756': 6,\n '2999101': 4,\n '3142191': 5,\n '3149391': 4,\n '3904576': 6,\n '4065870': 1,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: false,\n isLive: false,\n currentScoringPeriodId: 120,\n },\n contentSourceId: 10,\n sortGlobal: 1386,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: 'c71ef020-3681-11f0-9846-8ffc028f9549',\n createDate: 1762778889707,\n metaData: {\n entry: {\n entryUuid: 'c71ef020-3681-11f0-9846-8ffc028f9549',\n lastAvailableDate: 1768193940000,\n challengeId: '264',\n logoURLs: {\n logoSecondary: '',\n logoPrimary:\n 'https://chui-assets-cdn.espn.com/4ae2d3e1-ce2d-4ff0-b3f2-57e966c3e9c8.png',\n darkLogoURL:\n 'https://chui-assets-cdn.espn.com/4ae2d3e1-ce2d-4ff0-b3f2-57e966c3e9c8.png',\n lightLogoURL:\n 'https://chui-assets-cdn.espn.com/4beecd18-7bb5-441b-913c-a1ac5f12b893.png',\n },\n gameUrl:\n 'https://fantasy.espn.com/games/nfl-eliminator-challenge-2025',\n entryName: \"Megan_Janssen2's Picks 3\",\n challengeGroups: [\n {\n groupSettings: {\n name: 'Disney Only',\n },\n },\n {\n groupSettings: {\n name: 'FIRE Core Team',\n },\n },\n ],\n score: {\n eliminated: true,\n overallScore: 3,\n percentile: 0.63478545,\n rank: 399442,\n record: {\n losses: 1,\n wins: 3,\n },\n },\n scoreByGroup: {\n '4ff5631f-66c8-42a5-8ad9-1c3fc2eadd53': {\n eliminated: true,\n overallScore: 3,\n percentile: 0.63478545,\n rank: 2,\n record: {\n losses: 1,\n wins: 3,\n },\n },\n '7d4a3167-0f7f-3aa5-a193-10f5a79f89e0': {\n eliminated: true,\n overallScore: 3,\n percentile: 0.63478545,\n rank: 19,\n record: {\n losses: 1,\n wins: 3,\n },\n },\n },\n scoringFormatId: 4,\n },\n },\n sortGlobal: 1387,\n isImplicit: false,\n isHidden: false,\n typeId: 14,\n affinity: 0,\n type: {\n id: 14,\n name: 'Challenge Entry',\n code: 'challengeEntry',\n isDeletable: true,\n isDelegated: true,\n maxAllowed: 200,\n },\n },\n {\n id: 'c349a530-3681-11f0-bebc-3118dc9a49b7',\n createDate: 1762778889707,\n metaData: {\n entry: {\n entryUuid: 'c349a530-3681-11f0-bebc-3118dc9a49b7',\n lastAvailableDate: 1768193940000,\n challengeId: '264',\n logoURLs: {\n logoSecondary: '',\n logoPrimary:\n 'https://chui-assets-cdn.espn.com/4ae2d3e1-ce2d-4ff0-b3f2-57e966c3e9c8.png',\n darkLogoURL:\n 'https://chui-assets-cdn.espn.com/4ae2d3e1-ce2d-4ff0-b3f2-57e966c3e9c8.png',\n lightLogoURL:\n 'https://chui-assets-cdn.espn.com/4beecd18-7bb5-441b-913c-a1ac5f12b893.png',\n },\n gameUrl:\n 'https://fantasy.espn.com/games/nfl-eliminator-challenge-2025',\n entryName: \"Megan_Janssen2's Picks 2\",\n challengeGroups: '',\n score: {\n eliminated: true,\n overallScore: 0,\n percentile: 0.0,\n rank: 897095,\n record: {\n losses: 1,\n wins: 0,\n },\n },\n scoreByGroup: '',\n scoringFormatId: 4,\n },\n },\n sortGlobal: 1387,\n isImplicit: false,\n isHidden: false,\n typeId: 14,\n affinity: 0,\n type: {\n id: 14,\n name: 'Challenge Entry',\n code: 'challengeEntry',\n isDeletable: true,\n isDelegated: true,\n maxAllowed: 200,\n },\n },\n {\n id: '90930280-3681-11f0-b2f3-0fd5099dfb7c',\n createDate: 1762778889707,\n metaData: {\n entry: {\n entryUuid: '90930280-3681-11f0-b2f3-0fd5099dfb7c',\n lastAvailableDate: 1768193940000,\n challengeId: '265',\n logoURLs: {\n logoSecondary: '',\n logoPrimary:\n 'https://chui-assets-cdn.espn.com/08166f17-1808-4634-b21a-66629878274c.png',\n darkLogoURL:\n 'https://chui-assets-cdn.espn.com/08166f17-1808-4634-b21a-66629878274c.png',\n lightLogoURL:\n 'https://chui-assets-cdn.espn.com/213d8b5f-6117-480c-b160-4a3993a3c88e.png',\n },\n gameUrl: 'https://fantasy.espn.com/games/nfl-pigskin-pickem-2025',\n entryName: 'MegaLed Confidence',\n challengeGroups: [\n {\n groupSettings: {\n name: 'TMG - Season 6',\n },\n },\n {\n groupSettings: {\n name: 'Disney Only (Confidence)',\n },\n },\n {\n groupSettings: {\n name: 'Card Club - Pigskin',\n },\n },\n ],\n score: {\n eliminated: false,\n overallScore: 783,\n percentile: 0.75568775,\n rank: 27846,\n record: {\n losses: 56,\n wins: 90,\n },\n },\n scoreByGroup: {\n '05b8d8ef-7176-3845-bade-4f8c2479afe7': {\n eliminated: false,\n overallScore: 748,\n percentile: 0.75568775,\n rank: 12,\n record: {\n losses: 48,\n wins: 84,\n },\n },\n '836c455b-5a75-3531-929f-fdcd7f714c9c': {\n eliminated: false,\n overallScore: 748,\n percentile: 0.75568775,\n rank: 8,\n record: {\n losses: 48,\n wins: 84,\n },\n },\n '54a6fab7-58b3-3495-91a4-3c11bb601a1c': {\n eliminated: false,\n overallScore: 783,\n percentile: 0.75568775,\n rank: 78,\n record: {\n losses: 56,\n wins: 90,\n },\n },\n },\n scoringFormatId: 2,\n },\n },\n sortGlobal: 1387,\n isImplicit: false,\n isHidden: false,\n typeId: 14,\n affinity: 0,\n type: {\n id: 14,\n name: 'Challenge Entry',\n code: 'challengeEntry',\n isDeletable: true,\n isDelegated: true,\n maxAllowed: 200,\n },\n },\n {\n id: 'a33424f0-3681-11f0-b2f3-0fd5099dfb7c',\n createDate: 1762778889707,\n metaData: {\n entry: {\n entryUuid: 'a33424f0-3681-11f0-b2f3-0fd5099dfb7c',\n lastAvailableDate: 1768193940000,\n challengeId: '265',\n logoURLs: {\n logoSecondary: '',\n logoPrimary:\n 'https://chui-assets-cdn.espn.com/08166f17-1808-4634-b21a-66629878274c.png',\n darkLogoURL:\n 'https://chui-assets-cdn.espn.com/08166f17-1808-4634-b21a-66629878274c.png',\n lightLogoURL:\n 'https://chui-assets-cdn.espn.com/213d8b5f-6117-480c-b160-4a3993a3c88e.png',\n },\n gameUrl: 'https://fantasy.espn.com/games/nfl-pigskin-pickem-2025',\n entryName: 'MegaLed Spread',\n challengeGroups: [\n {\n groupSettings: {\n name: 'Disney Only (Spread)',\n },\n },\n ],\n score: {\n eliminated: false,\n overallScore: 670,\n percentile: 0.64634846,\n rank: 81970,\n record: {\n losses: 71,\n wins: 67,\n },\n },\n scoreByGroup: {\n 'f33eee68-29ff-3c16-bd20-31b9952753dd': {\n eliminated: false,\n overallScore: 670,\n percentile: 0.64634846,\n rank: 118,\n record: {\n losses: 71,\n wins: 67,\n },\n },\n },\n scoringFormatId: 3,\n },\n },\n sortGlobal: 1387,\n isImplicit: false,\n isHidden: false,\n typeId: 14,\n affinity: 0,\n type: {\n id: 14,\n name: 'Challenge Entry',\n code: 'challengeEntry',\n isDeletable: true,\n isDelegated: true,\n maxAllowed: 200,\n },\n },\n {\n id: 'bdae4040-3681-11f0-9b45-3fc452c57dcd',\n createDate: 1762778889707,\n metaData: {\n entry: {\n entryUuid: 'bdae4040-3681-11f0-9b45-3fc452c57dcd',\n lastAvailableDate: 1768193940000,\n challengeId: '264',\n logoURLs: {\n logoSecondary: '',\n logoPrimary:\n 'https://chui-assets-cdn.espn.com/4ae2d3e1-ce2d-4ff0-b3f2-57e966c3e9c8.png',\n darkLogoURL:\n 'https://chui-assets-cdn.espn.com/4ae2d3e1-ce2d-4ff0-b3f2-57e966c3e9c8.png',\n lightLogoURL:\n 'https://chui-assets-cdn.espn.com/4beecd18-7bb5-441b-913c-a1ac5f12b893.png',\n },\n gameUrl:\n 'https://fantasy.espn.com/games/nfl-eliminator-challenge-2025',\n entryName: \"Megan_Janssen2's Picks 1\",\n challengeGroups: [\n {\n groupSettings: {\n name: 'Locks Only Survivor Pool- SZN 4',\n },\n },\n ],\n score: {\n eliminated: true,\n overallScore: 2,\n percentile: 0.50711336,\n rank: 539079,\n record: {\n losses: 1,\n wins: 2,\n },\n },\n scoreByGroup: {\n 'a00db401-c3ce-4729-8c0c-38c6aabae4a7': {\n eliminated: true,\n overallScore: 2,\n percentile: 0.50711336,\n rank: 15,\n record: {\n losses: 1,\n wins: 2,\n },\n },\n },\n scoringFormatId: 4,\n },\n },\n sortGlobal: 1387,\n isImplicit: false,\n isHidden: false,\n typeId: 14,\n affinity: 0,\n type: {\n id: 14,\n name: 'Challenge Entry',\n code: 'challengeEntry',\n isDeletable: true,\n isDelegated: true,\n maxAllowed: 200,\n },\n },\n {\n id: '36343e50-365c-11f0-a8c2-3b962bf01277',\n createDate: 1762778889707,\n metaData: {\n entry: {\n entryUuid: '36343e50-365c-11f0-a8c2-3b962bf01277',\n lastAvailableDate: 1768193940000,\n challengeId: '265',\n logoURLs: {\n logoSecondary: '',\n logoPrimary:\n 'https://chui-assets-cdn.espn.com/08166f17-1808-4634-b21a-66629878274c.png',\n darkLogoURL:\n 'https://chui-assets-cdn.espn.com/08166f17-1808-4634-b21a-66629878274c.png',\n lightLogoURL:\n 'https://chui-assets-cdn.espn.com/213d8b5f-6117-480c-b160-4a3993a3c88e.png',\n },\n gameUrl: 'https://fantasy.espn.com/games/nfl-pigskin-pickem-2025',\n entryName: 'MegaLed Straight Up',\n challengeGroups: [\n {\n groupSettings: {\n name: 'Disney Only (Standard)',\n },\n },\n {\n groupSettings: {\n name: 'DEE Product and Technology Group',\n },\n },\n {\n groupSettings: {\n name: 'ESPN Fantasy Group',\n },\n },\n {\n groupSettings: {\n name: 'Product & Tech Group',\n },\n },\n ],\n score: {\n eliminated: false,\n overallScore: 810,\n percentile: 0.67573397,\n rank: 452404,\n record: {\n losses: 56,\n wins: 81,\n },\n },\n scoreByGroup: {\n 'd0731075-2901-4564-8aa8-02dd38c9c26b': {\n eliminated: false,\n overallScore: 810,\n percentile: 0.67573397,\n rank: 8,\n record: {\n losses: 56,\n wins: 81,\n },\n },\n '7bf7b02f-b9b1-40b6-8270-9d4a3b0ff222': {\n eliminated: false,\n overallScore: 810,\n percentile: 0.67573397,\n rank: 207,\n record: {\n losses: 56,\n wins: 81,\n },\n },\n 'dad5e750-a47f-4527-90cb-1aca05a2bbe3': {\n eliminated: false,\n overallScore: 810,\n percentile: 0.67573397,\n rank: 3,\n record: {\n losses: 56,\n wins: 81,\n },\n },\n '96f8471c-d4e7-3ca8-b86e-2b012f127f39': {\n eliminated: false,\n overallScore: 810,\n percentile: 0.67573397,\n rank: 379,\n record: {\n losses: 56,\n wins: 81,\n },\n },\n },\n scoringFormatId: 1,\n },\n },\n sortGlobal: 1387,\n isImplicit: false,\n isHidden: false,\n typeId: 14,\n affinity: 0,\n type: {\n id: 14,\n name: 'Challenge Entry',\n code: 'challengeEntry',\n isDeletable: true,\n isDelegated: true,\n maxAllowed: 200,\n },\n },\n {\n id: '7:735183173:3:2026',\n createDate: 1749773645351,\n lastUpdateDate: 1749828448313,\n metaData: {\n entry: {\n entryId: 7,\n entryMetadata: {\n teamName: \"Megan's Magnificent Team\",\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 2,\n leagueSubTypeId: 3,\n customizable: false,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 1,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'DRAFT_LOBBY',\n },\n firstScoringPeriodId: 1,\n gameId: 3,\n groups: [\n {\n groupId: 735183173,\n groupSize: 10,\n groupName: 'Philadelphia Pro H2H Points League',\n groupManager: false,\n draftDate: 1749827580000,\n draftType: 1,\n draftStatus: 2,\n leagueStatus: 3,\n fantasyCastHref:\n 'https://fantasy.espn.com/basketball/fantasycast?leagueId=735183173&teamId=7',\n href:\n 'https://fantasy.espn.com/basketball/league?leagueId=735183173&seasonId=2026',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/fba/images/default_logos/14.svg',\n restrictionType: 0,\n seasonId: 2026,\n entryURL:\n 'https://fantasy.espn.com/basketball/team?leagueId=735183173&teamId=7&seasonId=2026',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/fba/seasons/2026/segments/0/leagues/735183173?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B7%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FBA',\n name: 'Fantasy Basketball 2026',\n description: 'Fantasy Basketball',\n logoURL: 'https://g.espncdn.com/s/fbalm/15/images/shell/bgHead.png',\n signupURL: 'https://fantasy.espn.com/basketball/welcome',\n href: 'https://www.espn.com/fantasy/basketball/',\n lineup: {\n proGameToNumPlayersStarting: {\n '401810053': 2,\n '401810058': 1,\n '401810057': 1,\n '401810061': 1,\n },\n },\n currentLineup: {\n '3202': 3,\n '3448': 12,\n '4251': 11,\n '6583': 4,\n '3136195': 11,\n '3908845': 6,\n '3934719': 12,\n '4279888': 0,\n '4395630': 1,\n '4432816': 5,\n '4433247': 12,\n '4433255': 11,\n '4433287': 2,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: true,\n isLive: false,\n currentScoringPeriodId: 21,\n },\n contentSourceId: 10,\n sortGlobal: 1390,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '2:424310183:3:2026',\n createDate: 1749773698015,\n lastUpdateDate: 1749829617368,\n metaData: {\n entry: {\n entryId: 2,\n entryMetadata: {\n teamName: \"Megan's Magnificent Team\",\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 2,\n leagueSubTypeId: 3,\n customizable: false,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 1,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'DRAFT_LOBBY',\n },\n firstScoringPeriodId: 1,\n gameId: 3,\n groups: [\n {\n groupId: 424310183,\n groupSize: 10,\n groupName: 'Memphis Pro H2H Points League',\n groupManager: false,\n draftDate: 1749828480000,\n draftType: 1,\n draftStatus: 2,\n leagueStatus: 3,\n fantasyCastHref:\n 'https://fantasy.espn.com/basketball/fantasycast?leagueId=424310183&teamId=2',\n href:\n 'https://fantasy.espn.com/basketball/league?leagueId=424310183&seasonId=2026',\n draftTypeName: 'Snake',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/fba/images/default_logos/1.svg',\n restrictionType: 0,\n seasonId: 2026,\n entryURL:\n 'https://fantasy.espn.com/basketball/team?leagueId=424310183&teamId=2&seasonId=2026',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/fba/seasons/2026/segments/0/leagues/424310183?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B2%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FBA',\n name: 'Fantasy Basketball 2026',\n description: 'Fantasy Basketball',\n logoURL: 'https://g.espncdn.com/s/fbalm/15/images/shell/bgHead.png',\n signupURL: 'https://fantasy.espn.com/basketball/welcome',\n href: 'https://www.espn.com/fantasy/basketball/',\n lineup: {\n proGameToNumPlayersStarting: {\n '401810055': 1,\n '401810054': 1,\n '401810053': 1,\n '401810059': 2,\n '401810058': 2,\n },\n },\n currentLineup: {\n '3468': 0,\n '6580': 12,\n '6583': 4,\n '3032977': 3,\n '3062679': 2,\n '3134908': 11,\n '3907497': 5,\n '3907822': 12,\n '4066383': 11,\n '4277956': 1,\n '4433621': 11,\n '4566434': 6,\n '4594327': 12,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: true,\n isLive: false,\n currentScoringPeriodId: 21,\n },\n contentSourceId: 10,\n sortGlobal: 1391,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '1:1315471242:2:2025',\n createDate: 1753897316090,\n lastUpdateDate: 1759136303110,\n metaData: {\n entry: {\n entryId: 1,\n entryMetadata: {\n teamName: \"Megan's Magnificent Team\",\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 2,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 2,\n groups: [\n {\n groupId: 1315471242,\n groupSize: 10,\n groupName: 'Maestro H2H Points',\n groupManager: true,\n draftDate: 1,\n draftType: 0,\n draftStatus: 2,\n leagueStatus: 5,\n fantasyCastHref:\n 'http://fantasy.espn.com/baseball/fantasycast?leagueId=1315471242&teamId=1',\n href:\n 'http://fantasy.espn.com/baseball/league?leagueId=1315471242&seasonId=2025',\n draftTypeName: 'Offline Draft',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/flb/images/default_logos/8.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'http://fantasy.espn.com/baseball/team?leagueId=1315471242&teamId=1&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/flb/seasons/2025/segments/0/leagues/1315471242?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B1%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FLB',\n name: 'Fantasy Baseball 2025',\n description: 'Fantasy Baseball',\n logoURL: 'https://g.espncdn.com/s/frontpage09/images/flb09_index.png',\n signupURL: 'http://fantasy.espn.com/baseball/welcome',\n href: 'https://www.espn.com/fantasy/baseball/',\n currentLineup: {\n '29155': 13,\n '30193': 1,\n '32129': 4,\n '32685': 13,\n '33148': 13,\n '33783': 2,\n '33837': 13,\n '33859': 3,\n '33950': 13,\n '35983': 5,\n '36581': 13,\n '39825': 16,\n '41405': 13,\n '42179': 5,\n '42598': 0,\n '4433874': 16,\n '4719337': 5,\n '4917694': 12,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: false,\n isLive: false,\n currentScoringPeriodId: 196,\n },\n contentSourceId: 10,\n sortGlobal: 1403,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '1:1689844356:2:2025',\n createDate: 1753897335814,\n lastUpdateDate: 1759136303136,\n metaData: {\n entry: {\n entryId: 1,\n entryMetadata: {\n teamName: \"Megan's Magnificent Team\",\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 1,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 0,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'ROTO',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 2,\n groups: [\n {\n groupId: 1689844356,\n groupSize: 10,\n groupName: 'Maestro Roto',\n groupManager: true,\n draftDate: 1,\n draftType: 0,\n draftStatus: 2,\n leagueStatus: 5,\n fantasyCastHref:\n 'http://fantasy.espn.com/baseball/fantasycast?leagueId=1689844356&teamId=1',\n href:\n 'http://fantasy.espn.com/baseball/league?leagueId=1689844356&seasonId=2025',\n draftTypeName: 'Offline Draft',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/flb/images/default_logos/8.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'http://fantasy.espn.com/baseball/team?leagueId=1689844356&teamId=1&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/flb/seasons/2025/segments/0/leagues/1689844356?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B1%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FLB',\n name: 'Fantasy Baseball 2025',\n description: 'Fantasy Baseball',\n logoURL: 'https://g.espncdn.com/s/frontpage09/images/flb09_index.png',\n signupURL: 'http://fantasy.espn.com/baseball/welcome',\n href: 'https://www.espn.com/fantasy/baseball/',\n currentLineup: {\n '30193': 1,\n '32129': 4,\n '32685': 13,\n '32796': 13,\n '33192': 5,\n '33837': 13,\n '33859': 3,\n '35002': 12,\n '36581': 13,\n '38309': 0,\n '39825': 13,\n '39832': 16,\n '40939': 13,\n '41610': 5,\n '41773': 2,\n '42403': 16,\n '42404': 5,\n '4109109': 16,\n '4719507': 13,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: false,\n isLive: false,\n currentScoringPeriodId: 196,\n },\n contentSourceId: 10,\n sortGlobal: 1404,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '1:531018984:2:2025',\n createDate: 1753897355273,\n lastUpdateDate: 1759136303102,\n metaData: {\n entry: {\n entryId: 1,\n entryMetadata: {\n teamName: \"Megan's Magnificent Team\",\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 3,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 2,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_CATEGORY',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 2,\n groups: [\n {\n groupId: 531018984,\n groupSize: 10,\n groupName: 'Maestro H2H Each Category',\n groupManager: true,\n draftDate: 1,\n draftType: 0,\n draftStatus: 2,\n leagueStatus: 5,\n fantasyCastHref:\n 'http://fantasy.espn.com/baseball/fantasycast?leagueId=531018984&teamId=1',\n href:\n 'http://fantasy.espn.com/baseball/league?leagueId=531018984&seasonId=2025',\n draftTypeName: 'Offline Draft',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/flb/images/default_logos/8.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'http://fantasy.espn.com/baseball/team?leagueId=531018984&teamId=1&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/flb/seasons/2025/segments/0/leagues/531018984?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B1%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FLB',\n name: 'Fantasy Baseball 2025',\n description: 'Fantasy Baseball',\n logoURL: 'https://g.espncdn.com/s/frontpage09/images/flb09_index.png',\n signupURL: 'http://fantasy.espn.com/baseball/welcome',\n href: 'https://www.espn.com/fantasy/baseball/',\n currentLineup: {\n '30193': 1,\n '30951': 16,\n '31127': 16,\n '32129': 4,\n '32685': 13,\n '32796': 13,\n '33837': 13,\n '33859': 3,\n '35394': 13,\n '35983': 5,\n '36581': 13,\n '36969': 5,\n '39825': 13,\n '39895': 16,\n '41610': 5,\n '41773': 2,\n '4717803': 13,\n '4917694': 12,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: false,\n isLive: false,\n currentScoringPeriodId: 196,\n },\n contentSourceId: 10,\n sortGlobal: 1405,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '1:1229401832:2:2025',\n createDate: 1753897386460,\n lastUpdateDate: 1759136303122,\n metaData: {\n entry: {\n entryId: 1,\n entryMetadata: {\n teamName: \"Megan's Magnificent Team\",\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 4,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 3,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_MOST_CATEGORIES',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 2,\n groups: [\n {\n groupId: 1229401832,\n groupSize: 10,\n groupName: 'Maestro H2H Most Categories',\n groupManager: true,\n draftDate: null,\n draftType: 0,\n draftStatus: 2,\n leagueStatus: 5,\n fantasyCastHref:\n 'http://fantasy.espn.com/baseball/fantasycast?leagueId=1229401832&teamId=1',\n href:\n 'http://fantasy.espn.com/baseball/league?leagueId=1229401832&seasonId=2025',\n draftTypeName: 'Offline Draft',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/flb/images/default_logos/8.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'http://fantasy.espn.com/baseball/team?leagueId=1229401832&teamId=1&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/flb/seasons/2025/segments/0/leagues/1229401832?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B1%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FLB',\n name: 'Fantasy Baseball 2025',\n description: 'Fantasy Baseball',\n logoURL: 'https://g.espncdn.com/s/frontpage09/images/flb09_index.png',\n signupURL: 'http://fantasy.espn.com/baseball/welcome',\n href: 'https://www.espn.com/fantasy/baseball/',\n currentLineup: {\n '30193': 1,\n '30951': 16,\n '31662': 2,\n '32129': 4,\n '32685': 13,\n '33837': 13,\n '33859': 3,\n '35983': 5,\n '36020': 5,\n '36581': 13,\n '39825': 13,\n '39832': 13,\n '39895': 0,\n '40939': 13,\n '4148749': 16,\n '4297835': 16,\n '4719337': 5,\n '4719507': 13,\n '4917694': 12,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: false,\n isLive: false,\n currentScoringPeriodId: 196,\n },\n contentSourceId: 10,\n sortGlobal: 1406,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '1:420732386:2:2025',\n createDate: 1753897407707,\n lastUpdateDate: 1759136303134,\n metaData: {\n entry: {\n entryId: 1,\n entryMetadata: {\n teamName: \"Megan's Magnificent Team\",\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 5,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 4,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'TOTAL_SEASON_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 2,\n groups: [\n {\n groupId: 420732386,\n groupSize: 10,\n groupName: 'Maestro Season Points',\n groupManager: true,\n draftDate: 1,\n draftType: 0,\n draftStatus: 2,\n leagueStatus: 5,\n fantasyCastHref:\n 'http://fantasy.espn.com/baseball/fantasycast?leagueId=420732386&teamId=1',\n href:\n 'http://fantasy.espn.com/baseball/league?leagueId=420732386&seasonId=2025',\n draftTypeName: 'Offline Draft',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/flb/images/default_logos/8.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'http://fantasy.espn.com/baseball/team?leagueId=420732386&teamId=1&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/flb/seasons/2025/segments/0/leagues/420732386?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B1%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FLB',\n name: 'Fantasy Baseball 2025',\n description: 'Fantasy Baseball',\n logoURL: 'https://g.espncdn.com/s/frontpage09/images/flb09_index.png',\n signupURL: 'http://fantasy.espn.com/baseball/welcome',\n href: 'https://www.espn.com/fantasy/baseball/',\n currentLineup: {\n '30193': 1,\n '31097': 3,\n '31267': 13,\n '32129': 4,\n '32512': 2,\n '32685': 13,\n '32796': 13,\n '33192': 5,\n '33837': 13,\n '36020': 5,\n '36581': 13,\n '38309': 0,\n '39825': 13,\n '39832': 13,\n '40939': 16,\n '42404': 5,\n '4719507': 16,\n '4917694': 12,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: false,\n isLive: false,\n currentScoringPeriodId: 196,\n },\n contentSourceId: 10,\n sortGlobal: 1407,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '1:2046593148:2:2025',\n createDate: 1755632123412,\n lastUpdateDate: 1755831600704,\n metaData: {\n entry: {\n entryId: 1,\n entryMetadata: {\n teamName: \"Megan's Magnificent Team\",\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 2,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: false,\n scoringTypeId: 1,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'H2H_POINTS',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 2,\n groups: [\n {\n groupId: 2046593148,\n groupSize: 4,\n groupName: 'Undrafted; Scheduled',\n groupManager: true,\n draftDate: null,\n draftType: 4,\n draftStatus: 1,\n leagueStatus: 1,\n fantasyCastHref:\n 'http://fantasy.espn.com/baseball/fantasycast?leagueId=2046593148&teamId=1',\n href:\n 'http://fantasy.espn.com/baseball/league?leagueId=2046593148&seasonId=2025',\n draftTypeName: 'Salary Cap',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/logo-packs/core/StadiumFoods-ESPN/stadium-foods_soft-pretzel.svg',\n restrictionType: 0,\n seasonId: 2025,\n entryURL:\n 'http://fantasy.espn.com/baseball/team?leagueId=2046593148&teamId=1&seasonId=2025',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/flb/seasons/2025/segments/0/leagues/2046593148?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B1%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FLB',\n name: 'Fantasy Baseball 2025',\n description: 'Fantasy Baseball',\n logoURL: 'https://g.espncdn.com/s/frontpage09/images/flb09_index.png',\n signupURL: 'http://fantasy.espn.com/baseball/welcome',\n href: 'https://www.espn.com/fantasy/baseball/',\n restrictionTypeName: 'NONE',\n },\n inSeason: false,\n isLive: false,\n currentScoringPeriodId: 196,\n },\n contentSourceId: 10,\n sortGlobal: 1410,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n {\n id: '2:283659657:4:2026',\n createDate: 1759161335134,\n lastUpdateDate: 1759415709010,\n metaData: {\n entry: {\n entryId: 2,\n entryMetadata: {\n teamName: \"Megan's Magnificent Team\",\n teamAbbrev: 'MMT',\n leagueFormatTypeId: 1,\n leagueSubTypeId: 0,\n customizable: true,\n active: true,\n draftComplete: true,\n scoringTypeId: 0,\n leagueTypeId: 0,\n draftInProgress: false,\n scoringTypeName: 'ROTO',\n leagueSubTypeName: 'NONE',\n },\n firstScoringPeriodId: 1,\n gameId: 4,\n groups: [\n {\n groupId: 283659657,\n groupSize: 6,\n groupName: 'Roto Test League',\n groupManager: false,\n draftDate: 1,\n draftType: 2,\n draftStatus: 2,\n leagueStatus: 3,\n fantasyCastHref:\n 'https://fantasy.espn.com/hockey/fantasycast?leagueId=283659657&teamId=2',\n href:\n 'https://fantasy.espn.com/hockey/league?leagueId=283659657&seasonId=2026',\n draftTypeName: 'Autopick',\n },\n ],\n logoType: 'VECTOR',\n logoUrl:\n 'https://g.espncdn.com/lm-static/fhl/images/default_logos/6.svg',\n restrictionType: 0,\n seasonId: 2026,\n entryURL:\n 'https://fantasy.espn.com/hockey/team?leagueId=283659657&teamId=2&seasonId=2026',\n scoreboardFeedURL:\n 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/fhl/seasons/2026/segments/0/leagues/283659657?view=scoreboard&filter=%7B%22schedule%22%3A%7B%22filterTeamIds%22%3A%7B%22value%22%3A%5B2%5D%7D%2C%22filterCurrentMatchupPeriod%22%3A%7B%22value%22%3Atrue%7D%7D%7D&peek=true',\n abbrev: 'FHL',\n name: 'Fantasy Hockey 2026',\n description: 'Fantasy Hockey',\n logoURL:\n 'https://g.espncdn.com/s/fhllm/14/images/shell/bgHead_leaguemanager.png',\n signupURL: 'https://fantasy.espn.com/hockey/welcome',\n href: 'https://www.espn.com/fantasy/hockey/',\n lineup: {\n proGameToNumPlayersStarting: {\n '401802606': 1,\n '401802605': 1,\n '401802604': 2,\n },\n },\n currentLineup: {\n '3101': 3,\n '5037': 3,\n '5349': 3,\n '2590852': 3,\n '2967072': 7,\n '3020225': 5,\n '3069341': 4,\n '3527554': 7,\n '3899937': 3,\n '3899972': 4,\n '3904177': 7,\n '3988803': 4,\n '4196914': 5,\n '4233594': 3,\n '4233875': 3,\n '4697386': 4,\n '4697397': 3,\n '4697449': 4,\n '4874740': 7,\n '5080145': 7,\n '5149170': 6,\n '5206628': 3,\n },\n restrictionTypeName: 'NONE',\n },\n inSeason: true,\n isLive: false,\n currentScoringPeriodId: 35,\n },\n contentSourceId: 10,\n sortGlobal: 1411,\n isHidden: false,\n typeId: 9,\n type: {\n id: 9,\n name: 'Fantasy League Manager',\n code: 'fantasy',\n isDeletable: false,\n isDelegated: false,\n maxAllowed: 500,\n },\n bu: 0,\n },\n ],\n fantasyData: {\n totalFantasyLeagues: 23,\n leaguesBySportLeague: {\n NFL: 8,\n MLB: 8,\n NBA: 2,\n NHL: 1,\n WNBA: 4,\n },\n totalChallengeEntries: 7,\n challengeInformation: [\n {\n id: 263,\n gameType: 'PICKEM',\n challengeName: 'Pigskin Win Totals',\n challengeAbbrev: 'Pigskin Win Totals',\n scoringFormatIds: [1],\n state: 'LIVE',\n logoUrls: {\n logo:\n 'https://chui-assets-cdn.espn.com/149a15a7-10e7-421a-ae38-d7ff4df3f8de.png',\n logoDark:\n 'https://chui-assets-cdn.espn.com/1ab5b81f-0114-4ef0-aced-a096cfa487b1.png',\n logo1x1:\n 'https://chui-assets-cdn.espn.com/10dfa661-6adc-41c2-b391-9ae64baf1b50.png',\n logo1x1Dark:\n 'https://chui-assets-cdn.espn.com/10dfa661-6adc-41c2-b391-9ae64baf1b50.png',\n },\n mappings: [\n {\n type: 'SPORT',\n value: 'football',\n },\n {\n type: 'LEAGUE',\n value: 'nfl',\n },\n ],\n userEntryCount: 1,\n },\n {\n id: 264,\n gameType: 'CONTESTANT_POOL',\n challengeName: 'Eliminator Challenge 2025',\n challengeAbbrev: 'Eliminator Challenge',\n scoringFormatIds: [4],\n state: 'LIVE',\n logoUrls: {\n logo:\n 'https://chui-assets-cdn.espn.com/4ae2d3e1-ce2d-4ff0-b3f2-57e966c3e9c8.png',\n logoDark:\n 'https://chui-assets-cdn.espn.com/4beecd18-7bb5-441b-913c-a1ac5f12b893.png',\n logo1x1:\n 'https://chui-assets-cdn.espn.com/28fdbb06-fff0-45f4-a1fe-d09c1393302a.png',\n logo1x1Dark:\n 'https://chui-assets-cdn.espn.com/28fdbb06-fff0-45f4-a1fe-d09c1393302a.png',\n },\n mappings: [\n {\n type: 'SPORT',\n value: 'football',\n },\n {\n type: 'LEAGUE',\n value: 'nfl',\n },\n ],\n userEntryCount: 3,\n },\n {\n id: 265,\n gameType: 'PICKEM',\n challengeName: \"Pigskin Pick'em 2025\",\n challengeAbbrev: \"Pigskin Pick'em\",\n scoringFormatIds: [1, 3, 2],\n state: 'LIVE',\n logoUrls: {\n logo:\n 'https://chui-assets-cdn.espn.com/08166f17-1808-4634-b21a-66629878274c.png',\n logoDark:\n 'https://chui-assets-cdn.espn.com/213d8b5f-6117-480c-b160-4a3993a3c88e.png',\n logo1x1:\n 'https://chui-assets-cdn.espn.com/e06aca34-f148-4f1e-87e0-4c1d7492cc42.png',\n logo1x1Dark:\n 'https://chui-assets-cdn.espn.com/e06aca34-f148-4f1e-87e0-4c1d7492cc42.png',\n },\n mappings: [\n {\n type: 'SPORT',\n value: 'football',\n },\n {\n type: 'LEAGUE',\n value: 'nfl',\n },\n ],\n userEntryCount: 3,\n },\n {\n id: 266,\n gameType: 'PICKEM',\n challengeName: \"College Pick'em 2025\",\n challengeAbbrev: \"College Pick'em\",\n scoringFormatIds: [1, 3, 2],\n state: 'LIVE',\n logoUrls: {\n logo:\n 'https://chui-assets-cdn.espn.com/056a9567-dae4-4185-b4d6-a723df87f988.png',\n logoDark:\n 'https://chui-assets-cdn.espn.com/780faa3b-eda2-4b06-a276-b218c586901c.png',\n logo1x1:\n 'https://chui-assets-cdn.espn.com/c7f88874-19f6-4352-a54b-60f7d94bed2f.png',\n logo1x1Dark:\n 'https://chui-assets-cdn.espn.com/c7f88874-19f6-4352-a54b-60f7d94bed2f.png',\n },\n mappings: [\n {\n type: 'SPORT',\n value: 'football',\n },\n {\n type: 'LEAGUE',\n value: 'college-football',\n },\n ],\n userEntryCount: 0,\n },\n {\n id: 269,\n gameType: 'BRACKET',\n challengeName: 'CFP Bracket Challenge',\n challengeAbbrev: 'CFP Bracket Challenge',\n scoringFormatIds: [5],\n state: 'LANDER',\n logoUrls: {\n logo:\n 'https://chui-assets-cdn.espn.com/2fb0bf85-e01c-40a9-88b1-3421d30fe3b2.png',\n logoDark:\n 'https://chui-assets-cdn.espn.com/09fec69d-94e1-4c8f-9bb4-0610009999dd.png',\n logo1x1:\n 'https://chui-assets-cdn.espn.com/40159d72-8861-450f-926a-a493947b47b1.png',\n logo1x1Dark:\n 'https://chui-assets-cdn.espn.com/40159d72-8861-450f-926a-a493947b47b1.png',\n },\n mappings: [\n {\n type: 'SPORT',\n value: 'football',\n },\n {\n type: 'LEAGUE',\n value: 'college-football',\n },\n ],\n userEntryCount: 0,\n },\n {\n id: 270,\n gameType: 'PICKEM',\n challengeName: 'Capital One Bowl Mania 2025',\n challengeAbbrev: 'Capital One Bowl Mania',\n scoringFormatIds: [1, 3, 2],\n state: 'LANDER',\n logoUrls: {\n logo:\n 'https://chui-assets-cdn.espn.com/3862fdaa-aad9-417b-a471-7041697a1c7d.png',\n logoDark:\n 'https://chui-assets-cdn.espn.com/3862fdaa-aad9-417b-a471-7041697a1c7d.png',\n logo1x1:\n 'https://chui-assets-cdn.espn.com/a7cd3fde-d093-4375-917a-f983291d2481.jpeg',\n logo1x1Dark:\n 'https://chui-assets-cdn.espn.com/a7cd3fde-d093-4375-917a-f983291d2481.jpeg',\n },\n mappings: [\n {\n type: 'SPORT',\n value: 'football',\n },\n {\n type: 'LEAGUE',\n value: 'college-football',\n },\n ],\n userEntryCount: 0,\n },\n ],\n challengeScoreboardEnabled: true,\n leagueScoreboardEnabled: {\n '1': true,\n '2': true,\n '3': true,\n '4': true,\n '5': true,\n },\n },\n};\n","import { Observable } from '@/helpers/Observable';\nimport AnalyticsService from '@/services/AnalyticsService/AnalyticsService';\nimport IMaestroEventDelegate from '@/interfaces/IMaestroEventDelegate';\nimport { captureException } from '@/sentry';\nimport SDK from '@/index';\nimport FantasyService from '@/modules/espn/fantasy/services/FantasyService';\nimport {\n IFantasyResponse,\n ILeagueManagerResponse,\n ILeagueManagerRotoResponse,\n IPromoResponse,\n isLeagueManagerHeadToHeadResponse,\n isLeagueManagerRotoResponse,\n Player,\n Preference,\n TournamentBracketCardItem,\n FantasyHeaderItem,\n TournamentChallenge,\n TournamentOverflowQRItem,\n} from '../types';\n\nimport FantasyPolling from './FantasyViewModel.FantasyPolling';\nimport LeagueManagerPolling from './FantasyViewModel.LeagueManagerPolling';\nimport TournamentPolling from './FantasyViewModel.TournamentPolling';\nimport { slugify, stringHashCode } from '@/helpers/strings';\nimport { MOCK_FANTASY_RESPONSE } from '../mocks';\n\ntype NotLoggedInFantasyItem = {\n id: string;\n type: 'notLoggedIn';\n};\n\nexport type PromoFantasyItem = {\n id: string;\n type: 'promo';\n background: string;\n logo: string;\n qrCode: string;\n title: string;\n description: string;\n};\n\nexport type InactiveLeague = {\n id: string;\n type: 'inactiveLeague';\n leagueName: string;\n draftDate?: number;\n leagueLogo: string;\n leagueColor: string;\n};\n\ntype MatchupSingleTeam = {\n points: number;\n logo: string;\n scoringType: string;\n};\n\nexport type MatchupSingleRoster = {\n athleteHeadshot: string;\n athleteAbbrevName: string;\n athletesSlot: string;\n teamTriCode: string;\n proGameStatusLines: string[];\n};\n\nexport type MatchupActiveAthlete = {\n abbrevName: string;\n points: string;\n};\n\nexport type MatchupSingleItem = {\n id: string;\n type: 'matchup-single';\n league: {\n title: string;\n subtitle: string | undefined;\n color: string;\n logo: string;\n };\n team: MatchupSingleTeam;\n roster: MatchupSingleRoster[];\n activeAthletes: MatchupActiveAthlete[];\n topPlayers: TopPlayer[];\n};\n\nexport type TopPlayer = {\n abbrevName: string;\n headshot: string;\n position: string;\n teamTriCode: string;\n points: number;\n rosteredBy: string;\n};\n\ntype MatchupPairTeam = {\n name: string | undefined;\n record: string | undefined;\n points: string | undefined;\n projectedPoints: string | undefined;\n logo: string | undefined;\n winProbability: number | undefined;\n};\n\ntype MatchupPairRosterData = {\n headshot: string;\n abbrevName: string;\n slot: string;\n triCode: string;\n points?: number;\n projectedPoints?: number;\n stats: string[];\n};\n\nexport type MatchupPairRoster = {\n away: MatchupPairRosterData;\n home: MatchupPairRosterData;\n};\n\nexport type MatchupPairItem = {\n id: string;\n type: 'matchup-pair';\n league: {\n title: string | undefined;\n subtitle: string | undefined;\n color: string;\n logo: string;\n };\n awayTeam: MatchupPairTeam;\n homeTeam: MatchupPairTeam;\n roster: MatchupPairRoster[];\n activeAthletes: MatchupActiveAthlete[];\n topPlayers: TopPlayer[];\n};\n\nexport type FantasyItem =\n | NotLoggedInFantasyItem\n | PromoFantasyItem\n | MatchupPairItem\n | MatchupSingleItem\n | InactiveLeague\n | TournamentBracketCardItem\n | FantasyHeaderItem\n | FantasyGroupItem\n | TournamentOverflowQRItem;\n\nexport type FantasyGroupItem = {\n type: 'fantasy-group';\n id: string;\n header: FantasyHeaderItem;\n items: FantasyItem[];\n};\n\nconst FANTASY_ERROR_STATE = {\n NONE: 'none',\n TAB_LOAD_FAILURE: 'tabLoadFailure',\n} as const;\nexport type FantasyErrorState = typeof FANTASY_ERROR_STATE[keyof typeof FANTASY_ERROR_STATE];\n\nexport class FantasyViewModel {\n // Observable properties\n public fantasyItems = new Observable<FantasyItem[]>([]);\n public isDataLoading = new Observable<boolean>(false);\n public hasEverSuccessfullyLoaded = new Observable<boolean>(false);\n public isLoadingTc = new Observable<boolean>(false);\n\n // Properties\n private eventId: string;\n private delegate: IMaestroEventDelegate;\n private analyticsService: AnalyticsService;\n private fantasyService: FantasyService;\n private fantasyPolling: FantasyPolling;\n private leagueManagerPolling: LeagueManagerPolling;\n private tournamentPolling: TournamentPolling;\n public errorState = new Observable<FantasyErrorState>('none');\n private leagueSortOrder: Map<string, number> = new Map();\n private itemToLeagueKey: Map<string, string> = new Map();\n private useMockData: boolean = false;\n private _promoData: IPromoResponse | null = null;\n\n private _fantasyLeagues: (\n | MatchupPairItem\n | MatchupSingleItem\n | InactiveLeague\n )[] = [];\n\n private _tournamentChallenges: FantasyGroupItem[] = [];\n private _promoItem: PromoFantasyItem | null = null;\n private _tcProcessingCount: number = 0;\n\n constructor(\n eventId: string,\n delegate: IMaestroEventDelegate,\n analyticsService: AnalyticsService,\n options: {\n useMockData?: boolean;\n } = {}\n ) {\n this.useMockData = options.useMockData || false;\n this.eventId = eventId;\n this.delegate = delegate;\n this.analyticsService = analyticsService;\n this.fantasyService = new FantasyService();\n this.fantasyPolling = new FantasyPolling(this.fantasyService);\n this.leagueManagerPolling = new LeagueManagerPolling(this.fantasyService);\n this.tournamentPolling = new TournamentPolling(this.fantasyService);\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 await this.fetchData();\n }\n\n private async fetchData() {\n this.isDataLoading.value = true;\n\n const isAuthenticated = await this.delegate.userIsAuthenticated();\n if (!isAuthenticated) {\n this.isDataLoading.value = false;\n this.append({\n id: 'not-logged-in',\n type: 'notLoggedIn',\n });\n return;\n } else if (this.fantasyItems.value.find((i) => i.type === 'notLoggedIn')) {\n this.fantasyItems.value = [];\n }\n\n const swid = (await this.delegate.getUserSWID()) || '';\n const jwt = (await this.delegate.getUserToken()) || '';\n\n if (this.useMockData) {\n await this.fetchMockData();\n return;\n } else {\n await this.fantasyPolling.refresh(\n {\n eventId: this.eventId,\n swid,\n jwt,\n },\n this.processFantasy.bind(this)\n );\n }\n }\n\n onEngage(type: FantasyItem['type']) {\n this.analyticsService.panelClick({\n type: 'espnFantasy',\n name: 'fantasy_item_clicked',\n metadata: {\n card: type,\n },\n });\n }\n\n onAskLogin() {\n this.fantasyItems.value = [];\n this.delegate.onPanelEvent({\n type: 'fantasy:request:login',\n payload: {\n onLoginSuccess: async () => {\n await this.fetchData();\n },\n },\n });\n }\n\n /**\n * Clean up resources when the ViewModel is no longer needed\n */\n cleanup(): void {\n this.fantasyPolling.stop();\n this.fantasyPolling.removeLastResponseHash();\n this.leagueManagerPolling.stopAll();\n this.tournamentPolling.stopAll();\n this.leagueSortOrder.clear();\n this.itemToLeagueKey.clear();\n this._fantasyLeagues = [];\n this._tournamentChallenges = [];\n this._promoItem = null;\n this._tcProcessingCount = 0;\n this.isLoadingTc.value = false;\n this.fantasyItems.value = [];\n this.hasEverSuccessfullyLoaded.value = false;\n }\n\n /**\n * Track panel view event\n */\n private async trackPanelView(): Promise<void> {\n try {\n await this.analyticsService.panelView('espnFantasy');\n } catch (error) {\n captureException(error, {\n context: 'FantasyViewModel.trackPanelView',\n });\n console.error('[FANTASY] Error tracking panel view:', error);\n }\n }\n\n private async processFantasy(data: IFantasyResponse) {\n try {\n const token = (await this.delegate.getUserToken()) || '';\n this.leagueManagerPolling.stopAll();\n this.tournamentPolling.stopAll();\n\n // Check hide_pickems flag from panel config\n const config = SDK.getPageConfig();\n const panel = config?.panels?.find((p) => p.panel_type === 'espnFantasy');\n const hidePickems = panel?.renderer?.block_data?.hide_pickems || false;\n\n const hasChallenges =\n (data.fantasyData?.challengeInformation || []).length > 0;\n\n const noData =\n (data.fantasyData?.totalChallengeEntries || 0) +\n (data.fantasyData?.totalFantasyLeagues || 0) ===\n 0;\n\n // Clear and rebuild the sort order map based on preferences array order\n this.leagueSortOrder.clear();\n this.itemToLeagueKey.clear();\n // Clear internal lists on full refresh\n this._fantasyLeagues = [];\n this._tournamentChallenges = [];\n\n if (!hidePickems && hasChallenges) {\n this.isLoadingTc.value = true;\n data.fantasyData?.challengeInformation?.forEach((challenge) => {\n if (challenge.gameType === 'BRACKET') {\n this._tcProcessingCount++;\n const key = `tc-${challenge.id}-${token}`;\n this.tournamentPolling.refresh(\n key,\n {\n challengeId: String(challenge.id),\n competitionId: this.eventId,\n token,\n },\n (data) => {\n this.parseTournamentChallenge(data);\n this._tcProcessingCount--;\n if (this._tcProcessingCount === 0) {\n this.isLoadingTc.value = false;\n this.rebuildFantasyItems();\n }\n }\n );\n }\n });\n // If no BRACKET challenges were found, set isLoadingTc back to false\n if (this._tcProcessingCount === 0) {\n this.isLoadingTc.value = false;\n }\n } else {\n this.isLoadingTc.value = false;\n }\n if (noData || (data.preferences || []).length === 0) {\n const promo = await this.getPromoData();\n if (promo) {\n this._promoItem = {\n id: 'promo',\n type: 'promo',\n background: promo.fantasy.promotion.background,\n description: promo.fantasy.promotion.description,\n logo: promo.fantasy.promotion.logo,\n qrCode: promo.fantasy.promotion.qrCode,\n title: promo.fantasy.promotion.title,\n };\n }\n }\n\n for (let i = 0; i < (data.preferences || []).length; i++) {\n const pref = data.preferences![i];\n const entry = pref.metaData?.entry || {};\n const game = entry.abbrev;\n const seasonId = entry.seasonId;\n const leagueId = entry.groups?.[0]?.groupId;\n const draftDate = entry.groups?.[0]?.draftDate;\n\n if (!game || !seasonId || !leagueId || !entry.entryId) {\n continue;\n }\n\n const key = `${game}-${leagueId}-${seasonId}-${token}`;\n\n // Store the array index as the sort order for this league\n this.leagueSortOrder.set(key, i);\n\n this.leagueManagerPolling.refresh(\n key,\n {\n game,\n leagueId,\n seasonId,\n token,\n proGameId: this.eventId,\n teamId: entry.entryId,\n },\n (data) => {\n if (entry.entryMetadata?.draftComplete === false) {\n this.append(this.parseInactiveLeague(data, draftDate), key);\n } else if (isLeagueManagerHeadToHeadResponse(data)) {\n const items = this.parseHeadToHead(data, pref);\n\n if (items) {\n for (const item of items) {\n this.append(item, key);\n }\n }\n } else if (isLeagueManagerRotoResponse(data)) {\n const items = this.parseRoto(data, pref);\n if (items) {\n for (const item of items) {\n this.append(item, key);\n }\n }\n }\n }\n );\n }\n\n // Mark successful load\n this.hasEverSuccessfullyLoaded.value = true;\n this.errorState.value = 'none';\n this.isDataLoading.value = false;\n\n // Initial rebuild even if empty, to ensure state is clean\n this.rebuildFantasyItems();\n } catch (error) {\n captureException(error, {\n context: 'FantasyViewModel.processFantasy',\n });\n console.error('[FANTASY] Error processing fantasy data:', error);\n this.isDataLoading.value = false;\n\n if (!this.hasEverSuccessfullyLoaded.value) {\n this.errorState.value = 'tabLoadFailure';\n }\n }\n }\n\n private parseRoto(\n data: ILeagueManagerRotoResponse,\n preference: Preference\n ): FantasyItem[] | null {\n if (\n !data.matchups?.length ||\n !data.leagueName ||\n !data.scoringType ||\n !data.gameId\n ) {\n return null;\n }\n\n const items: MatchupSingleItem[] = [];\n for (const matchup of data.matchups) {\n if (!matchup.teams?.length) {\n continue;\n }\n\n const team = matchup.teams[0];\n\n if (\n !team.logo ||\n !data.sportLogo ||\n !data.sportColor ||\n team.points === undefined\n ) {\n continue;\n }\n\n const roster = team.roster || [];\n const matchupRoster: MatchupSingleRoster[] = [];\n const activeAthletes: MatchupActiveAthlete[] = [];\n\n for (const r of roster) {\n if (!r.player) {\n continue;\n }\n\n if (\n !r.player.abbrevName ||\n !r.player.headshot ||\n !r.player.proTeam?.triCode ||\n !r.slot\n ) {\n continue;\n }\n\n matchupRoster.push({\n athleteHeadshot: r.player.headshot,\n athleteAbbrevName: r.player.abbrevName,\n athletesSlot: r.slot,\n teamTriCode: r.player.proTeam.triCode,\n proGameStatusLines: r.player.proGameStatusLines || [],\n });\n\n if (r.player.currentlyWatching && r.player.points !== undefined) {\n activeAthletes.push({\n abbrevName: r.player.abbrevName,\n points: `${r.player.points} FPTS`,\n });\n }\n }\n\n items.push({\n id: stringHashCode(JSON.stringify(preference)).toString(),\n type: 'matchup-single',\n topPlayers: this.parseTopPlayers(data.topPlayers || []),\n league: {\n color: data.sportColor,\n logo: data.sportLogo,\n subtitle: data.name,\n title: data.leagueName,\n },\n team: {\n logo: team.logo,\n scoringType: data.scoringType.includes('SEASON')\n ? 'SEASON'\n : data.scoringType,\n points: team.points,\n },\n roster: matchupRoster,\n activeAthletes,\n });\n }\n return items;\n }\n\n append(item: FantasyItem | null, leagueKey?: string) {\n if (!item) {\n return;\n }\n\n if (item.type === 'notLoggedIn') {\n this.fantasyItems.value = [item];\n return;\n }\n\n if (item.type === 'promo') {\n this._promoItem = item;\n }\n\n // Store the league key for this item if provided\n if (leagueKey) {\n this.itemToLeagueKey.set(item.id, leagueKey);\n }\n\n if (\n item.type === 'matchup-pair' ||\n item.type === 'matchup-single' ||\n item.type === 'inactiveLeague'\n ) {\n const existingItemIndex = this._fantasyLeagues.findIndex(\n (i) => i.id === item.id\n );\n if (existingItemIndex !== -1) {\n this._fantasyLeagues[existingItemIndex] = item;\n } else {\n this._fantasyLeagues.push(item);\n }\n\n // Sort items inside the group\n this._fantasyLeagues.sort((a, b) => {\n const keyA = this.itemToLeagueKey.get(a.id);\n const keyB = this.itemToLeagueKey.get(b.id);\n const orderA =\n keyA !== undefined\n ? this.leagueSortOrder.get(keyA) ?? Number.MAX_SAFE_INTEGER\n : Number.MAX_SAFE_INTEGER;\n const orderB =\n keyB !== undefined\n ? this.leagueSortOrder.get(keyB) ?? Number.MAX_SAFE_INTEGER\n : Number.MAX_SAFE_INTEGER;\n return orderA - orderB;\n });\n }\n\n const existingGroupIndex = this._tournamentChallenges.findIndex(\n (g) => g.id === leagueKey\n );\n\n if (item.type === 'fantasy-header') {\n if (existingGroupIndex !== -1) {\n this._tournamentChallenges[existingGroupIndex].header = item;\n } else if (leagueKey) {\n this._tournamentChallenges.push({\n type: 'fantasy-group',\n id: leagueKey,\n header: item,\n items: [],\n });\n }\n } else if (\n item.type === 'tournament-bracket-card' ||\n item.type === 'tournament-overflow-qr'\n ) {\n if (existingGroupIndex !== -1) {\n const group = this._tournamentChallenges[existingGroupIndex];\n const existingItemIndex = group.items.findIndex(\n (i) => i.id === item.id\n );\n if (existingItemIndex !== -1) {\n group.items[existingItemIndex] = item;\n } else {\n group.items.push(item);\n }\n } else if (leagueKey) {\n this._tournamentChallenges.push({\n type: 'fantasy-group',\n id: leagueKey,\n header: {\n type: 'fantasy-header',\n id: `${leagueKey}-header`,\n title: '',\n }, // Placeholder\n items: [item],\n });\n }\n }\n\n this.rebuildFantasyItems();\n }\n\n private rebuildFantasyItems() {\n const items: FantasyItem[] = [];\n\n if (this._tournamentChallenges.length > 0) {\n items.push(...this._tournamentChallenges);\n }\n\n if (this._fantasyLeagues.length > 0) {\n items.push({\n type: 'fantasy-group',\n id: 'header-fantasy-leagues-group',\n header: {\n type: 'fantasy-header',\n id: 'header-fantasy-leagues',\n title: 'Fantasy Leagues',\n },\n items: this._fantasyLeagues,\n });\n }\n\n if (\n this._promoItem &&\n this._tournamentChallenges.length === 0 &&\n this._fantasyLeagues.length === 0 &&\n items.length === 0 &&\n !this.isLoadingTc.value\n ) {\n items.push(this._promoItem);\n }\n\n this.fantasyItems.value = items;\n }\n\n private parseHeadToHead(\n data: ILeagueManagerResponse,\n preference: Preference\n ): FantasyItem[] | null {\n if (\n !data.matchups?.length ||\n !data.leagueName ||\n !data.sportColor ||\n !data.sportLogo ||\n !data.gameId\n ) {\n return null;\n }\n\n const items: MatchupPairItem[] = [];\n for (const matchup of data.matchups) {\n if (!matchup.home || !matchup.away) {\n continue;\n }\n\n const roster: MatchupPairRoster[] = [];\n const activeAthletes: MatchupActiveAthlete[] = [];\n const homeRoster = matchup.home.roster || [];\n const awayRoster = matchup.away.roster || [];\n\n for (let i = 0; i < awayRoster.length; i++) {\n const singleAwayRoster = awayRoster[i];\n const singleHomeRoster = homeRoster[i];\n\n if (!singleAwayRoster.player || !singleHomeRoster.player) continue;\n if (\n !singleAwayRoster.player.abbrevName ||\n !singleAwayRoster.player.headshot ||\n !singleAwayRoster.slot ||\n !singleAwayRoster.player.proTeam?.triCode ||\n !matchup.away?.record\n ) {\n continue;\n }\n\n if (\n !singleHomeRoster.player.abbrevName ||\n !singleHomeRoster.player.headshot ||\n !singleHomeRoster.slot ||\n !singleHomeRoster.player.proTeam?.triCode ||\n !matchup.home?.record\n ) {\n continue;\n }\n\n roster.push({\n away: {\n abbrevName: singleAwayRoster.player.abbrevName,\n headshot: singleAwayRoster.player.headshot,\n points: singleAwayRoster.player.points,\n slot: singleAwayRoster.slot,\n stats: singleAwayRoster.player.proGameStatusLines || [],\n triCode: singleAwayRoster.player.proTeam.triCode,\n projectedPoints: singleAwayRoster.player.projectedPoints,\n },\n home: {\n abbrevName: singleHomeRoster.player.abbrevName,\n headshot: singleHomeRoster.player.headshot,\n points: singleHomeRoster.player.points,\n slot: singleHomeRoster.slot,\n stats: singleHomeRoster.player.proGameStatusLines || [],\n triCode: singleHomeRoster.player.proTeam?.triCode,\n projectedPoints: singleHomeRoster.player.projectedPoints,\n },\n });\n\n if (\n singleHomeRoster.player.currentlyWatching &&\n singleHomeRoster.player.points !== undefined\n ) {\n activeAthletes.push({\n abbrevName: singleHomeRoster.player.abbrevName,\n points: `${singleHomeRoster.player.points} FPTS`,\n });\n }\n }\n\n items.push({\n id: stringHashCode(JSON.stringify(preference)).toString(),\n type: 'matchup-pair',\n awayTeam: {\n logo: matchup.away.logo,\n name: matchup.away.name,\n points:\n data.scoringType === 'H2H_POINTS'\n ? String(matchup.away.points)\n : matchup.away.score,\n projectedPoints: matchup.away.projectedPoints,\n record: matchup.away.record,\n winProbability: matchup.away.winProbability,\n },\n homeTeam: {\n logo: matchup.home.logo,\n name: matchup.home.name,\n points:\n data.scoringType === 'H2H_POINTS'\n ? String(matchup.home.points)\n : matchup.home.score,\n projectedPoints: matchup.home.projectedPoints,\n record: matchup.home.record,\n winProbability: matchup.home.winProbability,\n },\n league: {\n color: data.sportColor,\n logo: data.sportLogo,\n subtitle: matchup.name,\n title: data.leagueName,\n },\n roster,\n activeAthletes,\n topPlayers: this.parseTopPlayers(data.topPlayers || []),\n });\n }\n\n return items;\n }\n\n private parseTopPlayers(players: Player[]): TopPlayer[] {\n const topPlayers: TopPlayer[] = [];\n\n for (const p of players) {\n if (\n !p.abbrevName ||\n !p.headshot ||\n !p.proTeam?.triCode ||\n p.points === undefined\n ) {\n continue;\n }\n\n let rosteredBy = '';\n if (\n p.percentRostered !== undefined &&\n p.percentRostered > 0 &&\n p.playerStatus?.startsWith('Rostered')\n ) {\n rosteredBy = p.playerStatus;\n }\n\n topPlayers.push({\n abbrevName: p.abbrevName,\n headshot: p.headshot,\n position: p.positions?.split(',')[0] || '',\n teamTriCode: p.proTeam.triCode,\n points: p.points,\n rosteredBy,\n });\n }\n\n return topPlayers;\n }\n\n private parseInactiveLeague(\n data: ILeagueManagerResponse | ILeagueManagerRotoResponse,\n draftDate?: number | string | null\n ): InactiveLeague | null {\n if (!data.sportColor || !data.sportLogo || !data.leagueName) {\n return null;\n }\n\n let draftDateNum: number | undefined = undefined;\n if (draftDate) {\n const parsedDate = new Date(Number(draftDate));\n if (!isNaN(parsedDate.getTime())) {\n draftDateNum = parsedDate.getTime();\n }\n }\n\n return {\n id: slugify(`${data.gameId}-inactive-${data.leagueName}`),\n leagueColor: data.sportColor,\n leagueLogo: data.sportLogo,\n leagueName: data.leagueName,\n type: 'inactiveLeague',\n draftDate: draftDateNum,\n };\n }\n\n private async getPromoData(): Promise<IPromoResponse | null> {\n if (this._promoData) {\n return this._promoData;\n }\n\n try {\n this._promoData = await this.fantasyService.getPromo();\n return this._promoData;\n } catch (error) {\n captureException(error, {\n context: 'FantasyViewModel.getPromoData',\n });\n return null;\n }\n }\n\n private async parseTournamentChallenge(data: TournamentChallenge) {\n if (!data.id) {\n return;\n }\n\n let validEntries = data.entries?.filter((entry) => entry.id) || [];\n\n if (validEntries.length === 0) {\n return;\n }\n\n const header: FantasyHeaderItem = {\n type: 'fantasy-header',\n id: `${data.id}-header`,\n title: data.name || 'Tournament Challenge',\n };\n this.append(header, data.id);\n\n const existingGroupIndex = this._tournamentChallenges.findIndex(\n (g) => g.id === data.id\n );\n if (existingGroupIndex !== -1) {\n this._tournamentChallenges[existingGroupIndex].items = [];\n }\n\n const totalEntries = validEntries.length;\n const entriesToShow = validEntries.slice(0, 5);\n\n for (const entry of entriesToShow) {\n let userPickName: string | undefined;\n\n if (data.propositions && entry.picks) {\n for (const pick of entry.picks) {\n if (!pick.propositionId || !pick.outcomeId) continue;\n\n const proposition = data.propositions.find(\n (p) => p.id === pick.propositionId\n );\n\n if (proposition && proposition.outcomes) {\n const outcome = proposition.outcomes.find(\n (o) => o.id === pick.outcomeId\n );\n\n if (outcome && outcome.name) {\n userPickName = outcome.name;\n break;\n }\n }\n }\n }\n\n const card: TournamentBracketCardItem = {\n type: 'tournament-bracket-card',\n id: entry.id!,\n name: entry.name || '',\n rank: entry.rank || 0,\n score: entry.score || 0,\n percentile: Math.round((entry.percentile || 0) * 100),\n entryStatusIcon: entry.entryStatusIcon || '',\n finalPick: entry.finalPick\n ? {\n propositionId: entry.finalPick.propositionId,\n outcomeId: entry.finalPick.outcomeId,\n primaryLogo: (entry.finalPick as any).outcomePicked?.primaryLogo,\n secondaryLogo: (entry.finalPick as any).outcomePicked\n ?.secondaryLogo,\n result: entry.finalPick.result,\n }\n : { propositionId: '', outcomeId: '' },\n isComplete: entry.isComplete || false,\n picks: entry.picks,\n tournamentId: data.id,\n tournamentAbbrev: data.abbrev || '',\n tournamentLogo: data.logo || '',\n propositions: data.propositions,\n userPickName,\n };\n this.append(card, data.id);\n }\n\n if (totalEntries > 5 && data.state === 'LIVE') {\n const promoData = await this.getPromoData();\n const isLocked = data.locked === true;\n const qrCodeVariant = isLocked ? 'tc-live' : 'tc-pre';\n const promoVariant = promoData?.[qrCodeVariant];\n\n if (promoVariant) {\n const overflowQR: TournamentOverflowQRItem = {\n type: 'tournament-overflow-qr',\n id: `${data.id}-overflow`,\n background: promoVariant.promotion.background,\n logo: promoVariant.promotion.logo,\n qrCode: promoVariant.promotion.qrCode,\n title: promoVariant.promotion.title,\n description: promoVariant.promotion.description,\n tournamentId: data.id,\n };\n this.append(overflowQR, data.id);\n }\n }\n }\n\n /**\n * Fetch mock data for testing\n */\n private async fetchMockData(): Promise<void> {\n this.hasEverSuccessfullyLoaded.value = true;\n await this.processFantasy(MOCK_FANTASY_RESPONSE);\n this.errorState.value = 'none';\n this.isDataLoading.value = false;\n }\n\n clearTabLoadFailure() {\n this.errorState.value = 'none';\n // Small delay to allow UI to update before refetching\n setTimeout(() => {\n this.fetchData();\n }, 100);\n }\n\n setDataToPanel(data: Record<string, any>) {\n if (data.leagueManagerOverrideBaseUrl) {\n this.fantasyService.leagueManagerOverrideBaseUrl =\n data.leagueManagerOverrideBaseUrl;\n }\n\n if (data.fantasyOverrideBaseUrl) {\n this.fantasyService.fantasyOverrideBaseUrl = data.fantasyOverrideBaseUrl;\n }\n\n if (data.gambitOverrideBaseUrl) {\n this.fantasyService.gambitOverrideBaseUrl = data.gambitOverrideBaseUrl;\n }\n }\n}\n\nexport default FantasyViewModel;\n"],"sourceRoot":""}
|
|
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":""}
|