{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///D:/a/_work/1/s/libs/core-contracts/src/appError-contracts/Severity.ts","webpack:///D:/a/_work/1/s/node_modules/@msnews/ssr-server/dist/interop/RequestData.js","webpack:///D:/a/_work/1/s/libs/isomorphic-util/src/SSRInteropContractHelpers.ts","webpack:///D:/a/_work/1/s/libs/isomorphic-util/src/SSRInteropContract.ts","webpack:///D:/a/_work/1/s/libs/core/src/request/RequestContext.ts","webpack:///D:/a/_work/1/s/libs/experiences-constants/src/AppTypes.ts","webpack:///D:/a/_work/1/s/libs/diagnostics/src/logging/LiteLogger.ts","webpack:///D:/a/_work/1/s/libs/diagnostics/src/logging/Util.ts","webpack:///D:/a/_work/1/s/libs/core/src/app/HostPage.ts","webpack:///D:/a/_work/1/s/libs/url-util/src/windows.ts","webpack:///D:/a/_work/1/s/libs/experiences-redux-contracts/src/constants/ConnectorConstants.ts","webpack:///D:/a/_work/1/s/libs/core/src/utilities/SingletonResetManager.ts","webpack:///D:/a/_work/1/s/libs/diagnostics/src/AppError/AppErrors.ts","webpack:///D:/a/_work/1/s/libs/core/src/app/AppEnvironment.ts","webpack:///D:/a/_work/1/s/libs/render-cache/src/Constants.ts","webpack:///D:/a/_work/1/s/libs/config-data-types/src/PlatformType.ts","webpack:///D:/a/_work/1/s/libs/wpo-common/src/WpoHelper.ts","webpack:///D:/a/_work/1/s/libs/core/src/utilities/UrlUtility.ts","webpack:///D:/a/_work/1/s/libs/experiences-constants/src/Flights.ts","webpack:///D:/a/_work/1/s/libs/experimentation-helpers/src/GetPeregrineFlights.ts","webpack:///D:/a/_work/1/s/libs/core/src/constants/Constants.ts","webpack:///./src/startup/Startup.ts","webpack:///D:/a/_work/1/s/libs/isomorphic-util/src/requestData.ts","webpack:///D:/a/_work/1/s/libs/telemetry-contracts/src/telemetry-statics/Telemetry.ts","webpack:///D:/a/_work/1/s/libs/core/src/utilities/Parsing.ts","webpack:///D:/a/_work/1/s/libs/experiences-constants/src/SignedInStatus.ts","webpack:///D:/a/_work/1/s/libs/experiences-constants/src/PageTypes.ts","webpack:///D:/a/_work/1/s/libs/core/src/utilities/LocalStorageInline.ts","webpack:///D:/a/_work/1/s/libs/render-cache/src/Helper.ts","webpack:///D:/a/_work/1/s/libs/experiences-constants/src/SameSiteValues.ts","webpack:///D:/a/_work/1/s/libs/core/src/utilities/CookieUtility.ts","webpack:///D:/a/_work/1/s/libs/diagnostics/src/logging/Logger.ts","webpack:///D:/a/_work/1/s/libs/isomorphic-util/src/DOMHelpersCore.ts","webpack:///D:/a/_work/1/s/libs/core/src/app/Enterprise.ts","webpack:///D:/a/_work/1/s/libs/page-error-handling/src/Utilities.ts","webpack:///D:/a/_work/1/s/libs/page-error-handling/src/PageSettings.ts","webpack:///D:/a/_work/1/s/libs/core/src/utilities/CookieInlineUtility.ts","webpack:///D:/a/_work/1/s/libs/page-error-handling/src/ErrorLogger.ts","webpack:///D:/a/_work/1/s/libs/experiences-dynamic-reducer/src/reducers/DynamicReducer.ts","webpack:///D:/a/_work/1/s/libs/experiences-page-base/src/pages/PageHelper.ts","webpack:///D:/a/_work/1/s/libs/experiences-page-base/src/pages/PageBase.ts","webpack:///D:/a/_work/1/s/libs/core/src/webstorage/LocalStorage.ts","webpack:///D:/a/_work/1/s/libs/core/src/webstorage/WebStorage.ts","webpack:///D:/a/_work/1/s/libs/experiences-constants/src/BrowserTypes.ts","webpack:///D:/a/_work/1/s/libs/core/src/app/StoredHeadData.ts","webpack:///D:/a/_work/1/s/libs/core/src/app/HeadData.ts","webpack:///D:/a/_work/1/s/libs/core-contracts/src/appError-contracts/ErrorBehavior.ts","webpack:///D:/a/_work/1/s/libs/core/src/utilities/Utility.ts","webpack:///D:/a/_work/1/s/libs/config-resolver/src/utilities/ResolverAppErrors.ts","webpack:///D:/a/_work/1/s/libs/diagnostics/src/performance/PageTimings.ts","webpack:///D:/a/_work/1/s/libs/core/src/app/Environment.ts","webpack:///D:/a/_work/1/s/libs/core-contracts/src/resolver-contracts/ConfigOrigin.ts","webpack:///D:/a/_work/1/s/libs/experiences-constants/src/AuthCookieNames.ts","webpack:///D:/a/_work/1/s/libs/experiences-dynamic-reducer/src/reducers/DataConnectorTracker.ts","webpack:///D:/a/_work/1/s/libs/render-cache/src/PersistRenderCache.ts","webpack:///D:/a/_work/1/s/libs/experiences-dynamic-reducer/src/reducers/DataConnectorInjector.ts","webpack:///D:/a/_work/1/s/libs/isomorphic-util/src/DOMHelpers.ts","webpack:///D:/a/_work/1/s/libs/diagnostics/src/performance/PerfMarker.ts","webpack:///D:/a/_work/1/s/libs/core/src/app/Market.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","611","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","Severity","RequestData","spec","qspPrefix","this","undefined","memo","objectFromSpecification","values","requestDataValue","clientValue","keys","reduce","pv","cv","assign","qsp","ver","join","forEach","qp","startsWith","verParam","split","current","newValue","JSON","parse","ex","params","URLSearchParams","recurse","obj","prefix","k","currentPrefix","append","stringify","sort","getURLSearchParams","toString","breakpoints","DefaultSize2ColumnWidth","DefaultSize3ColumnWidth","DefaultSize4ColumnWidth","SSRContract","innerWidth","innerHeight","outerWidth","breakpoint","locationHash","location","hash","locationHref","href","locationHost","host","locationHostName","hostname","locationOrigin","origin","locationPathName","pathname","locationProtocol","protocol","locationSearch","search","screenTop","screenY","canUseCssGrid","CSS","supports","devicePixelRatio","language","document","documentElement","lang","direction","dir","requestId","requestData","loadQueryParams","RequestId","app","ActivityId","getContextData","dataGetter","dataName","throwException","Error","AppType","CardStyleMode","LiteLogger","isDebugEnabled","toLowerCase","1","true","global","webpackRequire","isDebug","tags","message","console","info","error","getMessage","log","isMetrics","getQueryParameterByName","nameRegEx","replace","queryNameValueMatches","RegExp","exec","queryValue","decodeURIComponent","HostPage","getHostPageFromUrl","url","URL","pathnameSegments","topDomainName","match","originalUrl","categoryKey","verticalKey","hostName","topDomain","indexOffset","hostPage","subcategoryKey","EDGE_FLAGS","Set","isWindowsScenario","currentUrl","e","isMatch","searchParams","ocid","substr","has","ConnectorConstants","connectorStateKey","renderAction","dataConnectorMergeInitAction","resetCallbacks","registerResetCallback","callback","severity","Alert","pb","build","updateAppErrorsPropertyBag","newPbInfo","getAppErrorsPropertyBag","NoAlert","OneServiceCardProviderResponseEmpty","id","source","OneServiceCardProviderEmptyMyFeed","OneServiceCardProviderResponseWasNullOrErroneous","OneServiceCardProviderErrorFetchingOneServiceResponse","HighImpact","OneServiceCardProviderInvalidJsonInOneServiceResponse","OneServiceCardProviderInvalidFeedListInOneServiceResponse","OneServiceCardProviderRiverConfigurationIssue","OneServiceCardProviderQueryInterestContentFetchError","OneServiceCardProviderStaticContentLoaded","ContentPreviewAppErrors","ErrorWhileFetchingContentPreviewContent","InvalidResponseFromContentPreviewFetch","InvalidResponseFromContentPreviewResponseJson","ErrorWhileInitializingAsyncContentPreviewContent","InvalidOrMissingContentId","MissingDataForExternalContent","MissingPartnerLink","ErrorWhileFetchingWindowsShellContentPreviewContent","RiverSourceFile","RiverAppErrors","UnknownMetadataReceivedFromRiverCardProvider","RiverContentProviderFetchException","SkipPositionedCardsFallbackStrategyFailed","InvalidConfig","MissingExperienceTypeMap","ChildLoadError","InitialDataLoadError","DuplicateInstanceIdWarning","FullHeightFallbackStrategyFailed","UserInitiatedPageRefreshErrors","Default","SportsCardError","SportsLeaguePdpFetchError","SportsLeaguePdpInvalidResponse","SportsPlayersPdpFetchError","SportsPlayersPdpInvalidResponse","SportsTeamsPdpFetchError","SportsTeamsPdpInvalidResponse","SportsCardConfigFetchError","SportsCardGetFavoriteTeamDataError","SportsCardGetPlayerBioError","SportsCardGetLeaguesGamesArrayError","SportsCardGetPdpDataFailure","SportsCardGetLeagueSeasonYearDataFailure","SportsCardGetLocalizedTeamNameDataFailure","SportsCardGetTeamDataFailure","SportsCardGetLeagueDataFailure","MoneyCardError","MoneyQuoteSummaryGetError","MoneyQuoteSummariesGetError","MoneyPdpDataGetErrorFromService","MoneyPdpInvalidResponseFromService","MoneyQuoteSummaryGetErrorFromService","MoneyQuoteSummaryInvalidResponseFromService","TrendingNewsErrors","DataFetchError","BackupDataFetchError","GridSectionAppErrors","GridSectionCardGenerationError","MeControlAppErrors","SSOFailedError","MeControlLoadFailedError","PageClickTrackerErrors","InvalidResponse","FetchFailure","CoachmarkAppErrors","GeneralError","NotPlaceable","NotFoundComponent","CoachmarkDataConnectorUndefined","InvalidCTAType","CTATypeNotDefined","ConfigDataUndefined","FailedToFetchConfigData","ExceptionFetchingConfigData","EventNotDefined","CoachmarkStateNotDefined","CoachmarkDataAppErrors","InvalidCoachmarkMessage","IrisDataConnectorUndefined","ErrorFoundForSurface","TelemetryInfoUndefined","EventTypeUndefined","IrisActionUndefined","SpotlightPreviewAppErrors","ErrorWhileFetchingSpotlightPreviewCardInfo","NoServiceContextMetadata","SpotlightErrors","UnknownError","ContentFetchError","PartnerFetchFail","CardActionErrors","CardActionBaseExperienceError","CardActionPostActionError","CardActionDeleteActionError","CardActionGetActionError","CardActionBadRequestReportingToOcv","CardActionExceptionReportingToOcv","SharedStateConnectorNull","CookieNotCategorized","InvalidCookie","Critical","CookieSizeTooBig","CookieExpirationTooLong","OverlayErrors","LoadExperienceError","ViewsCommonAppErrors","InvalidIntraArticleDataError","InvalidDocumentContentError","ViewsPaddleDataLoadError","ViewsErrorPage","ProviderMapperError","InvalidContentId","ContentActionsToolbarAppErrors","ContentActionsSharingToolbarLoadError","ContentActionsArticleDatafetchError","ContentActionsBaseExperienceError","ContentActionsGetDocumentDataError","ContentActionsGetContentStatusActionError","ContentActionsDeleteActionError","ContentActionsPostActionError","ContentActionsExperienceLoadError","ContentActionsFlipToolbarError","ContentActionsContentStatusFetchError","ContentActionsContentPreviewFetchError","ContentSharingToolbarAppErrors","ContentSharingToolbarInitializationError","ContentSharingToolbarSaveForLaterServiceError","ContentProviderAppErrors","InvalidSourceIdError","ProviderDetailsFetchError","ProviderFeedFetchError","InvalidLayoutTemplate","ViewsGalleryAppErrors","InvalidGalleryIdError","GalleryDataLoadError","GalleryImagesLoadError","VideoListAppErrors","VideoListDataLoadError","ViewsArticleAppErrors","InvalidArticleIdError","ArticleDataLoadError","IntraArticleComponentLoadError","InlineGalleryInvokeError","InterestsSearchAppErrors","ErrorResponseFromOneService","ErrorResponseFromOneServiceIsInvalid","InvalidUrlFoundForElement","SelectedItemNotFoundInSuggestions","SelectedItemIsInvalid","InterestsAppErrors","InterestsRetrieveTopicsError","InterestsRetrieveFollowedTopicsError","InterestsRetrieveMutedPublishersError","InterestsUnMutePublisherError","InterestsFollowTopicError","InterestsUnfollowTopicError","InterestsTopicStateUndefined","InterestsShouldHaveRendered","InterestsRetrieveTopicError","InterestsRetrieveSavedStoriesError","InterestsSavedStoriesInvalidConfigError","InterestsSavedStoriesChildLoadError","InterestsSavedStoriesInvalidJsonError","InterestsSavedStoriesInvalidListError","InterestsRetrieveRecommendedTopicsError","UndefinedTopicDataConnector","InterestsRetrieveReadStoriesError","InterestsReadStoriesInvalidConfigError","InterestsReadStoriesChildLoadError","InterestsReadStoriesInvalidJsonError","InterestsReadStoriesInvalidListError","FailedRestoringDefaultTopicsError","TopicsFailedIndexedDBConnection","TopicsFailedGettingIndexedDB","TopicsFailedUpdatingIndexedDB","TopicsFailedCheckingLimitedFeed","ComponentConnector","ComponentConnectorAppErrors","DuplicateChildInstanceFound","BundleLoadError","ChildConfigInfoListNull","ListStartPositionInvalid","ChildDelayLoadError","ExperienceDependencyTimeout","LoadDataConnectorConfigFailed","LoadDataConnectorFailed","ChildWithInvalidExperience","ExperienceLoaderAppErrors","InsufficientLoadArgs","ConnectComponentFailureError","LoadComponentFailureError","SearchError","MissingFormCode","RecommendedSearchErrors","ResponseParsingFailed","InvalidJsonResponse","ServiceCallFailed","RenderFailed","Timeout","PollsCardAppErrors","PollsListFetchError","PollDataFetchError","PollsCardInvalidPoll","PollsCardInvalidQuizPoll","PollsCardVoteError","PollsCardMapStateToPropsError","PollsUnknownError","PollsResultPercentageError","PollAutoCuratedErrors","PollAutoCuratedContentError","PollAutoCuratedInvalid","PollAutoCuratedResultsFetchError","PollAutoCuratedResultsTransformError","MonetizationAppErrors","PlacementManagerLoadError","ArrangementPositionLoadError","GetCMSContentError","GetSAMRTBResponseError","MediaNetEOABError","InvalidPromoModuleConfig","CookieSyncDownloadExternalScriptError","CookieSyncMissingExternalScriptUrl","CookieSyncTimeout","CookieSyncPartnerScriptError","CookieSyncPixelPartnerDownloadError","CMSOrBackfillNativeAdLoadError","PlacementPositionMismatchingError","MissingRequiredPropertyPlacementManagerConfig","NativeAdTargetScopeError","RiverVideoAdPartnerError","JsTrackerPartnerScriptLoadError","ViglinkError","MissingTopicId","TopicIdNotFound","GetSAMRTBResponseErrorNoAlert","DisplayAdsOathLoadError","DisplayAdsApnLoadError","DisplayAdsApnEmptyProvider","DisplayAdsAdsDetectionNotInit","DisplayAdsMoatLoadError","DisplayAdsNoAdObjects","DisplayAdsProviderIdEncode","DisplayAdsJacLoadError","DisplayAdsInvalidSizeError","DisplayAdsInvalidParameterError","DisplayAdsPGCodeError","DisplayAdsSlowResponding","DisplayAdsNoBid","DisplayAdsResponseError","TaboolaRiverAppErrors","TaboolaRiverFetchError","PlayNativeAdVideoError","CoreLibAppErrors","DeprecatedCompositionLayoutUsed","InvalidColumnInGridConfig","ErrorLoadingBundle","GenericJSException","LocalStorageDoesntExist","SessionStorageDoesntExist","ReactRenderException","userImpacting","NetworkConnectionStatus","SubscriptionCallbackExecError","ResolverAppErrors","IndexedDbWriteFailed","IndexedDbReadFailed","CrsFetchError","ReceivedConfigFromCdnAsCrsFetchFailed","GetConfigException","IndexedDbBulkReadFailed","IndexedDbFailedToRemoveCachedConfig","IndexedDbFailedToClearAllCachedConfigs","RenderCachePurgedDueToChangesInConfig","FailedToPurgeRenderCache","RefreshConfigCacheFailed","IndexedDbInitFailed","DifferentCbid","PrgFlightLsWriteError","PrgFlightLsReadError","ResolverErrorConfigsDownloadedByCdn","CachedConfigsForDifferentFlight","ConfigCrsFetchNon200Response","ConfigCdnFetchNon200Response","GitConfigsInvalidConfigRef","GitConfigsInvalidConfigResolver","BingCardsAppErrors","BingCardGetHotelAnswersError","BingCardGetHotelErrorFromService","BingCardGetAnswersError","BingCardInvalidEntityType","BingCardErrorOut","BingAnswersAppErrors","FailedToLoadData","NoCardsContentType","NoCardsRelated","BingShoppingLifestyleCardError","LifestyleShopCardServiceFetchError","LifestyleShopCardServiceFetchInvalidResponse","LifestyleShopCardServiceEmptyResponse","LifestyleShopCardServiceInvalidResponse","LifestyleShopCardCdnServiceFetchError","LifestyleShopCardCdnServiceFetchInvalidResponse","LifestyleShopCardCdnServiceInvalidResponse","LifestyleShopAutosuggestServiceFetchError","LifestyleShopAutosuggestServiceFetchInvalidResponse","LifestyleShopAutosuggestServiceEmptyResponse","LifestyleShopAutosuggestServiceInvalidResponse","LifestyleShopAutosuggestInvalidSuggestionUrl","BingMiniShoppingServiceClientSourceFile","BingMiniShoppingError","BingMiniShoppingServiceFetchError","BingMiniShoppingServiceEmptyResponse","BingMiniShoppingServiceInvalidResponse","BingMiniShoppingServiceInsufficientDealsItems","BingMiniShoppingServiceInsufficientActiveDealsItems","BingMiniShoppingServiceInsufficientTrendingItems","BingMiniShoppingServiceInsufficientTrendingCategories","BingShoppingMeStripeServiceFetchError","BingShoppingMeStripeServiceEmptyResponse","BingShoppingMeStripeServiceInvalidResponse","BingShoppingMeStripeServiceMissingRequiredFields","ShoppingCarouselEntitiesDataServiceFetchError","ShoppingCarouselEntitiesDataServiceEmptyResponse","ShoppingCarouselEntitiesDataServiceInvalidResponse","ShoppingCarouselEntitiesDataServiceInsufficientItems","ShoppingCarouselGenericError","ShoppingCarouselRenderError","ShoppingContentCardServiceFetchError","ShoppingContentCardServiceEmptyResponse","ShoppingContentServiceInvalidData","ShoppingContentServiceInsufficientActiveItems","ShoppingContentServiceMissingFields","FailedToRetrieveAuthTokenFromWDXClient","FailedToRetrieveUserAuthTokenAndMUID","NotificationBellErrors","JsonParseError","WCDataFetchError","WCJsonParseError","WCNewsItemDataFetchError","WCSettingFetchError","WCSettingUpdateError","WCCountInconsistent","ElectionResultMapConnectorErrors","ElectionResultMapInspectorErrors","EmptyResultSummaryError","ElectionResultMapErrors","FetchAndUpdateElectionDataError","ElectionDelegateCounterErrors","TopicByNameFetchFailed","RecommendedTopicsErrors","TopicsDataConnectorFailed","InvalidTopicClick","WebWorkerErrors","FileNotFound","RuntimeError","MessageTimeout","HandledError","WindowsShellInvalidShellContentResponse","Fallback","WindowsShellInvalidContentResponse","WindowsShellEmptyShellContentResponse","WindowsShellFailedToGetContentOnRetry","WindowsShellAskingToFetchNewContentForRetry","ExceptionCallingAuthenticatorApi","AuthenticationAppMessages","AuthRefreshBlockedError","ErrorFetchingAppAnonCookie","EstablishMigrationConsent","MigrationConsentServiceClient","EstablishSignedInState","EdgeChromiumAuthPropertyNotAvailable","EdgeChromiumTokenAccessFailure","SignInStatusCookieMismatch","SSRAppErrors","UntrackedClick","FragmentFetchFailed","DidUseBrowserCacheAPIError","DidUseBrowserCachePolyfillResponseHeaderInvalid","ServerCacheFetchFailed","ConnectorMapInvalid","FetchSSRPageFailed","FetchSSRPageFailedFromInvalidWindowInnerWidth","ServerCacheRefreshFailed","WebEntryFailed","SsrResolverReturnedNullConfig","AppError_InvalidQParams_35001","AppError_ArcResponseNotOk_35003","AppError_ArcResponseUnparsable_35004","AppError_UnknownIrisErrorFound_35006","AppError_TimeoutIrisErrorFound_35007","AppError_TemplateIrisErrorFound_35008","AppError_ClientErrorIrisErrorFound_35009","AppError_DSourceIrisErrorFound_35010","AppError_ActionResponseFailure_35013","AppError_UncaughtErrorDetected_35014","AppError_UnconvertableCreative_35015","AppError_InvalidResponseFormat_35016","AppError_UnparsableSingleResponseJSON_35018","AppError_MissingQueryParams_35019","AppError_MissingContext_35020","AppError_UndefinedRequestParams_35022","AppError_UndefinedAppEnvironment_35023","AppError_MissingAppEnvironmentProperty_35024","AppError_ArcCallFailure_35025","AppError_ArcCallFailureIrisUpdate_35026","SubscriberNotFound","CreativeCountNegativeOrZero","MissingIrisParameterForConditionalBanner","SubscriberNotFoundInIrisPlacementDictionary","FailedToReadNurturingAcceptedFlag","ExceptionRequestingSurfaceInfo","MissingIrisParameterForBackgroundImages","SurfaceCollectionContextMissingParams","IrisPersistChromiumAPIsNotAvailable","IrisGetChromiumAPIsNotAvailable","IrisChromiumAPIsFailure","EdgeChromiumAPIsNotAvailable","AcquireAccessTokenFailed","AcquireAccessTokenHandledFailure","RenderCacheErrors","JssStyleMismatchWarning","JssStyleCriticalMismatchError","PreloadReportingMessages","TtvrMissing","TfprMissing","TtvrSearchBoxMissing","TtfSearchBoxMissing","PrerenderRevalidateException","PushNotificationsLibErrors","FetchKeyError","SubscribeUnsubscribeError","ContentTruncationErrors","OverTruncationError","EmptyFeedWithFeedId","EmptySearchedFeedWithFeedId","EmptySearchedFeedWithFeedQuery","EmptyKidsModeFeed","UnauthorizedFeedResponse","CardViewFeedDataMapperInvalidData","TabRiverRequestEmptyResponse","TabsRequestEmptyResponse","FallingBackToSkipStrategy","FallingBackToFullHeightStrategy","RiverContentProviderFetchNextPageException","InvalidEmptyRiverContent","GridSectionCardRenderFailure","BreakpointOutOfBoundWarning","FinanceServiceImplFile","FinanceAutoSuggestFetchError","FinanceAutoSuggestStatusError","FinanceAutoSuggestInvalidResponseBody","FinanceMostActiveQuotesFetchError","FinanceMostActiveQuotesStatusError","FinanceMostActiveQuotesInvalidResponseBody","FinanceWatchListFetchFailed","FinanceChartFetchError","FinanceChartStatusError","FinanceChartInvalidResponseBody","FinanceQuoteSummaryFetchError","FinanceQuoteSummaryStatusError","FinanceQuoteSummaryInvalidResponseBody","FinanceExchangeFetchError","FinanceExchangeStatusError","FinanceExchangeInvalidResponseBody","FinanceIndicesFetchError","FinanceIndicesStatusError","FinanceIndicesInvalidResponseBody","FinanceEquitiesFetchError","FinanceEquitiesStatusError","FinanceEquitiesInvalidResponseBody","FinanceEquityFinancialsFetchError","FinanceEquityFinancialsStatusError","FinanceEquityFinancialsInvalidResponseBody","FinanceGetAllCurrenciesFetchError","FinanceGetAllCurrenciesStatusError","FinanceGetAllCurrenciesInvalidResponseBody","FinanceGetMicrosoftIdFetchError","FinanceGetMicrosoftIdStatusError","FinanceGetMicrosoftIdInvalidResponseBody","FinanceGetMorningStarIdFetchError","FinanceGetMorningStarIdStatusError","FinanceGetMorningStarIdInvalidResponseBody","FinancePDPUserSettingsWriteFailed","FinanceWatchlistDataVisuallyUnavailable","FinanceQuotesDataVisuallyUnavailable","FinanceChartsDataVisuallyUnavailable","FinanceMoversDataVisuallyUnavailable","FinanceExchangesDataVisuallyUnavailable","FinanceIndicesDataVisuallyUnavailable","FinanceEquitiesDataVisuallyUnavailable","FinanceEquityFinancialsDataVisuallyUnavailable","FinanceCurrenciesDataVisuallyUnavailable","FinanceFundsDataVisuallyUnavailable","FinanceGetMicrosoftIdDataVisuallyUnavailable","FinanceGetMorningStarIdDataVisuallyUnavailable","FinanceEventsDataVisuallyUnavailable","FinanceListsDataVisuallyUnavailable","FinanceListDetailsDataVisuallyUnavailable","FinanceFuturesDataVisuallyUnavailable","FinanceSentimentDataVisuallyUnavailable","FinanceCreatePortfolioFailed","FinanceCreateTransactionFailed","FinanceAddToWatchlistFailed","FinanceSortWatchlistFailed","FinanceDeleteFromWatchlistFailed","FinancePortfolioListFetchError","FinancePortfolioDataFetchError","FinanceDeletePortfolioError","FinanceUpdatePortfolioError","FinanceDeleteTransactionError","FinanceUpdateTransactionError","FinanceAddToPortfolioError","FinanceDeleteFromPortfolioError","FinanceSortPortfolioError","FinanceEventsFetchError","FinanceEventsStatusError","FinanceEventsInvalidResponseBody","FinanceListsFetchError","FinanceListsStatusError","FinanceListsInvalidResponseBody","FinanceListDetailsFetchError","FinanceListDetailsStatusError","FinanceListDetailsInvalidResponseBody","FinanceStockAggregateHoldingsDataFetchError","FinanceStockTopShareholdersDataFetchError","FinanceStockTopBuyersDataFetchError","FinanceStockNewBuyersDataFetchError","FinanceStockTopSellersDataFetchError","FinanceStockTopExitsDataFetchError","FinanceWatchlistFetchWarning","FinanceFollowedListsFetchWarning","FinanceAddToFollowedListsError","FinanceDeleteFromFollowedListsError","FinanceUpdateFollowNumError","FinanceNotificationDataFetchError","FinanceFundIndividualDataFetchError","SocialNoModuleName","SocialExperienceReducerIncorrectArgumentError","SocialDataConnectorNotFound","SocialAPIRequestErrorUnknown","SocialAPIRequestErrorContents","SocialAPIRequestErrorComments","SocialAPIRequestErrorUsers","SocialExperienceRenderErrorReactionBreakdown","SocialExperienceRenderErrorMultilineLogin","SocialExperienceRenderErrorNotificationTray","SocialExperienceRenderErrorOnboarding","SocialExperienceRenderErrorOnbardingThirdParty","SocialExperienceRenderErrorUnknownComponent","SocialExperienceRenderErrorCopyrightForm","SocialExperienceRenderErrorFollowButton","SocialExperienceRenderErrorGradientOverlay","SocialExperienceRenderErrorMain","SocialExperienceRenderErrorNotificationCard","SocialExperienceRenderErrorOnboardingUnderagePage","SocialExperienceRenderErrorPopup","SocialExperienceRenderErrorProfileManageDataPage","SocialExperienceRenderErrorPublisherSubscribeFollowButton","SocialExperienceRenderErrorReactionBreakdownListItem","SocialExperienceRenderErrorReportMenu","SocialExperiencePublisherIsFollowedFetchError","SocialExperiencePublisherFollowUnfollowError","UnknownBulkLoadGraphActionType","WindowsCardProviderResponseWasNullOrErroneous","WindowsCardProviderErrorFetchingData","WindowsCardProviderEmptyContentResponse","CommonHeaderNavigationFailed","CommonHeaderInvalidConfig","CommonHeaderMissingFormCode","CommonHeaderRenderError","CommonHeaderInvalidUrl","NtpSettingsPrivateNotAvailable","NtpSetPrefFailureToWrite","NtpGetPrefFailureToRead","PreferenceSettingApiNotAvailable","PreferenceSettingKeyNotAvailable","PreferenceSettingDidNotSave","PreferenceKeyMissingUnexpectedly","targetActionCTA","SetDefaultBrowserException","SetDefaultBrowserNotAvailable","AppPinningPrivateException","DesktopWidgetPrivateNotAvailable","WebWidgetLaunchApiNotAvailable","WebWidgetEnableAutoStartApiNotAvailable","FailedToLaunchAndDefaultWebWidget","FinanceInvestorTopHoldingsDataFetchError","Exceptional","FinanceInvestorTopNewHoldingsDataFetchError","FinanceInvestorTopExitedHoldingsDataFetchError","FinanceInvestorTopIncreasedHoldingsDataFetchError","FinanceInvestorTopDecreasedHoldingsDataFetchError","FinanceInvestorProfileDataFetchError","FinanceSentimentDataFetchError","FinanceSentimentDataStatusError","FinanceSentimentDataInvalidResponseBody","FinanceSearchEventsFetchError","FinanceSearchEventsStatusError","FinanceSearchEventsInvalidResponseBody","FinanceSearchEventsDataVisuallyUnavailable","SocialBarExperienceRenderErrorContentSocialBar","SocialBarExperienceRenderErrorReactionMenu","SocialBarExperienceRenderErrorSocialBarPanel","SocialBarExperienceRenderErrorUnknownComponent","SocialCommentExperienceRenderErrorComment","SocialCommentExperienceRenderErrorCommentBox","SocialCommentExperienceRenderErrorCommentItem","SocialCommentExperienceRenderErrorCommentList","SocialCommentExperienceRenderErrorContentPanel","SocialCommentExperienceRenderErrorDeleteMenu","SocialCommentExperienceRenderErrorDisabledMessage","SocialCommentExperienceRenderErrorFollowButton","SocialCommentExperienceRenderErrorProfileEducator","SocialCommentExperienceRenderErrorReactionMenu","SocialCommentExperienceRenderErrorReactionPanel","SocialCommentExperienceRenderErrorReplyList","SocialCommentExperienceRenderErrorReportMenu","SocialCommentExperienceRenderErrorSortBox","SocialCommentExperienceRenderErrorTypingUsers","SocialCommentExperienceRenderErrorUserCard","SocialCommentExperienceRenderErrorUnknownComponent","WceInitializationException","PublisherCarouselDataMapperError","UndefinedRenderToastCallback","UndefinedExpireToastCallback","AppEnvironment","_serviceUrl","_configServiceOverride","_serviceDomainOverride","initializeAppEnvironment","ecasession","browserOptOut","wpoData","addWpoFlights","activityId","ClientSettings","aid","environmentConfigUrl","process","env","WEBPACK_DEV_SERVER","set","searchParam","contentServiceUrlBase","currentRequestTargetScope","currentMarket","enableFiveColLayout","environment","staticDomain","appType","authCookieName","useOneServiceAuthEndpoints","useOneServiceAnonAuthEndpoints","useAuthFetch","accountInfoPromise","resolvedAccountInfo","buildVersion","clarityEnabled","isWinAADUser","rootTelemetryId","trackInfo","getUserMuid","userId","oneServiceApiKey","showMnsCreatorDashboard","currentContentLinkHost","isCnDomain","serviceUrlBase","feedServiceUrlBase","enterpriseServiceDomainUrl","CurrentRequestTargetScope","audienceMode","Enterprise","ResolvedAccountInfo","account_type","AAD","isFrePage","disableCachingConfigs","queryParamOverride","toLocaleLowerCase","enableConfigService","EnableCMSPPEConfigs","isMultiConfigRetrievalEnabled","disableContentPreviewCache","sendFeedCallActivityIdInHeader","disableContentCacheIDBRead","configServiceBaseUrl","featureFlags","configRootUrl","cacheBustingIdentifier","isGitConfigs","countryCode","latitude","longitude","configCacheProperties","configOrigins","feature","Production","loc","IsGitConfigs","EnableConfigService","serviceUrl","configServiceOverride","serviceDomainOverride","_instance","appEnvironment","environmentFromHeadData","clientSettings","endsWith","useCnDomain","tryReformatGuid","Locale","apps_locale","geo_country","geo_lat","geo_long","pcsInfo","setAccountInfoPromise","apptype","getAuthCookieName","disableActivityIdInHeader","Edge","Hub","cbid","runtimePropertyBagInfo","pcsVersion","v","bundleInfo","alias","configsHash","locConfigsHash","buildAlias","bundleHash","configHash","locHash","configIndexDocId","rootElement","envQSOverwrite","prod","servicesEndpoints","pcsProvidedDomainUrl","feedService","domain","serviceDomainUrl","enterpriseFeedService","crsVersion","crs","crsDomain","getAttribute","Number","trackPageProd","trackPageTypeVal","sitePage","page_product","page_type","createContentLinkHost","setTargetScope","useGitConfigs","addHubWindowsFlight","setConfigOrigin","MMX","IsMmxWwwContentRequest","mmxExperimentContentHost","useMultiConfigsRetrieval","baseUrl","getConfigServiceBaseUrl","indexOf","includes","getOneServiceApiKey","apiKey","WindowsShell","BingHomepage","SharedWidgets","NewsAndInterests","WindowsNewsPlus","muid","muidCookie","relativePath","IsCnDomain","renderWidgets","urlQuery","param","flights","pageExperiments","Windows","pagetype","Anon","AppAnon","FirstParty","MicrosoftNews","Views","Community","Weather","Finance","HomePage","Hybrid","EdgeChromium","Office","AccountInfoPromise","Promise","resolve","chrome","authPrivate","getPrimaryAccountInfo","startTime","Math","round","performance","now","accountInfo","endTime","ZHCN","guid","matches","Kids","getEnterpriseOverride","Adult","browser","deviceFormFactor","locale","os","platform","Web","pageType","stringHasData","market","CurrentFlights","model","FeatureFlags","wpoEnabled","WPOModel","getWpoModel","flightsCached","lowerCaseFlightsCached","map","flight","currentPageExperiments","concat","getObject","getAppEnvironment","getInstance","resetInstance","defaultExpirationTimeMs","defaultForceExpirationTimeMs","expirationPrefix","forceTimestampPrefix","jssMapSuffix","keysPrefix","normalizedUrlConfigkey","storagePrefix","riverRcClassName","PlatformType","getWpoFlights","treatments","filter","item","UrlUtility","primeForbiddenCharacters","getParamsFromUrl","decodeComponents","getParams","decodeURIComponentWithPlusSign","val","queryString","substring","queryArray","ndx","parts","queryKey","newParam","existingParam","entry","encodeURIComponentForPrime","uriComponent","encodeURIComponent","getParamsWithItems","queryItems","findIndex","hrefParamsObj","getParamsObj","paramsObj","paramArray","keyValuePair","isValidUrl","validateScheme","keyValueArrayToQueryString","kv","isKeyValuePair","joinSubpathToURL","subPath","trimmedEndSlashFromHref","trimmedStartSlashFromSubpath","updateSearchParam","appendSearchParam","fallback","getAbsoluteUrl","partialUrl","appTypeExpectedFlightMap","Map","SuperApp","Traffic","getPeregrineFlights","cleanedUpFlights","lowercaseItem","trim","shouldUseGitConfigs","version","expectedGitFlight","prgFlights","containsGitConfigsFlight","ariaLabelAttribute","rootElementId","htmlElementIds","html","head","body","applicationCacheConstants","manifestAttributeName","pagesRefreshData","pagetypeSettings","js","telemetryId","trackPageProduct","trackPageType","minimumHostPagePathSegments","anonCookieName","appAnonCookieExistsCookieName","childCookieName","nurturingAcceptedStateKey","EnterpriseToConsumerOverrideKey","oneServiceHeaders","adsReferer","authorization","entAuthorization","rpsToken","taboolaSessionId","oneServiceReponseHeaders","traceId","idxIdKey","oneServiceQueryStringKeys","actionType","complexInfoPaneEnabled","contentType","cookieWallPresent","delta","disableTypeSerialization","infopaneCount","fdhead","feedLayoutRequestType","ids","mobile","parentContentId","parentNamespace","parentTitle","queryQ","query","queryType","qScope","responseSchema","select","session","signInCookieName","skip","targetType","timeOut","top","type","user","wrapOData","infoPaneItemCount","newsTop","newsSkip","collectionIds","listIds","requireQuoteDetail","exchangeCode","topNum","skipNum","eventType","AriaRoles","DeviceOrientation","CoreLocalStorageKeys","pageVersions","SelectedPivotStorageId","SubscriptionProductTypes","start","cookie","referer","userAgent","resetRequestData","getRequestData","Telemetry","tryParseJson","jsonString","tryParseInt","defaultValue","parseInt","isNaN","tryStringifyJson","jsonObj","SignedInStatus","AccountType","AadAccountType","PageType","AudienceModeType","getLocalStorageInline","localStorage","renderCacheObject","windowAvailable","batchCSS","batchCss","styles","getElementsByTagName","dataset","jss","innerHTML","scrapeDom","includeNewsFeed","root","getElementById","rivers","getElementsByClassName","river","outerHTML","getStateFromRenderCache","renderCache","storage","renderCacheKeys","renderCacheStoredKeys","getItem","renderCacheKeyOfNormalizedKeys","keyn","expn","frcn","jssn","cacheExpirationTimestamp","parsedCacheExpirationTimestamp","Date","getTime","renderCacheStorage","dom","batch_css","getRenderCache","state","initialState","reduxStoreStringifyReviver","getNormalizedLocationHref","configParamsList","normalizeKeyParamsList","normalizeUrlQsp","getNormalizeKeyParamsList","normalizedParams","setNormalizeKeyParamsList","setItem","dataType","SameSiteValues","getCookie","cookieString","getMuidCookie","setRequireFunctionalCookie","expiryDays","path","secure","sameSiteValue","expiryDate","builder","date","setTime","toUTCString","Lax","None","logger","canUseDOM","createElement","RegionScope","AccessTokenStatus","clientId","oneServiceScope","oneServiceFriendlyName","eNtpChromiumVersion","isAppCache","applicationCache","currentFlights","cookieMapInline","loggingEndpoint","getPageSettings","settingsJson","getCookieInline","cookiePairs","index","cookieKeyValue","normalizedName","Product","mmx","edge","edgeChromium","hybrid","hub","microsoftNews","office","globalLimitErrorQueue","maxLength","list","payload","logError","appErrorId","propertyBag","settingsObject","flightIds","clientInfo","storedHeadData","storedHeadDataString","responseClientSettings","responseFlights","pageGenTime","getCurrentFlights","uploadTime","isProd","cors","apikey","w","anoncknm","getLoggingParameters","iKey","iKeyIndex","getIKeyValue","product","pageProduct","getCookieConsentRequired","time","baseData","baseType","page","request","mkt","extSchema","getLoggingPayload","formatParams","navigator","sendBeacon","_connectorMap","_globalConnectors","_allConnectors","_getDataConnectorPendingPromises","namespace","dataConnector","connector","pendingPromise","promise","resolveCallback","rejectCallback","reject","actionPayload","newState","stateChanged","connectorKey","typeIsString","statePropertyKey","connectorState","experienceFullNamespace","dataConnectorName","initializeExperience","isGlobal","merge","connectorReducerResult","computeNextStateForConnector","reportStateChange","fullNamespace","delete","store","dispatch","connectorPreviousState","nextStateForConnector","subReduce","reducer","connectorStateChanged","previousState","reducedState","designSystemMap","designSystemIndexMap","createGenerateClassName","designSystem","dsKey","dsName","dsIndex","rulesMap","rule","sheet","enhancer","middlewares","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","trace","traceLimit","_rootReducer","needsHydrate","hasPreHydrateState","_store","rootReducer","connectors","onApplicationStart","connectedTopLevelElement","hostElement","bypassJSS","isSSR","updateJssManagerInstance","pageTimings","startMark","hydrate","endMark","render","widgetElement","createGenerateClassNamePlugin","jssInstance","plugins","getLocalStorage","safeLocalStorage","supported","parsedObj","removeItem","matchingKeys","storageKey","super","BrowserType","getStoredHeadDataKey","clientData","enableCMSPPEConfigs","initializeHeadData","marketDir","currentFlightSet","userIsSignedIn","isPreload","isPrerender","isAppcache","isBlendedEnterprise","isMmxWwwContentRequest","isServiceWorkerCache","lastKnownAppVersion","ssoComplete","aadState","headData","initializeFromData","newRidNeeded","lastUsedActivityIdBacking","htmlElement","headElement","initializeFromDom","serviceWorker","controller","initializeFromStorage","initializeLastUsedActivityId","clientSettingsLocaleExists","script","setQueryItemProvidedValues","headDataJs","headJs","anonckname","signedin","visibilityState","logDocumentVisibility","setIsBlendedEnterprise","setIsMmxWwwContentRequest","getStoredActivityIdKey","storedActivityIdJson","ts","storedHeadDataJson","getStoredHeadData","headDataResponse","setStoredHeadData","setFlights","dataClientSettings","calculateForwardableParams","pageTypeFromSettings","storedVersions","currentDomVersion","setObject","logPrefix","currentPageStoredHeadData","populateFromApiResponse","response","domQueryParams","queryparams","currentPageVersion","lowerCaseParams","availableParams","paramValue","x","forwardablequeryparams","lastUsedAid","lastUsedActivityId","currentAid","pageGenTimestamp","parseISO","flightString","IsBlendedEnterprise","browserType","cmsItem","find","setCurrentFlightsTestOverride","isVisible","addEventListener","getHeadData","ErrorBehavior","Utility","isNotNullOrUndefined","isDefined","potentialKeyValuePair","isKey","isValue","isNonNullObject","isNotNull","isNullOrWhiteSpace","toNumber","arrayHasData","constructor","Array","objectToString","firstRun","attribute","removeHyphens","input","updateResolverAppErrorsPropertyBag","CrsFetchTimeout","FallbackResolverAppErrors","RecursiveGetFailed","BlobFetchReturnedNull","_pageTimings","_secondaryPageTimings","getPageTimings","incrementCounter","counterName","isPreTTVRCounter","existingCount","Environment","getEnvironmentFromString","int1","int","intpr","intpef","ConfigOrigin","AuthCookieName","AuthCookieExistsCookieName","callbackMap","getDataConnector","initializeDataConnectorTracker","tryGetDataConnector","reportDataConnectorStateChange","callbacks","jssGeneratedClassesMap","jssCaptureCompleted","removeRenderCache","removeSubstringKeys","captureJssGeneratedClasses","renderCacheEnabled","dataConnectorToExperienceKeyMap","createStatePropertyKey","dataConnectorInjector","registerInjection","experienceSet","add","appState","experienceStatePropertyKey","initialDataConnectorState","dataConnectorNamespace","newDataConnectorState","experienceKeys","experienceKey","experiencePreviousState","canMatchMedia","matchMedia","maxWidthValues","minWidthValues","minWidth","maxWidth","Infinity","minBreakpoint","maxBreakpoint","getLocationHref","getLocationHostname","getLocationHost","getLocationOrigin","getLocationSearch","getLocationPathname","getCookieString","getDocumentElementById","elementId","getDocumentElementsByTagName","tagName","getIndexedDB","indexedDB","getInnerHeight","getCssGridSupport","createScriptTag","src","loadAsync","crossOrigin","className","scriptElement","setAttribute","async","NONCE_ID","nonce","PerfMarker","endMarkSuffix","initialize","instance","singleMark","measureStartEnd","mark","clearMarks","clearMeasures","getPromise","experienceName","perfMarkers","perfEntries","getEntriesByType","markerName","perfMarkerDetail","PerfMarkerDetail","processPerfEntry","isValid","measure","perfMarker","duration","perfEntry","firstStartTime","Market"],"mappings":"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","file":"startup.abc5e9e29226ae3ea949.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t611: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/bundles/v1/hybrid/buildNumber/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1936,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * This will decide whether to create Alert for this app error or no alert. This can generate IcM ticket.\r\n * Alerts ones are tracked at http://aka.ms/AppErrors\r\n * NoAlerts will have separate tab just next to Errors aka Warnings. IcM ticket won't be generated when NoAlert is set.\r\n */\r\nexport enum Severity {\r\n /**\r\n * This is app error with default severity\r\n */\r\n Alert,\r\n\r\n /**\r\n * This is app warning\r\n */\r\n NoAlert,\r\n\r\n /**\r\n * This app error has high user impact\r\n */\r\n HighImpact,\r\n\r\n /**\r\n * This is fatal app error\r\n */\r\n Critical\r\n}","// © Microsoft Corporation. All rights reserved.\r\n/**\r\n * Default query param prefix used if none specified\r\n */\r\nexport const DefaultQueryParamPrefix = \"rd\";\r\n/**\r\n * Generates a plain JavaScript object with the client values.\r\n * @param values The values to convert.\r\n */\r\nfunction objectFromSpecification(values) {\r\n const requestDataValue = values;\r\n if (requestDataValue.clientValue !== undefined) {\r\n // If it's a IRequestDataValueSpecification, return the actual getter\r\n return requestDataValue.clientValue;\r\n }\r\n // Otherwise recurse for each key until we find a plain value type\r\n return Object\r\n .keys(values)\r\n .reduce((pv, cv) => (Object.assign(Object.assign({}, pv), { [cv]: objectFromSpecification(values[cv]) })), {});\r\n}\r\n/**\r\n * Allows you to pass data about a request between client and server.\r\n * This interface can be used isomorphically.\r\n *\r\n * The \"spec\" contains \"getters\" to receive the data when called client side.\r\n * To operate server-side you must first serialize the client-side data and pass it via\r\n * query string parameters to the server. You then \"load\" the query string parameters using\r\n * \"loadQueryParams\". Once loaded you can request the data server-side with the same\r\n * interface as the client.\r\n *\r\n * NOTE: The use of URLSearchParams makes this not IE11 compatible without polyfill.\r\n *\r\n * @example\r\n * interface IRequestContext extends IRequestDataObject {\r\n * window: {\r\n * innerWidth: IRequestDataValue\r\n * }\r\n * }\r\n *\r\n * // On client and server\r\n * const rd = new RequestData(\r\n * {\r\n * window: {\r\n * innerWidth: {\r\n * clientValue: window.innerWidth\r\n * }\r\n * }\r\n * });\r\n *\r\n * // Client-side\r\n * const innerWidth = rd.data.window.innerWidth();\r\n *\r\n * const serialized = rd.getSerializedData();\r\n * // Make-call to server\r\n * fetch(`https://assets.msn.com/render?${serialized}`);\r\n *\r\n * // Server-side (in default module)\r\n * requestData.loadQueryParams(req.query)\r\n * const innerWidth = rd.data.window.innerWidth();\r\n */\r\nexport class RequestData {\r\n /**\r\n * @param spec Spec contains serialization metadata as well as client and server value getters\r\n * @param qspPrefix Prefix to append to serialized query string parameters\r\n */\r\n constructor(spec, qspPrefix) {\r\n this.spec = spec;\r\n this.qspPrefix = qspPrefix || DefaultQueryParamPrefix;\r\n }\r\n get verParam() {\r\n return `${this.qspPrefix}.ver`;\r\n }\r\n /**\r\n * Will return memoized values in the same structure as IRequestDataSpecification,\r\n * or the data loaded into\r\n */\r\n get data() {\r\n if (this.memo === undefined) {\r\n // Assume we're client-side if we haven't memoized query string params\r\n this.memo = objectFromSpecification(this.spec.spec);\r\n }\r\n return this.memo;\r\n }\r\n /**\r\n * Loads all query string parameters prefixed with qspPrefix into request data.\r\n * @param qsp The query string params to parse. It is safe to pass in the entire query--not just data prefixed by qspPrefix.\r\n */\r\n loadQueryParams(qsp) {\r\n if (this.memo !== undefined) {\r\n throw \"overwriting existing query string parameters.\";\r\n }\r\n const ver = qsp.get([this.qspPrefix, \"ver\"].join(\".\"));\r\n if (ver !== this.spec.ver) {\r\n throw `unmatched spec version: expected \"${this.spec.ver}\" but got ${ver}.`;\r\n }\r\n this.memo = {};\r\n // Load each query string parameter one at a time\r\n qsp.forEach((value, qp) => {\r\n if (!qp.startsWith(this.qspPrefix)) {\r\n // We don't belong in this set (we don't have the right prefix)--ignore.\r\n return;\r\n }\r\n if (qp === this.verParam) {\r\n // Skip version\r\n return;\r\n }\r\n // Split key by dots and remove prefix\r\n const split = qp.split(\".\").slice(1);\r\n let current = this.memo;\r\n split.forEach((key, i) => {\r\n let newValue = {}; // assume object unless last in list\r\n if (i === split.length - 1) {\r\n try {\r\n newValue = () => JSON.parse(value);\r\n }\r\n catch (ex) {\r\n // Reset memo to undefined and re-throw\r\n this.memo = undefined;\r\n throw ex;\r\n }\r\n }\r\n if (!Object.prototype.hasOwnProperty.call(current, key)) {\r\n current[key] = newValue;\r\n }\r\n if (typeof newValue === \"object\") {\r\n // Already exists--don't overwrite\r\n current = current[key];\r\n return;\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * Gets the stored values serialized as strings\r\n */\r\n getURLSearchParams() {\r\n const params = new URLSearchParams();\r\n /**\r\n * recurse traverses the data object to build dotted prefixes.\r\n * e.g.\r\n * { a: { b: { c: 5 } } } becomes a.b.c=5\r\n */\r\n const recurse = (obj, prefix) => {\r\n Object.keys(obj).forEach(k => {\r\n const current = obj[k];\r\n const currentPrefix = [...prefix, k];\r\n if (typeof current === \"object\") {\r\n recurse(current, currentPrefix);\r\n return;\r\n }\r\n // This will put explicit quotes (%22) around strings in the query, which is intentional\r\n // so JSON.parse is able to determine the correct type for the value.\r\n params.append(currentPrefix.join(\".\"), JSON.stringify(current()));\r\n });\r\n };\r\n recurse(this.data, [this.qspPrefix]);\r\n params.sort();\r\n // Version is always at the end\r\n params.append(this.verParam, this.spec.ver);\r\n return params;\r\n }\r\n /**\r\n * Sort the search params and serialize them to string.\r\n */\r\n getSerializedData() {\r\n return this.getURLSearchParams().toString();\r\n }\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n// These values should match those found in experiences-base/ColumnWidths.ts\r\nconst DefaultSize2ColumnWidth = 624;\r\nconst DefaultSize3ColumnWidth = 948;\r\nconst DefaultSize4ColumnWidth = 1272;\r\n\r\nconst contentBuffer = 32;\r\n\r\n// The breakpoints to determine the breakpoint from\r\nexport const breakpoints: number[] = [\r\n 0,\r\n DefaultSize2ColumnWidth + contentBuffer,\r\n DefaultSize3ColumnWidth + contentBuffer,\r\n DefaultSize4ColumnWidth + contentBuffer\r\n];","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { breakpoints } from \"./SSRInteropContractHelpers\";\r\nimport { identifyBreakpoint } from \"@microsoft/fast-layouts-react\";\r\n\r\n/**\r\n * The param-name prefix used when serializing params onto the query string.\r\n */\r\nexport const SSRRequestDataPrefix = \"rd\";\r\n\r\n/**\r\n * Defines the \"interop\" contract between client and server-side renderer.\r\n * All of these values will be serialized into request parameters to be passed\r\n * on the HTTP request to the SSR server.\r\n */\r\nexport const SSRContract = {\r\n ver: \"0.1.0\",\r\n spec: {\r\n // IWindow\r\n innerWidth: {\r\n clientValue: () => window.innerWidth\r\n },\r\n innerHeight: {\r\n clientValue: () => window.innerHeight\r\n },\r\n outerWidth: {\r\n clientValue: () => window.outerWidth\r\n },\r\n breakpoint: {\r\n clientValue: () => identifyBreakpoint(window.innerWidth, breakpoints)\r\n },\r\n locationHash: {\r\n clientValue: () => window.location.hash\r\n },\r\n locationHref: {\r\n clientValue: () => window.location.href\r\n },\r\n locationHost: {\r\n clientValue: () => window.location.host\r\n },\r\n locationHostName: {\r\n clientValue: () => window.location.hostname\r\n },\r\n locationOrigin: {\r\n clientValue: () => window.location.origin\r\n },\r\n locationPathName: {\r\n clientValue: () => window.location.pathname\r\n },\r\n locationProtocol: {\r\n clientValue: () => window.location.protocol\r\n },\r\n locationSearch: {\r\n clientValue: () => window.location.search\r\n },\r\n screenTop: {\r\n clientValue: () => window.screenTop\r\n },\r\n screenY: {\r\n clientValue: () => window.screenY\r\n },\r\n // IBrowser\r\n canUseCssGrid: {\r\n clientValue: () => ((window.CSS && window.CSS.supports && CSS.supports(\"display\", \"grid\")) || false)\r\n },\r\n // IDevice\r\n devicePixelRatio: {\r\n clientValue: () => window.devicePixelRatio\r\n },\r\n // ILocale\r\n language: {\r\n clientValue: () => document.documentElement.lang\r\n },\r\n direction: {\r\n clientValue: () => document.documentElement.dir\r\n }\r\n }\r\n};\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { AppEnvironment, appEnvironment } from \"../app/AppEnvironment\";\r\nimport { IRequestContext, IRequestData } from \"./IRequestContext\";\r\nimport { IRequestDataInteropValue, IRequestDataSpecification, RequestData } from \"@msnews/ssr-server\";\r\nimport { SSRContract, SSRRequestDataPrefix } from \"@msnews/isomorphic-util\";\r\n\r\n/**\r\n * Defines the parameters used to create a request contract.\r\n * Destructured from an object due to the combinations of parameters that are valid.\r\n */\r\nexport interface IRequestContextContract {\r\n /**\r\n * URL Search params that contain request data (client-side values sent to the server).\r\n * Only required when called server-side\r\n */\r\n params?: URLSearchParams;\r\n\r\n /**\r\n * The prefix to use to pull query params related to request data.\r\n */\r\n qspPrefix?: string;\r\n\r\n /**\r\n * The specification defining what request data should be passed between client and server.\r\n */\r\n spec?: IRequestDataSpecification;\r\n}\r\n\r\n/**\r\n * Used to propagate client-only data (like window.innerWidth) and singletons (like AppEnvironment)\r\n * in a non-global way to assist in making all libs/components/experiences isomorphic.\r\n */\r\nexport class RequestContext implements IRequestContext {\r\n private requestData: RequestData;\r\n private RequestId: string;\r\n\r\n /**\r\n * Create a new request context.\r\n *\r\n * If spec or qspPrefix is not provided it will use the defaults specified in \"@msnews/isomorphic-util\"\r\n *\r\n * @param IRequestContextContract parameters used to initialize the request context\r\n */\r\n constructor({ params, qspPrefix, spec }: IRequestContextContract = {}, requestId?: string) {\r\n this.requestData = new RequestData(spec || SSRContract, qspPrefix || SSRRequestDataPrefix);\r\n if (params) {\r\n this.requestData.loadQueryParams(params);\r\n }\r\n if (requestId) {\r\n this.RequestId = requestId;\r\n }\r\n }\r\n\r\n /**\r\n * The request ID is used to distinguish requests server-side.\r\n * This method passes through the app environment ActivityId\r\n */\r\n public get requestId(): string {\r\n return this.RequestId || this.app.ActivityId;\r\n }\r\n\r\n /**\r\n * The current app environment.\r\n */\r\n public get app(): AppEnvironment {\r\n // TODO: Remove global reference and add to the constructor parameters.\r\n // The constructor should create a new app environment or accept an optional override.\r\n return appEnvironment;\r\n }\r\n\r\n /**\r\n * The current request data. i.e. client-side data that is passed\r\n * between client and server.\r\n */\r\n public get data(): IRequestData {\r\n return this.requestData.data;\r\n }\r\n}\r\n\r\n/**\r\n * Get clientValue from data getter.\r\n * @param dataGetter the data getter to get client-side value from spec\r\n * @param dataName the data name\r\n * @param throwException If true, throws an exception\r\n */\r\nexport function getContextData(dataGetter: any, dataName: string, throwException = true) {\r\n if ((typeof(dataGetter) === \"function\")) {\r\n const value = dataGetter();\r\n if (value || value === 0) {\r\n return value;\r\n }\r\n }\r\n if (throwException) {\r\n throw new Error(\"Expected \" + dataName + \" to return value. Possible invalid RequestContext spec used or the spec doesn't contain this data.\");\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Get current URL from request context. in browser, it has the same value with window.location.href\r\n * @param context the request context\r\n */\r\nexport function safeGetLocationHref(context: IRequestContext): string {\r\n return getContextData(context.data.locationHref, \"locationHref\", false);\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Enum for different app types\r\n * @enum\r\n */\r\nexport enum AppType {\r\n BingHomepage = \"bingHomepage\",\r\n Community = \"community\",\r\n ContentTools = \"contentTools\",\r\n Edge = \"edge\",\r\n EdgeChromium = \"edgeChromium\",\r\n Finance = \"finance\",\r\n FirstParty = \"firstParty\",\r\n HomePage = \"homePage\",\r\n Hub = \"hub\",\r\n MediaSvc = \"mediasvc\",\r\n Hybrid = \"hybrid\",\r\n MicrosoftNews = \"microsoftNews\",\r\n MMX = \"mmx\",\r\n NewsAndInterests = \"newsAndInterests\",\r\n Office = \"office\",\r\n qna = \"qna\",\r\n Recipes = \"recipes\",\r\n SharedWidgets = \"sharedWidgets\",\r\n SuperApp = \"superApp\",\r\n Shopping = \"shopping\",\r\n Traffic = \"traffic\",\r\n Travel = \"travel\",\r\n UGC = \"ugc\",\r\n Views = \"views\",\r\n Weather = \"weather\",\r\n Windows = \"windows\",\r\n WindowsNewsPlus = \"windowsNewsPlus\",\r\n WindowsShell = \"windowsShell\",\r\n WindowsNewsBar = \"windowsNewsbar\"\r\n}\r\n\r\n/**\r\n * Card style mode\r\n */\r\nexport enum CardStyleMode {\r\n Default = \"Default\",\r\n WinDashboard = \"WinDashboard\",\r\n Edge = \"Edge\"\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { ILoggingService } from \"clientcore-infrastructure-analytics/ILoggingService\";\r\nimport { Logger, logger } from \"./Logger\";\r\nimport { getQueryParameterByName } from \"./Util\";\r\nimport { canUseDOM } from \"@msnews/isomorphic-util\";\r\n\r\ndeclare global {\r\n interface Window {\r\n webpackRequire: any;\r\n }\r\n}\r\n\r\ndeclare let __webpack_require__: any;\r\n\r\n/**\r\n * Logger that simply logs to console with minimum dependencies.\r\n * Used for bootstrap/inline script where we don't need any logging nor its dependencies.\r\n */\r\nexport class LiteLogger implements Logger {\r\n\r\n /** Backing field for the isDebug function */\r\n private isDebugEnabled: boolean;\r\n\r\n /**\r\n * The constructor\r\n */\r\n public constructor() {\r\n if (canUseDOM()) {\r\n this.isDebugEnabled = ((getQueryParameterByName(window.location.href, \"debug\") || \"\").toLowerCase() in { 1: 1, true: 1 });\r\n\r\n // On debug mode, make webpack_require available as global function\r\n // so any code in packages could be triggered from console. Handy for debugging.\r\n if (this.isDebugEnabled && !global[\"TEST_ENV\"]) {\r\n window.webpackRequire = __webpack_require__;\r\n }\r\n } else {\r\n this.isDebugEnabled = false; // isDebugEnabled should be set explictly using the setDebug method\r\n }\r\n }\r\n\r\n /**\r\n * Returns the logging service\r\n * @returns {ILoggingService}\r\n */\r\n public getLoggingService(): ILoggingService {\r\n return null;\r\n }\r\n\r\n /**\r\n * Checks whether we're running in debug mode.\r\n * @returns True when either debug=1 or debug=true is present as a query param, otherwise false.\r\n */\r\n public isDebug(): boolean {\r\n return this.isDebugEnabled;\r\n }\r\n\r\n /**\r\n * Override the isDebug setting. Useful when server side rendering.\r\n */\r\n public setDebug(isDebug: boolean): void {\r\n this.isDebugEnabled = isDebug;\r\n }\r\n\r\n /**\r\n * Set the tags to filter logs.\r\n * @param tags Tags to filter logs. If empty, do not filter.\r\n */\r\n public setTags(tags: string[]): void {\r\n // Not supported in console logger at the moment\r\n }\r\n\r\n /**\r\n * Log console message.\r\n * Note that these are not output to the console unless you're in debug mode.\r\n * @param message - Message to log.\r\n * @param tags - Optional tags for specifying log type for filtering logs.\r\n */\r\n public log(message: string, tags?: string[]): void {\r\n if (this.isDebug()) {\r\n console.info(message);\r\n }\r\n }\r\n\r\n /**\r\n * Log error message.\r\n * @param message - Message to log\r\n */\r\n public logError(message: string): void {\r\n console.error(message);\r\n }\r\n\r\n /**\r\n * Lazy log console message. Use this when the message being constructed is complex or expensive so that it's only evaluated if needed.\r\n * Note that the callback is not invoked and the message is not output unless you're in debug mode.\r\n * @param getMessage - The function to call to get message to log\r\n */\r\n public logCallback(getMessage: () => string): void {\r\n if (this.isDebug()) {\r\n console.info(getMessage());\r\n }\r\n }\r\n\r\n /**\r\n * Log the objects to the console.\r\n * Note that these are not output to the console unless you're in debug mode.\r\n * @param message - Array of messages to log\r\n */\r\n public logObjects(...message: any[]): void {\r\n if (this.isDebug()) {\r\n console.log(...message);\r\n }\r\n }\r\n\r\n /**\r\n * Log the object to the console.\r\n * Note that these are not output to the console unless you're in debug mode.\r\n * @param message - Array of messages to log\r\n */\r\n public logSingleObject(message: any, isMetrics: boolean): void {\r\n if (this.isDebug()) {\r\n console.log(message);\r\n }\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Utility method to extract query string param in url.\r\n * @param name - Query param name\r\n * @returns Query param value\r\n */\r\nexport function getQueryParameterByName(locationHref: string, name: string): string {\r\n\r\n const nameRegEx = name.replace(/[[\\]]/g, \"\\\\$&\");\r\n const regex: any = new RegExp(\"[?&]\" + nameRegEx + \"(=([^&#]*)|&|#|$)\");\r\n\r\n const queryNameValueMatches: any = regex.exec(locationHref);\r\n if (!queryNameValueMatches) {\r\n return null;\r\n }\r\n\r\n // the second group would contain the value of the param\r\n const queryValue = queryNameValueMatches[2];\r\n\r\n return decodeURIComponent(queryValue.replace(/\\+/g, \" \")) || \"\";\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { minimumHostPagePathSegments } from \"../constants\";\r\n\r\n/**\r\n * The HostPage interface uses words defined by the Prime project for us to locate in what hostpage\r\n * the Feeds project is running.\r\n */\r\nexport interface IHostPage {\r\n originalUrl: string; // ex: https://www.msn.com/spartan/ntp/interests/my?fdhead=gizmodemo\r\n verticalKey: string, // ex: spartan or compass\r\n categoryKey: string, // ex: dhp or ntp\r\n hostName: string, // ex: www.msn.com\r\n topDomain: string, // ex: msn.com or msn.cn\r\n subcategoryKey?: string // ex: interests or discover\r\n}\r\n\r\nexport namespace HostPage {\r\n /**\r\n * This function extracts the hostPage information from the passed in href. This is based on the\r\n * Prime pathname convention of \"/vertical/category/subcategory\". If the passed href does not have at least the\r\n * category, then null is returned instead as this is considered an invalid URL.\r\n * @param {string} href - The URL, which will be used to extract the hostPage\r\n * @returns {IHostPage | null}\r\n */\r\n export function getHostPageFromUrl(href: string): IHostPage | null {\r\n if (!href) { return; }\r\n const url = new URL(href);\r\n\r\n const host = url.hostname;\r\n const pathnameSegments = url.pathname.split(\"/\");\r\n\r\n // for cookie stamping that needs the msn.com or msn.cn path isntead of using the full host value\r\n const topDomainName = (host.match(/[^.]+\\.[^.\\d]+$/) || {})[0] || \"\";\r\n\r\n /**\r\n * The + 1 in the following statement is take into account the empty string \"segment\"\r\n * that would be to the left of the first backslash in a valid path like \"/spartan/ntp\"\r\n */\r\n if (pathnameSegments.length <= minimumHostPagePathSegments) {\r\n return {\r\n originalUrl: href,\r\n categoryKey: null,\r\n verticalKey: null,\r\n hostName: host,\r\n topDomain: topDomainName\r\n }; // When the user url doesn't have atleast two pathsegments the vertical and category keys are null\r\n }\r\n\r\n /**\r\n * Consider path segments that have market in it e.g.\r\n * /en-us/news/other/title/ar-cmsId\r\n * /en-us/video/animals\r\n * /en-us/sports/nfl/scores\r\n */\r\n const isMarketPresent = pathnameSegments[1].length === 5 && pathnameSegments[1].split(\"-\").length === 2;\r\n const indexOffset = isMarketPresent ? 1 : 0;\r\n\r\n const hostPage: IHostPage = {\r\n originalUrl: href,\r\n categoryKey: pathnameSegments[2 + indexOffset],\r\n verticalKey: pathnameSegments[1 + indexOffset],\r\n hostName: host,\r\n topDomain: topDomainName\r\n };\r\n\r\n if (pathnameSegments.length >= minimumHostPagePathSegments) {\r\n hostPage.subcategoryKey = pathnameSegments[3 + indexOffset];\r\n }\r\n return hostPage;\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * lower-case of 'ocid'\r\n */\r\nexport const QUERY_KEY_OCID = \"ocid\";\r\nconst WINDOWS_HEADER_PREFIX = \"win\";\r\nconst EDGE_FLAGS = new Set([\"msedgdhphdr\", \"msedgntphdr\", \"msedgntp\", \"msedgdhp\", \"entnewsntp\"]);\r\n\r\nexport function isWindowsScenario(currentUrl: URL | string): boolean {\r\n if (typeof currentUrl === \"string\") {\r\n try {\r\n currentUrl = new URL(currentUrl);\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n if (!currentUrl) {\r\n return false;\r\n }\r\n\r\n let isMatch = false;\r\n\r\n if (currentUrl) {\r\n currentUrl.searchParams.forEach(function (value, key) {\r\n if (isMatch || key.toLowerCase() !== QUERY_KEY_OCID || !value) {\r\n return;\r\n }\r\n const ocid = value.toLowerCase();\r\n if (ocid.substr(0, 3) === WINDOWS_HEADER_PREFIX || EDGE_FLAGS.has(ocid)) {\r\n isMatch = true;\r\n }\r\n });\r\n }\r\n\r\n return isMatch;\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Constants that are used throughout the library\r\n */\r\nexport namespace ConnectorConstants {\r\n /**\r\n * The key within a state JSON document used to store a connectors individual state\r\n */\r\n export const connectorStateKey = \"_@STATE@_\";\r\n\r\n export const renderAction = \"@@connector-view/RENDER\";\r\n\r\n export const dataConnectorMergeInitAction = \"@@data-connector/MERGE-INIT\";\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * A callback to reset singleton data. Used for server side rendering.\r\n */\r\nexport type ResetCallback = () => void;\r\n\r\n/**\r\n * Global array of callbacks that are used for resetting singleton data.\r\n */\r\nconst resetCallbacks: ResetCallback[] = [];\r\n\r\n/**\r\n * Adds a callback to the global array of reset callbacks.\r\n * This should only be used to reset singleton data.\r\n * @param callback The function that resets the singleton data.\r\n */\r\nexport function registerResetCallback(callback: ResetCallback): void {\r\n resetCallbacks.push(callback);\r\n}\r\n\r\n/**\r\n * Calls all of the reset functions in resetCallbacks.\r\n * This gets called once on the server side at the beginning of each request.\r\n */\r\nexport function invokeResetCallbacks(): void {\r\n for (const resetCallback of resetCallbacks) {\r\n resetCallback();\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { AppError, AppErrorPropertyBag, ErrorBehavior, Severity } from \"@msnews/core-contracts\";\r\n\r\n/**\r\n * This file contains the list of errors to log to the server for each feature.\r\n * We are centralizing errors here to make sure we do not have any dupes\\conflicts.\r\n * The idea is that each feature would have their own range of values.\r\n *\r\n * IMPORTANT: Please do not add strings to this file. Please map messages to send in your\r\n * code.\r\n */\r\n\r\n/**\r\n * All app errors are set to create IcM ticket by default unless specified in individual error code otherwise.\r\n */\r\nconst severity = Severity.Alert;\r\n\r\n/**\r\n * Build number is only passed in from updateAppErrorsPropertyBag at page initialization\r\n */\r\nconst pb: AppErrorPropertyBag = {\r\n build: \"\"\r\n};\r\n\r\n/**\r\n * Append or update property bag properties. At page level intialization, this should be called to update the build number.\r\n * Since all app error objects has reference to this base property bag, calling this method will in fact update for all app errors.\r\n * @param newPbInfo Additional information needed for app error property bag\r\n */\r\nexport function updateAppErrorsPropertyBag(newPbInfo: Partial): void {\r\n Object.assign(pb, newPbInfo);\r\n}\r\n\r\n/**\r\n * Getter for current base app error property bag.\r\n */\r\nexport function getAppErrorsPropertyBag(): AppErrorPropertyBag {\r\n return pb;\r\n}\r\n\r\nconst pageTsFileName = \"page.ts\";\r\n\r\n/**\r\n * Error during app initialization for Edge page experience.\r\n * Need to mimic the prime one since telemetry cooking logic looks for this\r\n */\r\nconst establishSignInSource = \"EstablishSignInStateHelpers.ts\";\r\nexport const EstablishSignedInState: AppError = {\r\n id: 1405,\r\n source: establishSignInSource,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents a ServiceUI related error */\r\nexport const ServiceUiError: AppError = {\r\n id: 5100,\r\n source: \"ServiceUiComm.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents a Top Sites related error */\r\nexport const TopSitesError: AppError = {\r\n id: 8010,\r\n source: \"TopSites.tsx\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents a Top Sites error when there are zero rendered top sites */\r\nexport const ZeroTopSitesError: AppError = {\r\n id: 8011,\r\n source: \"TopSites.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Curated sites list is empty */\r\nexport const CuratedSitesEmpty: AppError = {\r\n id: 8012,\r\n source: \"TopSites.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\nconst TopSitesEdgeConnectorFileName = \"TopSitesEdge.connector.tsx\";\r\nconst TopSitesEdgeStorageFileName = \"TopSitesStorage.ts\";\r\n\r\nexport const TopSitesEdgeAppErrors = {\r\n ZeroTopSitesError: {\r\n id: 8013,\r\n source: TopSitesEdgeConnectorFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n CuratedSitesEmpty: {\r\n id: 8014,\r\n source: TopSitesEdgeStorageFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n ComponentMountFailed: {\r\n id: 8015,\r\n source: TopSitesEdgeConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n ErrorFetchingRichTopSitesDataCollectionFromCms: {\r\n id: 8016,\r\n source: TopSitesEdgeStorageFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst TopSitesEdgeNextConnectorFileName = \"TopSitesEdgeNext.connector.tsx\";\r\n\r\nexport const TopSitesEdgeNextAppErrors = {\r\n\r\n /** The React component failed to mount */\r\n ComponentMountFailed: {\r\n id: 8020,\r\n source: TopSitesEdgeNextConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Represents a Top Sites error when there are zero rendered top sites */\r\n ZeroTopSitesError: {\r\n id: 8021,\r\n source: TopSitesEdgeNextConnectorFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nexport const TopSiteDialogAppErrors = {\r\n /** The React component failed to mount */\r\n TopSitesDialogFailedToMount: {\r\n id: 8025,\r\n source: \"TopSitesDialog.tsx\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst OneServiceCardProviderFileName = \"OneServiceCardProvider.ts\";\r\n\r\nexport const OneServiceCardProviderResponseEmpty: AppError = {\r\n id: 8029,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const OneServiceCardProviderEmptyMyFeed: AppError = {\r\n id: 8030,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const OneServiceCardProviderResponseWasNullOrErroneous: AppError = {\r\n id: 8031,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const OneServiceCardProviderErrorFetchingOneServiceResponse: AppError = {\r\n id: 8032,\r\n source: OneServiceCardProviderFileName,\r\n severity: Severity.HighImpact,\r\n pb\r\n};\r\n\r\nexport const OneServiceCardProviderInvalidJsonInOneServiceResponse: AppError = {\r\n id: 8033,\r\n source: OneServiceCardProviderFileName,\r\n severity: Severity.HighImpact,\r\n pb\r\n};\r\n\r\nexport const OneServiceCardProviderInvalidFeedListInOneServiceResponse: AppError = {\r\n id: 8034,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const OneServiceCardProviderRiverConfigurationIssue: AppError = {\r\n id: 8035,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to load views river content based on current vertical/category. */\r\nexport const OneServiceCardProviderQueryInterestContentFetchError: AppError = {\r\n id: 8036,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const OneServiceCardProviderStaticContentLoaded: AppError = {\r\n id: 8037,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst OneServiceDailyBriefApi = \"dailyBriefServiceClient.ts\";\r\n\r\nexport const DailyBriefServiceClientAppErrors = {\r\n OneServiceResponseWasNullOrErroneous: {\r\n id: 8038,\r\n source: OneServiceDailyBriefApi,\r\n severity,\r\n pb\r\n },\r\n\r\n OneServiceArticleListWasNullOrErroneous: {\r\n id: 8039,\r\n source: OneServiceDailyBriefApi,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ContentPreviewSourceFile = \"ContentPreview.connector.ts\";\r\nconst ContentPreviewDataSourceFile = \"ContentPreviewData.ts\";\r\nconst ExternalContentMapperHelperFile = \"ExternalContentMapperHelper.ts\";\r\n\r\nexport const ContentPreviewAppErrors = {\r\n\r\n ErrorWhileFetchingContentPreviewContent: {\r\n id: 8041,\r\n source: ContentPreviewDataSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n InvalidResponseFromContentPreviewFetch: {\r\n id: 8042,\r\n source: ContentPreviewDataSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n InvalidResponseFromContentPreviewResponseJson: {\r\n id: 8043,\r\n source: ContentPreviewDataSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n ErrorWhileInitializingAsyncContentPreviewContent: {\r\n id: 8044,\r\n source: ContentPreviewSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n InvalidOrMissingContentId: {\r\n id: 8045,\r\n source: ContentPreviewDataSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n MissingDataForExternalContent: {\r\n id: 8046,\r\n source: ExternalContentMapperHelperFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n MissingPartnerLink: {\r\n id: 8047,\r\n source: ContentPreviewDataSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n ErrorWhileFetchingWindowsShellContentPreviewContent: {\r\n id: 8048,\r\n source: ContentPreviewDataSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nconst RiverSourceFile = \"River.connector.ts\";\r\n\r\nexport const RiverAppErrors = {\r\n UnknownMetadataReceivedFromRiverCardProvider: {\r\n id: 8051,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n RiverContentProviderFetchException: {\r\n id: 8052,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n SkipPositionedCardsFallbackStrategyFailed: {\r\n id: 8053,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n InvalidConfig: {\r\n id: 8054,\r\n source: RiverSourceFile,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n\r\n MissingExperienceTypeMap: {\r\n id: 8055,\r\n source: RiverSourceFile,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n\r\n ChildLoadError: {\r\n id: 8056,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n InitialDataLoadError: {\r\n id: 8057,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Warning for when the ordinal children we get from config contains a duplicate instance id. */\r\n DuplicateInstanceIdWarning: {\r\n id: 8058,\r\n source: RiverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nexport const FullHeightFallbackStrategyFailed: AppError = {\r\n id: 8059,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst UserInitiatedPageRefreshSourceFile = \"UserInitiatedPageRefresh.ts\";\r\nexport const UserInitiatedPageRefreshErrors = {\r\n Default: {\r\n id: 8060,\r\n source: UserInitiatedPageRefreshSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PivotContentSourceFile = \"PivotContent.connector.ts\";\r\nexport const PivotContentErrors = {\r\n LoadFailure: {\r\n id: 8070,\r\n source: PivotContentSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PivotContentV2SourceFile = \"PivotContentV2.connector.ts\";\r\nexport const PivotContentV2Errors = {\r\n LoadFailure: {\r\n id: 8071,\r\n source: PivotContentV2SourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const PivotContentRenderFailure: AppError = {\r\n id: 8072,\r\n source: \"PivotContent.tsx\",\r\n severity,\r\n pb\r\n};\r\n\r\nconst PivotsNavSourceFile = \"PivotsNav.connector.ts\";\r\nexport const PivotsNavErrors = {\r\n TopicDataConnectorUnavailable: {\r\n id: 8075,\r\n source: PivotsNavSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n NavigationDataConnectorUnavailable: {\r\n id: 8076,\r\n source: PivotsNavSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n DynamicPivotsHelperLoaderFailed: {\r\n id: 8077,\r\n source: PivotsNavSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n LayoutPreferenceDataConnectorUnavailable: {\r\n id: 8078,\r\n source: PivotsNavSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PivotsNavV2SourceFile = \"PivotsNavV2.connector.ts\";\r\nexport const PivotsNavV2Errors = {\r\n PivotHoverLoadFailure: {\r\n id: 8079,\r\n source: PivotsNavV2SourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Smart list is empty */\r\nexport const SmartListEmpty: AppError = {\r\n id: 8080,\r\n source: \"SmartList.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents BingWebSSO related App errors */\r\nconst BingWebSSOSourceFile = \"BingWebSSO.tsx\";\r\nexport const BingWebSSOAppErrors = {\r\n /** Failed to render bing websso iframe */\r\n BingWebSSORenderFailed: {\r\n id: 8090,\r\n source: BingWebSSOSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** User signed-in to MSA on page but bing SSO returned authentication failed response */\r\n BingWebSSOSignInFailed: {\r\n id: 8091,\r\n source: BingWebSSOSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Bing SSO process did not complete withing required time */\r\n BingWebSSOTimeout: {\r\n id: 8092,\r\n source: BingWebSSOSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst WeatherDataConnectorSourceFile = \"WeatherData.connector.ts\";\r\nconst MultiLocationWeatherServiceSourceFile = \"MultiLocationWeatherService.ts\";\r\nconst WeatherCardConnectorSourceFile = \"WeatherCard.connector.ts\";\r\nconst WeatherPdpClientSourceFile = \"WeatherPdpClient.ts\";\r\nconst WeatherOverviewApiClientSourceFile = \"WeatherOverviewApiClient.ts\";\r\nconst WeatherMapRadarSourceFile = \"RadarLayer.ts\";\r\nconst WeatherMapWeatherLayersSourceFile = \"WeatherLayers.ts\";\r\nconst WeatherMapPrecipitationSourceFile = \"PrecipitationLayer.ts\";\r\nconst WeatherMapGenericSevereLayerSourceFile = \"GenericSevereLayer.tsx\";\r\nconst WeatherMapHeatmapRenderLayerSourceFile = \"HeatmapRender.ts\";\r\nconst WeatherMapBingJsonLabelLayerSourceFile = \"BingJsonLabelLayer.ts\";\r\nconst WeatherMapBingOneCanvasTileLayerSourceFile = \"OneCanvasTileLayer.ts\";\r\nconst WeatherOverviewConnectorSourceFile = \"WeatherOverview.connector.ts\";\r\nconst WeatherOverviewReducerSourceFile = \"WeatherOverview.reducer.ts\";\r\n\r\n/** Failed to fetch weather summary */\r\nexport const WeatherSummaryFetchError: AppError = {\r\n id: 8100,\r\n source: WeatherDataConnectorSourceFile,\r\n severity: Severity.HighImpact,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** No valid Location set from User */\r\nexport const WeatherLocationEmpty: AppError = {\r\n id: 8101,\r\n source: WeatherDataConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Not able to read from PDP */\r\nexport const WeatherPDPReadFailed: AppError = {\r\n id: 8102,\r\n source: WeatherPdpClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Not able to write home location to PDP */\r\nexport const WeatherPDPHomeLocationWriteFailed: AppError = {\r\n id: 8103,\r\n source: WeatherPdpClientSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Not able to write display Unit to PDP */\r\nexport const WeatherPDPDisplayUnitWriteFailed: AppError = {\r\n id: 8104,\r\n source: WeatherPdpClientSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Not able to localize Location */\r\nexport const WeatherLocalizeLocationFailed: AppError = {\r\n id: 8105,\r\n source: WeatherDataConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\nexport const WeatherCardAppErrors = {\r\n /** Failed to fetch local news */\r\n WeatherLocalNewsFetchError: {\r\n id: 8106,\r\n source: WeatherCardConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** No valid Location set from User */\r\n WeatherLocationEmpty: {\r\n id: 8108,\r\n source: WeatherCardConnectorSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n }\r\n};\r\n\r\n/** Failed to fetch autosuggest for locations */\r\nexport const WeatherAutoSuggestFetchError: AppError = {\r\n id: 8109,\r\n source: WeatherDataConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** for more error about Weather, use 295XX */\r\n\r\nconst SportsPdpServiceClientSourceFile = \"SportsPdpServiceClient.ts\";\r\nconst SportsDataMapperFile = \"libs/feed-layout/.../SportsCardDataMapper.ts\";\r\nexport const SportsCardError = {\r\n /** Failed to fetch league sports pdp */\r\n SportsLeaguePdpFetchError: {\r\n id: 8110,\r\n source: SportsPdpServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch league sports pdp */\r\n SportsLeaguePdpInvalidResponse: {\r\n id: 8111,\r\n source: SportsPdpServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch players sports pdp */\r\n SportsPlayersPdpFetchError: {\r\n id: 8112,\r\n source: SportsPdpServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch players sports pdp */\r\n SportsPlayersPdpInvalidResponse: {\r\n id: 8113,\r\n source: SportsPdpServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch teams sports pdp */\r\n SportsTeamsPdpFetchError: {\r\n id: 8114,\r\n source: SportsPdpServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch teams sports pdp */\r\n SportsTeamsPdpInvalidResponse: {\r\n id: 8115,\r\n source: SportsPdpServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get sports card config */\r\n SportsCardConfigFetchError: {\r\n id: 8116,\r\n source: \"SportsCardConfigReader.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get Team Data */\r\n SportsCardGetFavoriteTeamDataError: {\r\n id: 8117,\r\n source: \"SportsCard.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get Team Data */\r\n SportsCardGetPlayerBioError: {\r\n id: 8118,\r\n source: \"SportsCard.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n SportsCardGetLeaguesGamesArrayError: {\r\n id: 8119,\r\n source: \"SportsCard.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n SportsCardGetPdpDataFailure: {\r\n id: 8120,\r\n source: \"SportsCard.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n SportsCardGetLeagueSeasonYearDataFailure: {\r\n id: 8121,\r\n source: \"SportsCardServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n SportsCardGetLocalizedTeamNameDataFailure: {\r\n id: 8122,\r\n source: \"SportsCardServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n SportsCardGetTeamDataFailure: {\r\n id: 8123,\r\n source: \"SportsCardServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n SportsCardGetLeagueDataFailure: {\r\n id: 8124,\r\n source: \"SportsCardServiceClient.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const SportsCardDataMapperError: AppError = {\r\n id: 8125,\r\n source: SportsDataMapperFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst MoneyCardConnectorFile = \"MoneyCard.connector.ts\";\r\nconst MoneyPdpServiceClientFile = \"MoneyPdpServiceClient.ts\";\r\nconst MoneyDataMapperFile = \"libs/feed-layout/.../MoneyCardDataMapper.ts\";\r\nexport const MoneyCardError = {\r\n /** Failed to get quote summary for user */\r\n MoneyQuoteSummaryGetError: {\r\n id: 8130,\r\n source: MoneyCardConnectorFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get quote summaries */\r\n MoneyQuoteSummariesGetError: {\r\n id: 8131,\r\n source: MoneyCardConnectorFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get pdp data */\r\n MoneyPdpDataGetErrorFromService: {\r\n id: 8132,\r\n source: MoneyPdpServiceClientFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get pdp data because of invalid response */\r\n MoneyPdpInvalidResponseFromService: {\r\n id: 8133,\r\n source: MoneyPdpServiceClientFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get quote summary response for user from service client */\r\n MoneyQuoteSummaryGetErrorFromService: {\r\n id: 8134,\r\n source: MoneyPdpServiceClientFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get quote summary response for user from service client because of invalid response */\r\n MoneyQuoteSummaryInvalidResponseFromService: {\r\n id: 8135,\r\n source: MoneyPdpServiceClientFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Failed to parse data from WPO API */\r\nexport const MoneyDataMapperError: AppError = {\r\n id: 8136,\r\n source: MoneyDataMapperFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst TrendingNewsConnectorFile = \"TrendingNews.connector.ts\";\r\nexport const TrendingNewsErrors = {\r\n /** Failed to fetch the trending news stories */\r\n DataFetchError: {\r\n id: 8140,\r\n source: TrendingNewsConnectorFile,\r\n severity,\r\n pb\r\n },\r\n /** Failed to fetch the backup data for trending news stories */\r\n BackupDataFetchError: {\r\n id: 8141,\r\n source: TrendingNewsConnectorFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ComplexContentPreviewSourceFile = \"ComplexContentPreview.connector.ts\";\r\nexport const ComplexContentPreviewErrors = {\r\n InitError: {\r\n id: 8150,\r\n source: ComplexContentPreviewSourceFile,\r\n severity,\r\n pb\r\n },\r\n LoadError: {\r\n id: 8151,\r\n source: ComplexContentPreviewSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n ContentError: {\r\n id: 8152,\r\n source: ComplexContentPreviewSourceFile,\r\n severity,\r\n pb\r\n },\r\n ContentCountError: {\r\n id: 8153,\r\n source: ComplexContentPreviewSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const GridSectionAppErrors = {\r\n /** Unable to generate river section cards */\r\n GridSectionCardGenerationError: {\r\n id: 8160,\r\n source: \"GridSection.tsx\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst MmxEntryPointFileName = \"MMXPage.connector.ts\";\r\n\r\nexport const MmxEntryPointAppErrors = {\r\n /**\r\n * MMX river is not able to load Error Page.\r\n */\r\n MmxErrorPage: {\r\n id: 8170,\r\n source: MmxEntryPointFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error fetching the APP_ANON cookie on MMX page load\r\n */\r\n ErrorFetchingAppAnonCookie: {\r\n id: 8171,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Warning that MMX server side rendering is skipped and client side rendering is triggered\r\n * due to either server error or slow server response.\r\n */\r\n MMXSSRSkip: {\r\n id: 8172,\r\n source: MmxEntryPointFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * Errors related to Background image\r\n * More errors can be found on 386XX\r\n */\r\nconst irisImageHotspotsProviderFile = \"IrisImageHotspotsProvider.ts\";\r\nconst irisMuseumCardFile = \"IrisMuseumCard.tsx\";\r\nconst irisHotspotCtaFile = \"Hotspot.cta.ts\";\r\nconst bingImageProvider = \"BingImageOfTheDayProvider.ts\";\r\nconst freImageProvider = \"FREBackgroundProvider.ts\";\r\n\r\n/** The Bing Image of the Day failed to load properly */\r\nexport const BingIOTDFailedToLoad: AppError = {\r\n id: 8180,\r\n source: bingImageProvider,\r\n severity,\r\n pb\r\n};\r\n\r\n/** The FRE image method has not been implemented */\r\nexport const FREImageMethodNotImplemented: AppError = {\r\n id: 8181,\r\n source: freImageProvider,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Iris call from museum card failed */\r\nexport const ImageMuseumIrisDataFetchFailed: AppError = {\r\n id: 8182,\r\n source: irisMuseumCardFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Hotspots data found for the off page navigation failed inspection. */\r\nexport const InvalidOffPageNavCTA: AppError = {\r\n id: 8183,\r\n source: irisHotspotCtaFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Hotspots cta type or metadata not defined */\r\nexport const CTATypeOrMetdataNotDefined: AppError = {\r\n id: 8184,\r\n source: irisHotspotCtaFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Event not defined */\r\nexport const EventNotDefined: AppError = {\r\n id: 8185,\r\n source: irisHotspotCtaFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Hotspot call to action state not defined */\r\nexport const HotspotCtaStateNotDefined: AppError = {\r\n id: 8186,\r\n source: irisHotspotCtaFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Iris data connector not defined */\r\nexport const ImageIrisDataConnectorUndefined: AppError = {\r\n id: 8187,\r\n source: irisImageHotspotsProviderFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Iris data connector not defined on Museum card */\r\nexport const ImageIrisDataConnectorUndefinedMuseumCard: AppError = {\r\n id: 8188,\r\n source: irisMuseumCardFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Iris data call failed */\r\nexport const ImageIrisDataFetchFailed: AppError = {\r\n id: 8189,\r\n source: irisImageHotspotsProviderFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SettingsDialogAppErrors = {\r\n /** Failed to get the saved layout preferences */\r\n ReadPreferencesFailed: {\r\n id: 8190,\r\n source: \"SettingsDialogEdgeNext.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch the ConfigData object from the client API */\r\n FetchNtpConfigDataFailed: {\r\n id: 8191,\r\n source: \"SettingsDialogEdgeNextBase.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n ChromiumClientEmbededsearchAPIError: {\r\n id: 8192,\r\n source: \"SettingsDialogEdgeNext.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst MsnSettingMenuConnectorFileName = \"MsnSettingMenuConnector.connector.ts\";\r\n\r\nexport const MsnSettingsMenuAppErrors = {\r\n /** Failed to get feedback dialog connector */\r\n FailedToGetFeedbackDialogConnector: {\r\n id: 8193,\r\n source: MsnSettingMenuConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Failed to get feedback data connector */\r\n FailedToGetFeedbackDataConnector: {\r\n id: 8194,\r\n source: MsnSettingMenuConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** The Msn settings menu failed to load valid config settings */\r\n MsnSettingsMenuFailedToFetchConfig: {\r\n id: 8195,\r\n source: MsnSettingMenuConnectorFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const EdgePageSettingsAppErrors = {\r\n ServiceUiError: {\r\n id: 8196,\r\n source: \"EdgeSettingsProvider.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n InlineServiceUiError: {\r\n id: 8197,\r\n source: \"inline-head.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ShowFeedConnectorFileName = \"ShowFeed.connector.ts\";\r\n\r\nexport const ShowFeedAppErrors = {\r\n ExpectedDataMissing: {\r\n id: 8198,\r\n source: ShowFeedConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n MissingPageSettings: {\r\n id: 8199,\r\n source: ShowFeedConnectorFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst InfopaneSourceFile = \"Infopane.connector.ts\";\r\nexport const InfopaneErrors = {\r\n InitializeError: {\r\n id: 8201,\r\n source: InfopaneSourceFile,\r\n severity,\r\n pb\r\n },\r\n InvalidConfig: {\r\n id: 8202,\r\n source: InfopaneSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const FeedbackLinkAppErrors = {\r\n /** The Feedback link failed to load valid config settings */\r\n FeedbackLinkFailedToFetchConfig: {\r\n id: 8210,\r\n source: \"FeedbackLink.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n /** Failed to get feedback dialog connector */\r\n FailedToGetFeedbackDialogConnector: {\r\n id: 8211,\r\n source: \"FeedbackLink.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n /** Failed to get feedback data connector */\r\n FailedToGetFeedbackDataConnector: {\r\n id: 8212,\r\n source: \"FeedbackLink.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst FeedbackServiceClientSourceFile = \"FeedbackServiceClient.ts\";\r\nexport const FeedbackDialogAppErrors = {\r\n /** Failed to get feedback data connector */\r\n FailedToGetFeedbackDataConnector: {\r\n id: 8213,\r\n source: \"FeedbackDialog.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n /** Request is not valid, it has no content, or the manifest is not formatted correctly */\r\n BadRequestReportingFeedback: {\r\n id: 8214,\r\n source: FeedbackServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n /** Exception thrown when reporting feedback to OCV */\r\n ExceptionReportingFeedback: {\r\n id: 8215,\r\n source: FeedbackServiceClientSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst WindowsShellSettingFeedbackFileName = \"HeaderWindowsShell.connector.ts\";\r\n\r\n/** The Setting Feedback menu failed to load valid config settings */\r\nexport const WindowsShellSettingFeedbackMenuFailedToFetchConfig: AppError = {\r\n id: 8216,\r\n source: WindowsShellSettingFeedbackFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** The Setting Feedback menu Failed to get feedback dialog connector */\r\nexport const WindowsShellSettingFeedbackMenuFailedToGetFeedbackDialogConnector: AppError = {\r\n id: 8217,\r\n source: WindowsShellSettingFeedbackFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** The Setting Feedback menu Failed to get feedback data connector */\r\nexport const WindowsShellSettingFeedbackMenuFailedToGetFeedbackDataConnector: AppError = {\r\n id: 8218,\r\n source: WindowsShellSettingFeedbackFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst OneFooterConnectorFileName = \"OneFooter.connector.ts\";\r\nexport const OneFooterErrors = {\r\n InvalidConfig: {\r\n id: 8220,\r\n source: OneFooterConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Failed to get feedback data connector */\r\n FailedToGetFeedbackDataConnector: {\r\n id: 8221,\r\n source: OneFooterConnectorFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const PoweredByLegendAppErrors = {\r\n /** The PoweredBy legend failed to load expected config settings */\r\n PoweredByLegendInvalidConfig: {\r\n id: 8230,\r\n source: \"PoweredByLegend.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst EdgeHeaderConnectorFileName = \"EdgeHeader.connector.ts\";\r\n\r\nexport const EdgeHeaderAppErrors = {\r\n /** The BingImageData Connector was not loaded */\r\n BingImageDataConnectorNotLoaded: {\r\n id: 8240,\r\n source: EdgeHeaderConnectorFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst MicrosoftNewsPageConnectorFileName = \"MicrosoftNewsPage.connector.ts\";\r\n\r\nexport const MicrosoftNewsPageAppErrors = {\r\n /** The BingImageData Connector was not loaded */\r\n BingImageDataConnectorNotLoaded: {\r\n id: 8241,\r\n source: MicrosoftNewsPageConnectorFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst WindowsPageConnectorFileName = \"WindowsPage.connector.ts\";\r\n\r\nexport const WindowsPageAppErrors = {\r\n /** The BingImageData Connector was not loaded */\r\n BingImageDataConnectorNotLoaded: {\r\n id: 8242,\r\n source: WindowsPageConnectorFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst TabbedInfopaneSourceFile = \"TabbedInfopane.connector.ts\";\r\nexport const TabbedInfopaneErrors = {\r\n InitializeError: {\r\n id: 8250,\r\n source: TabbedInfopaneSourceFile,\r\n severity,\r\n pb\r\n },\r\n InvalidConfig: {\r\n id: 8251,\r\n source: TabbedInfopaneSourceFile,\r\n severity,\r\n pb\r\n },\r\n ChildLoadError: {\r\n id: 8252,\r\n source: TabbedInfopaneSourceFile,\r\n severity,\r\n pb\r\n },\r\n /** Problems with the second oneservice call that gathers the rest of the tabs*/\r\n SubTabFailure: {\r\n id: 8253,\r\n source: TabbedInfopaneSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const MeControlAppErrors = {\r\n /** The SSO call failed to return valid SSO sign-in information. */\r\n SSOFailedError: {\r\n id: 8260,\r\n source: \"MeControl.tsx\",\r\n severity,\r\n pb\r\n },\r\n /** The Me Control failed to load */\r\n MeControlLoadFailedError: {\r\n id: 8261,\r\n source: \"MeControl.tsx\",\r\n severity: Severity.HighImpact,\r\n pb\r\n }\r\n};\r\n\r\nconst TabbedInfopaneTabPreviewSourceFile = \"TabbedInfopaneTabPreview.connector.ts\";\r\nexport const TabbedInfopaneTabPreviewErrors = {\r\n InitError: {\r\n id: 8270,\r\n source: TabbedInfopaneTabPreviewSourceFile,\r\n severity,\r\n pb\r\n },\r\n InvalidConfig: {\r\n id: 8271,\r\n source: TabbedInfopaneTabPreviewSourceFile,\r\n severity,\r\n pb\r\n },\r\n LoadError: {\r\n id: 8272,\r\n source: TabbedInfopaneTabPreviewSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const HeaderNavigationLogoAppErrors = {\r\n MegaMenuDataError: {\r\n id: 8280,\r\n source: \"HeaderNavigationLogoConnector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst pageClicksTrackerFileName = \"pageClicksTracker.ts\";\r\nexport const PageClickTrackerErrors = {\r\n InvalidResponse: {\r\n id: 8290,\r\n severity: Severity.NoAlert,\r\n source: pageClicksTrackerFileName,\r\n pb\r\n },\r\n FetchFailure: {\r\n id: 8291,\r\n severity: Severity.NoAlert,\r\n source: pageClicksTrackerFileName,\r\n pb\r\n }\r\n};\r\n\r\nconst TargetingSystemSourceFile = \"TargetingSystem.ts\";\r\nexport const TargetingSystemAppErrors = {\r\n GeneralError: {\r\n id: 8310,\r\n source: TargetingSystemSourceFile,\r\n severity,\r\n pb\r\n },\r\n TopLevelDataMissing: {\r\n id: 8311,\r\n source: TargetingSystemSourceFile,\r\n severity,\r\n pb\r\n },\r\n TrackingDataUPSMissing: {\r\n id: 8312,\r\n source: TargetingSystemSourceFile,\r\n severity,\r\n pb\r\n },\r\n AppEnvironmentValuesMissing: {\r\n id: 8313,\r\n source: TargetingSystemSourceFile,\r\n severity,\r\n pb\r\n },\r\n CallingOneServiceFailed: {\r\n id: 8314,\r\n source: TargetingSystemSourceFile,\r\n severity,\r\n pb\r\n },\r\n CallingUPSServiceFailed: {\r\n id: 8315,\r\n source: TargetingSystemSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst CoachmarkSourceFile = \"Coachmark.connector.ts\";\r\nconst CoachmarkTSX = \"Coachmark.tsx\";\r\nconst CoachmarkCTA = \"Coachmark.cta.ts\";\r\nexport const CoachmarkAppErrors = {\r\n GeneralError: {\r\n id: 8320,\r\n source: CoachmarkTSX,\r\n severity,\r\n pb\r\n },\r\n NotPlaceable: {\r\n id: 8321,\r\n source: CoachmarkTSX,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n NotFoundComponent: {\r\n id: 8322,\r\n source: CoachmarkTSX,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n CoachmarkDataConnectorUndefined: {\r\n id: 8323,\r\n source: CoachmarkSourceFile,\r\n severity,\r\n pb\r\n },\r\n InvalidCTAType: {\r\n id: 8324,\r\n source: CoachmarkCTA,\r\n severity,\r\n pb\r\n },\r\n CTATypeNotDefined: {\r\n id: 8325,\r\n source: CoachmarkCTA,\r\n severity,\r\n pb\r\n },\r\n ConfigDataUndefined: {\r\n id: 8326,\r\n source: CoachmarkSourceFile,\r\n severity,\r\n pb\r\n },\r\n FailedToFetchConfigData: {\r\n id: 8327,\r\n source: CoachmarkSourceFile,\r\n severity,\r\n pb\r\n },\r\n ExceptionFetchingConfigData: {\r\n id: 8328,\r\n source: CoachmarkSourceFile,\r\n severity,\r\n pb\r\n },\r\n EventNotDefined: {\r\n id: 8329,\r\n source: CoachmarkCTA,\r\n severity,\r\n pb\r\n },\r\n CoachmarkStateNotDefined: {\r\n id: 8330,\r\n source: CoachmarkCTA,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst CoachmarkDataConnectorSourceFile = \"CoachmarkData.connector.ts\";\r\nconst CoachmarkPayloadSourceFile = \"CoachmarkPayload.ts\";\r\nconst IrisHandlerSourceFile = \"IrisHandler.ts\";\r\nexport const CoachmarkDataAppErrors = {\r\n InvalidCoachmarkMessage: {\r\n id: 8331,\r\n source: CoachmarkPayloadSourceFile,\r\n severity,\r\n pb\r\n },\r\n IrisDataConnectorUndefined: {\r\n id: 8332,\r\n source: IrisHandlerSourceFile,\r\n severity,\r\n pb\r\n },\r\n ErrorFoundForSurface: {\r\n id: 8334,\r\n source: IrisHandlerSourceFile,\r\n severity,\r\n pb\r\n },\r\n TelemetryInfoUndefined: {\r\n id: 8335,\r\n source: CoachmarkDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n EventTypeUndefined: {\r\n id: 8336,\r\n source: CoachmarkDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n IrisActionUndefined: {\r\n id: 8337,\r\n source: CoachmarkDataConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst AppTraceFile = \"AppTrace\";\r\nexport const AppTraceErrors = {\r\n /** Error for when app trace upload fails */\r\n UploadError: {\r\n id: 8350,\r\n source: AppTraceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ConditionalBannerPayloadSourceFile = \"ConditionalBannerPayload.ts\";\r\nconst ConditionalBannerIrisHandlerSourceFile = \"ConditionalBannerIrisHandler.ts\";\r\n\r\nexport const ConditionalBannerInvalidConditionalBannerMessage: AppError = {\r\n id: 8363,\r\n source: ConditionalBannerPayloadSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConditionalBannerIrisDataConnectorUndefined: AppError = {\r\n id: 8364,\r\n source: ConditionalBannerIrisHandlerSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConditionalBannerNoSurfaceFoundForCampaign: AppError = {\r\n id: 8365,\r\n source: ConditionalBannerIrisHandlerSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConditionalBannerErrorFoundForSurface: AppError = {\r\n id: 8366,\r\n source: ConditionalBannerIrisHandlerSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConditionalBannerTelemetryInfoUndefined: AppError = {\r\n id: 8367,\r\n source: ConditionalBannerIrisHandlerSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConditionalBannerEventTypeUndefined: AppError = {\r\n id: 8368,\r\n source: ConditionalBannerIrisHandlerSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConditionalBannerIrisActionUndefined: AppError = {\r\n id: 8369,\r\n source: ConditionalBannerIrisHandlerSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst SpotlightPreviewSourceFile = \"SpotlightPreview.connector.ts\";\r\n\r\nexport const SpotlightPreviewAppErrors = {\r\n ErrorWhileFetchingSpotlightPreviewCardInfo: {\r\n id: 8401,\r\n source: SpotlightPreviewSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n NoServiceContextMetadata: {\r\n id: 8402,\r\n source: SpotlightPreviewSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst SpotlightSourceFile = \"Spotlight.connector.ts\";\r\nexport const SpotlightErrors = {\r\n UnknownError: {\r\n id: 8500,\r\n source: SpotlightSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n ContentFetchError: {\r\n id: 8501,\r\n source: SpotlightSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n PartnerFetchFail: {\r\n id: 8502,\r\n source: \"PartnerService.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const CommentsErrors: { [key: string]: AppError } = {\r\n NoPost: {\r\n id: 8510,\r\n source: \"Comments.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst CardActionServiceClientSourceFile = \"CardActionServiceClient.ts\";\r\nexport const CardActionErrors = {\r\n /** Error catch in base CardAction experience container */\r\n CardActionBaseExperienceError: {\r\n id: 8600,\r\n source: \"CardAction.tsx\",\r\n severity,\r\n pb\r\n },\r\n /** Post action failed (Like/Dislike) */\r\n CardActionPostActionError: {\r\n id: 8601,\r\n source: \"CarActionServiceClient.tsx\",\r\n severity,\r\n pb\r\n },\r\n /** Delete action failed (Unlike/Undislike) */\r\n CardActionDeleteActionError: {\r\n id: 8602,\r\n source: \"CardActionServiceClient.tsx\",\r\n severity,\r\n pb\r\n },\r\n /** Get action failed (GetPublisherDetails) */\r\n CardActionGetActionError: {\r\n id: 8603,\r\n source: \"CardActionServiceClient.tsx\",\r\n severity,\r\n pb\r\n },\r\n /** Request is not valid, it has no content, or the manifest is not formatted correctly */\r\n CardActionBadRequestReportingToOcv: {\r\n id: 8604,\r\n source: CardActionServiceClientSourceFile, // This error is used in both CardAction and CardActionV2 components\r\n severity,\r\n pb\r\n },\r\n /** Exception thrown when reporting to OCV */\r\n CardActionExceptionReportingToOcv: {\r\n id: 8605,\r\n source: CardActionServiceClientSourceFile, // This error is used in both CardAction and CardActionV2 components\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ContentRelatedSourceFile = \"ContentRelated.connector.ts\";\r\nexport const ContentRelatedErrors = {\r\n /**\r\n * Missing source Id error\r\n */\r\n MissingSourceIdError: {\r\n id: 8700,\r\n source: ContentRelatedSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Invalid sourceIdError\r\n */\r\n InvalidSourceIdError: {\r\n id: 8701,\r\n source: ContentRelatedSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Related contents feed fetch error\r\n */\r\n ContentRelatedFeedFetchError: {\r\n id: 8702,\r\n source: ContentRelatedSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst CookieConsentBannerHelper = \"MsccCookieConsentHelper.ts\";\r\nexport const CookieConsentBannerHelperErrors = {\r\n FailedToParseStaticsUrls: {\r\n id: 8810,\r\n source: CookieConsentBannerHelper,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n ScriptsNotFound: {\r\n id: 8811,\r\n source: CookieConsentBannerHelper,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n StyleSheetsNotFound: {\r\n id: 8812,\r\n source: CookieConsentBannerHelper,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n FailedToMountScript: {\r\n id: 8813,\r\n source: CookieConsentBannerHelper,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n FailedToMountStyleSheet: {\r\n id: 8814,\r\n source: CookieConsentBannerHelper,\r\n severity: Severity.HighImpact,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents IFrame related errors */\r\nconst IFrameSourceFile = \"IFrame.tsx\";\r\nexport const IFrameErrors = {\r\n /** Message received by event listener not from expected origin */\r\n IFrameUnallowedOriginMessage: {\r\n id: 8820,\r\n source: IFrameSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nexport const RightRailCarouselAppErrors = {\r\n NoChildrenExperienceFoundError: {\r\n id: 8830,\r\n source: \"RightRailCarousel.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst CookiesFile = \"Cookies.ts\";\r\nexport const SharedStateConnectorNull: AppError = {\r\n id: 8840,\r\n source: CookiesFile,\r\n message: \"SharedStateConnector is null\",\r\n severity,\r\n pb\r\n};\r\n\r\nexport const CookieNotCategorized: AppError = {\r\n id: 8841,\r\n source: CookiesFile,\r\n severity: Severity.HighImpact,\r\n pb\r\n};\r\n\r\nexport const InvalidCookie: AppError = {\r\n id: 8842,\r\n source: CookiesFile,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\nexport const CookieSizeTooBig: AppError = {\r\n id: 8843,\r\n source: CookiesFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const CookieExpirationTooLong: AppError = {\r\n id: 8844,\r\n source: CookiesFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BreakingNewsErrors = {\r\n /** Error fetching Breaking News content */\r\n ContentFetchError: {\r\n id: 8901,\r\n source: \"BreakingNews.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n /** Error fetching Blowout content */\r\n BlowoutDocumentFetchError: {\r\n id: 8902,\r\n source: \"BreakingNews.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const BlowoutErrors = {\r\n /** Error fetching Blowout content */\r\n ContentFetchError: {\r\n id: 8921,\r\n source: \"Blowout.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const OverlayErrors: { [name: string]: AppError } = {\r\n /** Error loading experience */\r\n LoadExperienceError: {\r\n id: 8941,\r\n source: \"Overlay.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const ViewsCommonAppErrors = {\r\n /** Invalid intra article component metadata passed. */\r\n InvalidIntraArticleDataError: {\r\n id: 9001,\r\n source: \"IntraArticleHelper.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch from data api. */\r\n DataFetchError: {\r\n id: 9002,\r\n source: \"ViewsServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Invalid content markup encountered. */\r\n InvalidDocumentContentError: {\r\n id: 9003,\r\n source: \"ViewsUtility.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load views paddle data from data api. */\r\n ViewsPaddleDataLoadError: {\r\n id: 9004,\r\n source: \"ViewsPaddle.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Error during app initialization for views page experience. */\r\n ViewsErrorPage: {\r\n id: 9005,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Error during mapping provider data for views content header experience */\r\n ProviderMapperError: {\r\n id: 9006,\r\n source: \"ViewContentHeader.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n InvalidContentId: {\r\n id: 9007,\r\n source: \"page.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const LegacySharingToolbarAppErrors = {\r\n /** Failed to invoke legacy sharing toolbar. */\r\n LegacySharingToolbarInvokeError: {\r\n id: 9100,\r\n source: \"SharingHelper.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load sharing toolbar. */\r\n SharingToolbarLoadError: {\r\n id: 9101,\r\n source: \"LegacySharingToolbar.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Invalid source content id passed in. */\r\n InvalidContentIdError: {\r\n id: 9102,\r\n source: \"LegacySharingToolbar.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents ContentActionsToolbar experience related errors */\r\nconst ContentActionsToolbarConnectorSourceFile = \"ContentActionToolbar.connector.ts\";\r\nconst ContentActionsToolbarSourceFile = \"ContentActionToolbar.tsx\";\r\nconst ContentActionsToolbarServiceClientSourceFile = \"ContentActionToolbarServiceClient.tsx\";\r\nexport const ContentActionsToolbarAppErrors = {\r\n /** Failed to load sharing toolbar - 9120 */\r\n ContentActionsSharingToolbarLoadError: {\r\n id: 9120,\r\n source: ContentActionsToolbarConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Error fetching article data - 9121 */\r\n ContentActionsArticleDatafetchError: {\r\n id: 9121,\r\n source: ContentActionsToolbarConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Base Experience error - 9122 */\r\n ContentActionsBaseExperienceError: {\r\n id: 9122,\r\n source: ContentActionsToolbarSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Get content views action failed (getContentViewsRequest) - 9123 */\r\n ContentActionsGetDocumentDataError: {\r\n id: 9123,\r\n source: ContentActionsToolbarServiceClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Get content status action failed (getContentStatusRequest) - 9124 */\r\n ContentActionsGetContentStatusActionError: {\r\n id: 9124,\r\n source: ContentActionsToolbarServiceClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Delete action failed (Unlike/Undislike) - 9125 */\r\n ContentActionsDeleteActionError: {\r\n id: 9125,\r\n source: ContentActionsToolbarServiceClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Post action failed (Like/Dislike) - 9126 */\r\n ContentActionsPostActionError: {\r\n id: 9126,\r\n source: ContentActionsToolbarServiceClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Prime hybrid error loading the experience - 9127 */\r\n ContentActionsExperienceLoadError: {\r\n id: 9127,\r\n source: ContentActionsToolbarSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Missing vert/horiz placeholder to flip toolbar - 9128 */\r\n ContentActionsFlipToolbarError: {\r\n id: 9128,\r\n source: ContentActionsToolbarSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Failed fetching contentStatus - 9129 */\r\n ContentActionsContentStatusFetchError: {\r\n id: 9129,\r\n source: ContentActionsToolbarServiceClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Failed fetching contentPreview - 9130 */\r\n ContentActionsContentPreviewFetchError: {\r\n id: 9130,\r\n source: ContentActionsToolbarServiceClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nexport const ContentSharingToolbarAppErrors = {\r\n ContentSharingToolbarInitializationError: {\r\n id: 9150,\r\n source: \"ContentSharingToolbar.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const ContentSharingToolbarSaveForLaterServiceError: AppError = {\r\n id: 9151,\r\n source: \"SaveForLaterServiceClient.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ContentProviderAppErrors = {\r\n /** Invalid source article/gallery id passed in. */\r\n InvalidSourceIdError: {\r\n id: 9200,\r\n source: \"ContentProvider.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch provider details. */\r\n ProviderDetailsFetchError: {\r\n id: 9201,\r\n source: \"ContentProvider.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch provider feed. */\r\n ProviderFeedFetchError: {\r\n id: 9202,\r\n source: \"ContentProvider.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Invalid layout template passed in. */\r\n InvalidLayoutTemplate: {\r\n id: 9203,\r\n source: \"ContentProvider.templates.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** ApplicationCache related messages */\r\nconst refreshHeadDataFile = \"Appcache/RefreshHeadDataAppCache.ts\";\r\nconst edgeAppCacheHelperFile = \"Appcache/EdgeApplicationCacheHelper.ts\";\r\nconst refreshHeadDataAppCacheFile = \"page-error-handling/AppCacheErrorHandler.ts\";\r\n\r\nexport const ApplicationCacheMessages = {\r\n FailedToFetchHeadData: {\r\n id: 9310,\r\n source: refreshHeadDataFile,\r\n severity,\r\n pb\r\n },\r\n CatastrophicFailedToFetchHeadData: {\r\n id: 9311,\r\n source: refreshHeadDataFile,\r\n severity,\r\n pb\r\n },\r\n StaleActivityIdEncountered: {\r\n id: 9312,\r\n source: refreshHeadDataFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /**\r\n * The current DOM that is in AppCache doesn't match what should be getting served\r\n * to the user due to the existence of the ntps cookie that defines what the locale should be.\r\n * In this case, we must bypass AppCache to get the proper DOM from PCS.\r\n */\r\n LocaleMismatch: {\r\n id: 9313,\r\n source: edgeAppCacheHelperFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /**\r\n * Our checks determining we need to bypass appcache for the user are failing\r\n * to detect that the appcache refresh has succeeded. We've tried, for the current page view, to\r\n * bypass without any success.\r\n */\r\n RapidAppcacheForcedRefreshes: {\r\n id: 9314,\r\n source: edgeAppCacheHelperFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n ApplicationCacheAPIErrorEvent: {\r\n id: 9317,\r\n source: refreshHeadDataAppCacheFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n ApplicationCacheAPIObsoleteEvent: {\r\n id: 9318,\r\n source: refreshHeadDataAppCacheFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nconst MsRewardsConnectorSourceFile = \"MsRewards.connector.ts\";\r\nexport const MsRewardsAppErrors = {\r\n RewardsDataConnectorUndefined: {\r\n id: 9400,\r\n source: MsRewardsConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n CategoryKeyOrAppTypeUndefined: {\r\n id: 9401,\r\n source: MsRewardsConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n FailedToFetchCoachmarkUXConfig: {\r\n id: 9402,\r\n source: MsRewardsConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n ConfigDataUndefined: {\r\n id: 9403,\r\n source: MsRewardsConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n FailedToFetchConfigData: {\r\n id: 9404,\r\n source: MsRewardsConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n ExceptionFetchingConfigData: {\r\n id: 9405,\r\n source: MsRewardsConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n ChromiumPageSettingsDataConnectorUndefined: {\r\n id: 9406,\r\n source: MsRewardsConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n PageSettingsStateUndefined: {\r\n id: 9407,\r\n source: MsRewardsConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst RewardsDataConnectorSourceFile = \"RewardsData.connector.ts\";\r\nconst RewardsPayloadSourceFile = \"RewardsPayload.ts\";\r\nconst RewardsServiceClientSourceFile = \"RewardsServiceClient.ts\";\r\nexport const RewardsDataAppErrors = {\r\n IrisDataConnectorUndefined: {\r\n id: 9421,\r\n source: IrisHandlerSourceFile,\r\n severity,\r\n pb\r\n },\r\n CoachmarkDataConnectorUndefined: {\r\n id: 9424,\r\n source: RewardsDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n ErrorFetchingUserProfile: {\r\n id: 9425,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ExceptionFetchingUserProfile: {\r\n id: 9426,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ExceptionReportingRewardActivity: {\r\n id: 9427,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BadRequestReportingRewardActivity: {\r\n id: 9428,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n OfferIdNotDefined: {\r\n id: 9429,\r\n source: RewardsDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n ActionNameNotDefined: {\r\n id: 9430,\r\n source: RewardsDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n InvalidParameters: {\r\n id: 9431,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n UnknownErrorsReportingRewardActivity: {\r\n id: 9432,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n UnknownErrorOccurred: {\r\n id: 9433,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n MaxRetryReachedForUpdatingRewardsPoints: {\r\n id: 9434,\r\n source: RewardsDataConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst TrendingNewsCardConnectorFile = \"mobile-feed/trending-news/TrendingNews.connector.ts\";\r\n/** Failed to fetch the trending news card in mobile feed */\r\nexport const TrendingNewsDataFetchError: AppError = {\r\n id: 9501,\r\n source: TrendingNewsCardConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to parse JSON data for trending news in mobile feed */\r\nexport const TrendingNewsDataParseError: AppError = {\r\n id: 9502,\r\n source: TrendingNewsCardConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Received null or empty response for trending news in mobile feed */\r\nexport const TrendingNewsEmptyResponseDataError: AppError = {\r\n id: 9503,\r\n source: TrendingNewsCardConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst ShoppingServiceClientSourceFile = \"mobile-feed/shopping-connector/ShoppingServiceClient.ts\";\r\nconst ShoppingWpoDataMapperFile = \"libs/feed-layout/.../ShoppingCarouselCardDataMapper.ts\";\r\n/** Received null or empty response for ShoppingServiceClient */\r\nexport const ShoppingTrendingProductDataError: AppError = {\r\n id: 9504,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingMetaDataError: AppError = {\r\n id: 9505,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingRecentPriceDropsDataError: AppError = {\r\n id: 9506,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingRecommendedForYouProductsDataError: AppError = {\r\n id: 9507,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingRecommendedForYouProductDealsDataError: AppError = {\r\n id: 9508,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingMomentInTimeDataError: AppError = {\r\n id: 9509,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingForYouDataError: AppError = {\r\n id: 9510,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingPopularProductDealDataError: AppError = {\r\n id: 9511,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingMerchantDealDataError: AppError = {\r\n id: 9512,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingMerchantCatDealDataEnUsError: AppError = {\r\n id: 9513,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingMerchantCatDealDataEnGbError: AppError = {\r\n id: 9514,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingTrendingCatDataError: AppError = {\r\n id: 9515,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingTrendingCatProductsDataError: AppError = {\r\n id: 9516,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingTrendingCatDealsDataError: AppError = {\r\n id: 9517,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingTrendingDealsDataError: AppError = {\r\n id: 9518,\r\n source: ShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingTrendingDataMapperError: AppError = {\r\n id: 9519,\r\n source: ShoppingWpoDataMapperFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst LocalNewsCardConnectorFile = \"LocalNews.connector.ts\";\r\n/** Failed to fetch the local news card in mobile feed*/\r\nexport const LocalNewsDataFetchError: AppError = {\r\n id: 9601,\r\n source: LocalNewsCardConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to parse JSON data for local news in mobile feed */\r\nexport const LocalNewsDataParseError: AppError = {\r\n id: 9602,\r\n source: LocalNewsCardConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Received null or empty response for local news in mobile feed */\r\nexport const LocalNewsEmptyResponseDataError: AppError = {\r\n id: 9603,\r\n source: LocalNewsCardConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst MobileFeedConnectorFile = \"mobile-feed/MobileFeed.connector.ts\";\r\n/** Failed to prefetch data for mobile feed in super app */\r\nexport const MobileFeedPrefetchError: AppError = {\r\n id: 9701,\r\n source: MobileFeedConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to JSON prase prefetched data for mobile feed in super app */\r\nexport const MobileFeedPrefetchParseError: AppError = {\r\n id: 9702,\r\n source: MobileFeedConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Sesion id not found on next page url in oneservice response */\r\nexport const MobileFeedSessionIdNotFound: AppError = {\r\n id: 9703,\r\n source: MobileFeedConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to fetch mobile feed data from bridge get http method. */\r\nexport const MobileFeedBridgeGetHttpError: AppError = {\r\n id: 9704,\r\n source: MobileFeedConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to JSON parse mobile feed data from bridge get http method. */\r\nexport const MobileFeedBridgeGetHttpParseError: AppError = {\r\n id: 9705,\r\n source: MobileFeedConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Timeout in fetching mobile feed data from bridge get http method */\r\nexport const MobileFeedBridgeGetHttpTimeout: AppError = {\r\n id: 9706,\r\n source: MobileFeedConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to fetch mobile feed data from network get http method. */\r\nexport const MobileFeedNetworkGetHttpError: AppError = {\r\n id: 9707,\r\n source: MobileFeedConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to JSON parse mobile feed data from bridge get http method. */\r\nexport const MobileFeedNetworkGetHttpParseError: AppError = {\r\n id: 9708,\r\n source: MobileFeedConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Recieved empty data from Oneservice network call. */\r\nexport const MobileFeedNetworkEmptyData: AppError = {\r\n id: 9709,\r\n source: MobileFeedConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst MobileFeedShoppingFile = \"mobile-feed/shopping-connector/ShoppingServiceClient.ts\";\r\n/** Failed to prefetch data for mobile feed shopping in super app */\r\nexport const MobileFeedShoppingPrefetchError: AppError = {\r\n id: 9711,\r\n source: MobileFeedShoppingFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to JSON prase prefetched data for mobile feed shopping in super app */\r\nexport const MobileFeedShoppingPrefetchParseError: AppError = {\r\n id: 9712,\r\n source: MobileFeedShoppingFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst MobileFeedFinanceGlanceCardFile = \"mobile-feed/glance-stripe/FinanceGlanceCard.connector.ts\";\r\n/** Failed to prefetch data for mobile feed fiance glance card in super app */\r\nexport const MobileFeedFinanceGlanceCardPrefetchError: AppError = {\r\n id: 9721,\r\n source: MobileFeedFinanceGlanceCardFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to JSON prase prefetched data for mobile feed finance glance card in super app */\r\nexport const MobileFeedFinanceGlanceCardPrefetchParseError: AppError = {\r\n id: 9722,\r\n source: MobileFeedFinanceGlanceCardFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst SuperAppHomepageFile = \"app-types/superapp/Homepage.ts\";\r\nconst SuperAppPersonalizeFile = \"app-types/superapp/Personalize.ts\";\r\n\r\n/** Failed to read cached config in super app */\r\nexport const MobileFeedConfigCacheReadError: AppError = {\r\n id: 9731,\r\n source: SuperAppHomepageFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to write config to cache in super app */\r\nexport const MobileFeedConfigCacheWriteError: AppError = {\r\n id: 9732,\r\n source: SuperAppHomepageFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** The cached config is invalid in super app */\r\nexport const MobileFeedConfigCacheInvalidError: AppError = {\r\n id: 9733,\r\n source: SuperAppHomepageFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to read cached content in super app */\r\nexport const MobileFeedContentCacheReadError: AppError = {\r\n id: 9734,\r\n source: MobileFeedConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to write content to cache in super app */\r\nexport const MobileFeedContentCacheWriteError: AppError = {\r\n id: 9735,\r\n source: MobileFeedConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** The cached content is invalid in super app */\r\nexport const MobileFeedContentCacheInvalidError: AppError = {\r\n id: 9736,\r\n source: MobileFeedConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to prefetch mobile feed config in super app */\r\nexport const MobileFeedConfigPrefetchError: AppError = {\r\n id: 9741,\r\n source: SuperAppHomepageFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to JSON prase prefetched config for mobile feed in super app */\r\nexport const MobileFeedConfigPrefetchParseError: AppError = {\r\n id: 9742,\r\n source: SuperAppHomepageFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to fetch mobile feed config in super app */\r\nexport const MobileFeedConfigFetchError: AppError = {\r\n id: 9743,\r\n source: SuperAppHomepageFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to JSON prase fetched config for mobile feed in super app */\r\nexport const MobileFeedConfigFetchParseError: AppError = {\r\n id: 9744,\r\n source: SuperAppHomepageFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to generate config url in super app homepage */\r\nexport const MobileFeedConfigGetUrlError: AppError = {\r\n id: 9745,\r\n source: SuperAppHomepageFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to fetch InterestV3 config in super app */\r\nexport const InterestV3ConfigFetchError: AppError = {\r\n id: 9746,\r\n source: SuperAppPersonalizeFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to fetch InterestV3 config in super app */\r\nexport const InterestV3ConfigGetUrlError: AppError = {\r\n id: 9747,\r\n source: SuperAppPersonalizeFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to parse super app homepage user config object from local storage */\r\nexport const localStorageUserConfigObjectParseError: AppError = {\r\n id: 9748,\r\n source: SuperAppHomepageFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to write super app homepage user config object in to local storage */\r\nexport const localStorageUserConfigObjectWriteError: AppError = {\r\n id: 9749,\r\n source: SuperAppHomepageFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Timeout in fetching config for mobile feed in super app */\r\nexport const MobileFeedConfigFetchTimeoutError: AppError = {\r\n id: 9750,\r\n source: SuperAppHomepageFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to fetch mobile feed config via network in super app */\r\nexport const MobileFeedConfigNetworkFetchError: AppError = {\r\n id: 9751,\r\n source: SuperAppHomepageFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to JSON prase mobile feed config fetched via network in super app */\r\nexport const MobileFeedConfigNetworkFetchParseError: AppError = {\r\n id: 9752,\r\n source: SuperAppHomepageFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst MobileFeedActionMenuHelperFile = \"ActionMenuHelper.ts\";\r\n/** OneService call failed for action menu Actions type */\r\nexport const MobileFeedActionMenuServiceCallFailedError: AppError = {\r\n id: 9760,\r\n source: MobileFeedActionMenuHelperFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Action menu Sapphire bridge api returned with error response */\r\nexport const MobileFeedActionMenuServiceCallParsedError: AppError = {\r\n id: 9761,\r\n source: MobileFeedActionMenuHelperFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Action menu Sapphire bridge api returned with error response */\r\nexport const MobileFeedActionMenuBridgeCallFailedError: AppError = {\r\n id: 9762,\r\n source: MobileFeedActionMenuHelperFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst TopicCarouselConnectorFile = \"TopicCarousel.connector.ts\";\r\n/** Failed to fetch the topic carousel in mobile feed*/\r\nexport const TopicCarouselDataFetchError: AppError = {\r\n id: 9801,\r\n source: TopicCarouselConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Received null or empty response for topic carousel in mobile feed */\r\nexport const TopicCarouselEmptyResponseDataError: AppError = {\r\n id: 9802,\r\n source: TopicCarouselConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to parse content url */\r\nexport const FailedToParseContentUrl: AppError = {\r\n id: 9851,\r\n source: \"mobile-feed/src/helpers/common.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Screen width in SA is zero */\r\nexport const ZeroScreenWidth: AppError = {\r\n id: 9861,\r\n source: \"mobile-feed/src/helpers/DisplayHelper.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\nconst MobileFeedRewardsGlanceCardFile = \"mobile-feed/src/glance-stripe/rewards/RewardsGlanceCard.connector.ts\";\r\n/** Failed to prefetch data for mobile feed rewards glance card in super app */\r\nexport const MobileFeedRewardsGlanceCardPrefetchError: AppError = {\r\n id: 9871,\r\n source: MobileFeedRewardsGlanceCardFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to JSON prase prefetched data for mobile feed finance glance card in super app */\r\nexport const MobileFeedRewardsGlanceCardPrefetchParseError: AppError = {\r\n id: 9872,\r\n source: MobileFeedRewardsGlanceCardFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst VideoCarouselConnectorFile = \"mobile-feed/video-carousel/VideoCarousel.connector.ts\";\r\n/** Failed to parse video data in mobile feed */\r\nexport const VideoCarouselDataParseError: AppError = {\r\n id: 9901,\r\n source: VideoCarouselConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Received null or empty response for video carousel in mobile feed */\r\nexport const VideoCarouselEmptyResponseDataError: AppError = {\r\n id: 9902,\r\n source: VideoCarouselConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to fetch the video carousel card in mobile feed */\r\nexport const VideoCarouselDataFetchError: AppError = {\r\n id: 9903,\r\n source: VideoCarouselConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst GamesConnectorFile = \"mobile-feed/games/Games.connector.ts\";\r\n/** Failed to parse games data in mobile feed */\r\nexport const GamesDataParseError: AppError = {\r\n id: 9911,\r\n source: GamesConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Received null or empty response for games in mobile feed */\r\nexport const GamesEmptyResponseDataError: AppError = {\r\n id: 9912,\r\n source: GamesConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to fetch the games card in mobile feed */\r\nexport const GamesDataFetchError: AppError = {\r\n id: 9913,\r\n source: GamesConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** fetch the games card time out in mobile feed */\r\nexport const GamesDataFetchTimeoutError: AppError = {\r\n id: 9914,\r\n source: GamesConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** received null WPO response */\r\nexport const GamesWPOEmptyResponseError: AppError = {\r\n id: 9915,\r\n source: GamesConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** gamescard ard not in WPO response */\r\nexport const GamesNotInWPOError: AppError = {\r\n id: 9916,\r\n source: GamesConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst ViewsGallerySourceFile = \"ViewsGallery.connector.ts\";\r\nexport const ViewsGalleryAppErrors = {\r\n /** Invalid gallery id passed. */\r\n InvalidGalleryIdError: {\r\n id: 10001,\r\n source: ViewsGallerySourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load gallery data. */\r\n GalleryDataLoadError: {\r\n id: 10010,\r\n source: ViewsGallerySourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load images. */\r\n GalleryImagesLoadError: {\r\n id: 10020,\r\n source: ViewsGallerySourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst SlideShowConnectorFile = \"SlideShow.connector.ts\";\r\nconst SlideShowCarouselFile = \"SlideShowCarousel.tsx\";\r\nconst SlideShowGalleryFile = \"Gallery.tsx\";\r\nexport const SlideShowAppErrors = {\r\n /** Invalid slideshow id passed. */\r\n InvalidSlideShowIdError: {\r\n id: 10100,\r\n source: SlideShowConnectorFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load slideshow data. */\r\n SlideShowDataLoadError: {\r\n id: 10110,\r\n source: SlideShowConnectorFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load images. */\r\n SlideShowImagesLoadError: {\r\n id: 10120,\r\n source: SlideShowConnectorFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to ads refresh. */\r\n SlideShowAdsRefreshError: {\r\n id: 10130,\r\n source: SlideShowCarouselFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load image. */\r\n SlideShowImageLoadFailed: {\r\n id: 10135,\r\n source: SlideShowCarouselFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to generate Prime Fullscreen Link */\r\n SlideShowFullScreenPrimeError: {\r\n id: 10136,\r\n source: SlideShowGalleryFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const VideoListAppErrors = {\r\n /** Failed to load the video list data. */\r\n VideoListDataLoadError: {\r\n id: 11001,\r\n source: \"VideoList.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst VideoContentSourceFile = \"VideoContent.connector.ts\";\r\nexport const VideoContentAppErrors = {\r\n /** Failed to load the video content data. */\r\n InvalidResponseFromVideoContentResponseJson: {\r\n id: 11101,\r\n source: VideoContentSourceFile,\r\n severity\r\n },\r\n /** Failed to fetch the video content data from server. */\r\n ErrorWhileFetchingContentPreviewContent: {\r\n id: 11102,\r\n source: VideoContentSourceFile,\r\n severity\r\n }\r\n};\r\n\r\nconst VideoContentDownScriptFile = \"AdsHelper.ts\";\r\n/** Failed to download external script file for content video player */\r\nexport const DownloadScriptError: AppError = {\r\n id: 11103,\r\n source: VideoContentDownScriptFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst ViewsArticleSourceFile = \"ViewsArticle.connector.ts\";\r\nexport const ViewsArticleAppErrors = {\r\n /** Invalid article id passed. */\r\n InvalidArticleIdError: {\r\n id: 12001,\r\n source: ViewsArticleSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load article data. */\r\n ArticleDataLoadError: {\r\n id: 12002,\r\n source: ViewsArticleSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load intra-article component. */\r\n IntraArticleComponentLoadError: {\r\n id: 12003,\r\n source: ViewsArticleSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to invoke inline gallery experience. */\r\n InlineGalleryInvokeError: {\r\n id: 12004,\r\n source: ViewsArticleSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * Set of errors in Article Page.\r\n */\r\nconst ArticleParserFileName = \"ArticleParser.ts\";\r\nconst ArticleVideoParserFileName = \"VideoParser.ts\";\r\nexport const ArticleInvalidContentError: AppError = {\r\n id: 12100,\r\n source: ArticleParserFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ArticleInvalidVideoIdError: AppError = {\r\n id: 12101,\r\n source: ArticleParserFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ArticleInvalidSlideshowIdError: AppError = {\r\n id: 12102,\r\n source: ArticleParserFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ArticleInvalidVideoContentError: AppError = {\r\n id: 12103,\r\n source: ArticleVideoParserFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ArticleCopyrightTruncateError: AppError = {\r\n id: 12104,\r\n source: ArticleParserFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ArticleCreateElementError: AppError = {\r\n id: 12105,\r\n source: ArticleParserFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const InterestsSearchAppErrors = {\r\n /** Received non 200 from OneService */\r\n ErrorResponseFromOneService: {\r\n id: 13000,\r\n source: \"InterestsSearchServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n /** Received a response from 200 but didn't have expected structure */\r\n ErrorResponseFromOneServiceIsInvalid: {\r\n id: 13001,\r\n source: \"InterestsSearchServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n /**\r\n * When building the XFeed URL for one of the suggestion items,\r\n * we weren't able to build a valid URL\r\n */\r\n InvalidUrlFoundForElement: {\r\n id: 13002,\r\n source: \"InterestsSearch.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n /**\r\n * When building the XFeed URL for one of the suggestion items,\r\n * we weren't able to build a valid URL\r\n */\r\n SelectedItemNotFoundInSuggestions: {\r\n id: 13003,\r\n source: \"InterestsSearch.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n /**\r\n * When building the XFeed URL for one of the suggestion items,\r\n * we weren't able to build a valid URL\r\n */\r\n SelectedItemIsInvalid: {\r\n id: 13004,\r\n source: \"InterestsSearch.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst InterestsConnectorFileName = \"Interests.connector.ts\";\r\nconst SettingsConnectorManagerFileName = \"Setting.connector.manager.ts\";\r\nconst TopicDataConnectorFileName = \"TopicData.connector.ts\";\r\nconst TopicCacheFileName = \"TopicCache.ts\";\r\nconst XfeedConnectorFileName = \"Xfeed.connector.ts\";\r\nconst InterestsWC = \"InterestsWC.ts\";\r\nexport const InterestsAppErrors = {\r\n /** We could not retrieve the list of Topics from OneService */\r\n InterestsRetrieveTopicsError: {\r\n id: 13100,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not retrieve the user's list of Followed Topics from OneService */\r\n InterestsRetrieveFollowedTopicsError: {\r\n id: 13101,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not retrieve the user's list of Muted Publishers from OneService */\r\n InterestsRetrieveMutedPublishersError: {\r\n id: 13102,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not UnMute a Muted Publisher */\r\n InterestsUnMutePublisherError: {\r\n id: 13103,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not follow a new interests topic */\r\n InterestsFollowTopicError: {\r\n id: 13104,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not unfollow an interests topic */\r\n InterestsUnfollowTopicError: {\r\n id: 13105,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** TopicState should not be undefined */\r\n InterestsTopicStateUndefined: {\r\n id: 13106,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Topics should have rendered */\r\n InterestsShouldHaveRendered: {\r\n id: 13107,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Could not retrieve a specific topic */\r\n InterestsRetrieveTopicError: {\r\n id: 13108,\r\n source: XfeedConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not retrieve the user's list of Saved Stories from OneService */\r\n InterestsRetrieveSavedStoriesError: {\r\n id: 13109,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Saved stories config is invalid */\r\n InterestsSavedStoriesInvalidConfigError: {\r\n id: 13110,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not load saved stories children */\r\n InterestsSavedStoriesChildLoadError: {\r\n id: 13111,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** OneService response for saved stories had invalid json */\r\n InterestsSavedStoriesInvalidJsonError: {\r\n id: 13112,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** OneService response for saved stories had invalid list of response */\r\n InterestsSavedStoriesInvalidListError: {\r\n id: 13113,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not retrieve the user's list of Recommended Topics from OneService */\r\n InterestsRetrieveRecommendedTopicsError: {\r\n id: 13114,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Topic Data Connector is not defined */\r\n UndefinedTopicDataConnector: {\r\n id: 13115,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not retrieve the user's list of Read Stories from OneService */\r\n InterestsRetrieveReadStoriesError: {\r\n id: 13116,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Read stories config is invalid */\r\n InterestsReadStoriesInvalidConfigError: {\r\n id: 13117,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not load Read stories children */\r\n InterestsReadStoriesChildLoadError: {\r\n id: 13118,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** OneService response for Read stories had invalid json */\r\n InterestsReadStoriesInvalidJsonError: {\r\n id: 13119,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** OneService response for Read stories had invalid list of response */\r\n InterestsReadStoriesInvalidListError: {\r\n id: 13120,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** OneService failed resetting user default set of interests */\r\n FailedRestoringDefaultTopicsError: {\r\n id: 13121,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Failed opening topics IndexedDB connection */\r\n TopicsFailedIndexedDBConnection: {\r\n id: 13122,\r\n source: TopicCacheFileName,\r\n severity,\r\n pb\r\n },\r\n /** Failed getting topics indexedDB */\r\n TopicsFailedGettingIndexedDB: {\r\n id: 13123,\r\n source: TopicCacheFileName,\r\n severity,\r\n pb\r\n },\r\n /** Failed updating topics indexedDB */\r\n TopicsFailedUpdatingIndexedDB: {\r\n id: 13124,\r\n source: TopicCacheFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Failed updating segment card user settings to one service */\r\nexport const FailedUpdatingUserSegmentCardsPreferences: AppError = {\r\n id: 13125,\r\n source: SettingsConnectorManagerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed while checking if topic has limited data in feed */\r\nexport const TopicsFailedCheckingLimitedFeed: AppError = {\r\n id: 13126,\r\n source: TopicDataConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** We could not retrieve the user's list of Followed Publishers from OneService */\r\nexport const InterestsRetrieveFollowedPublishersError: AppError = {\r\n id: 13127,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Could not follow a publisher */\r\nexport const PublisherFollowTopicError: AppError = {\r\n id: 13128,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Could not unfollow a publisher */\r\nexport const PublisherUnfollowTopicError: AppError = {\r\n id: 13129,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** We could not retrieve the user's list of Work Topics from OneService */\r\nexport const InterestsRetrieveWorkTopicsError: AppError = {\r\n id: 13130,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** An uncaught error occurred */\r\nexport const InterestsWCUncaughtSectionError: AppError = {\r\n id: 13131,\r\n source: InterestsWC,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Segment Card Data could not be parsed */\r\nexport const SegmentCardDataJsonError: AppError = {\r\n id: 13132,\r\n source: InterestsWC,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed updating user's feed settings through one service */\r\nexport const FailedUpdatingUserCommunitySettingsPreferences: AppError = {\r\n id: 13133,\r\n source: InterestsWC,\r\n severity,\r\n pb\r\n};\r\n\r\nconst ComponentConnector = \"ComponentConnector.ts\";\r\n\r\n/** {ComponentConnector} base app errors */\r\nexport const ComponentConnectorAppErrors = {\r\n\r\n /** Duplicate child experience instance found */\r\n DuplicateChildInstanceFound: {\r\n id: 14000,\r\n source: ComponentConnector,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load bundle */\r\n BundleLoadError: {\r\n id: 14001,\r\n source: ComponentConnector,\r\n severity,\r\n pb\r\n },\r\n\r\n /** ChildConfigInfoList is null */\r\n ChildConfigInfoListNull: {\r\n id: 14002,\r\n source: ComponentConnector,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Merge List start position must be greater than 0 */\r\n ListStartPositionInvalid: {\r\n id: 14003,\r\n source: ComponentConnector,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to delay load child bundle */\r\n ChildDelayLoadError: {\r\n id: 14004,\r\n source: ComponentConnector,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Milestone dependency failed to resolve and timeout triggered */\r\n ExperienceDependencyTimeout: {\r\n id: 14005,\r\n source: ComponentConnector,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\n/** Data connector loading failed */\r\nexport const LoadDataConnectorConfigFailed: AppError = {\r\n id: 14006,\r\n source: ComponentConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Data connector loading failed */\r\nexport const LoadDataConnectorFailed: AppError = {\r\n id: 14007,\r\n source: ComponentConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Attempted to load child with invalid experience */\r\nexport const ChildWithInvalidExperience: AppError = {\r\n id: 14008,\r\n source: ComponentConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/** App errors for {ExperienceLoader} */\r\nexport const ExperienceLoaderAppErrors = {\r\n /** Logged when neither the config type nor config HREF was provided to the loader */\r\n InsufficientLoadArgs: {\r\n id: 14100,\r\n source: \"ExperienceLoader.ts\",\r\n severity: Severity.HighImpact,\r\n pb\r\n }\r\n};\r\n\r\n/** Logged when ConnectComponent call in getConnectedExperience fails */\r\nexport const ConnectComponentFailureError: AppError = {\r\n id: 14101,\r\n source: \"ExperienceLoader.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Logged when loadComponent fails */\r\nexport const LoadComponentFailureError: AppError = {\r\n id: 14102,\r\n source: \"ExperienceLoader.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents SearchHistoryCommon related App errors */\r\nconst SearchHistoryCommonSourceFile = \"SearchHistoryCommon.tsx\";\r\nexport const SearchHistoryCommonAppErrors = {\r\n /** Failed to parse search history response */\r\n ResponseParsingFailed: {\r\n id: 15000,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Search history service call failed */\r\n ServiceCallFailed: {\r\n id: 15001,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to render search history */\r\n RenderFailed: {\r\n id: 15002,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Search history api response not received within configured time */\r\n Timeout: {\r\n id: 15003,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Search history api call unauthorized */\r\n Unauthorized: {\r\n id: 15004,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Search history api call forbidden */\r\n Forbidden: {\r\n id: 15005,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Search history api not able to find recent search associated with this request */\r\n NotFound: {\r\n id: 15006,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Search history api response not received within configured time but wait for searchHistoryFetchPromise to be completed */\r\n TimeoutDetail: {\r\n id: 15007,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents search history edgenext failed to render */\r\nexport const SearchHistoryEdgenextRenderFailed: AppError = {\r\n id: 15008,\r\n source: \"SearchHistoryEdgenext.tsx\",\r\n severity: Severity.HighImpact,\r\n pb\r\n};\r\n\r\nconst SearchHistoryEdgeNextSourceFile = \"SearchHistoryEdgenext.connector.ts\";\r\n/** Represents failed to retrieve account type */\r\nexport const FailedToRetrieveAccountType: AppError = {\r\n id: 15009,\r\n source: SearchHistoryEdgeNextSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents failed to retrieve account info */\r\nexport const FailedToRetrieveAccountInfo: AppError = {\r\n id: 15010,\r\n source: SearchHistoryEdgeNextSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents failed to get access token */\r\nexport const FailedToGetAccessToken: AppError = {\r\n id: 15011,\r\n source: SearchHistoryEdgeNextSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nconst SearchHistoryServiceSourceFile = \"SearchHistoryService.ts\";\r\nexport const SearchHistoryResponseParsingFailed: AppError = {\r\n id: 15020,\r\n source: SearchHistoryServiceSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Search history service call failed */\r\nexport const SearchHistoryServiceCallFailed: AppError = {\r\n id: 15021,\r\n source: SearchHistoryServiceSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to render search history */\r\nexport const SearchHistoryRenderFailed: AppError = {\r\n id: 15022,\r\n source: SearchHistoryServiceSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Search history api response not received within configured time */\r\nexport const SearchHistoryTimeout: AppError = {\r\n id: 15023,\r\n source: SearchHistoryServiceSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Search history api call unauthorized */\r\nexport const SearchHistoryUnauthorized: AppError = {\r\n id: 15024,\r\n source: SearchHistoryServiceSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Search history api call forbidden */\r\nexport const SearchHistoryForbidden: AppError = {\r\n id: 15025,\r\n source: SearchHistoryServiceSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Search history api not able to find recent search associated with this request */\r\nexport const SearchHistoryNotFound: AppError = {\r\n id: 15026,\r\n source: SearchHistoryServiceSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Search history api response not received within configured time but wait for searchHistoryFetchPromise to be completed */\r\nexport const SearchHistoryTimeoutDetail: AppError = {\r\n id: 15027,\r\n source: SearchHistoryServiceSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst SearchHistoryEdgeNextWCSourceFile = \"SearchHistoryEdgeNextWC.ts\";\r\n/** Represents failed to retrieve account type */\r\nexport const SearchHistoryFailedToRetrieveAccountType: AppError = {\r\n id: 15029,\r\n source: SearchHistoryEdgeNextWCSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents failed to retrieve account info */\r\nexport const SearchHistoryFailedToRetrieveAccountInfo: AppError = {\r\n id: 15030,\r\n source: SearchHistoryEdgeNextWCSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents failed to get acces s token */\r\nexport const SearchHistoryFailedToGetAccessToken: AppError = {\r\n id: 15031,\r\n source: SearchHistoryEdgeNextWCSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents a Search related error */\r\nexport const SearchError: AppError = {\r\n id: 15100,\r\n source: \"SearchBox.tsx\",\r\n severity: Severity.HighImpact,\r\n pb\r\n};\r\n\r\n/** Represents missing form code/parameters related App errors */\r\nexport const MissingFormCode: AppError = {\r\n id: 15101,\r\n source: \"SearchBoxCommon.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents RecommendedSearch related App errors */\r\nconst RecommendedSearchSourceFile = \"RecommendedSearchDataService.ts\";\r\nexport const RecommendedSearchErrors = {\r\n /** Warning for failed to parse recommended search response */\r\n ResponseParsingFailed: {\r\n id: 15200,\r\n source: RecommendedSearchSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** warning for recommended search service returned invalid Json response */\r\n InvalidJsonResponse: {\r\n id: 15201,\r\n source: RecommendedSearchSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** Warning for recommended search service call failed */\r\n ServiceCallFailed: {\r\n id: 15202,\r\n source: RecommendedSearchSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** Failed to render recommended searches */\r\n RenderFailed: {\r\n id: 15203,\r\n source: RecommendedSearchSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Warning for recommended search api response not received within configured time */\r\n Timeout: {\r\n id: 15204,\r\n source: RecommendedSearchSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** recommended search back fill failed to fetch content from CMS */\r\n ContentFetchError: {\r\n id: 15205,\r\n source: RecommendedSearchSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents recommende search below search box rendered failed to render */\r\nexport const RecommendedSearchBelowSearchBoxRenderFailed: AppError = {\r\n id: 15211,\r\n source: \"RecommendedSearchBelowSearchBox.tsx\",\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Represents Trending Now related app errors */\r\nconst TrendingNowSourceFile = \"TrendingNow.connector.ts\";\r\nexport const TrendingNowErrors = {\r\n /** Failed to fetch Trending now content from CMS */\r\n ContentFetchError: {\r\n id: 15250,\r\n source: TrendingNowSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch child experience config */\r\n FailedToFetchConfig: {\r\n id: 15251,\r\n source: TrendingNowSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load child experience */\r\n FailedToLoadChildExperience: {\r\n id: 15252,\r\n source: TrendingNowSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** OCID not set for canvas */\r\n OCIDNotSetWarning: {\r\n id: 15253,\r\n source: \"TrendingNowServiceClient.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** Failed to fetch Trending now content from URL */\r\n ContentURLFetchError: {\r\n id: 15254,\r\n source: \"SearchBoxEdgeNextWC.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst RelatedSearchesCardConnectorFile = \"RelatedSearchesCard.connector.ts\";\r\nexport const RelatedSearchesNoSearchTerm: AppError = {\r\n id: 15260,\r\n source: RelatedSearchesCardConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const RelatedSearchesServiceCallError: AppError = {\r\n id: 15261,\r\n source: RelatedSearchesCardConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const RelatedSearchesResponseEmpty: AppError = {\r\n id: 15262,\r\n source: RelatedSearchesCardConnectorFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents Voice Search related app errors */\r\nexport const VoiceSearchErrors = {\r\n /** Failed to render Voice Search */\r\n RenderFailed: {\r\n id: 15300,\r\n source: \"VoiceSearch.tsx\",\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n },\r\n\r\n /** Represents SearchBoxCommon Voice Search not configured App errors */\r\n SearchBoxCommonVoiceSearchError: {\r\n id: 15301,\r\n source: \"SearchBoxCommon.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Represents SearchBoxEdgeNext Voice Search not configured App errors */\r\n SearchBoxEdgeNextVoiceSearchError: {\r\n id: 15302,\r\n source: \"SearchBoxEdgeNext.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Represents Voice Search communication App errors */\r\n CommunicationsError: {\r\n id: 15303,\r\n source: \"VoiceSearch.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Image Search related app errors */\r\nconst ImageSearchConnectorFile = \"ImageSearch.connector.ts\";\r\n/** Failed to render Image Search */\r\nexport const ImageSearchRenderFailed: AppError = {\r\n id: 15400,\r\n source: \"ImageSearch.tsx\",\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Represents SearchBoxCommon Image Search not configured App errors */\r\nexport const SearchBoxCommonImageSearchError: AppError = {\r\n id: 15401,\r\n source: \"SearchBoxCommon.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents SearchBoxEdgeNext Image Search not configured App errors */\r\nexport const SearchBoxEdgeNextImageSearchError: AppError = {\r\n id: 15402,\r\n source: \"SearchBoxEdgeNext.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents Image Search communication App errors */\r\nexport const ImageSearchCommunicationsError: AppError = {\r\n id: 15403,\r\n source: ImageSearchConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst PollsCardConnectorSourceFile = \"PollsCard.connector.ts\";\r\nconst PollsCardSchemaTransformerFile = \"PollsCard.SchemaTransformer.ts\";\r\nexport const PollsCardAppErrors = {\r\n /**\r\n * Failed to fetch polls list\r\n */\r\n PollsListFetchError: {\r\n id: 18000,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Failed to fetch poll data\r\n */\r\n PollDataFetchError: {\r\n id: 18001,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * No data{questions} for poll\r\n */\r\n PollsCardInvalidPoll: {\r\n id: 18002,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Invalid Poll Quiz\r\n */\r\n PollsCardInvalidQuizPoll: {\r\n id: 18003,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * PollsVoteError\r\n */\r\n PollsCardVoteError: {\r\n id: 18004,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * PollsMapStateToPropsError\r\n */\r\n PollsCardMapStateToPropsError: {\r\n id: 18005,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * PollsUnknownError\r\n */\r\n PollsUnknownError: {\r\n id: 18006,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Poll Result Percentage Error\r\n */\r\n PollsResultPercentageError: {\r\n id: 18007,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const PollAutoCuratedErrors = {\r\n /**\r\n * Poll Auto curate content error\r\n */\r\n PollAutoCuratedContentError: {\r\n id: 18008,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Poll Auto curate content error\r\n */\r\n PollAutoCuratedInvalid: {\r\n id: 18009,\r\n source: PollsCardSchemaTransformerFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Poll Auto curate content error\r\n */\r\n PollAutoCuratedResultsFetchError: {\r\n id: 18010,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n PollAutoCuratedResultsTransformError: {\r\n id: 18011,\r\n source: PollsCardSchemaTransformerFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PollsCardWCSourceFile = \"PollsCardWC.ts\";\r\nconst PollsCardWCServiceFile = \"PollsCardWCService.ts\";\r\nconst PollsCardWCSchemaTransformerFile = \"SchemaTransformer.tsx\";\r\nexport const PollsCardWCAppErrors = {\r\n /**\r\n * Failed to fetch polls wc list\r\n */\r\n PollsWCDataInitError: {\r\n id: 18100,\r\n source: PollsCardWCSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Failed to fetch polls wc list\r\n */\r\n PollsWCListFetchError: {\r\n id: 18101,\r\n source: PollsCardWCServiceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Failed to fetch poll wc data\r\n */\r\n PollsWCDataFetchError: {\r\n id: 18102,\r\n source: PollsCardWCServiceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * No data{questions} for poll wc\r\n */\r\n PollsWCCardInvalidPoll: {\r\n id: 18103,\r\n source: PollsCardWCSchemaTransformerFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Invalid poll wc Quiz\r\n */\r\n PollsWCCardInvalidQuizPoll: {\r\n id: 18104,\r\n source: PollsCardWCSchemaTransformerFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Polls wc vote error\r\n */\r\n PollsWCCardVoteError: {\r\n id: 18105,\r\n source: PollsCardWCServiceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Polls wc failed obtaining user cookie\r\n */\r\n PollsWCGetCookieFailed: {\r\n id: 18106,\r\n source: PollsCardWCSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Polls wc result percentage error\r\n */\r\n PollsWCResultPercentageError: {\r\n id: 18107,\r\n source: PollsCardWCSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Polls wc Auto curate content error\r\n */\r\n PollsWCAutoCuratedContentError: {\r\n id: 18108,\r\n source: PollsCardWCServiceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Polls wc auto curate content error\r\n */\r\n PollsWCAutoCuratedInvalid: {\r\n id: 18109,\r\n source: PollsCardWCSchemaTransformerFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Polls wc auto curate content error\r\n */\r\n PollsWCAutoCuratedResultsFetchError: {\r\n id: 18110,\r\n source: PollsCardWCServiceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n PollsWCAutoCuratedResultsTransformError: {\r\n id: 18111,\r\n source: PollsCardWCSchemaTransformerFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst EdgeChromiumPageConnectorFileName = \"EdgeChromiumPage.connector.ts\";\r\nexport const EdgeNextAppErrors = {\r\n /**\r\n * Error during a critical error on the EdgeNext page. This can be during initialization or a react rendering error.\r\n */\r\n EdgeNextErrorPage: {\r\n id: 19000,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Error fetching the APP_ANON cookie on EdgeNext page load */\r\n ErrorFetchingAppAnonCookie: {\r\n id: 19001,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up showing the local ntp page on bundle syntax errors.\r\n */\r\n EdgeNextLocalNTPPageShownSyntaxErrors: {\r\n id: 19002,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up showing the local ntp page on bundle failures.\r\n */\r\n EdgeNextLocalNTPPageShownBundleFailureErrors: {\r\n id: 19003,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up showing the local ntp page on page exception.\r\n */\r\n EdgeNextLocalNTPPageShownPageExceptionError: {\r\n id: 19004,\r\n source: pageTsFileName,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up showing the local ntp page on page exception.\r\n */\r\n EdgeNextLocalNTPPageShownJSSMismatchExceptionError: {\r\n id: 19005,\r\n source: pageTsFileName,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n },\r\n\r\n /**\r\n * When the page is redirected to the local NTP page due to an unavoidable network failure.\r\n */\r\n EdgeNextLocalNtpDueToNetwork: {\r\n id: 19006,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up reloading the NTP page on jss mismatch exception.\r\n */\r\n EdgeNextPageReloadedPageExceptionError: {\r\n id: 19010,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Errors when form code is missing for Edge Chromium Page.\r\n */\r\n EdgeChromiumPageMissingFormCode: {\r\n id: 19012,\r\n source: EdgeChromiumPageConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * When the is reloaded due to an unavoidable network failure.\r\n */\r\n EdgeNextPageReloadedDueToNetwork: {\r\n id: 19013,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * When the page fails to render due to an unavoidable network failure.\r\n */\r\n EdgeNextPageRenderFailedDueToNetwork: {\r\n id: 19014,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst AdsDetectionSourceFile = \"AdsDetection.ts\";\r\nconst AdRefreshSourceFile = \"AdsRefresh.ts\";\r\nconst ApnWrapperSourceFile = \"AppnexusWrapper.ts\";\r\nconst DisplayAdsAdsDetectionSourceFile = \"AdsDetection.ts\";\r\nconst DisplayAdsConnectorSourceFile = \"DisplayAds.connector.ts\";\r\nconst DisplayAdsManagerConnectorSourceFile = \"DisplayAdsManager.connector.ts\";\r\nconst DisplayAdsWCSourceFile = \"DisplayAdsWC.ts\";\r\nconst NativeAdConnectorSourceFile = \"NativeAd.connector.ts\";\r\nconst OathWrapperSourceFile = \"OathAdsWrapper.ts\";\r\nconst JacWrapperSourceFile = \"JacAdsWrapper.ts\";\r\nconst PlacementManagerConnectorSourceFile = \"PlacementManager.connector.ts\";\r\nconst PlacementManagerCookieSyncSourceFile = \"PlacementManagerCookieSync.ts\";\r\nconst PlacementManagerCMSServiceSourceFile = \"PlacementManagerCMSService.ts\";\r\nconst NativeAdClientConnectorSourceFile = \"NativeAdClient.connector.ts\";\r\nconst PartnerScriptLoaderFile = \"PartnerScriptLoader.ts\";\r\nconst NativeAdBeaconSourceFile = \"Beacon.ts\";\r\n\r\nexport const MonetizationAppErrors = {\r\n /** Failed to load Placement Manager. */\r\n PlacementManagerLoadError: {\r\n id: 20000,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load arrangement position on native ad experience. */\r\n ArrangementPositionLoadError: {\r\n id: 20001,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get CMS Content. */\r\n GetCMSContentError: {\r\n id: 20002,\r\n source: PlacementManagerCMSServiceSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get SAM RTB Response. */\r\n GetSAMRTBResponseError: {\r\n id: 20003,\r\n source: PlacementManagerConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load MediaNet End Of Article Block. */\r\n MediaNetEOABError: {\r\n id: 20005,\r\n source: \"medianetNativeAdOnArticle.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Invalid promo module config */\r\n InvalidPromoModuleConfig: {\r\n id: 20006,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to download cookie sync external script. */\r\n CookieSyncDownloadExternalScriptError: {\r\n id: 20007,\r\n source: PlacementManagerCookieSyncSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Missing cookie sync external script. */\r\n CookieSyncMissingExternalScriptUrl: {\r\n id: 20008,\r\n source: PlacementManagerCookieSyncSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Cookie sync timeout. */\r\n CookieSyncTimeout: {\r\n id: 20009,\r\n source: PlacementManagerCookieSyncSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Cookie sync partner script error */\r\n CookieSyncPartnerScriptError: {\r\n id: 20010,\r\n source: PlacementManagerCookieSyncSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Cookie pixel sync partner download error */\r\n CookieSyncPixelPartnerDownloadError: {\r\n id: 20011,\r\n source: PlacementManagerCookieSyncSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load cms or backfill native ad. */\r\n CMSOrBackfillNativeAdLoadError: {\r\n id: 20012,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load cms or backfill native ad. */\r\n PlacementPositionMismatchingError: {\r\n id: 20013,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Missing required property on placement manager config */\r\n MissingRequiredPropertyPlacementManagerConfig: {\r\n id: 20014,\r\n source: PlacementManagerConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Missing page type target scope. */\r\n NativeAdTargetScopeError: {\r\n id: 20016,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** River video ad partner error. */\r\n RiverVideoAdPartnerError: {\r\n id: 20017,\r\n source: PartnerScriptLoaderFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** JsTracker ad partner script load error. */\r\n JsTrackerPartnerScriptLoadError: {\r\n id: 20018,\r\n source: NativeAdBeaconSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Viglink load error. */\r\n ViglinkError: {\r\n id: 20019,\r\n source: PartnerScriptLoaderFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Missing topic id for stripe native ad */\r\n MissingTopicId: {\r\n id: 20020,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Topic id not found for stripe native ad */\r\n TopicIdNotFound: {\r\n id: 20021,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get SAM RTB Response. This App error doesn't trigger alert */\r\n GetSAMRTBResponseErrorNoAlert: {\r\n id: 20022,\r\n source: PlacementManagerConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load Oath JS */\r\n DisplayAdsOathLoadError: {\r\n id: 20050,\r\n source: OathWrapperSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load AppNexus JS */\r\n DisplayAdsApnLoadError: {\r\n id: 20051,\r\n source: ApnWrapperSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** AppNexus Provider was empty */\r\n DisplayAdsApnEmptyProvider: {\r\n id: 20052,\r\n source: ApnWrapperSourceFile,\r\n severity: Severity.Alert\r\n },\r\n\r\n /** Ads Detection no initialized properly Provider was empty */\r\n DisplayAdsAdsDetectionNotInit: {\r\n id: 20053,\r\n source: DisplayAdsAdsDetectionSourceFile,\r\n severity: Severity.Alert,\r\n pb\r\n },\r\n\r\n /** Failed to load Moat JS */\r\n DisplayAdsMoatLoadError: {\r\n id: 20054,\r\n source: DisplayAdsManagerConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Display ad objects were not available for refresh */\r\n DisplayAdsNoAdObjects: {\r\n id: 20055,\r\n source: AdRefreshSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** There was a problem in encoding CMS provider ID from base 62 to 32 */\r\n DisplayAdsProviderIdEncode: {\r\n id: 20056,\r\n source: DisplayAdsConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load Jac JS */\r\n DisplayAdsJacLoadError: {\r\n id: 20057,\r\n source: JacWrapperSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Display Ad size is not valid */\r\n DisplayAdsInvalidSizeError: {\r\n id: 20058,\r\n source: JacWrapperSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** parameter for rendering ads is invalid */\r\n DisplayAdsInvalidParameterError: {\r\n id: 20059,\r\n source: JacWrapperSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Pg code not decoded correctly for the market */\r\n DisplayAdsPGCodeError: {\r\n id: 20060,\r\n source: DisplayAdsWCSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Pg code not decoded correctly for the market */\r\n DisplayAdsSlowResponding: {\r\n id: 20061,\r\n source: AdsDetectionSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Pg code not decoded correctly for the market */\r\n DisplayAdsNoBid: {\r\n id: 20062,\r\n source: AdsDetectionSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Pg code not decoded correctly for the market */\r\n DisplayAdsResponseError: {\r\n id: 20063,\r\n source: AdsDetectionSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const TaboolaRiverAppErrors = {\r\n /** Failed to fetch taboola river data. */\r\n TaboolaRiverFetchError: {\r\n id: 20100,\r\n source: \"TaboolaRiver.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst NativeAdServiceFile = \"NativeAdService.ts\";\r\nconst CMSAdServiceFile = \"CMSAdService.ts\";\r\nconst SAMAdServiceFile = \"SAMAdService.ts\";\r\nconst NativeAdVideoMapperFile = \"VideoPropsMapper.ts\";\r\n\r\n/** Failed to get valid Response from AdService library */\r\nexport const GetNativeAdRequestError: AppError = {\r\n id: 20150,\r\n source: NativeAdServiceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get valid Response from AdService library */\r\nexport const GetNativeAdResponseError: AppError = {\r\n id: 20151,\r\n source: NativeAdServiceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get valid CMS Response from AdService library */\r\nexport const GetCMSAdResponseError: AppError = {\r\n id: 20152,\r\n source: CMSAdServiceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get valid SAM Response from AdService library */\r\nexport const GetSAMRTBResponseErrorNoAlert: AppError = {\r\n id: 20153,\r\n source: SAMAdServiceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get valid SAM Response from AdService library */\r\nexport const GetSAMRTBRequestError: AppError = {\r\n id: 20154,\r\n source: SAMAdServiceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get valid SAM Response from AdService library */\r\nexport const GetSAMRTBResponseError: AppError = {\r\n id: 20155,\r\n source: SAMAdServiceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get valid SAM Response from AdService library */\r\nexport const GetSAMRTBResponseParseError: AppError = {\r\n id: 20156,\r\n source: SAMAdServiceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get valid SAM Response from AdService library */\r\nexport const GetSAMRTBResponseException: AppError = {\r\n id: 20157,\r\n source: SAMAdServiceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to backfill invalid SAM placement which will result in empty card */\r\nexport const BackfillSAMRTBResponseError: AppError = {\r\n id: 20158,\r\n source: SAMAdServiceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to play nativead video */\r\nexport const PlayNativeAdVideoError: AppError = {\r\n id: 20159,\r\n source: NativeAdVideoMapperFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst NativeAdFeedCardFile = \"NativeAdFeedCard.connector.ts\";\r\nconst NativeAdGlanceCardFile = \"NativeAdGlanceCard.connector.ts\";\r\n\r\n/** Failed to get valid Response from AdService library in SuperApp Feed card*/\r\nexport const GetNativeAdFeedCardError: AppError = {\r\n id: 20160,\r\n source: NativeAdFeedCardFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Failed to get valid Response from AdService library in SuperApp Glance card*/\r\nexport const GetNativeAdGlanceCardError: AppError = {\r\n id: 20161,\r\n source: NativeAdGlanceCardFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Native ad card mapper was passed invalid JSON from WPO */\r\nexport const InvalidWPOPlacementJsonError: AppError = {\r\n id: 20162,\r\n source: \"NativeAdCardDataMapper.ts\",\r\n severity: Severity.HighImpact,\r\n pb\r\n};\r\n\r\n/** Failed to play nativead video */\r\nexport const AuctionCallDuplicateInWebWorker: AppError = {\r\n id: 20170,\r\n source: SAMAdServiceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nconst PCSPageHTMLFile = \"PCS-Page.cshtml\";\r\nexport const CoreLibAppErrors = {\r\n /** Deprecated composition layout config in use */\r\n DeprecatedCompositionLayoutUsed: {\r\n id: 20200,\r\n source: \"LayoutBase.inspector.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** Deprecated composition layout config in use */\r\n InvalidColumnInGridConfig: {\r\n id: 20201,\r\n source: \"GridBase.inspector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error during loading of page bundles.\r\n */\r\n ErrorLoadingBundle: {\r\n id: 20202,\r\n source: PCSPageHTMLFile,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n\r\n /**\r\n * Generic JS exceptions.\r\n */\r\n GenericJSException: {\r\n id: 20203,\r\n source: PCSPageHTMLFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Missing localStorage exception\r\n */\r\n LocalStorageDoesntExist: {\r\n id: 20204,\r\n source: \"WebStorage.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Missing sessionStorage exception\r\n */\r\n SessionStorageDoesntExist: {\r\n id: 20205,\r\n source: \"WebStorage.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Exception thrown during rendering in React, with no additional handling specified.\r\n * This means React has unmounted your DOM tree and you'll be getting a blank page.\r\n */\r\n ReactRenderException: {\r\n id: 20206,\r\n source: PCSPageHTMLFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n },\r\n\r\n /** App Error to log network connection status */\r\n NetworkConnectionStatus: {\r\n id: 20207,\r\n source: \"NetworkCheck.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** App Error thrown when a */\r\n SubscriptionCallbackExecError: {\r\n id: 20208,\r\n source: \"libs/core/src/utilities/SubscribableMap.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Authenticatedfetch related App errors */\r\nconst AuthenticatedFetchSourceFile = \"AuthenticatedFetch.ts\";\r\nexport const AuthenticatedFetchErrors = {\r\n ErrorCodeReceived: {\r\n id: 20302,\r\n source: AuthenticatedFetchSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n CallFailed: {\r\n id: 20303,\r\n source: AuthenticatedFetchSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n EmptyJsonResponse: {\r\n id: 20304,\r\n source: AuthenticatedFetchSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst resolverSourceFile = \"resolver.ts\";\r\nexport const ResolverAppErrors = {\r\n /**\r\n * IndexedDb write failed in resolver.\r\n */\r\n IndexedDbWriteFailed: {\r\n id: 22010,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * IndexedDb read failed in resolver.\r\n */\r\n IndexedDbReadFailed: {\r\n id: 22011,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Config Service Resolver fetch errors.\r\n */\r\n CrsFetchError: {\r\n id: 22012,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Config Service Resolver was enabled but we still went to Assets to getConfig and merge configs at client (classic resolver).\r\n */\r\n ReceivedConfigFromCdnAsCrsFetchFailed: {\r\n id: 22013,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Exception In GetConfig function.\r\n */\r\n GetConfigException: {\r\n id: 22014,\r\n source: resolverSourceFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n },\r\n\r\n /**\r\n * IndexedDb bulk read failed in resolver.\r\n */\r\n IndexedDbBulkReadFailed: {\r\n id: 22015,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * IndexedDb failed to remove cached config\r\n */\r\n IndexedDbFailedToRemoveCachedConfig: {\r\n id: 22016,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * IndexedDb failed to clear all configs\r\n */\r\n IndexedDbFailedToClearAllCachedConfigs: {\r\n id: 22017,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Render cache is purged due to changes in config\r\n */\r\n RenderCachePurgedDueToChangesInConfig: {\r\n id: 22018,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Render cache failed purge even though config changes were detected.\r\n */\r\n FailedToPurgeRenderCache: {\r\n id: 22019,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Failed to refresh config cache\r\n */\r\n RefreshConfigCacheFailed: {\r\n id: 22020,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Failed to initialize indexedDb\r\n */\r\n IndexedDbInitFailed: {\r\n id: 22021,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Different cache busting identifier\r\n */\r\n DifferentCbid: {\r\n id: 22022,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error writing prg flights to localStorage\r\n */\r\n PrgFlightLsWriteError: {\r\n id: 22023,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error reading prg flights to localStorage\r\n */\r\n PrgFlightLsReadError: {\r\n id: 22024,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * Configs served from CDN after CRS fetch failed\r\n */\r\nexport const ResolverErrorConfigsDownloadedByCdn: AppError = {\r\n id: 22025,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Cached configs are for different flight\r\n */\r\nexport const CachedConfigsForDifferentFlight: AppError = {\r\n id: 22026,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * CRS sent non-200 response\r\n */\r\nexport const ConfigCrsFetchNon200Response: AppError = {\r\n id: 22027,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Cdn config fetch received non-200 response\r\n */\r\nexport const ConfigCdnFetchNon200Response: AppError = {\r\n id: 22028,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Invalid config ref received to resolve configs when Git configs is enabled\r\n */\r\nexport const GitConfigsInvalidConfigRef: AppError = {\r\n id: 22029,\r\n source: resolverSourceFile,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\n/**\r\n * Invalid configResolver object for Git configs flight\r\n */\r\nexport const GitConfigsInvalidConfigResolver: AppError = {\r\n id: 22030,\r\n source: resolverSourceFile,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\n/**\r\n * Config Service Resolver timeout.\r\n */\r\nexport const CrsFetchTimeout: AppError = {\r\n id: 22031,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Starts from 22050 */\r\nexport const FallbackResolverAppErrors = {\r\n /**\r\n * getConfigRecursive function try catch failed.\r\n */\r\n RecursiveGetFailed: {\r\n id: 22050,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * BlobFetcher fetch failed for configs or config index.\r\n */\r\n BlobFetchReturnedNull: {\r\n id: 22051,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nexport const HubAppErrors = {\r\n /**\r\n * Error during app initialization for hub page experience.\r\n */\r\n HubErrorPage: {\r\n id: 22100,\r\n source: \"web.page.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Warning that hub server side rendering is skipped and client side rendering is triggered\r\n * due to either server error or slow server response.\r\n */\r\n HubSSRSkip: {\r\n id: 22110,\r\n source: \"web.page.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nconst EdgePageFileName = \"Edge/web.page.ts\";\r\n\r\n/** Edge App Type errors. */\r\nexport const EdgeAppErrors = {\r\n ErrorFetchingChildCookie: {\r\n id: 23000,\r\n source: EdgePageFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error during app initialization for Edge page experience.\r\n */\r\n EdgeErrorPage: {\r\n id: 23001,\r\n source: EdgePageFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error fetching the APP_ANON cookie on Edge page load\r\n */\r\n ErrorFetchingAppAnonCookie: {\r\n id: 23002,\r\n source: EdgePageFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error during set flight instrumentation data\r\n */\r\n ErrorSetFlightInstrumentation: {\r\n id: 23003,\r\n source: EdgePageFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Warning that edge server side rendering is skipped and client side rendering is triggered\r\n * due to either server error or slow server response.\r\n */\r\n EdgeSSRSkip: {\r\n id: 23004,\r\n source: EdgePageFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nexport const BingCardsAppErrors = {\r\n BingCardGetHotelAnswersError: {\r\n id: 24001,\r\n source: \"BingCardsServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n BingCardGetHotelErrorFromService: {\r\n id: 24002,\r\n source: \"BingCardsServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n BingCardGetAnswersError: {\r\n id: 24003,\r\n source: \"BingCardsExperience.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n BingCardInvalidEntityType: {\r\n id: 24004,\r\n source: \"BingCardsExperience.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n BingCardErrorOut: {\r\n id: 24005,\r\n source: \"BingCardsExperience.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const BingAnswersAppErrors = {\r\n UnknownError: {\r\n id: 24101,\r\n source: \"BingAnswers.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n FailedToLoadData: {\r\n id: 24102,\r\n source: \"BingAnswers.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n NoCardsContentType: {\r\n id: 24103,\r\n source: \"BingAnswers.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n NoCardsRelated: {\r\n id: 24104,\r\n source: \"BingAnswers.connector.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nconst BingShoppingShopCardServiceClientSourceFile = \"bing-shopping/ShopCardServiceClient.ts\";\r\nconst BingShoppingShopCardWpoDataMapperFile = \"libs/feed-layout/.../ShoppingCardDataMapper.ts\";\r\n\r\nexport const BingShoppingShopCardError = {\r\n ShopCardServiceFetchError: {\r\n id: 24200,\r\n source: BingShoppingShopCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShopCardServiceFetchInvalidResponse: {\r\n id: 24201,\r\n source: BingShoppingShopCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShopCardServiceEmptyPersonalizedResponse: {\r\n id: 24202,\r\n source: BingShoppingShopCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShopCardServiceInvalidPersonalizedResponse: {\r\n id: 24203,\r\n source: BingShoppingShopCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShopCardServiceEmptyTrendingResponse: {\r\n id: 24204,\r\n source: BingShoppingShopCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShopCardServiceInvalidTrendingResponse: {\r\n id: 24205,\r\n source: BingShoppingShopCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const ShopCardWpoDataMapperError: AppError = {\r\n id: 24206,\r\n source: BingShoppingShopCardWpoDataMapperFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst BingShoppingLifestyleCardServiceClientSourceFile =\r\n \"bing-shopping-lifestyle-card/BingShoppingLifestyleCardServiceClient.ts\";\r\n\r\nconst BingShoppingLifestyleCardCdnServiceClientSourceFile =\r\n \"bing-shopping-lifestyle-card/BingShoppingLifestyleCardCdnServiceClient.ts\";\r\n\r\nconst BingShoppingLifestyleAutosuggestServiceClientSourceFile =\r\n \"bing-shopping-lifestyle-card/BingShoppingLifestyleAutosuggestServiceClient.ts\";\r\n\r\nconst BingShoppingLifestyleConnectorSourceFile =\r\n \"bing-shopping-lifestyle-card/BingShoppingLifestyleCard.connector.ts\";\r\nexport const BingShoppingLifestyleCardError = {\r\n // Lifestyle Shopcard service Errors\r\n LifestyleShopCardServiceFetchError: {\r\n id: 24300,\r\n source: BingShoppingLifestyleCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopCardServiceFetchInvalidResponse: {\r\n id: 24301,\r\n source: BingShoppingLifestyleCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopCardServiceEmptyResponse: {\r\n id: 24302,\r\n source: BingShoppingLifestyleCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopCardServiceInvalidResponse: {\r\n id: 24303,\r\n source: BingShoppingLifestyleCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n // Lifestyle Shopcard Cdn service Errors\r\n LifestyleShopCardCdnServiceFetchError: {\r\n id: 24304,\r\n source: BingShoppingLifestyleCardCdnServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopCardCdnServiceFetchInvalidResponse: {\r\n id: 24305,\r\n source: BingShoppingLifestyleCardCdnServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopCardCdnServiceInvalidResponse: {\r\n id: 24306,\r\n source: BingShoppingLifestyleCardCdnServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n // Lifestyle Autosuggest service Errors\r\n LifestyleShopAutosuggestServiceFetchError: {\r\n id: 24310,\r\n source: BingShoppingLifestyleAutosuggestServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopAutosuggestServiceFetchInvalidResponse: {\r\n id: 24311,\r\n source: BingShoppingLifestyleAutosuggestServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopAutosuggestServiceEmptyResponse: {\r\n id: 24312,\r\n source: BingShoppingLifestyleAutosuggestServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopAutosuggestServiceInvalidResponse: {\r\n id: 24313,\r\n source: BingShoppingLifestyleAutosuggestServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopAutosuggestInvalidSuggestionUrl: {\r\n id: 24314,\r\n source: BingShoppingLifestyleConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ShoppingSmartListServiceClientSourceFile =\r\n \"shopping-smart-list/ShoppingSmartListServiceClient.ts\";\r\n\r\nconst ShoppingSmartListConnectorSourceFile =\r\n \"shopping-smart-list/ShoppingSmartList.connector.ts\";\r\n\r\nexport const ShoppingSmartListError = {\r\n ShoppingSmartListServiceEmptyResponse: {\r\n id: 24400,\r\n source: ShoppingSmartListServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShoppingSmartListServiceFetchError: {\r\n id: 24401,\r\n source: ShoppingSmartListServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShoppingSmartListServiceInvalidResponse: {\r\n id: 24402,\r\n source: ShoppingSmartListServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShoppingSmartListServiceMissingRequiredFields: {\r\n id: 24403,\r\n source: ShoppingSmartListServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShoppingSmartListChromiumApiConfigDataFetchFailure: {\r\n id: 24404,\r\n source: ShoppingSmartListConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst BingMiniShoppingServiceClientSourceFile =\r\n \"bing-mini-shopping/BingMiniShoppingServiceClient.ts\";\r\n\r\nexport const BingMiniShoppingError = {\r\n // Bing-MiniShopping service Errors\r\n BingMiniShoppingServiceFetchError: {\r\n id: 24500,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BingMiniShoppingServiceEmptyResponse: {\r\n id: 24501,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BingMiniShoppingServiceInvalidResponse: {\r\n id: 24502,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BingMiniShoppingServiceInsufficientDealsItems: {\r\n id: 24503,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BingMiniShoppingServiceInsufficientActiveDealsItems: {\r\n id: 24504,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BingMiniShoppingServiceInsufficientTrendingItems: {\r\n id: 24505,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BingMiniShoppingServiceInsufficientTrendingCategories: {\r\n id: 24506,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst BingShoppingMeStripeServiceClientSourceFile =\r\n \"bing-shopping-mestripe/BingShoppingMeStripeServiceClient.ts\";\r\n\r\nexport const BingShoppingMeStripeServiceFetchError: AppError = {\r\n id: 24510,\r\n source: BingShoppingMeStripeServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingShoppingMeStripeServiceEmptyResponse: AppError = {\r\n id: 24511,\r\n source: BingShoppingMeStripeServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingShoppingMeStripeServiceInvalidResponse: AppError = {\r\n id: 24512,\r\n source: BingShoppingMeStripeServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingShoppingMeStripeServiceMissingRequiredFields: AppError = {\r\n id: 24513,\r\n source: BingShoppingMeStripeServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst ShoppingCarouselServiceClientSourceFile =\r\n \"shopping-carousel/ShoppingCarouselServiceClient.ts\";\r\n\r\nexport const ShoppingCarouselEntitiesDataServiceFetchError: AppError = {\r\n id: 24520,\r\n source: ShoppingCarouselServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingCarouselEntitiesDataServiceEmptyResponse: AppError = {\r\n id: 24521,\r\n source: ShoppingCarouselServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingCarouselEntitiesDataServiceInvalidResponse: AppError = {\r\n id: 24522,\r\n source: ShoppingCarouselServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingCarouselEntitiesDataServiceInsufficientItems: AppError = {\r\n id: 24523,\r\n source: ShoppingCarouselServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst ShoppingCarouselConnectorSourceFile =\r\n \"shopping-carousel/ShoppingCarousel.connector.ts\";\r\n\r\nexport const ShoppingCarouselGenericError: AppError = {\r\n id: 24524,\r\n source: ShoppingCarouselConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst ShoppingCarouselSourceFile =\r\n \"shopping-carousel/ShoppingCarousel.tsx\";\r\n\r\nexport const ShoppingCarouselRenderError: AppError = {\r\n id: 24525,\r\n source: ShoppingCarouselSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst ShoppingCarouselMapperSourceFile =\r\n \"shopping-carousel/ShoppingCarouselCardDataMapper.ts\";\r\n\r\nexport const ShoppingCarouselCardMapperError: AppError = {\r\n id: 24526,\r\n source: ShoppingCarouselMapperSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst ShoppingContentCardServiceClientSourceFile =\r\n \"ShoppingContentCard.serviceClient.ts\";\r\n\r\nexport const ShoppingContentCardServiceFetchError: AppError = {\r\n id: 24530,\r\n source: ShoppingContentCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingContentCardServiceEmptyResponse: AppError = {\r\n id: 24531,\r\n source: ShoppingContentCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingContentServiceInvalidData: AppError = {\r\n id: 24532,\r\n source: ShoppingContentCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingContentServiceInsufficientActiveItems: AppError = {\r\n id: 24533,\r\n source: ShoppingContentCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingContentServiceMissingFields: AppError = {\r\n id: 24534,\r\n source: ShoppingContentCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst ShoppingPageContentClientSourceFile =\r\n \"shopping-page-content/ShoppingPageContentClient/data.ts\";\r\n\r\nexport const ShoppingPageContentClientAggregateFeedFailedError: AppError = {\r\n id: 24535,\r\n source: ShoppingPageContentClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingPageContentClientProductBullseyeFailedError: AppError = {\r\n id: 24536,\r\n source: ShoppingPageContentClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingPageContentClientHomepageFailedError: AppError = {\r\n id: 24537,\r\n source: ShoppingPageContentClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingPageContentClientCategoryDealsFailedError: AppError = {\r\n id: 24538,\r\n source: ShoppingPageContentClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingPageContentClientShopTheLookPrimaryLookFailedError: AppError = {\r\n id: 24539,\r\n source: ShoppingPageContentClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingPageContentClientShopTheLookFeedFailedError: AppError = {\r\n id: 24540,\r\n source: ShoppingPageContentClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingPageContentClientArticlesFailedError: AppError = {\r\n id: 24541,\r\n source: ShoppingPageContentClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SelectCarouselCardDataMapperError: AppError = {\r\n id: 24601,\r\n source: \"select-carousel/select-carousel-card/SelectCarouselCardDataMapper.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SelectCarouselConfigLoadError: AppError = {\r\n id: 24602,\r\n source: \"select-carousel/SelectCarousel.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\nconst NewsSegmentCarouselFileName = \"NewsSegmentCarousel.ts\";\r\nexport const NewsSegmentCarouselAppErrors = {\r\n /**\r\n * Error fetching feed endpoint - invalid response.\r\n */\r\n NewsSegmentCarouselInvalidFeedResponse: {\r\n id: 24660,\r\n source: NewsSegmentCarouselFileName,\r\n severity: Severity.Critical,\r\n pb\r\n }\r\n};\r\n\r\nconst RecommendedSearchCarouselMapperSourceFile =\r\n \"RecommendedSearchCarouselDataMapper.ts\";\r\nexport const RecommendedSearchCarouselMapperError: AppError = {\r\n id: 24700,\r\n source: RecommendedSearchCarouselMapperSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const PartnerUpsellCardDataMapperError: AppError = {\r\n id: 24800,\r\n source: \"partner-upsell-card/PartnerUpsellCardDataMapper.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error in page.ts of Shopping app type.\r\n */\r\nexport const ShoppingErrorPage: AppError = {\r\n id: 24900,\r\n source: \"Shopping/page.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\nexport const PageSettingsDataConnectorAppErrors = {\r\n PageSettingsGetInitialState: {\r\n id: 26001,\r\n source: \"PageSettingsData.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst MicrosoftNewsEntryPointFileName = \"MicrosoftNews.connector.ts\";\r\nexport const MicrosoftNewsEntryPointAppErrors = {\r\n /**\r\n * Error during app initialization for MicrosoftNews page experience.\r\n */\r\n MicrosoftNewsErrorPage: {\r\n id: 27000,\r\n source: MicrosoftNewsEntryPointFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const NavigationDataConnectorAppErrors = {\r\n /**\r\n * Error while trying to fetch the Navigation Items\r\n */\r\n NavigationDataGetNavigationItems: {\r\n id: 28000,\r\n source: \"NavigationData.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n NavigationDataIndexedDbInitializationFailed: {\r\n id: 28001,\r\n source: \"NavigationData.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n NavigationDataIndexedDbWriteFailed: {\r\n id: 28002,\r\n source: \"NavigationData.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n NavigationDataIndexedDbBulkReadFailed: {\r\n id: 28003,\r\n source: \"NavigationData.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const CategoryDataConnectorAppErrors = {\r\n /**\r\n * Error while to get the category details\r\n */\r\n CategoryDataGetCategoryDetail: {\r\n id: 28100,\r\n source: \"CategoryData.connector.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n CategoryDataIndexedDbInitializationFailed: {\r\n id: 28101,\r\n source: \"CategoryData.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n CategoryDataIndexedDbWriteFailed: {\r\n id: 28102,\r\n source: \"CategoryData.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n CategoryDataIndexedDbBulkReadFailed: {\r\n id: 28103,\r\n source: \"CategoryData.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst OneSericeFetch = \"OneSericeFetch.ts\";\r\nconst OneSericeUtility = \"OneSericeUtility.ts\";\r\n/* App errors related to centralized OneService fetch call */\r\nexport const FetchResponseNullOrError: AppError = {\r\n id: 28210,\r\n source: OneSericeFetch,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const NonAuthFetchResponseNullOrError: AppError = {\r\n id: 28211,\r\n source: OneSericeFetch,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const AuthFetchResponseNullOrError: AppError = {\r\n id: 28212,\r\n source: OneSericeFetch,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FailedToRetrieveAuthTokenFromWDXClient: AppError = {\r\n id: 28213,\r\n source: OneSericeUtility,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FailedToRetrieveUserAuthTokenAndMUID: AppError = {\r\n id: 28215,\r\n source: OneSericeUtility,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * App reporting messages related to Stripe Experience\r\n */\r\nexport const StripeAppErrors = {\r\n InvalidConfig: {\r\n id: 28300,\r\n source: \"Stripe.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const NotificationBellErrors = {\r\n /** Failed to fetch the notification bell data content */\r\n DataFetchError: {\r\n id: 28400,\r\n source: \"NotificationBell.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n JsonParseError: {\r\n id: 28401,\r\n source: \"LocalStorageSettings.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n WCDataFetchError: {\r\n id: 28410,\r\n source: \"NotificationBell.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n WCJsonParseError: {\r\n id: 28411,\r\n source: \"LocalStorageSettings.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n WCNewsItemDataFetchError: {\r\n id: 28412,\r\n source: \"NotificationBellServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n WCSettingFetchError: {\r\n id: 28414,\r\n source: \"InterestsWC.ts\",\r\n severity,\r\n pb\r\n },\r\n WCSettingUpdateError: {\r\n id: 28415,\r\n source: \"InterestsWC.ts\",\r\n severity,\r\n pb\r\n },\r\n WCCountInconsistent: {\r\n id: 28416,\r\n source: \"NotificationBellWC.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Layout Preference Data Connector related App errors */\r\nconst LayoutPreferenceDataSourceFile = \"LayoutPreferenceData.connector.ts\";\r\nexport const LayoutPreferenceDataErrors = {\r\n /** Failed to retrieve Layout Preference Data */\r\n LayoutPreferenceDataGetFailed: {\r\n id: 28500,\r\n source: LayoutPreferenceDataSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * App reporting messages related to StripeView Experience\r\n */\r\nexport const StripeViewAppErrors = {\r\n InvalidConfig: {\r\n id: 28600,\r\n source: \"StripeView.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n ChildLoadError: {\r\n id: 28601,\r\n source: \"StripeView.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Sentiment Line Chart Connector related app errors */\r\nconst SentimentLineChartSourceFile = \"SentimentLineChart.connector.ts\";\r\nexport const SentimentLineChartErrors = {\r\n ContentFetchError: {\r\n id: 28700,\r\n source: SentimentLineChartSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Sentiment Result Card Connector related app errors */\r\nconst SentimentResultCardSourceFile = \"SentimentResultCard.connector.ts\";\r\nexport const SentimentResultCardErrors = {\r\n ContentFetchError: {\r\n id: 28710,\r\n source: SentimentResultCardSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Sentiment Map Connector related app errors */\r\nconst SentimentMapSourceFile = \"SentimentMap.connector.ts\";\r\nexport const SentimentMapErrors = {\r\n ContentFetchError: {\r\n id: 28720,\r\n source: SentimentMapSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Election Results Card Connector related app errors */\r\nconst ElectionResultsCardFile = \"ElectionResultsCard.connector.ts\";\r\nexport const ElectionResultsCardErrors = {\r\n ContentFetchError: {\r\n id: 28730,\r\n source: ElectionResultsCardFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Sentiment Bar chart Connector related app errors */\r\nconst SentimentBarChartSourceFile = \"SentimentBarChart.connector.ts\";\r\nexport const SentimentBarChartErrors = {\r\n ContentFetchError: {\r\n id: 28740,\r\n source: SentimentBarChartSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Elction Result Map connector App errors */\r\nconst ElectionResultMapConnectorSourceFile = \"ElectionResultMap.connector.ts\";\r\nexport const ElectionResultMapConnectorErrors = {\r\n UnknownError: {\r\n id: 28750,\r\n source: ElectionResultMapConnectorSourceFile,\r\n severity\r\n },\r\n\r\n ContentFetchError: {\r\n id: 28751,\r\n source: ElectionResultMapConnectorSourceFile,\r\n severity\r\n }\r\n};\r\n\r\n/** Elction Result Map Inspector App errors */\r\nconst ElectionResultMapInspectorSourceFile = \"ElectionResultMap.inspector.ts\";\r\nexport const ElectionResultMapInspectorErrors = {\r\n EmptyResultSummaryError: {\r\n id: 28752,\r\n source: ElectionResultMapInspectorSourceFile,\r\n severity\r\n }\r\n};\r\n/** Elction Result Map App errors */\r\nconst ElectionResultMapSourceFile = \"ElectionResultMap.tsx\";\r\nexport const ElectionResultMapErrors = {\r\n FetchAndUpdateElectionDataError: {\r\n id: 28753,\r\n source: ElectionResultMapSourceFile,\r\n severity\r\n }\r\n};\r\n\r\n/** Election Editor's Note App errors */\r\nexport const ElectionEditorsNoteErrors = {\r\n\r\n ContentFetchError: {\r\n id: 28760,\r\n source: \"ElectionEditorsNote.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Election Delegate Counter related app errors */\r\nexport const ElectionDelegateCounterErrors = {\r\n ContentFetchError: {\r\n id: 28770,\r\n source: \"ElectionDelegateCounter.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents fetch failure for Feed visualizer experience */\r\nexport const FeedVisualizerFetchFailed: AppError = {\r\n id: 28780,\r\n source: \"FeedVisualizer.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Topics hub - failed to fetch topic by name\r\n */\r\nexport const TopicByNameFetchFailed: AppError = {\r\n id: 28790,\r\n source: \"TopicsHub.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * App reporting messages related to Partner Widget Experience\r\n */\r\nexport const PartnerWidgetAppErrors = {\r\n /** default breakpoint settings missing */\r\n DefaultBreakpointSettingsMissing: {\r\n id: 28801,\r\n source: \"PartnerWidget.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** non whitelisted source url */\r\n NonWhitelistedSourceUrl: {\r\n id: 28802,\r\n source: \"PartnerWidget.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents RecommendedSearch related App errors */\r\nconst RecommendedTopicsSourceFile = \"RecommendedTopics.connector.ts\";\r\nexport const RecommendedTopicsErrors = {\r\n /** Failed to connect to the Topics Data Connector */\r\n TopicsDataConnectorFailed: {\r\n id: 28901,\r\n source: RecommendedTopicsSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Topic Clicked was null */\r\n InvalidTopicClick: {\r\n id: 28902,\r\n source: RecommendedTopicsSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst webWorkerSource = \"Web worker\";\r\nconst webWorkerUtility = \"WebWorkerUtility.ts\";\r\nexport const WebWorkerErrors = {\r\n /** Web worker script load error (404 response) */\r\n FileNotFound: {\r\n id: 29000,\r\n source: webWorkerUtility,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Web worker runtime error, fired by web worker on unhandled exceptions */\r\n RuntimeError: {\r\n id: 29001,\r\n source: webWorkerSource,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Web worker message timeout */\r\n MessageTimeout: {\r\n id: 29002,\r\n source: webWorkerUtility,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** Web worker handled errors. These are the errors received as messages from web worker */\r\n HandledError: {\r\n id: 29003,\r\n source: webWorkerSource,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PageTimingsSource = \"entry-point-shared-utils/src/PageTimings.ts\";\r\n/**\r\n * Indicates that for some reason the page never received all the perf markers it was waiting for\r\n * resulting in the timeout logic kicking in.\r\n */\r\nexport const WaitForAllPerfMarkersTimeoutInvoked: AppError = {\r\n id: 29100,\r\n source: PageTimingsSource,\r\n severity: Severity.Alert,\r\n pb\r\n};\r\n\r\n/**\r\n * Indicates that for some reason the page never received all the secondary perf markers\r\n * it was waiting for, resulting in the timeout logic kicking in.\r\n */\r\nexport const WaitForAllSecondaryPerfMarkersTimeoutInvoked: AppError = {\r\n id: 29101,\r\n source: PageTimingsSource,\r\n severity: Severity.Alert,\r\n pb\r\n};\r\n\r\nconst PageLoadTimeSource = \"entry-point-shared-utils/src/TrackPageLoadTime.ts\";\r\n/**\r\n * Indicates that for some reason the page load time is not able to be sent out.\r\n */\r\nexport const PageLoadTimeError: AppError = {\r\n id: 29102,\r\n source: PageLoadTimeSource,\r\n severity: Severity.Alert,\r\n pb\r\n};\r\n\r\nconst FirstPartyEntryPointFileName = \"FirstParty.connector.ts\";\r\nexport const FirstPartyEntryPointAppErrors = {\r\n /**\r\n * Error during app initialization for FirstParty page experience.\r\n */\r\n FirstPartyErrorPage: {\r\n id: 29200,\r\n source: FirstPartyEntryPointFileName,\r\n severity,\r\n pb\r\n },\r\n /** Error during initial SSO call, either the call failed of the user was not signed in */\r\n SSOFailedError: {\r\n id: 29250,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst HomePageEntryPointFileName = \"HomePage.connector.ts\";\r\nexport const HomePageEntryPointAppErrors = {\r\n /**\r\n * Error during app initialization for Home page experience.\r\n */\r\n HomePageErrorPage: {\r\n id: 29300,\r\n source: HomePageEntryPointFileName,\r\n severity,\r\n pb\r\n },\r\n /** Error during initial SSO call, either the call failed of the user was not signed in */\r\n SSOFailedError: {\r\n id: 29301,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst WindowsEntryPointFileName = \"Windows.connector.ts\";\r\n\r\nexport const WindowsEntryPointAppErrors = {\r\n /**\r\n * Error during app initialization for Windows page experience.\r\n */\r\n WindowsErrorPage: {\r\n id: 29400,\r\n source: WindowsEntryPointFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up showing the local ntp page on page exception.\r\n */\r\n WindowsPageShownPageExceptionError: {\r\n id: 29401,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up reloading the NTP page on jss mismatch exception.\r\n */\r\n WindowsPageReloadedPageExceptionError: {\r\n id: 29402,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error fetching the APP_ANON cookie on Windows page load\r\n */\r\n ErrorFetchingAppAnonCookie: {\r\n id: 29403,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst WeatherAppEntrySourceFile = \"Weather.connector.ts\";\r\nconst WeatherLocationSearchSourceFile = \"WeatherLocationSearch.connector.ts\";\r\nconst WeatherMapSourceFile = \"WeatherMap.connector.ts\";\r\nconst WeatherMapHelperClient = \"WeatherMapHelperClient.ts\";\r\nconst WeatherInfoCardConnectorSourceFile = \"WeatherInfoCard.connector.ts\";\r\nconst WeatherWpoApiDataMapperFile = \"libs/feed-layout/.../WeatherCardDataMapper\";\r\n\r\n/** Error during 'weather' app initialization. */\r\nexport const WeatherEntryPointAppError: AppError = {\r\n id: 29500,\r\n source: WeatherAppEntrySourceFile,\r\n severity: Severity.HighImpact,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Fetch no data when search for locations from msn api */\r\nexport const WeatherLocationSearchNullError: AppError = {\r\n id: 29501,\r\n source: WeatherDataConnectorSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception to fetch search for locations from msn api */\r\nexport const WeatherLocationSearchFetchError: AppError = {\r\n id: 29502,\r\n source: WeatherDataConnectorSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Warnings when weather fail on bot traffic. These failures should not trigger alert */\r\nexport const WeatherGoogleBotError: AppError = {\r\n id: 29503,\r\n source: WeatherOverviewApiClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Warnings when weather location search is invalid */\r\nexport const WeatherLocationSearchInvalidSuggestionIdError: AppError = {\r\n id: 29504,\r\n source: WeatherLocationSearchSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception when fail to fetch hurricane data */\r\nexport const WeatherMapHurricaneApiError: AppError = {\r\n id: 29505,\r\n source: WeatherMapSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when Hurricane schema broken */\r\nexport const WeatherMapHurricaneSchemaError: AppError = {\r\n id: 29506,\r\n source: WeatherMapSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when write user weather settings to pdp */\r\nexport const WeatherPDPUserSettingsWriteFailed: AppError = {\r\n id: 29507,\r\n source: WeatherPdpClientSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when OneService response is incorrect */\r\nexport const WeatherCardOneServiceDataError: AppError = {\r\n id: 29508,\r\n source: WeatherInfoCardConnectorSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when weather card is in invalid state */\r\nexport const WeatherCardInvalidStateError: AppError = {\r\n id: 29509,\r\n source: WeatherCardConnectorSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when fail to fetch weather tile version */\r\nexport const WeatherTileVersionApiError: AppError = {\r\n id: 29510,\r\n source: WeatherMapHelperClient,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when schema not match when fetch weather tile version */\r\nexport const WeatherTileVersionApiSchemaError: AppError = {\r\n id: 29511,\r\n source: WeatherMapHelperClient,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when save home fail for non-sign-in user with HttpOnly cookie */\r\nexport const WeatherServerCookieSaveError: AppError = {\r\n id: 29512,\r\n source: WeatherDataConnectorSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when fail to fetch Bing map tile data */\r\nexport const WeatherMapBingTileLayerApiError: AppError = {\r\n id: 29513,\r\n source: WeatherMapWeatherLayersSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when fail to fetch radar tile data */\r\nexport const WeatherMapRadarApiError: AppError = {\r\n id: 29514,\r\n source: WeatherMapRadarSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when fail to fetch Precipitation tile data */\r\nexport const WeatherMapPrecipitationApiError: AppError = {\r\n id: 29515,\r\n source: WeatherMapPrecipitationSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when fail to fetch GenericSevere tile data */\r\nexport const WeatherMapGenericSevereApiError: AppError = {\r\n id: 29516,\r\n source: WeatherMapGenericSevereLayerSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when fail to fetch Heatmap tile data */\r\nexport const WeatherMapHeatmapApiError: AppError = {\r\n id: 29517,\r\n source: WeatherMapHeatmapRenderLayerSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when fail to fetch animation tile data */\r\nexport const WeatherMapWindAnimationApiError: AppError = {\r\n id: 29518,\r\n source: WeatherMapWeatherLayersSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when fail to fetch animation tile data */\r\nexport const WeatherMapBorderApiError: AppError = {\r\n id: 29519,\r\n source: WeatherMapWeatherLayersSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when fail to fetch Bing json label tile data */\r\nexport const WeatherMapJsonLabelApiError: AppError = {\r\n id: 29520,\r\n source: WeatherMapBingJsonLabelLayerSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when fail to fetch OneCanvasTileLayer tile data */\r\nexport const WeatherMapOneCanvasTileLayerApiError: AppError = {\r\n id: 29521,\r\n source: WeatherMapBingOneCanvasTileLayerSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when fetch current weather failed */\r\nexport const WeatherFetchCurrentWeatherError: AppError = {\r\n id: 29522,\r\n source: MultiLocationWeatherServiceSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when weather data mapper error */\r\nexport const WeatherWpoApiDataMapperError: AppError = {\r\n id: 29523,\r\n source: WeatherWpoApiDataMapperFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\nexport const WeatherSSRSkip: AppError = {\r\n id: 29524,\r\n source: \"web.page.ts\",\r\n severity,\r\n pb: {\r\n // set userImpact to false (same for other SSR errors) as we will fallback to CSR in this case and user will not notice any difference in experience (page may load slower)\r\n // We do want alert enabled for these errors as there can be systematic issues on these errors\r\n userImpacting: false,\r\n errorBehavior: ErrorBehavior.Fallback\r\n }\r\n};\r\n\r\nexport const WeatherSSRException: AppError = {\r\n id: 29525,\r\n source: \"node.index.ts\",\r\n severity,\r\n pb: {\r\n userImpacting: false,\r\n errorBehavior: ErrorBehavior.Fallback\r\n }\r\n};\r\n\r\n/** Failed to fetch weather data for Summary card in O365 feed */\r\nexport const SummaryCardWeatherDataConnector: AppError = {\r\n id: 29526,\r\n source: WeatherDataConnectorSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\nexport const WeatherOverviewDataIncomplete: AppError = {\r\n id: 29527,\r\n source: WeatherOverviewConnectorSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to fetch hourly forecast */\r\nexport const WeatherHourlyForecastFetchError: AppError = {\r\n id: 29528,\r\n source: WeatherOverviewApiClientSourceFile,\r\n severity: Severity.Alert,\r\n pb\r\n};\r\n\r\n/** Failed to fetch hourly forecast but retry success warning */\r\nexport const WeatherHourlyForecastFetchWarning: AppError = {\r\n id: 29529,\r\n source: WeatherOverviewApiClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Failed to fetch hourly forecast but retry success warning */\r\nexport const WeatherSummaryFetchWarning: AppError = {\r\n id: 29530,\r\n source: WeatherOverviewApiClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Failed to view hourly forecast */\r\nexport const WeatherHourlyForecastViewError: AppError = {\r\n id: 29531,\r\n source: WeatherOverviewReducerSourceFile,\r\n severity: Severity.Alert,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to fetch weather/overview/user API on the server side */\r\nexport const WeatherSummaryFetchErrorSSR: AppError = {\r\n id: 29532,\r\n source: WeatherDataConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb: {\r\n userImpacting: false\r\n }\r\n};\r\n\r\n/** Warnings when location not covered */\r\nexport const WeatherLocationNotCoveredError: AppError = {\r\n id: 29533,\r\n source: WeatherOverviewApiClientSourceFile,\r\n severity: Severity.Alert,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\nconst WeatherCardWCSourceFile = \"WeatherCardWC.ts\";\r\n/** Failed to get weather data connector for win dashboard weather widget */\r\nexport const WeatherCardWCDataConnector: AppError = {\r\n id: 29580,\r\n source: WeatherCardWCSourceFile,\r\n severity: Severity.HighImpact,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n/** Failed to get weather widget instance from win dashboard */\r\nexport const WeatherCardWCWidgetNull: AppError = {\r\n id: 29581,\r\n source: WeatherCardWCSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n/** Failed to initialize weather widget with exception */\r\nexport const WeatherCardWCException: AppError = {\r\n id: 29582,\r\n source: WeatherCardWCSourceFile,\r\n severity,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\nconst WindowsShellPage = \"windows-shell/page.ts\";\r\n\r\n/**\r\n * Windows Shell Page Error fetching the APP_ANON cookie\r\n */\r\nexport const WindowsShellPageErrorFetchingAppAnonCookie: AppError = {\r\n id: 29600,\r\n source: WindowsShellPage,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Windows Shell Page level exception was thrown\r\n */\r\nexport const WindowsShellPageError: AppError = {\r\n\r\n id: 29601,\r\n source: WindowsShellPage,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\nconst WindowsShellCardProvider = \"WindowsShellCardProvider.ts\";\r\n/**\r\n * Content that was retrieved from shell was invalid\r\n */\r\nexport const WindowsShellInvalidShellContentResponse: AppError = {\r\n id: 29602,\r\n source: WindowsShellCardProvider,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Content format was invalid\r\n */\r\nexport const WindowsShellInvalidContentResponse: AppError = {\r\n id: 29603,\r\n source: WindowsShellCardProvider,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Content was valid JSON but was missing items\r\n */\r\nexport const WindowsShellEmptyShellContentResponse: AppError = {\r\n id: 29604,\r\n source: WindowsShellCardProvider,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Received empty content after asking client to update the Oneservice content\r\n */\r\nexport const WindowsShellFailedToGetContentOnRetry: AppError = {\r\n id: 29605,\r\n source: WindowsShellCardProvider,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Tracking how often we need to ask client to retry getting new Oneservice content\r\n */\r\nexport const WindowsShellAskingToFetchNewContentForRetry: AppError = {\r\n id: 29606,\r\n source: WindowsShellCardProvider,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Error to track page load attempts when network is offline\r\n */\r\nexport const WindowsShellNetworkOffline: AppError = {\r\n id: 29607,\r\n source: WindowsShellPage,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nconst WindowsShellConnector = \"WindowsShellConnector.connector.ts\";\r\n\r\nexport const WindowsShellEmptyHeaderResponse: AppError = {\r\n id: 29700,\r\n source: WindowsShellConnector,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WindowsShellInvalidFeedResponse: AppError = {\r\n id: 29701,\r\n source: WindowsShellConnector,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WindowsShellFailedVersionResponse: AppError = {\r\n id: 29702,\r\n source: WindowsShellConnector,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WindowsShellInvalidTreatmentInfo: AppError = {\r\n id: 29703,\r\n source: WindowsShellConnector,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const WindowsShellNoSessionIdProvided: AppError = {\r\n id: 29704,\r\n source: WindowsShellConnector,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const WindowsShellFeedsApiUndefined: AppError = {\r\n id: 29705,\r\n source: WindowsShellConnector,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const WindowsShellClientSecondaryFunctionUndefined: AppError = {\r\n id: 29706,\r\n source: WindowsShellConnector,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const WindowsShellClientMuidNotProvided: AppError = {\r\n id: 29707,\r\n source: WindowsShellConnector,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const WindowsShellClientMuidChangeDetected: AppError = {\r\n id: 29708,\r\n source: WindowsShellConnector,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const WindowsShellClientSignedInMuidChangeDetected: AppError = {\r\n id: 29709,\r\n source: WindowsShellConnector,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nconst WindowsNewsAndInterestsPage = \"windows-newsandinterests/page.ts\";\r\nconst WindowsNewsAndInterestsConnector = \"WindowsNewsAndInterestsConnector.connector.ts\";\r\n\r\nexport const WindowsNewsAndInterestsPageError: AppError = {\r\n\r\n id: 29800,\r\n source: WindowsNewsAndInterestsPage,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WindowsNewsAndInterestsPageErrorFetchingAppAnonCookie: AppError = {\r\n id: 29801,\r\n source: WindowsNewsAndInterestsPage,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Invalid Dashboard load data */\r\nexport const InvalidDashboardData: AppError = {\r\n id: 29802,\r\n source: WindowsNewsAndInterestsConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception fetching dashboard data from host api */\r\nexport const ExceptionFetchingDashboardData: AppError = {\r\n id: 29803,\r\n source: WindowsNewsAndInterestsConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception fetching user account info from host api */\r\nexport const ExceptionFetchingAccountInfo: AppError = {\r\n id: 29804,\r\n source: WindowsNewsAndInterestsConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception fetching auth token from host api */\r\nexport const ExceptionFetchingAuthToken: AppError = {\r\n id: 29805,\r\n source: WindowsNewsAndInterestsConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception loading host api */\r\nexport const ExceptionLoadingHostApi: AppError = {\r\n id: 29806,\r\n source: WindowsNewsAndInterestsConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception subscribing dashboard events */\r\nexport const ExceptionSubscribingDashboardEvents: AppError = {\r\n id: 29807,\r\n source: WindowsNewsAndInterestsConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception subscribing dashboard events */\r\nexport const NotifyFeedDisplayReadyEventFailed: AppError = {\r\n id: 29808,\r\n source: WindowsNewsAndInterestsConnector,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const UnknownTelemetryOcid: AppError = {\r\n id: 29809,\r\n source: WindowsNewsAndInterestsConnector,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nconst WindowsNewsPlusPage = \"windows-newsplus/page.ts\";\r\nconst AuthHelperWindowsWidget = \"AuthHelperWindowsWidget.ts\";\r\n\r\nexport const WindowsNewsPlusPageError: AppError = {\r\n id: 29900,\r\n source: WindowsNewsPlusPage,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ExceptionCallingAuthenticatorApi: AppError = {\r\n id: 29901,\r\n source: AuthHelperWindowsWidget,\r\n severity,\r\n pb\r\n};\r\n\r\nconst SingleSignOnFileName = \"SingleSignOn.ts\";\r\n\r\n/** Auth related app messages (errors|warnings) */\r\nexport const AuthenticationAppMessages = {\r\n AuthRefreshBlockedError: {\r\n id: 33000,\r\n source: \"\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error fetching the APP_ANON cookie\r\n */\r\n ErrorFetchingAppAnonCookie: {\r\n id: 33001,\r\n source: \"\",\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error during app initialization for migration consent\r\n */\r\n EstablishMigrationConsent: {\r\n id: 33010,\r\n source: \"EstablishMigrationConsent.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n MigrationConsentServiceClient: {\r\n id: 33011,\r\n source: \"MigrationConsentServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n // This is a duplicate of 1405 and will be logged in addition to it.\r\n // This is to maintain backwards compatibility while allowing us to alert on this\r\n // from EdgeNext\r\n EstablishSignedInState: {\r\n id: 33012,\r\n source: establishSignInSource,\r\n severity,\r\n pb\r\n },\r\n\r\n // Auth private property is not available in edge chromium browser\r\n EdgeChromiumAuthPropertyNotAvailable: {\r\n id: 33013,\r\n source: pageTsFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n // The browser has reported that a user is signed in, but the request to fetch the user token has failed\r\n // This will usually result in a sign in state mismatch, which will cause a single page refresh for the user\r\n // If the user cannot get the token on the refreshed page they will no longer see signed in personalization\r\n EdgeChromiumTokenAccessFailure: {\r\n id: 33014,\r\n source: \"EstablishEdgeChromiumSignedInState.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n // Error logged when the sign in status reported doesn't match with the cookie state.\r\n SignInStatusCookieMismatch: {\r\n id: 33020,\r\n source: SingleSignOnFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Server side rendering error */\r\nexport const RenderServerError: AppError = {\r\n id: 34000,\r\n source: \"service-render-app.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * SSR Inline script errors\r\n */\r\nexport const SSRAppErrors = {\r\n /**\r\n * Warning that user clicked on the page before hydration and telemetry is initialized.\r\n */\r\n UntrackedClick: {\r\n id: 34001,\r\n source: \"\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Warning that SSR fragment fetch failed\r\n */\r\n FragmentFetchFailed: {\r\n id: 34002,\r\n source: \"SSRInline.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error that the Performance API was not available.\r\n */\r\n DidUseBrowserCacheAPIError: {\r\n id: 34003,\r\n source: \"SSRInline.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error that the expected response header was not available.\r\n */\r\n DidUseBrowserCachePolyfillResponseHeaderInvalid: {\r\n id: 34004,\r\n source: \"SSRInline.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error that when SSR failed to getConfig.\r\n */\r\n ServerCacheFetchFailed: {\r\n id: 34005,\r\n source: \"Resolver.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error that when connectorMap is invalid.\r\n */\r\n ConnectorMapInvalid: {\r\n id: 34006,\r\n source: \"Resolver.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error that SSR inline script failed.\r\n */\r\n FetchSSRPageFailed: {\r\n id: 34007,\r\n source: \"inline-head.ts\",\r\n severity: Severity.Alert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error that no window.innerWidth was reported.\r\n * Devices on mobile may report a window.innerWidth of 0 or undefined until the window.onLoad page completes.\r\n * This error is thrown when window.innerWidth is still 0 or undefined when onload has completed.\r\n * We expect this error to never throw.\r\n */\r\n FetchSSRPageFailedFromInvalidWindowInnerWidth: {\r\n id: 34008,\r\n source: \"inline-head.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error that when Server Cache config refresh failed\r\n */\r\n ServerCacheRefreshFailed: {\r\n id: 34009,\r\n source: \"Resolver.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error during app initialization for page experience.\r\n */\r\n WebEntryFailed: {\r\n id: 34010,\r\n source: \"webEntry.ts\",\r\n severity: Severity.Alert,\r\n pb\r\n },\r\n\r\n /**\r\n * SSR config resolver returned null config\r\n */\r\n SsrResolverReturnedNullConfig: {\r\n id: 34011,\r\n source: \"SsrResolver.ts\",\r\n severity: Severity.HighImpact,\r\n pb\r\n }\r\n};\r\n\r\nconst irisArcCallerFileName = \"Iris.arcCaller.ts\";\r\nconst irisArcParserFileName = \"Iris.arcParser.ts\";\r\nconst irisMasterFileName = \"Iris.master.ts\";\r\n\r\n/** The query parameters presented to the arc caller were found to be invalid. */\r\nexport const AppError_InvalidQParams_35001: AppError = {\r\n id: 35001,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_ArcCallFailed_35002: AppError = {\r\n id: 35002,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_ArcResponseNotOk_35003: AppError = {\r\n id: 35003,\r\n source: irisArcCallerFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\nexport const AppError_ArcResponseUnparsable_35004: AppError = {\r\n id: 35004,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_UnknownIrisErrorFound_35006: AppError = {\r\n id: 35006,\r\n source: irisArcParserFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_TimeoutIrisErrorFound_35007: AppError = {\r\n id: 35007,\r\n source: irisArcParserFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_TemplateIrisErrorFound_35008: AppError = {\r\n id: 35008,\r\n source: irisArcParserFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_ClientErrorIrisErrorFound_35009: AppError = {\r\n id: 35009,\r\n source: irisArcParserFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_DSourceIrisErrorFound_35010: AppError = {\r\n id: 35010,\r\n source: irisArcParserFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_ActionCallFailure_35011: AppError = {\r\n id: 35011,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_ActionFetchFailure_35012: AppError = {\r\n id: 35012,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_ActionResponseFailure_35013: AppError = {\r\n id: 35013,\r\n source: irisArcCallerFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\nexport const AppError_UncaughtErrorDetected_35014: AppError = {\r\n id: 35014,\r\n source: irisMasterFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_UnconvertableCreative_35015: AppError = {\r\n id: 35015,\r\n source: irisMasterFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_InvalidResponseFormat_35016: AppError = {\r\n id: 35016,\r\n source: irisMasterFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_UnparsableSingleResponseJSON_35018: AppError = {\r\n id: 35018,\r\n source: irisMasterFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_MissingQueryParams_35019: AppError = {\r\n id: 35019,\r\n source: irisMasterFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_MissingContext_35020: AppError = {\r\n id: 35020,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_MissingAppEnvironment_35021: AppError = {\r\n id: 35021,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_UndefinedRequestParams_35022: AppError = {\r\n id: 35022,\r\n source: irisArcCallerFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\nexport const AppError_UndefinedAppEnvironment_35023: AppError = {\r\n id: 35023,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_MissingAppEnvironmentProperty_35024: AppError = {\r\n id: 35024,\r\n source: irisArcCallerFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\nexport const AppError_ArcCallFailure_35025: AppError = {\r\n id: 35025,\r\n source: irisArcCallerFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\nexport const AppError_ArcCallFailureIrisUpdate_35026: AppError = {\r\n id: 35026,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents Iris data connector related App errors */\r\nconst IrisDataConnectorSourceFile = \"IrisData.connector.ts\";\r\nconst SubscriberValidatorSourceFile = \"SubscriberValidator.ts\";\r\nconst IrisPersistentStorageUtilityFile = \"IrisPersistentStorageUtility.ts\";\r\nconst IrisPersistentStorage = \"IrisPersistentStorage.ts\";\r\n\r\nexport const SubscriberNotFound: AppError = {\r\n id: 35117,\r\n source: SubscriberValidatorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const CreativeCountNegativeOrZero: AppError = {\r\n id: 35118,\r\n source: IrisDataConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const MissingIrisParameterForConditionalBanner: AppError = {\r\n id: 35119,\r\n source: SubscriberValidatorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const ErrorFoundForSurface: AppError = {\r\n id: 35120,\r\n source: IrisDataConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SubscriberNotFoundInIrisPlacementDictionary: AppError = {\r\n id: 35121,\r\n source: IrisDataConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConfigDataUndefined: AppError = {\r\n id: 35122,\r\n source: IrisPersistentStorageUtilityFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FailedToFetchConfigData: AppError = {\r\n id: 35123,\r\n source: IrisPersistentStorageUtilityFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ExceptionFetchingConfigData: AppError = {\r\n id: 35124,\r\n source: IrisPersistentStorageUtilityFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FailedToReadNurturingAcceptedFlag: AppError = {\r\n id: 35125,\r\n source: IrisPersistentStorageUtilityFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error when Iris fails to return Hotspots Data to the client. Previous #8181 */\r\nexport const FailedHotSpotsDataDelivery: AppError = {\r\n id: 35126,\r\n source: IrisPersistentStorageUtilityFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Hotspots data that was returned failed to validate. Previous #8182 */\r\nexport const IncompleteHotSpotsContract: AppError = {\r\n id: 35127,\r\n source: IrisPersistentStorageUtilityFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception making iris call from data connector */\r\nexport const ExceptionRequestingSurfaceInfo: AppError = {\r\n id: 35128,\r\n source: IrisDataConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error missing iris parameters for iris call to background images surface */\r\nexport const MissingIrisParameterForBackgroundImages: AppError = {\r\n id: 35129,\r\n source: SubscriberValidatorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Error missing params in surface collection when reading data from iris response */\r\nexport const SurfaceCollectionContextMissingParams: AppError = {\r\n id: 35130,\r\n source: IrisDataConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Chromium API not available to persist data */\r\nexport const IrisPersistChromiumAPIsNotAvailable: AppError = {\r\n id: 35131,\r\n source: IrisPersistentStorage,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Chromium API not available to get data */\r\nexport const IrisGetChromiumAPIsNotAvailable: AppError = {\r\n id: 35132,\r\n source: IrisPersistentStorage,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Chromium API failure */\r\nexport const IrisChromiumAPIsFailure: AppError = {\r\n id: 35133,\r\n source: IrisPersistentStorage,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents AccessTokens related App errors */\r\nconst AccessTokensSourceFile = \"AadAuthHelper.ts\";\r\nconst PivotContentErrorPlaceholderFile = \"AadErrorPlaceholder.tsx\";\r\nexport const EdgeChromiumAPIsNotAvailable: AppError = {\r\n id: 35200,\r\n source: AccessTokensSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const AcquireAccessTokenFailed: AppError = {\r\n id: 35201,\r\n source: AccessTokensSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const AcquireAccessTokenFailedForPivotContent: AppError = {\r\n id: 35202,\r\n source: PivotContentErrorPlaceholderFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const AcquireAccessTokenHandledFailure: AppError = {\r\n id: 35203,\r\n source: AccessTokensSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const AcquireAccessTokenHandledFailureForPivotContent: AppError = {\r\n id: 35204,\r\n source: PivotContentErrorPlaceholderFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents Render Cache errors*/\r\nconst PersistRenderCacheFile = \"PersistRenderCache.ts\";\r\nexport const RenderCacheErrors = {\r\n JssStyleMismatchWarning: {\r\n id: 35300,\r\n source: PersistRenderCacheFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n JssStyleCriticalMismatchError: {\r\n id: 35301,\r\n source: PersistRenderCacheFile,\r\n severity: Severity.Alert,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents OcvFeedbackData related App errors */\r\nconst OcvFeedbackDataSourceFile = \"OcvFeedbackData.ts\";\r\nexport const OcvFeedbackDataUndefinedDataNotAvailable: AppError = {\r\n id: 35401,\r\n source: OcvFeedbackDataSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const OcvFeedbackDataAddElementFailure: AppError = {\r\n id: 35402,\r\n source: OcvFeedbackDataSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const PivotHoverErrors = {\r\n /** Failed to fetch feed summary data for the Pivot Hover list. */\r\n FeedSummaryFetchError: {\r\n id: 35500,\r\n source: \"FeedSummaryFetcher.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PreloadActionHelpers = \"PreloadActionHelpers.ts\";\r\nexport const PreloadReportingMessages = {\r\n TtvrMissing: {\r\n id: 35600,\r\n source: PreloadActionHelpers,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n TfprMissing: {\r\n id: 35601,\r\n source: PreloadActionHelpers,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n TtvrSearchBoxMissing: {\r\n id: 35602,\r\n source: PreloadActionHelpers,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n TtfSearchBoxMissing: {\r\n id: 35603,\r\n source: PreloadActionHelpers,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nconst PrerenderPageTimingHelper = \"PrerenderPageTimingHelper.ts\";\r\nexport const PrerenderTtvrMissing: AppError = {\r\n id: 35604,\r\n source: PrerenderPageTimingHelper,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const PrerenderTtprMissing: AppError = {\r\n id: 35605,\r\n source: PreloadActionHelpers,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const PrerenderTtvrSearchBoxMissing: AppError = {\r\n id: 35606,\r\n source: PrerenderPageTimingHelper,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const PrerenderTtfSearchBoxMissing: AppError = {\r\n id: 35607,\r\n source: PrerenderPageTimingHelper,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const PrerenderRevalidateException: AppError = {\r\n id: 35608,\r\n source: \"PageRevealStaleStracker.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const GetTabTimingsReturnedFalse: AppError = {\r\n id: 35609,\r\n source: PrerenderPageTimingHelper,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const GetTabTimingsReturnedInvalidTimings: AppError = {\r\n id: 35610,\r\n source: PrerenderPageTimingHelper,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents push notifications lib App errors */\r\nconst PushNotificationsLibFile = \"PushNotifications.ts\";\r\nexport const PushNotificationsLibErrors = {\r\n FetchKeyError: {\r\n id: 35700,\r\n source: PushNotificationsLibFile,\r\n severity,\r\n pb\r\n },\r\n SubscribeUnsubscribeError: {\r\n id: 35701,\r\n source: PushNotificationsLibFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents content truncation lib App errors */\r\nconst ContentTruncationSourceFile = \"ContentTruncation.ts\";\r\nexport const ContentTruncationErrors = {\r\n OverTruncationError: {\r\n id: 35800,\r\n source: ContentTruncationSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst SuperAppEntryPointFileName = \"SuperAppPage.connector.ts\";\r\n\r\nexport const SuperAppEntryPointAppErrors = {\r\n /**\r\n * Super app page is not able to load Error Page.\r\n */\r\n SuperAppErrorPage: {\r\n id: 35901,\r\n source: SuperAppEntryPointFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Error fetching feed with location in Local News experience */\r\nconst LocalNewsFileName = \"LocalNews.connector.ts\";\r\nexport const LocalNewsInterestByLocationFetchFailed: AppError = {\r\n id: 36001,\r\n source: LocalNewsFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** 361XX represent office related errors */\r\nconst GenerateShareUiFile = \"GenerateShareUi.tsx\";\r\nconst OfficeShareUiFile = \"OfficeShareUi.tsx\";\r\nconst OfficeFallbackHandlerFileName = \"OfficeFallbackHandler.ts\";\r\nconst EnterpriseWaffleFile = \"EnterpriseWaffle.connector.ts\";\r\nconst OfficeDocumentsTableConnectorFile = \"OfficeDocumentsTable.connector.ts\";\r\nconst OfficeDocumentsTableMruUtilitiesFile = \"mru-plusplus.utility.ts\";\r\nconst OfficeSharePointSitesTableConnectorFile = \"SharePointSitesTable.connector.ts\";\r\nconst OfficeDocumentsTableDiscoverFile = \"DiscoverDocumentProvider.ts\";\r\nconst RecommendedDocumentsConnectorFile = \"RecommendedDocuments.connector.ts\";\r\nconst ShellNewTabDataFileName = \"ShellNewTabData.connector.ts\";\r\nconst OfficeDocumentProviderFile = \"OfficeDocumentProvider.ts\";\r\n\r\nexport const OfficeFallbackHandlerAppErrors = {\r\n /**\r\n * Tracking errors where we ended up reloading the office content on jss mismatch exception.\r\n */\r\n OfficeContentReloadedJSSMismatchExceptionError: {\r\n id: 36101,\r\n source: OfficeFallbackHandlerFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * Error for failure to generate office share ui\r\n */\r\nexport const OfficeGenerateShareUiError: AppError = {\r\n id: 36105,\r\n source: GenerateShareUiFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error for failure inside office share ui\r\n */\r\nexport const OfficeShareUiError: AppError = {\r\n id: 36106,\r\n source: OfficeShareUiFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error for Enterprise Waffle not able to retrieve app links from ShellNewTabData\r\n */\r\nexport const EnterpriseWaffleAppError: AppError = {\r\n id: 36107,\r\n source: EnterpriseWaffleFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error for failed call to Shell NTP API for Enterprise waffle and company logo\r\n */\r\nexport const ShellNewTabDataAPIError: AppError = {\r\n id: 36108,\r\n source: ShellNewTabDataFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Tracking errors when Office Documents Table type is not provided\r\n */\r\nexport const OfficeDocumentsTableInvalidTypeError: AppError = {\r\n id: 36110,\r\n source: OfficeDocumentsTableConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Tracking errors when Office Documents Table fails to fetch documents\r\n */\r\nexport const OfficeDocumentsTableDocumentFetchFailedError: AppError = {\r\n id: 36111,\r\n source: OfficeDocumentsTableConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Tracking errors when Office Documents Table fails to fetch documents\r\n */\r\nexport const OfficeDocumentsTableLinkFetchFailedError: AppError = {\r\n id: 36112,\r\n source: OfficeDocumentsTableConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Tracking errors when Office Documents Table fails to update document properties\r\n */\r\nexport const OfficeDocumentsTableUpdateDocumentPropertiesFailed: AppError = {\r\n id: 36113,\r\n source: OfficeDocumentsTableMruUtilitiesFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n* Tracking errors when Office Documents Table fails to fetch activity data\r\n*/\r\nexport const OfficeDocumentsTableFetchActivitiesFailed: AppError = {\r\n id: 36114,\r\n source: OfficeDocumentsTableDiscoverFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n* Tracking errors when Office Documents Table fails to fetch sharepoint data\r\n*/\r\nexport const OfficeDocumentsTableFetchSharepointFailed: AppError = {\r\n id: 36115,\r\n source: OfficeDocumentsTableDiscoverFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n* Tracking errors when Office Documents Table fails to generate document item\r\n*/\r\nexport const OfficeDocumentsTableGenerateDocumentItemError: AppError = {\r\n id: 36116,\r\n source: OfficeDocumentProviderFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Tracking errors when Office Share Point Table fails to fetch sites\r\n */\r\nexport const OfficeSharepointSitesTableFetchFailedError: AppError = {\r\n id: 36120,\r\n source: OfficeSharePointSitesTableConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Tracking errors when failed to get Recommended Documents\r\n */\r\nexport const RecommendedDocumentsFetchFailedError: AppError = {\r\n id: 36130,\r\n source: RecommendedDocumentsConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Tracking errors when failed to fetch preview image for recommended documents\r\n */\r\nexport const RecommendedDocumentsImageFetchFailedError: AppError = {\r\n id: 36131,\r\n source: RecommendedDocumentsConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents autos experiences App errors */\r\nconst AutosExperienceConnectorFile = \"AutosCard.connector.ts\";\r\nconst AutosExperienceServiceClientFile = \"AutosServiceClient.ts\";\r\n\r\n/**\r\n * Error while fetching research make models\r\n */\r\nexport const FetchResearchMakeModelDocumentError: AppError = {\r\n id: 36200,\r\n source: AutosExperienceServiceClientFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Error while fetching Film Strip Document Error\r\n */\r\nexport const FetchFilmStripDocumentError: AppError = {\r\n id: 36201,\r\n source: AutosExperienceServiceClientFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Error while fetching lead classified cms documents\r\n */\r\nexport const FetchClassifiedLeadCMSDocumentsError: AppError = {\r\n id: 36202,\r\n source: AutosExperienceServiceClientFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Error while fetching lead classified make models\r\n */\r\nexport const FetchLeadClassifiedMakeModelDocumentError: AppError = {\r\n id: 36203,\r\n source: AutosExperienceServiceClientFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Error for incorrect tab configuration\r\n */\r\nexport const TabsIncorrectConfiguration: AppError = {\r\n id: 36204,\r\n source: AutosExperienceConnectorFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Whole Page Optimization(WPO) App errors */\r\n\r\nconst WpoServiceFileName = \"WpoServiceClient.ts\";\r\nconst WpoMapFeedDataFileName = \"DesktopFeedEdgeNext.connector.ts\";\r\nconst WpoCardTypeUndefinedFileName = \"WpoCardFeedDataMapper.ts\";\r\n/**\r\n * Error reading local storage with wpo service call response.\r\n */\r\nexport const WpoFailedToReadFromLocalStorage: AppError = {\r\n id: 36300,\r\n source: WpoServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * WPO service call failure.\r\n */\r\nexport const WpoServiceCallFailure: AppError = {\r\n id: 36301,\r\n source: WpoServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error updating local storage with wpo service call response.\r\n */\r\nexport const WpoFailedToStoreToLocalStorage: AppError = {\r\n id: 36302,\r\n source: WpoServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Whole Page Optimization(WPO) App errors in SuperApp */\r\nconst WpoServiceHelperFileName = \"WPOServiceHelper.ts\";\r\n\r\n/**\r\n * WPO service call failure for glance cards in SA.\r\n */\r\nexport const WpoGlanceServiceCallFailure: AppError = {\r\n id: 36303,\r\n source: WpoServiceHelperFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * WPO service call no content respose for glance cards in SA.\r\n */\r\nexport const WpoGlanceServiceCallNoContent: AppError = {\r\n id: 36304,\r\n source: WpoServiceHelperFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * WPO service call failure for feed modules in SA.\r\n */\r\nexport const WpoFeedServiceCallFailure: AppError = {\r\n id: 36305,\r\n source: WpoServiceHelperFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * WPO service call no content respose for feed modules in SA.\r\n */\r\nexport const WpoFeedServiceCallNoContent: AppError = {\r\n id: 36306,\r\n source: WpoServiceHelperFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error updating local storage with wpo service call response in SuperApp.\r\n */\r\nexport const WpoFailedToStoreToSALocalStorage: AppError = {\r\n id: 36307,\r\n source: WpoServiceHelperFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Data Mapper error when WPO map feed data for card.\r\n */\r\nexport const WpoServiceFeedDataMapperError: AppError = {\r\n id: 36308,\r\n source: WpoMapFeedDataFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Card type Undefined Error when WPO return card data.\r\n */\r\nexport const WpoServiceCardTypeUndefinedError: AppError = {\r\n id: 36309,\r\n source: WpoCardTypeUndefinedFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Received non 20* response for WPO treatments call\r\n */\r\nexport const WpoTreatmentsNon20XResponse: AppError = {\r\n id: 36310,\r\n source: WpoServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** MarketSelector App errors */\r\nconst MarketSelectorFileName = \"marketSetting/index.ts\";\r\n\r\n/**\r\n * Error when load current market setting when initialize market selector\r\n */\r\nexport const MarketSelectorFailedToReadCurrentMarket: AppError = {\r\n id: 36401,\r\n source: MarketSelectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** FlyoutCard App errors */\r\nconst FlyoutCardFileName = \"FlyoutCard.connector.ts\";\r\n\r\n/**\r\n * Error when fetching feed in FlyoutCard experience\r\n */\r\nexport const FlyoutCardFailedToLoadOneServiceData: AppError = {\r\n id: 36410,\r\n source: FlyoutCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** The Microsoft logo component inside of the HeaderEdgeNext experience */\r\nconst MicrosoftLogo = \"MicrosoftLogo.tsx\";\r\n\r\n/** Represents a Microsoft Logo related error */\r\nexport const MicrosoftLogoErrors: AppError = {\r\n id: 36420,\r\n source: MicrosoftLogo,\r\n severity: Severity.HighImpact,\r\n pb\r\n};\r\n\r\n/**\r\n * Clarity Script App Errors\r\n */\r\nconst ClarityScriptLoaderFile = \"ScriptLoader.ts\";\r\n\r\n/**\r\n * Error loading clarity script.\r\n */\r\nexport const LoadScriptError: AppError = {\r\n id: 36500,\r\n source: ClarityScriptLoaderFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error starting clarity script.\r\n */\r\nexport const ScriptStartError: AppError = {\r\n id: 36501,\r\n source: ClarityScriptLoaderFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** 366XX are River OneService App Errors */\r\nexport const EmptyFeedWithFeedId: AppError = {\r\n id: 36600,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const EmptySearchedFeedWithFeedId: AppError = {\r\n id: 36601,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const EmptySearchedFeedWithFeedQuery: AppError = {\r\n id: 36602,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const EmptyKidsModeFeed: AppError = {\r\n id: 36603,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const UnauthorizedFeedResponse: AppError = {\r\n id: 36604,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const CardViewFeedDataMapperInvalidData: AppError = {\r\n id: 36605,\r\n source: \"OneServiceFeedDataMapper.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TabRiverRequestEmptyResponse: AppError = {\r\n id: 36606,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TabsRequestEmptyResponse: AppError = {\r\n id: 36607,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** 367XX are River App Errors */\r\nexport const FallingBackToSkipStrategy: AppError = {\r\n id: 36700,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FallingBackToFullHeightStrategy: AppError = {\r\n id: 36701,\r\n source: RiverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const RiverContentProviderFetchNextPageException: AppError = {\r\n id: 36702,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const InvalidEmptyRiverContent: AppError = {\r\n id: 36703,\r\n source: RiverSourceFile,\r\n severity: Severity.HighImpact,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\nexport const GridSectionCardRenderFailure: AppError = {\r\n id: 36704,\r\n source: \"GridSection.tsx\",\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BreakpointOutOfBoundWarning: AppError = {\r\n id: 36705,\r\n source: \"FastBreakpointManager.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents OutlookEmailPreview related App errors */\r\nconst OutlookEmailPreviewDataSourceFile = \"OutlookEmailPreviewDataHelper.ts\";\r\n\r\nexport const OutlookEmailPreviewEmailFetchError: AppError = {\r\n id: 36800,\r\n source: OutlookEmailPreviewDataSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const OutlookEmailPreviewUnreadEmailCountFetchError: AppError = {\r\n id: 36801,\r\n source: OutlookEmailPreviewDataSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst OutlookEmailPreviewAuthSourceFile = \"OutlookEmailPreviewAuthHelper.ts\";\r\nexport const OutlookEmailPreviewAccessTokenFetchError: AppError = {\r\n id: 36802,\r\n source: OutlookEmailPreviewAuthSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst FinancePageFilename = \"Finance.connector.ts\";\r\nconst FinanceUserServiceImplFile = \"FinanceUserServiceImpl.ts\";\r\nconst FinanceServiceImplFile = \"FinanceServiceImpl.ts\";\r\nconst FinancePrimeServiceImplFile = \"FinancePrimeServiceImpl.ts\";\r\nconst FinanceAutoSuggestServiceImplFile = \"AutoSuggestServiceImpl\";\r\nconst FinanceFalconServiceImplFile = \"FinanceFalconServiceImpl.ts\";\r\n\r\n/**\r\n * Error when initializing Finance page experience.\r\n */\r\nexport const FinanceEntryPointAppErrors: AppError = {\r\n id: 36900,\r\n source: FinancePageFilename,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get autosuggest because of unsuccessful fetch */\r\nexport const FinanceAutoSuggestFetchError: AppError = {\r\n id: 36901,\r\n source: FinanceAutoSuggestServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get autosuggest because the http code is not 20x */\r\nexport const FinanceAutoSuggestStatusError: AppError = {\r\n id: 36902,\r\n source: FinanceAutoSuggestServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get autosuggest because the response body is not valid */\r\nexport const FinanceAutoSuggestInvalidResponseBody: AppError = {\r\n id: 36903,\r\n source: FinanceAutoSuggestServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get MostActiveQuotes because unsuccess fetch */\r\nexport const FinanceMostActiveQuotesFetchError: AppError = {\r\n id: 36904,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get MostActiveQuotes because the http code is not 20x */\r\nexport const FinanceMostActiveQuotesStatusError: AppError = {\r\n id: 36905,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get MostActiveQuotes because the response body is not valid */\r\nexport const FinanceMostActiveQuotesInvalidResponseBody: AppError = {\r\n id: 36906,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception when fetch watchlist */\r\nexport const FinanceWatchListFetchFailed: AppError = {\r\n id: 36907,\r\n source: FinanceUserServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get Chart because unsuccess fetch */\r\nexport const FinanceChartFetchError: AppError = {\r\n id: 36908,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get Chart because the http code is not 20x */\r\nexport const FinanceChartStatusError: AppError = {\r\n id: 36909,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get Chart because the response body is not valid */\r\nexport const FinanceChartInvalidResponseBody: AppError = {\r\n id: 36910,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get QuoteSummary because unsuccess fetch */\r\nexport const FinanceQuoteSummaryFetchError: AppError = {\r\n id: 36911,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get QuoteSummary because the http code is not 20x */\r\nexport const FinanceQuoteSummaryStatusError: AppError = {\r\n id: 36912,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get QuoteSummary because the response body is not valid */\r\nexport const FinanceQuoteSummaryInvalidResponseBody: AppError = {\r\n id: 36913,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get Exchange because unsuccess fetch */\r\nexport const FinanceExchangeFetchError: AppError = {\r\n id: 36914,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get Exchange because the http code is not 20x */\r\nexport const FinanceExchangeStatusError: AppError = {\r\n id: 36915,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get Exchange because the response body is not valid */\r\nexport const FinanceExchangeInvalidResponseBody: AppError = {\r\n id: 36916,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get indices because of unsuccessful fetch */\r\nexport const FinanceIndicesFetchError: AppError = {\r\n id: 36917,\r\n source: FinanceAutoSuggestServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get indices because the http code is not 20x */\r\nexport const FinanceIndicesStatusError: AppError = {\r\n id: 36918,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get indices because the response body is not valid */\r\nexport const FinanceIndicesInvalidResponseBody: AppError = {\r\n id: 36919,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get equities because of unsuccessful fetch */\r\nexport const FinanceEquitiesFetchError: AppError = {\r\n id: 36920,\r\n source: FinanceAutoSuggestServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get equities because the http code is not 20x */\r\nexport const FinanceEquitiesStatusError: AppError = {\r\n id: 36921,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get equities because the response body is not valid */\r\nexport const FinanceEquitiesInvalidResponseBody: AppError = {\r\n id: 36922,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get equity financials because of unsuccessful fetch */\r\nexport const FinanceEquityFinancialsFetchError: AppError = {\r\n id: 36923,\r\n source: FinanceAutoSuggestServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get equity financials because the http code is not 20x */\r\nexport const FinanceEquityFinancialsStatusError: AppError = {\r\n id: 36924,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get equity financials because the response body is not valid */\r\nexport const FinanceEquityFinancialsInvalidResponseBody: AppError = {\r\n id: 36925,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst MoneyInfoCardConnectorSourceFile = \"MoneyInfoCard.connector.ts\";\r\n\r\n/** Exception when OneService response is incorrect */\r\nexport const MoneyInfoCardOneServiceDataError: AppError = {\r\n id: 36926,\r\n source: MoneyInfoCardConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get all currencies because of unsuccessful fetch */\r\nexport const FinanceGetAllCurrenciesFetchError: AppError = {\r\n id: 36927,\r\n source: FinanceAutoSuggestServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get all currencies because the http code is not 20x */\r\nexport const FinanceGetAllCurrenciesStatusError: AppError = {\r\n id: 36928,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get all currencies because the response body is not valid */\r\nexport const FinanceGetAllCurrenciesInvalidResponseBody: AppError = {\r\n id: 36929,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get microsoft id because of unsuccessful fetch */\r\nexport const FinanceGetMicrosoftIdFetchError: AppError = {\r\n id: 36930,\r\n source: FinancePrimeServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get microsoft id because the http code is not 20x */\r\nexport const FinanceGetMicrosoftIdStatusError: AppError = {\r\n id: 36931,\r\n source: FinancePrimeServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get microsoft id because the response body is not valid */\r\nexport const FinanceGetMicrosoftIdInvalidResponseBody: AppError = {\r\n id: 36932,\r\n source: FinancePrimeServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get MorningStar id because of unsuccessful fetch */\r\nexport const FinanceGetMorningStarIdFetchError: AppError = {\r\n id: 36933,\r\n source: FinancePrimeServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get MorningStar id because the http code is not 20x */\r\nexport const FinanceGetMorningStarIdStatusError: AppError = {\r\n id: 36934,\r\n source: FinancePrimeServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get MorningStar id because the response body is not valid */\r\nexport const FinanceGetMorningStarIdInvalidResponseBody: AppError = {\r\n id: 36935,\r\n source: FinancePrimeServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception when write user money settings to pdp */\r\nexport const FinancePDPUserSettingsWriteFailed: AppError = {\r\n id: 36936,\r\n source: FinanceUserServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get Funds because unsuccess fetch */\r\nexport const FinanceFundsFetchError: AppError = {\r\n id: 36937,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get Funds because the http code is not 20x */\r\nexport const FinanceFundsStatusError: AppError = {\r\n id: 36938,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get Funds because the response body is not valid */\r\nexport const FinanceFundsInvalidResponseBody: AppError = {\r\n id: 36939,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Reserve 3694* ids for errors in TTVR */\r\n/** Failed to get watchlist data before TTVR */\r\nexport const FinanceWatchlistDataVisuallyUnavailable: AppError = {\r\n id: 36940,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get quotes data before TTVR */\r\nexport const FinanceQuotesDataVisuallyUnavailable: AppError = {\r\n id: 36941,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get charts data before TTVR */\r\nexport const FinanceChartsDataVisuallyUnavailable: AppError = {\r\n id: 36942,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get movers data before TTVR */\r\nexport const FinanceMoversDataVisuallyUnavailable: AppError = {\r\n id: 36943,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get exchanges data before TTVR */\r\nexport const FinanceExchangesDataVisuallyUnavailable: AppError = {\r\n id: 36944,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get indices data before TTVR */\r\nexport const FinanceIndicesDataVisuallyUnavailable: AppError = {\r\n id: 36945,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get equities data before TTVR */\r\nexport const FinanceEquitiesDataVisuallyUnavailable: AppError = {\r\n id: 36946,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get equity financials data before TTVR */\r\nexport const FinanceEquityFinancialsDataVisuallyUnavailable: AppError = {\r\n id: 36947,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get currencies data before TTVR */\r\nexport const FinanceCurrenciesDataVisuallyUnavailable: AppError = {\r\n id: 36948,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get funds data before TTVR */\r\nexport const FinanceFundsDataVisuallyUnavailable: AppError = {\r\n id: 36949,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get microsoft id before TTVR */\r\nexport const FinanceGetMicrosoftIdDataVisuallyUnavailable: AppError = {\r\n id: 36950,\r\n source: FinancePrimeServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get morning star id before TTVR */\r\nexport const FinanceGetMorningStarIdDataVisuallyUnavailable: AppError = {\r\n id: 36951,\r\n source: FinancePrimeServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get news data before TTVR */\r\nexport const FinanceNewsDataVisuallyUnavailable: AppError = {\r\n id: 36952,\r\n source: OneServiceCardProviderFileName,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get events data before TTVR */\r\nexport const FinanceEventsDataVisuallyUnavailable: AppError = {\r\n id: 36953,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get lists data before TTVR */\r\nexport const FinanceListsDataVisuallyUnavailable: AppError = {\r\n id: 36954,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get list details data before TTVR */\r\nexport const FinanceListDetailsDataVisuallyUnavailable: AppError = {\r\n id: 36956,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get futures data before TTVR */\r\nexport const FinanceFuturesDataVisuallyUnavailable: AppError = {\r\n id: 36957,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get sentiment data before TTVR */\r\nexport const FinanceSentimentDataVisuallyUnavailable: AppError = {\r\n id: 36958,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to create portfolio */\r\nexport const FinanceCreatePortfolioFailed: AppError = {\r\n id: 36960,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to create transaction */\r\nexport const FinanceCreateTransactionFailed: AppError = {\r\n id: 36961,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to add to watchlist */\r\nexport const FinanceAddToWatchlistFailed: AppError = {\r\n id: 36962,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to sort watchlist */\r\nexport const FinanceSortWatchlistFailed: AppError = {\r\n id: 36963,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to delete from watchlist */\r\nexport const FinanceDeleteFromWatchlistFailed: AppError = {\r\n id: 36964,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get portfolio list. */\r\nexport const FinancePortfolioListFetchError: AppError = {\r\n id: 36965,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get portfolio data. */\r\nexport const FinancePortfolioDataFetchError: AppError = {\r\n id: 36966,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to delete portfolio. */\r\nexport const FinanceDeletePortfolioError: AppError = {\r\n id: 36967,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to update portfolio. */\r\nexport const FinanceUpdatePortfolioError: AppError = {\r\n id: 36968,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to delete transaction. */\r\nexport const FinanceDeleteTransactionError: AppError = {\r\n id: 36969,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to update transaction. */\r\nexport const FinanceUpdateTransactionError: AppError = {\r\n id: 36970,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to add to portfolio. */\r\nexport const FinanceAddToPortfolioError: AppError = {\r\n id: 36971,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to delete from portfolio. */\r\nexport const FinanceDeleteFromPortfolioError: AppError = {\r\n id: 36972,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to sort portfolio. */\r\nexport const FinanceSortPortfolioError: AppError = {\r\n id: 36973,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get events because of unsuccessful fetch */\r\nexport const FinanceEventsFetchError: AppError = {\r\n id: 36974,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get events because the http code is not 20x */\r\nexport const FinanceEventsStatusError: AppError = {\r\n id: 36975,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get events because the response body is not valid */\r\nexport const FinanceEventsInvalidResponseBody: AppError = {\r\n id: 36976,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get lists because of unsuccessful fetch */\r\nexport const FinanceListsFetchError: AppError = {\r\n id: 36977,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get lists because the http code is not 20x */\r\nexport const FinanceListsStatusError: AppError = {\r\n id: 36978,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get lists because the response body is not valid */\r\nexport const FinanceListsInvalidResponseBody: AppError = {\r\n id: 36979,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get lists details because of unsuccessful fetch */\r\nexport const FinanceListDetailsFetchError: AppError = {\r\n id: 36980,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get lists details because the http code is not 20x */\r\nexport const FinanceListDetailsStatusError: AppError = {\r\n id: 36981,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get list details because the response body is not valid */\r\nexport const FinanceListDetailsInvalidResponseBody: AppError = {\r\n id: 36982,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get stock aggregate holdings data. */\r\nexport const FinanceStockAggregateHoldingsDataFetchError: AppError = {\r\n id: 36983,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get stock top shareholders data. */\r\nexport const FinanceStockTopShareholdersDataFetchError: AppError = {\r\n id: 36984,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get stock top buyers data. */\r\nexport const FinanceStockTopBuyersDataFetchError: AppError = {\r\n id: 36985,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get stock new buyers data. */\r\nexport const FinanceStockNewBuyersDataFetchError: AppError = {\r\n id: 36986,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get stock top sellers data. */\r\nexport const FinanceStockTopSellersDataFetchError: AppError = {\r\n id: 36987,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get stock top exits data. */\r\nexport const FinanceStockTopExitsDataFetchError: AppError = {\r\n id: 36988,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Warnings on Finance watchlist api. */\r\nexport const FinanceWatchlistFetchWarning: AppError = {\r\n id: 36990,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Alert,\r\n pb: {\r\n userImpacting: false\r\n }\r\n};\r\n\r\n/** Warnings on fetch followed lists. */\r\nexport const FinanceFollowedListsFetchWarning: AppError = {\r\n id: 36991,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Alert,\r\n pb: {\r\n userImpacting: false\r\n }\r\n};\r\n\r\n/** Failed to add to followed lists. */\r\nexport const FinanceAddToFollowedListsError: AppError = {\r\n id: 36992,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to delete from followed lists. */\r\nexport const FinanceDeleteFromFollowedListsError: AppError = {\r\n id: 36993,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to update portfolio. */\r\nexport const FinanceUpdateFollowNumError: AppError = {\r\n id: 36994,\r\n source: FinanceUserServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get stock notifations data. */\r\nexport const FinanceNotificationDataFetchError: AppError = {\r\n id: 36995,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get stock FundIndividual data. */\r\nexport const FinanceFundIndividualDataFetchError: AppError = {\r\n id: 36996,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\nexport const FinanceSSRSkip: AppError = {\r\n id: 36998,\r\n source: \"web.page.ts\",\r\n severity,\r\n pb: {\r\n // set userImpact to false (same for other SSR errors) as we will fallback to CSR in this case and user will not notice any difference in experience (page may load slower)\r\n // We do want alert enabled for these errors as there can be systematic issues on these errors\r\n userImpacting: false,\r\n errorBehavior: ErrorBehavior.Fallback\r\n }\r\n};\r\n\r\nexport const FinanceSSRException: AppError = {\r\n id: 36999,\r\n source: \"node.index.ts\",\r\n severity,\r\n pb: {\r\n userImpacting: false,\r\n errorBehavior: ErrorBehavior.Fallback\r\n }\r\n};\r\n\r\n/**\r\n * Error when initializing Social page experience.\r\n */\r\nconst SocialConnectorSourceFile = \"Social.connector.ts\";\r\n\r\nexport const SocialNoModuleName: AppError = {\r\n id: 37000,\r\n source: SocialConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error when Social experience reducer recieves incorrect arguments\r\n */\r\n\r\nconst SocialExperienceReducerFile = \"Social.reducer.ts\";\r\n\r\nexport const SocialExperienceReducerIncorrectArgumentError: AppError = {\r\n id: 37001,\r\n source: SocialExperienceReducerFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error when trying to bind social data connector in social experience.\r\n */\r\nexport const SocialDataConnectorNotFound: AppError = {\r\n id: 37002,\r\n source: SocialExperienceReducerFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors on Social experience http requests\r\n */\r\n\r\nconst SocialAPISourceFile = \"Social.api.ts\";\r\n\r\nexport const SocialAPIRequestErrorUnknown: AppError = {\r\n id: 37020,\r\n source: SocialAPISourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialAPIRequestErrorContents: AppError = {\r\n id: 37021,\r\n source: SocialAPISourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialAPIRequestErrorComments: AppError = {\r\n id: 37022,\r\n source: SocialAPISourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialAPIRequestErrorUsers: AppError = {\r\n id: 37023,\r\n source: SocialAPISourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors on Social experience component renders\r\n */\r\n\r\nconst SocialExperienceFile = \"Social.tsx\";\r\n\r\nexport const SocialExperienceRenderErrorReactionBreakdown: AppError = {\r\n id: 37055,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorMultilineLogin: AppError = {\r\n id: 37058,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorNotificationTray: AppError = {\r\n id: 37059,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorOnboarding: AppError = {\r\n id: 37060,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorOnbardingThirdParty: AppError = {\r\n id: 37061,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorUnknownComponent: AppError = {\r\n id: 37062,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorCopyrightForm: AppError = {\r\n id: 37063,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorFollowButton: AppError = {\r\n id: 37064,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorGradientOverlay: AppError = {\r\n id: 37065,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorMain: AppError = {\r\n id: 37066,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorNotificationCard: AppError = {\r\n id: 37067,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorOnboardingUnderagePage: AppError = {\r\n id: 37068,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorPopup: AppError = {\r\n id: 37069,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorProfileManageDataPage: AppError = {\r\n id: 37070,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorPublisherSubscribeFollowButton: AppError = {\r\n id: 37071,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorReactionBreakdownListItem: AppError = {\r\n id: 37072,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperienceRenderErrorReportMenu: AppError = {\r\n id: 37073,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperiencePublisherIsFollowedFetchError: AppError = {\r\n id: 37074,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialExperiencePublisherFollowUnfollowError: AppError = {\r\n id: 37075,\r\n source: SocialExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst LocationSelectorConnectorFileName = \"LocationSelector.connector.ts\";\r\n/**\r\n * Suggestion Id is out of bounds or it doesn't exist;\r\n */\r\nexport const LocationSelectorInvalidSuggestionId: AppError = {\r\n id: 37100,\r\n source: LocationSelectorConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const CommunityErrorPage: AppError = {\r\n id: 37200,\r\n source: \"app-types/community/src/page.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * PDP Service library errors - 3730X\r\n */\r\nexport const UnknownBulkLoadGraphActionType: AppError = {\r\n id: 37300,\r\n source: \"PdpServiceClient.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Set of errors in story-snippet experience.\r\n */\r\nexport const StorySnippetInvalidStoryData: AppError = {\r\n id: 37450,\r\n source: \"StorySnippet.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Erro when Story Snippet experience receives invalid data schema from related content cluster endpoint.\r\n */\r\nexport const StorySnippetInvalidRelatedContentClusterData: AppError = {\r\n id: 37451,\r\n source: \"StorySnippet.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to MyBriefRiverCard\r\n */\r\nconst MyBriefRiverCardFileName = \"MyBriefRiverCard.connector.ts\";\r\nexport const MyBriefRiverCardMissingConfig: AppError = {\r\n id: 37500,\r\n source: MyBriefRiverCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const MyBriefRiverCardEmptyOrNullResponse: AppError = {\r\n id: 37501,\r\n source: MyBriefRiverCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst WindowsCardProviderFileName = \"WindowsCardProvider.ts\";\r\nexport const WindowsCardProviderResponseWasNullOrErroneous: AppError = {\r\n id: 37550,\r\n source: WindowsCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WindowsCardProviderErrorFetchingData: AppError = {\r\n id: 37551,\r\n source: WindowsCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WindowsCardProviderEmptyContentResponse: AppError = {\r\n id: 37552,\r\n source: WindowsCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst OneServicePageProviderFileName = \"OneServicePageProvider.ts\";\r\nexport const OneServicePageProviderResponseWasNullOrErroneous: AppError = {\r\n id: 37560,\r\n source: OneServicePageProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const OneServicePageProviderErrorFetchingData: AppError = {\r\n id: 37561,\r\n source: OneServicePageProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const OneServicePageProviderStaticContentLoaded: AppError = {\r\n id: 37562,\r\n source: OneServicePageProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const OneServicePageProviderNoContentReturned: AppError = {\r\n id: 37563,\r\n source: OneServicePageProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error related to Traffic experiences.\r\n */\r\nconst TrafficPageFileName = \"traffic/page.ts\";\r\nconst TrafficCardConnectorFileName = \"traffic-card/TrafficCard.connector.ts\";\r\nconst TrafficAutoSuggestClientFileName = \"traffic-card/AutoSuggest/DirectionsAutoSuggestClient.ts\";\r\nconst TrafficServiceFileName = \"traffic-lib/TrafficService.ts\";\r\nconst TrafficProfileServiceFileName = \"traffic-map/traffic-profile-service/TrafficProfileService.ts\";\r\nconst TrafficWCExperienceFileName = \"traffic-card-wc/TrafficCardWC.ts\";\r\n\r\nexport const TrafficEntryPointAppError: AppError = {\r\n id: 37600,\r\n source: TrafficPageFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TrafficIncidentsError: AppError = {\r\n id: 37601,\r\n source: TrafficCardConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TrafficAutoSuggestError: AppError = {\r\n id: 37602,\r\n source: TrafficAutoSuggestClientFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TrafficSettingsSaveError: AppError = {\r\n id: 37603,\r\n source: TrafficCardConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TrafficCardOneServiceJsonError: AppError = {\r\n id: 37604,\r\n source: TrafficCardConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TrafficCardOneServiceUserSettingsSaveError: AppError = {\r\n id: 37605,\r\n source: TrafficServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TrafficCardWCWidgetNull: AppError = {\r\n id: 37606,\r\n source: TrafficWCExperienceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TrafficCommuteLocationSaveError: AppError = {\r\n id: 37607,\r\n source: TrafficProfileServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TrafficCommuteLocationDeleteError: AppError = {\r\n id: 37608,\r\n source: TrafficProfileServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Represents GmailEmailPreview related App errors\r\n */\r\nconst GmailEmailPreviewDataSourceFile = \"GmailEmailPreview.connector.ts\";\r\nexport const GmailEmailPreviewGoogleAPIError: AppError = {\r\n id: 37700,\r\n source: GmailEmailPreviewDataSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const GmailEmailPreviewGmailAPIError: AppError = {\r\n id: 37701,\r\n source: GmailEmailPreviewDataSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst LocalNewsViewCardConnectorFileName = \"LocalNewsViewCard.connector.ts\";\r\n/**\r\n * Data connector fails to be found or to get the cards from;\r\n */\r\nexport const LocalNewsViewCardDataConnectorAppError: AppError = {\r\n id: 37800,\r\n source: LocalNewsViewCardConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * LocationFeedData Errors\r\n */\r\nexport const LocationFeedDataConnectorAppError: AppError = {\r\n id: 37900,\r\n source: \"LocationFeed.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to Admin Portal\r\n */\r\nconst AdminPortalConnectorFileName = \"AdminPortalData.connector.ts\";\r\nexport const AdminPortalSettingsFetchAppError: AppError = {\r\n id: 38000,\r\n source: AdminPortalConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const AdminPortalShimUiShown: AppError = {\r\n id: 38001,\r\n source: AdminPortalConnectorFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to Desktop Feed\r\n */\r\nconst DesktopFeedConnectorFileName = \"DesktopFeed.connector.ts\";\r\nexport const DesktopFeedRiverContentFetchFailed: AppError = {\r\n id: 38010,\r\n source: DesktopFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedUnsupportedCardType: AppError = {\r\n id: 38011,\r\n source: DesktopFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedFullPageAPIFetchFailed: AppError = {\r\n id: 38012,\r\n source: DesktopFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedFeedNativeAdServiceFetchFailed: AppError = {\r\n id: 38013,\r\n source: DesktopFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedFeedInvalidRiverTemplateId: AppError = {\r\n id: 38014,\r\n source: DesktopFeedConnectorFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedFeedInvalidEmptyRiver: AppError = {\r\n id: 38015,\r\n source: DesktopFeedConnectorFileName,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedInvalidSectionData: AppError = {\r\n id: 38016,\r\n source: DesktopFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedUnexpectedUpsellCard: AppError = {\r\n id: 38017,\r\n source: DesktopFeedConnectorFileName,\r\n message: \"Upsell card not expected to show up in the river, but it was returned by OneService.\",\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedTopStoriesMissingStories: AppError = {\r\n id: 38018,\r\n source: DesktopFeedConnectorFileName,\r\n message: \"Top stories card had less than 6 stories in response\",\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedColdStartCardIncorrectPosition: AppError = {\r\n id: 38019,\r\n source: DesktopFeedConnectorFileName,\r\n message: \"Cold Start card is returned in the wrong position by OneService.\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to Common Header\r\n */\r\nconst CommonHeaderConnectorFileName = \"CommonHeader.connector.ts\";\r\nconst CommonHeaderTsxFileName = \"CommonHeader.tsx\";\r\nexport const CommonHeaderNavigationFailed: AppError = {\r\n id: 38020,\r\n source: CommonHeaderConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const CommonHeaderInvalidConfig: AppError = {\r\n id: 38021,\r\n source: CommonHeaderConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const CommonHeaderMissingFormCode: AppError = {\r\n id: 38022,\r\n source: CommonHeaderConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const CommonHeaderRenderError: AppError = {\r\n id: 38023,\r\n source: CommonHeaderTsxFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const CommonHeaderSSOFailed: AppError = {\r\n id: 38024,\r\n source: CommonHeaderTsxFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const CommonHeaderMeControlLoadFailed: AppError = {\r\n id: 38025,\r\n source: CommonHeaderTsxFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const CommonHeaderInvalidUrl: AppError = {\r\n id: 38026,\r\n source: CommonHeaderConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Common header web component errors\r\n */\r\nexport const WindowsHeaderInvalidOptions: AppError = {\r\n id: 38030,\r\n source: \"WindowsHeader.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\nexport const VerticalsHeaderInvalidOptions: AppError = {\r\n id: 38040,\r\n source: \"VerticalsHeader.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to Search box WCE\r\n */\r\nconst SearchBoxWCFileName = \"SearchBoxWC.ts\";\r\nexport const SearchBoxWCMissingFormCode: AppError = {\r\n id: 38050,\r\n source: SearchBoxWCFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to Search box Custom WCE\r\n */\r\nconst SearchBoxAsApiFileName = \"SearchBoxAsApi.ts\";\r\nexport const SearchBoxAsApiResponseError: AppError = {\r\n id: 38051,\r\n source: SearchBoxAsApiFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SearchBoxWCAPIUnavailable: AppError = {\r\n id: 38052,\r\n source: SearchBoxWCFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SearchBoxWCWidgetInstanceUnavailable: AppError = {\r\n id: 38053,\r\n source: SearchBoxWCFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Set of errors in video-card experience.\r\n */\r\nexport const VideoCardInvalidVideoData: AppError = {\r\n id: 38100,\r\n source: \"VideoCard.connector.ts\",\r\n severity,\r\n pb\r\n};\r\nconst VideoCardFileName = \"VideoCard.tsx\";\r\nexport const VideoPlayerYouTubeError: AppError = {\r\n id: 38101,\r\n source: VideoCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const VideoPlayerFacebookError: AppError = {\r\n id: 38102,\r\n source: VideoCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to Newsbar Feed\r\n */\r\nconst NewsbarFeedConnectorFileName = \"NewsbarFeedWC.ts\";\r\nexport const NewsbarFeedRiverContentFetchFailed: AppError = {\r\n id: 38200,\r\n source: NewsbarFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const NewsbarFeedUnsupportedCardType: AppError = {\r\n id: 38201,\r\n source: NewsbarFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const NewsbarFeedFullPageAPIFetchFailed: AppError = {\r\n id: 38202,\r\n source: NewsbarFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const NewsbarFeedInvalidRiverTemplateId: AppError = {\r\n id: 38203,\r\n source: NewsbarFeedConnectorFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const NewsbarFeedInvalidEmptyRiver: AppError = {\r\n id: 38204,\r\n source: NewsbarFeedConnectorFileName,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\nexport const NewsbarFeedInvalidSectionData: AppError = {\r\n id: 38205,\r\n source: NewsbarFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const NewsbarFeedUserEndBlankFeed: AppError = {\r\n id: 38206,\r\n source: NewsbarFeedConnectorFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const NewsbarFeedMarketSelectorFailed: AppError = {\r\n id: 38207,\r\n source: NewsbarFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to Newsbar AppType\r\n */\r\nexport const NewsbarFeedAppTypeInitError: AppError = {\r\n id: 38250,\r\n source: NewsbarFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/*\r\n * Set of errors in sports-card experience.\r\n */\r\nconst SportsDataServiceFileName = \"SportsDataService.ts\";\r\nexport const SportsDataServiceResponseWasNullOrErroneous: AppError = {\r\n id: 38300,\r\n source: SportsDataServiceFileName,\r\n severity: Severity.HighImpact,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\nexport const SportsDataServiceFetchFailed: AppError = {\r\n id: 38301,\r\n source: SportsDataServiceFileName,\r\n severity: Severity.HighImpact,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\nexport const SportsDataServiceUserSettingSaveFailed: AppError = {\r\n id: 38302,\r\n source: SportsDataServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception when search sports suggestion */\r\nexport const SportsCardSearchSuggestionError: AppError = {\r\n id: 38303,\r\n source: SportsDataServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Set of errors in the sports-matchup-card experience\r\n */\r\n\r\nconst SportsMatchupCardConnectorSourceFile = \"SportsMatchupCard.connector.ts\";\r\n\r\n/** Exception when OneService response is incorrect */\r\nexport const SportsMatchupCardOneServiceDataError: AppError = {\r\n id: 38310,\r\n source: SportsMatchupCardConnectorSourceFile,\r\n severity: Severity.HighImpact,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\nconst SportsMatchupCardSourceFile = \"SportsMatchupCard.tsx\";\r\n\r\n/** Exception when OneService response is incorrect */\r\nexport const SportsMatchupCardDataError: AppError = {\r\n id: 38314,\r\n source: SportsMatchupCardSourceFile,\r\n severity: Severity.HighImpact,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/*\r\n * Set of errors in sports-card experience.\r\n */\r\nconst SportsDataMapperFileName = \"SportsDataMapper.ts\";\r\nexport const SportsDataMaperCardTitleIsNull: AppError = {\r\n id: 38320,\r\n source: SportsDataMapperFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SportsDataMaperCardParseError: AppError = {\r\n id: 38321,\r\n source: SportsDataMapperFileName,\r\n severity: Severity.HighImpact,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\nexport const SportsDataMaperNullData: AppError = {\r\n id: 38322,\r\n source: SportsDataMapperFileName,\r\n severity: Severity.HighImpact,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/**\r\n * Set of errors in the sports-card-wc experience\r\n */\r\n\r\nconst SportsCardWCSourceFile = \"SportsCardWC.ts\";\r\n\r\n/** Exception when create indexed db */\r\nexport const SportsCardWCIndexedDbError: AppError = {\r\n id: 38330,\r\n source: SportsCardWCSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception when fetch feed response data error */\r\nexport const SportsCardWCFeedDataError: AppError = {\r\n id: 38331,\r\n source: SportsCardWCSourceFile,\r\n severity: Severity.HighImpact,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Exception when search sports suggestion */\r\nexport const SportsCardWCSearchSuggestionError: AppError = {\r\n id: 38332,\r\n source: SportsCardWCSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception when widget instance is null */\r\nexport const SportsCardWCWidgetInstError: AppError = {\r\n id: 38333,\r\n source: SportsCardWCSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Set of errors in the sports-olympic-card experience\r\n */\r\n\r\nconst SportsOlympicCardConnectorSourceFile = \"SportsOlympicCard.connector.ts\";\r\n\r\n/** Exception when OneService response is incorrect */\r\nexport const SportsOlympicCardOneServiceDataError: AppError = {\r\n id: 38350,\r\n source: SportsOlympicCardConnectorSourceFile,\r\n severity: Severity.HighImpact,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\nconst SportsOlympicCardSourceFile = \"SportsOlympicCard.tsx\";\r\n\r\n/** Exception when olympic data is incorrect */\r\nexport const SportsOlympicCardDataError: AppError = {\r\n id: 38355,\r\n source: SportsOlympicCardSourceFile,\r\n severity: Severity.HighImpact,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/**\r\n * Set of errors in ugc app type.\r\n */\r\nexport const UgcErrorPage: AppError = {\r\n id: 38400,\r\n source: \"UGC/page.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\nexport const UgcCreatorRenderError: AppError = {\r\n id: 38401,\r\n source: \"UgcCreator.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\nexport const UgcCreatorApiError: AppError = {\r\n id: 38402,\r\n source: \"UgcCreator.api.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to Modern Right Rail\r\n */\r\nconst ModernRightRailConnectorFileName = \"ModernRightRail.connector.ts\";\r\nconst ContentProviderServiceFileName = \"ContentProvider.services.ts\";\r\nconst TrendingNewsServiceFileName = \"ContentProvider.services.ts\";\r\nconst RecommendingVideosServiceFileName = \"ContentProvider.services.ts\";\r\n\r\n/** Failed to fetch provider details. */\r\nexport const ProviderDetailsFetchError: AppError = {\r\n id: 38500,\r\n source: ContentProviderServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** No content on fetching provider feed. */\r\nexport const ProviderFeedFetchEmpty: AppError = {\r\n id: 38501,\r\n source: ContentProviderServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to fetch trending news card data. */\r\nexport const TrendingNewsFetchError: AppError = {\r\n id: 38502,\r\n source: TrendingNewsServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to fetch trending news card backup data. */\r\nexport const TrendingNewsBackupFetchError: AppError = {\r\n id: 38503,\r\n source: TrendingNewsServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Native Ad fetch failed */\r\nexport const NativeAdFetchFailed: AppError = {\r\n id: 38504,\r\n source: ModernRightRailConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to fetch recommending videos card data. */\r\nexport const RecommendingVideosFetchError: AppError = {\r\n id: 38505,\r\n source: RecommendingVideosServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to fetch recommending videos card backup data. */\r\nexport const RecommendingVideosBackupFetchError: AppError = {\r\n id: 38506,\r\n source: RecommendingVideosServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Fetched invalid number of items. */\r\nexport const TrendingNewsInvalidItems: AppError = {\r\n id: 38507,\r\n source: ModernRightRailConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Items are not include media source. */\r\nexport const TrendingNewsNotIncludeMediaItems: AppError = {\r\n id: 38508,\r\n source: ModernRightRailConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const RecommendedNewsInvalidItems: AppError = {\r\n id: 38509,\r\n source: ModernRightRailConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Items are not include media source. */\r\nexport const RecommendedNewsNotIncludeMediaItems: AppError = {\r\n id: 38510,\r\n source: ModernRightRailConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Fetched invalid number of items. */\r\nexport const RecommendingVideosInvalidItems: AppError = {\r\n id: 38511,\r\n source: ModernRightRailConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Items are not include media source. */\r\nexport const RecommendingVideosNotIncludeMediaItems: AppError = {\r\n id: 38512,\r\n source: ModernRightRailConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const NativeAdFetchEmpty: AppError = {\r\n id: 38513,\r\n source: ModernRightRailConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TrendingNewsFetchEmpty: AppError = {\r\n id: 38514,\r\n source: ModernRightRailConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const NoMoreFromProviderNewsReturned: AppError = {\r\n id: 38515,\r\n source: ModernRightRailConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Set of errors for BasePreferenceSettingManager.\r\n */\r\nconst BasePreferenceSettingManagerFileName = \"BasePreferenceSettingManager.ts\";\r\n\r\n/**\r\n * window.chrome.ntpSettingsPrivate API is not available\r\n */\r\nexport const NtpSettingsPrivateNotAvailable: AppError = {\r\n id: 38600,\r\n source: BasePreferenceSettingManagerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error with writing to browser with ntpSettingsPrivate.setPref\r\n */\r\nexport const NtpSetPrefFailureToWrite: AppError = {\r\n id: 38601,\r\n source: BasePreferenceSettingManagerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error reading ntpSettingsPrivate.getPref\r\n */\r\nexport const NtpGetPrefFailureToRead: AppError = {\r\n id: 38602,\r\n source: BasePreferenceSettingManagerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Top level preference setting API is not available\r\n */\r\nexport const PreferenceSettingApiNotAvailable: AppError = {\r\n id: 38603,\r\n source: BasePreferenceSettingManagerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Preference key is missing\r\n */\r\nexport const PreferenceSettingKeyNotAvailable: AppError = {\r\n id: 38604,\r\n source: BasePreferenceSettingManagerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Preference setting did not save\r\n */\r\nexport const PreferenceSettingDidNotSave: AppError = {\r\n id: 38605,\r\n source: BasePreferenceSettingManagerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Preference key is missing when it should not be\r\n */\r\nexport const PreferenceKeyMissingUnexpectedly: AppError = {\r\n id: 38606,\r\n source: BasePreferenceSettingManagerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to Background image\r\n * More errors can be found on 818X\r\n */\r\nconst enterpriseImageProvider = \"EnterpriseImageProvider.ts\";\r\n\r\n/** Failed to fetch provider details. */\r\nexport const CopyrightParseError: AppError = {\r\n id: 38700,\r\n source: bingImageProvider,\r\n severity,\r\n pb\r\n};\r\n\r\n/** FRE image invalid index */\r\nexport const FREImageInvalidIndex: AppError = {\r\n id: 38701,\r\n source: bingImageProvider,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Enterprise image unexpected call */\r\nexport const EnterpriseImageUnexpected: AppError = {\r\n id: 38702,\r\n source: enterpriseImageProvider,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Enterprise image invalid index */\r\nexport const EnterpriseInvalidIndex: AppError = {\r\n id: 38703,\r\n source: enterpriseImageProvider,\r\n severity,\r\n pb\r\n};\r\n\r\nconst summaryCardConnectorFileName = \"SummaryCard.connector.ts\";\r\n\r\n/** Error fetching weather data */\r\nexport const SummaryCardFetchWeatherData: AppError = {\r\n id: 38800,\r\n source: summaryCardConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error fetching weather auto suggest data */\r\nexport const SummaryCardFetchAutoSuggestWeatherData: AppError = {\r\n id: 38801,\r\n source: summaryCardConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error refreshing weather data */\r\nexport const SummaryCardRefreshWeatherData: AppError = {\r\n id: 38802,\r\n source: summaryCardConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error connecting summary card component */\r\nexport const SummaryCardConnectComponent: AppError = {\r\n id: 38803,\r\n source: summaryCardConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst todaysEventsCardConnectorFileName = \"TodaysEventsCard.connector.ts\";\r\nconst todaysEventsCardManagerFileName = \"EventManager.ts\";\r\nconst todaysEventsCardTimeHelperName = \"TimeHelper.ts\";\r\nconst calendarCardFileName = \"CalendarCard.ts\";\r\nconst calendarCardManagerFileName = \"EventManager.ts\";\r\nconst calendarCardTimeHelperName = \"TimeHelper.ts\";\r\nconst calendarCardEventItemTemplateName = \"EventItem.template.ts\";\r\n\r\n/** Error fetching today's events */\r\nexport const TodaysEventsCardFetch: AppError = {\r\n id: 38900,\r\n source: todaysEventsCardConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error determining todays event's conflicts */\r\nexport const TodaysEventsCardManagerConflict: AppError = {\r\n id: 38901,\r\n source: todaysEventsCardManagerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error with the Date-fns library */\r\nexport const TodaysEventsCardDateFnsError: AppError = {\r\n id: 38902,\r\n source: todaysEventsCardTimeHelperName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error for API's response when is 404 with error code MailboxNotEnabledForRESTAPI */\r\nexport const CalendarCardMailboxNotEnabledForRESTAPI: AppError = {\r\n id: 38903,\r\n source: calendarCardManagerFileName,\r\n severity: Severity.Alert,\r\n pb\r\n};\r\n\r\n/** Error determining todays event's conflicts */\r\nexport const CalendarCardManagerConflict: AppError = {\r\n id: 38904,\r\n source: calendarCardManagerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error determining todays event's conflicts */\r\nexport const CalendarCardProcessEventsResponseFailed: AppError = {\r\n id: 38905,\r\n source: calendarCardManagerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error with the Date-fns library */\r\nexport const CalendarCardDateFnsError: AppError = {\r\n id: 38906,\r\n source: calendarCardTimeHelperName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error generating the template for the Event Action Button */\r\nexport const CalendarCardActionButtonError: AppError = {\r\n id: 38907,\r\n source: calendarCardEventItemTemplateName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error generating the time until event label */\r\nexport const CalendarCardTimeUntilEventError: AppError = {\r\n id: 38908,\r\n source: calendarCardEventItemTemplateName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const CalendarCardUnknownError: AppError = {\r\n id: 38909,\r\n source: calendarCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to authenticate for the Calendar Card API */\r\nexport const CalendarCardAuthenicationFailed: AppError = {\r\n id: 38910,\r\n source: calendarCardManagerFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Error fetching today's events from API */\r\nexport const CalendarCardAuthenicatedFetchFailed: AppError = {\r\n id: 38911,\r\n source: calendarCardManagerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst frequentSitesCardConnectorFileName = \"FrequentSitesCard.connector.ts\";\r\n\r\n// Error Fetching Frequent Sites Data\r\nexport const FrequentSitesCardFetch: AppError = {\r\n id: 39000,\r\n source: frequentSitesCardConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst recommendedCardConnectorFileName = \"RecommendedCard.connector.ts\";\r\nconst recommendedCardInspectorFileName = \"RecommendedCard.inspector.ts\";\r\nconst recommendedCardFeed = \"RecommendedCardFeed\";\r\nconst recommendedDocumentsServiceClient = \"RecommendedDocumentsServiceClient.ts\";\r\n\r\n// Error Fetching Recommended Card Documents\r\nexport const RecommendedCardConnectorFetchDocuments: AppError = {\r\n id: 39100,\r\n source: recommendedCardConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const RecommendedCardConnectorFetchImages: AppError = {\r\n id: 39101,\r\n source: recommendedCardConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n// Error Fetching Recommended Card Preview Image\r\nexport const RecommendedCardConnectorFetchImage: AppError = {\r\n id: 39102,\r\n source: recommendedCardConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n// Error creating file item props\r\nexport const RecommendedCardInspectorBuildFileItems: AppError = {\r\n id: 39103,\r\n source: recommendedCardInspectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n// Error Fetching Documents from the Recommended Card Feed component\r\nexport const RecommendedCardFeedFetchDocuments: AppError = {\r\n id: 39104,\r\n source: recommendedCardFeed,\r\n severity,\r\n pb\r\n};\r\n\r\n// Error Fetching Preview Image from the Recommended Card Feed component\r\nexport const RecommendedCardFeedFetchImage: AppError = {\r\n id: 39105,\r\n source: recommendedCardFeed,\r\n severity,\r\n pb\r\n};\r\n\r\n// Error switching from the Recommended Card Feed component to Office pivto\r\nexport const RecommendedCardFeedSwitchToOffice: AppError = {\r\n id: 39106,\r\n source: recommendedCardFeed,\r\n severity,\r\n pb\r\n};\r\n\r\n// Error switching from the Recommended Card Feed component to Office pivto\r\nexport const RecommendedCardFeedMissingPivotSwitchConfig: AppError = {\r\n id: 39107,\r\n source: recommendedCardFeed,\r\n severity,\r\n pb\r\n};\r\n\r\n// Error for the Recommended Card to print duration when fetch exceeds the time out\r\nexport const RecommendedCardDocumentsServiceClientTimeOut: AppError = {\r\n id: 39108,\r\n source: recommendedDocumentsServiceClient,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const RecommendedCardFeedAuthFailed: AppError = {\r\n id: 39109,\r\n source: recommendedCardFeed,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const RecommendedCardFeedAuthFailedWarning: AppError = {\r\n id: 39110,\r\n source: recommendedCardFeed,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nconst productivityHubContainerConnectorFileName = \"ProductivityHubContainer.connector.ts\";\r\n\r\n/** Error loading child experiences */\r\nexport const ProductivityHubContainerLoadChildren: AppError = {\r\n id: 39200,\r\n source: productivityHubContainerConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst edgeNextLayoutOptimizerFileName = \"EdgeNextLayoutOptimizer.ts\";\r\n\r\n/** Error applying recommended layout */\r\nexport const ApplyingRecommendedLayoutFailed: AppError = {\r\n id: 39300,\r\n source: edgeNextLayoutOptimizerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst wpoLayoutManagerFileName = \"WpoLayoutManager.ts\";\r\n\r\n/** Error applying recommended layout */\r\nexport const TriedToApplyNoAdsPromotionMoreThanOnce: AppError = {\r\n id: 39350,\r\n source: wpoLayoutManagerFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Set of errors in the bing-video-card experience\r\n */\r\n\r\nconst BingVideoCardConnectorSourceFile = \"BingVideoCard.connector.ts\";\r\nconst BingVideoSlideCardSourceFile = \"SlideCard.tsx\";\r\nconst BingVideoOpalRecoInstrumentationSourceFile = \"OpalRecoInstrumentation.ts\";\r\nconst BingVideoCarouselSourceFile = \"BingVideoCarousel.ts\";\r\nconst BingVideoCarouselDataMapperFile = \"BingVideoCarouselDataMapper.ts\";\r\n\r\n/** Exception when OneService response is incorrect */\r\nexport const BingVideoCardOneServiceDataError: AppError = {\r\n id: 39400,\r\n source: BingVideoCardConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingVideoCardOneServiceDataTypeError: AppError = {\r\n id: 39401,\r\n source: BingVideoCardConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingVideoCardOneServiceDataParseError: AppError = {\r\n id: 39402,\r\n source: BingVideoCardConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingVideoCardDataError: AppError = {\r\n id: 39403,\r\n source: BingVideoCardConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingVideoCardDataParseError: AppError = {\r\n id: 39404,\r\n source: BingVideoCardConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingVideoCardMotionThumbnailError: AppError = {\r\n id: 39405,\r\n source: BingVideoSlideCardSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingVideoCardOpalFeedbackError: AppError = {\r\n id: 39406,\r\n source: BingVideoOpalRecoInstrumentationSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingVideoCarouselSwitchToWatch: AppError = {\r\n id: 39410,\r\n source: BingVideoCarouselSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingVideoCarouselDataMapperError: AppError = {\r\n id: 39420,\r\n source: BingVideoCarouselDataMapperFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst FreServiceClientFileName = \"FreServiceClient.ts\";\r\nconst ColdStartConnectorFileName = \"ColdStart.connector.ts\";\r\nconst ColdStartFileName = \"ColdStart.tsx\";\r\nconst ColdStartArticlesTemplateFileName = \"Articles.template.tsx\";\r\nconst ColdStartPublishersTemplateFileName = \"Publishers.template.tsx\";\r\nconst ColdStartWCEFileName = \"ColdStartWC.ts\";\r\n\r\n/** Error setting required parameters for FRE client functions */\r\nexport const SettingRequiredParametersFailed: AppError = {\r\n id: 39500,\r\n source: FreServiceClientFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error getting data for artifacts */\r\nexport const GettingArtifactsDataFailed: AppError = {\r\n id: 39501,\r\n source: ColdStartConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Missing FRE signal */\r\nexport const MissingFRESignal: AppError = {\r\n id: 39502,\r\n source: DesktopFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Empty FRE response */\r\nexport const EmptyFREResponse: AppError = {\r\n id: 39503,\r\n source: ColdStartConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** FRE unsupported template */\r\nexport const FREUnsupportedTemplate: AppError = {\r\n id: 39504,\r\n source: ColdStartFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** FRE missing publisher metadata */\r\nexport const FREMissingPublisherMetadata: AppError = {\r\n id: 39505,\r\n source: ColdStartPublishersTemplateFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** FRE missing article metadata */\r\nexport const FREMissingArticleMetadata: AppError = {\r\n id: 39506,\r\n source: ColdStartArticlesTemplateFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** FRE missing callback url */\r\nexport const FREMissingCallbackUrl: AppError = {\r\n id: 39507,\r\n source: ColdStartConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to go to next stage*/\r\nexport const FailedToGoToNextStage: AppError = {\r\n id: 39508,\r\n source: ColdStartConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** The done Action call failed */\r\nexport const DoneActionFailed: AppError = {\r\n id: 39509,\r\n source: FreServiceClientFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** An Actions call failed */\r\nexport const FreActionsCallFailed: AppError = {\r\n id: 39510,\r\n source: FreServiceClientFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Setting the maybe later state failed */\r\nexport const FreMaybeLaterStateFailed: AppError = {\r\n id: 39511,\r\n source: FreServiceClientFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Cold Start Topics Data Connector not defined */\r\nexport const ColdStartUndefinedTopicDataConnector: AppError = {\r\n id: 39512,\r\n source: ColdStartConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** FRE missing sub cards */\r\nexport const FREMissingSubCards: AppError = {\r\n id: 39513,\r\n source: ColdStartConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Not enough data to render the first page of content */\r\nexport const FreInsufficientFirstPageData: AppError = {\r\n id: 39514,\r\n source: ColdStartWCEFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** FRE returned subcards missing data */\r\nexport const FreSubcardsMissingData: AppError = {\r\n id: 39515,\r\n source: ColdStartWCEFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const MissingFRESignalInServiceClient: AppError = {\r\n id: 39516,\r\n source: FreServiceClientFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TuneYourFeedFailed: AppError = {\r\n id: 39517,\r\n source: InterestsWC,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents HoroscopeAnswerCard related App errors. 396xx: Horoscope Answer Card*/\r\nconst horoscopeAnswerCardDataService = \"HoroscopeAnswerCardDataService.ts\";\r\nconst horoscopeDataMapperFile = \"libs/feed-layout/.../HoroscopeCardDataMapper.ts\";\r\n/** Represents get horoscope info and user signin info error */\r\nexport const HoroscopeAnswerCardGetApiFailed: AppError = {\r\n id: 39600,\r\n source: horoscopeAnswerCardDataService,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents horoscope selection post error */\r\nexport const HoroscopeAnswerCardPostApiFailed: AppError = {\r\n id: 39601,\r\n source: horoscopeAnswerCardDataService,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents horoscope data mapper error */\r\nexport const HoroscopeDataMapperError: AppError = {\r\n id: 39602,\r\n source: horoscopeDataMapperFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst targetActionCTA = \"TargetAction.cta.ts\";\r\n/**\r\n * SetDefaultBrowser chromium api threw exception\r\n */\r\nexport const SetDefaultBrowserException: AppError = {\r\n id: 39700,\r\n source: targetActionCTA,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * SetDefaultBrowser chromium api not available\r\n */\r\nexport const SetDefaultBrowserNotAvailable: AppError = {\r\n id: 39701,\r\n source: targetActionCTA,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error reading ntp private settings preference.\r\n */\r\nexport const AppPinningPrivateException: AppError = {\r\n id: 39702,\r\n source: targetActionCTA,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * window.chrome.desktopWidgetPrivate API is not available\r\n */\r\nexport const DesktopWidgetPrivateNotAvailable: AppError = {\r\n id: 39703,\r\n source: targetActionCTA,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error reading ntp private settings preference.\r\n */\r\nexport const WebWidgetLaunchApiNotAvailable: AppError = {\r\n id: 39704,\r\n source: targetActionCTA,\r\n severity,\r\n pb\r\n};\r\n\r\n/*\r\n* Error reading ntp private settings preference.\r\n*/\r\nexport const WebWidgetEnableAutoStartApiNotAvailable: AppError = {\r\n id: 39705,\r\n source: targetActionCTA,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error reading ntp private settings preference.\r\n */\r\nexport const FailedToLaunchAndDefaultWebWidget: AppError = {\r\n id: 39706,\r\n source: targetActionCTA,\r\n severity,\r\n pb\r\n};\r\n\r\n/** AppErrors for SocialEmbeds */\r\nconst FacebookEmbedFile = \"FacebookEmbed.ts\";\r\nconst InstagramEmbedFile = \"InstagramEmbed.ts\";\r\nconst InfogramEmbedFile = \"InfogramEmbed.ts\";\r\nconst GoogleMapsEmbedFile = \"GoogleMapsEmbed.ts\";\r\nconst TiktokEmbedFile = \"TiktokEmbed.ts\";\r\nconst SpotifyEmbedFile = \"SpotifyEmbed.ts\";\r\nconst FlourishEmbedFile = \"FlourishEmbed.ts\";\r\nconst RedditEmbedFile = \"RedditEmbed.ts\";\r\nconst PinterestEmbedFile = \"PinterestEmbed.ts\";\r\n/** Represents facebook embed validation failed */\r\nexport const FacebookEmbedValidationError: AppError = {\r\n id: 39800,\r\n source: FacebookEmbedFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents instagram embed validation failed */\r\nexport const InstagramEmbedValidationError: AppError = {\r\n id: 39810,\r\n source: InstagramEmbedFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents infogram embed validation failed */\r\nexport const InfogramEmbedValidationError: AppError = {\r\n id: 39820,\r\n source: InfogramEmbedFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents GoogleMaps embed validation failed */\r\nexport const GoogleMapsEmbedValidationError: AppError = {\r\n id: 39830,\r\n source: GoogleMapsEmbedFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents Tiktok embed validation failed */\r\nexport const TiktokEmbedValidationError: AppError = {\r\n id: 39840,\r\n source: TiktokEmbedFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents Flourish embed validation failed */\r\nexport const FlourishEmbedValidationError: AppError = {\r\n id: 39850,\r\n source: FlourishEmbedFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents Spotify embed validation failed */\r\nexport const SpotifyEmbedValidationError: AppError = {\r\n id: 39860,\r\n source: SpotifyEmbedFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents Reddit embed validation failed */\r\nexport const RedditEmbedValidationError: AppError = {\r\n id: 39870,\r\n source: RedditEmbedFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents Pinterest embed validation failed */\r\nexport const PinterestEmbedValidationError: AppError = {\r\n id: 39880,\r\n source: PinterestEmbedFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst onThisDayCardDataService = \"OnThisDayCardDataService.ts\";\r\nconst onThisDayCardDataMapperFile = \"libs/feed-layout/.../OnThisDayCardDataMapper.ts\";\r\n/** Represents get onThisDay info failed */\r\nexport const OnThisDayCardGetApiFailed: AppError = {\r\n id: 39900,\r\n source: onThisDayCardDataService,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents mapper data error */\r\nexport const OnThisDayCardDataMapperError: AppError = {\r\n id: 39901,\r\n source: onThisDayCardDataMapperFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Telemetry initialization error\r\n */\r\nexport const EventHubPageTelemetryInitializationError: AppError = {\r\n id: 40000,\r\n source: \"EventHubPage.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Apperrors for the ntp consumer waffle\r\n */\r\nconst ConsumerWaffleFile = \"ServiceWaffle.connector.ts\";\r\nexport const ConsumerWaffleError: AppError = {\r\n id: 40100,\r\n source: ConsumerWaffleFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConsumerWaffleStringLoadError: AppError = {\r\n id: 40101,\r\n source: ConsumerWaffleFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst portugueseElectionExperienceDataService = \"PortugueseElectionExperienceDataService.ts\";\r\n/** Represents get portugueseElectionExperienceDataService info failed */\r\nexport const PortugueseElectionExperienceGetApiFailed: AppError = {\r\n id: 40201,\r\n source: portugueseElectionExperienceDataService,\r\n severity,\r\n pb\r\n};\r\n\r\nconst WpoCardProviderFileName = \"WpoCardProvider.ts\";\r\n\r\nexport const WpoCardProviderAppErrors = {\r\n WpoResponseServerInternalError: {\r\n id: 40300,\r\n source: WpoCardProviderFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n ErrorFetchingWpoResponse: {\r\n id: 40301,\r\n source: WpoCardProviderFileName,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n\r\n RiverConfigurationIssue: {\r\n id: 40302,\r\n source: WpoCardProviderFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n WpoGetMuidFailure: {\r\n id: 40303,\r\n source: WpoCardProviderFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n StaticContentLoaded: {\r\n id: 40304,\r\n source: WpoCardProviderFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n WpoFailedAtFirstPage: {\r\n id: 40305,\r\n source: WpoCardProviderFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n WpoResponseUnauthorized: {\r\n id: 40306,\r\n source: WpoCardProviderFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n WpoResponseNotFound: {\r\n id: 40307,\r\n source: WpoCardProviderFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n WpoResponseNoContent: {\r\n id: 40308,\r\n source: WpoCardProviderFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n WpoResponseNullOrUndefined: {\r\n id: 40309,\r\n source: WpoCardProviderFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n WpoServiceUrlAndWebWorkerUrlDifferent: {\r\n id: 40310,\r\n source: WpoCardProviderFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * Errors related to Desktop Feed EdgeNext\r\n */\r\nconst DesktopFeedEdgeNextFileName = \"DesktopFeedEdgeNext.tsx\";\r\nconst DesktopFeedEdgeNextConnectorFileName = \"DesktopFeedEdgeNext.connector.ts\";\r\n\r\nexport const DesktopFeedEdgeNextNativeAdServiceFetchFailed: AppError = {\r\n id: 40401,\r\n source: DesktopFeedEdgeNextConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedEdgeNextRiverContentFetchFailed: AppError = {\r\n id: 40402,\r\n source: DesktopFeedEdgeNextConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedEdgeNextRiverContentRenderFailed: AppError = {\r\n id: 40403,\r\n source: DesktopFeedEdgeNextConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedEdgeNextMissingFreSignal: AppError = {\r\n id: 40404,\r\n source: DesktopFeedEdgeNextConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedEdgeNextSwitchToWatch: AppError = {\r\n id: 40405,\r\n source: DesktopFeedEdgeNextFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedEdgeNextColdStartCardIncorrectPosition: AppError = {\r\n id: 40406,\r\n source: DesktopFeedEdgeNextConnectorFileName,\r\n message: \"Cold Start card is returned in the wrong position by OneService.\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** App Errors for Recipes */\r\nconst RecipesPage = \"recipes/page.ts\";\r\nconst RecipesSdCard = \"RecipesSdCard.ts\";\r\n\r\n/**\r\n * Recipes level exception was thrown\r\n */\r\nexport const RecipesPageError: AppError = {\r\n id: 40500,\r\n source: RecipesPage,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Recipes Page Error fetching the APP_ANON cookie\r\n */\r\nexport const RecipesPageErrorFetchingAppAnonCookie: AppError = {\r\n id: 40501,\r\n source: RecipesPage,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const RecipesOneServiceError: AppError = {\r\n id: 40510,\r\n source: RecipesPage,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const RecipesSdCardJsException: AppError = {\r\n id: 40520,\r\n source: RecipesSdCard,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n/** End App Errors for Recipes */\r\n\r\n/**\r\n * Errors related to Desktop Feed Single Column\r\n */\r\nconst DesktopFeedSingleColumnConnectorFileName = \"DesktopFeedSingleColumn.connector.ts\";\r\nexport const DesktopFeedSingleColumnNativeAdServiceFetchFailed: AppError = {\r\n id: 40601,\r\n source: DesktopFeedSingleColumnConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedSingleColumnRiverContentFetchFailed: AppError = {\r\n id: 40602,\r\n source: DesktopFeedSingleColumnConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedSingleColumnCmsAdsMatchResponseFailed: AppError = {\r\n id: 40603,\r\n source: DesktopFeedSingleColumnConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const DesktopFeedSingleColumnRiverContentRenderFailed: AppError = {\r\n id: 40604,\r\n source: DesktopFeedSingleColumnConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst SDCardProviderFileName = \"SDCardProvider.ts\";\r\n\r\nexport const SDCardProviderResponseWasNullOrErroneous: AppError = {\r\n id: 40700,\r\n source: SDCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SDCardProviderErrorFetchingResponse: AppError = {\r\n id: 40701,\r\n source: SDCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SDCardProviderConfigurationIssue: AppError = {\r\n id: 40702,\r\n source: SDCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** App Errors for QnA */\r\n\r\n/** Qna level exception was thrown */\r\nconst QnaPage = \"qna/page.ts\";\r\nexport const QnaPageError: AppError = {\r\n\r\n id: 40800,\r\n source: QnaPage,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Qna Page Error fetching the APP_ANON cookie */\r\nexport const QnaPageErrorFetchingAppAnonCookie: AppError = {\r\n id: 40801,\r\n source: QnaPage,\r\n severity,\r\n pb\r\n};\r\n\r\n/** JS Exceptions */\r\nconst QnaFeedCard = \"QnaFeedCard.ts\";\r\nconst QnaFeedCategoriesMenu = \"QnaFeedCategoriesMenu.ts\";\r\nconst QnaFeedList = \"QnaFeedList.ts\";\r\nconst QnaFeedRelatedQuestions = \"QnaFeedRelatedQuestions.ts\";\r\nconst QnaFeedSuggestedTopics = \"QnaFeedSuggestedTopics.ts\";\r\nconst QnaFeedTopicDetail = \"QnaFeedTopicDetail.ts\";\r\nconst QnaFeedTrendingQuestions = \"QnaFeedTrendingQuestions.ts\";\r\n\r\n/** QnaFeedCard JS exception */\r\nexport const QnaFeedCardJSException: AppError = {\r\n id: 40802,\r\n source: QnaFeedCard,\r\n severity,\r\n pb\r\n};\r\n\r\n/** QnaFeedCategoryMenu JS exception */\r\nexport const QnaFeedCategoriesMenuJSException: AppError = {\r\n id: 40803,\r\n source: QnaFeedCategoriesMenu,\r\n severity,\r\n pb\r\n};\r\n\r\n/** QnaFeedList JS exception */\r\nexport const QnaFeedListJSException: AppError = {\r\n id: 40804,\r\n source: QnaFeedList,\r\n severity,\r\n pb\r\n};\r\n\r\n/** QnaFeedRelatedQuestions JS exception */\r\nexport const QnaFeedRelatedQuestionsJSException: AppError = {\r\n id: 40805,\r\n source: QnaFeedRelatedQuestions,\r\n severity,\r\n pb\r\n};\r\n\r\n/** QnaFeedSuggestedTopics JS exception */\r\nexport const QnaFeedSuggestedTopicsJSException: AppError = {\r\n id: 40806,\r\n source: QnaFeedSuggestedTopics,\r\n severity,\r\n pb\r\n};\r\n\r\n/** QnaFeedTopicDetail JS exception */\r\nexport const QnaFeedTopicDetailJSException: AppError = {\r\n id: 40807,\r\n source: QnaFeedTopicDetail,\r\n severity,\r\n pb\r\n};\r\n\r\n/** QnaFeedTopicDetail JS exception */\r\nexport const QnaFeedTrendingQuestionsJSException: AppError = {\r\n id: 40808,\r\n source: QnaFeedTrendingQuestions,\r\n severity,\r\n pb\r\n};\r\n\r\n/** OneService API call error */\r\nconst QnaFeedServiceFileName = \"FeedService.ts\";\r\n\r\nexport const QnaFeedOneServiceErrors: AppError = {\r\n id: 40850,\r\n source: QnaFeedServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** ExperienceTrackerQna connector error */\r\nconst QnaExperienceTrackerConnectorFile = \"ExperienceTrackerQna.connector.ts\";\r\n\r\nexport const QnaExperienceTrackerError: AppError = {\r\n id: 40860,\r\n source: QnaExperienceTrackerConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Social Reactions App errors in SuperApp */\r\nconst SocialReactionsServiceResponseFileName = \"ArticleCardRenderer.tsx\";\r\n\r\n/**\r\n * Error parsing response from OneService call to update Social Reaction count in SuperApp.\r\n */\r\nexport const SocialReactionsServiceResponseDataParse: AppError = {\r\n id: 40900,\r\n source: SocialReactionsServiceResponseFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst ToDoCardTaskManager = \"TaskManager.ts\";\r\n\r\n/** Error with the ToDo card API when trying to fetch existing tasks */\r\nexport const ToDoCardAPIFetchTasksFailed: AppError = {\r\n id: 41000,\r\n source: ToDoCardTaskManager,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error with the ToDo card API when trying create a new task */\r\nexport const ToDoCardAPICreateTaskFailed: AppError = {\r\n id: 41001,\r\n source: ToDoCardTaskManager,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error with the ToDo card API when trying to fetch existing task folders */\r\nexport const ToDoCardAPIRetrieveFoldersFailed: AppError = {\r\n id: 41002,\r\n source: ToDoCardTaskManager,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error with the ToDo card API when trying to update the status of a task */\r\nexport const ToDoCardAPIUpdateTaskStatusFailed: AppError = {\r\n id: 41003,\r\n source: ToDoCardTaskManager,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error with the ToDo card API when trying to update the importance of a task */\r\nexport const ToDoCardAPIUpdateTaskImportanceFailed: AppError = {\r\n id: 41004,\r\n source: ToDoCardTaskManager,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error with the ToDo card when trying to update the completion of a task */\r\nexport const ToDoCardAPICompleteTaskFailed: AppError = {\r\n id: 41005,\r\n source: ToDoCardTaskManager,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error with the ToDo card API when trying to update the subject of a task */\r\nexport const ToDoCardAPISubjectChangeFailed: AppError = {\r\n id: 41006,\r\n source: ToDoCardTaskManager,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error with the ToDo card when toggling between task lists */\r\nexport const ToDoCardFailedToToggleList: AppError = {\r\n id: 41007,\r\n source: ToDoCardTaskManager,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error with the ToDo card when fails to autodiscover the URL */\r\nexport const ToDoCardFailedToAutodiscoverURL: AppError = {\r\n id: 41008,\r\n source: ToDoCardTaskManager,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error with the ToDo card when fails on authentication */\r\nexport const ToDoCardFailedOnAuthentication: AppError = {\r\n id: 41009,\r\n source: ToDoCardTaskManager,\r\n severity,\r\n pb\r\n};\r\n\r\nconst FinanceMarketCardFile = \"FinanceMarketCard.connector.ts\";\r\nconst FinanceDetailCardFile = \"FinanceDetailsCard.connector.ts\";\r\nconst FinanceWatchlistViewFile = \"WatchlistView.connector.ts\";\r\nconst FinanceNewsCardFile = \"FinanceNewsCard.connector.ts\";\r\nconst FinanceTrendCardFile = \"FinanceTrendCard.connector.ts\";\r\nconst FinanceFeedsFile = \"FinanceFeeds.connector.ts\";\r\nconst FinanceDianomiAdsFile = \"FinanceDianomiAds.connector.ts\";\r\nconst FinanceWatchlistMiniViewFile = \"FinanceWatchlistMiniView.connector.ts\";\r\n\r\n/**\r\n * 411xx reserved for finance experience errors\r\n*/\r\n\r\n/** Error when finance market card unavailable */\r\nexport const FinanceMarketCardAppError: AppError = {\r\n id: 41100,\r\n source: FinanceMarketCardFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Error when finance detail card unavailable */\r\nexport const FinanceDetailCardAppError: AppError = {\r\n id: 41101,\r\n source: FinanceDetailCardFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Error when finance watchlist view sign status error, this err code is especially used for sign in */\r\nexport const FinanceWatchlistViewAppError: AppError = {\r\n id: 41102,\r\n source: FinanceWatchlistViewFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Error when finance news card unavailable */\r\nexport const FinanceNewsCardAppError: AppError = {\r\n id: 41103,\r\n source: FinanceNewsCardFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Error when finance trend card unavailable */\r\nexport const FinanceTrendCardAppError: AppError = {\r\n id: 41104,\r\n source: FinanceTrendCardFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Error when finance feeds unavailable */\r\nexport const FinanceFeedsAppError: AppError = {\r\n id: 41105,\r\n source: FinanceFeedsFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Error when finance dianomi ads unavailable */\r\nexport const FinanceDianomiAdsAppError: AppError = {\r\n id: 41106,\r\n source: FinanceDianomiAdsFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: false,\r\n errorBehavior: ErrorBehavior.Exceptional\r\n }\r\n};\r\n\r\n/** Error when finance news card unavailable before TTVR ready */\r\nexport const FinanceNewsCardTTVRAppError: AppError = {\r\n id: 41107,\r\n source: FinanceNewsCardFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Error when finance \"latest\" news card unavailable */\r\nexport const FinanceLatestNewsCardAppError: AppError = {\r\n id: 41108,\r\n source: FinanceNewsCardFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get investor top holdings data. */\r\nexport const FinanceInvestorTopHoldingsDataFetchError: AppError = {\r\n id: 41109,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get investor top new holdings data. */\r\nexport const FinanceInvestorTopNewHoldingsDataFetchError: AppError = {\r\n id: 41110,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get investor top exited holdings data. */\r\nexport const FinanceInvestorTopExitedHoldingsDataFetchError: AppError = {\r\n id: 41111,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get investor top increased holdings data. */\r\nexport const FinanceInvestorTopIncreasedHoldingsDataFetchError: AppError = {\r\n id: 41112,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get investor top exited holdings data. */\r\nexport const FinanceInvestorTopDecreasedHoldingsDataFetchError: AppError = {\r\n id: 41113,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get investor profile data. */\r\nexport const FinanceInvestorProfileDataFetchError: AppError = {\r\n id: 41114,\r\n source: FinanceFalconServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get sentiment data. */\r\nexport const FinanceSentimentDataFetchError: AppError = {\r\n id: 41140,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get sentiment data because the http code is not 20x */\r\nexport const FinanceSentimentDataStatusError: AppError = {\r\n id: 41141,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** Failed to get sentiment data because the response body is not valid */\r\nexport const FinanceSentimentDataInvalidResponseBody: AppError = {\r\n id: 41142,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/**\r\n * 412xx reserved for finance experiecne warnings\r\n*/\r\n\r\n/** Warning for finance market card. */\r\nexport const FinanceMarketCardAppWarning: AppError = {\r\n id: 41200,\r\n source: FinanceMarketCardFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Warning for finance detail card. */\r\nexport const FinanceDetailCardAppWarning: AppError = {\r\n id: 41201,\r\n source: FinanceDetailCardFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Warning for finance watchlist view */\r\nexport const FinanceWatchlistViewAppWarning: AppError = {\r\n id: 41202,\r\n source: FinanceWatchlistViewFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error when finance news card unavailable */\r\nexport const FinanceNewsCardAppWarning: AppError = {\r\n id: 41203,\r\n source: FinanceNewsCardFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error when finance trend card unavailable */\r\nexport const FinanceTrendCardAppWarning: AppError = {\r\n id: 41204,\r\n source: FinanceTrendCardFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error when finance feeds unavailable */\r\nexport const FinanceFeedsAppWarning: AppError = {\r\n id: 41205,\r\n source: FinanceFeedsFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Warning for finance dianomi ads */\r\nexport const FinanceDianomiAdsAppWarning: AppError = {\r\n id: 41206,\r\n source: FinanceDianomiAdsFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Warning for finance watchlist miniview*/\r\nexport const FinanceWatchlistMiniViewAppWarning: AppError = {\r\n id: 41207,\r\n source: FinanceWatchlistMiniViewFile,\r\n severity: Severity.Alert,\r\n pb: {\r\n userImpacting: false,\r\n errorBehavior: ErrorBehavior.Fallback\r\n }\r\n};\r\n\r\n/** Failed to search events because of unsuccessful fetch */\r\nexport const FinanceSearchEventsFetchError: AppError = {\r\n id: 41208,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to search events because the http code is not 20x */\r\nexport const FinanceSearchEventsStatusError: AppError = {\r\n id: 41209,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to search events because the response body is not valid */\r\nexport const FinanceSearchEventsInvalidResponseBody: AppError = {\r\n id: 41210,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to search events data before TTVR */\r\nexport const FinanceSearchEventsDataVisuallyUnavailable: AppError = {\r\n id: 41211,\r\n source: FinanceServiceImplFile,\r\n severity: Severity.Critical,\r\n pb: {\r\n userImpacting: true\r\n }\r\n};\r\n\r\n/** App Errors for Views FullPage Data Connector */\r\nconst ViewsFullPageConnector = \"ViewsFullPage.connector.ts\";\r\nconst ViewsFullPageServiceClient = \"ViewsFullPageServiceClient.ts\";\r\n\r\n/**\r\n * Error while parsing data\r\n */\r\nexport const ViewsFullPageTransformError: AppError = {\r\n id: 41300,\r\n source: ViewsFullPageConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error while fetching data\r\n */\r\nexport const ViewsFullPageFetchError: AppError = {\r\n id: 41301,\r\n source: ViewsFullPageServiceClient,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error while retrieveing sections data\r\n */\r\nexport const ViewsFullPageInvalidSection: AppError = {\r\n id: 41302,\r\n source: ViewsFullPageConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * No Content Id present\r\n */\r\nexport const ViewsFullPageUndefinedContentId: AppError = {\r\n id: 41303,\r\n source: ViewsFullPageConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Empty river after fetching river content\r\n */\r\nexport const ViewsFullPageEmptyRiverContent: AppError = {\r\n id: 41304,\r\n source: ViewsFullPageConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * No trending news returned from ViewsFullPageApi\r\n */\r\nexport const ViewsFullPageTrendingNewsEmpty: AppError = {\r\n id: 41305,\r\n source: ViewsFullPageConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * No more from provider returned from ViewsFullPageApi\r\n */\r\nexport const ViewsFullPageMoreFromProviderEmpty: AppError = {\r\n id: 41306,\r\n source: ViewsFullPageConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error while fetching river content\r\n */\r\nexport const ViewsFullPageRiverFetchError: AppError = {\r\n id: 41307,\r\n source: ViewsFullPageConnector,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * No travel destination data returned from ViewsFullPageApi\r\n */\r\nexport const ViewsFullPageTravelDestinationEmpty: AppError = {\r\n id: 41308,\r\n source: ViewsFullPageConnector,\r\n severity,\r\n pb\r\n};\r\n\r\nconst IndustryNewsCardFile = \"IndustryNewsCard.ts\";\r\n\r\n/** The Industry News Card failed to fetch industry news articles */\r\nexport const IndustryNewsCardFailedToFetch: AppError = {\r\n id: 41400,\r\n source: IndustryNewsCardFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst SharepointNewsCardFile = \"SharepointNewsCard.ts\";\r\n\r\n/** The Sharepoint Card failed to fetch articles */\r\nexport const SharepointNewsCardFailedToFetch: AppError = {\r\n id: 41415,\r\n source: SharepointNewsCardFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed fetching images for sharepoint article */\r\nexport const SharepointNewsCardImageFetchFailed: AppError = {\r\n id: 41416,\r\n source: SharepointNewsCardFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst EnterpriseRightRailFile = \"EnterpriseRightRail.ts\";\r\n\r\n/** The Enterprise Right Rail scroll telemetry failed to fire due to missing element */\r\nexport const EnterpriseRightRailScrollMissingElement: AppError = {\r\n id: 41420,\r\n source: EnterpriseRightRailFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception while fetching enterprise right rail data from wpo */\r\nexport const ExceptionFetchingEnterpriseRightRailData: AppError = {\r\n id: 41421,\r\n source: EnterpriseRightRailFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to Stripe Feed\r\n */\r\nconst StripeFeedConnectorFileName = \"StripeFeed.connector.ts\";\r\nexport const StripeFeedRiverContentFetchFailed: AppError = {\r\n id: 41501,\r\n source: StripeFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const StripeFeedUnsupportedCardType: AppError = {\r\n id: 41502,\r\n source: StripeFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const StripeFeedWindowsTopStripeContentFetchFailed: AppError = {\r\n id: 41503,\r\n source: StripeFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const StripeFeedNativeAdServiceFetchFailed: AppError = {\r\n id: 41504,\r\n source: StripeFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const StripeFeedInvalidRiverTemplateId: AppError = {\r\n id: 41505,\r\n source: StripeFeedConnectorFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const StripeFeedInvalidEmptyRiver: AppError = {\r\n id: 41506,\r\n source: StripeFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst BreakingNewsWCFileName = \"BreakingNewsWC.ts\";\r\nexport const BreakingNewsWCContentFetchFailed: AppError = {\r\n id: 41601,\r\n source: BreakingNewsWCFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Set of errors for family-card experience\r\n */\r\nconst BingMapsServiceFileName = \"BingMapsService.ts\";\r\nconst FamilyCardFileName = \"FamilyCard.ts\";\r\nconst FamilyServiceFileName = \"FamilyService.ts\";\r\nexport const FamilyServiceUnableToGetWindowsWidgetToken: AppError = {\r\n id: 41701,\r\n source: FamilyServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyServiceApiResponseWasUnexpected: AppError = {\r\n id: 41702,\r\n source: FamilyServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyServiceUnableToParseApiResponseBodyAsJson: AppError = {\r\n id: 41703,\r\n source: FamilyServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyServiceApiRequestFailed: AppError = {\r\n id: 41704,\r\n source: FamilyServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyServiceJoinedSincePropertyNotSetOnFamilyMember: AppError = {\r\n id: 41705,\r\n source: FamilyServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyServiceJoinedSincePropertyInvalidOnFamilyMember: AppError = {\r\n id: 41706,\r\n source: FamilyServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyServiceLastSeenOnPropertyInvalidOnUserDevice: AppError = {\r\n id: 41707,\r\n source: FamilyServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingMapsServiceApiResponseWasUnexpected: AppError = {\r\n id: 41720,\r\n source: BingMapsServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingMapsServiceUnableToParseApiResponseBodyAsJson: AppError = {\r\n id: 41721,\r\n source: BingMapsServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingMapsServiceApiRequestFailed: AppError = {\r\n id: 41722,\r\n source: BingMapsServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingMapsServiceUnableToParseApiErrorResponseBodyAsJson: AppError = {\r\n id: 41723,\r\n source: BingMapsServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyCardWidgetInstError: AppError = {\r\n id: 41740,\r\n source: FamilyCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyCardUnexpectedResponseFromFamilyService: AppError = {\r\n id: 41741,\r\n source: FamilyCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyCardErrorWhileFetchingFamilyData: AppError = {\r\n id: 41742,\r\n source: FamilyCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyCardUnexpectedResponseFromBingMapsService: AppError = {\r\n id: 41743,\r\n source: FamilyCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyCardErrorWhileFetchingBingMapsData: AppError = {\r\n id: 41744,\r\n source: FamilyCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyCardErrorWhileGettingLocationMemberStat: AppError = {\r\n id: 41745,\r\n source: FamilyCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyCardErrorWhileGettingScreenTimeMemberStat: AppError = {\r\n id: 41746,\r\n source: FamilyCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyCardDeviceLimitsDataDidNotContainDeviceUsage: AppError = {\r\n id: 41747,\r\n source: FamilyCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FamilyCardDeviceLimitsDataReportingDeviceUsageGt24Hr: AppError = {\r\n id: 41748,\r\n source: FamilyCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst WelcomeGreetingWCFileName = \"WelcomeGreeting.ts\";\r\n/** throw data connctor error when not get the welcome greeting mount */\r\nexport const WelcomeGreetingExperiencedMountError: AppError = {\r\n id: 42601,\r\n source: WelcomeGreetingWCFileName,\r\n severity,\r\n pb\r\n};\r\n/** throw data connctor error when not get the weather data */\r\nexport const WeatherDataConnectorError: AppError = {\r\n id: 42602,\r\n source: WelcomeGreetingWCFileName,\r\n severity,\r\n pb\r\n};\r\n/** throw data connctor error when not get the page chromium data */\r\nexport const PageChromiumDataConnectorError: AppError = {\r\n id: 42603,\r\n source: WelcomeGreetingWCFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error during Service Worker registration. */\r\nconst ServiceWorkerRegistrationFileName = \"ResolveServiceWorker.ts\";\r\nexport const ServiceWorkerRegistrationAppError: AppError = {\r\n id: 43000,\r\n source: ServiceWorkerRegistrationFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to Watch page\r\n */\r\n\r\nconst WatchConnectorFileName = \"Watch.connector.ts\";\r\nconst WatchPageFileName = \"Watch.tsx\";\r\nexport const WatchRiverContentFetchFailed: AppError = {\r\n id: 43201,\r\n source: WatchConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WatchInvalidEmptyRiver: AppError = {\r\n id: 43202,\r\n source: WatchConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WatchInvalidCurrentCardError: AppError = {\r\n id: 43204,\r\n source: WatchPageFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WatchDeepLinkFetchFailed: AppError = {\r\n id: 43205,\r\n source: WatchConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Related Article Block AppErrors\r\n */\r\nconst RelatedArticleConnectorFileName = \"RelatedArticleBlock.connector.ts\";\r\nexport const RelatedArticleParseError: AppError = {\r\n id: 43300,\r\n source: RelatedArticleConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * 434xx reserved for tips experiecne errors\r\n*/\r\nconst TipsCardServiceClientFileName = \"TipsCardServiceClient.ts\";\r\nconst TipsCardFileName = \"TipsCard.ts\";\r\nexport const TipsCardGetActionError: AppError = {\r\n id: 43400,\r\n source: TipsCardServiceClientFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TipsCardResponseWasNullOrErroneous: AppError = {\r\n id: 43401,\r\n source: TipsCardServiceClientFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TipsCardWCWidgetNull: AppError = {\r\n id: 43402,\r\n source: TipsCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const TipsCardIndexedDBFailure: AppError = {\r\n id: 43403,\r\n source: TipsCardFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nconst BingHealthCardDataMapperFile = \"libs/feed-layout/.../healthCardDataMapper.ts\";\r\n/** Represents mapper data error */\r\nexport const BingHealthCardDataMapperError: AppError = {\r\n id: 43500,\r\n source: BingHealthCardDataMapperFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Set of errors in esports-card experience.\r\n */\r\nconst EsportsDataServiceFileName = \"EsportsCard.ts\";\r\nexport const EsportsDataServiceResponseWasNullOrErroneous: AppError = {\r\n id: 43600,\r\n source: EsportsDataServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const EsportsDataServiceFetchFailed: AppError = {\r\n id: 43601,\r\n source: EsportsDataServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const EsportsCardFeedDataError: AppError = {\r\n id: 43602,\r\n source: EsportsDataServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const EsportsCardIndexedDbError: AppError = {\r\n id: 43603,\r\n source: EsportsDataServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error during WidgetLoader rendering. */\r\nconst WidgetLoaderRegistrationFileName = \"WidgetLoader.ts\";\r\nexport const WidgetLoaderException: AppError = {\r\n id: 43700,\r\n source: WidgetLoaderRegistrationFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WidgetLoaderNoWidgetElementsFoundToRender: AppError = {\r\n id: 43701,\r\n source: WidgetLoaderRegistrationFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WidgetLoaderNoWidgetsFoundInConfig: AppError = {\r\n id: 43702,\r\n source: WidgetLoaderRegistrationFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WidgetLoaderMissingConfigRef: AppError = {\r\n id: 43703,\r\n source: WidgetLoaderRegistrationFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WidgetLoaderWidgetNotFoundInConfig: AppError = {\r\n id: 43704,\r\n source: WidgetLoaderRegistrationFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const WidgetLoaderErrorLoadingComponent: AppError = {\r\n id: 43705,\r\n source: WidgetLoaderRegistrationFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WidgetLoaderWidgetDisabledInConfig: AppError = {\r\n id: 43706,\r\n source: WidgetLoaderRegistrationFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const WidgetInitializerDataWidgetAttrMissing: AppError = {\r\n id: 43711,\r\n source: \"getDataWidgetAttributes.ts\",\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\nconst WidgetPcsResponseFileName = \"getPcsResponse.ts\";\r\nexport const WidgetsPcsRequestTimedOut: AppError = {\r\n id: 43713,\r\n source: WidgetPcsResponseFileName,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\nexport const WidgetInitializerPcsResponseNotOk: AppError = {\r\n id: 43714,\r\n source: WidgetPcsResponseFileName,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\nexport const WidgetInitializerPcsFetchFailed: AppError = {\r\n id: 43715,\r\n source: WidgetPcsResponseFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const WidgetInitializerPcsResponseNotCorrect: AppError = {\r\n id: 43716,\r\n source: WidgetPcsResponseFileName,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\n/**\r\n * Shared widget page.ts app error\r\n */\r\nconst SharedWidgetsPage = \"shared-widgets/page.ts\";\r\nexport const SharedWidgetsPageError: AppError = {\r\n id: 43800,\r\n source: SharedWidgetsPage,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SharedWidgetLoadTimeEventError: AppError = {\r\n id: 43801,\r\n source: \"WidgetsLoadTime.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Bing Homepage page.ts app error\r\n */\r\nconst BingHomepagePage = \"bingHomepage/page.ts\";\r\nexport const BingHomepagePageError: AppError = {\r\n id: 43830,\r\n source: BingHomepagePage,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * social-bar experience component render errors\r\n */\r\nconst SocialBarExperienceFile = \"SocialBar.tsx\";\r\n\r\nexport const SocialBarExperienceRenderErrorContentSocialBar: AppError = {\r\n id: 43850,\r\n source: SocialBarExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialBarExperienceRenderErrorReactionMenu: AppError = {\r\n id: 43851,\r\n source: SocialBarExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialBarExperienceRenderErrorSocialBarPanel: AppError = {\r\n id: 43852,\r\n source: SocialBarExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialBarExperienceRenderErrorUnknownComponent: AppError = {\r\n id: 43853,\r\n source: SocialBarExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * social-comment experience component render errors\r\n */\r\nconst SocialCommentExperienceFile = \"SocialComment.tsx\";\r\n\r\nexport const SocialCommentExperienceRenderErrorComment: AppError = {\r\n id: 43900,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorCommentBox: AppError = {\r\n id: 43901,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorCommentItem: AppError = {\r\n id: 43902,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorCommentList: AppError = {\r\n id: 43903,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorContentPanel: AppError = {\r\n id: 43904,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorDeleteMenu: AppError = {\r\n id: 43905,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorDisabledMessage: AppError = {\r\n id: 43906,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorFollowButton: AppError = {\r\n id: 43907,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorProfileEducator: AppError = {\r\n id: 43908,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorReactionMenu: AppError = {\r\n id: 43909,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorReactionPanel: AppError = {\r\n id: 43910,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorReplyList: AppError = {\r\n id: 43911,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorReportMenu: AppError = {\r\n id: 43912,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorSortBox: AppError = {\r\n id: 43913,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorTypingUsers: AppError = {\r\n id: 43914,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorUserCard: AppError = {\r\n id: 43915,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialCommentExperienceRenderErrorUnknownComponent: AppError = {\r\n id: 43916,\r\n source: SocialCommentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * social-profile experience component render errors\r\n */\r\nconst SocialProfileExperienceFile = \"SocialProfile.tsx\";\r\n\r\nexport const SocialProfileExperienceRenderErrorDisabledMessage: AppError = {\r\n id: 43950,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorUserCard: AppError = {\r\n id: 43951,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorDeleteMenu: AppError = {\r\n id: 43952,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorNavbar: AppError = {\r\n id: 43953,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorReportMenu: AppError = {\r\n id: 43954,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorSortBox: AppError = {\r\n id: 43955,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorCommunityGuidelinePage: AppError = {\r\n id: 43956,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorFollowButton: AppError = {\r\n id: 43957,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorMain: AppError = {\r\n id: 43958,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorPopup: AppError = {\r\n id: 43959,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileActivity: AppError = {\r\n id: 43960,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileActivityReadMarker: AppError = {\r\n id: 43961,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileAlertActivity: AppError = {\r\n id: 43962,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileBadgeActivity: AppError = {\r\n id: 43963,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileFollowActivity: AppError = {\r\n id: 43964,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileReactionActivity: AppError = {\r\n id: 43965,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileReplyActivity: AppError = {\r\n id: 43966,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileCommentItem: AppError = {\r\n id: 43967,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileComments: AppError = {\r\n id: 43968,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileFeed: AppError = {\r\n id: 43969,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfilePage: AppError = {\r\n id: 43970,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfilePrivacy: AppError = {\r\n id: 43971,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileReportMenu: AppError = {\r\n id: 43972,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileSubscriptions: AppError = {\r\n id: 43973,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileTabs: AppError = {\r\n id: 43974,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileUsers: AppError = {\r\n id: 43975,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileCard: AppError = {\r\n id: 43976,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileCardUserStats: AppError = {\r\n id: 43977,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorProfileAboutCard: AppError = {\r\n id: 43978,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorDefaultProfileSideBar: AppError = {\r\n id: 43979,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorCreatorProfileSideBar: AppError = {\r\n id: 43980,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorPublisherProfileCard: AppError = {\r\n id: 43981,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorPublisherProfileActionCard: AppError = {\r\n id: 43982,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorPublisherProfileSideBar: AppError = {\r\n id: 43983,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SocialProfileExperienceRenderErrorUnknownComponent: AppError = {\r\n id: 43984,\r\n source: SocialProfileExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Bing Content Service Client Error\r\n */\r\nconst BingContentServiceFile = \"BingContentService.ts\";\r\nexport const BingContentServiceError: AppError = {\r\n id: 44000,\r\n source: BingContentServiceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to Desktop Feed EdgeNext WC\r\n */\r\nconst NativeAdFetcherFile = \"NativeAdFetcher.ts\";\r\nconst RiverFetcherFile = \"RiverFetcher.ts\";\r\nconst ArgsInjectorMap = \"ArgsInjectorMap.ts\";\r\n\r\nexport const DesktopFeedEdgeNextWCNativeAdFetchFailed: AppError = {\r\n id: 44101,\r\n source: NativeAdFetcherFile,\r\n severity,\r\n pb\r\n};\r\nexport const DesktopFeedEdgeNextWCRiverFetchContentFailed: AppError = {\r\n id: 44102,\r\n source: RiverFetcherFile,\r\n severity,\r\n pb\r\n};\r\nexport const DesktopFeedEdgeNextWCGetColdStartCardInCorrectPosition: AppError = {\r\n id: 44103,\r\n source: ArgsInjectorMap,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to the WebComponentExperience\r\n */\r\nconst WebComponentExperienceFile = \"WebComponentExperience.ts\";\r\nexport const WceInitializationException: AppError = {\r\n id: 44200,\r\n source: WebComponentExperienceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const SubscriptionCallbackExecError: AppError = {\r\n id: 44300,\r\n source: \"libs/windows-shared/utilities/SubscribableMap.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Microsoft Edge Widget Errors\r\n */\r\nconst MicrosoftEdgeWidget = \"microsoft-edge-widget\";\r\nexport const MicrosoftEdgeWidgetBingDataError: AppError = {\r\n id: 44400,\r\n source: MicrosoftEdgeWidget,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const MicrosoftEdgeWidgetNoImageOfTheDay: AppError = {\r\n id: 44401,\r\n source: MicrosoftEdgeWidget,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const MicrosoftEdgeWidgetIndexedDbError: AppError = {\r\n id: 44402,\r\n source: MicrosoftEdgeWidget,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to the Microsoft Feed Card experience\r\n * Warnings are mainly used when doing retries for Rest API calls\r\n */\r\nconst enum MicrosoftFeedCardErrorSource {\r\n MicrosoftFeedCard = \"MicrosoftFeedCard.ts\",\r\n FastFeedApiClient = \"FeedApiClient.ts\",\r\n FeedPreviewClient = \"FeedPreviewClient.ts\",\r\n PeoplePhotoProvider = \"PeoplePhotoProvider.ts\",\r\n HTTPRequest = \"HTTPRequest.ts\",\r\n ShareDialog = \"ShareDialog.ts\"\r\n}\r\n\r\nexport const MicrosoftFeedCardErrors = {\r\n UnknownError: {\r\n id: 44500,\r\n source: MicrosoftFeedCardErrorSource.MicrosoftFeedCard,\r\n severity,\r\n pb\r\n },\r\n UnknownErrorWarning: {\r\n id: 44501,\r\n source: MicrosoftFeedCardErrorSource.MicrosoftFeedCard,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n FetchFeedDataFailed: {\r\n id: 44502,\r\n source: MicrosoftFeedCardErrorSource.FastFeedApiClient,\r\n severity,\r\n pb\r\n },\r\n FetchFeedDataFailedWarning: {\r\n id: 44503,\r\n source: MicrosoftFeedCardErrorSource.FastFeedApiClient,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n FetchVideoPreviewFailed: {\r\n id: 44504,\r\n source: MicrosoftFeedCardErrorSource.FeedPreviewClient,\r\n severity,\r\n pb\r\n },\r\n FetchVideoPreviewFailedWarning: {\r\n id: 44505,\r\n source: MicrosoftFeedCardErrorSource.FeedPreviewClient,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n FetchNewsPreviewFailed: {\r\n id: 44506,\r\n source: MicrosoftFeedCardErrorSource.FeedPreviewClient,\r\n severity,\r\n pb\r\n },\r\n FetchNewsPreviewFailedWarning: {\r\n id: 44507,\r\n source: MicrosoftFeedCardErrorSource.FeedPreviewClient,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n FetchDocumentPreviewFailed: {\r\n id: 44508,\r\n source: MicrosoftFeedCardErrorSource.FeedPreviewClient,\r\n severity,\r\n pb\r\n },\r\n FetchDocumentPreviewFailedWarning: {\r\n id: 44509,\r\n source: MicrosoftFeedCardErrorSource.FeedPreviewClient,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n FetchPeoplePhotoFailed: {\r\n id: 44510,\r\n source: MicrosoftFeedCardErrorSource.PeoplePhotoProvider,\r\n severity,\r\n pb\r\n },\r\n FetchPeoplePhotoFailedWarning: {\r\n id: 44511,\r\n source: MicrosoftFeedCardErrorSource.PeoplePhotoProvider,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n ItemRenderingFailed: {\r\n id: 44512,\r\n source: MicrosoftFeedCardErrorSource.MicrosoftFeedCard,\r\n severity,\r\n pb\r\n },\r\n ShareDialogFailed: {\r\n id: 44513,\r\n source: MicrosoftFeedCardErrorSource.ShareDialog,\r\n severity,\r\n pb\r\n },\r\n\r\n AuthenticationFailedWarning: {\r\n id: 44514,\r\n source: MicrosoftFeedCardErrorSource.HTTPRequest,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n FastFeedSetupFailed: {\r\n id: 44515,\r\n source: MicrosoftFeedCardErrorSource.MicrosoftFeedCard,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * Set of errors in photo-card experience.\r\n */\r\nconst PhotosCardSourceFileName = \"PhotoCard.ts\";\r\nconst PhotosCardDataServiceFileName = \"libs/PhotoCardDataservice.ts\";\r\nexport const PhotoCardUnsupportedSize: AppError = {\r\n id: 44600,\r\n source: PhotosCardSourceFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\nexport const PhotoCardUnsupportedAuth: AppError = {\r\n id: 44601,\r\n source: PhotosCardSourceFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\nexport const PhotoCardIndexedDbError: AppError = {\r\n id: 44602,\r\n source: PhotosCardSourceFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\nexport const PhotosDataServiceFetchFailed: AppError = {\r\n id: 44603,\r\n source: PhotosCardDataServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const PhotoCardParseTabNumberFailed: AppError = {\r\n id: 44605,\r\n source: PhotosCardSourceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const PhotoCardTemplateRenderingFailed: AppError = {\r\n id: 44606,\r\n source: PhotosCardSourceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Errors related to background image wc experience */\r\nconst BackgroundImageFile = \"BackgroundImageWC.ts\";\r\nexport const BackgroundFetchFailed: AppError = {\r\n id: 44700,\r\n source: BackgroundImageFile,\r\n severity,\r\n pb\r\n};\r\nexport const VideoBackgroundLocalStorageFetchFailed: AppError = {\r\n id: 44701,\r\n source: BackgroundImageFile,\r\n severity,\r\n pb\r\n};\r\nexport const VideoBackgroundLocalStorageWriteFailed: AppError = {\r\n id: 44702,\r\n source: BackgroundImageFile,\r\n severity,\r\n pb\r\n};\r\nexport const BackgroundImage_DataConnectorsNotAvailable: AppError = {\r\n id: 44703,\r\n source: BackgroundImageFile,\r\n severity,\r\n pb\r\n};\r\nexport const BackgroundImage_TelemetryObjectNotAvailable: AppError = {\r\n id: 44704,\r\n source: BackgroundImageFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Errors related to entertainment card experience */\r\nconst EntertainmentCardFileName = \"EntertainmentCard.ts\";\r\n/** Service side error */\r\nexport const EntertainmentCardServiceError: AppError = {\r\n id: 44800,\r\n source: EntertainmentCardFileName,\r\n severity,\r\n pb\r\n};\r\n/** Cache error */\r\nexport const EntertainmentCardCacheError: AppError = {\r\n id: 44801,\r\n source: EntertainmentCardFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n/** No data - fail to fetch data either from service or from cache */\r\nexport const EntertainmentCardNoData: AppError = {\r\n id: 44802,\r\n source: EntertainmentCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n *\r\n * Errors for Elections experience\r\n *\r\n */\r\n\r\nconst ElectionsFileNameDataService = \"dataService.ts\";\r\nconst ElectionsFileNameElections = \"Elections.tsx\";\r\nconst ElectionsFileNameElectionsConnector = \"Elections.connector.ts\";\r\nconst ElectionsFileNameElectionsUtils = \"Elections.utils.ts\";\r\nconst ElectionsFileNameModule = \"Module.tsx\";\r\n\r\n// Experience\r\nexport const ElectionsAppErrorExperienceErrorForFetchRequest: AppError = {\r\n id: 45000,\r\n source: ElectionsFileNameDataService,\r\n severity: severity,\r\n pb: pb\r\n};\r\nexport const ElectionsAppErrorExperienceErrorForOneServiceRequest: AppError = {\r\n id: 45001,\r\n source: ElectionsFileNameDataService,\r\n severity: severity,\r\n pb: pb\r\n};\r\nexport const ElectionsAppErrorExperienceErrorForParseOneServiceResponse: AppError = {\r\n id: 45002,\r\n source: ElectionsFileNameDataService,\r\n severity: severity,\r\n pb: pb\r\n};\r\nexport const ElectionsAppErrorExperienceErrorForParseFetchResponse: AppError = {\r\n id: 45003,\r\n source: ElectionsFileNameDataService,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\nexport const ElectionsAppErrorExperienceErrorForRenderExperience: AppError = {\r\n id: 45004,\r\n source: ElectionsFileNameElections,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\nexport const ElectionsAppErrorExperienceErrorForInitialDataLoad: AppError = {\r\n id: 45005,\r\n source: ElectionsFileNameElectionsConnector,\r\n severity: severity,\r\n pb: pb\r\n};\r\nexport const ElectionsAppErrorExperienceErrorForInitialDataTransform: AppError = {\r\n id: 45006,\r\n source: ElectionsFileNameElectionsConnector,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\nexport const ElectionsAppErrorExperienceErrorForParseJson: AppError = {\r\n id: 45007,\r\n source: ElectionsFileNameElectionsUtils,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\nexport const ElectionsAppErrorExperienceErrorForInvalidModuleType: AppError = {\r\n id: 45008,\r\n source: ElectionsFileNameModule,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\nexport const ElectionsAppErrorExperienceErrorForParseUrl: AppError = {\r\n id: 45009,\r\n source: ElectionsFileNameElectionsUtils,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\n// NewsFeed Module\r\nexport const ElectionsAppErrorModuleRenderErrorForNewsFeed: AppError = {\r\n id: 45100,\r\n source: ElectionsFileNameModule,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\n// Polls Module\r\nexport const ElectionsAppErrorModuleRenderErrorForPolls: AppError = {\r\n id: 45101,\r\n source: ElectionsFileNameModule,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\n// VoteQuestionnaire Module\r\nexport const ElectionsAppErrorModuleRenderErrorForVoteQuestionnaire: AppError = {\r\n id: 45102,\r\n source: ElectionsFileNameModule,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\n// Parties Module\r\nexport const ElectionsAppErrorModuleRenderErrorForParties: AppError = {\r\n id: 45103,\r\n source: ElectionsFileNameModule,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\n// People Module\r\nexport const ElectionsAppErrorModuleRenderErrorForPeople: AppError = {\r\n id: 45104,\r\n source: ElectionsFileNameModule,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\n// Debates Module\r\nexport const ElectionsAppErrorModuleRenderErrorForDebates: AppError = {\r\n id: 45105,\r\n source: ElectionsFileNameModule,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\n// PartyResults Module\r\nexport const ElectionsAppErrorModuleRenderErrorForPartyResults: AppError = {\r\n id: 45106,\r\n source: ElectionsFileNameModule,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\n// PageUpsell Module\r\nexport const ElectionsAppErrorModuleRenderErrorForPageUpsell: AppError = {\r\n id: 45107,\r\n source: ElectionsFileNameModule,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\n// CoalitionCalculator Module\r\nexport const ElectionsAppErrorModuleRenderErrorForCoalitionCalculator: AppError = {\r\n id: 45108,\r\n source: ElectionsFileNameModule,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\n// Description Module\r\nexport const ElectionsAppErrorModuleRenderErrorForDescription: AppError = {\r\n id: 45109,\r\n source: ElectionsFileNameModule,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\n// ResultsMap Module\r\nexport const ElectionsAppErrorModuleRenderErrorForResultsMap: AppError = {\r\n id: 45110,\r\n source: ElectionsFileNameModule,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\n// InlineFrame Module\r\nexport const ElectionsAppErrorModuleRenderErrorForInlineFrame: AppError = {\r\n id: 45111,\r\n source: ElectionsFileNameModule,\r\n severity: severity,\r\n pb: pb\r\n};\r\n\r\n/**\r\n * Represents Travel Destination mapper data error\r\n */\r\nconst TravelDestinationCardDataMapperFile = \"TravelDestinationCardDataMapper.ts\";\r\nexport const TravelDestinationCardDataMapperError: AppError = {\r\n id: 45700,\r\n source: TravelDestinationCardDataMapperFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Publisher Carousel errors\r\n */\r\nexport const PublisherCarouselCardDataMapperError: AppError = {\r\n id: 46000,\r\n source: \"libs/feed-layout/src/card-templates/publisher-carousel-card/PublisherCarouselCardDataMapper.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\nexport const PublisherCarouselDataMapperError: AppError = {\r\n id: 46001,\r\n source: \"PublisherCarouselDataMapper.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Content Tools Errors\r\n */\r\nexport const ContentToolsErrorPage: AppError = {\r\n id: 46100,\r\n source: \"app-types/content-tools/src/page.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Desktop Feed errors continued */\r\n// A low severity alert, mostly for tracking that is fired when we know a blank feed was shown due to user conditions\r\nexport const DesktopFeedUserEndBlankFeed: AppError = {\r\n id: 46200,\r\n source: DesktopFeedConnectorFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Bing Homepage Feed Errors */\r\nconst BingHomepageFeedConnectorFileName = \"BingHomepageFeed.ts\";\r\n// A low severity alert, mostly for tracking that is fired when we know a blank feed was shown due to user conditions\r\nexport const BingHomepageFeedUserEndBlankFeed: AppError = {\r\n id: 46300,\r\n source: BingHomepageFeedConnectorFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const BingHomepageFeedFullPageAPIFetchFailed: AppError = {\r\n id: 46301,\r\n source: BingHomepageFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingHomepageFeedInvalidRiverTemplateId: AppError = {\r\n id: 46302,\r\n source: BingHomepageFeedConnectorFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const BingHomepageFeedInvalidEmptyRiver: AppError = {\r\n id: 46303,\r\n source: BingHomepageFeedConnectorFileName,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\nexport const BingHomepageFeedInvalidSectionData: AppError = {\r\n id: 46304,\r\n source: BingHomepageFeedConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const BingHomepageFeedTopStoriesMissingStories: AppError = {\r\n id: 46305,\r\n source: BingHomepageFeedConnectorFileName,\r\n message: \"Top stories card had less than 6 stories in response\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to EsportsLiveStream card experiences.\r\n */\r\nconst EsportsLiveStreamCardConnectorFile = \"EsportsLiveStreamCard.connector.ts\";\r\n\r\n/** Errors related to EsportsLiveStreamCardConnector logic */\r\nexport const EsportsLiveStreamCardConnectorError: AppError = {\r\n id: 47001,\r\n source: EsportsLiveStreamCardConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Errors related to Esports lib.\r\n */\r\nconst EsportsDataServiceFile = \"EsportsDataService.ts\";\r\n\r\n/** Errors related to EsportsDataService calling PDP service logic */\r\nexport const EsportsDataServiceUserSettingsSaveFailed: AppError = {\r\n id: 47101,\r\n source: EsportsDataServiceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Windows Office Feed errors */\r\nconst enum WindowsOfficeFeedErrorSource {\r\n WindowsOfficeFeed = \"WindowsOfficeFeed.ts\",\r\n FastFeedApiClient = \"FeedApiClient.ts\",\r\n FeedPreviewClient = \"FeedPreviewClient.ts\",\r\n PeoplePhotoProvider = \"PeoplePhotoProvider.ts\",\r\n HTTPRequest = \"HTTPRequest.ts\",\r\n ShareDialog = \"ShareDialog.ts\"\r\n}\r\n\r\nexport const WindowsOfficeFeedErrors = {\r\n UnknownError: {\r\n id: 47200,\r\n source: WindowsOfficeFeedErrorSource.WindowsOfficeFeed,\r\n severity,\r\n pb\r\n },\r\n UnknownErrorWarning: {\r\n id: 47201,\r\n source: WindowsOfficeFeedErrorSource.WindowsOfficeFeed,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n FetchFeedDataFailed: {\r\n id: 47202,\r\n source: WindowsOfficeFeedErrorSource.FastFeedApiClient,\r\n severity,\r\n pb\r\n },\r\n FetchFeedDataFailedWarning: {\r\n id: 47203,\r\n source: WindowsOfficeFeedErrorSource.FastFeedApiClient,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n FetchVideoPreviewFailed: {\r\n id: 47204,\r\n source: WindowsOfficeFeedErrorSource.FeedPreviewClient,\r\n severity,\r\n pb\r\n },\r\n FetchVideoPreviewFailedWarning: {\r\n id: 47205,\r\n source: WindowsOfficeFeedErrorSource.FeedPreviewClient,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n FetchNewsPreviewFailed: {\r\n id: 47206,\r\n source: WindowsOfficeFeedErrorSource.FeedPreviewClient,\r\n severity,\r\n pb\r\n },\r\n FetchNewsPreviewFailedWarning: {\r\n id: 47207,\r\n source: WindowsOfficeFeedErrorSource.FeedPreviewClient,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n FetchDocumentPreviewFailed: {\r\n id: 47208,\r\n source: WindowsOfficeFeedErrorSource.FeedPreviewClient,\r\n severity,\r\n pb\r\n },\r\n FetchDocumentPreviewFailedWarning: {\r\n id: 47209,\r\n source: WindowsOfficeFeedErrorSource.FeedPreviewClient,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n FetchPeoplePhotoFailed: {\r\n id: 47210,\r\n source: WindowsOfficeFeedErrorSource.PeoplePhotoProvider,\r\n severity,\r\n pb\r\n },\r\n FetchPeoplePhotoFailedWarning: {\r\n id: 47211,\r\n source: WindowsOfficeFeedErrorSource.PeoplePhotoProvider,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n ItemRenderingFailed: {\r\n id: 47212,\r\n source: WindowsOfficeFeedErrorSource.WindowsOfficeFeed,\r\n severity,\r\n pb\r\n },\r\n ShareDialogFailed: {\r\n id: 47213,\r\n source: WindowsOfficeFeedErrorSource.ShareDialog,\r\n severity,\r\n pb\r\n },\r\n AuthenticationFailedWarning: {\r\n id: 47214,\r\n source: WindowsOfficeFeedErrorSource.HTTPRequest,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n FastFeedSetupFailed: {\r\n id: 47215,\r\n source: WindowsOfficeFeedErrorSource.WindowsOfficeFeed,\r\n severity,\r\n pb\r\n },\r\n WidgetInitializationFailed: {\r\n id: 47216,\r\n source: WindowsOfficeFeedErrorSource.WindowsOfficeFeed,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Set of errors related to MoneyInfoCardWC */\r\nconst MoneyInfoCardWCFile = \"MoneyInfoCardWC.ts\";\r\nconst MoneyInfoCardWCFeedLayoutFile = \"MoneyInfoCardDataMapper.ts\";\r\n\r\n/** Failed to parse grocery data in mobile feed */\r\nexport const MoneyInfoCardWCServicePromiseUndefinedError: AppError = {\r\n id: 50000,\r\n source: MoneyInfoCardWCFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const MoneyInfoCardWCEmptyDataFromServiceError: AppError = {\r\n id: 50001,\r\n source: MoneyInfoCardWCFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception when fetch feed response data error */\r\nexport const MoneyInfoCardWCCarouselTabsEmptyError: AppError = {\r\n id: 50002,\r\n source: MoneyInfoCardWCFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception when WPO feed money card data is not present */\r\nexport const MoneyInfoCardWCFeedDataEmptyWarning: AppError = {\r\n id: 50004,\r\n source: MoneyInfoCardWCFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Exception while parsing feed money card data from data mapper */\r\nexport const MoneyInfoCardWCFeedDataParsingError: AppError = {\r\n id: 50005,\r\n source: MoneyInfoCardWCFeedLayoutFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Error during Nurturing Framework Invocation. */\r\nconst TopSitesEdgeNextWC = \"TopSitesEdgeNextWC.ts\";\r\nexport const NotifyTriggerEventFailed: AppError = {\r\n id: 50050,\r\n source: TopSitesEdgeNextWC,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const AppPiningPrivateGetPinsException: AppError = {\r\n id: 50051,\r\n source: TopSitesEdgeNextWC,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Set of errors related to ToastData */\r\nconst ToastDataFile = \"ToastData.ts\";\r\n\r\n/** ToastData render toast callback undefined */\r\nexport const UndefinedRenderToastCallback: AppError = {\r\n id: 50100,\r\n source: ToastDataFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** ToastData expire toast callback undefined */\r\nexport const UndefinedExpireToastCallback: AppError = {\r\n id: 50101,\r\n source: ToastDataFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Media Services errors\r\n */\r\nexport const MediaServicesAppTypeLoadError: AppError = {\r\n id: 50201,\r\n source: pageTsFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nconst MediaServiceExperienceConnectorFilename = \"experiences/media-services/src/MediaServices.connector.ts\";\r\n\r\nexport const MediaServicesVideoDocumentParseError: AppError = {\r\n id: 50202,\r\n source: MediaServiceExperienceConnectorFilename,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const MediaServicesVideoDocumentNoValidSourcesError: AppError = {\r\n id: 50203,\r\n source: MediaServiceExperienceConnectorFilename,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const MediaServicesVideoDocumentUnconfiguredThirdPartyPlayerError: AppError = {\r\n id: 50204,\r\n source: MediaServiceExperienceConnectorFilename,\r\n severity,\r\n pb\r\n};\r\n\r\nconst FirstPartyPlayerUtilitiesFilename = \"experiences/media-services/src/components/NativeVideoRenderer/utils/FirstPartyPlayer.ts\";\r\n\r\nexport const MediaServicesVideoDocumentNativeFreeWheelLibraryLoadError: AppError = {\r\n id: 50205,\r\n source: FirstPartyPlayerUtilitiesFilename,\r\n severity,\r\n pb\r\n};\r\n\r\nconst UpnextPaddleFile = \"UpnextPaddle.ts\";\r\n\r\nexport const UpnextPaddleAppErrors = {\r\n FetchFail: {\r\n id: 50300,\r\n source: UpnextPaddleFile,\r\n severity,\r\n pb\r\n },\r\n TransformFail: {\r\n id: 50301,\r\n source: UpnextPaddleFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst LocationPdpFile = \"LocationPdpClient.ts\";\r\n\r\nexport const UserDefaultLocationAppErrors: AppError = {\r\n id: 50400,\r\n source: LocationPdpFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst LocationEditorFile = \"LocationEditor.ts\";\r\nexport const LocationEditorFailedSave: AppError = {\r\n id: 50401,\r\n source: LocationEditorFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst LocationAutoSuggestLibrary = \"location-service/AutoSuggestService\";\r\nexport const LocationAutoSuggestRequestFailed: AppError = {\r\n id: 50402,\r\n source: LocationAutoSuggestLibrary,\r\n severity,\r\n pb\r\n};\r\n\r\nconst DesktopFeedViewsWCFilename = \"experiences/desktop-feed-views-wc/src/DesktopFeedViewsWC.ts\";\r\n\r\nexport const DesktopFeedViewsWCAppErrors = {\r\n FeedInvalidRiverTemplateId: {\r\n id: 50500,\r\n source: DesktopFeedViewsWCFilename,\r\n severity,\r\n pb\r\n },\r\n UserEndBlankFeed: {\r\n id: 50501,\r\n source: DesktopFeedViewsWCFilename,\r\n severity,\r\n pb\r\n },\r\n FeedInvalidEmptyRiver: {\r\n id: 50502,\r\n source: DesktopFeedViewsWCFilename,\r\n severity,\r\n pb\r\n },\r\n UnsupportedCardType: {\r\n id: 50503,\r\n source: DesktopFeedViewsWCFilename,\r\n severity,\r\n pb\r\n },\r\n RiverContentFetchFailed: {\r\n id: 50504,\r\n source: DesktopFeedViewsWCFilename,\r\n severity,\r\n pb\r\n },\r\n FullPageAPIFetchFailed: {\r\n id: 50505,\r\n source: DesktopFeedViewsWCFilename,\r\n severity,\r\n pb\r\n },\r\n UnexpectedUpsellCard: {\r\n id: 50506,\r\n source: DesktopFeedViewsWCFilename,\r\n message: \"Upsell card not expected to show up in the river, but it was returned by OneService.\",\r\n severity,\r\n pb\r\n },\r\n ColdStartCardIncorrectPosition: {\r\n id: 50507,\r\n source: DesktopFeedViewsWCFilename,\r\n message: \"Cold Start card is returned in the wrong position by OneService.\",\r\n severity,\r\n pb\r\n },\r\n InvalidSectionData: {\r\n id: 50508,\r\n source: DesktopFeedViewsWCFilename,\r\n severity,\r\n pb\r\n },\r\n DesktopFeedInvalidSectionData: {\r\n id: 50509,\r\n source: DesktopFeedViewsWCFilename,\r\n severity,\r\n pb\r\n },\r\n FeedNativeAdServiceFetchFailed: {\r\n id: 50510,\r\n source: DesktopFeedViewsWCFilename,\r\n severity,\r\n pb\r\n },\r\n GettingArtifactsDataFailed: {\r\n id: 50511,\r\n source: DesktopFeedViewsWCFilename,\r\n severity,\r\n pb\r\n },\r\n MissingFRESignal: {\r\n id: 50512,\r\n source: DesktopFeedViewsWCFilename,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * Error in page.ts of Travel app type.\r\n */\r\nconst TravelPage = \"travel/page.ts\";\r\nexport const TravelPageError: AppError = {\r\n id: 50600,\r\n source: TravelPage,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Travel Page Error fetching the APP_ANON cookie\r\n */\r\nexport const TravelPageErrorFetchingAppAnonCookie: AppError = {\r\n id: 50601,\r\n source: TravelPage,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Set of errors related to GroceryCarousel */\r\nconst GroceryCouponCarouselConnectorFile = \"mobile-feed/grocery-carousel/GroceryCouponCarousel.connector.ts\";\r\n\r\nexport const GroceryCouponCarouselDataParseError: AppError = {\r\n id: 51000,\r\n source: GroceryCouponCarouselConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Received null or empty response for grocery carousel in mobile feed */\r\nexport const GroceryCouponCarouselEmptyResponseDataError: AppError = {\r\n id: 51001,\r\n source: GroceryCouponCarouselConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to fetch the grocery carousel card in mobile feed */\r\nexport const GroceryCouponCarouselDataFetchError: AppError = {\r\n id: 51002,\r\n source: GroceryCouponCarouselConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const GroceryCouponCarouselGeneralFetchError: AppError = {\r\n id: 51003,\r\n source: GroceryCouponCarouselConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const GroceryCouponCarouselNotInWpoError: AppError = {\r\n id: 51004,\r\n source: GroceryCouponCarouselConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const GroceryCouponCarouselEmptyWpoResponseError: AppError = {\r\n id: 51005,\r\n source: GroceryCouponCarouselConnectorFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Represents AFD Static Failover Scenarios error\r\n */\r\nconst AFDStaticFile = \"afd-staticpage\";\r\nexport const AFDStaticRendered: AppError = {\r\n id: 52000,\r\n source: AFDStaticFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const AFDStaticNTPError: AppError = {\r\n id: 52001,\r\n source: AFDStaticFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const AFDStaticError: AppError = {\r\n id: 52002,\r\n source: AFDStaticFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Coachmark WC */\r\nconst coachmarkCTA = \"Coachmark.cta.ts\";\r\nexport const InvalidCoachmarkCtaUrl: AppError = {\r\n id: 52100,\r\n source: coachmarkCTA,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * MSN Health Fitness errors\r\n */\r\nconst FitnessSingleVideoFile = \"FitnessSingleVideo.tsx\";\r\n// Represent MSN Fitness video page load error\r\nexport const HealthFitnessVideoPageLoadError: AppError = {\r\n id: 53000,\r\n source: FitnessSingleVideoFile,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\n// Represent MSN Fitness related workout load error on clicking see more\r\nexport const HealthFitnessVideoPageRWSeeMoreError: AppError = {\r\n id: 53001,\r\n source: FitnessSingleVideoFile,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\n// Represent MSN Fitness workout card load error\r\nexport const HealthFitnessWorkoutCardLoadError: AppError = {\r\n id: 53002,\r\n source: FitnessSingleVideoFile,\r\n severity,\r\n pb\r\n};\r\n\r\n// Represent MSN Fitness video page missing data error\r\nexport const HealthFitnessVideoPageMissingDataError: AppError = {\r\n id: 53003,\r\n source: FitnessSingleVideoFile,\r\n severity,\r\n pb\r\n};\r\n\r\n// Represent MSN Fitness workout card missing data error\r\nexport const HealthFitnessWorkoutCardMissingDataError: AppError = {\r\n id: 53004,\r\n source: FitnessSingleVideoFile,\r\n severity,\r\n pb\r\n};\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { AccountType, AppType, AudienceModeType, AuthCookieName, PageType } from \"@msnews/experiences-constants\";\r\nimport { AppErrorPropertyBag, getAppErrorsPropertyBag, getPageTimings, updateAppErrorsPropertyBag } from \"@msnews/diagnostics\";\r\n\r\nimport {\r\n appAnonCookieExistsCookieName,\r\n childCookieName,\r\n rootElementId,\r\n serviceUrl,\r\n telemetryId,\r\n trackPageProduct,\r\n trackPageType,\r\n EnterpriseToConsumerOverrideKey\r\n} from \"../constants\";\r\n\r\nimport { Environment, getEnvironmentFromString } from \"./Environment\";\r\nimport { HostPage, IHostPage } from \"./HostPage\";\r\nimport { WpoModel, getWpoFlights } from \"@msnews/wpo-common\";\r\nimport { canUseDOM, getDocumentElementById, getLocationHostname, getLocationHref, getLocationOrigin, getLocationSearch } from \"@msnews/isomorphic-util\";\r\nimport { getCookie, getMuidCookie } from \"../utilities/CookieUtility\";\r\nimport { getLocalStorage } from \"../webstorage/LocalStorage\";\r\n\r\nimport { AccountInfo } from \"./Enterprise\";\r\nimport { Market } from \"./Market\";\r\nimport { PlatformType, PageRequestTargetScope } from \"@msnews/config-data-types\";\r\nimport { UrlUtility } from \"../utilities/UrlUtility\";\r\nimport { Utility } from \"../utilities/Utility\";\r\nimport { headData } from \"./HeadData\";\r\nimport { isString } from \"lodash-es\";\r\nimport { tryParseJson } from \"../utilities/Parsing\";\r\nimport { shouldUseGitConfigs } from \"@msnews/experimentation-helpers\";\r\nimport { ConfigCacheProperties, ConfigOrigin, ConfigOrigins } from \"@msnews/core-contracts\";\r\nimport { updateResolverAppErrorsPropertyBag } from \"@msnews/config-resolver\";\r\nimport { isWindowsScenario } from \"@msnews/url-util\";\r\n\r\n/**\r\n * chrome\r\n * The chrome API is not defined in Typescript\r\n */\r\ndeclare global {\r\n interface Window { chrome: any; }\r\n}\r\n\r\n/**\r\n * Page level experience tracking info\r\n */\r\nexport interface ITrackInfo {\r\n sitePage: {\r\n page_product: string,\r\n page_type: string\r\n }\r\n}\r\n\r\n// This is defined in webpack config\r\ndeclare let __WEBPACK_LOCAL_GITCONFIGS__: string;\r\ndeclare let __WEBPACK_LOCAL_GITCONFIGS_LOC__: string;\r\n\r\nexport class AppEnvironment {\r\n /**\r\n * The single instance of the AppEnvironment class.\r\n * @type {AppEnvironment}\r\n */\r\n private static _instance: AppEnvironment;\r\n\r\n /**\r\n * the activity id for the current page view\r\n */\r\n private activityId: string;\r\n\r\n /**\r\n * Base url for the content service, endpoints/queries are appended for specific content calls.\r\n * This is an akamai url for highly cacheable content.\r\n * Possible values are enumerated on ContentServiceConfig.ts\r\n *\r\n * @private\r\n * @type {string}\r\n * @memberof AppEnvironment\r\n */\r\n private contentServiceUrlBase: URL;\r\n\r\n private currentRequestTargetScope: PageRequestTargetScope;\r\n\r\n private currentMarket: Market;\r\n private hostPage: IHostPage;\r\n\r\n /** The hostname to use for content links. */\r\n private currentContentLinkHost: string;\r\n\r\n /**\r\n * Indicates that the page is running as an FRE page (i.e. the url contains fre=1)\r\n * Does not indicate that the FRE itself is currently displayed over the page.\r\n */\r\n private isFrePage: boolean;\r\n\r\n /** Flag to enable five column layout. */\r\n private enableFiveColLayout: boolean;\r\n\r\n /**\r\n * Base for the service url, endpoints/queries are appended for specific service calls.\r\n * This is the OneService url used for personalized content.\r\n * Possible values are enumerated on OneServiceConfig.ts\r\n *\r\n * @private\r\n * @type {string}\r\n * @memberof AppEnvironment\r\n */\r\n private serviceUrlBase: URL;\r\n\r\n /**\r\n * Base URL for the feed service\r\n */\r\n private feedServiceUrlBase: URL;\r\n\r\n /**\r\n * Base domain for the feed service\r\n */\r\n private serviceDomainUrl: string;\r\n\r\n /**\r\n * Base domain host for static resources\r\n */\r\n private staticDomain: string;\r\n\r\n /**\r\n * Base domain for the enterprise feed service\r\n */\r\n private enterpriseServiceDomainUrl: string;\r\n\r\n /**\r\n * The account info for the current page user wrapped in a promise\r\n */\r\n private accountInfoPromise: Promise;\r\n\r\n /**\r\n * The resolved account info. This is only set when the account info promise is resolved.\r\n */\r\n private resolvedAccountInfo: AccountInfo;\r\n\r\n private appType: string;\r\n private authCookieName: AuthCookieName;\r\n private buildVersion: string;\r\n\r\n private environmentConfigUrl: URL;\r\n\r\n private rootTelemetryId: number;\r\n private trackInfo: ITrackInfo;\r\n private userId: string;\r\n private countryCode: string;\r\n private latitude: string;\r\n private longitude: string;\r\n private environment: Environment;\r\n private featureFlags: any;\r\n private disableCachingConfigs: boolean;\r\n private enableConfigService: boolean;\r\n private isMultiConfigRetrievalEnabled: boolean;\r\n private configServiceBaseUrl: URL;\r\n private disableContentPreviewCache: boolean;\r\n private disableContentCacheIDBRead: boolean;\r\n private sendFeedCallActivityIdInHeader: boolean;\r\n private useOneServiceAuthEndpoints: boolean;\r\n private useOneServiceAnonAuthEndpoints: boolean;\r\n private useAuthFetch: boolean;\r\n private clarityEnabled: boolean;\r\n private isCnDomain: boolean;\r\n private oneServiceApiKey: string;\r\n\r\n /** Flag specific to windows-shell. True if User is AAD Account Type */\r\n private isWinAADUser: boolean;\r\n\r\n /** True if query string has appropriate debug flag */\r\n private isDebug: boolean;\r\n\r\n /** True if query string has appropriate flag to show msnCreatorDashboard (msnDash=) */\r\n private showMnsCreatorDashboard: boolean;\r\n\r\n /** Config Root Url */\r\n private configRootUrl: URL;\r\n\r\n /** Cache busting identifier received from pcs */\r\n private cacheBustingIdentifier: string;\r\n\r\n /** True if this is git configs flight */\r\n private isGitConfigs: boolean;\r\n\r\n /** Indicates whether feature/localization configs are fetched from local repo */\r\n private configOrigins: ConfigOrigins;\r\n\r\n /** For Config caching optimizations. */\r\n private configCacheProperties: ConfigCacheProperties;\r\n\r\n /** CRS endpoint version. Example: v2 or v3 */\r\n private crsVersion: string;\r\n\r\n /** CRS endpoint domain. Example: https://www.msn.com */\r\n private crsDomain: string;\r\n\r\n /** Root config index CMS Id. Example: cms/api/amp/experienceConfigIndex/BBUsYQa */\r\n private configIndexDocId: string;\r\n\r\n /** The WPOData we get from local storage using the requestContext wpoData function */\r\n private wpoData: string;\r\n\r\n /** Taboola cookie value */\r\n private ecasession: string;\r\n\r\n /** is browser optout cookie equals 1 */\r\n private browserOptOut: boolean;\r\n\r\n public get Ecasession(): string {\r\n if (this.ecasession === undefined) {\r\n this.ecasession = getCookie(\"ecasession\") || \"init\";\r\n }\r\n return this.ecasession;\r\n }\r\n\r\n public get BrowserOptOut(): boolean {\r\n if (this.browserOptOut === undefined) {\r\n this.browserOptOut = getCookie(\"TOptOut\") === \"1\";\r\n }\r\n return this.browserOptOut;\r\n }\r\n\r\n public get WpoData(): string { return this.wpoData; }\r\n public set WpoData(value: string) {\r\n this.wpoData = value;\r\n this.addWpoFlights();\r\n }\r\n\r\n /**\r\n * ActivityId value from initial server response, use telemetry's requestId instead for associating with current page client navigation\r\n */\r\n public get ActivityId(): string { return this.activityId; }\r\n public set ActivityId(value: string) {\r\n this.activityId = value;\r\n headData.ClientSettings = {\r\n ...headData.ClientSettings,\r\n aid: value\r\n };\r\n }\r\n\r\n /**\r\n * Getter for the base url for the content service, endpoints/queries are appended for specific content calls.\r\n * This is an akamai url for highly cacheable content.\r\n * Possible values are enumerated on ContentServiceConfig.ts\r\n *\r\n * @readonly\r\n * @type {URL}\r\n * @memberof AppEnvironment\r\n */\r\n public get EnvironmentConfigUrl(): URL {\r\n // If I mutate the same object, I will need to revert to the original state somewhere.\r\n // For safety reason, it is better to use a new Object\r\n const url = new URL(\"\", this.environmentConfigUrl);\r\n\r\n if (process.env.WEBPACK_DEV_SERVER || new URLSearchParams(getLocationSearch()).get(\"env\") === \"dev\") {\r\n url.searchParams.set(\"env.config\", \"dev\");\r\n }\r\n\r\n const searchParam = new URLSearchParams(getLocationSearch()).get(\"env.config\");\r\n if (searchParam) {\r\n url.searchParams.set(\"env.config\", searchParam);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Getter for the base url for the content service, endpoints/queries are appended for specific content calls.\r\n * This is an akamai url for highly cacheable content.\r\n * Possible values are enumerated on ContentServiceConfig.ts\r\n *\r\n * @readonly\r\n * @type {URL}\r\n * @memberof AppEnvironment\r\n */\r\n public get ContentServiceUrlBase(): URL {\r\n // If I mutate the same object, I will need to revert to the original state somewhere.\r\n // For safety reason, it is better to use a new Object\r\n const url = new URL(\"\", this.contentServiceUrlBase);\r\n\r\n if (process.env.WEBPACK_DEV_SERVER || new URLSearchParams(getLocationSearch()).get(\"env\") === \"dev\") {\r\n url.searchParams.set(\"env.content\", \"dev\");\r\n }\r\n\r\n const searchParam = new URLSearchParams(getLocationSearch()).get(\"env.content\");\r\n if (searchParam) {\r\n url.searchParams.set(\"env.content\", searchParam);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n public get CurrentRequestTargetScope(): PageRequestTargetScope { return this.currentRequestTargetScope; }\r\n public set CurrentRequestTargetScope(value: PageRequestTargetScope) { this.currentRequestTargetScope = value; }\r\n\r\n public get CurrentMarket(): Market { return this.currentMarket; }\r\n public set CurrentMarket(value: Market) { this.currentMarket = value; }\r\n\r\n public get EnableFiveColLayout(): boolean { return this.enableFiveColLayout; }\r\n public set EnableFiveColLayout(value: boolean) { this.enableFiveColLayout = value; }\r\n\r\n public get Environment(): Environment { return this.environment; }\r\n public set Environment(value: Environment) { this.environment = value; }\r\n\r\n public get StaticDomain(): string { return this.staticDomain; }\r\n\r\n public get HostPage(): IHostPage { return this.hostPage; }\r\n public set HostPage(value: IHostPage) { this.hostPage = value; }\r\n\r\n public get AppType(): string { return this.appType; }\r\n\r\n public get AuthCookieName(): AuthCookieName { return this.authCookieName; }\r\n public set AuthCookieName(value: AuthCookieName) { this.authCookieName = value; }\r\n\r\n public get UseOneServiceAuthEndpoints(): boolean { return this.useOneServiceAuthEndpoints; }\r\n public set UseOneServiceAuthEndpoints(value: boolean) { this.useOneServiceAuthEndpoints = value; }\r\n\r\n public get UseOneServiceAnonAuthEndpoints(): boolean { return this.useOneServiceAnonAuthEndpoints; }\r\n public set UseOneServiceAnonAuthEndpoints(value: boolean) { this.useOneServiceAnonAuthEndpoints = value; }\r\n\r\n public get UseAuthFetch(): boolean { return this.useAuthFetch; }\r\n public set UseAuthFetch(value: boolean) { this.useAuthFetch = value; }\r\n\r\n public get AccountInfoPromise(): Promise { return this.accountInfoPromise; }\r\n public set AccountInfoPromise(value: Promise) { this.accountInfoPromise = value; }\r\n\r\n public get ResolvedAccountInfo(): AccountInfo { return this.resolvedAccountInfo; }\r\n public set ResolvedAccountInfo(value: AccountInfo) { this.resolvedAccountInfo = value; }\r\n\r\n public get BuildVersion(): string { return this.buildVersion || \"\"; }\r\n\r\n public get ClarityEnabled(): boolean { return this.clarityEnabled; }\r\n public set ClarityEnabled(value: boolean) { this.clarityEnabled = value; }\r\n\r\n public get IsWinAADUser(): boolean { return this.isWinAADUser; }\r\n public set IsWinAADUser(value: boolean) { this.isWinAADUser = value; }\r\n\r\n public get RootTelemetryId(): number { return this.rootTelemetryId; }\r\n public set RootTelemetryId(value: number) { this.rootTelemetryId = value; }\r\n\r\n public get TrackInfo(): ITrackInfo { return this.trackInfo; }\r\n public set TrackInfo(value: ITrackInfo) { this.trackInfo = value; }\r\n\r\n public get UserId(): string { return this.getUserMuid() || this.userId; }\r\n public set UserId(value: string) { this.userId = value; }\r\n\r\n public get OneServiceApiKey(): string { return this.oneServiceApiKey; }\r\n public set OneServiceApiKey(value: string) { this.oneServiceApiKey = value; }\r\n\r\n /** True if query string has appropriate debug flag */\r\n public get IsDebug(): boolean { return this.isDebug; }\r\n\r\n /** True if query string has appropriate flag to show msnCreatorDashboard (msnDash=) */\r\n public get ShowMnsCreatorDashboard(): boolean { return this.showMnsCreatorDashboard; }\r\n\r\n /**\r\n * Gets the host to use when linking to content.\r\n */\r\n public get contentLinkHost(): string { return this.currentContentLinkHost; }\r\n\r\n public get IsCnDomain(): boolean { return this.isCnDomain; }\r\n\r\n /**\r\n * Getter for the base for the service url, endpoints/queries are appended for specific service calls.\r\n * This is the oneservice url used for personalized content.\r\n * Possible values are enumerated on OneServiceConfig.ts\r\n *\r\n * @type {URL}\r\n * @memberof AppEnvironment\r\n */\r\n public get ServiceUrlBase(): URL {\r\n const url = new URL(\"\", this.serviceUrlBase);\r\n\r\n if (process.env.WEBPACK_DEV_SERVER || new URLSearchParams(getLocationSearch()).get(\"env\") === \"dev\") {\r\n url.searchParams.set(\"env.service\", \"dev\");\r\n }\r\n\r\n const searchParam = new URLSearchParams(getLocationSearch()).get(\"env.service\");\r\n if (searchParam) {\r\n url.searchParams.set(\"env.service\", searchParam);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Base URL for the feed service\r\n */\r\n public get FeedServiceUrlBase(): URL {\r\n if (!this.feedServiceUrlBase) {\r\n return null;\r\n }\r\n\r\n const url = new URL(\"\", this.feedServiceUrlBase);\r\n\r\n if (process.env.WEBPACK_DEV_SERVER || new URLSearchParams(getLocationSearch()).get(\"env\") === \"dev\") {\r\n url.searchParams.set(\"env.service\", \"dev\");\r\n }\r\n\r\n const searchParam = new URLSearchParams(getLocationSearch()).get(\"env.service\");\r\n if (searchParam) {\r\n url.searchParams.set(\"env.service\", searchParam);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Base URL for the enterprise service\r\n */\r\n public get EnterpriseServiceUrlBase(): URL {\r\n if (!this.enterpriseServiceDomainUrl) {\r\n return;\r\n }\r\n\r\n const url = new URL(\"\", this.enterpriseServiceDomainUrl);\r\n\r\n if (process.env.WEBPACK_DEV_SERVER || new URLSearchParams(getLocationSearch()).get(\"env\") === \"dev\") {\r\n url.searchParams.set(\"env.service\", \"dev\");\r\n }\r\n\r\n const searchParam = new URLSearchParams(getLocationSearch()).get(\"env.service\");\r\n if (searchParam) {\r\n url.searchParams.set(\"env.service\", searchParam);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Returns true if audience mode is set to Enterprise and the user is logged into an AAD account, else false\r\n */\r\n public get isAadAccountUser(): boolean {\r\n return this.CurrentRequestTargetScope && this.CurrentRequestTargetScope.audienceMode === AudienceModeType.Enterprise &&\r\n this.ResolvedAccountInfo && this.ResolvedAccountInfo.account_type && this.ResolvedAccountInfo.account_type === AccountType.AAD;\r\n }\r\n\r\n public get IsFrePage(): boolean { return this.isFrePage; }\r\n\r\n /**\r\n * This is the switch to turn on/off indexed db operation used as a caching layer in config resolver (Resolver.ts)\r\n */\r\n public get DisableCachingConfigs(): boolean { return this.disableCachingConfigs; }\r\n\r\n /**\r\n * This is the switch to turn on/off config service operation\r\n */\r\n public get EnableConfigService(): boolean {\r\n const queryParamOverride = UrlUtility.getQueryParameterByName(\"enableConfigService\", getLocationSearch());\r\n\r\n if (queryParamOverride) {\r\n return queryParamOverride.toLocaleLowerCase() === \"true\";\r\n }\r\n return this.enableConfigService;\r\n }\r\n\r\n /**\r\n * This indicates whether we will use CMS PPE configs or not\r\n */\r\n public get EnableCMSPPEConfigs(): boolean { return headData && headData.EnableCMSPPEConfigs; }\r\n\r\n /**\r\n * Check whether multi config retrieval is supported.\r\n */\r\n public get IsMultiConfigRetrievalEnabled(): boolean { return this.isMultiConfigRetrievalEnabled; }\r\n\r\n /**\r\n * This is the switch to turn on/off content preview caching in core/cache/ContentPreview.ts\r\n */\r\n public get DisableContentPreviewCache(): boolean {\r\n return this.disableContentPreviewCache;\r\n }\r\n\r\n /**\r\n * Returns a flag indicating whether the one service feed fetch call should send activityID\r\n * in the request header or as a QSP in the URL (current behavior is via QSP).\r\n */\r\n public get SendFeedCallActivityIdInHeader(): boolean {\r\n return this.sendFeedCallActivityIdInHeader;\r\n }\r\n\r\n /**\r\n * This is the switch to turn off hydrating content preview cache from IndexedDB.\r\n * Default is false\r\n */\r\n public get DisableContentCacheIDBRead(): boolean {\r\n const queryParamOverride = UrlUtility.getQueryParameterByName(\"disableContentCacheIDBRead\", getLocationSearch());\r\n\r\n if (queryParamOverride) {\r\n return queryParamOverride === \"true\";\r\n }\r\n\r\n return this.disableContentCacheIDBRead;\r\n }\r\n\r\n /**\r\n * Get base url of Config Service.\r\n */\r\n public get ConfigServiceBaseUrl(): URL { return this.configServiceBaseUrl; }\r\n\r\n /**\r\n * This returns feature flags client settings stamped by PCS.\r\n */\r\n public get FeatureFlags(): any { return this.featureFlags; }\r\n\r\n /**\r\n * This returns config root url\r\n */\r\n public get ConfigRootUrl(): URL {\r\n if (!this.configRootUrl) {\r\n return null;\r\n }\r\n\r\n const url = new URL(\"\", this.configRootUrl);\r\n\r\n if (new URLSearchParams(getLocationSearch()).get(\"env\") === \"dev\") {\r\n url.searchParams.set(\"env.config\", \"dev\");\r\n }\r\n\r\n const searchParam = new URLSearchParams(getLocationSearch()).get(\"env.config\");\r\n if (searchParam) {\r\n url.searchParams.set(\"env.config\", searchParam);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Returns cache busting identifier from PCS.\r\n */\r\n public get CacheBustingIdentifier(): string { return this.cacheBustingIdentifier; }\r\n\r\n /**\r\n * True if this is git configs flight\r\n */\r\n public get IsGitConfigs(): boolean { return this.isGitConfigs; }\r\n\r\n /**\r\n * Returns the country code. For example \"br\"\r\n */\r\n public get CountryCode(): string { return this.countryCode; }\r\n public set CountryCode(value: string) { this.countryCode = value; }\r\n\r\n /// / FIXME: hyphen has a second 'h'\r\n /// / Bug 24228723: [Peregrine] ActivityIdLowerCaseNoHypens misspells \"Hyphen\"\r\n /**\r\n * Gets the Activity ID in lower case and without any hyphens. This helper method should be where parity with Prime is required.\r\n * Use telemetry's requestId instead for associating with current page client navigation\r\n */\r\n public get ActivityIdLowerCaseNoHypens(): string { return ((headData && headData.ClientSettings && headData.ClientSettings.aid) || \"\").toLowerCase(); }\r\n\r\n /**\r\n * Returns the latitude. For example \"42.361145\"\r\n */\r\n public get Latitude(): string { return this.latitude; }\r\n\r\n /**\r\n * Returns the longitude. For example \"-71.057083\"\r\n */\r\n public get Longitude(): string { return this.longitude; }\r\n\r\n /** For Config caching optimizations. */\r\n public get ConfigCacheProperties(): ConfigCacheProperties { return this.configCacheProperties; }\r\n\r\n /** Fetches local dev environment for client resolver */\r\n public get ConfigOrigins(): ConfigOrigins { return this.configOrigins; }\r\n\r\n /**\r\n * Indicates whether configs should be fetched from local repo based on conditions and overrides\r\n */\r\n private setConfigOrigin(): ConfigOrigins {\r\n // Default to production\r\n const configOrigins: ConfigOrigins = { feature: ConfigOrigin.Production, loc: ConfigOrigin.Production };\r\n\r\n if (__WEBPACK_LOCAL_GITCONFIGS_LOC__) {\r\n configOrigins.feature = ConfigOrigin.Local;\r\n configOrigins.loc = ConfigOrigin.Local;\r\n } else if (__WEBPACK_LOCAL_GITCONFIGS__) {\r\n configOrigins.feature = ConfigOrigin.Local;\r\n configOrigins.loc = ConfigOrigin.Production;\r\n }\r\n\r\n // Override based on conditions\r\n if (!this.IsGitConfigs || this.EnableConfigService) {\r\n configOrigins.feature = ConfigOrigin.Production;\r\n configOrigins.loc = ConfigOrigin.Production;\r\n }\r\n return configOrigins;\r\n }\r\n\r\n /**\r\n * Initialize the AppEnvironment singleton instance.\r\n * @param _serviceUrl Optional URL to initialize the ServiceUrlBase.\r\n * Render service can be deployed to the shared cluster or OneService cluster. Depending on where it is deployed, we can override the configServiceUrl or serviceDomainUrl to speed up the performance\r\n * @param _configServiceOverride When render service is deployed to the shared cluster. We want to make calls to the config service within the shared cluster region, instead of calling www.msn.com\r\n * @param _serviceDomainOverride When render service is deployed to OneService cluster, we want to make calls to the feed service within the OneService cluster region, instead of calling assets.msn.com\r\n */\r\n private constructor(_serviceUrl: URL, _configServiceOverride: string, _serviceDomainOverride: string) {\r\n this.initializeAppEnvironment(_serviceUrl, _configServiceOverride, _serviceDomainOverride);\r\n }\r\n\r\n /**\r\n * Returns singleton class instance.\r\n * @returns {AppEnvironment}\r\n */\r\n public static getInstance(serviceUrl: URL = null, configServiceOverride: string = null, serviceDomainOverride: string = null): AppEnvironment {\r\n return AppEnvironment._instance || (AppEnvironment._instance = new AppEnvironment(serviceUrl, configServiceOverride, serviceDomainOverride));\r\n }\r\n\r\n /**\r\n * Reinitialize the singleton class instance.\r\n * @param serviceUrl OneService service url to initialize to.\r\n * @param configServiceOverride url that is used to override config service url.\r\n * @param serviceDomainOverride url that is used to override service domain url.\r\n * This value is externally configured from SSR environment\r\n * @returns {AppEnvironment}\r\n */\r\n public static resetInstance(serviceUrl: URL = null, configServiceOverride: string = null, serviceDomainOverride: string = null): AppEnvironment {\r\n AppEnvironment._instance = new AppEnvironment(serviceUrl, configServiceOverride, serviceDomainOverride);\r\n appEnvironment = AppEnvironment._instance;\r\n return AppEnvironment._instance;\r\n }\r\n\r\n /**\r\n * Initializes App environment. This is normally only called by the constructor (singleton pattern)\r\n * It is made public so that it can be also called by test code.\r\n */\r\n public initializeAppEnvironment(_serviceUrl?: URL, configServiceOverride?: string, serviceDomainOverride?: string): void {\r\n\r\n let environmentFromHeadData: Environment = null;\r\n const clientSettings = headData && headData.ClientSettings;\r\n\r\n const locationHost: string = getLocationHostname();\r\n\r\n if (clientSettings) {\r\n // Use Cn domain if page locationHost ends with .cn or client settings has explicit flag to use Cn domain\r\n // useCnDomain is not sent by PCS.\r\n // useCnDomain is added by widget initializer, that is set by host page in Peregrine Widgets architecture.\r\n this.isCnDomain = locationHost.toLowerCase().endsWith(\".cn\") || clientSettings.useCnDomain || false;\r\n\r\n this.activityId = this.tryReformatGuid(clientSettings.aid);\r\n this.currentMarket = (headData.Locale || clientSettings.apps_locale) as Market;\r\n this.countryCode = clientSettings.geo_country;\r\n this.latitude = clientSettings.geo_lat;\r\n this.longitude = clientSettings.geo_long;\r\n this.configRootUrl = clientSettings.configRootUrl ? new URL(\"\", clientSettings.configRootUrl) : null;\r\n environmentFromHeadData = getEnvironmentFromString(clientSettings.pcsInfo && clientSettings.pcsInfo.env || \"prod\");\r\n\r\n this.setAccountInfoPromise();\r\n this.appType = clientSettings.apptype || \"\";\r\n this.authCookieName = this.getAuthCookieName();\r\n this.useOneServiceAuthEndpoints = false;\r\n this.useOneServiceAnonAuthEndpoints = false;\r\n this.useAuthFetch = false;\r\n\r\n this.featureFlags = clientSettings.featureFlags;\r\n\r\n this.disableCachingConfigs =\r\n this.featureFlags && this.featureFlags.disableCachingConfigs\r\n ? this.featureFlags.disableCachingConfigs === \"true\"\r\n : false;\r\n\r\n this.enableConfigService =\r\n this.featureFlags && this.featureFlags.enableConfigService\r\n ? this.featureFlags.enableConfigService === \"true\"\r\n : true;\r\n\r\n this.disableContentPreviewCache =\r\n this.featureFlags && this.featureFlags.disableContentPreviewCache\r\n ? this.featureFlags.disableContentPreviewCache === \"true\"\r\n : false;\r\n\r\n this.disableContentCacheIDBRead = this.featureFlags && this.featureFlags.disableContentCacheIDBRead\r\n ? this.featureFlags.disableContentCacheIDBRead === \"true\"\r\n : false;\r\n\r\n // Use feature flag as a switch to disable the feature (will need a PCS deployment)\r\n this.sendFeedCallActivityIdInHeader = this.featureFlags && this.featureFlags.disableActivityIdInHeader && this.featureFlags.disableActivityIdInHeader === \"true\"\r\n ? false\r\n : this.appType === AppType.Edge || this.appType === AppType.Hub;\r\n\r\n this.cacheBustingIdentifier = clientSettings.cbid;\r\n\r\n const runtimePropertyBagInfo: AppErrorPropertyBag = {};\r\n\r\n // Capture PCS version info\r\n if (clientSettings.pcsInfo && !getAppErrorsPropertyBag().pcsVersion) {\r\n runtimePropertyBagInfo.pcsVersion = clientSettings.pcsInfo.v;\r\n }\r\n\r\n // Capture app type info\r\n runtimePropertyBagInfo.appType = this.appType;\r\n\r\n const bundleInfo = clientSettings.bundleInfo;\r\n\r\n if (bundleInfo) {\r\n const { alias, configsHash, hash, locConfigsHash, v } = bundleInfo;\r\n this.buildVersion = v || \"\";\r\n\r\n // Capture build version info\r\n runtimePropertyBagInfo.build = this.buildVersion;\r\n\r\n const buildAlias = alias;\r\n if (buildAlias) {\r\n // Capture build alias info\r\n runtimePropertyBagInfo.buildAlias = buildAlias;\r\n }\r\n\r\n if (hash && configsHash && locConfigsHash) {\r\n this.configCacheProperties = {\r\n bundleHash: hash,\r\n configHash: configsHash,\r\n locHash: locConfigsHash\r\n };\r\n }\r\n }\r\n\r\n // Update base property bag defined in the each AppErrors module file\r\n updateAppErrorsPropertyBag(runtimePropertyBagInfo);\r\n updateResolverAppErrorsPropertyBag(runtimePropertyBagInfo);\r\n\r\n // Get configIndexDocId\r\n this.configIndexDocId = clientSettings.configIndexDocId;\r\n }\r\n\r\n const rootElement = canUseDOM() ? getDocumentElementById(rootElementId) : null;\r\n const locationHref = getLocationHref();\r\n const locationOrigin = getLocationOrigin();\r\n\r\n // env is read from\r\n // - query string param env, if present\r\n // - headData.ClientSettings.pcsInfo.env\r\n // - defaults to prod otherwise\r\n const envQSOverwrite = getEnvironmentFromString(UrlUtility.getQueryParameterByName(\"env\", locationHref));\r\n this.environment =\r\n envQSOverwrite\r\n || environmentFromHeadData\r\n || Environment.prod;\r\n\r\n const servicesEndpoints = clientSettings && clientSettings.servicesEndpoints;\r\n const pcsProvidedDomainUrl = servicesEndpoints && servicesEndpoints.feedService && servicesEndpoints.feedService.domain || locationOrigin;\r\n\r\n if (canUseDOM()) {\r\n // Get from headdata if possible.\r\n // Else using locationOrigin is okay (current MMX scenario) since it'd use .cn version for China.\r\n // todo: pass this to SW to override regex in service-worker/src/swConstants/DefaultRoutes.enum.ts\r\n this.serviceDomainUrl = pcsProvidedDomainUrl;\r\n } else {\r\n this.serviceDomainUrl = serviceDomainOverride || pcsProvidedDomainUrl;\r\n }\r\n\r\n this.staticDomain = new URL(pcsProvidedDomainUrl).host;\r\n this.enterpriseServiceDomainUrl = servicesEndpoints && servicesEndpoints.enterpriseFeedService && servicesEndpoints.enterpriseFeedService.domain;\r\n\r\n // Get CRS endpoint version. Example: v2 or v3 and domain given by PCS\r\n this.crsVersion = servicesEndpoints && servicesEndpoints.crs && servicesEndpoints.crs.v;\r\n this.crsDomain = servicesEndpoints && servicesEndpoints.crs && servicesEndpoints.crs.domain;\r\n\r\n this.serviceUrlBase = _serviceUrl || (rootElement && rootElement.getAttribute(serviceUrl) && new URL(\"\", rootElement.getAttribute(serviceUrl))) || new URL(\"/service/\", this.serviceDomainUrl);\r\n this.feedServiceUrlBase = this.serviceDomainUrl ? new URL(\"/service/\", this.serviceDomainUrl) : undefined;\r\n\r\n // Get the hostPage from the request url\r\n this.hostPage = HostPage.getHostPageFromUrl(locationHref);\r\n\r\n // Determine if the page is running as an FRE page\r\n this.isFrePage = (UrlUtility.getQueryParameterByName(\"fre\", locationHref) === \"1\");\r\n\r\n this.userId = this.getUserMuid();\r\n\r\n // Get attributes from the head (full page Peregrine experience) or from the spa \"root\" element (PrimeHybrid case)\r\n // TODO, determine where in the element attributes these values should be set\r\n this.rootTelemetryId = rootElement ? Number(rootElement.getAttribute(telemetryId)) : 0;\r\n const trackPageProd = rootElement && rootElement.getAttribute(trackPageProduct);\r\n const trackPageTypeVal = rootElement && rootElement.getAttribute(trackPageType);\r\n this.trackInfo = { sitePage: { page_product: trackPageProd, page_type: trackPageTypeVal } };\r\n\r\n this.currentContentLinkHost = this.createContentLinkHost();\r\n\r\n this.setTargetScope();\r\n\r\n // Before calling this function make sure that\r\n // 1) Target scope is set and pageExperiments are available. No flights is fine.\r\n // 2) ServiceEndPoints are set and crsVersion is available.\r\n // 3) configIndexDocId is set.\r\n // 4) appType is set correctly.\r\n this.isGitConfigs = this.useGitConfigs();\r\n\r\n // Before calling this function make sure that\r\n // 1) Target scope is set and pageExperiments are available. No flights is fine.\r\n // 2) configIndexDocId is set.\r\n // 3) appType is set correctly.\r\n // 4) locationHref is set\r\n // 5) isGitConfigs is set\r\n this.addHubWindowsFlight(locationHref);\r\n this.configOrigins = this.setConfigOrigin();\r\n\r\n // Temporarily hardcode endpoint for MMX flight, when flight is off, we want to use hardcoded value.\r\n // After the flight, we hope to start using the regular logic for MMX\r\n if (this.appType === AppType.MMX && headData && !headData.IsMmxWwwContentRequest) {\r\n const mmxExperimentContentHost = getLocationHostname().endsWith(\".cn\") ? \"https://assets.msn.cn\" : \"https://assets.msn.com\";\r\n this.contentServiceUrlBase = new URL(\"/content/\", mmxExperimentContentHost);\r\n } else {\r\n // IsMmxWwwContentRequest still comes here\r\n this.contentServiceUrlBase = this.serviceDomainUrl ? new URL(\"/content/\", this.serviceDomainUrl) : undefined;\r\n }\r\n\r\n this.isMultiConfigRetrievalEnabled = this.useMultiConfigsRetrieval();\r\n\r\n // Make sure that this.isGitConfigs is set before calling getConfigServiceBaseUrl.\r\n // Make sure that isCnDomain is set before calling this function\r\n const baseUrl = this.getConfigServiceBaseUrl(this.isMultiConfigRetrievalEnabled, configServiceOverride);\r\n\r\n this.configServiceBaseUrl = baseUrl ? new URL(\"\", baseUrl) : null;\r\n\r\n this.environmentConfigUrl = this.serviceDomainUrl ? new URL(\"/config/v1/\", this.serviceDomainUrl) : undefined;\r\n\r\n this.isDebug = ((UrlUtility.getQueryParameterByName(\"debug\", locationHref) || \"\").toLowerCase() in { 1: 1, true: 1 })\r\n || (UrlUtility.getQueryParameterByName(\"item\", locationHref) || \"\").toLowerCase().indexOf(\"/debug\") > 0\r\n || locationHost.includes(\"localhost\");\r\n\r\n this.showMnsCreatorDashboard = UrlUtility.getQueryParameterByName(\"mnsDash\", locationHref) != null;\r\n\r\n this.oneServiceApiKey = this.getOneServiceApiKey();\r\n\r\n this.enableFiveColLayout = false;\r\n }\r\n\r\n /**\r\n * Get the ApiKey that should be used by the current AppType\r\n * Please work OneService (aka: IDX) before updating it as this can break features\r\n * even if the call succeeds.\r\n */\r\n private getOneServiceApiKey(): string {\r\n let apiKey;\r\n switch (this.appType) {\r\n case AppType.WindowsShell:\r\n apiKey = \"pWw5OmQehOA0XNfgcgrTrwEJZJJJzE83ovtTQx6JRG\";\r\n break;\r\n case AppType.BingHomepage:\r\n apiKey = \"QMmdky7jrTlM4mWJmMYQTi71lp678KyZJBKHCAyKCg\";\r\n break;\r\n case AppType.SharedWidgets:\r\n apiKey = \"hFWgtnoLG1BXruRRhEVJo5ACP8414XUG0Ric6JbyND\";\r\n break;\r\n case AppType.NewsAndInterests:\r\n case AppType.WindowsNewsPlus:\r\n apiKey = \"AEbyVYqTQAPvg4lWwMSFHaLkDzl3weRKKIDDInLQUj\";\r\n break;\r\n default:\r\n apiKey = \"0QfOX3Vn51YCzitbLaRkTTBadtWpgTN8NZLW0C1SEM\";\r\n }\r\n return apiKey;\r\n }\r\n\r\n /**\r\n * Get the UserMuid from the muid cookie\r\n */\r\n private getUserMuid(): string {\r\n let muid: string;\r\n const muidCookie: string = getMuidCookie();\r\n if (isString(muidCookie)) {\r\n muid = \"m-\" + muidCookie;\r\n }\r\n return muid;\r\n }\r\n\r\n /**\r\n * Get config service base url\r\n * @param isMultiConfigRetrievalEnabled if multiple config retrieval is supported.\r\n * @param configServiceOverride url that is used to override config service url. This value is externally configured from SSR environment.\r\n * @returns {string} - config service base url.\r\n */\r\n private getConfigServiceBaseUrl(isMultiConfigRetrievalEnabled = true, configServiceOverride = null): string {\r\n const relativePath = this.isGitConfigs\r\n ? \"/resolver/api/resolve/v3/config/\"\r\n : `/resolver/api/resolve/${isMultiConfigRetrievalEnabled ? \"v2/\" : \"\"}configindex/`;\r\n\r\n // When doing server side rendering the ClusterRegionUrl env variable should be set, use this to avoid calls to CRS going outside of the cluster.\r\n if (configServiceOverride) {\r\n return configServiceOverride + relativePath;\r\n }\r\n\r\n // int and localhost to use int.msn.com or int.msn.cn for CRS.\r\n if (process && process.env && process.env.WEBPACK_DEV_SERVER) {\r\n return (`https://int.msn.${ this.IsCnDomain ? \"cn\": \"com\"}`) + relativePath;\r\n }\r\n\r\n // For Widgets external partners, use CRS domain given by PCS => client settings => servicesEndpoints => crs => domain\r\n // Use default as www.msn.com or www.msn.cn when servicesEndpoints.crs.domain doesn't have it.\r\n if (canUseDOM() && (this.renderWidgets() || this.appType === AppType.SharedWidgets || this.appType === AppType.BingHomepage)) {\r\n return (this.crsDomain || `https://www.msn.${ this.IsCnDomain ? \"cn\": \"com\"}`) + relativePath;\r\n }\r\n\r\n return getLocationOrigin() ? getLocationOrigin() + relativePath : null;\r\n }\r\n\r\n /**\r\n * Function checks if ConfigService should return multiple configs\r\n * @returns true if supported else false.\r\n */\r\n private useMultiConfigsRetrieval(): boolean {\r\n const urlQuery = getLocationSearch();\r\n if (urlQuery) {\r\n const param = UrlUtility.getQueryParameterByName(\"isMultiConfigRetrievalEnabled\", urlQuery);\r\n if (param) {\r\n return param.toLocaleLowerCase() === \"true\";\r\n }\r\n }\r\n\r\n // PCS flag to turn on/off multi config retrieval.\r\n if (this.featureFlags\r\n && this.featureFlags.isMultiConfigRetrievalEnabled) {\r\n return this.featureFlags.isMultiConfigRetrievalEnabled === \"true\";\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Function checks if Git configs is enabled\r\n * @returns true if supported else false.\r\n */\r\n private useGitConfigs(): boolean {\r\n const urlQuery = getLocationSearch();\r\n if (urlQuery) {\r\n const param = UrlUtility.getQueryParameterByName(\"isGitConfig\", urlQuery);\r\n if (param) {\r\n return param.toLocaleLowerCase() === \"true\";\r\n }\r\n }\r\n\r\n const flights = this.currentRequestTargetScope && this.currentRequestTargetScope.pageExperiments;\r\n return shouldUseGitConfigs(this.crsVersion, flights, this.configIndexDocId, this.appType);\r\n }\r\n\r\n /**\r\n * Function checks if we are rendering individual experiences (widgets)\r\n * @returns true if QS is set else false.\r\n */\r\n private renderWidgets(): boolean {\r\n const urlQuery = getLocationSearch();\r\n const renderWidgetQS = \"renderWidget\";\r\n if (urlQuery) {\r\n const param = UrlUtility.getQueryParameterByName(renderWidgetQS, urlQuery);\r\n if (param) {\r\n return param.toLocaleLowerCase() === \"true\";\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Get the auth cookie name based on the app type of the page\r\n * @returns {AuthCookieName} - the name of the auth cookie to use\r\n */\r\n private getAuthCookieName(): AuthCookieName {\r\n const clientSettings = headData && headData.ClientSettings;\r\n const appType: AppType = (clientSettings.apptype || \"\") as AppType;\r\n let authCookieName: AuthCookieName;\r\n switch (appType) {\r\n case AppType.Windows:\r\n authCookieName = headData.ClientSettings.pagetype === PageType.Windows ? AuthCookieName.Anon : AuthCookieName.AppAnon;\r\n break;\r\n case AppType.FirstParty:\r\n case AppType.Hub:\r\n case AppType.MicrosoftNews:\r\n case AppType.Views:\r\n case AppType.Community:\r\n case AppType.Weather:\r\n case AppType.Finance:\r\n case AppType.HomePage:\r\n case AppType.Hybrid:\r\n authCookieName = AuthCookieName.Anon;\r\n break;\r\n case AppType.Edge:\r\n case AppType.EdgeChromium:\r\n case AppType.MMX:\r\n case AppType.Office:\r\n default:\r\n authCookieName = AuthCookieName.AppAnon;\r\n }\r\n\r\n return authCookieName;\r\n }\r\n\r\n /**\r\n * Sets the AccountInfoPromise for the current user.\r\n * If unable to await, ResolvedAccountInfo is also set when the promise is resolved.\r\n */\r\n private setAccountInfoPromise(): void {\r\n this.ResolvedAccountInfo = null;\r\n this.AccountInfoPromise = new Promise((resolve) => {\r\n if (!canUseDOM() || !window.chrome || !window.chrome.authPrivate || !window.chrome.authPrivate.getPrimaryAccountInfo) {\r\n return resolve(null);\r\n }\r\n\r\n const markerName = \"Auth.GetPrimaryAccountInfo\";\r\n const startTime = Math.round(performance.now());\r\n\r\n window.chrome.authPrivate.getPrimaryAccountInfo((accountInfo) => {\r\n const endTime = Math.round(performance.now());\r\n const pageTimings = getPageTimings();\r\n pageTimings[markerName] = endTime - startTime;\r\n\r\n this.ResolvedAccountInfo = accountInfo;\r\n return resolve(accountInfo);\r\n });\r\n });\r\n\r\n // Start the promise asynchronously.\r\n this.AccountInfoPromise;\r\n }\r\n\r\n /**\r\n * Determines the content link host to use.\r\n * @returns The content link host.\r\n */\r\n private createContentLinkHost(): string {\r\n const topLevelDomain = this.currentMarket === Market.ZHCN ? \"cn\" : \"com\";\r\n return \"www.msn.\" + topLevelDomain;\r\n }\r\n\r\n /**\r\n * Reformats the given guid without dashes to a guid string with dashes.\r\n * @param {string} guid - The guid without dashes.\r\n * @returns {string} - The reformatted GUI with dashes.\r\n */\r\n private tryReformatGuid(guid: string): string {\r\n if (guid && guid.length === 32) {\r\n // use a regex to extract the specific substrings to reformat the guid\r\n const matches = guid.match(/(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})/i);\r\n if (matches) {\r\n // join all the captured groups from 1-5 to format the final guid string\r\n guid = matches.slice(1).join(\"-\");\r\n }\r\n }\r\n\r\n return guid;\r\n }\r\n\r\n /**\r\n * Sets target scope for current request.\r\n */\r\n private setTargetScope(): void {\r\n if (!headData || !headData.ClientSettings) {\r\n return;\r\n }\r\n // If user is signed in and \"child\" Cookie exists - set Kids audience mode, otherwise use PCS provided Audience mode.\r\n let audienceMode: AudienceModeType;\r\n if (getCookie(appAnonCookieExistsCookieName) && getCookie(childCookieName)) {\r\n audienceMode = AudienceModeType.Kids;\r\n } else if (headData.ClientSettings.audienceMode === AudienceModeType.Enterprise && this.getEnterpriseOverride()) {\r\n audienceMode = AudienceModeType.Adult;\r\n } else {\r\n audienceMode = headData.ClientSettings.audienceMode || AudienceModeType.Adult;\r\n }\r\n\r\n const { browser, deviceFormFactor, domain, locale, ocid, os, pagetype } = headData.ClientSettings;\r\n\r\n this.currentRequestTargetScope = {\r\n audienceMode: audienceMode,\r\n browser: browser,\r\n deviceFormFactor: deviceFormFactor,\r\n domain: domain,\r\n locale: locale,\r\n ocid,\r\n os: os,\r\n platform: PlatformType.Web,\r\n pageType: pagetype\r\n };\r\n\r\n // if locale is not defined in client settings, try reading it from headData for backward compatibility\r\n if (!this.currentRequestTargetScope.locale && Utility.stringHasData(headData.Locale)) {\r\n const locale = headData.Locale.split(\"-\");\r\n if (locale.length > 1) {\r\n this.currentRequestTargetScope.locale = {\r\n language: locale[0],\r\n // Some spartan locale are in format \"ha-latn-ng\". Here the market is \"ng\" and language is \"ha\"\r\n market: locale[locale.length - 1]\r\n };\r\n }\r\n }\r\n\r\n if (Utility.stringHasData(headData.CurrentFlights)) {\r\n this.currentRequestTargetScope.pageExperiments = headData.CurrentFlights.split(\",\");\r\n }\r\n\r\n this.addWpoFlights();\r\n }\r\n\r\n /**\r\n * Get WpoModel from WpoData that we got from local storage given the specific WPO\r\n * key\r\n */\r\n private getWpoModel(wpoData: string): WpoModel {\r\n let model: WpoModel;\r\n if (wpoData != null) {\r\n model = tryParseJson(wpoData);\r\n if (model != null) {\r\n model;\r\n }\r\n }\r\n return model;\r\n }\r\n\r\n /**\r\n * Adds WPO flights to the current request target scope pageExperiments.\r\n */\r\n private addWpoFlights(): void {\r\n if (!this.FeatureFlags || !this.FeatureFlags.wpoEnabled) {\r\n return;\r\n }\r\n const WPOModel = this.getWpoModel(this.wpoData);\r\n const flightsCached: string[] = getWpoFlights(WPOModel);\r\n\r\n if (!flightsCached) {\r\n return;\r\n }\r\n\r\n const lowerCaseFlightsCached = flightsCached.map(flight => flight.toLowerCase());\r\n const currentPageExperiments = this.currentRequestTargetScope.pageExperiments || [];\r\n this.currentRequestTargetScope.pageExperiments = currentPageExperiments.concat(lowerCaseFlightsCached);\r\n }\r\n\r\n /**\r\n * Adds WPO flights to the current request target scope pageExperiments.\r\n */\r\n private addHubWindowsFlight(locationHref: string): void {\r\n if (this.isGitConfigs && this.appType === AppType.Hub && isWindowsScenario(locationHref)) {\r\n const currentPageExperiments = this.currentRequestTargetScope.pageExperiments || [];\r\n this.currentRequestTargetScope.pageExperiments = currentPageExperiments.concat(\"prg-iswin-hub\");\r\n }\r\n }\r\n\r\n private getEnterpriseOverride(): boolean {\r\n return !!getLocalStorage().getObject(EnterpriseToConsumerOverrideKey);\r\n }\r\n}\r\n\r\nexport const getAppEnvironment = AppEnvironment.getInstance;\r\n\r\n// appEnvironment can be reinitialized for server side rendering through resetAppEnvironment.\r\nexport let appEnvironment = AppEnvironment.getInstance();\r\n\r\nexport const resetAppEnvironment = AppEnvironment.resetInstance;","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * locationHref of page\r\n */\r\nexport const locationHref = (typeof (window) !== \"undefined\" ? window.location.href : \"\");\r\n\r\n/**\r\n * Render-cache expiration time in ms\r\n * 86400000 = 24 hours in milliseconds\r\n */\r\nexport const defaultExpirationTimeMs = 86400000;\r\n\r\n/**\r\n * Render-cache force expiration time in ms\r\n * 129600000 = 36 hours in milliseconds\r\n */\r\nexport const defaultForceExpirationTimeMs = 129600000;\r\n\r\n/**\r\n * localStorage key prefix for render cache expiration timestamp\r\n * Stores the sliding window expiration\r\n */\r\nexport const expirationPrefix = \"timestamp_\";\r\n\r\n/**\r\n * Force timestamp prefix for render cache values\r\n * Stores the absolute window expiration\r\n */\r\nexport const forceTimestampPrefix = \"force_timestamp_\";\r\n\r\n/**\r\n * Jss map suffix for render cache values\r\n * Stores the jss class list map\r\n */\r\nexport const jssMapSuffix = \"_jssMap\";\r\n\r\n/**\r\n * Prefix for render cache keys\r\n * Stores the collection of all render cache keys\r\n */\r\nexport const keysPrefix = \"keys_\";\r\n\r\n/**\r\n * Prefix for render cache qsp to remove and normlize the url\r\n */\r\nexport const normalizedUrlConfigkey = \"rcqsp\";\r\n\r\n/**\r\n * localStorage key prefix for render cache object\r\n * Stores the render cache snapshot\r\n */\r\nexport const storagePrefix = \"lastKnown_\";\r\n\r\n/**\r\n * River Render Cache ClassName\r\n */\r\nexport const riverRcClassName = \"river-rc\";\r\n\r\n/**\r\n * localStorage key for JSS Map object\r\n */\r\nexport const jssMapKey = `${storagePrefix}${locationHref}_jssmap`;\r\n\r\n/**\r\n * localStorage key for render cache object\r\n */\r\nexport const renderCacheKey = `${storagePrefix}${locationHref}`;\r\n\r\n/**\r\n * localStorage key for render cache expiration timestamp\r\n */\r\nexport const renderCacheExpirationKey = `${expirationPrefix}${locationHref}`;\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Platform type\r\n */\r\nexport enum PlatformType {\r\n App = \"app\",\r\n Web = \"web\"\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { ITargetScope } from \"@msnews/config-data-types\";\r\nimport { WpoModel } from \".\";\r\n\r\n/**\r\n * Get storage cache key used to store WPO service response.\r\n * @param {string} appType - The appType value.\r\n * @param {ITargetScope} targetScope - The current page request target scope.\r\n * @returns string - Cache key string.\r\n */\r\nexport function getWpoStorageCacheKey(appType: string, targetScope: ITargetScope): string {\r\n const { audienceMode = \"\", locale = {}, pageType = \"\" } = targetScope || {};\r\n const { language, market } = locale;\r\n\r\n return `wpo_data_ ${audienceMode}_${language}_${market}_${pageType}_${appType}`;\r\n}\r\n\r\n/**\r\n * Extracts the WPO flight ids from the WPOModel object.\r\n * @param {WpoModel} wpoData - The WPOModel object.\r\n * @returns string[] - Array of WPO recommended flight ids\r\n */\r\nexport function getWpoFlights(wpoData: WpoModel): string[] | null {\r\n if (!wpoData || !wpoData.treatments) {\r\n return null;\r\n }\r\n\r\n return wpoData.treatments.filter(item => item.id).map(item => item.id);\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { KeyValueArray, KeyValuePair, Utility } from \"./Utility\";\r\nimport { findIndex, isArray, isEmpty, isString, trimEnd, trimStart } from \"lodash-es\";\r\n\r\nimport { StringMap } from \"../types\";\r\nimport { getLocationOrigin } from \"@msnews/isomorphic-util\";\r\n\r\nexport namespace UrlUtility {\r\n\r\n /**\r\n * Characters that, if present on a url, will make prime routing misbehave\r\n *\r\n * These are the characters we know cause problems:\r\n * - spaces\r\n * - slashes\r\n * - punctuation: !?.:\r\n * - ampersands\r\n *\r\n * As we don't know all the offending characters, we are just removing every character that is not alphanumeric\r\n */\r\n const primeForbiddenCharacters = /[^A-Za-z0-9]+/g;\r\n\r\n /**\r\n * Parse parameters from the given URL\r\n * @param {string} url - the URL to parse for parameters\r\n * @param {boolean} decodeComponents - flag to indicate whether the query param key and value should be URL decoded\r\n * @returns {KeyValueArray} - the parsed query key/value collection\r\n */\r\n export function getParamsFromUrl(url: string, decodeComponents = false): KeyValueArray {\r\n if (!isString(url)) {\r\n return null;\r\n }\r\n\r\n const queryString: string = (url || \"\").split(\"?\")[1];\r\n return getParams(queryString, decodeComponents);\r\n }\r\n\r\n /**\r\n * Decode the given URL encoded string that may contain plus signs\r\n * @param {string} val - The value to decode.\r\n * @returns {string} - the decoded value\r\n */\r\n function decodeURIComponentWithPlusSign(val: string): string {\r\n val = val.replace(/\\+/g, \" \");\r\n val = decodeURIComponent(val);\r\n return val;\r\n }\r\n\r\n /**\r\n * Encode uri components in a way that won't break prime routing system\r\n * @param uriComponent the uriComponent to be encoded\r\n */\r\n export function encodeURIComponentForPrime(uriComponent: string): string {\r\n return encodeURIComponent(uriComponent.replace(primeForbiddenCharacters, \"-\"));\r\n }\r\n\r\n /**\r\n * Parse parameters from the given query string\r\n * @param {string} queryString - the query string to parse for parameters\r\n * @param {boolean} decodeComponents - flag to indicate whether the query param key and value should be URL decoded\r\n * @returns {KeyValueArray} - the parsed query key/value collection\r\n */\r\n export function getParams(queryString: string, decodeComponents = false): KeyValueArray {\r\n const params: KeyValueArray = [];\r\n // Remove the leading ? if it is present\r\n if (queryString && queryString.startsWith(\"?\")) {\r\n queryString = queryString.substring(1);\r\n }\r\n\r\n if (queryString) {\r\n // remove hash part.\r\n queryString = queryString.split(\"#\")[0];\r\n const queryArray = queryString.split(\"&\");\r\n for (let ndx = 0; ndx < queryArray.length; ndx++) {\r\n const parts = queryArray[ndx].split(\"=\");\r\n let queryKey = parts[0];\r\n let queryValue = parts[1];\r\n\r\n if (decodeComponents) {\r\n queryKey = decodeURIComponentWithPlusSign(queryKey);\r\n if (queryValue) {\r\n queryValue = decodeURIComponentWithPlusSign(queryValue);\r\n }\r\n }\r\n\r\n // Don't allow for duplicate query string parameter keys. Take the last one\r\n const newParam: KeyValuePair = { key: queryKey, value: queryValue };\r\n const existingParam = findIndex(params, (entry) => entry.key === newParam.key);\r\n if (existingParam === -1) {\r\n params.push(newParam);\r\n } else {\r\n params[existingParam] = newParam;\r\n }\r\n }\r\n }\r\n return params;\r\n }\r\n\r\n /**\r\n * Parse specific parameters from the given query string, allowing for multiple item=key:value.\r\n * This function ONLY parses qsp item=[key]:[value]\r\n * Note: Use first given rule for duplicate key!\r\n * @param {string} queryString - the query string to parse for parameters\r\n * @param {boolean} decodeComponents - flag to indicate whether the query param key and value should be URL decoded\r\n * @returns {KeyValueArray} - the parsed query key/value collection\r\n */\r\n export function getParamsWithItems(queryString: string, decodeComponents = false): KeyValueArray {\r\n const params: KeyValueArray = [];\r\n\r\n const inputKey = \"item\";\r\n\r\n if (queryString) {\r\n // Remove the leading ? if it is present\r\n if (queryString.startsWith(\"?\")) {\r\n queryString = queryString.substring(1);\r\n }\r\n\r\n // split on the hashes.\r\n queryString = queryString.split(\"#\")[0];\r\n const queryArray = queryString.split(\"&\");\r\n for (let ndx = 0; ndx < queryArray.length; ndx++) {\r\n const parts = queryArray[ndx].split(\"=\");\r\n let queryKey = parts[0];\r\n let queryValue = parts[1];\r\n\r\n if (decodeComponents) {\r\n queryKey = decodeURIComponentWithPlusSign(queryKey);\r\n if (queryValue) {\r\n queryValue = decodeURIComponentWithPlusSign(queryValue);\r\n }\r\n }\r\n\r\n // If the query key is inputKey (default: \"item\"), and the query values is key:value, then convert the\r\n // value into the actual key/value\r\n if (queryKey.toLowerCase() === inputKey) {\r\n const queryItems = queryValue.split(\":\");\r\n // Ignore value not in \"key:value\" format\r\n if (queryItems.length === 2) {\r\n queryKey = queryItems[0];\r\n queryValue = queryItems[1];\r\n\r\n // Don't allow for duplicate query string parameter keys. Use first given rule for duplicate key!\r\n const newParam: KeyValuePair = { key: queryKey, value: queryValue };\r\n const existingParam = params.findIndex((entry) => entry.key === newParam.key);\r\n if (existingParam === -1) {\r\n params.push(newParam);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return params;\r\n }\r\n\r\n /**\r\n * Cache URI to paramsObj mapping\r\n */\r\n const hrefParamsObj: any = {};\r\n\r\n /**\r\n * Utility method to extract query string param in url.\r\n *\r\n * @export\r\n * @param {string} name - query param name\r\n * @param {string} href - URL\r\n * @returns {string} - query param value\r\n */\r\n export function getQueryParameterByName(name: string, href: string): string {\r\n if (!hrefParamsObj[href]) {\r\n hrefParamsObj[href] = getParamsObj(href);\r\n }\r\n\r\n const paramsObj = hrefParamsObj[href];\r\n const value = paramsObj[name];\r\n return (value !== undefined)\r\n ? value\r\n : null;\r\n }\r\n\r\n /**\r\n * Check if given url string is a valid url.\r\n * Returns true when url string is a valid url, otherwise false.\r\n *\r\n * @export\r\n * @param url {string} - Url string value to check\r\n * @param validateScheme {boolean} - Should scheme validation be forced\r\n * @return {boolean}\r\n */\r\n export function isValidUrl(url: string, validateScheme: boolean): boolean {\r\n return (isString(url) &&\r\n (url.length > 0) &&\r\n (!validateScheme ||\r\n validateScheme && url.indexOf(\"http\") === 0));\r\n }\r\n\r\n /**\r\n * Converts a keyValueArray into a set of query string parameters\r\n *\r\n * @export\r\n * @param {any} - params to be converted\r\n * @return {string}\r\n */\r\n export function keyValueArrayToQueryString(params: KeyValueArray): string {\r\n // Validate we have a nonempty array\r\n if (!isArray(params) || isEmpty(params)) {\r\n return \"\";\r\n }\r\n\r\n // Filter for valid keyValue entries, and then map them into key==value strings\r\n // joined with an &\r\n const queryString: string = params.filter(kv =>\r\n Utility.isKeyValuePair(\r\n kv,\r\n (key) => typeof (key) === \"string\",\r\n (value) => typeof (value) === \"string\"))\r\n .map(kv => kv.key + \"=\" + kv.value)\r\n .join(\"&\");\r\n\r\n return queryString;\r\n }\r\n\r\n /**\r\n * Helper method to parse the given URLs query parameters to a lookup dictionary\r\n * @param url - the URL string with the query params to parse\r\n * @returns The {StringMap} containing the key/value pairs, or empty object.\r\n */\r\n export function getParamsObj(url: string): StringMap {\r\n const paramsObj = {};\r\n const paramArray = getParamsFromUrl(url, true);\r\n if (paramArray && paramArray.length) {\r\n paramArray.forEach(keyValuePair =>\r\n paramsObj[keyValuePair.key] = keyValuePair.value);\r\n }\r\n return paramsObj;\r\n }\r\n\r\n /**\r\n * For the given `url`, it appends the `subPath` to it.\r\n * It takes propers care to forward slashes characters\r\n * at the end of `url` and at the start of `subPath` parameters\r\n * @param url a valid url\r\n * @param subPath the path which is appended to `url`\r\n * @returns an URL object which is the `url` appended by `subPath`\r\n */\r\n export function joinSubpathToURL(url: URL, subPath: string): URL {\r\n const href = url.href;\r\n const trimmedEndSlashFromHref = trimEnd(href, \"/\");\r\n const trimmedStartSlashFromSubpath = trimStart(subPath, \"/\");\r\n return new URL(`${trimmedEndSlashFromHref}/${trimmedStartSlashFromSubpath}`);\r\n }\r\n\r\n /**\r\n * Updates a search parameter in the given url to map to a new value\r\n * Does not modify the url if the given search param doesn't exist\r\n * @param url the url to update\r\n * @param key the name of the search param to be updated\r\n * @param value the new value for the given search param\r\n * @returns {URL} the updated URL\r\n */\r\n export function updateSearchParam(url: URL, key: string, value: string): URL {\r\n // Note that the searchParams data member may not be compatible with older browser versions\r\n // see https://caniuse.com/#search=searchparams\r\n if (url && url.searchParams && url.searchParams.get(key)) {\r\n url.searchParams.set(key, value);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Appends a search parameter to the given url\r\n * @param url the url to modify\r\n * @param key the name of the search param to be appended\r\n * @param value the new value for the given search param\r\n * @returns {URL} the modified URL\r\n */\r\n export function appendSearchParam(url: URL, key: string, value: string, fallback?: boolean): URL {\r\n if (url) {\r\n if (url.searchParams || fallback) {\r\n url.searchParams.append(key, value);\r\n } else {\r\n // TODO Bug 22390312: [Peregrine] UrlUtility appendSearchParam needs more robust polyfill\r\n url = new URL(url.href + (url.search.indexOf(\"?\") >= 0 ? \"&\" : \"?\") + key + \"=\" + value);\r\n }\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Returns an absolute URL if a relative on is passed in, or returns the passed in URL if already absolute\r\n * @param partialUrl The relative or absolute URL\r\n * @returns {string} the absolute URL\r\n */\r\n export function getAbsoluteUrl(partialUrl: string): string {\r\n if (partialUrl.indexOf(\"://\") > 0 || partialUrl.indexOf(\"//\") === 0) {\r\n return partialUrl;\r\n } else {\r\n return getLocationOrigin() + partialUrl;\r\n }\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Peregrine flights with prefix\r\n */\r\nexport const PeregrineFlightPrefix = \"prg-\";\r\n\r\n/**\r\n * OneService flights with prefix\r\n */\r\nexport const OneServiceFlightPrefix = \"1s-\";\r\n\r\n/**\r\n * Config Service v3 endpoint\r\n */\r\nexport const CrsV3Endpoint = \"v3\";\r\n\r\n/**\r\n * Git configs indexedDB caching flight\r\n */\r\nexport const GitConfigsIndexedDbTreatment = \"prg-gitconfigs-t\";","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { AppType, CrsV3Endpoint, OneServiceFlightPrefix, PeregrineFlightPrefix } from \"@msnews/experiences-constants\";\r\n\r\n/**\r\n * Specific flights for app types to allow Git configs\r\n */\r\nexport const appTypeExpectedFlightMap: Map = new Map([\r\n [AppType.Edge, \"prg-gitcfgs-edge\"],\r\n [AppType.Finance, \"prg-gitcfgs-fi\"],\r\n [AppType.SuperApp, \"prg-gitcfgs-t\"],\r\n [AppType.Traffic, \"prg-gitcfgs-traf\"],\r\n [AppType.Weather, \"prg-gitcfgs-wea\"]\r\n]);\r\n\r\n/**\r\n * Goes through the array of flights that is given and will filter out any flight that doesn't start with\r\n * prg-. It then sorts them and returns a new string[].\r\n * @param flights Array of flights that we will filter through and return only the peregrine\r\n * @returns specific flights\r\n */\r\nexport function getPeregrineFlights(flights: string[]): string[] {\r\n if (!flights || flights.length === 0) {\r\n return flights;\r\n }\r\n\r\n const cleanedUpFlights = [];\r\n flights.forEach((item) => {\r\n const lowercaseItem = item.toLocaleLowerCase().trim();\r\n // Including specific 1s- prefix to bypass flightID regards OneService's bing.news backfill. Will fill bug to track/remove this.\r\n if (lowercaseItem.startsWith(PeregrineFlightPrefix) || lowercaseItem.startsWith(OneServiceFlightPrefix)) {\r\n cleanedUpFlights.push(lowercaseItem);\r\n }\r\n });\r\n\r\n return cleanedUpFlights.sort();\r\n}\r\n\r\n/**\r\n * Check if Git configs should be used\r\n * @param {string} version - CRS version. Example: v2 or v3 (case sensitive)\r\n * @param {string[]} flights Array of flights. Example: [\"testFlight\", \"prg-abcd\"]\r\n * @param {string} configIndexDocId. Example: cms/api/amp/experienceConfigIndex/BBUsYQa\r\n * @param {string} apptype. Example: edgeChromium\r\n * @returns true if git configs are supported\r\n */\r\nexport function shouldUseGitConfigs(version: string, flights: string[], configIndexDocId: string, apptype: string): boolean {\r\n // If app type is not defined or empty, do not use Git configs.\r\n // For local dev scenarion of individual experiences running in standalone, app type is blank.\r\n // Also app type is MUST param in Git configs, if app type is not present, we do not want to attempt Git configs too in prod.\r\n // If version is not present or it is not v3, do not support Git configs\r\n if (!apptype || !version || version !== CrsV3Endpoint) {\r\n return false;\r\n }\r\n\r\n // Return true if this does not have configIndexDocId\r\n return !configIndexDocId\r\n // Return true if this is a Git configs treatment flight\r\n || containsGitConfigsFlight(apptype, flights);\r\n}\r\n\r\n/**\r\n * Return true if Git configs treatment flight is the expected one for the current apptype\r\n * @param apptype Current apptype\r\n * @param flights array of flights active for current page instance\r\n */\r\nfunction containsGitConfigsFlight(apptype: string, flights: string[]): boolean {\r\n const expectedGitFlight = appTypeExpectedFlightMap.get(apptype);\r\n\r\n if (expectedGitFlight) {\r\n const prgFlights = getPeregrineFlights(flights);\r\n\r\n return !!(prgFlights && prgFlights.length && prgFlights.includes(expectedGitFlight));\r\n }\r\n\r\n return false;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * The aria-label html attribute\r\n * @type {string}\r\n */\r\nexport const ariaLabelAttribute = \"aria-label\";\r\n\r\n/**\r\n * The id attribute on the
element that is the root element for Peregrine Pages / Experiences.\r\n * There is only ever 1 root element on a page\r\n * @type {string}\r\n */\r\nexport const rootElementId = \"msnewsroot\";\r\n\r\n/**\r\n * Element names that are commonly used in Peregrine pages and experiences\r\n * @type {object}\r\n */\r\nexport const htmlElementIds: any = {\r\n html: \"html\",\r\n head: \"head\",\r\n body: \"body\"\r\n};\r\n\r\n/**\r\n * Constants used by application cache related scenarios\r\n */\r\nexport const applicationCacheConstants = {\r\n /**\r\n * Attribute name on html tag that is set when appcache is being used on the page\r\n */\r\n manifestAttributeName: \"manifest\",\r\n\r\n /**\r\n * Local storage key that holds the appcache info used to determine page refresh needs\r\n * for different page types.\r\n */\r\n pagesRefreshData: \"ac_prd\"\r\n};\r\n\r\n/**\r\n * The attributes that are part of markup elements that we care about\r\n */\r\nexport const clientSettings = \"data-client-settings\";\r\nexport const pagetypeSettings = \"data-pagetype\";\r\nexport const id = \"data-id\";\r\nexport const info = \"data-info\";\r\nexport const js = \"data-js\";\r\nexport const t = \"data-t\";\r\nexport const lang = \"lang\";\r\nexport const dir = \"dir\";\r\nexport const serviceUrl = \"data-service-url\";\r\nexport const telemetryId = \"data-telemetry-id\";\r\nexport const trackPageProduct = \"data-page-product\";\r\nexport const trackPageType = \"data-page-type\";\r\n\r\n/**\r\n * The number of characters that our Service Request Ids must have. This is currently defined by OneService\r\n * @type {number}\r\n */\r\nexport const numberOfCharactersNeededForUniqueRequestId = 32;\r\n\r\n/**\r\n * The minimum number of path segments that will be in the URL which hosts MS News Experience pages.\r\n * The first path segment should be the vertical key, e.g. spartan and the second path segment\r\n * should be the the category key, e.g. ntp\r\n * @type {number}\r\n */\r\nexport const minimumHostPagePathSegments = 2;\r\n\r\n/**\r\n * Default value we use for the name of the cookie that holds the ANID\r\n */\r\nexport const anonCookieName = \"APP_ANON\";\r\n\r\n/**\r\n * App Anon Cookie Exists Cookie Name. This cookie is a marker if APP_ANON exist or not.\r\n * This is necessary because APP_ANON is HTTP cookie and not accessible by JS.\r\n */\r\nexport const appAnonCookieExistsCookieName = \"aace\";\r\n\r\n/**\r\n * Child cookie name, used to signal if rpsUser is child account.\r\n */\r\nexport const childCookieName = \"child\";\r\n\r\n/**\r\n * Tracks user engagement for the Meet Now feature via the first day it was shown\r\n */\r\nexport const meetNowEngagementDayFirstShown = \"meetnow-day-first-shown\";\r\n\r\n/**\r\n * Tracks user engagment for the Meet Now feature via the number of clicks\r\n */\r\nexport const meetNowEngagementNumberOfClicks = \"meetnow-number-clicks\";\r\n\r\n/**\r\n * Tracks whether user engagement requirements for the Meet Now feature have been met\r\n */\r\nexport const meetNowengagementReached = \"meetnow-engagement-reached\";\r\n\r\n/**\r\n * Migration consent state cookie, indicates user has already granted or denied migration consent\r\n */\r\nexport const migrationConsentStateKey = \"migration-state\";\r\n\r\n/**\r\n * Id of MSCC cookie banner container element.\r\n */\r\nexport const msccCookieBannerElementId = \"consent-banner-container\";\r\n\r\n/**\r\n * Nurturing accepted state key is intended to be used in local storage, indicates user has opted in or out of Iris targeted content.\r\n */\r\nexport const nurturingAcceptedStateKey = \"nurturingAccepted\";\r\n\r\n/**\r\n * Recommended search key is intended to be used in local storage,\r\n * indicates user has opted in or out to show recommended search below search box\r\n */\r\nexport const recommendedSearchKey = \"recommended-search-enabled\";\r\n\r\n/**\r\n * Search history key is intended to be used in local storage, indicates user has opted in or out to show search history\r\n */\r\nexport const searchHistoryKey = \"search-history-enabled\";\r\n\r\n/**\r\n * Local storage key indicating if left rail is enabled\r\n */\r\nexport const officeLeftRailKey = \"left-rail-enabled\";\r\n\r\n/**\r\n * Local storage key to indicated if no search history is expected based on auth logic\r\n * If it is expected then do not show search history toggle, otherwise show search history toggle in settings dialog\r\n */\r\nexport const noSearchHistoryExpectedKey = \"no-search-history-expected-auth\";\r\n\r\n/**\r\n * key which is used to force consumer mode for Enterprise Users.\r\n */\r\nexport const EnterpriseToConsumerOverrideKey = \"forceConsumer\";\r\n\r\n/**\r\n * Headers used for one service requests\r\n */\r\nexport const oneServiceHeaders = {\r\n activityId: \"x-client-activityid\",\r\n adsReferer: \"ads-referer\",\r\n authorization: \"Authorization\",\r\n entAuthorization: \"Ent-Authorization\",\r\n rpsToken: \"UserAuthToken\",\r\n taboolaSessionId: \"taboola-sessionId\",\r\n muid: \"MUID\"\r\n};\r\n\r\n/**\r\n * Headers used for OneService responses\r\n */\r\nexport const oneServiceReponseHeaders = {\r\n traceId: \"ddd-activityid\"\r\n};\r\n\r\nexport const idxIdKey = \"IDXId\";\r\n\r\n/**\r\n * used query string params in OneService requests\r\n */\r\nexport const oneServiceQueryStringKeys = {\r\n actionType: \"actionType\",\r\n activityId: \"activityId\",\r\n apiKey: \"apikey\",\r\n complexInfoPaneEnabled: \"cipenabled\",\r\n contentType: \"contentType\",\r\n cookieWallPresent: \"cookieWallPresent\",\r\n delta: \"delta\",\r\n disableTypeSerialization: \"DisableTypeSerialization\",\r\n infopaneCount: \"infopaneCount\",\r\n fdhead: \"fdhead\",\r\n feedLayoutRequestType: \"t\",\r\n filter: \"$filter\",\r\n ids: \"ids\",\r\n location: \"location\",\r\n market: \"market\",\r\n mobile: \"mobile\",\r\n ocid: \"ocid\",\r\n parentContentId: \"parent-content-id\",\r\n parentNamespace: \"parent-ns\",\r\n parentTitle: \"parent-title\",\r\n queryQ: \"q\",\r\n query: \"query\",\r\n queryType: \"queryType\",\r\n qScope: \"qscope\",\r\n responseSchema: \"responseSchema\", // IDX returns nextPageUrl with camel cased responseSchema query string\r\n select: \"$select\",\r\n session: \"session\",\r\n signInCookieName: \"scn\",\r\n skip: \"$skip\",\r\n source: \"source\",\r\n targetType: \"targetType\",\r\n timeOut: \"timeOut\",\r\n top: \"$top\",\r\n type: \"type\",\r\n user: \"user\",\r\n wrapOData: \"wrapodata\",\r\n infoPaneItemCount: \"t:InfoPane.itemCount\",\r\n newsTop: \"newsTop\",\r\n newsSkip: \"newsSkip\",\r\n collectionIds: \"collectionIds\",\r\n listIds: \"listIds\",\r\n requireQuoteDetail: \"requireQuoteDetail\",\r\n exchangeCode: \"ExchangeCode\",\r\n topNum: \"top\",\r\n skipNum: \"skip\",\r\n startTime: \"StartTime\",\r\n endTime: \"EndTime\",\r\n eventType: \"EventType\"\r\n};\r\n\r\n/**\r\n * Constants to use as role attribute value for elements\r\n */\r\nexport enum AriaRoles {\r\n /**\r\n * Presentation role is used to remove semantic meaning from an element and any of its related child elements.\r\n */\r\n Presentation = \"presentation\"\r\n}\r\n\r\n/**\r\n * Basic enum values for mobile device orientation\r\n */\r\nexport enum DeviceOrientation {\r\n Unknown = \"Unknown\",\r\n Portrait = \"Portrait\",\r\n Landscape = \"Landscape\"\r\n}\r\n\r\n/**\r\n * Common local storage keys\r\n */\r\nexport const CoreLocalStorageKeys = {\r\n /**\r\n * This key is used to store a dictionary of app versions per app type based on the current page version from the DOM.\r\n * Note that the version value will represent the current **loaded page** version and **not the new version** in scenarios\r\n * where the page is cached and require a new version to be loaded upon version detection (i.e., appcache, or service worker).\r\n * In these cached/refresh scenarios, we still want to store the version that the page was actually loaded from.\r\n */\r\n pageVersions: \"pageVersions\"\r\n};\r\n\r\n/**\r\n * The default APIKey for OneService requests\r\n */\r\nexport const defaultOneServiceApiKey = \"0QfOX3Vn51YCzitbLaRkTTBadtWpgTN8NZLW0C1SEM\";\r\n\r\n/**\r\n * Url for microsoft news page\r\n */\r\nexport const MicrosoftNewsUrl = \"https://microsoftnews.msn.com/\";\r\n\r\n/**\r\n * Local storage key for user's currently selected pivot (used for enterprise)\r\n */\r\nexport const SelectedPivotStorageId = \"selectedPivot\";\r\n\r\n/**\r\n * Subscription product types\r\n */\r\nexport enum SubscriptionProductTypes {\r\n Undefined = 0,\r\n Basic = 1,\r\n Advanced = 2,\r\n Premium = 3\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { PageBase } from \"@msnews/experiences-page-base\";\r\nimport { RequestContext } from \"@msnews/core\";\r\n\r\n// export default function bootstrapPrimeHybrid(): void {\r\n// Get an instance of the PageBase for this app, and start the app\r\nconst app = PageBase.getInstance();\r\n\r\nconst requestContext = new RequestContext();\r\n\r\n// Start the App\r\napp.start();\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Client side properties that Render Service sends to initialize RequestData.\r\n * These properties are typically passed via query param to the render service.\r\n * On the client side these are available and populated through the DOM.\r\n */\r\nexport interface RequestProps {\r\n\r\n /**\r\n * URL for the original client request.\r\n */\r\n href: string;\r\n\r\n /**\r\n * Height of client browser window.\r\n */\r\n innerHeight: number;\r\n\r\n /**\r\n * Device pixel ratio of client.\r\n */\r\n devicePixelRatio: number;\r\n\r\n /**\r\n * CSS Grid support of the client browser.\r\n */\r\n canUseCssGrid: boolean;\r\n\r\n /**\r\n * Request Id.\r\n */\r\n requestId: string;\r\n\r\n /**\r\n * The request cookie string\r\n */\r\n cookie: string;\r\n\r\n /**\r\n * The request referer string\r\n */\r\n referer: string;\r\n\r\n /**\r\n * Request UserAgent string\r\n */\r\n userAgent: string;\r\n}\r\n\r\n/**\r\n * Singleton class to store client browser data sent through query param to Render Service.\r\n * This is only used under server environment.\r\n */\r\nclass RequestData {\r\n /**\r\n * The single instance of the RequestData class.\r\n * @type {RequestData}\r\n */\r\n private static _instance: RequestData = null;\r\n\r\n /**\r\n * URL object to be used to store original request url.\r\n */\r\n public readonly url: URL;\r\n\r\n /**\r\n * Inner height of browser from the original request.\r\n */\r\n public readonly innerHeight: number;\r\n\r\n /**\r\n * Device pixel ratio from the original request.\r\n */\r\n public readonly devicePixelRatio: number;\r\n\r\n /**\r\n * Boolean flag that represents if CSS Grid is supported by the browser from the original request.\r\n */\r\n public readonly canUseCssGrid: boolean;\r\n\r\n /**\r\n * Request Id.\r\n */\r\n public readonly requestId: string;\r\n\r\n /**\r\n * Request cookie string\r\n */\r\n public readonly cookie: string;\r\n\r\n /**\r\n * Request referer string\r\n */\r\n public readonly referer: string;\r\n\r\n /**\r\n * Request UserAgent string\r\n */\r\n public readonly userAgent: string;\r\n\r\n /**\r\n * Initialize the request data instance with passed in client properties\r\n */\r\n private constructor(data: RequestProps) {\r\n this.url = new URL(data.href);\r\n this.innerHeight = data.innerHeight;\r\n this.devicePixelRatio = data.devicePixelRatio;\r\n this.canUseCssGrid = data.canUseCssGrid;\r\n this.requestId = data.requestId;\r\n this.cookie = data.cookie;\r\n this.referer = data.referer;\r\n this.userAgent = data.userAgent;\r\n }\r\n\r\n /**\r\n * Returns singleton class instance.\r\n * @returns RequestData\r\n */\r\n public static getInstance(): RequestData {\r\n if (global[\"TEST_ENV\"] && !RequestData._instance) {\r\n resetRequestData({\r\n href: \"http://localhost:8080/\",\r\n innerHeight: 768,\r\n devicePixelRatio: 1,\r\n canUseCssGrid: false,\r\n requestId: \"0\",\r\n cookie: \"\",\r\n userAgent: \"\",\r\n referer: \"\"\r\n });\r\n }\r\n\r\n if (!RequestData._instance) {\r\n // Throw error if the request data has not been set as this should never be the case.\r\n // This likely highlights that the request data was not initialized when handling a\r\n // request when server side rendering.\r\n // TODO - http://osgvsowi/24832691 renable throwing an error.\r\n // This is currently disabled as other singletons that are initialized at import time use\r\n // this they will throw an error before anyone has the chance to initialize the request data\r\n resetRequestData({\r\n href: \"http://localhost:8080/\",\r\n innerHeight: 0,\r\n devicePixelRatio: 0,\r\n canUseCssGrid: false,\r\n requestId: \"0\",\r\n cookie: \"\",\r\n userAgent: \"\",\r\n referer: \"\"\r\n });\r\n // throw new Error(\"Request data is not initialized yet through ResetInstance.\");\r\n }\r\n return RequestData._instance;\r\n }\r\n\r\n /**\r\n * Reset singleton class instance with passed in info and client settings\r\n * @returns RequestData\r\n */\r\n public static resetInstance(data: RequestProps): RequestData {\r\n RequestData._instance = new RequestData(data);\r\n return RequestData._instance;\r\n }\r\n}\r\n\r\n/**\r\n * Export function to reset the request data singleton.\r\n * This must be used to set the request data.\r\n */\r\nexport const resetRequestData = RequestData.resetInstance;\r\n\r\n/**\r\n * Export get instance function for testing\r\n */\r\nexport const getRequestData = () => (RequestData.getInstance());","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { TelemetryLibraryBase } from \"../telemetry-interfaces\";\r\n\r\n/**\r\n * Static global variables used to reference to Telemetry library implementation.\r\n * @var TelemetryLibraryBase\r\n */\r\nexport let Telemetry: TelemetryLibraryBase = null;\r\n\r\n/**\r\n * Initialize Telemetry\r\n * @param telemetry TelemetryLibraryBase implementation\r\n */\r\nexport function initTelemetry(telemetry: TelemetryLibraryBase): void {\r\n Telemetry = telemetry;\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Attempts to parse a given string to a JSON object\r\n * @param {string} jsonString - The string to parse.\r\n * @returns {any} - the parsed object if successful, or null otherwise.\r\n */\r\nexport function tryParseJson(jsonString: string): any {\r\n try {\r\n return JSON.parse(jsonString);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Attempts to parse the given value as a integer and if failed will return the defaultValue.\r\n * @param {string} value - The value to parse.\r\n * @param {number} defaultValue - The default value to return if parsing fails\r\n * @returns {number} the parsed value if it was a valid number or otherwise the default value if specified.\r\n */\r\nexport function tryParseInt(value: string, defaultValue: number): number {\r\n const n = parseInt(value);\r\n return isNaN(n) ? defaultValue : n;\r\n}\r\n\r\n/**\r\n * Attempts to convert the given JSON object to a string.\r\n * @param jsonObj - The JSON object to convert.\r\n * @returns {string} - the converted string if successful, or null otherwise.\r\n */\r\nexport function tryStringifyJson(jsonObj: {}): string {\r\n try {\r\n return JSON.stringify(jsonObj);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * An enumeration indicating the MSA sign in status for the page.\r\n */\r\nexport enum SignedInStatus {\r\n Unknown,\r\n NotSignedIn,\r\n SignedIn\r\n}\r\n\r\n/**\r\n * The various account types that we support in Peregrine, this enum can be modified as new types are added\r\n * \"MSA\" - MSA\r\n * \"AAD\" - AAD\r\n */\r\nexport enum AccountType {\r\n MSA = \"MSA\",\r\n AAD = \"AAD\",\r\n UNSUPPORTED_SOVEREIGNTY = \"UNSUPPORTED_SOVEREIGNTY\"\r\n}\r\n\r\n/**\r\n * Note: these values are used by the Telemetry team and must remain in the following order:\r\n * 0 - NonAadAccount\r\n * 1 - AadAccount\r\n * 2 - Unknown\r\n */\r\nexport enum AadAccountType {\r\n NonAadAccount = 0,\r\n AadAccount = 1,\r\n Unknown = 2\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Enum for different page types\r\n * @enum\r\n */\r\nexport enum PageType {\r\n Article = \"article\",\r\n ArticleFullScreen = \"articlefullscreen\",\r\n DHP = \"dhp\",\r\n Gallery = \"gallery\",\r\n GalleryFullScreen = \"galleryfullscreen\",\r\n Launcher = \"launcher\",\r\n MMX = \"mmx\",\r\n NewsAndInterests = \"newsandinterestshp\",\r\n Newsbar = \"newsbar\",\r\n NewsbarUpsell = \"newsbarupsell\",\r\n NTP = \"ntp\",\r\n Story = \"story\",\r\n Shopping = \"shopping\",\r\n ShoppingDealsCategory = \"shopping::deals-category\",\r\n ShoppingPlus = \"shopping::plus\",\r\n ShoppingProductDetails = \"shopping::product\",\r\n ShoppingStoreCoupons = \"shopping::store-coupons\",\r\n ShoppingStyles = \"shopping::styles\",\r\n Video = \"video\",\r\n Windows = \"windowshp\",\r\n WindowsShellHP = \"windowsshellhp\"\r\n}\r\n\r\n/** The AudienceMode enum */\r\nexport enum AudienceModeType {\r\n Adult = \"adult\",\r\n Enterprise = \"enterprise\",\r\n Kids = \"kids\"\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Returns local storage object, or null if it is not accessible.\r\n * This is minimal version used by client side inline script.\r\n */\r\nexport function getLocalStorageInline(): Storage {\r\n try {\r\n return localStorage;\r\n } catch (error) {\r\n return null;\r\n }\r\n}","\r\n// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { RenderCache, RenderCacheKeys } from \"./RenderCache\";\r\nimport { keysPrefix, locationHref, normalizedUrlConfigkey, riverRcClassName } from \"./Constants\";\r\n\r\nimport { KeyValueArray, getLocalStorageInline } from \"@msnews/core\";\r\nimport { canUseDOM } from \"@msnews/isomorphic-util\";\r\n\r\nlet renderCacheObject: RenderCache;\r\n\r\nexport const windowAvailable = !!((typeof(window) !== \"undefined\") && window);\r\n\r\n/**\r\n * Function to get render cache if it's valid.\r\n * @returns Render cache object if it exists and is valid otherwise null.\r\n */\r\nexport function getRenderCache(): RenderCache {\r\n if (renderCacheObject) {\r\n return renderCacheObject;\r\n }\r\n\r\n const storage = getLocalStorageInline();\r\n if (!storage) {\r\n return null;\r\n }\r\n\r\n // get all normalized render cache keys from local storage\r\n let renderCacheKeys: RenderCacheKeys;\r\n const renderCacheStoredKeys = storage.getItem(renderCacheKeyOfNormalizedKeys);\r\n try {\r\n renderCacheKeys = renderCacheStoredKeys && JSON.parse(renderCacheStoredKeys);\r\n } catch (error) {\r\n return null; // keys not parsable.\r\n }\r\n\r\n if (!renderCacheKeys || !renderCacheKeys.keyn || !renderCacheKeys.expn || !renderCacheKeys.frcn || !renderCacheKeys.jssn) {\r\n return null;\r\n }\r\n\r\n const cacheExpirationTimestamp = storage.getItem(renderCacheKeys.expn);\r\n if (!cacheExpirationTimestamp) {\r\n return null; // Cache Expiration Timestamp not exist\r\n }\r\n\r\n const parsedCacheExpirationTimestamp = parseInt(cacheExpirationTimestamp);\r\n if (!parsedCacheExpirationTimestamp) {\r\n return null; // Cache Expiration Timestamp broken.\r\n }\r\n\r\n const currentTimestamp: number = new Date().getTime();\r\n if (currentTimestamp >= parsedCacheExpirationTimestamp) {\r\n return null; // cache expired.\r\n }\r\n\r\n const renderCacheStorage = storage.getItem(renderCacheKeys.keyn);\r\n if (!renderCacheStorage) {\r\n return null; // Cache object is missing.\r\n }\r\n\r\n try {\r\n renderCacheObject = JSON.parse(renderCacheStorage);\r\n } catch (error) {\r\n return null; // Cache object not parsable.\r\n }\r\n\r\n if (!renderCacheObject || !renderCacheObject.dom || !renderCacheObject.batch_css) {\r\n renderCacheObject = null; // Cache object is broken\r\n }\r\n\r\n return renderCacheObject;\r\n}\r\n\r\n/**\r\n * Batch All styles into one object.\r\n */\r\nexport function batchCSS(): string {\r\n let batchCss = \"\";\r\n\r\n // Enumerate and write out all of the JSS styles\r\n const styles = document.getElementsByTagName(\"style\");\r\n const length = styles.length;\r\n\r\n for (let i = 0; i < length; i++) {\r\n // Skip any styles that do not have a data-jss attribute to always pick newer styles added by jss\r\n if (styles[i].dataset.jss != null) {\r\n batchCss += styles[i].innerHTML;\r\n }\r\n }\r\n\r\n return batchCss;\r\n}\r\n\r\n/**\r\n * Scrapes Dom and remove River.\r\n */\r\nexport function scrapeDom(includeNewsFeed: boolean): string {\r\n const root = document.getElementById(\"root\");\r\n\r\n if (!root || !root.innerHTML) {\r\n return \"\";\r\n }\r\n\r\n /* Currently we don't have functionality to include experiences separately,\r\n because of that we do return whole dom if river included in render cache and exclude river otherwise */\r\n if (includeNewsFeed) {\r\n return root.innerHTML;\r\n }\r\n\r\n const rivers = document.getElementsByClassName(riverRcClassName);\r\n\r\n if (!rivers || !rivers.length) {\r\n return root.innerHTML;\r\n }\r\n\r\n const river = rivers[0] as HTMLElement;\r\n\r\n return root.innerHTML.replace(river.outerHTML, \"\");\r\n}\r\n\r\n/**\r\n * Gets the state object from render cache.\r\n * @returns The redux state object.\r\n */\r\nexport function getStateFromRenderCache(): any {\r\n // Check to see if this app instance was bootstrapped with a render-cache\r\n const renderCache = getRenderCache();\r\n\r\n if (!renderCache || !renderCache.state) {\r\n return null; // Render Cache missing or it does not include State.\r\n }\r\n\r\n let initialState;\r\n\r\n try {\r\n initialState = JSON.parse(renderCache.state, reduxStoreStringifyReviver);\r\n } catch (error) {\r\n // Cache state object is not parsable.\r\n }\r\n\r\n return initialState;\r\n}\r\n\r\n/**\r\n * Redux Store Stringify replacer HOF, generates store stringify.\r\n * @param storeExceptions list of store namespaces which will not be included in result.\r\n */\r\nexport function reduxStoreStringifyReplacer(key: string, value: any): any {\r\n const originalObject = this[key];\r\n if (originalObject instanceof Map) {\r\n return {\r\n dataType: \"Map\",\r\n value: [...originalObject]\r\n };\r\n } else {\r\n return value;\r\n }\r\n}\r\n\r\n/**\r\n * Function to normalize current URL\r\n * Example:\r\n * For normalizeKeyParamsList = [\"startpage\", \"prerender\"]\r\n * https://ntp.msn.com/edge/ntp?locale=en-us&startpage=1 is normalized to https://ntp.msn.com/edge/ntp?locale=en-us\r\n * https://ntp.msn.com/edge/ntp?startpage=1&locale=en-us is normalized to https://ntp.msn.com/edge/ntp?locale=en-us\r\n * https://ntp.msn.com/edge/ntp?locale=en-us&startpage=1&prerender=1 is normalized to https://ntp.msn.com/edge/ntp?locale=en-us\r\n * @returns normalized location href\r\n */\r\nexport function getNormalizedLocationHref(configParamsList?: [string]) {\r\n\r\n // get the url\r\n const normalizeKeyParamsList = configParamsList || getNormalizeKeyParamsList();\r\n\r\n if (!normalizeKeyParamsList || !normalizeKeyParamsList.length) {\r\n return locationHref;\r\n }\r\n\r\n const searchParams: URLSearchParams = new URLSearchParams(location.search);\r\n if (!searchParams) {\r\n return locationHref;\r\n }\r\n\r\n const normalizedParams: KeyValueArray = [];\r\n searchParams.forEach((value, key) => {\r\n if (!normalizeKeyParamsList.includes(key)) {\r\n normalizedParams.push({ key, value });\r\n }\r\n });\r\n\r\n // Filter for valid keyValue entries, and then map them into key==value strings\r\n // joined with an &\r\n const queryString = normalizedParams.map(kv => kv.key + \"=\" + kv.value).join(\"&\");\r\n const basePath = (locationHref || \"\").split(\"?\")[0];\r\n return basePath + (queryString ? \"?\" + queryString : \"\");\r\n}\r\n\r\n/**\r\n * set normalized param list to localStorage\r\n */\r\nexport function setNormalizeKeyParamsList(normalizeKeyParamsList: Array): void {\r\n if (normalizeKeyParamsList) {\r\n const storage = getLocalStorageInline();\r\n if (storage) {\r\n storage.setItem(normalizedUrlConfigkey, normalizeKeyParamsList.toString());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * The key for storing all render cache normalized keys\r\n * Maintain a single entry for collection of all render cache keys\r\n * Example: for https://ntp.msn.com/edge/ntp?locale=en-us URL,\r\n * we have one key with all the following render cache keys values\r\n *\r\n * key: keys_https://ntp.msn.com/edge/ntp?locale=en-us&startpage=1\r\n * value: {\r\n * keyn: \"lastKnown_https://ntp.msn.com/edge/ntp?locale=en-us\", // render cache key\r\n * expn: \"timestamp_https://ntp.msn.com/edge/ntp?locale=en-us\", // expiration key\r\n * frcn: \"force_timestamp_https://ntp.msn.com/edge/ntp?locale=en-us\", // force timestamp key\r\n * jssn: \"lastKnown_https://ntp.msn.com/edge/ntp?locale=en-us_jssMap\" // jss map key\r\n * }\r\n */\r\nexport const renderCacheKeyOfNormalizedKeys = `${keysPrefix}${(typeof (window) !== \"undefined\" ? getNormalizedLocationHref() : \"\")}`;\r\n\r\n/**\r\n * Custom JSON.stringify reviver that will create Map objects from a string/JSON representation\r\n * @param key not used\r\n * @param value The value being converted from a string\r\n */\r\nfunction reduxStoreStringifyReviver(key: any, value: any): any {\r\n // If the value being restored is a object, check it it was a map\r\n if (typeof value === \"object\" && value !== null) {\r\n // If the object value being restored was a map, that was custom written, then revive it by creating a map\r\n if (value.dataType === \"Map\") {\r\n return new Map(value.value);\r\n }\r\n }\r\n\r\n // Return the original value being restored\r\n return value;\r\n}\r\n\r\n/**\r\n * get normalized param list from localStorage\r\n */\r\nfunction getNormalizeKeyParamsList(): Array {\r\n if (!canUseDOM()) {\r\n return null;\r\n }\r\n\r\n const storage = getLocalStorageInline();\r\n if (!storage) {\r\n return null;\r\n }\r\n\r\n const normalizeUrlQsp = storage.getItem(normalizedUrlConfigkey);\r\n return normalizeUrlQsp ? normalizeUrlQsp.split(\",\") : null;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * An enumeration indicating for samesite when setting cookies.\r\n */\r\nexport enum SameSiteValues {\r\n /**\r\n * (Default when not specified) Cookies are not sent on normal cross-site subrequests (for example to load images or frames into a third party site),\r\n * but are sent when a user is navigating to the origin site (i.e. when following a link).\r\n */\r\n Lax = \"lax\",\r\n /**\r\n * Cookies will only be sent in a first-party context and not be sent along with requests initiated by third party websites.\r\n */\r\n Strict = \"strict\",\r\n /**\r\n * Cookies will be sent in all contexts, i.e in responses to both first-party and cross-origin requests.If SameSite=None is set,\r\n * the cookie Secure attribute must also be set (or the cookie will be blocked).\r\n */\r\n None = \"none\"\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { canUseDOM, getCookieString } from \"@msnews/isomorphic-util\";\r\n\r\nimport { SameSiteValues } from \"@msnews/experiences-constants\";\r\n\r\n/**\r\n * Returns the cookie content given a name\r\n *\r\n * @param name {string} - cookie name\r\n * @returns the value of the cookie or `null`, if the key is not found.\r\n */\r\nexport function getCookie(name: string): string {\r\n const cookieString = getCookieString();\r\n\r\n if (cookieString) {\r\n const re = new RegExp(\"\\\\b\" + name + \"\\\\s*=\\\\s*([^;]*)\", \"i\");\r\n const match = re.exec(cookieString);\r\n return (match && match.length > 1 ? match[1] : null);\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Helper function that retrieves the MUID from the document.cookie\r\n * or uses the saved value if the cookie was retrieved for the current page instance\r\n */\r\nexport function getMuidCookie(): string {\r\n return getCookie(\"MUID\");\r\n}\r\n\r\n/**\r\n * Helper function used to set a cookie\r\n * NOTE: THIS BYPASSES ANY GDPR CHECK AND HENCE ONLY REQUIRED FUNCTIONAL COOKIES SHOULD BE SET USING THIS\r\n * IF YOU DO NOT KNOW IF YOUR COOKIE IS ONE THEN PLEASE USE Cookies.ts setCookie THAT MAKES USE OF GDPR LOGIC CHECKS\r\n * When expiryDays is equal to -1 it will unset the cookie\r\n * * @param {string} name Cookie name\r\n * * @param {string} value Cookie value\r\n * * @param {number} expiryDays Cookie expiry days\r\n * * @param {string} domain Cookie domain\r\n * * @param {string} path Cookie path\r\n * * @param {boolean} secure Is it a https only cookie\r\n * * @param {SameSiteValues} sameSiteValue What value should we use for samesite? also sets secure.\r\n */\r\nexport function setRequireFunctionalCookie(name: string, value: string, expiryDays?: number, domain?: string, path?: string, secure?: boolean, sameSiteValue?: SameSiteValues): void {\r\n let expiryDate;\r\n const builder = [name, \"=\", value];\r\n if (-1 === expiryDays) {\r\n // Expires date format is supposed to be in GMT.\r\n expiryDate = \"Fri, 31 Dec 1999 23:59:59 GMT\";\r\n } else if (expiryDays) {\r\n const date = new Date();\r\n date.setTime(date.getTime() + (expiryDays * 86400000)); // 86400000 == 24*60*60*1000 (ms/day)\r\n expiryDate = date.toUTCString();\r\n }\r\n\r\n if (expiryDate) { builder.push(\";expires=\", expiryDate); }\r\n if (domain) { builder.push(\";domain=\", domain); }\r\n if (path) { builder.push(\";path=\", path); }\r\n if (secure) { builder.push(\";secure\"); }\r\n // Do we have a value to set for samesite? NOTE: the browser default is \"lax\" so we won't set when we have that value.\r\n if (sameSiteValue && sameSiteValue !== SameSiteValues.Lax) {\r\n builder.push(\";samesite=\", sameSiteValue.toString());\r\n // If samesite is \"none\" and we have not already set \"secure\".\r\n if (sameSiteValue === SameSiteValues.None && !secure) {\r\n builder.push(\";secure\");\r\n }\r\n }\r\n\r\n if (canUseDOM() && document) {\r\n document.cookie = builder.join(\"\");\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { LiteLogger } from \"./LiteLogger\";\r\nimport { ILoggingService } from \"clientcore-infrastructure-analytics/ILoggingService\";\r\n\r\n/**\r\n * Interface for logger so different implementation of logger could be used.\r\n */\r\nexport interface Logger {\r\n\r\n /**\r\n * Returns the logging service\r\n * @returns {ILoggingService}\r\n */\r\n getLoggingService(): ILoggingService;\r\n\r\n /**\r\n * Checks whether we're running in debug mode.\r\n * @returns True when either debug=1 or debug=true is present as a query param, otherwise false.\r\n */\r\n isDebug(): boolean;\r\n\r\n /**\r\n * Override the isDebug setting. Useful when server side rendering.\r\n */\r\n setDebug(isDebug: boolean): void;\r\n\r\n /**\r\n * Set the tags to filter logs.\r\n * @param tags Tags to filter logs. If empty, do not filter.\r\n */\r\n setTags(tags: string[]): void;\r\n\r\n /**\r\n * Log console message.\r\n * Note that these are not output to the console unless you're in debug mode.\r\n * @param message - Message to log.\r\n * @param tags - Optional tags for specifying log type for filtering logs.\r\n */\r\n log(message: string, tags?: string[]): void;\r\n\r\n /**\r\n * Log error message.\r\n * @param message - Message to log\r\n */\r\n logError(message: string): void;\r\n\r\n /**\r\n * Lazy log console message. Use this when the message being constructed is complex or expensive so that it's only evaluated if needed.\r\n * Note that the callback is not invoked and the message is not output unless you're in debug mode.\r\n * @param getMessage - The function to call to get message to log\r\n */\r\n logCallback(getMessage: () => string): void;\r\n\r\n /**\r\n * Log the objects to the console.\r\n * Note that these are not output to the console unless you're in debug mode.\r\n * @param message - Array of messages to log\r\n */\r\n logObjects(...message: any[]): void;\r\n\r\n /**\r\n * Log the object.\r\n * Note that these are not output to the console unless you're in debug mode.\r\n * @param data - The object to log\r\n * @param isMetrics - true if the object should be logged as a \"metrics\"\r\n */\r\n logSingleObject(data: any, isMetrics?: boolean): void;\r\n}\r\n\r\n/**\r\n * Set the logger instance.\r\n * @param _logger The logger instance to change to.\r\n */\r\nexport function setLogger(_logger: Logger): void {\r\n logger = _logger;\r\n}\r\n\r\n/** Logger used by everyone. Default is LiteLogger. Please set up desired logger implementaiton with setLogger(). */\r\nexport let logger: Logger = new LiteLogger();\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n// Split from DOMHelper to aid treeshaking\r\n// which currently adds class definition dependency (eg. RequestData)\r\n// even if they aren't used by code that only uses canUseDOM\r\n//\r\n// This being used in PCS inline scripts so only add to here\r\n// if critically important and do not have any other dependencies;\r\n// otherwise add to DOMHelpers\r\n\r\n/**\r\n * Checks if the DOM is available to access and use.\r\n * @returns {boolean} - true if DOM is available, or false if it is not. This is typically true for\r\n * client side rendering and false for server side rendering.\r\n */\r\nexport function canUseDOM(): boolean {\r\n return !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Aad data formatted from browser response\r\n */\r\nexport type AadData = {\r\n /**\r\n * Access token\r\n */\r\n token?: string;\r\n\r\n /**\r\n * Any error info\r\n */\r\n errorInfo?: AadErrorInfo;\r\n\r\n /**\r\n * Flag to indicate if call was successful\r\n */\r\n isSuccess?: boolean;\r\n\r\n /**\r\n * Flag to indicate if token is valid\r\n */\r\n isValid?: boolean;\r\n\r\n /**\r\n * Status for the authentication\r\n */\r\n status: AccessTokenStatus;\r\n};\r\n\r\n/**\r\n * Error info from aad request\r\n */\r\nexport type AadErrorInfo = {\r\n /**\r\n * Error string\r\n */\r\n error_string?: string;\r\n\r\n /**\r\n * Platform error code\r\n */\r\n platform_error_code?: number;\r\n\r\n /**\r\n * Primary error code\r\n */\r\n primary_error?: number;\r\n\r\n /**\r\n * Secondary error code\r\n */\r\n secondary_error?: number;\r\n\r\n /**\r\n * Internal error code for auth issues not handled by auth api\r\n */\r\n internal_error_code?: number;\r\n};\r\n\r\n/**\r\n * Account info\r\n */\r\nexport type AccountInfo = {\r\n /**\r\n * Account id\r\n */\r\n account_id?: string;\r\n\r\n /**\r\n * Account type\r\n */\r\n account_type?: string;\r\n\r\n /**\r\n * Tenant id\r\n */\r\n tenant_id?: string;\r\n\r\n /**\r\n * First name\r\n */\r\n first_name?: string;\r\n\r\n /**\r\n * Last name\r\n */\r\n last_name?: string;\r\n\r\n /**\r\n * Region/scope of customer's cloud environment\r\n */\r\n region_scope?: RegionScope;\r\n\r\n /**\r\n * Object ID\r\n */\r\n oid?: string;\r\n};\r\n\r\nexport enum RegionScope {\r\n /** Global cloud user */\r\n GLOBAL = \"GLOBAL\",\r\n /** GCC Moderate user */\r\n GCC_MODERATE = \"GCC_MODERATE\"\r\n}\r\n\r\nexport enum AccessTokenStatus {\r\n success,\r\n mfaRequired,\r\n otherError\r\n}\r\n\r\n/**\r\n * The client id of our application\r\n */\r\nexport const clientId = \"d7b530a4-7680-4c23-a8bf-c52c121d2e87\";\r\n\r\n/**\r\n * The scope/resource id for enterprise One Service\r\n */\r\nexport const oneServiceScope = \"https://enterprisenews.microsoft.com\";\r\n\r\n/**\r\n * The friendly name for the scope/resource for Enterprise One Service to be used\r\n * in logging.\r\n */\r\nexport const oneServiceFriendlyName = \"OneService\";\r\n\r\n/**\r\n * Edge Chromium version including and after which the blended ntp experience is available\r\n */\r\nexport const eNtpChromiumVersion = 87;","// © Microsoft Corporation. All rights reserved.\r\n\r\n// todo: Deliverable 29531401: [Client] Move client-data-settings to a separate library to avoid importing core library\r\n// Remove these and import from common library once the above deliverable is completed.\r\n\r\n/**\r\n * Checks if the DOM is available to access and use.\r\n * @returns {boolean} - true if DOM is available, or false if it is not. This is typically true for\r\n * client side rendering and false for server side rendering.\r\n */\r\nexport function canUseDOM(): boolean {\r\n return !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\r\n}\r\n\r\n/**\r\n * Return true if html has app cache enabled\r\n */\r\nexport function isAppCache() {\r\n if (canUseDOM() && window.applicationCache) {\r\n const htmlElement = window.document.getElementsByTagName(\"html\")[0];\r\n return htmlElement.getAttribute(\"manifest\");\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Define a queue to store error list with limit length to track trace of error event\r\n *\r\n */\r\nexport class LimitQueue {\r\n maxLength = 20;\r\n list: T[] = [];\r\n constructor(length = 20) {\r\n this.maxLength = length;\r\n }\r\n push(payload: T) {\r\n this.list.push(payload);\r\n if (this.list.length > this.maxLength) {\r\n this.list.shift();\r\n }\r\n }\r\n get data(): T[] { return this.list; }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { isAppCache } from \"./Utilities\";\r\n\r\n// todo: Deliverable 29531401: [Client] Move client-data-settings to a separate library to avoid importing core library\r\n// Import common functions from the new library once the above deliverable is completed.\r\n\r\nlet clientSettings: ClientSettings;\r\nlet currentFlights: string;\r\n\r\n/** The client settings object. */\r\nexport interface ClientSettings {\r\n /** The name of the app */\r\n apptype: string;\r\n\r\n /** The name of the page */\r\n pagetype: string;\r\n\r\n /** The activity ID */\r\n aid: string;\r\n\r\n /** The PCS page generation time in ISO 8601 format, UTC. */\r\n pageGenTime?: string;\r\n\r\n /** The audience mode */\r\n audienceMode?: string;\r\n\r\n /** Information about the JS bundles we are running. */\r\n bundleInfo: {\r\n /** The build number for the JS bundles. */\r\n v: string;\r\n }\r\n\r\n /** Information about PCS that created the page. */\r\n pcsInfo: {\r\n /** The environment we are on */\r\n env: string;\r\n\r\n /** The build number for PCS. */\r\n v: string;\r\n }\r\n}\r\n\r\n/**\r\n * Gets the client settings object.\r\n */\r\nexport function getPageSettings(): ClientSettings {\r\n if (!clientSettings) {\r\n const settingsJson: string = document.head.getAttribute(\"data-client-settings\");\r\n if (settingsJson) {\r\n clientSettings = JSON.parse(settingsJson);\r\n }\r\n }\r\n\r\n return clientSettings;\r\n}\r\n\r\n/**\r\n * Extract eligible flight ids from head data.\r\n * @returns string of flight ids.\r\n */\r\nexport function getCurrentFlights(): string {\r\n if (currentFlights) {\r\n return currentFlights;\r\n }\r\n\r\n let clientInfo = document.head.getAttribute(\"data-info\");\r\n const clientSettings = getPageSettings();\r\n\r\n // If page is possibly app cached, check the updated head data if available.\r\n // Use flights from stored head data if they aren't too old.\r\n // This logic is similiar to initializeFromStorage from HeadData\r\n // except we have to do it first in the inline script to get the flight ids.\r\n if (isAppCache()) {\r\n let storedHeadData;\r\n try {\r\n const storedHeadDataString = window.localStorage.getItem(\"shd_\" + clientSettings.pagetype);\r\n storedHeadData = JSON.parse(storedHeadDataString);\r\n } catch {\r\n storedHeadData = null;\r\n }\r\n\r\n if (storedHeadData) {\r\n const responseClientSettings = storedHeadData.clientSettings;\r\n const responseFlights = storedHeadData.info;\r\n\r\n // The stored head data is corrupt, bail\r\n if (responseClientSettings && responseFlights) {\r\n\r\n // If DOM page gen time is later than response page gen time, bail. We don't want to load stale head data from storage.\r\n if (clientSettings.pageGenTime < responseClientSettings.pageGenTime) {\r\n // Use the new flights from stored head data\r\n clientInfo = responseFlights;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Create array from comma separated list of flights enabled in current request.\r\n currentFlights = ((/f:\\s*([^;]+)/i.exec(clientInfo) || {})[1] || \"\").toLowerCase();\r\n\r\n return currentFlights;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/** Global map for inline script so the initial cookie map is cached. */\r\nlet cookieMapInline: {[cookieName: string]: string};\r\n\r\n/**\r\n * Helper to get cookie value at inline script. This were to have minimal dependency.\r\n * Snapshot of cookies will be made and do not respect cookie changes during runtime.\r\n * @param name - The cookie name\r\n * @returns Decoded cookie value when found, otherwise null\r\n */\r\nexport function getCookieInline(name: string): string {\r\n if (!name) {\r\n return null;\r\n }\r\n\r\n if (!cookieMapInline) {\r\n const cookiePairs = document.cookie.split(\"; \");\r\n cookieMapInline = {};\r\n\r\n const length = cookiePairs && cookiePairs.length;\r\n for (let index = 0; index < length; index++) {\r\n const cookieKeyValue = cookiePairs[index].split(\"=\");\r\n cookieMapInline[cookieKeyValue[0].toLocaleLowerCase()] = decodeURIComponent(cookieKeyValue[1]);\r\n }\r\n }\r\n\r\n const normalizedName = name.toLocaleLowerCase();\r\n const cookieVal = cookieMapInline[normalizedName];\r\n return cookieVal || null;\r\n}\r\n\r\n/**\r\n * Helper to get encoded cookie value at inline script.\r\n * @param name - The cookie name\r\n * @returns Encoded cookie value when found, otherwise null\r\n */\r\nexport function getEncodedCookieInline(name: string): string {\r\n const cookieVal = getCookieInline(name);\r\n return (cookieVal && encodeURIComponent(cookieVal)) || null;\r\n}\r\n\r\n/** Only used for unit test */\r\nexport function resetCookieMapInline() {\r\n cookieMapInline = null;\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { ClientSettings, getCurrentFlights, getPageSettings } from \"./PageSettings\";\r\nimport { LimitQueue } from \"./Utilities\";\r\nimport { getCookieInline } from \"@msnews/core\";\r\n\r\n/** Declared cookie consent required function on PCS side. */\r\nexport declare function getCookieConsentRequired(): boolean;\r\n\r\nlet loggingEndpoint;\r\nconst Product = {\r\n mmx: \"emmx\",\r\n edge: \"spartan\",\r\n edgeChromium: \"anaheim\",\r\n hybrid: \"spartan\",\r\n hub: \"prime\",\r\n microsoftNews: \"msnews\",\r\n office: \"entnews\"\r\n};\r\n\r\n/** Global Error container instance. */\r\nexport const globalLimitErrorQueue = new LimitQueue();\r\n\r\n/**\r\n * Logs error to the given endpoint (e.g. otf). ONLY USE FROM INLINE SCRIPTS.\r\n * @param message - The error message\r\n * @param appErrorId - The app error id to be logged\r\n * @param propertyBag - The blob to store additional error information\r\n */\r\nexport function logError(message: string, appErrorId: number, propertyBag: any): void {\r\n try {\r\n const settingsObject: ClientSettings = getPageSettings();\r\n const flightIds: string = getCurrentFlights();\r\n const params: object = getLoggingParameters(settingsObject);\r\n\r\n let iKey = \"\";\r\n if (params && params[\"apikey\"] && params[\"apikey\"] !== \"\") {\r\n iKey = getIKeyValue(params[\"apikey\"]);\r\n }\r\n\r\n const payload: string = getLoggingPayload(appErrorId, message, settingsObject, iKey, propertyBag, flightIds);\r\n if (params && payload) {\r\n console.error(payload);\r\n globalLimitErrorQueue.push(payload);\r\n const url: string = \"https://\" + loggingEndpoint + \"/OneCollector/1.0\" + formatParams(params);\r\n navigator.sendBeacon(url, payload); // fire and forget\r\n } else {\r\n console.log(\"missing parameters in data-client-settings. \" + message);\r\n }\r\n } catch {\r\n console.log(\"error logging the app error. \" + message);\r\n }\r\n}\r\n\r\n/**\r\n * Gets data to set the logging parameters\r\n * @param settingsObject - The object containing client settings\r\n */\r\nfunction getLoggingParameters(settingsObject: ClientSettings): object {\r\n if (settingsObject) {\r\n const { pcsInfo, pageGenTime } = settingsObject;\r\n const uploadTime = new Date(pageGenTime).getTime();\r\n const isProd: boolean = !pcsInfo || pcsInfo.env === \"prod\";\r\n\r\n // JSLL endpoints\r\n loggingEndpoint = isProd ? \"browser.events.data.msn.com\" : \"events-sandbox.data.msn.com\";\r\n const apikey = isProd\r\n ? \"0ded60c75e44443aa3484c42c1c43fe8-9fc57d3f-fdac-4bcf-b927-75eafe60192e-7279\"\r\n : \"f8857dedc6f54ca8962cfb713e01e7d7-e9250191-fe0b-446f-95ae-07516262f98c-7028\";\r\n\r\n return {\r\n cors: \"true\",\r\n \"content-type\": \"application/x-json-stream\",\r\n \"client-id\": \"NO_AUTH\",\r\n \"client-version\": \"1DS-Web-JS-2.2.2\",\r\n apikey: apikey,\r\n \"upload-time\": uploadTime,\r\n w: \"0\",\r\n anoncknm: \"app_anon\"\r\n };\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Gets data to set the logging payload\r\n * @param appErrorId - The app error id to be logged\r\n * @param message - The error message\r\n * @param iKey - The key for authenticating on 1DS endpoint\r\n * @param propertyBag - The blob to store additional error information\r\n * @param flightIds - The flight ids\r\n */\r\nfunction getLoggingPayload(appErrorId: number, message: string, settingsObject: ClientSettings, iKey: string, propertyBag: any, flightIds: string): string {\r\n if (settingsObject) {\r\n propertyBag = propertyBag || {};\r\n const { apptype, audienceMode, pagetype, pageGenTime, bundleInfo } = settingsObject;\r\n\r\n propertyBag.pageGenTime = pageGenTime;\r\n propertyBag.build = bundleInfo && bundleInfo.v;\r\n propertyBag.appType = apptype;\r\n\r\n const product = audienceMode === \"enterprise\" && apptype === \"edgeChromium\" ? \"entnews\" : Product[apptype];\r\n const pageProduct = product ? product : apptype;\r\n const source = apptype + \"-\" + pagetype;\r\n const market = document.getElementsByTagName(\"html\")[0].getAttribute(\"lang\");\r\n\r\n let muid = \"\";\r\n try {\r\n const isCookieConsentRequired: boolean = getCookieConsentRequired && typeof getCookieConsentRequired === \"function\" && getCookieConsentRequired();\r\n if (!isCookieConsentRequired) {\r\n muid = getCookieInline(\"muid\");\r\n }\r\n } catch {\r\n console.log(\"error fetching muid.\");\r\n }\r\n\r\n // Setting RID=AID might not be correct. The more complex logic in the bundles may determine that we have already burned this as a RID\r\n // and generate a new one different from AID. But it's better than nothing and we cannot see AID on app error reports right now.\r\n // Most of the time when we are not using app cache these two will be the same.\r\n const payload = {\r\n name: \"MS.News.Web.AppError\",\r\n time: pageGenTime,\r\n ver: \"4.0\",\r\n iKey: `o:${iKey}`,\r\n data: {\r\n baseData: {},\r\n baseType: \"MS.News.Web.Base\",\r\n page: {\r\n name: \"default\",\r\n product: pageProduct,\r\n type: pagetype\r\n },\r\n browser: {\r\n clientId: muid\r\n },\r\n flight: {\r\n id: flightIds\r\n },\r\n request: {\r\n activityId: settingsObject.aid,\r\n requestId: settingsObject.aid\r\n },\r\n locale: {\r\n mkt: market\r\n },\r\n extSchema: {\r\n id: appErrorId,\r\n source: source,\r\n severity: 0,\r\n pb: propertyBag,\r\n message: message\r\n }\r\n }\r\n };\r\n\r\n return payload ? JSON.stringify(payload) : null;\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Format query string parameters\r\n * @param params - The logging params\r\n */\r\nfunction formatParams(params: object): string {\r\n return \"?\" + Object\r\n .keys(params)\r\n .map(function (key: string): string {\r\n return key + \"=\" + encodeURIComponent(params[key]);\r\n }).join(\"&\");\r\n}\r\n\r\n/**\r\n * Extracts the value of iKey from apikey\r\n * @param apikey - The value of apikey for 1DS authentication\r\n */\r\nexport function getIKeyValue(apikey: string): string {\r\n\r\n if (apikey) {\r\n const iKeyIndex = apikey.indexOf(\"-\");\r\n if (iKeyIndex > 0) {\r\n return apikey.substring(0, iKeyIndex);\r\n }\r\n }\r\n\r\n return \"\";\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { ConnectorConstants, IActionPayload, IDataConnector, IReducer } from \"@msnews/experiences-redux-contracts\";\r\nimport { assign, get, merge, set } from \"lodash-es\";\r\n\r\nimport { ConnectorNamespaces } from \"@msnews/experiences-constants\";\r\nimport { canUseDOM } from \"@msnews/isomorphic-util\";\r\nimport { dataConnectorInjector } from \"./DataConnectorInjector\";\r\nimport { isNullOrUndefined } from \"util\";\r\nimport { logError } from \"@msnews/page-error-handling\";\r\nimport { reportDataConnectorStateChange } from \"./DataConnectorTracker\";\r\n\r\n/** Resolve & Reject Function Signature */\r\ntype ResolveConnectorSignature = (connector: IDataConnector) => void;\r\ntype RejectConnectorSignature = (error: Error) => void;\r\n\r\n/**\r\n * Pending getDataConnector Promise\r\n */\r\ninterface PendingConnectorPromise {\r\n /** Promise */\r\n promise: Promise>;\r\n /** callback to resolve the promise */\r\n resolve: ResolveConnectorSignature;\r\n /** callback to reject the promise */\r\n reject: RejectConnectorSignature;\r\n}\r\n\r\n/** Result from running a reducer. */\r\ninterface ReducerResult {\r\n /** The new state calculated by the reducer */\r\n newState: any;\r\n\r\n /** True if the state changed. */\r\n stateChanged: boolean;\r\n}\r\n\r\n/**\r\n * A reducer that can dynamically add and remove individual sub-reducers\r\n * @class\r\n */\r\nexport class DynamicReducer {\r\n\r\n /**\r\n * A map of connectors, which maintain the sub-spaced state. Reducers and connectors are keyed by namespace\r\n */\r\n private readonly _connectorMap: {[key: string]: IDataConnector} = {};\r\n\r\n /**\r\n * The list of global connectors. Used for fast lookup instead of iterating through _connectorMap keys and toArray methods.\r\n */\r\n private readonly _globalConnectors: IDataConnector[] = [];\r\n\r\n /**\r\n * The list of all connectors. Used for fast lookup instead of iterating through _connectorMap keys and toArray methods.\r\n */\r\n private readonly _allConnectors: IDataConnector[] = [];\r\n\r\n /**\r\n * The list of all pending promises for the get data connector call. Used to resolve the promise when data connector is instantiated.\r\n */\r\n private readonly _getDataConnectorPendingPromises: Map = new Map();\r\n\r\n /**\r\n * Creates an instance of the `DynamicReducer` class.\r\n * @constructor\r\n * @param {string} type The action type.\r\n */\r\n constructor() {\r\n // bind the reduce method to this instance\r\n this.reduce = this.reduce.bind(this);\r\n }\r\n\r\n /**\r\n * Returns an array of connectors that have their reducers registered with this instance\r\n * @method\r\n * @returns {IDataConnector} A simple arry of all connectors\r\n */\r\n public connectors(): IDataConnector[] {\r\n return this._allConnectors;\r\n }\r\n\r\n /**\r\n * Returns an array of connectors that have their reducers registered with this instance\r\n * @method\r\n * @param {string} namespace The namespace of the connector to return, if it is in the map\r\n * @returns {IDataConnector | undefined} A simple arry of all connectors\r\n */\r\n public connector(namespace: string): IDataConnector | undefined {\r\n return (this._connectorMap[namespace]);\r\n }\r\n\r\n /**\r\n * Returns an array of connectors that have state that is global\r\n * @method\r\n * @returns {IDataConnector} A simple arry of connectors that have global state\r\n */\r\n public globalConnectors(): IDataConnector[] {\r\n return this._globalConnectors;\r\n }\r\n\r\n /**\r\n * Returns a promise which resolves immediately if the data connector is already present on the page,\r\n * otherwise resolves when the data connector is instantiated on the Page later in the lifecycle.\r\n * @method\r\n * @param namespace The namespace of data connector to return\r\n */\r\n public getDataConnector(namespace: ConnectorNamespaces): Promise> {\r\n // Check for data connector, if it is already present resolve immediately\r\n const dataConnector = this.connector(namespace);\r\n if (dataConnector) {\r\n return Promise.resolve(dataConnector);\r\n }\r\n\r\n // Check if we have an entry for the namespace in pending promise map, if present return the same promise\r\n const pendingPromise = this._getDataConnectorPendingPromises.get(namespace);\r\n if (pendingPromise) {\r\n return pendingPromise.promise;\r\n }\r\n\r\n // If the data connector is not on the page and has no entry in the pending promise map, create a new promise\r\n let resolveCallback: ResolveConnectorSignature;\r\n let rejectCallback: RejectConnectorSignature;\r\n const promise = new Promise>((resolve, reject) => {\r\n // Get the reference to the resolve & reject which can be called later when the data connector is instantiated on the Page\r\n resolveCallback = resolve;\r\n rejectCallback = reject;\r\n });\r\n\r\n // Add the promise to the pending promise map\r\n this._getDataConnectorPendingPromises.set(namespace, { promise: promise, resolve: resolveCallback, reject: rejectCallback });\r\n\r\n // Return the promise\r\n return promise;\r\n }\r\n\r\n /**\r\n * Produces the next state based on the given action. The state to be reduced is an aggregate of the reducers for all of the connectors\r\n * that have been added.\r\n * The overall state looks something like:\r\n * This will be the state for the redux-subspace for the connector. It is of the form:\r\n * {\r\n * FOO: {\r\n * _@STATE@_: {\r\n * \r\n * },\r\n * BAR: {\r\n * _@STATE@_: {\r\n * \r\n * },\r\n * },\r\n * }\r\n * }\r\n * @function\r\n * @param state {any} The previous state of the application. The application state, will contain one or more sub-states, which will be individually reduced\r\n * @param actionPayload {IActionPayload} The action detail to update the state with.\r\n * @returns {any} The next state for the application, containing the next state for each connector (a.k.a subspace)\r\n */\r\n public reduce(state: any, actionPayload: IActionPayload): any {\r\n // If the initial state is undefined, then create an empty object to start with\r\n if (isNullOrUndefined(state)) {\r\n state = {};\r\n }\r\n\r\n let newState = { ...state };\r\n let stateChanged = false;\r\n const connectorKey: string = actionPayload.key;\r\n\r\n // See if we need to reduce for a specific connector. This is the common case.\r\n if (actionPayload !== undefined && connectorKey !== undefined) {\r\n const typeIsString: boolean = typeof actionPayload.type === \"string\";\r\n if (typeIsString && actionPayload.type.endsWith(ConnectorConstants.renderAction)) {\r\n // If this is a special action, used to force a re-render, then we need to set stateChanged to true, and create a clone of the existing scoped state\r\n const statePropertyKey = connectorKey + \".\" + ConnectorConstants.connectorStateKey;\r\n const connectorState = assign({}, get(state, statePropertyKey, undefined));\r\n set(newState, statePropertyKey, connectorState);\r\n stateChanged = true;\r\n } else if (typeIsString && actionPayload.type.endsWith(ConnectorConstants.dataConnectorMergeInitAction)) {\r\n // This is an action meant to set up initial state when an experience injects data connector state into itself.\r\n const experienceFullNamespace: string = connectorKey;\r\n const dataConnectorName: ConnectorNamespaces = actionPayload.params[0];\r\n\r\n if (dataConnectorName) {\r\n dataConnectorInjector.initializeExperience(newState, experienceFullNamespace, dataConnectorName);\r\n stateChanged = true;\r\n }\r\n } else {\r\n const connector = this._connectorMap[connectorKey];\r\n if (connector) {\r\n // If the connector doing the reducing is global, then create a deep copy of state, so that all the connected\r\n // components think the state is new, and run their mappers. Connected components are subscribed to, and only see\r\n // changed in their subspace portion of the state tree. The redux connect implementation uses strict equal comparison,\r\n // meaning it consider the state change if it is a new object reference, even if all the properties are still the same\r\n if (connector.isGlobal) {\r\n newState = merge({}, newState);\r\n }\r\n\r\n const connectorReducerResult = this.computeNextStateForConnector(newState, connectorKey, actionPayload);\r\n stateChanged = connectorReducerResult.stateChanged;\r\n\r\n if (stateChanged) {\r\n // Check to see if any experiences are including this data connector state. If so, update those too.\r\n dataConnectorInjector.reportStateChange(newState, connectorKey, connectorReducerResult.newState);\r\n\r\n if (canUseDOM()) {\r\n reportDataConnectorStateChange(connectorKey, connectorReducerResult.newState);\r\n }\r\n }\r\n } else {\r\n // If connector is not found in the map, throw error immediately during SSR.\r\n if (!canUseDOM()) {\r\n logError(`ConnectorMap for ${connectorKey} is undefined.`, 34006, {});\r\n throw new Error(\"Reducer for: \" + connectorKey + \" must not return undefined.\");\r\n }\r\n }\r\n }\r\n } else {\r\n // Iterate over the full list of connectors calling each reducer. This is not the common case, and is typically done\r\n // for actions that come from Redux, during initialization\r\n Object.keys(this._connectorMap).forEach(key => {\r\n if (this.computeNextStateForConnector(newState, key, actionPayload).stateChanged) {\r\n stateChanged = true;\r\n }\r\n });\r\n }\r\n\r\n // Return the newState, as modified by the reducer(s) if it was changed, otherwise return the original state\r\n if (stateChanged) {\r\n return newState;\r\n } else {\r\n return state;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a sub reducer for a connector to the sub-reducer collection.\r\n * @method\r\n * @param {IDataConnector} connector The connector to add.\r\n */\r\n public addSubReducerForConnector(connector: IDataConnector): void {\r\n if (!connector) {\r\n throw new Error(\"The parameter 'connector' cannot be null.\");\r\n }\r\n\r\n // Add the sub-reducer and connector into their maps, based on the connector's namespace\r\n const key = connector.fullNamespace;\r\n this._connectorMap[key] = connector;\r\n\r\n // update the all and global connector fast lookup lists\r\n this._allConnectors.push(connector);\r\n\r\n if (connector.isGlobal) {\r\n this._globalConnectors.push(connector);\r\n }\r\n\r\n // Check if there is a pending promise for the data connector\r\n // DO NOT CHANGE namespace to fullnamespace, data connectors are supposed to be queried using just the namespace by design.\r\n if (this._getDataConnectorPendingPromises.has(connector.namespace)) {\r\n // Get the resolve callback for the pending promise and resolve it\r\n const pendingPromise = this._getDataConnectorPendingPromises.get(connector.namespace);\r\n\r\n try {\r\n pendingPromise.resolve(connector);\r\n } catch (error) {\r\n pendingPromise.reject(error);\r\n }\r\n\r\n // Delete the entry from the pending promise map\r\n this._getDataConnectorPendingPromises.delete(connector.namespace);\r\n }\r\n\r\n connector.store.dispatch({ key: key, type: \"@@connector-view/INIT\" });\r\n }\r\n\r\n /**\r\n * Helper method to compute the next state for a given connector. This method will get the connector's actual state\r\n * from the state tree, call the reducer, and then state the state in the passed in object that is to receive the new state\r\n * @param {any} state The current subspace (or root) state object, which will be updated\r\n * @param {string} key The key to the connector in the connector map\r\n * @param {IActionPayload} actionPayload The action to apply\r\n * @returns Information on how the connector state was changed\r\n */\r\n private computeNextStateForConnector(state: any, key: string, actionPayload: IActionPayload): ReducerResult {\r\n // Get the connector, so that we can call the reducer\r\n const connector = this._connectorMap[key];\r\n\r\n // Setup the key and get the actual state property for the connector. lodash uses dotted notation\r\n // so the key will be something like: namespace._@STATE@_\r\n const statePropertyKey = key + \".\" + ConnectorConstants.connectorStateKey;\r\n const connectorPreviousState = get(state, statePropertyKey, undefined);\r\n\r\n // Call the reducer for the connector, and validate that we received a state object back.\r\n const nextStateForConnector = this.subReduce(connector.reducer, connectorPreviousState, actionPayload);\r\n if (typeof nextStateForConnector === \"undefined\") {\r\n throw new Error(\"Reducer for: \" + key + \" must not return undefined.\");\r\n }\r\n\r\n // If the state changed, then set the new connector state in the overall state object\r\n const connectorStateChanged: boolean = nextStateForConnector !== connectorPreviousState;\r\n if (connectorStateChanged) {\r\n set(state, statePropertyKey, nextStateForConnector);\r\n }\r\n\r\n return { newState: nextStateForConnector, stateChanged: connectorStateChanged };\r\n }\r\n\r\n /**\r\n * Calls the reducer that has been registered to handle the state associated with a specific subspace\r\n * @param {Reducer} reducer The reducer to call\r\n * @param {TSubReducerState} state The state object for the subreducer\r\n * @param {IActionPayload} actionPayload The action to apply\r\n */\r\n private subReduce(reducer: IReducer, previousState: TSubReducerState, actionPayload: IActionPayload): TSubReducerState {\r\n const reducedState: TSubReducerState = reducer.reduce(previousState, actionPayload);\r\n if (reducedState !== previousState) {\r\n return reducedState;\r\n } else {\r\n return previousState;\r\n }\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { captureJssGeneratedClasses } from \"@msnews/render-cache\";\r\nimport { registerResetCallback } from \"@msnews/core\";\r\n\r\n/**\r\n * Map which is used to store DesignSystem to GenerateClassName Callback.\r\n * Serialized designSystem is used as the key to ensure designSystemIndex is incremented if the designSystem is updated.\r\n * Weakmap is not used as identical designSystem objects should not be treated as different designSystems, an example is PivotContent.tsx progressive hydration.\r\n * Objects potentially garbage collected in WeakMap will also result in designSystemIndexMap being out of sync.\r\n */\r\nlet designSystemMap = new Map();\r\n\r\n/**\r\n * Map which will store number of DesignSystem appearances with same name.\r\n */\r\nlet designSystemIndexMap = new Map();\r\n\r\n/**\r\n * Register a callback to reset the designSystem globals.\r\n * The callback is registered once when the module is loaded and invoked once on the server side at the beginning of each request.\r\n */\r\nregisterResetCallback(() => {\r\n designSystemMap = new Map();\r\n designSystemIndexMap = new Map();\r\n});\r\n\r\n/**\r\n * JSS callback function that defines the class name generation logic\r\n * The default jss manager class name generation logic increments counter based on order\r\n * of how the experiences are rendered. We cannot guarantee the order due to async nature\r\n * of experiences which potentially causes different class names on every reload/refresh.\r\n * Instead here with this callback, we start the counter from 1 per rule to ensure class\r\n * names stays consistent irrespective of when they are rendered.\r\n *\r\n * Design system is taken into account since a change in it can result in potential different\r\n * styling being needed even if that rule was already used in a previous design system.\r\n *\r\n * For example:\r\n * For TopSites, with this override the class name would be generated as \"topSites-DS-default1-1\"\r\n * (jss manager by default would have generated it something like \"topSites-0-1-305\")\r\n * If the design system were to be updated and the same rule would be passed then you would\r\n * get topsites-DS-default2-1.\r\n */\r\nexport function createGenerateClassName(designSystem: any): (rule: any, sheet: any) => string {\r\n if (!designSystem) {\r\n return;\r\n }\r\n\r\n const dsKey = JSON.stringify(designSystem);\r\n let callback = designSystemMap.get(dsKey);\r\n\r\n if (!callback) {\r\n const dsName = designSystem.name || \"unknown\";\r\n const dsIndex = designSystemIndexMap.get(dsName) + 1 || 1;\r\n const rulesMap: any = {};\r\n callback = (rule: any, sheet: any) => {\r\n const key = rule.key;\r\n\r\n if (!rulesMap[key]) {\r\n rulesMap[key] = 1;\r\n } else {\r\n rulesMap[key]++;\r\n }\r\n\r\n const name = `DS-${dsName}${dsIndex}-${rulesMap[key]}`;\r\n captureJssGeneratedClasses(key, name);\r\n\r\n return `${key}-${name}`;\r\n };\r\n\r\n designSystemMap.set(dsKey, callback);\r\n designSystemIndexMap.set(dsName, dsIndex);\r\n }\r\n\r\n return callback;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { Provider, connect } from \"react-redux\";\r\nimport { Store, StoreEnhancer, compose, createStore } from \"redux\";\r\nimport { getPageTimings, logger, perfMarker } from \"@msnews/diagnostics\";\r\n\r\nimport { DynamicReducer } from \"@msnews/experiences-dynamic-reducer\";\r\nimport { IDataConnector } from \"@msnews/experiences-redux-contracts\";\r\nimport { JSSManager } from \"@microsoft/fast-jss-manager-react\";\r\nimport React from \"react\";\r\nimport ReactDom from \"react-dom\";\r\nimport { applyMiddleware } from \"redux-subspace\";\r\nimport { canUseDOM } from \"@msnews/isomorphic-util\";\r\nimport { create } from \"jss\";\r\nimport { createGenerateClassName } from \"./PageHelper\";\r\nimport { getStateFromRenderCache } from \"@msnews/render-cache\";\r\nimport jssGlobal from \"jss-global\";\r\nimport jssNested from \"jss-nested\";\r\n\r\ndeclare global {\r\n interface Window {\r\n\r\n /**\r\n * Enable redux devtools extension debugging\r\n */\r\n __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: any;\r\n\r\n /**\r\n * Boolean flag to indicate if render cache hydration is happening\r\n */\r\n needsHydrate?: boolean;\r\n\r\n /**\r\n * Boolean flag to indicate if state is stored in render cache along with DOM\r\n */\r\n hasPreHydrateState?: boolean;\r\n }\r\n}\r\n\r\n/**\r\n * Page Base.\r\n * Each page or hybrid page/experience must have an instance of the PageBase, which contains the the store, and dynamic reducer\r\n * for the experience/app.\r\n * PageBase is setup as a singleton, so the proper usage in consumers is:\r\n * var pageBase = PageBase.getInstance();\r\n * @export\r\n * @class\r\n */\r\nexport class PageBase {\r\n /**\r\n * The singleton instance of this class\r\n * @type: {PageBase}\r\n */\r\n private static _instance: PageBase;\r\n\r\n /**\r\n * The Dynamic reducer for this app/experience\r\n * @type: {DynamicReducer}\r\n */\r\n private _rootReducer: DynamicReducer;\r\n\r\n /**\r\n * The Redux store containing the top level application state. All component and data connectors will manage namespaced subspaces within\r\n * this store\r\n * @type {Store}\r\n */\r\n private _store: Store;\r\n\r\n /**\r\n * Constructor for PageBase class\r\n * @constructor\r\n * @param {any} initialState Optional initial redux state provided as part of SSR response during hydration\r\n */\r\n private constructor(initialState?: any) {\r\n /**\r\n * In debug build, add the option to turn on redux-devtools-extension debugging.\r\n * More info here https://github.com/zalmoxisus/redux-devtools-extension\r\n */\r\n let enhancer: StoreEnhancer;\r\n const middlewares: any = [];\r\n if (canUseDOM() && ((typeof logger !== \"undefined\") && logger ? logger.isDebug() : false)) {\r\n const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ trace: true, traceLimit: 25 }) || compose;\r\n enhancer = composeEnhancers(applyMiddleware(...middlewares)\r\n );\r\n } else {\r\n enhancer = applyMiddleware(...middlewares);\r\n }\r\n\r\n // Create the root reducer\r\n this._rootReducer = new DynamicReducer();\r\n\r\n // Check to see if this app instance was bootstrapped with a render-cache\r\n initialState = initialState || (canUseDOM() && window.needsHydrate && getStateFromRenderCache()) || {};\r\n if (canUseDOM()) {\r\n window.hasPreHydrateState = !!(initialState && Object.keys(initialState).length !== 0);\r\n }\r\n\r\n // create the store with a basic root reducer\r\n this._store = createStore(this.rootReducer.reduce, initialState, enhancer);\r\n\r\n }\r\n\r\n /**\r\n * Reset PageBase. Useful when handling multiple requests when server side rendering.\r\n */\r\n public static resetPageBaseInstance(initialState?: any): void {\r\n this._instance = new PageBase(initialState);\r\n }\r\n\r\n /**\r\n * Gets the Redux store for this app/experience\r\n * @method\r\n * @returns {Store} The overall state for the App, which contains sub-states for each connector\r\n */\r\n public get store(): Store {\r\n return this._store;\r\n }\r\n\r\n /**\r\n * Gets the root reducer for this app/experience\r\n * @returns {DynamicReducer} The reducer for the app/experience\r\n */\r\n public get rootReducer(): DynamicReducer {\r\n return this._rootReducer;\r\n }\r\n\r\n /**\r\n * Gets the singleton instance of this class for the app/experience\r\n * @returns {PageBase} The instance of PageBase for the page/hybrid experience\r\n */\r\n public static getInstance(initialState?: any): PageBase {\r\n return this._instance || (this._instance = new this(initialState));\r\n }\r\n\r\n /**\r\n * Starts the application by calling the onApplicationStart method for each connector that has been added to the app.\r\n * @function\r\n * @method\r\n */\r\n public start(): void {\r\n // Iterate over all of the connector's and call their OnApplicationStart method\r\n const allConnectors: IDataConnector[] = this.rootReducer.connectors();\r\n allConnectors.forEach(connector => connector.onApplicationStart());\r\n }\r\n\r\n /**\r\n * Creates and renders a root element, that is connected to the store.\r\n * The root element will created with the passed in connected element as a child.\r\n * @function\r\n * @param {React.ReactElement} connectedTopLevelElement The top level rendering element for the page/application.\r\n * @param {HTMLElement} hostElement The host element (usually a
) to contain the msnews-experiences-redux application\r\n * @param {Function} callback An optional callback to be fired after hydration is complete, used when hydrating server side rendered content.\r\n * @param {boolean} bypassJSS To bypass JSSManager instance update set this to false\r\n * @param {Boolean} isSSR An optional flag to signal page is server side rendered and hydration is needed instead of render.\r\n * @method\r\n */\r\n public renderRootElement(\r\n connectedTopLevelElement: React.ReactElement,\r\n hostElement: HTMLElement,\r\n callback?: Function,\r\n bypassJSS?: Boolean,\r\n isSSR?: Boolean): void {\r\n // Update the base JSS manager instance\r\n if (bypassJSS !== true) {\r\n this.updateJssManagerInstance();\r\n }\r\n\r\n // Create a ReactElement, that contains the Redux provider with the store, passing the incoming top level element in as a child, so that\r\n // the pageElement wraps the top level element with the redux store\r\n const rootElement = React.createElement(Provider, { store: this._store }, connectedTopLevelElement);\r\n\r\n // Capture Render cache state in page timings\r\n const pageTimings = getPageTimings();\r\n\r\n if (isSSR) {\r\n pageTimings[\"isRenderCachePresent\"] = 0;\r\n perfMarker.startMark(\"SSR.Hydrate\");\r\n ReactDom.hydrate(rootElement, hostElement, callback);\r\n perfMarker.endMark(\"SSR.Hydrate\");\r\n window.needsHydrate = false;\r\n } else if (window.needsHydrate) {\r\n ReactDom.hydrate(rootElement, hostElement);\r\n pageTimings[\"isRenderCachePresent\"] = 1;\r\n window.needsHydrate = false;\r\n } else {\r\n perfMarker.startMark(\"CSR.Render\");\r\n pageTimings[\"isRenderCachePresent\"] = 0;\r\n ReactDom.render(rootElement, hostElement);\r\n perfMarker.endMark(\"CSR.Render\");\r\n }\r\n }\r\n\r\n /**\r\n * Creates and renders a widget in a provided element, that is connected to the store.\r\n * The root element will created with the passed in connected element as a child.\r\n * @function\r\n * @param widgetElement The rendering element for this experience\\widget.\r\n * @param {HTMLElement} hostElement The host element (usually a
) to contain the msnews-experiences-redux application\r\n * @method\r\n */\r\n public renderWidget(\r\n widgetElement: React.ReactElement,\r\n hostElement: HTMLElement): void {\r\n\r\n const rootElement = React.createElement(Provider, { store: this._store }, widgetElement);\r\n ReactDom.render(rootElement, hostElement);\r\n }\r\n\r\n /**\r\n * Updates the base JSSManager instance with the correct default plugins\r\n */\r\n public updateJssManagerInstance(createGenerateClassNamePlugin?: typeof createGenerateClassName): void {\r\n const jssInstance: ReturnType = create({\r\n plugins: [jssNested(), jssGlobal()]\r\n });\r\n\r\n JSSManager.createGenerateClassName = createGenerateClassNamePlugin || createGenerateClassName;\r\n JSSManager.jss = jssInstance;\r\n }\r\n}\r\n\r\nexport default PageBase;","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { WebStorage } from \"./WebStorage\";\r\nimport { canUseDOM } from \"@msnews/isomorphic-util\";\r\n\r\n/**\r\n * Local storage class for persistent storage\r\n */\r\nexport class LocalStorage extends WebStorage {\r\n constructor() {\r\n let storage: Storage = null;\r\n\r\n if (canUseDOM()) {\r\n try {\r\n storage = localStorage;\r\n } catch (ex) {\r\n // Getting local storage failed. Can happen in Chrome when user has disabled cookies.\r\n }\r\n }\r\n\r\n super(storage);\r\n }\r\n}\r\n\r\n/**\r\n * Set the local storage instance. Useful when setting up mock storage instance.\r\n * @param _storage The local storage instance to change to.\r\n */\r\nexport function setLocalStorage(_storage: WebStorage): void {\r\n safeLocalStorage = _storage;\r\n}\r\n\r\n/**\r\n * Get the local storage instance. This should be used in place of window.localStorage\r\n * as the browser API would throw exception on browsers with cookies disabled.\r\n * @return The local storage instance.\r\n */\r\nexport function getLocalStorage(): WebStorage {\r\n return safeLocalStorage;\r\n}\r\n\r\nlet safeLocalStorage: WebStorage = new LocalStorage();","// © Microsoft Corporation. All rights reserved.\r\n// Provides utility functions to get and set data from browser webStorage.\r\n\r\nimport { tryParseJson } from \"../utilities/Parsing\";\r\nimport { logger } from \"@msnews/diagnostics\";\r\n\r\n/**\r\n * Base class for localeStorage and sessionStorage abstractions\r\n */\r\nexport class WebStorage {\r\n\r\n /**\r\n * Check if the web storage is supported\r\n * @returns {boolean} true if supported\r\n */\r\n public get supported(): boolean {\r\n return !!this.storage;\r\n }\r\n\r\n /**\r\n * Local storage object for persistent storage\r\n * @param storage Storage used.\r\n */\r\n constructor(private readonly storage: Storage) {\r\n }\r\n\r\n /**\r\n * Get given key's value from web storage\r\n * @param {string} key - Key name\r\n * @returns {string} Key value\r\n */\r\n public getItem(key: string): string {\r\n if (this.supported) {\r\n return this.storage.getItem(key);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the value from local storage using the key.\r\n * @param {string} key - the storage key to store under\r\n * @param {T} defaultValue - the default value to return if parsing fails\r\n * @returns {T} The parsed JSON value\r\n */\r\n public getObject(key: string, defaultValue?: T): T {\r\n const value = this.getItem(key);\r\n if (value != null) {\r\n const parsedObj = tryParseJson(value);\r\n if (parsedObj != null) {\r\n return parsedObj;\r\n }\r\n }\r\n\r\n return defaultValue;\r\n }\r\n\r\n /**\r\n * Gets given index location key from web storage\r\n * @param {string} key - Key name\r\n * @returns {string} Key value\r\n */\r\n public key(index: number): string {\r\n if (this.supported && index >= 0) {\r\n return this.storage.key(index);\r\n }\r\n }\r\n\r\n /**\r\n * Sets the given value after stringifying as JSON\r\n * @param {string} key - the storage key to store under\r\n * @param {T} value - the value to serialize and store\r\n */\r\n public setObject(key: string, value: T): void {\r\n (value !== undefined)\r\n ? this.setItem(key, JSON.stringify(value))\r\n : this.removeItem(key);\r\n }\r\n\r\n /**\r\n * Removes the given key from storage and returns the existing value parsed\r\n * @param {string} key - the key to remove.\r\n */\r\n public removeObject(key: string): T {\r\n const value = this.removeItem(key);\r\n if (value != null) {\r\n return tryParseJson(value);\r\n }\r\n }\r\n\r\n /**\r\n * Set given key's value to local storage\r\n * @param {string} key - Key name\r\n * @param {string} value - Key value\r\n */\r\n public setItem(key: string, value: string): void {\r\n if (this.supported) {\r\n // Catch quota exceeded exception\r\n try {\r\n this.storage.setItem(key, value);\r\n } catch (e) {\r\n logger.logError(e);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove key item from local storage\r\n * @param {string} key - Key name\r\n * @returns {string} Key value\r\n */\r\n public removeItem(key: string): string {\r\n if (this.supported) {\r\n const value = this.getItem(key);\r\n this.storage.removeItem(key);\r\n return value;\r\n }\r\n }\r\n\r\n /**\r\n * Removes all keys containing the given substring in the storage key\r\n * @param {string} substring The substring to check\r\n */\r\n public removeSubstringKeys(substring: string): void {\r\n if (!this.supported || !substring) {\r\n return;\r\n }\r\n\r\n const matchingKeys = [];\r\n for (let index = 0; index < this.storage.length; index++) {\r\n const storageKey = this.key(index);\r\n if (storageKey && storageKey.includes(substring)) {\r\n matchingKeys.push(storageKey);\r\n }\r\n }\r\n\r\n for (let index = 0; index < matchingKeys.length; index++) {\r\n this.removeItem(matchingKeys[index]);\r\n }\r\n }\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Enum for different browser types\r\n * @enum\r\n */\r\nexport enum BrowserType {\r\n EdgeChromium = \"edgeChromium\"\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { IClientSettings } from \"./ClientSettings\";\r\nimport { tryParseJson } from \"../utilities/Parsing\";\r\nimport { getLocalStorage } from \"../webstorage\";\r\n\r\n/**\r\n * The response from the HeadData API\r\n */\r\nexport interface HeadDataResponse {\r\n /** The client settings object. */\r\n clientSettings: IClientSettings;\r\n\r\n /** The info string, containing flights. */\r\n info: string;\r\n}\r\n\r\n/**\r\n * Gets the local storage key for the head data.\r\n * @param pagetype The page type of the page used as local storage cache key\r\n */\r\nexport function getStoredHeadDataKey(pagetype: string): string {\r\n return \"shd_\" + pagetype;\r\n}\r\n\r\n/**\r\n * Gets the stored head data, or null if none is stored.\r\n * @param pagetype The page type of the page used as local storage cache key\r\n * @return The stored head data if found, otherwise return null\r\n */\r\nexport function getStoredHeadData(pagetype: string): HeadDataResponse {\r\n const storageKey: string = getStoredHeadDataKey(pagetype);\r\n const storedHeadDataJson: string = getLocalStorage().getItem(storageKey);\r\n return (storedHeadDataJson) ? tryParseJson(storedHeadDataJson) : null;\r\n}\r\n\r\n/**\r\n * Sets the stored head data. Pass in null to clear the stored data.\r\n * @param pagetype The page type of the page used as local storage cache key\r\n * @param headDataResponse The head data response from api call to be set to local storage\r\n */\r\nexport function setStoredHeadData(pagetype: string, headDataResponse: HeadDataResponse) {\r\n const storageKey: string = getStoredHeadDataKey(pagetype);\r\n\r\n if (headDataResponse) {\r\n getLocalStorage().setItem(storageKey, JSON.stringify(headDataResponse));\r\n } else {\r\n getLocalStorage().removeItem(storageKey);\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { canUseDOM, getDocumentElementsByTagName, getLocationSearch, getLocationHostname } from \"@msnews/isomorphic-util\";\r\nimport { applicationCacheConstants, clientSettings, dir, htmlElementIds, info, js, lang, pagetypeSettings, CoreLocalStorageKeys } from \"../constants\";\r\n\r\nimport { IClientSettings } from \"./ClientSettings\";\r\nimport { AudienceModeType, BrowserType } from \"@msnews/experiences-constants\";\r\nimport { WebClientData } from \"../types/WebClientData\";\r\nimport { UrlUtility } from \"../utilities/UrlUtility\";\r\nimport { getLocalStorage } from \"../webstorage\";\r\nimport { tryParseJson } from \"../utilities/Parsing\";\r\nimport { KeyValueArray } from \"../utilities\";\r\nimport { logger, updateAppErrorsPropertyBag } from \"@msnews/diagnostics\";\r\nimport { parseISO } from \"date-fns\";\r\nimport { getStoredHeadData, setStoredHeadData, HeadDataResponse } from \"./StoredHeadData\";\r\nimport { eNtpChromiumVersion } from \"./Enterprise\";\r\n\r\n/**\r\n * Format used for activity ID stored in storage\r\n */\r\nexport type StoredActivityId = {\r\n /**\r\n * ID value\r\n */\r\n id: string;\r\n\r\n /**\r\n * Timestamp of when value was stored\r\n */\r\n ts: number;\r\n};\r\n\r\nexport const MmxWwwContentFlightId = \"prg-mmxcontent-t\";\r\n\r\n/** Type for storing app versions for different page types */\r\nexport type PageAppVersions = { [pageType: string]: string };\r\n\r\n/**\r\n * Class for getting the head data information.\r\n */\r\nclass HeadData {\r\n /**\r\n * The single instance of the HeadData class.\r\n * @type {HeadData}\r\n */\r\n private static _instance: HeadData;\r\n\r\n private anonCookieName: string;\r\n private locale: string;\r\n private marketDir: string;\r\n private currentFlights: string;\r\n private currentFlightSet: Set;\r\n private clientSettings: IClientSettings;\r\n private enableCMSPPEConfigs = false;\r\n private userIsSignedIn: boolean; // Always signed out on server side: https://dev.azure.com/microsoft/OS/_workitems/edit/25344027\r\n private isPreload: boolean;\r\n private isPrerender: boolean;\r\n private headElement: any;\r\n private htmlElement: any;\r\n private applicationCache: any;\r\n private isAppcache: boolean;\r\n private isBlendedEnterprise: boolean;\r\n private isMmxWwwContentRequest: boolean;\r\n private isServiceWorkerCache: boolean;\r\n private ssoComplete: boolean;\r\n private aadState: boolean;\r\n private locationSearch: string;\r\n private lastKnownAppVersion: string;\r\n\r\n // TODO: Task 24890741: refactor this class to use the current singleton pattern with ES6 modules\r\n // This will also clean up these getters/setters\r\n public get Locale(): string { return this.locale; }\r\n\r\n public get MarketDir(): string { return this.marketDir; }\r\n public set MarketDir(value: string) { this.marketDir = value; }\r\n\r\n public get CurrentFlights(): string { return this.currentFlights || \"\"; }\r\n public set CurrentFlights(value: string) {\r\n this.currentFlights = value;\r\n this.currentFlightSet = new Set((value || \"\").split(\",\"));\r\n }\r\n\r\n public get CurrentFlightSet(): Set { return this.currentFlightSet; }\r\n\r\n public get ClientSettings(): IClientSettings { return this.clientSettings; }\r\n public set ClientSettings(value: IClientSettings) { this.clientSettings = value; }\r\n\r\n public get EnableCMSPPEConfigs(): boolean { return this.enableCMSPPEConfigs; }\r\n\r\n public get UserIsSignedIn(): boolean { return this.userIsSignedIn; }\r\n public set UserIsSignedIn(value: boolean) { this.userIsSignedIn = value; }\r\n\r\n public get IsPreload(): boolean { return this.isPreload; }\r\n public set IsPreload(value: boolean) { this.isPreload = value; }\r\n\r\n public get IsPrerender(): boolean { return this.isPrerender; }\r\n public set IsPrerender(value: boolean) { this.isPrerender = value; }\r\n\r\n public get IsAppCache(): boolean { return this.isAppcache; }\r\n\r\n public get IsBlendedEnterprise(): boolean { return this.isBlendedEnterprise; }\r\n public set IsBlendedEnterprise(value: boolean) { this.isBlendedEnterprise = value; }\r\n\r\n public get IsMmxWwwContentRequest(): boolean { return this.isMmxWwwContentRequest; }\r\n public set IsMmxWwwContentRequest(value: boolean) { this.isMmxWwwContentRequest = value; }\r\n\r\n public get IsServiceWorkerCache(): boolean { return this.isServiceWorkerCache; }\r\n\r\n /**\r\n * The last known app version for the currently loaded page type.\r\n * To get the current page version, use clientSettings.bundleInfo.v value.\r\n */\r\n public get LastKnownAppVersion(): string { return this.lastKnownAppVersion; }\r\n\r\n // TODO: Dependencies that some client side code expects headData to specify but doesn't due to PCS\r\n public get AnonCookieName(): string { return this.anonCookieName; }\r\n public set AnonCookieName(value: string) { this.anonCookieName = value; }\r\n\r\n public get SsoComplete(): boolean { return this.ssoComplete; }\r\n\r\n public get AadState(): boolean { return this.aadState; }\r\n public set AadState(value: boolean) { this.aadState = value; }\r\n\r\n public set LocaleName(value: string) { this.locale = value; }\r\n\r\n /**\r\n * True if we need to generate a new RID for telemetry.\r\n * In normal scenarios the ActivityID and telemetry RID will match. But sometimes we are unable to refresh the head data\r\n * to get a new activity ID. In those cases we need to generate a fresh RID for telemetry, and the ActivityID and RID will\r\n * not match.\r\n */\r\n public newRidNeeded: boolean;\r\n\r\n /**\r\n * Initialize the head data instance, on server side provide the client info & client settings\r\n * @param {WebClientData} clientData Data object containing both client info and settings\r\n */\r\n private constructor(clientData?: WebClientData) {\r\n this.initializeHeadData(clientData);\r\n }\r\n\r\n /**\r\n * Returns singleton class instance.\r\n * @returns {HeadData}\r\n */\r\n public static getInstance(): HeadData { return HeadData._instance || (HeadData._instance = new HeadData()); }\r\n\r\n /**\r\n * Reset singleton class instance with passed in info and client settings. Used on server side to reset HeadData for each request.\r\n * @param {WebClientData} clientData Data object containing both client info and settings\r\n * @returns {HeadData}\r\n */\r\n public static resetInstance(clientData?: WebClientData): HeadData {\r\n HeadData._instance = new HeadData(clientData);\r\n headData = HeadData._instance;\r\n return HeadData._instance;\r\n }\r\n\r\n /**\r\n * Initializes head data. If WebClientData is provided use that, otherwise do client side initialization.\r\n * @param {WebClientData} clientData - Data object containing both client info and settings\r\n */\r\n public initializeHeadData(clientData?: WebClientData): void {\r\n if (clientData) {\r\n // Data is passed in only from Render Service under Node.JS environment since there is no DOM.\r\n this.initializeFromData(clientData);\r\n return;\r\n }\r\n\r\n this.newRidNeeded = undefined;\r\n this.lastUsedActivityIdBacking = undefined;\r\n this.locationSearch = getLocationSearch();\r\n this.htmlElement = canUseDOM() ? getDocumentElementsByTagName(htmlElementIds.html)[0] : null;\r\n this.headElement = canUseDOM() ? getDocumentElementsByTagName(htmlElementIds.head)[0] : null;\r\n this.applicationCache = canUseDOM() ? window.applicationCache : null;\r\n\r\n if (!this.htmlElement || !this.headElement) {\r\n return;\r\n }\r\n\r\n // We always initialize from DOM first because\r\n // even if we are in an appcache/service worker case, we still need some data from the DOM\r\n // and we will fallback to DOM if there are no items found in storage\r\n this.initializeFromDom();\r\n\r\n // Attempt to override with local storage item when in appcache scenario\r\n // In service worker scenario, just update the storage activity id\r\n if (this.applicationCache && this.htmlElement.getAttribute(applicationCacheConstants.manifestAttributeName)) {\r\n this.isAppcache = true;\r\n } else if (window && window.navigator && window.navigator.serviceWorker && window.navigator.serviceWorker.controller) {\r\n this.isServiceWorkerCache = true;\r\n }\r\n\r\n if (this.isAppcache || this.isServiceWorkerCache) {\r\n // First apply head data from local storage. This might change the AID\r\n this.initializeFromStorage();\r\n\r\n // Now update last used activity ID based on the current activity ID\r\n this.initializeLastUsedActivityId();\r\n }\r\n\r\n // Below items are common for both scenarios\r\n const clientSettingsLocaleExists = this.clientSettings && this.clientSettings.locale && this.clientSettings.locale.language && this.clientSettings.locale.market;\r\n this.locale = clientSettingsLocaleExists &&\r\n (\r\n this.clientSettings.locale.language\r\n + \"-\"\r\n + (this.clientSettings.locale.script ? this.clientSettings.locale.script + \"-\" : \"\")\r\n + this.clientSettings.locale.market\r\n ).toLowerCase() || \"\";\r\n\r\n const marketDir = this.htmlElement.getAttribute(dir);\r\n this.marketDir = marketDir && marketDir.toLocaleLowerCase() || \"\";\r\n\r\n this.setQueryItemProvidedValues();\r\n\r\n // Note: This isn't currently being stamped by PCS\r\n const headDataJs = this.headElement.getAttribute(js);\r\n if (headDataJs) {\r\n const headJs = <{ anonckname: string, signedin: number }>tryParseJson(headDataJs);\r\n this.anonCookieName = headJs.anonckname;\r\n this.userIsSignedIn = headJs.signedin === 1;\r\n }\r\n\r\n // Checks if current request is background preload\r\n if (UrlUtility.getQueryParameterByName(\"backgroundpreload\", this.locationSearch)\r\n && document.visibilityState === \"hidden\") {\r\n this.isPreload = true;\r\n this.logDocumentVisibility();\r\n }\r\n\r\n // Checks if current request is prerender request\r\n if (UrlUtility.getQueryParameterByName(\"prerender\", this.locationSearch)\r\n && document.visibilityState === \"hidden\") {\r\n this.isPrerender = true;\r\n this.logDocumentVisibility();\r\n }\r\n\r\n // Determine if we are in Enterprise version or not\r\n this.setIsBlendedEnterprise();\r\n this.setIsMmxWwwContentRequest();\r\n }\r\n\r\n private lastUsedActivityIdBacking: StoredActivityId;\r\n\r\n /**\r\n * Gets the last used activity ID, or null if there is none stored.\r\n */\r\n public get lastUsedActivityId(): StoredActivityId {\r\n if (this.lastUsedActivityIdBacking) {\r\n return this.lastUsedActivityIdBacking;\r\n }\r\n\r\n const storageKey: string = this.getStoredActivityIdKey();\r\n const storedActivityIdJson: string = getLocalStorage().getItem(storageKey);\r\n if (storedActivityIdJson) {\r\n this.lastUsedActivityIdBacking = tryParseJson(storedActivityIdJson);\r\n }\r\n\r\n return this.lastUsedActivityIdBacking;\r\n }\r\n\r\n /**\r\n * Sets the last used activity ID. Pass in null to clear the stored data.\r\n */\r\n public set lastUsedActivityId(activityId: StoredActivityId) {\r\n const storageKey: string = this.getStoredActivityIdKey();\r\n if (activityId) {\r\n if (activityId.id && activityId.ts) {\r\n getLocalStorage().setItem(storageKey, JSON.stringify(activityId));\r\n this.lastUsedActivityIdBacking = activityId;\r\n }\r\n } else {\r\n getLocalStorage().removeItem(storageKey);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the stored head data, or null if none is stored.\r\n */\r\n public get storedHeadData(): HeadDataResponse {\r\n return getStoredHeadData(this.clientSettings.pagetype);\r\n }\r\n\r\n /**\r\n * Sets the stored head data. Pass in null to clear the stored data.\r\n */\r\n public set storedHeadData(headDataResponse: HeadDataResponse) {\r\n setStoredHeadData(this.clientSettings.pagetype, headDataResponse);\r\n }\r\n\r\n /**\r\n * Initializes the client settings and info from client data passed in externally (render service query param)\r\n * @param {WebClientData} clientData Data object containing both client info and settings\r\n */\r\n private initializeFromData(clientData: WebClientData): void {\r\n this.clientSettings = clientData.clientSettings;\r\n\r\n this.setFlights(clientData.clientInfo);\r\n\r\n this.setQueryItemProvidedValues();\r\n\r\n const clientSettingsLocaleExists = this.clientSettings && this.clientSettings.locale && this.clientSettings.locale.language && this.clientSettings.locale.market;\r\n this.locale = clientSettingsLocaleExists &&\r\n (\r\n this.clientSettings.locale.language\r\n + \"-\"\r\n + (this.clientSettings.locale.script ? this.clientSettings.locale.script + \"-\" : \"\")\r\n + this.clientSettings.locale.market\r\n ).toLowerCase() || \"\";\r\n this.marketDir = clientData.marketDir && clientData.marketDir.toLocaleLowerCase() || \"\";\r\n\r\n // Determine if we are in Enterprise version or not\r\n this.setIsBlendedEnterprise();\r\n this.setIsMmxWwwContentRequest();\r\n }\r\n\r\n /**\r\n * Initializes the client settings and info from DOM element\r\n */\r\n private initializeFromDom(): void {\r\n\r\n this.setFlights(this.headElement.getAttribute(info));\r\n\r\n const dataClientSettings = this.headElement.getAttribute(clientSettings);\r\n if (!dataClientSettings) {\r\n return;\r\n }\r\n\r\n this.clientSettings = tryParseJson(dataClientSettings);\r\n if (!this.clientSettings) {\r\n return;\r\n }\r\n\r\n this.calculateForwardableParams();\r\n const { pagetype } = this.clientSettings;\r\n\r\n // If clientSettings.pagetype does not exist, try getting from data-pagetype.\r\n // For Peregrine full spa page: pagetype is part of data-client-settings. There is no data-pagetype.\r\n // For Prime/Hybrid, pagetype is outside of data-client-settings and it belongs to data-pagetype\r\n if (!pagetype) {\r\n const pageTypeFromSettings = this.headElement.getAttribute(pagetypeSettings);\r\n this.clientSettings.pagetype = pageTypeFromSettings == null ? undefined : pageTypeFromSettings;\r\n }\r\n\r\n // try to get the previously store page version from local storage for this page type,\r\n // and store back the current version\r\n if (pagetype) {\r\n try {\r\n const storedVersions = getLocalStorage().getObject(CoreLocalStorageKeys.pageVersions) || {};\r\n this.lastKnownAppVersion = storedVersions[pagetype];\r\n\r\n // update the dictionary with the new value if different, and store it back to local storage\r\n const { bundleInfo: currentDomVersion } = this.clientSettings;\r\n if (currentDomVersion && this.lastKnownAppVersion !== currentDomVersion.v) {\r\n storedVersions[pagetype] = currentDomVersion.v;\r\n getLocalStorage().setObject(CoreLocalStorageKeys.pageVersions, storedVersions);\r\n }\r\n } catch {\r\n logger.log(`${this.logPrefix()} couldn't complete local storage related operation.`);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Initializes headData client settings and info from the value found in storage\r\n * and if none is found, falls back to using the DOM element\r\n */\r\n private initializeFromStorage(): void {\r\n const currentPageStoredHeadData = this.storedHeadData;\r\n\r\n if (currentPageStoredHeadData) {\r\n this.populateFromApiResponse(currentPageStoredHeadData);\r\n }\r\n }\r\n\r\n /**\r\n * Populates fields based on a HeadData API response.\r\n * @param response The response to populate from.\r\n */\r\n private populateFromApiResponse(response: HeadDataResponse) {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n const responseClientSettings = response.clientSettings;\r\n const responseFlights = response.info;\r\n\r\n // The stored head data is corrupt, bail\r\n if (!responseClientSettings || !responseFlights) {\r\n return;\r\n }\r\n\r\n // If DOM page gen time is later than response page gen time, bail. We don't want to load stale head data from storage.\r\n if (this.clientSettings.pageGenTime >= responseClientSettings.pageGenTime) {\r\n // Purge obsolete stored head data.\r\n this.storedHeadData = null;\r\n return;\r\n }\r\n\r\n // Hold on to the current DOM queryparams as we will need to override\r\n // what we get from what is in storage\r\n const domQueryParams = this.clientSettings.queryparams;\r\n\r\n // save the current version if available in a temp variable so we can\r\n // restore it back after updating the clientSettings object with the one from\r\n // storage (which came from head data API, which does not contain the version info\r\n // by design, because version is tied with the static bundles, which should represent the currently\r\n // loaded page.\r\n const currentPageVersion = this.clientSettings && this.clientSettings.bundleInfo && this.clientSettings.bundleInfo.v;\r\n this.clientSettings = responseClientSettings;\r\n\r\n // restore the version after the object update\r\n this.clientSettings.bundleInfo = Object.assign(this.clientSettings.bundleInfo || {}, { v: currentPageVersion });\r\n\r\n // restore the queryParams base on what is found in DOM\r\n // as we want the DOM value to be what is used\r\n // and not what is found in storage for this field\r\n // We want these to stay true to what PCS generated for the page\r\n // and avoid desync when reading what comes from future headData API calls.\r\n this.clientSettings.queryparams = domQueryParams;\r\n this.calculateForwardableParams();\r\n\r\n this.setFlights(responseFlights);\r\n }\r\n\r\n /**\r\n * Initializes the queryparams from parameters\r\n */\r\n private calculateForwardableParams() {\r\n const params = this.clientSettings ? this.clientSettings.queryparams : \"\";\r\n if (!params) {\r\n return;\r\n }\r\n const forwardableParams = [\"fdhead\", \"item\"];\r\n const lowerCaseParams = params.toLocaleLowerCase();\r\n const availableParams = forwardableParams.map((key) => {\r\n const paramValue = UrlUtility.getQueryParameterByName(key, lowerCaseParams);\r\n if (!paramValue) {\r\n return null;\r\n }\r\n return `${key}=${encodeURIComponent(paramValue)}`;\r\n }).filter(x => x);\r\n this.clientSettings.forwardablequeryparams = availableParams.join(\"&\");\r\n }\r\n\r\n /**\r\n * Initializes the \"newRidNeeded\" value based on the page generation time and last used activity ID timestamp.\r\n * Updates the stored \"last used activity ID\"\r\n */\r\n private initializeLastUsedActivityId() {\r\n // Read the \"last used activity ID\"\r\n const lastUsedAid = this.lastUsedActivityId;\r\n\r\n // The activity ID that the page is currently planning on using. This may have been embedded or it may have been loaded up from stored head data.\r\n const currentAid = this.clientSettings.aid;\r\n const pageGenTimeDate: Date = parseISO(this.clientSettings.pageGenTime);\r\n const pageGenTimestamp: number = pageGenTimeDate.getTime();\r\n\r\n // Three conditions need to be met to generate a new RID\r\n // 1) The user has stored a previously used activity ID\r\n // 2) We have a valid page generation timestamp from PCS. PCS embeds pageGenTimestamp in the client settings to tell us\r\n // when it ran and generated the page. This will not be the case for localhost requests because they do not use PCS and instead\r\n // use a static App.html file. For localhost we do not need to generate a new RID.\r\n // 3) The current ActivityId matches the previously used one\r\n this.newRidNeeded = !!(lastUsedAid && pageGenTimestamp && lastUsedAid.id === currentAid);\r\n\r\n // If we have a proper timestamp and it's more recent than the last stored one\r\n if (pageGenTimestamp && (!lastUsedAid || pageGenTimestamp > lastUsedAid.ts)) {\r\n // Store the current activity ID as last used.\r\n this.lastUsedActivityId = { id: currentAid, ts: pageGenTimestamp };\r\n }\r\n }\r\n\r\n /**\r\n * Parses flights from provided string (if in proper format of f:{flights})\r\n * and sets it to the headData object\r\n */\r\n private setFlights(flightString: string): void {\r\n // The comma separated list of flights enabled in current request\r\n this.currentFlights = ((/f:\\s*([^;]+)/i.exec(flightString) || {})[1] || \"\").toLowerCase();\r\n\r\n // Set flights set\r\n this.currentFlightSet = new Set((this.currentFlights).split(\",\"));\r\n }\r\n\r\n /**\r\n * Determines if we are in the blended Enterprise version based on clientSettings and currentFlights\r\n */\r\n private setIsBlendedEnterprise(): void {\r\n // We know we are in the Enterprise version of the page when both the audience mode is set to Enterprise\r\n // & the browser is edgeChromium, version >= 87\r\n this.IsBlendedEnterprise = this.clientSettings &&\r\n this.clientSettings.audienceMode === AudienceModeType.Enterprise &&\r\n this.clientSettings.browser &&\r\n this.clientSettings.browser.browserType === BrowserType.EdgeChromium &&\r\n parseInt(this.clientSettings.browser.version as string) >= eNtpChromiumVersion;\r\n }\r\n\r\n /**\r\n * Determines if we are in Www content version based on clientSettings and currentFlights\r\n */\r\n private setIsMmxWwwContentRequest(): void {\r\n this.isMmxWwwContentRequest = this.currentFlights && this.currentFlights.includes(MmxWwwContentFlightId);\r\n }\r\n\r\n /**\r\n * Read query items to determine the headdata variable values.\r\n */\r\n private setQueryItemProvidedValues(): void {\r\n // This only finds multiples of item=key:value qsp. If keys are the same, first given will be used (similar to UrlSearchParamsHelper).\r\n const queryItems = UrlUtility.getParamsWithItems(getLocationSearch());\r\n const cmsItem = queryItems.find(item => item.key === \"cms\");\r\n this.enableCMSPPEConfigs = (cmsItem && cmsItem.value === \"ppe\");\r\n\r\n // Test override to add flights for scope purposes\r\n this.setCurrentFlightsTestOverride(queryItems);\r\n }\r\n\r\n /**\r\n * Overrides currentFlights when hostname is localhost. Used for testing.\r\n */\r\n private setCurrentFlightsTestOverride(queryItems: KeyValueArray): void {\r\n if (getLocationHostname().toLowerCase().includes(\"localhost\") && queryItems) {\r\n const flights = queryItems.find(item => item.key === \"flights\");\r\n if (flights) {\r\n this.currentFlights = flights.value;\r\n\r\n // Set flights set\r\n this.currentFlightSet = new Set((this.currentFlights).split(\",\"));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the local storage key for the head data.\r\n */\r\n private getStoredActivityIdKey(): string {\r\n return \"sai_\" + this.clientSettings.pagetype;\r\n }\r\n\r\n /**\r\n * Prefix for headdata logs. Server side add the head and html elements.\r\n * @returns the prefix string for logger message.\r\n */\r\n private logPrefix(): string {\r\n // Request Id is only available on server side.\r\n return `HeadData:${(canUseDOM() ? \"\" : ` [Head:${this.headElement}] and [Html:${this.htmlElement}]`)}`;\r\n }\r\n\r\n /**\r\n * Updates AppError property bag with document visibility and adds event listener for visibility change\r\n */\r\n private logDocumentVisibility(): void {\r\n if (!canUseDOM()) {\r\n return;\r\n }\r\n\r\n updateAppErrorsPropertyBag({ isVisible: document.visibilityState === \"visible\" });\r\n\r\n document.addEventListener(\"visibilitychange\", () => {\r\n updateAppErrorsPropertyBag({ isVisible: document.visibilityState === \"visible\" });\r\n });\r\n }\r\n}\r\n\r\nexport const getHeadData = HeadData.getInstance;\r\n\r\n// headData can be reinitialized through resetHeadData.\r\nexport let headData = HeadData.getInstance();\r\n\r\n/**\r\n * Export function to reset headData based on WebClientData\r\n */\r\nexport const resetHeadData = HeadData.resetInstance;","// © Microsoft Corporation. All rights reserved.\r\n\r\nexport enum ErrorBehavior {\r\n /** This app error can trigger exceptional behavior */\r\n Exceptional,\r\n\r\n /** This app error can trigger fallback behavior */\r\n Fallback\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { toNumber as _toNumber, isString } from \"lodash-es\";\r\n\r\nexport type KeyValuePair = { key: K, value: V };\r\nexport type KeyValueArray = KeyValuePair[];\r\n\r\nexport namespace Utility {\r\n /**\r\n * Check if given value is not null. Returns true when not null, otherwise false.\r\n *\r\n * @export\r\n * @param {any} value - Value to check for not null\r\n * @return {boolean}\r\n */\r\n export function isNotNullOrUndefined(value: any): boolean {\r\n return typeof value !== \"undefined\" && value !== null;\r\n }\r\n\r\n export interface IHashable {\r\n /**\r\n * This function will return the string representation of the complex object\r\n * @type {function}\r\n */\r\n toString(): string;\r\n }\r\n\r\n /**\r\n * Check if given value is defined. Returns true when defined, otherwise false.\r\n *\r\n * @export\r\n * @param {any} value - Value to check for defined\r\n * @return {boolean}\r\n */\r\n export function isDefined(value: any): boolean {\r\n return (typeof value !== \"undefined\");\r\n }\r\n\r\n /**\r\n * Check if a given value is a valid key value pair\r\n *\r\n * @export\r\n * @param potentialKeyValuePair\r\n * @return {boolean}\r\n */\r\n export function isKeyValuePair(potentialKeyValuePair: { key: K, value: V },\r\n isKey: (key: K) => boolean,\r\n isValue: (value: V) => boolean): boolean {\r\n return Utility.isNonNullObject(potentialKeyValuePair)\r\n && isKey(potentialKeyValuePair.key)\r\n && isValue(potentialKeyValuePair.value);\r\n }\r\n\r\n /**\r\n * Check if given value is a non null object. Returns true when value is non null , otherwise false.\r\n *\r\n * @export\r\n * @param {any} value - Value to check for non null\r\n * @return {boolean}\r\n */\r\n export function isNonNullObject(value: any): boolean {\r\n return value && typeof value === \"object\";\r\n }\r\n\r\n /**\r\n * Check if given value is not null. Returns true when not null, otherwise false.\r\n *\r\n * @export\r\n * @param {any} value - Value to check for not null\r\n * @return {boolean}\r\n */\r\n export function isNotNull(value: any): boolean {\r\n return value !== null;\r\n }\r\n\r\n /**\r\n * Check if given value is a a non-null or non-empty string. Returns true when it is, otherwise false.\r\n *\r\n * @export\r\n * @param {string} value - Value to check for string\r\n * @return {boolean}\r\n */\r\n export function isNullOrWhiteSpace(value: string): boolean {\r\n return !isString(value) || value.trim() === \"\";\r\n }\r\n\r\n /**\r\n * Converts string to number\r\n *\r\n * @export\r\n * @param {string} value - string to convert to a number\r\n * @param {number} defaultValue - number to return if there is an error\r\n * @return {number}\r\n */\r\n export function toNumber(value: string, defaultValue = -1): number {\r\n if (!value) {\r\n return defaultValue;\r\n }\r\n\r\n const result = _toNumber(value);\r\n if (!isNaN(result)) {\r\n return result;\r\n } else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n /**\r\n * Check if given value is an array with content in it.\r\n * Returns true when value is an array with content, otherwise false.\r\n *\r\n * @export\r\n * @param {any[]} value - Value to check for array with content\r\n * @return {boolean}\r\n */\r\n export function arrayHasData(value: any[]): boolean {\r\n if (isNotNullOrUndefined(value)) {\r\n return ((value.constructor === Array) && (value.length > 0));\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Check if given value is a string with content in it.\r\n * Returns true when value is a string with content, otherwise false.\r\n *\r\n * @export\r\n * @param {string} value - Value to check for string with content\r\n * @return {boolean}\r\n */\r\n export function stringHasData(value: string): boolean {\r\n return (isString(value) && (value.trim().length > 0));\r\n }\r\n\r\n /**\r\n * Convert object to string representation for it's values.\r\n * @param {object} object - The object to convert\r\n * @returns {string}\r\n */\r\n export function objectToString(object: object): string {\r\n let value = \"\";\r\n let firstRun = true;\r\n\r\n if (typeof object !== \"object\") {\r\n return value;\r\n }\r\n\r\n for (const attribute in object) {\r\n if (typeof object[attribute] === \"object\") {\r\n value += firstRun ? `${objectToString(object[attribute])}` : `-${objectToString(object[attribute])}`;\r\n } else {\r\n value += firstRun ? `${object[attribute]}` : `-${object[attribute]}`;\r\n }\r\n\r\n firstRun = false;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Helper function to replace hyphens with empty strings\r\n *\r\n * @param {string} input - Input string\r\n * @returns {string}\r\n */\r\n export function removeHyphens(input: string): string {\r\n if (!input) {\r\n return;\r\n }\r\n return input.replace(/-/g, \"\");\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { AppError, AppErrorPropertyBag, ErrorBehavior, Severity } from \"@msnews/core-contracts\";\r\n\r\n/**\r\n * All app errors are set to create IcM ticket by default unless specified in individual error code otherwise.\r\n */\r\nconst severity = Severity.Alert;\r\n\r\n/**\r\n * Build number is only passed in from updateResolverAppErrorsPropertyBag on page initialization\r\n */\r\nconst pb: AppErrorPropertyBag = {\r\n build: \"\"\r\n};\r\n\r\n/**\r\n * Append or update property bag properties. At page level intialization, this should be called to update the build number.\r\n * Since all app error objects has reference to this base property bag, calling this method will in fact update for all app errors.\r\n * @param newPbInfo Additional information needed for app error property bag\r\n */\r\nexport function updateResolverAppErrorsPropertyBag(newPbInfo: Partial): void {\r\n Object.assign(pb, newPbInfo);\r\n}\r\n\r\n/**\r\n * Getter for the base app error property bag. Currently only used in unit test\r\n */\r\nexport function getResolverAppErrorsPropertyBag(): AppErrorPropertyBag {\r\n return pb;\r\n}\r\n\r\nconst resolverSourceFile = \"ConfigService.ts\";\r\nexport const ResolverAppErrors = {\r\n /**\r\n * IndexedDb write failed in resolver.\r\n */\r\n IndexedDbWriteFailed: {\r\n id: 22010,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * IndexedDb read failed in resolver.\r\n */\r\n IndexedDbReadFailed: {\r\n id: 22011,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Config Service Resolver fetch errors.\r\n */\r\n CrsFetchError: {\r\n id: 22012,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Config Service Resolver was enabled but we still went to Assets to getConfig and merge configs at client (classic resolver).\r\n */\r\n ReceivedConfigFromCdnAsCrsFetchFailed: {\r\n id: 22013,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Exception In GetConfig function.\r\n */\r\n GetConfigException: {\r\n id: 22014,\r\n source: resolverSourceFile,\r\n severity: Severity.Critical,\r\n pb\r\n },\r\n\r\n /**\r\n * IndexedDb bulk read failed in resolver.\r\n */\r\n IndexedDbBulkReadFailed: {\r\n id: 22015,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * IndexedDb failed to remove cached config\r\n */\r\n IndexedDbFailedToRemoveCachedConfig: {\r\n id: 22016,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * IndexedDb failed to clear all configs\r\n */\r\n IndexedDbFailedToClearAllCachedConfigs: {\r\n id: 22017,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Render cache is purged due to changes in config\r\n */\r\n RenderCachePurgedDueToChangesInConfig: {\r\n id: 22018,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Render cache failed purge even though config changes were detected.\r\n */\r\n FailedToPurgeRenderCache: {\r\n id: 22019,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Failed to refresh config cache\r\n */\r\n RefreshConfigCacheFailed: {\r\n id: 22020,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Failed to initialize indexedDb\r\n */\r\n IndexedDbInitFailed: {\r\n id: 22021,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Different cache busting identifier\r\n */\r\n DifferentCbid: {\r\n id: 22022,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error writing prg flights to localStorage\r\n */\r\n PrgFlightLsWriteError: {\r\n id: 22023,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error reading prg flights to localStorage\r\n */\r\n PrgFlightLsReadError: {\r\n id: 22024,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * Configs served from CDN after CRS fetch failed\r\n */\r\nexport const ResolverErrorConfigsDownloadedByCdn: AppError = {\r\n id: 22025,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Cached configs are for different flight\r\n */\r\nexport const CachedConfigsForDifferentFlight: AppError = {\r\n id: 22026,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * CRS sent non-200 response\r\n */\r\nexport const ConfigCrsFetchNon200Response: AppError = {\r\n id: 22027,\r\n source: resolverSourceFile,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\n/**\r\n * Cdn config fetch received non-200 response\r\n */\r\nexport const ConfigCdnFetchNon200Response: AppError = {\r\n id: 22028,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Invalid config ref received to resolve configs when Git configs is enabled\r\n */\r\nexport const GitConfigsInvalidConfigRef: AppError = {\r\n id: 22029,\r\n source: resolverSourceFile,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\n/**\r\n * Invalid configResolver object for Git configs flight\r\n */\r\nexport const GitConfigsInvalidConfigResolver: AppError = {\r\n id: 22030,\r\n source: resolverSourceFile,\r\n severity: Severity.Critical,\r\n pb\r\n};\r\n\r\n/**\r\n * Config Service Resolver timeout.\r\n */\r\nexport const CrsFetchTimeout: AppError = {\r\n id: 22031,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Starts from 22050 */\r\nexport const FallbackResolverAppErrors = {\r\n /**\r\n * getConfigRecursive function try catch failed.\r\n */\r\n RecursiveGetFailed: {\r\n id: 22050,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * BlobFetcher fetch failed for configs or config index.\r\n */\r\n BlobFetchReturnedNull: {\r\n id: 22051,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * Error that when Server Cache config refresh failed\r\n */\r\nexport const ServerCacheRefreshFailed: AppError = {\r\n id: 34009,\r\n source: \"SsrResolver.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Error that when SSR failed to getConfig.\r\n */\r\nexport const ServerCacheFetchFailed: AppError = {\r\n id: 34005,\r\n source: \"SsrResolver.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * SSR config resolver returned null config\r\n */\r\nexport const SsrResolverReturnedNullConfig: AppError = {\r\n id: 34011,\r\n source: \"SsrResolver.ts\",\r\n severity: Severity.HighImpact,\r\n pb\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { canUseDOM } from \"@msnews/isomorphic-util\";\r\n\r\nconst pageTimings = canUseDOM() ? (window._pageTimings || (window._pageTimings = {})) : {};\r\nconst secondaryPageTimings = canUseDOM() ? (window._secondaryPageTimings || (window._secondaryPageTimings = {})) : {};\r\n\r\n/**\r\n * The key to store the beginning time of a request on server-side\r\n * In browsers, `time orgin` is a standard time which is considered to be the beginning of the current document's lifetime. Ref: https://docs.w3cub.com/dom/domhighrestimestamp#The_time_origin\r\n * On the server-side, `time origin` is considered to be the beginning of the Node process\r\n * So, to log the start time of something (during processing a request) on the server-side, we need to know the beginning time for the current request, which could be get from here.\r\n */\r\nconst ssrTimeOrigin = \"ssrTimeOrigin\";\r\n\r\n/**\r\n * Gets current window._pageTimings object\r\n */\r\nexport function getPageTimings(): object {\r\n return pageTimings;\r\n}\r\n\r\n/**\r\n * Gets current window._secondaryPageTimings object\r\n */\r\nexport function getSecondaryPageTimings(): object {\r\n return secondaryPageTimings;\r\n}\r\n\r\n/**\r\n * Creates or updates a new counter under the page timings\r\n * @param counterName - the name of the counter to increment.\r\n * @param isPreTTVRCounter - Flag to indicate whether the counting should be limited to pre TTVR\r\n */\r\nexport function incrementCounter(counterName: string, isPreTTVRCounter = true): void {\r\n\r\n if (!counterName\r\n || !pageTimings\r\n // if isPreTTVRCounter is true, then only log the counter if TTVR marker is not present yet\r\n || (isPreTTVRCounter && pageTimings[\"TTVR\"])) {\r\n\r\n return;\r\n }\r\n\r\n const existingCount = pageTimings[counterName] || (pageTimings[counterName] = 0);\r\n pageTimings[counterName] = existingCount + 1;\r\n}\r\n\r\n/**\r\n * Reset pageTimings object\r\n */\r\nexport function resetPageTimings(): void {\r\n Object.keys(pageTimings).forEach(key => delete pageTimings[key]);\r\n Object.keys(secondaryPageTimings).forEach(key => delete secondaryPageTimings[key]);\r\n\r\n if (!canUseDOM()) {\r\n pageTimings[ssrTimeOrigin] = performance.now();\r\n }\r\n}\r\n\r\n/**\r\n * @returns the elapsed time since the `time origin`, in milliseconds\r\n */\r\nexport function getElapsedSinceTimeOrigin(): number {\r\n if (canUseDOM()) {\r\n return performance.now();\r\n } else {\r\n return performance.now() - pageTimings[ssrTimeOrigin];\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nexport enum Environment {\r\n prod = \"prod\",\r\n int1 = \"int1\",\r\n int = \"int\",\r\n intpr = \"intPR\",\r\n intpef = \"intPef\"\r\n}\r\n\r\n/**\r\n * Parses from string to Environment enum.\r\n * Defaults to null\r\n *\r\n * @export\r\n * @param {(string | null | undefined)} environment - string being parsed\r\n * @returns {(Environment | null)} - the parsed Environment enum, or null.\r\n */\r\nexport function getEnvironmentFromString(environment: string | null | undefined): Environment | null {\r\n switch (environment) {\r\n case Environment.prod:\r\n return Environment.prod;\r\n case Environment.int1:\r\n return Environment.int1;\r\n case Environment.int:\r\n case Environment.intpr:\r\n case Environment.intpef:\r\n return Environment.int;\r\n default:\r\n return null;\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Contract related to local dev workflow\r\n */\r\nexport enum ConfigOrigin {\r\n // Configs are fetched from remote\r\n Production = 0,\r\n\r\n // Configs are fetched from local file system\r\n Local = 1\r\n}\r\n\r\n/**\r\n * Contract related to local dev workflow\r\n */\r\nexport interface ConfigOrigins {\r\n /** feature config */\r\n feature: ConfigOrigin;\r\n\r\n /** localization config origin*/\r\n loc: ConfigOrigin;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Enum for different auth cookie names\r\n * @enum\r\n */\r\nexport enum AuthCookieName {\r\n Anon = \"ANON\",\r\n AppAnon = \"APP_ANON\",\r\n Unknown = \"\"\r\n}\r\n\r\n/**\r\n * List of http-readable cookies that indicate the presence of an auth cookie\r\n */\r\nexport enum AuthCookieExistsCookieName {\r\n AnonCookieExists = \"ace\",\r\n AppAnonCookieExists = \"aace\"\r\n}\r\n\r\n/**\r\n * Original source is Constants.ts\r\n * Child cookie name, used to signal if rpsUser is child account.\r\n */\r\nexport const childCookieName = \"child\";","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { ConnectorNamespaces } from \"@msnews/experiences-constants\";\r\n\r\ntype DataConnectorStateCallback = (newState: any) => void;\r\n\r\nconst callbackMap: { [dataConnectorName: string]: DataConnectorStateCallback[] } = {};\r\nlet getDataConnector: (dataConnectorName: ConnectorNamespaces) => any;\r\n\r\n/**\r\n * Sets up the data connector tracker. Needed to avoid a dependency cycle.\r\n * @param tryGetDataConnector The method to use to get the data connector.\r\n */\r\nexport function initializeDataConnectorTracker(tryGetDataConnector: (dataConnectorName: ConnectorNamespaces) => any) {\r\n getDataConnector = tryGetDataConnector;\r\n}\r\n\r\n/**\r\n * Subscribes to changes in data connector state.\r\n * @param dataConnectorName The name of the data connector to subscribe to.\r\n * @param callback The callback function to invoke when the state changes.\r\n * @param fireForInitialState True to fire the callback immediately when the data connector is already initialized. Defaults to true.\r\n */\r\nexport function subscribeDataConnectorState(dataConnectorName: ConnectorNamespaces, callback: (newState: TState) => void, fireForInitialState = true) {\r\n let callbackList = callbackMap[dataConnectorName];\r\n if (!callbackList) {\r\n callbackList = [];\r\n callbackMap[dataConnectorName] = callbackList;\r\n }\r\n\r\n callbackList.push(callback);\r\n\r\n if (fireForInitialState) {\r\n const dataConnector = getDataConnector(dataConnectorName);\r\n if (dataConnector) {\r\n const initialState = dataConnector.getCurrentState();\r\n if (initialState) {\r\n callback(initialState);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Reports a state change for a data connector to interested parties.\r\n * @param dataConnectorName The name of the data connector whose state changed.\r\n * @param newState The new state.\r\n */\r\nexport function reportDataConnectorStateChange(dataConnectorName: string, newState: any) {\r\n const callbacks: DataConnectorStateCallback[] = callbackMap[dataConnectorName];\r\n if (callbacks && newState) {\r\n for (const callback of callbacks) {\r\n callback(newState);\r\n }\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { IsForceTimestampExpired, getRenderCacheKeys } from \"./PersistHelpers\";\r\nimport { RenderCache, RenderCacheKeys } from \"./RenderCache\";\r\nimport { RenderCacheErrors, logger } from \"@msnews/diagnostics\";\r\nimport { appEnvironment, getLocalStorage } from \"@msnews/core\";\r\nimport { batchCSS, renderCacheKeyOfNormalizedKeys, scrapeDom, windowAvailable } from \"./Helper\";\r\nimport { defaultExpirationTimeMs, expirationPrefix, forceTimestampPrefix, jssMapSuffix, keysPrefix, storagePrefix } from \"./Constants\";\r\n\r\nimport { RenderCacheConfig } from \"./RenderCacheConfig\";\r\nimport { Telemetry } from \"@msnews/telemetry-contracts\";\r\nimport { userInteractionHappened } from \"./UserInteractionWatcher\";\r\n\r\nconst jssGeneratedClassesMap: { [instanceId: string]: Array } = {};\r\nlet jssCaptureCompleted = false;\r\n\r\n/**\r\n * Persist the complete render state (DOM and Styles) necessary to restore the rendered Peregrine SPA page, without needing to\r\n * first load all of the Peregrine experience bundles.\r\n * This is the equivalent of using Server Side Rendering to generate the initial DOM, though in this case the initial DOM elements and styles\r\n * are persisted and loaded locally on the client.\r\n * @param config Render cache configuration.\r\n * @param stateJson The state to persist in JSON form.\r\n * @param markers List of performance markers, which will be fired upon cache restore.\r\n * @param invokeFallback Canvas specific fallback function to be executed on jss exception.\r\n */\r\nexport function persistRenderCache(config: RenderCacheConfig, stateJson?: string, markers?: string[], invokeFallback?: (message: string) => void): void {\r\n jssCaptureCompleted = true;\r\n\r\n if (!config || !getLocalStorage().supported || !window.renderCacheEnabled) {\r\n return;\r\n }\r\n\r\n // Get normalized render cache keys\r\n const renderCacheKeys: RenderCacheKeys = getRenderCacheKeys(config && config.normalizeKeyParamsList);\r\n\r\n // Check if we need to refresh cache by force. Used as Failsafe if user stuck in broken render cache loop.\r\n if (IsForceTimestampExpired(config && config.forceExpirationTime)) {\r\n removeRenderCache();\r\n logger.log(\"[RC Info] Force timestamp expired: removing render cache\");\r\n return;\r\n }\r\n\r\n // Found an issue with User interaction check. Its inconsistent and as we are not deleting RC on this,\r\n // users may get stuck in this state.\r\n if (userInteractionHappened()) {\r\n return;\r\n }\r\n\r\n // When critical jss mismatch is detected - do not persist and based on config decide to purge and fallback\r\n if (criticalJssMismatchDetected(config, invokeFallback)) {\r\n return;\r\n }\r\n\r\n let { includeNewsFeed, expirationTime, newsFeedExpirationTime } = config;\r\n\r\n // Persist build version recorded for the page being render cached\r\n const buildVersion = appEnvironment.BuildVersion || \"\";\r\n\r\n // Form Cache Object\r\n const renderCacheStorageObj: RenderCache = {\r\n dom: scrapeDom(includeNewsFeed),\r\n batch_css: batchCSS(),\r\n build_version: buildVersion,\r\n markers,\r\n state: stateJson\r\n };\r\n\r\n expirationTime = (includeNewsFeed ? newsFeedExpirationTime : expirationTime)\r\n || defaultExpirationTimeMs;\r\n\r\n // Try to persist Render Cache and Timestamp\r\n const expiresOn: number = new Date().getTime() + expirationTime;\r\n\r\n getLocalStorage().setObject(renderCacheKeys.expn, expiresOn);\r\n getLocalStorage().setObject(renderCacheKeys.keyn, renderCacheStorageObj);\r\n}\r\n\r\n/**\r\n * Deletes render cache local storage for all domains\r\n */\r\nexport function removeRenderCache(): void {\r\n if (!getLocalStorage().supported) {\r\n return;\r\n }\r\n\r\n // The render cache Urls are currently not normalized, so we have different render\r\n // cache saved for DHP and NTP page. But, some of the properties (example: market)\r\n // is shared between those pages. To ensure a purge on render cache on one page,\r\n // does purge the other render cache as well, and avoid breaking the page layout,\r\n // we remove all render cache keys on removeRenderCache\r\n getLocalStorage().removeSubstringKeys(storagePrefix);\r\n getLocalStorage().removeSubstringKeys(expirationPrefix);\r\n getLocalStorage().removeSubstringKeys(forceTimestampPrefix);\r\n getLocalStorage().removeSubstringKeys(keysPrefix);\r\n getLocalStorage().removeSubstringKeys(jssMapSuffix);\r\n}\r\n\r\n/**\r\n * Deletes render cache local storage only for current href\r\n */\r\nexport function removeCurrentRenderCache(): void {\r\n if (!getLocalStorage().supported) {\r\n return;\r\n }\r\n\r\n const renderCacheKeys: RenderCacheKeys = getRenderCacheKeys();\r\n getLocalStorage().removeObject(renderCacheKeys.keyn);\r\n getLocalStorage().removeObject(renderCacheKeys.frcn);\r\n getLocalStorage().removeObject(renderCacheKeys.expn);\r\n getLocalStorage().removeObject(renderCacheKeys.jssn);\r\n getLocalStorage().removeObject(renderCacheKeyOfNormalizedKeys);\r\n}\r\n\r\n/**\r\n * Capture class names generated by JSS and maintain inside a dictionary.\r\n * @param key key for class name\r\n * @param val JSS val for class name\r\n */\r\nexport function captureJssGeneratedClasses(key: string, val: string): void {\r\n if (jssCaptureCompleted || !(windowAvailable && window.renderCacheEnabled)) {\r\n return;\r\n }\r\n\r\n if (jssGeneratedClassesMap[key]) {\r\n jssGeneratedClassesMap[key].push(val);\r\n } else {\r\n jssGeneratedClassesMap[key] = [val];\r\n }\r\n}\r\n\r\n/**\r\n * Compares stored JSS Map with current JSS Map and log corresponding app errors\r\n * @param config Render cache configuration.\r\n * @param invokeFallback Canvas specific fallback function to be executed on jss exception.\r\n * @returns boolean - returns true when there is critical jss mismatch, otherwise false\r\n */\r\nexport function criticalJssMismatchDetected(config: RenderCacheConfig, invokeFallback?: (message: string) => void): boolean {\r\n // if we haven't captured any generated classes log an app error and return\r\n if (Object.keys(jssGeneratedClassesMap).length === 0) {\r\n logJssMismatchAppError(RenderCacheErrors.JssStyleMismatchWarning, \"Generated classes map is empty. \");\r\n return false;\r\n }\r\n\r\n const { isJssIdentical, isCriticalJssIdentical, jssWarningMessage, jssErrorMessage } = compareJssMap(config);\r\n\r\n // in case of non critical JSS mismatch we just log an app warning\r\n if (!isJssIdentical) {\r\n if (config && config.enableJssMismatchWarningLogs) {\r\n logJssMismatchAppError(RenderCacheErrors.JssStyleMismatchWarning, jssWarningMessage);\r\n }\r\n } else {\r\n // in case there are no mismatches - write back the newly generated class map back to localstorage\r\n Object.keys(jssGeneratedClassesMap).length && getLocalStorage().setObject(getRenderCacheKeys().jssn, jssGeneratedClassesMap);\r\n logger.log(\"[RC Info] No style mismatch found\");\r\n }\r\n\r\n // in case of critical JSS mismatch, log an app error and based on config\r\n // decide to purge and invoke canvas specific fallback\r\n if (!isCriticalJssIdentical) {\r\n logJssMismatchAppError(RenderCacheErrors.JssStyleCriticalMismatchError, jssErrorMessage);\r\n\r\n if (config && config.enablePurgeOnJssMismatch) {\r\n removeRenderCache();\r\n\r\n if (config && config.enableFallbackOnJssMismatch && invokeFallback && typeof invokeFallback === \"function\") {\r\n invokeFallback(jssErrorMessage);\r\n }\r\n }\r\n }\r\n\r\n return !isCriticalJssIdentical;\r\n}\r\n\r\n/**\r\n * Compares stored JSS Map with current JSS Map and identifies if those are critical vs non critical error message with corresponding error message\r\n * @param config Render cache configuration.\r\n * @returns object - returns mismatch and error information\r\n */\r\nfunction compareJssMap(config: RenderCacheConfig): { isJssIdentical: boolean, isCriticalJssIdentical: boolean, jssWarningMessage: string, jssErrorMessage: string } {\r\n let jssErrorMessage = \"\";\r\n let jssWarningMessage = \"\";\r\n let isCriticalJssIdentical = true;\r\n let isJssIdentical = true;\r\n\r\n const jssCriticalClassListMap: { [className: string]: boolean } = getJssCriticalClassListMap(config && config.jssCriticalClassList || []);\r\n\r\n const storedMap = getLocalStorage().getObject(getRenderCacheKeys().jssn);\r\n if (storedMap && typeof storedMap === \"object\" && Object.keys(storedMap).length) {\r\n // this for loop compares every item in stored Map of Css class names to the current page instance map\r\n for (const key in storedMap) {\r\n const storedClasses = storedMap[key];\r\n\r\n // if stored class isn't correctly set, log a non critical app app warning and return\r\n if (!Array.isArray(storedClasses)) {\r\n return { isJssIdentical: false, isCriticalJssIdentical: true, jssWarningMessage: `Stored classes expected to be an array, but received something else. stored val: ${storedClasses}. `, jssErrorMessage: \"\" };\r\n }\r\n\r\n /*\r\n We only care about extra classes being present in the stored classes. If the current page\r\n instance has new class names not present in the stored map, we do not consider this a mismatch\r\n since the render cache snapshot won't be broken due to this scenario. Also if there are no\r\n classes corresponding to a key in the current map, detect that as a mismatch as well.\r\n\r\n --- Scenario 1: (detect as a mismatch) ---\r\n storedClasses : k1: { [c1, c2, c3] }\r\n currentClasses: k1: { [c1, c2] }\r\n\r\n --- Scenario 2: (do not detect as a mismatch) ---\r\n storedClasses : k1: { [c1, c2] }\r\n currentClasses: k1: { [c1, c2, c3] }\r\n\r\n --- Scenario 3: (detect as a mismatch) ---\r\n storedClasses : k1: { [c1, c2] }\r\n currentClasses: k2: { [c3, c4, c5] }\r\n */\r\n const currentClasses = jssGeneratedClassesMap[key];\r\n if (currentClasses) {\r\n if (storedClasses.some(className => currentClasses.indexOf(className) === -1)) {\r\n const errorMessage = `JSSError: val mismatch for key: ${key}, val stored: ${storedClasses}, new val: ${currentClasses}. `;\r\n if (jssCriticalClassListMap[key]) {\r\n jssErrorMessage += errorMessage;\r\n isCriticalJssIdentical = false;\r\n }\r\n\r\n jssWarningMessage += errorMessage;\r\n isJssIdentical = false;\r\n }\r\n } else {\r\n const errorMessage = `JSSError: val mismatch for key: ${key}, val stored: ${storedClasses}, new val: '' (empty). `;\r\n if (jssCriticalClassListMap[key]) {\r\n jssErrorMessage += errorMessage;\r\n isCriticalJssIdentical = false;\r\n }\r\n\r\n jssWarningMessage += errorMessage;\r\n isJssIdentical = false;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n isJssIdentical: isJssIdentical,\r\n isCriticalJssIdentical: isCriticalJssIdentical,\r\n jssWarningMessage: jssWarningMessage,\r\n jssErrorMessage: jssErrorMessage\r\n };\r\n}\r\n\r\n/**\r\n * Helper function to log render cache jss mismatch app errors\r\n * @param errorParams The error params.\r\n * @param customMessage The custom message to be logged.\r\n */\r\nfunction logJssMismatchAppError(errorParams: any, customMessage: string): void {\r\n Telemetry.sendAppErrorEvent({\r\n ...errorParams,\r\n message: \"RC JSS mismatch issue\",\r\n pb: {\r\n ...errorParams.pb,\r\n customMessage: customMessage\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Helper function to generate critical class list map\r\n * @param jssCriticalClassList The critical class list array\r\n * @returns jssCriticalClassListMap The map of critical class list\r\n */\r\nfunction getJssCriticalClassListMap(jssCriticalClassList: [string?]) {\r\n const jssCriticalClassListMap: { [className: string]: boolean } = {};\r\n jssCriticalClassList.forEach((key) => {\r\n jssCriticalClassListMap[key] = true;\r\n jssCriticalClassListMap[key + \" - jssStyleSheet\"] = true;\r\n });\r\n\r\n return jssCriticalClassListMap;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { get, set } from \"lodash-es\";\r\n\r\nimport { ConnectorConstants } from \"@msnews/experiences-redux-contracts\";\r\nimport { ConnectorNamespaces } from \"@msnews/experiences-constants\";\r\n\r\n/**\r\n * Maps the data connector name to the set of experience keys it is injected into.\r\n * The values include the \"._@STATE@_\" portion needed to pull experience state out of the app state object.\r\n */\r\nconst dataConnectorToExperienceKeyMap: Map> = new Map>();\r\n\r\n/**\r\n * Register a data connector to inject into an experience.\r\n * @param experienceFullNamespace The full namespace of the experience to inject into.\r\n * @param dataConnectorName The name for the data connector to inject.\r\n */\r\nfunction registerInjection(\r\n experienceFullNamespace: string,\r\n dataConnectorName: ConnectorNamespaces): void {\r\n let experienceSet: Set = dataConnectorToExperienceKeyMap.get(dataConnectorName);\r\n if (!experienceSet) {\r\n experienceSet = new Set();\r\n dataConnectorToExperienceKeyMap.set(dataConnectorName, experienceSet);\r\n }\r\n\r\n experienceSet.add(createStatePropertyKey(experienceFullNamespace));\r\n}\r\n\r\n/**\r\n * Initializes the shared data connector state for the given experience.\r\n * @param appState The global app state to modify.\r\n * @param experienceFullNamespace The full namespace of the experience to host the data connector state.\r\n * @param dataConnectorName The name of the data connector to use.\r\n */\r\nfunction initializeExperience(\r\n appState: any,\r\n experienceFullNamespace: string,\r\n dataConnectorName: ConnectorNamespaces): void {\r\n\r\n // Setup the key and get the actual state property for the connector. lodash uses dotted notation\r\n // so the key will be something like: namespace._@STATE@_\r\n const experienceStatePropertyKey = createStatePropertyKey(experienceFullNamespace);\r\n const connectorPreviousState = get(appState, experienceStatePropertyKey, undefined);\r\n\r\n // Find the initial data connector state\r\n const initialDataConnectorState = get(appState, createStatePropertyKey(dataConnectorName), undefined);\r\n\r\n // Create the new experience connector state\r\n const nextStateForConnector = { ...connectorPreviousState, [dataConnectorName]: initialDataConnectorState };\r\n set(appState, experienceStatePropertyKey, nextStateForConnector);\r\n}\r\n\r\n/**\r\n * Updates the data connector state on all experiences that include it.\r\n * @param appState The global app state object.\r\n * @param dataConnectorNamespace The namespace of the data connector that's been updated.\r\n * @param newDataConnectorState The new data connector state object.\r\n */\r\nfunction reportStateChange(\r\n appState: any,\r\n dataConnectorNamespace: string,\r\n newDataConnectorState: any): void {\r\n\r\n const experienceKeys: Set = dataConnectorToExperienceKeyMap.get(dataConnectorNamespace);\r\n if (experienceKeys) {\r\n for (const experienceKey of experienceKeys) {\r\n const experiencePreviousState: any = get(appState, experienceKey, undefined);\r\n\r\n if (experiencePreviousState) {\r\n set(appState, experienceKey, { ...experiencePreviousState, [dataConnectorNamespace]: newDataConnectorState });\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Creates the lodash property key to get or set the experience or data connector state.\r\n * @param fullNamespace The full namespace of the experience or data connector.\r\n */\r\nfunction createStatePropertyKey(fullNamespace: string): string {\r\n return fullNamespace + \".\" + ConnectorConstants.connectorStateKey;\r\n}\r\n\r\n/** Methods to support injecting data connector state into experiences */\r\nexport const dataConnectorInjector = {\r\n registerInjection,\r\n initializeExperience,\r\n reportStateChange\r\n};\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { BreakpointTracker, identifyBreakpoint } from \"@microsoft/fast-layouts-react\";\r\n\r\nimport { canUseDOM } from \"./DOMHelpersCore\";\r\nimport { getRequestData } from \"./requestData\";\r\n\r\n/**\r\n * Checks if a given JS media query matches in an isomorphic manner\r\n * NOTE: Only supports min/max-width queries outside of the web client\r\n * @param query The media query\r\n * @param breakpoint The current breakpoint, needed if SSR\r\n */\r\nexport function canMatchMedia(query: string, breakpoint?: number): boolean {\r\n if (canUseDOM()) {\r\n return window.matchMedia(query).matches;\r\n }\r\n\r\n if (breakpoint === undefined) {\r\n throw Error(\"Breakpoint must be supplied when server side rendering\");\r\n }\r\n\r\n const maxWidthValues = /max-width:\\s?(\\d+)/.exec(query);\r\n const minWidthValues = /min-width:\\s?(\\d+)/.exec(query);\r\n\r\n const minWidth = minWidthValues && minWidthValues.length ? minWidthValues[1] : 0;\r\n const maxWidth = maxWidthValues && maxWidthValues.length ? maxWidthValues[1] : Infinity;\r\n\r\n const minBreakpoint = identifyBreakpoint(parseInt(minWidth.toString()), BreakpointTracker.breakpoints);\r\n const maxBreakpoint = maxWidth === Infinity ?\r\n BreakpointTracker.breakpoints.length - 1 : identifyBreakpoint(parseInt(maxWidth.toString()), BreakpointTracker.breakpoints);\r\n\r\n return breakpoint >= minBreakpoint && breakpoint <= maxBreakpoint;\r\n}\r\n\r\n/**\r\n * Get window.location.href in an isomorphic manner.\r\n */\r\nexport function getLocationHref(): string {\r\n return canUseDOM() ? window.location.href : getRequestData().url.href;\r\n}\r\n\r\n/**\r\n * Get window.location.hostname in an isomorphic manner.\r\n */\r\nexport function getLocationHostname(): string {\r\n return canUseDOM() ? window.location.hostname : getRequestData().url.hostname;\r\n}\r\n\r\n/**\r\n * Get window.location.host in an isomorphic manner.\r\n */\r\nexport function getLocationHost(): string {\r\n return canUseDOM() ? window.location.host : getRequestData().url.host;\r\n}\r\n\r\n/**\r\n * Get window.location.origin in an isomorphic manner.\r\n */\r\nexport function getLocationOrigin(): string {\r\n return canUseDOM() ? window.location.origin : getRequestData().url.origin;\r\n}\r\n\r\n/**\r\n * Get window.location.search in an isomorphic manner.\r\n */\r\nexport function getLocationSearch(): string {\r\n return canUseDOM() ? window.location.search : getRequestData().url.search;\r\n}\r\n\r\n/**\r\n * Get window.location.pathname in an isomorphic manner.\r\n */\r\nexport function getLocationPathname(): string {\r\n return canUseDOM() ? window.location.pathname : getRequestData().url.pathname;\r\n}\r\n\r\n/**\r\n * Get window.location.protocol in an isomorphic manner.\r\n */\r\nexport function getLocationProtocol(): string {\r\n return canUseDOM() ? window.location.protocol : getRequestData().url.protocol;\r\n}\r\n\r\n/**\r\n * Get window.location.hash in an isomorphic manner.\r\n */\r\nexport function getLocationHash(): string {\r\n return canUseDOM() ? window.location.hash : getRequestData().url.hash;\r\n}\r\n\r\n/**\r\n * Get document.cookie in an isomorphic manner.\r\n */\r\nexport function getCookieString(): string {\r\n return canUseDOM() ? window.document.cookie : getRequestData().cookie;\r\n}\r\n\r\n/**\r\n * Get window.document.getElementById(elementId).\r\n */\r\nexport function getDocumentElementById(elementId: string): HTMLElement {\r\n if (!canUseDOM()) {\r\n throw new Error(\"getDocumentElementById is unsupported server side. This call should be wrapped in canUseDOM().\");\r\n }\r\n\r\n return window.document.getElementById(elementId);\r\n}\r\n\r\n/**\r\n * Get window.document.getDocumentElementsByTagName(elementId).\r\n */\r\nexport function getDocumentElementsByTagName(tagName: string): HTMLCollectionOf {\r\n if (!canUseDOM()) {\r\n throw new Error(\"getDocumentElementsByTagName is unsupported server side. This call should be wrapped in canUseDOM().\");\r\n }\r\n\r\n return window.document.getElementsByTagName(tagName);\r\n}\r\n\r\n/**\r\n * Get indexedDB in an isomorphic manner.\r\n * Todo (http://osgvsowi/23753462), provide actual functionality for indexedDB on the server side.\r\n */\r\nexport function getIndexedDB(): IDBFactory {\r\n return canUseDOM() ? window.indexedDB : null;\r\n}\r\n\r\n/**\r\n * Get window.innerHeight in an isomorphic manner.\r\n * Todo (http://osgvsowi/23876778), remove the need for server to know about innerWidth by limiting layout options or use CSS based solution.\r\n */\r\nexport function getInnerHeight(): number {\r\n return canUseDOM() ? window.innerHeight : getRequestData().innerHeight;\r\n}\r\n\r\n/**\r\n * Get window.devicePixelRatio in an isomorphic manner.\r\n */\r\nexport function getDevicePixelRatio(): number {\r\n return canUseDOM() ? window.devicePixelRatio : getRequestData().devicePixelRatio;\r\n}\r\n\r\n/**\r\n * Get CSS Grid support in an isomorphic manner\r\n */\r\nexport function getCssGridSupport(): boolean {\r\n return !!(canUseDOM() ? (window.CSS && window.CSS.supports && CSS.supports(\"display\", \"grid\")) : getRequestData().canUseCssGrid);\r\n}\r\n\r\n/**\r\n * Get variable font support in an isomorphic manner\r\n * TODO: SSR currently does not support custom fonts.\r\n */\r\nexport function getVariableFontSupport(): boolean {\r\n if (!canUseDOM()) {\r\n throw new Error(\"SSR currently does not support custom fonts.\");\r\n }\r\n\r\n return !!(window.CSS && window.CSS.supports && CSS.supports(\"(font-variation-settings: normal)\"));\r\n}\r\n\r\n/**\r\n * Returns a script element using several default values.\r\n * Not supported server side.\r\n * @param src The absolute URL for the script src. Default is undefined, blank is okay.\r\n * @param id The id to assign the script element. default is \"\" so no id.\r\n * @param loadAsync Should the script load asynchronously. Default is true.\r\n * @param crossOrigin Set the script crossorigin attribute. Default is anonymous.\r\n * @param className The optional className to assign the script element.\r\n * @returns {HTMLScriptElement} the script element. not using const so it can be overridden by caller.\r\n */\r\nexport function createScriptTag(src: string = undefined, id = undefined, loadAsync = true, crossOrigin = \"anonymous\", className?: string): HTMLScriptElement {\r\n if (!canUseDOM()) {\r\n throw new Error(\"createScriptTag is unsupported server side. This call should be wrapped in canUseDOM().\");\r\n }\r\n\r\n const scriptElement: HTMLScriptElement = document.createElement(\"script\");\r\n if (id) {\r\n scriptElement.id = id;\r\n }\r\n if (className) {\r\n scriptElement.setAttribute(\"class\", className);\r\n }\r\n scriptElement.type = \"text/javascript\";\r\n if (src) {\r\n scriptElement.src = src;\r\n scriptElement.async = loadAsync;\r\n scriptElement.crossOrigin = crossOrigin;\r\n }\r\n // @ts-ignore\r\n if (window && window.NONCE_ID) {\r\n // @ts-ignore\r\n scriptElement.nonce = window.NONCE_ID;\r\n }\r\n\r\n return scriptElement;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { logger } from \"../logging\";\r\n\r\n/** Perf marker start suffix */\r\nconst StartMarkSuffix = \"-start\";\r\n\r\n/**\r\n * PerfMarker facilitates adding and measuring performance markers.\r\n */\r\nclass PerfMarker {\r\n /** The single instance of the PerfMarker class. */\r\n private static instance: PerfMarker;\r\n\r\n /** The performance object. */\r\n private performance: Performance;\r\n\r\n /** Perf marker end suffix */\r\n private readonly endMarkSuffix: string = \"-end\";\r\n\r\n /**\r\n * The constructor.\r\n */\r\n private constructor() {\r\n if (typeof window !== \"undefined\") {\r\n this.initialize(window.performance);\r\n }\r\n }\r\n\r\n /**\r\n * Returns singleton class instance.\r\n * @returns The class instance\r\n */\r\n public static getInstance(): PerfMarker {\r\n if (!PerfMarker.instance) {\r\n PerfMarker.instance = new PerfMarker();\r\n }\r\n\r\n return PerfMarker.instance;\r\n }\r\n\r\n /**\r\n * Initialize the member variables.\r\n * @param performance - The performance object instance.\r\n */\r\n public initialize(performance: Performance): void {\r\n this.performance = performance;\r\n }\r\n\r\n /**\r\n * Adds given perf marker to browser.\r\n * @param name - Perf marker to start\r\n */\r\n public startMark(name: string): void {\r\n this.singleMark(name + StartMarkSuffix);\r\n }\r\n\r\n /**\r\n * Adds given perf marker to browser.\r\n * @param name - Perf marker to end\r\n */\r\n public endMark(name: string): void {\r\n this.singleMark(name + this.endMarkSuffix);\r\n this.measureStartEnd(name);\r\n }\r\n\r\n /**\r\n * Adds a single performance marker via the performance API.\r\n * @param name - the name of the perf marker\r\n */\r\n public singleMark(name: string): void {\r\n const performance = this.performance;\r\n if (performance && performance.mark) {\r\n performance.mark(name);\r\n }\r\n }\r\n\r\n /**\r\n * Removes a single mark.\r\n * @param name - the name of the perf marker\r\n */\r\n public clearMark(name: string): void {\r\n const performance = this.performance;\r\n if (performance && performance.clearMarks) {\r\n performance.clearMarks(name);\r\n }\r\n }\r\n\r\n /**\r\n * Removes perf a measure\r\n * @param name - the name of the perf measure\r\n */\r\n public clearMeasures(name: string): void {\r\n const performance = this.performance;\r\n if (performance && performance.clearMeasures) {\r\n performance.clearMeasures(name);\r\n }\r\n }\r\n /**\r\n * Utility method to add start/end marker around a promise.\r\n * @param name - The name of perf marker\r\n * @param getPromise - The callback\r\n * @returns The promise\r\n */\r\n public async measurePromise(name: string, getPromise: () => Promise): Promise {\r\n this.startMark(name);\r\n const result = await getPromise();\r\n this.endMark(name);\r\n return result;\r\n }\r\n\r\n /**\r\n * Telemetry call this method to collect existing perf markers that each Experience has added.\r\n * @param experienceName - Perf marker name in case of custom marker / Experience name\r\n * @returns {IPerfMarkers}\r\n */\r\n public measurePerfMarker(experienceName: string): IPerfMarkers {\r\n\r\n if (!this.performance) {\r\n return;\r\n }\r\n\r\n const perfMarkers: { [id: string]: PerfMarkerDetail; } = {};\r\n\r\n // Get all perf markers from browser.\r\n const perfEntries = this.performance.getEntriesByType(\"mark\");\r\n if (!perfEntries) {\r\n return perfMarkers;\r\n }\r\n\r\n // Iterate through perfEntries received from browser.\r\n for (let i = 0; i < perfEntries.length; i++) {\r\n\r\n // if marker name in perfEntries object is null\r\n let markerName: string = perfEntries[i].name;\r\n if (!markerName || perfEntries[i].startTime == null) {\r\n continue;\r\n }\r\n\r\n // Remove start and end suffix.\r\n markerName = markerName.replace(/-(end|start)$/i, \"\");\r\n\r\n // if marker name retrieved from browser is not for this experience then continue with next marker.\r\n if (!markerName.startsWith(experienceName)) {\r\n continue;\r\n }\r\n\r\n const perfMarkerDetail = perfMarkers[markerName] || new PerfMarkerDetail(markerName);\r\n perfMarkerDetail.processPerfEntry(perfEntries[i]);\r\n if (perfMarkerDetail.isValid) {\r\n perfMarkers[markerName] = perfMarkerDetail;\r\n }\r\n }\r\n\r\n return perfMarkers;\r\n }\r\n\r\n /**\r\n * Measures the given marker name's start/end markers.\r\n * @param name - The name of the marker whose -start and -end to measure\r\n */\r\n private measureStartEnd(name: string): void {\r\n const performance = this.performance;\r\n if (performance && performance.measure) {\r\n try {\r\n performance.measure(\r\n name,\r\n name + StartMarkSuffix,\r\n name + this.endMarkSuffix\r\n );\r\n } catch (ex) {\r\n // An exception will be thrown if either start/end marker didn't exist.\r\n // We swallo this exception and log an error so that actual code's execution\r\n // would not be effected due to performance measurement code.\r\n logger.logError(`Error while attempting to measure start/end of '${name}'. Error: ${ex}`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const perfMarker = PerfMarker.getInstance();\r\n\r\n/**\r\n * Interface defining attributes of each per marker.\r\n */\r\nexport interface IPerfMarkers {\r\n [key: string]: PerfMarkerDetail;\r\n}\r\n\r\n/**\r\n * Interface defining perf markers.\r\n */\r\nclass PerfMarkerDetail {\r\n /** marker name */\r\n public readonly markerName: string;\r\n /** first start time */\r\n public firstStartTime: number;\r\n /** start time */\r\n public startTime: number;\r\n /** duration */\r\n public duration = 0;\r\n\r\n /**\r\n * Sets marker name.\r\n */\r\n constructor(markerName: string) {\r\n this.markerName = markerName;\r\n }\r\n\r\n /**\r\n * Check if given marker is valid. If marker has a start time then it is a valid marker.\r\n * @returns True if valid else false.\r\n */\r\n get isValid(): boolean {\r\n return this.startTime != null;\r\n }\r\n\r\n /**\r\n * Sum up start and end marker duraiton per marker name.\r\n */\r\n public processPerfEntry(perfEntry: PerformanceEntry): void {\r\n\r\n // If given mark is a start mark\r\n if (perfEntry.name.endsWith(StartMarkSuffix)) {\r\n\r\n // If this is a start mark and firstStartTime is undefined then assign value of startTime now.\r\n if (!this.firstStartTime) {\r\n this.firstStartTime = perfEntry.startTime;\r\n }\r\n\r\n // Change start time to start time of current mark.\r\n this.startTime = perfEntry.startTime;\r\n\r\n } else if (this.startTime != null) {\r\n // This is is not a start mark. Assuming this is end mark, check start time of this mark is set earlier. if set properly then proceed.\r\n // else likely a candiddate to skip \"if\" part.\r\n\r\n // This is a end mark. Add earlier duration plus current start time minus this start time.\r\n this.duration += perfEntry.startTime - this.startTime;\r\n\r\n // reset start time so we can recalculate the next start/end pair correctly\r\n this.startTime = null;\r\n }\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nexport enum Market {\r\n BR = \"pt-br\",\r\n DEDE = \"de-de\",\r\n ENCA = \"en-ca\",\r\n ENGB = \"en-gb\",\r\n ENUS = \"en-us\",\r\n ESMX = \"es-mx\",\r\n FRCA = \"fr-ca\",\r\n FRFR = \"fr-fr\",\r\n IN = \"en-in\",\r\n JAJP = \"ja-jp\",\r\n PTBR = \"pt-br\",\r\n KOKR = \"ko-kr\",\r\n ZHCN = \"zh-cn\"\r\n}"],"sourceRoot":""}