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