{"version":3,"file":"static/js/main.3145eebc.js","mappings":"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,GAAUA,GAAK,IACnB,KAANA,GACM,MAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,EAMR,SAASigJ,GAAiBjgJ,GACtB,OAASA,GAAK,IAAUA,GAAK,IACnB,KAANA,GACCA,GAAK,IAAUA,GAAK,IACf,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACCA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACpBA,GAAK,IAAUA,GAAK,IACf,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,KAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACCA,GAAK,KAAUA,GAAK,KACf,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACM,MAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACM,OAANA,GACM,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,KACf,OAANA,GACM,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACf,OAANA,GACCA,GAAK,MAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACCA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAANA,GACCA,GAAK,OAAUA,GAAK,OACf,QAANA,GACM,QAANA,GACM,QAANA,GACM,QAA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","sources":["../node_modules/@babel/runtime/helpers/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/iterableToArray.js","../node_modules/@babel/runtime/helpers/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/toConsumableArray.js","../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","../node_modules/@babel/runtime/regenerator/index.js","assets/images/homeIcons/backIcon.svg","assets/images/homeIcons/userCircleIcon.svg","webpack://learner-portal/./src/components/CommonComponents/Button/Button.module.scss?71c2","components/CommonComponents/Button/Button.jsx","components/CommonComponents/Logo/Logo.jsx","components/CommonComponents/Modal/Modal.js","components/CommonComponents/Modal/ModalBody.js","webpack://learner-portal/./src/components/CommonComponents/NoConversationFound/NoConversationFound.module.scss?ceec","components/CommonComponents/NoConversationFound/NoConversationFound.jsx","webpack://learner-portal/./src/components/CommonComponents/PageLoader/PageLoader.module.scss?ad20","components/CommonComponents/PageLoader/PageLoader.jsx","components/CustomSvgIcons/MissedVoteIcon.jsx","webpack://learner-portal/./src/components/VirtualOrLiveQuizComponents/QuizModal/QuizModal.module.scss?3d3d","components/VirtualOrLiveQuizComponents/QuizModal/QuizModal.jsx","components/VirtualOrLiveQuizComponents/Tooltip/Tooltip.jsx","webpack://learner-portal/./src/containers/HomeContainers/HomeFooterContainer/HomeFooterContainer.module.scss?1714","containers/HomeContainers/HomeFooterContainer/HomeFooterContainer.jsx","webpack://learner-portal/./src/components/HomeComponents/HomeNavbarLink/HomeNavbarLink.module.scss?7678","components/HomeComponents/HomeNavbarLink/HomeNavbarLink.jsx","assets/images/homeIcons/filterIcon.svg","assets/images/homeIcons/homeIcon.svg","assets/images/homeIcons/langIcon.svg","components/CustomSvgIcons/FavouriteIconBig.jsx","components/CustomSvgIcons/ArrowNextIcon.jsx","webpack://learner-portal/./src/containers/HomeContainers/HomeNavbar/HomeNavbar.module.scss?2489","webpack://learner-portal/./src/components/FilterCreditComponents/FilterCredit.module.scss?7a8c","components/FilterCreditComponents/FilterCredit.jsx","webpack://learner-portal/./src/components/VirtualOrLiveQuizComponents/QuizTimer/QuizTimer.module.scss?e779","assets/images/QuizImageAndIcons/timer_icon.svg","components/VirtualOrLiveQuizComponents/QuizTimer/QuizTimer.jsx","webpack://learner-portal/./src/components/HomeComponents/HomeNavbarFilter/HomeNavbarFilter.module.scss?888f","components/HomeComponents/HomeNavbarFilter/HomeNavbarFilter.jsx","containers/HomeContainers/HomeNavbar/HomeNavbar.jsx","webpack://learner-portal/./src/containers/HomeContainers/HomeHeaderContainer/HomeHeaderContainer.module.scss?3e77","containers/HomeContainers/HomeHeaderContainer/HomeHeaderContainer.jsx","webpack://learner-portal/./src/components/CommonComponents/ToggleSwitch/ToggleSwitch.module.scss?f766","components/CommonComponents/ToggleSwitch/ToggleSwitch.jsx","components/CustomSvgIcons/CloseIcon_nobg.jsx","components/CustomSvgIcons/HomeHeaderSearchIcon.jsx","components/CustomSvgIcons/HomeHeaderLangIcon.jsx","assets/images/homeIcons/langChangeIcon.svg","webpack://learner-portal/./src/components/HomeComponents/HomeHeaderLanguageChange/HomeHeaderLanguageChange.module.scss?4252","utils/addLangToLocalStorage.js","components/HomeComponents/HomeHeaderLanguageChange/HomeHeaderLanguageChange.jsx","components/CustomSvgIcons/AccountUserIcon.jsx","components/CustomSvgIcons/LogoutIcon.jsx","components/CustomSvgIcons/NotificationBellIcon.jsx","webpack://learner-portal/./src/components/HomeComponents/HomeHeaderProfile/HomeHeaderProfile.module.scss?f62f","components/HomeComponents/HomeHeaderProfile/HomeHeaderProfile.jsx","webpack://learner-portal/./src/components/HomeComponents/LeaderboardModalCarousel/LeaderboardModalCarousel.module.scss?162b","components/HomeComponents/LeaderboardModalCarousel/LeaderboardModalCarousel.jsx","webpack://learner-portal/./src/components/HomeComponents/LeaderboardModal/LeaderboardModal.module.scss?6801","components/HomeComponents/LeaderboardModal/LeaderboardModal.jsx","webpack://learner-portal/./src/components/HomeComponents/HomeHeaderLinks/HomeHeaderLinks.module.scss?6b7e","components/HomeComponents/HomeHeaderLinks/HomeHeaderLinks.jsx","webpack://learner-portal/./src/containers/HomeContainers/HomeHeader/HomeHeader.module.scss?f5c6","components/CustomSvgIcons/HomeSidebarConnect.jsx","components/CustomSvgIcons/HomeSidebarContribute.jsx","components/CustomSvgIcons/HomeSidebarHome.jsx","components/CustomSvgIcons/HomeSidebarLogout.jsx","components/CustomSvgIcons/HomeSidebarMyFavorites.jsx","components/CustomSvgIcons/HomeSidebarQuiz.jsx","components/CustomSvgIcons/HomeSidebarTopics.jsx","assets/images/homeIcons/homeSidebarArrow.svg","webpack://learner-portal/./src/components/HomeComponents/HomeSidebarLink/HomeSidebarLink.module.scss?85a3","components/HomeComponents/HomeSidebarLink/HomeSidebarLink.jsx","webpack://learner-portal/./src/containers/HomeContainers/HomeSidebar/HomeSidebar.module.scss?c52f","containers/HomeContainers/HomeSidebar/HomeSidebar.jsx","components/CustomSvgIcons/HamburgerIcon.jsx","containers/HomeContainers/HomeHeader/HomeHeader.jsx","webpack://learner-portal/./src/containers/MyAccountContainers/ReportProgressContainer/ReportProgressContainer.module.scss?b357","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/array.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/selectChild.js","../node_modules/d3-selection/src/selection/selectChildren.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/iterator.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-timer/src/timeout.js","../node_modules/d3-transition/src/transition/schedule.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-transition/src/transition/tween.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-interpolate/src/basis.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/basisClosed.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-transition/src/transition/interpolate.js","../node_modules/d3-transition/src/transition/attr.js","../node_modules/d3-transition/src/transition/attrTween.js","../node_modules/d3-transition/src/transition/delay.js","../node_modules/d3-transition/src/transition/duration.js","../node_modules/d3-transition/src/transition/ease.js","../node_modules/d3-transition/src/transition/on.js","../node_modules/d3-transition/src/transition/selection.js","../node_modules/d3-transition/src/transition/style.js","../node_modules/d3-transition/src/transition/styleTween.js","../node_modules/d3-transition/src/transition/textTween.js","../node_modules/d3-transition/src/transition/index.js","../node_modules/d3-transition/src/transition/select.js","../node_modules/d3-transition/src/transition/selectAll.js","../node_modules/d3-transition/src/transition/filter.js","../node_modules/d3-transition/src/transition/merge.js","../node_modules/d3-transition/src/transition/transition.js","../node_modules/d3-transition/src/transition/text.js","../node_modules/d3-transition/src/transition/remove.js","../node_modules/d3-transition/src/transition/easeVarying.js","../node_modules/d3-transition/src/transition/end.js","../node_modules/d3-transition/src/selection/transition.js","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-transition/src/selection/index.js","../node_modules/d3-transition/src/selection/interrupt.js","../node_modules/d3-transition/src/interrupt.js","../node_modules/d3-brush/src/brush.js","../node_modules/d3-selection/src/select.js","../node_modules/d3-path/src/path.js","../node_modules/d3-shape/src/constant.js","../node_modules/d3-shape/src/math.js","../node_modules/d3-shape/src/arc.js","../node_modules/d3-shape/src/array.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-zoom/src/transform.js","containers/MyAccountContainers/ReportProgressContainer/ReportProgressContainer.jsx","../node_modules/d3-shape/src/pie.js","hooks/useComponentVisible.js","hooks/useWindowWidthLessThan.js","../node_modules/react-toastify/src/utils/propValidator.ts","../node_modules/react-toastify/src/utils/constant.ts","../node_modules/react-toastify/src/utils/cssTransition.tsx","../node_modules/react-toastify/src/utils/collapseToast.ts","../node_modules/react-toastify/src/core/eventManager.ts","../node_modules/react-toastify/src/hooks/useToastContainer.ts","../node_modules/react-toastify/src/hooks/useToast.ts","../node_modules/react-toastify/src/components/CloseButton.tsx","../node_modules/react-toastify/src/components/ProgressBar.tsx","../node_modules/react-toastify/src/components/Icons.tsx","../node_modules/react-toastify/src/components/Toast.tsx","../node_modules/react-toastify/src/components/Transitions.tsx","../node_modules/react-toastify/src/components/ToastContainer.tsx","../node_modules/react-toastify/src/core/toast.tsx","components/ToastError/ToastError.jsx","views/Routes/ScrollToTop.jsx","utils/getToken.js","hoc/ProtectedRoute.js","webpack://learner-portal/./src/components/CommonComponents/SessionExpiredModal/SessionExpiredModal.module.scss?e635","components/CommonComponents/SessionExpiredModal/SessionExpiredModal.jsx","webpack://learner-portal/./src/components/CommonComponents/ExtendTimerModal/ExtendTimerModal.module.scss?0301","components/CommonComponents/ExtendTimerModal/ExtendTimerModal.jsx","components/CommonComponents/ExtendTimerModal/ExtendTimer.jsx","utils/fetchInterceptor.js","components/CustomSvgIcons/NoInternetFound.jsx","webpack://learner-portal/./src/views/NoInternetPage/NoInternetPage.module.scss?48b2","views/NoInternetPage/NoInternetPage.jsx","views/Routes/RootRoute.jsx","utils/setLTIThemeStyle.js","App.js","store/reducers/loginReducer.js","store/reducers/errorReducer.js","store/reducers/userReducer.js","store/reducers/homeReducer.js","store/reducers/contributeReducer.js","store/reducers/privacyPolicyReducer.js","store/reducers/connectReducer.js","store/reducers/commonReducer.js","store/reducers/globalSearchReducer.js","store/reducers/classReducer.js","store/reducers/seriesReducer.js","store/reducers/quizReducer.js","store/reducers/creditReducer.js","store/reducers/accountReducer.js","store/reducers/topicsReducer.js","store/reducers/favoriteReducer.js","store/reducers/contactUsReducer.js","store/reducers/rootReducer.js","../node_modules/redux-thunk/es/index.js","store/store.js","../node_modules/@formatjs/intl/lib/src/message.js","../node_modules/@formatjs/intl/lib/src/number.js","../node_modules/@formatjs/intl/lib/src/relativeTime.js","../node_modules/@formatjs/intl/lib/src/dateTime.js","../node_modules/@formatjs/intl/lib/src/plural.js","../node_modules/@formatjs/intl/lib/src/list.js","../node_modules/@formatjs/intl/lib/src/displayName.js","../node_modules/@formatjs/intl/lib/src/create-intl.js","../node_modules/react-intl/lib/src/components/provider.js","utils/messages.js","components/i18n/LanguageProvider.jsx","index.js","store/actions/actionCreators/classActionCreator.js","store/actions/actionCreators/commonActionCreator.js","store/actions/actionCreators/connectActionCreator.js","store/actions/actionCreators/creditActionCreator.js","store/actions/actionCreators/favoriteActionCreator.js","store/actions/actionCreators/globalSearchActionCreator.js","store/actions/actionCreators/homeActionCreator.js","store/actions/actionCreators/loginActionCreator.js","store/actions/actionCreators/privacyPolicyCreator.js","store/actions/actionCreators/quizActionCreator.js","store/actions/actionCreators/seriesActionCreator.js","store/actions/actionCreators/topicsActionCreator.js","store/actions/actionCreators/userActionCreator.js","store/actions/actionHandlers/classActionHandler.js","store/actions/actionHandlers/connectActionHandler.js","store/actions/actionHandlers/errorActionHandler.js","store/actions/actionCreators/errorActionCreator.js","store/actions/actionHandlers/globalSearchActionHandler.js","store/actions/actionHandlers/homeActionHandler.js","../node_modules/@azure/msal-common/src/telemetry/performance/PerformanceEvent.ts","../node_modules/@azure/msal-browser/src/utils/BrowserConstants.ts","../node_modules/@azure/msal-common/src/error/ServerError.ts","../node_modules/@azure/msal-common/src/error/InteractionRequiredAuthError.ts","../node_modules/@azure/msal-common/src/error/JoseHeaderError.ts","../node_modules/@azure/msal-browser/src/cache/CryptoKeyStore.ts","../node_modules/@azure/msal-common/src/crypto/JoseHeader.ts","../node_modules/@azure/msal-browser/src/utils/MathUtils.ts","../node_modules/@azure/msal-browser/src/crypto/GuidGenerator.ts","../node_modules/@azure/msal-browser/src/utils/BrowserStringUtils.ts","../node_modules/@azure/msal-browser/src/encode/Base64Encode.ts","../node_modules/@azure/msal-browser/src/encode/Base64Decode.ts","../node_modules/@azure/msal-browser/src/error/BrowserAuthError.ts","../node_modules/@azure/msal-browser/src/crypto/PkceGenerator.ts","../node_modules/@azure/msal-browser/src/crypto/ModernBrowserCrypto.ts","../node_modules/@azure/msal-browser/src/crypto/MsrBrowserCrypto.ts","../node_modules/@azure/msal-browser/src/crypto/MsBrowserCrypto.ts","../node_modules/@azure/msal-browser/src/error/BrowserConfigurationAuthError.ts","../node_modules/@azure/msal-browser/src/crypto/BrowserCrypto.ts","../node_modules/@azure/msal-browser/src/cache/DatabaseStorage.ts","../node_modules/@azure/msal-browser/src/cache/MemoryStorage.ts","../node_modules/@azure/msal-browser/src/cache/AsyncMemoryStorage.ts","../node_modules/@azure/msal-common/src/authority/AuthorityType.ts","../node_modules/@azure/msal-browser/src/crypto/CryptoOps.ts","../node_modules/@azure/msal-common/src/telemetry/performance/PerformanceClient.ts","../node_modules/@azure/msal-common/src/telemetry/performance/StubPerformanceClient.ts","../node_modules/@azure/msal-common/src/crypto/ICrypto.ts","../node_modules/@azure/msal-common/src/cache/entities/CredentialEntity.ts","../node_modules/@azure/msal-common/src/cache/entities/IdTokenEntity.ts","../node_modules/@azure/msal-common/src/error/ClientConfigurationError.ts","../node_modules/@azure/msal-common/src/request/ScopeSet.ts","../node_modules/@azure/msal-common/src/account/ClientInfo.ts","../node_modules/@azure/msal-common/src/cache/entities/AccountEntity.ts","../node_modules/@azure/msal-common/src/account/CcsCredential.ts","../node_modules/@azure/msal-common/src/account/AuthToken.ts","../node_modules/@azure/msal-common/src/packageMetadata.ts","../node_modules/@azure/msal-common/src/cache/CacheManager.ts","../node_modules/@azure/msal-common/src/utils/TimeUtils.ts","../node_modules/@azure/msal-common/src/cache/entities/AccessTokenEntity.ts","../node_modules/@azure/msal-common/src/cache/entities/RefreshTokenEntity.ts","../node_modules/@azure/msal-common/src/cache/entities/AppMetadataEntity.ts","../node_modules/@azure/msal-common/src/cache/entities/ServerTelemetryEntity.ts","../node_modules/@azure/msal-common/src/cache/entities/AuthorityMetadataEntity.ts","../node_modules/@azure/msal-common/src/cache/entities/ThrottlingEntity.ts","../node_modules/@azure/msal-common/src/utils/ProtocolUtils.ts","../node_modules/@azure/msal-common/src/authority/ProtocolMode.ts","../node_modules/@azure/msal-common/src/authority/AuthorityOptions.ts","../node_modules/@azure/msal-browser/src/cache/BrowserStorage.ts","../node_modules/@azure/msal-common/src/url/UrlString.ts","../node_modules/@azure/msal-browser/src/utils/BrowserProtocolUtils.ts","../node_modules/@azure/msal-browser/src/cache/BrowserCacheManager.ts","../node_modules/@azure/msal-common/src/config/ClientConfiguration.ts","../node_modules/@azure/msal-common/src/network/INetworkModule.ts","../node_modules/@azure/msal-browser/src/network/FetchClient.ts","../node_modules/@azure/msal-browser/src/network/XhrClient.ts","../node_modules/@azure/msal-browser/src/utils/BrowserUtils.ts","../node_modules/@azure/msal-browser/src/navigation/NavigationClient.ts","../node_modules/@azure/msal-browser/src/config/Configuration.ts","../node_modules/@azure/msal-browser/src/event/EventType.ts","../node_modules/@azure/msal-browser/src/packageMetadata.ts","../node_modules/@azure/msal-common/src/crypto/PopTokenGenerator.ts","../node_modules/@azure/msal-browser/src/event/EventHandler.ts","../node_modules/@azure/msal-common/src/network/ThrottlingUtils.ts","../node_modules/@azure/msal-common/src/network/NetworkManager.ts","../node_modules/@azure/msal-common/src/request/RequestValidator.ts","../node_modules/@azure/msal-common/src/request/RequestParameterBuilder.ts","../node_modules/@azure/msal-common/src/client/BaseClient.ts","../node_modules/@azure/msal-common/src/cache/entities/CacheRecord.ts","../node_modules/@azure/msal-common/src/cache/persistence/TokenCacheContext.ts","../node_modules/@azure/msal-common/src/response/ResponseHandler.ts","../node_modules/@azure/msal-common/src/client/AuthorizationCodeClient.ts","../node_modules/@azure/msal-common/src/authority/OpenIdConfigResponse.ts","../node_modules/@azure/msal-common/src/authority/AuthorityMetadata.ts","../node_modules/@azure/msal-common/src/authority/RegionDiscovery.ts","../node_modules/@azure/msal-browser/src/error/NativeAuthError.ts","../node_modules/@azure/msal-common/src/authority/Authority.ts","../node_modules/@azure/msal-common/src/authority/CloudInstanceDiscoveryResponse.ts","../node_modules/@azure/msal-common/src/authority/CloudInstanceDiscoveryErrorResponse.ts","../node_modules/@azure/msal-common/src/authority/AuthorityFactory.ts","../node_modules/@azure/msal-common/src/telemetry/server/ServerTelemetryManager.ts","../node_modules/@azure/msal-browser/src/interaction_client/BaseInteractionClient.ts","../node_modules/@azure/msal-browser/src/interaction_client/StandardInteractionClient.ts","../node_modules/@azure/msal-common/src/client/RefreshTokenClient.ts","../node_modules/@azure/msal-common/src/client/SilentFlowClient.ts","../node_modules/@azure/msal-browser/src/interaction_client/SilentCacheClient.ts","../node_modules/@azure/msal-browser/src/interaction_client/NativeInteractionClient.ts","../node_modules/@azure/msal-browser/src/broker/nativeBroker/NativeMessageHandler.ts","../node_modules/@azure/msal-browser/src/interaction_handler/InteractionHandler.ts","../node_modules/@azure/msal-browser/src/interaction_client/PopupClient.ts","../node_modules/@azure/msal-browser/src/interaction_handler/RedirectHandler.ts","../node_modules/@azure/msal-browser/src/interaction_client/RedirectClient.ts","../node_modules/@azure/msal-browser/src/interaction_handler/SilentHandler.ts","../node_modules/@azure/msal-browser/src/interaction_client/SilentIframeClient.ts","../node_modules/@azure/msal-browser/src/interaction_client/SilentRefreshClient.ts","../node_modules/@azure/msal-browser/src/cache/TokenCache.ts","../node_modules/@azure/msal-browser/src/interaction_client/HybridSpaAuthorizationCodeClient.ts","../node_modules/@azure/msal-browser/src/interaction_client/SilentAuthCodeClient.ts","../node_modules/@azure/msal-browser/src/telemetry/BrowserPerformanceMeasurement.ts","../node_modules/@azure/msal-browser/src/telemetry/BrowserPerformanceClient.ts","../node_modules/@azure/msal-browser/src/app/ClientApplication.ts","../node_modules/@azure/msal-browser/src/app/PublicClientApplication.ts","store/actions/actionHandlers/loginActionHandler.js","../node_modules/@microsoft/signalr/src/DefaultReconnectPolicy.ts","../node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/@microsoft/signalr/src/Errors.ts","../node_modules/@microsoft/signalr/src/HttpClient.ts","../node_modules/@microsoft/signalr/src/FetchHttpClient.ts","../node_modules/@microsoft/signalr/src/XhrHttpClient.ts","../node_modules/@microsoft/signalr/src/ITransport.ts","../node_modules/@microsoft/signalr/src/DefaultHttpClient.ts","../node_modules/@microsoft/signalr/src/HeaderNames.ts","../node_modules/@microsoft/signalr/src/AbortController.ts","../node_modules/@microsoft/signalr/src/LongPollingTransport.ts","../node_modules/@microsoft/signalr/src/ServerSentEventsTransport.ts","../node_modules/@microsoft/signalr/src/WebSocketTransport.ts","../node_modules/@microsoft/signalr/src/HttpConnection.ts","../node_modules/@microsoft/signalr/src/JsonHubProtocol.ts","../node_modules/@microsoft/signalr/src/HubConnectionBuilder.ts","store/actions/actionHandlers/quizActionHandler.js","store/actions/actionHandlers/userActionHandler.js","store/actions/actionTypes.js","utils/commonQuizFunction.js","utils/decodeToken.js","utils/devApiContants.js","utils/errorTypes.js","utils/msalConfig.js","webpack://learner-portal/./src/views/ConnectPage/PollPage/PollResults/PollResults.module.scss?0d38","views/ConnectPage/PollPage/PollResults/PollResults.jsx","../node_modules/@azure/msal-common/src/error/AuthError.ts","../node_modules/@azure/msal-common/src/error/ClientAuthError.ts","../node_modules/@azure/msal-common/src/logger/Logger.ts","../node_modules/@azure/msal-common/src/utils/Constants.ts","../node_modules/@azure/msal-common/src/utils/StringUtils.ts","../node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Prefixer.js","../node_modules/stylis/src/Parser.js","../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js","../node_modules/@emotion/hash/dist/hash.browser.esm.js","../node_modules/@emotion/unitless/dist/unitless.browser.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js","../node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.browser.esm.js","../node_modules/@emotion/react/dist/emotion-element-cbed451f.browser.esm.js","../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","../node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js","../node_modules/@formatjs/ecma402-abstract/lib/utils.js","../node_modules/@formatjs/fast-memoize/lib/index.js","../node_modules/@formatjs/icu-messageformat-parser/node_modules/tslib/tslib.es6.js","../node_modules/@formatjs/icu-messageformat-parser/lib/error.js","../node_modules/@formatjs/icu-messageformat-parser/lib/types.js","../node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js","../node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js","../node_modules/@formatjs/icu-skeleton-parser/node_modules/tslib/tslib.es6.js","../node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js","../node_modules/@formatjs/icu-skeleton-parser/lib/number.js","../node_modules/@formatjs/icu-messageformat-parser/lib/parser.js","../node_modules/@formatjs/icu-messageformat-parser/lib/index.js","../node_modules/@formatjs/intl/lib/src/error.js","../node_modules/@formatjs/intl/lib/src/utils.js","../node_modules/@formatjs/intl/node_modules/tslib/tslib.es6.js","../node_modules/@microsoft/signalr/src/HubConnection.ts","../node_modules/@microsoft/signalr/src/HandshakeProtocol.ts","../node_modules/@microsoft/signalr/src/Subject.ts","../node_modules/@microsoft/signalr/src/IHubProtocol.ts","../node_modules/@microsoft/signalr/src/ILogger.ts","../node_modules/@microsoft/signalr/src/Loggers.ts","../node_modules/@microsoft/signalr/src/TextMessageFormat.ts","../node_modules/@microsoft/signalr/src/Utils.ts","../microsoftTeams/webpack/universalModuleDefinition","../microsoftTeams/node_modules/.pnpm/debug@4.3.4/node_modules/debug/src/browser.js","../microsoftTeams/node_modules/.pnpm/debug@4.3.4/node_modules/debug/src/common.js","../microsoftTeams/node_modules/.pnpm/ms@2.1.2/node_modules/ms/index.js","../microsoftTeams/webpack/bootstrap","../microsoftTeams/webpack/runtime/define property getters","../microsoftTeams/webpack/runtime/hasOwnProperty shorthand","../microsoftTeams/webpack/runtime/make namespace object","../microsoftTeams/src/internal/constants.ts","../microsoftTeams/src/internal/globalVars.ts","../microsoftTeams/src/internal/telemetry.ts","../microsoftTeams/node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/native.js","../microsoftTeams/node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/rng.js","../microsoftTeams/node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/stringify.js","../microsoftTeams/node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/v4.js","../microsoftTeams/src/public/interfaces.ts","../microsoftTeams/src/public/constants.ts","../microsoftTeams/src/internal/utils.ts","../microsoftTeams/src/public/runtime.ts","../microsoftTeams/src/public/authentication.ts","../microsoftTeams/src/public/dialog.ts","../microsoftTeams/src/public/menus.ts","../microsoftTeams/src/public/teamsAPIs.ts","../microsoftTeams/src/public/app.ts","../microsoftTeams/src/public/pages.ts","../microsoftTeams/src/public/version.ts","../microsoftTeams/src/internal/internalAPIs.ts","../microsoftTeams/src/private/inServerSideRenderingEnvironment.ts","../microsoftTeams/src/internal/handlers.ts","../microsoftTeams/src/internal/communication.ts","../microsoftTeams/src/private/logs.ts","../microsoftTeams/src/private/interfaces.ts","../microsoftTeams/src/private/conversations.ts","../microsoftTeams/src/private/privateAPIs.ts","../microsoftTeams/src/internal/deepLinkConstants.ts","../microsoftTeams/src/public/appInstallDialog.ts","../microsoftTeams/src/public/appNotification.ts","../microsoftTeams/src/internal/deepLinkUtilities.ts","../microsoftTeams/src/public/media.ts","../microsoftTeams/src/public/barCode.ts","../microsoftTeams/src/public/chat.ts","../microsoftTeams/src/public/geoLocation.ts","../microsoftTeams/src/internal/mediaUtil.ts","../microsoftTeams/src/public/adaptiveCards.ts","../microsoftTeams/src/public/appWindow.ts","../microsoftTeams/src/public/secondaryBrowser.ts","../microsoftTeams/src/public/location.ts","../microsoftTeams/src/public/meeting.ts","../microsoftTeams/src/public/monetization.ts","../microsoftTeams/src/public/calendar.ts","../microsoftTeams/src/public/mail.ts","../microsoftTeams/src/public/people.ts","../microsoftTeams/src/public/profile.ts","../microsoftTeams/src/internal/profileUtil.ts","../microsoftTeams/src/internal/videoFrameTick.ts","../microsoftTeams/src/internal/videoUtils.ts","../microsoftTeams/src/internal/videoPerformanceStatistics.ts","../microsoftTeams/src/internal/videoPerformanceMonitor.ts","../microsoftTeams/src/public/video.ts","../microsoftTeams/src/public/search.ts","../microsoftTeams/src/public/sharing.ts","../microsoftTeams/src/public/stageView.ts","../microsoftTeams/src/public/webStorage.ts","../microsoftTeams/src/public/call.ts","../microsoftTeams/src/public/appInitialization.ts","../microsoftTeams/src/public/settings.ts","../microsoftTeams/src/public/publicAPIs.ts","../microsoftTeams/src/public/navigation.ts","../microsoftTeams/src/public/tasks.ts","../microsoftTeams/src/public/liveShareHost.ts","../microsoftTeams/node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/regex.js","../microsoftTeams/node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/validate.js","../microsoftTeams/src/internal/marketplaceUtils.ts","../microsoftTeams/src/public/marketplace.ts","../microsoftTeams/src/private/files.ts","../microsoftTeams/src/private/meetingRoom.ts","../microsoftTeams/src/private/notifications.ts","../microsoftTeams/src/private/remoteCamera.ts","../microsoftTeams/src/private/appEntity.ts","../microsoftTeams/src/private/teams.ts","../microsoftTeams/src/private/videoEx.ts","../node_modules/axios/index.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/normalizeHeaderName.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/utils.js","../node_modules/@babel/runtime/helpers/esm/superPropBase.js","../node_modules/@babel/runtime/helpers/esm/get.js","../node_modules/chart.js/dist/chunks/helpers.segment.js","../node_modules/chart.js/dist/chart.esm.js","../node_modules/clsx/dist/clsx.m.js","../../../../../../webpack/bootstrap 50d3c294847480487dbf","../../../../../../src/browser.js","../../../../../../src/attach.js","../../../../../../external \"whatwg-fetch\"","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/intl-messageformat/lib/src/core.js","../node_modules/intl-messageformat/lib/src/error.js","../node_modules/intl-messageformat/lib/src/formatters.js","../node_modules/intl-messageformat/node_modules/tslib/tslib.es6.js","../node_modules/object-assign/index.js","../node_modules/q/q.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/index.js","../node_modules/react-intl/lib/src/components/injectIntl.js","../node_modules/react-intl/lib/src/components/message.js","../node_modules/react-intl/lib/src/components/useIntl.js","../node_modules/react-intl/lib/src/utils.js","../node_modules/react-intl/node_modules/tslib/tslib.es6.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/index.js","../node_modules/react-redux/es/components/Context.js","../node_modules/react-redux/es/utils/batch.js","../node_modules/react-redux/es/utils/Subscription.js","../node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","../node_modules/react-redux/es/components/Provider.js","../node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/react-redux/es/utils/bindActionCreators.js","../node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/react-redux/es/connect/mergeProps.js","../node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/react-redux/es/connect/connect.js","../node_modules/react-redux/es/hooks/useReduxContext.js","../node_modules/react-redux/es/hooks/useStore.js","../node_modules/react-redux/es/hooks/useDispatch.js","../node_modules/react-redux/es/hooks/useSelector.js","../node_modules/react-redux/es/index.js","../node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-redux/node_modules/react-is/index.js","../../packages/react-router-dom/index.tsx","../../packages/react-router/index.tsx","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/redux-devtools-extension/index.js","../node_modules/redux/es/redux.js","../node_modules/regenerator-runtime/runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/whatwg-fetch/fetch.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../webpack/bootstrap","../webpack/runtime/amd define","../webpack/runtime/amd options","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../webpack/runtime/publicPath","../webpack/runtime/css loading","../webpack/runtime/jsonp chunk loading","../webpack/startup"],"sourcesContent":["function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","module.exports = require(\"regenerator-runtime\");\n","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgBackIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 6.92,\n height: 11.719,\n viewBox: \"0 0 6.92 11.719\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_291\",\n \"data-name\": \"Path 291\",\n d: \"M5969.907-2430.784l-5.329,5.329,5.329,5.329\",\n transform: \"translate(-5963.518 2431.314)\",\n fill: \"none\",\n stroke: \"#404040\",\n strokeWidth: 1.5\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgBackIcon);\nexport default __webpack_public_path__ + \"static/media/backIcon.534898112c0d1efccb1073e7f1233633.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgUserCircleIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 34.875,\n height: 34.875,\n viewBox: \"0 0 34.875 34.875\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Icon_awesome-user-circle\",\n \"data-name\": \"Icon awesome-user-circle\",\n d: \"M17.438.563A17.438,17.438,0,1,0,34.875,18,17.434,17.434,0,0,0,17.438.563Zm0,6.75A6.188,6.188,0,1,1,11.25,13.5,6.188,6.188,0,0,1,17.438,7.313Zm0,24.188a13.474,13.474,0,0,1-10.3-4.8,7.839,7.839,0,0,1,6.926-4.2,1.72,1.72,0,0,1,.5.077,9.309,9.309,0,0,0,2.876.485,9.274,9.274,0,0,0,2.876-.485,1.72,1.72,0,0,1,.5-.077,7.839,7.839,0,0,1,6.926,4.2A13.474,13.474,0,0,1,17.438,31.5Z\",\n transform: \"translate(0 -0.563)\",\n fill: \"#b9b9b9\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgUserCircleIcon);\nexport default __webpack_public_path__ + \"static/media/userCircleIcon.7d24776e0575d22f9c103532fb888539.svg\";\nexport { ForwardRef as ReactComponent };","// extracted by mini-css-extract-plugin\nexport default {\"pinkButton\":\"Button_pinkButton__wHMTG\"};","import React from \"react\";\r\nimport classes from \"./Button.module.scss\";\r\nconst Button = ({ type, label, className, link, disabled, onClick }) => {\r\n return type === \"submit\" ? (\r\n \r\n {label}\r\n \r\n ) : (\r\n \r\n \r\n {label}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Button;\r\n","import React from \"react\";\r\nimport generalLogo from \"../../../assets/images/Shotclasses_General_Logo.png\";\r\nimport classes from \"./Logo.module.scss\";\r\nconst Logo = ({ className, logoImage, width, height }) => {\r\n return (\r\n <>\r\n {!!logoImage ? (\r\n \r\n ) : (\r\n \"Header\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Logo;\r\n","import React, { useEffect } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport \"./Modal.scss\";\r\n\r\nconst Modal = (props) => {\r\n let element = document.createElement(\"div\");\r\n const modalRoot = document.getElementById(\"modal-container\");\r\n useEffect(() => {\r\n modalRoot.appendChild(element);\r\n return () => {\r\n modalRoot.removeChild(element);\r\n };\r\n }, []);\r\n return createPortal(\r\n \r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n
{props.children}
\r\n \r\n ,\r\n element\r\n );\r\n};\r\nexport default Modal;\r\n","import React from 'react';\r\n\r\nconst ModalBody = (props) => {\r\n return (\r\n
\r\n {props.children}\r\n
\r\n );\r\n};\r\nexport default ModalBody;","// extracted by mini-css-extract-plugin\nexport default {\"noConversationFound\":\"NoConversationFound_noConversationFound__-sdVi\"};","import React from \"react\";\r\nimport classes from \"./NoConversationFound.module.scss\";\r\nconst NoConversationFound = (props) => {\r\n return (\r\n
\r\n {props.title}/\r\n

\r\n {props.title}\r\n

\r\n
\r\n );\r\n};\r\n\r\nexport default NoConversationFound;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"loader\":\"PageLoader_loader__KRK-S\",\"before\":\"PageLoader_before__3GRss\",\"after\":\"PageLoader_after__Vt91D\",\"loader_container\":\"PageLoader_loader_container__JL07x\",\"loader__gif\":\"PageLoader_loader__gif__mjQ8G\",\"loader__message\":\"PageLoader_loader__message__goCIT\"};","import React from \"react\";\r\nimport loader from \"../../../assets/images/loader-6.gif\";\r\nimport classes from \"./PageLoader.module.scss\";\r\nconst PageLoader = ({ message }) => {\r\n return (\r\n
\r\n {/*
*/}\r\n \"loading\"\r\n {message &&
{message}
}\r\n
\r\n );\r\n};\r\n\r\nexport default PageLoader;\r\n","import React from \"react\";\r\n\r\nconst MissedVoteIcon = ({ fill }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nexport default MissedVoteIcon;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"quizContainerModal\":\"QuizModal_quizContainerModal__6rm0b\",\"quizContainerModal__closeButton\":\"QuizModal_quizContainerModal__closeButton__kmgHW\",\"quizContainerModal__container\":\"QuizModal_quizContainerModal__container__7i62O\",\"quizContainerModal__heading\":\"QuizModal_quizContainerModal__heading__OztbD\",\"quizContainerModal__details\":\"QuizModal_quizContainerModal__details__zag0L\",\"quizContainerModal__buttonAndLink\":\"QuizModal_quizContainerModal__buttonAndLink__6gn4F\",\"primaryThemeButton\":\"QuizModal_primaryThemeButton__TRsTA\",\"quizContainerModal__link\":\"QuizModal_quizContainerModal__link__3V6eY\",\"quizContainer\":\"QuizModal_quizContainer__wGzWQ\"};","import React from \"react\";\r\nimport Button from \"../../CommonComponents/Button/Button\";\r\nimport classes from \"./QuizModal.module.scss\";\r\n\r\nconst QuizModal = (props) => {\r\n const {\r\n isShowCrossIcon,\r\n closeModal,\r\n heading,\r\n bodytext,\r\n okButtonText,\r\n IsCancelButtonRequired,\r\n cancelBtnText,\r\n submitClick,\r\n } = props;\r\n return (\r\n
\r\n
\r\n {isShowCrossIcon && (\r\n \r\n ×\r\n
\r\n )}\r\n\r\n
\r\n
\r\n {heading}\r\n
\r\n
\r\n {bodytext}\r\n
\r\n
\r\n \r\n {IsCancelButtonRequired === true && (\r\n \r\n {cancelBtnText}\r\n

\r\n )}\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default QuizModal;\r\n","import React, { useState } from \"react\";\r\nimport \"./Tooltip.scss\";\r\nimport styled from \"@emotion/styled\";\r\n\r\nconst Tooltip = (props) => {\r\n let timeout;\r\n const [active, setActive] = useState(false);\r\n\r\n const showTip = () => {\r\n timeout = setTimeout(() => {\r\n setActive(true);\r\n }, props.delay || 400);\r\n };\r\n\r\n const hideTip = () => {\r\n clearInterval(timeout);\r\n setActive(false);\r\n };\r\n\r\n const TooltipDiv = styled(\"div\")`\r\n background: ${props.backgroundColor ? props.backgroundColor : \"black\"};\r\n fontsize: 20px;\r\n &.Tooltip-Tip.${props.direction || \"top\"}::before {\r\n border-${props.direction || \"top\"}-color: ${\r\n props.backgroundColor ? props.backgroundColor : \"black\"\r\n };\r\n }\r\n `;\r\n\r\n return (\r\n \r\n {/* Wrapping */}\r\n {props.children}\r\n {active && (\r\n \r\n {/* Content */}\r\n {props.content}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Tooltip;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"hideFooterContainer\":\"HomeFooterContainer_hideFooterContainer__m2fcN\",\"heightAboveFooter\":\"HomeFooterContainer_heightAboveFooter__V5003\",\"footerContainer\":\"HomeFooterContainer_footerContainer__1MO5U\",\"footerList\":\"HomeFooterContainer_footerList__XcYrO\",\"footerList__active\":\"HomeFooterContainer_footerList__active__ESL+I\",\"first\":\"HomeFooterContainer_first__AitD5\"};","import React, { useEffect, useState } from \"react\";\r\nimport { useLocation, useNavigate } from \"react-router\";\r\nimport classes from \"./HomeFooterContainer.module.scss\";\r\nimport { FormattedMessage } from \"react-intl\";\r\nimport { useSelector } from \"react-redux\";\r\nconst HomeFooterContainer = () => {\r\n const location = useLocation();\r\n const navigate = useNavigate();\r\n const privacyPolicyState = useSelector((state) => state.privacyPolicyReducer);\r\n\r\n const { isPrivacyPolicy, getPrivacyPolicyDone } = privacyPolicyState;\r\n\r\n const [isVisible, setIsVisible] = useState(false);\r\n useEffect(() => {\r\n if (\r\n location?.pathname === \"/\" ||\r\n location?.pathname === \"/login\" ||\r\n location?.pathname.includes(\"/connect\") ||\r\n location?.pathname.includes(\"/account\") ||\r\n location?.pathname.includes(\"/series\") ||\r\n location?.pathname.includes(\"/quiz\") ||\r\n location?.pathname.includes(\"/shotclass\") ||\r\n location?.pathname.includes(\"/nopagefound\") ||\r\n location?.pathname.includes(\"/aadlogin\") ||\r\n location?.pathname.includes(\"/resetPassword\") ||\r\n location?.pathname.includes(\"/skillDetail\") ||\r\n isPrivacyPolicy === true\r\n ) {\r\n setIsVisible(false);\r\n } else {\r\n setIsVisible(true);\r\n }\r\n }, [location?.pathname, isPrivacyPolicy]);\r\n\r\n return (\r\n isPrivacyPolicy === false &&\r\n getPrivacyPolicyDone && (\r\n <>\r\n \r\n  \r\n \r\n \r\n
    \r\n
  • \r\n \r\n
  • \r\n |\r\n navigate(\"/privacyPolicy\")}\r\n className={\r\n location.pathname === \"/privacyPolicy\"\r\n ? classes.footerList__active\r\n : \"\"\r\n }\r\n >\r\n \r\n \r\n |{\" \"}\r\n navigate(\"/contactUs\")}\r\n className={\r\n location.pathname === \"/contactUs\"\r\n ? classes.footerList__active\r\n : \"\"\r\n }\r\n >\r\n \r\n \r\n
\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default HomeFooterContainer;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"homeNavbarLink\":\"HomeNavbarLink_homeNavbarLink__wZV30\",\"homeNavbarLink__active\":\"HomeNavbarLink_homeNavbarLink__active__1EG0Z\"};","import React from \"react\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport classes from \"./HomeNavbarLink.module.scss\";\r\nconst HomeNavbarLink = ({ to, children, multiLogo, active, inActive, onClick }) => {\r\n return (\r\n {\r\n return active\r\n ? classes.homeNavbarLink + \" \" + classes.homeNavbarLink__active\r\n : inActive\r\n ? classes.homeNavbarLink\r\n : isActive\r\n ? classes.homeNavbarLink + \" \" + classes.homeNavbarLink__active\r\n : classes.homeNavbarLink;\r\n }}\r\n >\r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default HomeNavbarLink;\r\n","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgFilterIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"fltr_ic\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24.511,\n height: 21.197,\n viewBox: \"0 0 24.511 21.197\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_336\",\n \"data-name\": \"Path 336\",\n d: \"M32.978,22.173h-1.95a2.893,2.893,0,0,0-5.691,0H9.533a.533.533,0,1,0,0,1.066h15.8a2.893,2.893,0,0,0,5.691,0h1.95a.533.533,0,0,0,0-1.066Zm-4.8,2.366a1.833,1.833,0,1,1,1.833-1.833A1.833,1.833,0,0,1,28.182,24.539Zm4.8,5.328H24.1a2.893,2.893,0,0,0-5.691,0H9.533a.533.533,0,1,0,0,1.066H18.41a2.893,2.893,0,0,0,5.691,0h8.877a.533.533,0,0,0,0-1.066ZM21.255,32.238a1.833,1.833,0,1,1,1.833-1.833A1.833,1.833,0,0,1,21.255,32.238ZM9.533,15.539h1.95a2.893,2.893,0,0,0,5.691,0h15.8a.533.533,0,0,0,0-1.066h-15.8a2.893,2.893,0,0,0-5.691,0H9.533a.533.533,0,1,0,0,1.066Zm4.8-2.366A1.833,1.833,0,1,1,12.5,15.006,1.833,1.833,0,0,1,14.328,13.173Z\",\n transform: \"translate(-9 -12.105)\",\n fill: \"#707070\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFilterIcon);\nexport default __webpack_public_path__ + \"static/media/filterIcon.88c9f124fd1a4bb3aa96790f1ef3deb3.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgHomeIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"ft-1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 25.024,\n height: 23,\n viewBox: \"0 0 25.024 23\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_38\",\n \"data-name\": \"Path 38\",\n d: \"M5.6,20.391,7.484,22.5l10.628-9.532L28.74,22.5l1.884-2.109L18.112,9.2Z\",\n transform: \"translate(-5.6 -9.2)\",\n fill: \"#404040\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_39\",\n \"data-name\": \"Path 39\",\n d: \"M36.139,46.433V36.845L27.169,29,18.2,36.845v9.588h6.832v-7.2H29.25v7.2Z\",\n transform: \"translate(-14.657 -23.433)\",\n fill: \"#404040\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgHomeIcon);\nexport default __webpack_public_path__ + \"static/media/homeIcon.9cdbde74a683200a22fa9996c6e00c74.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgLangIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"chng_lng_ic\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 32.241,\n height: 29.339,\n viewBox: \"0 0 32.241 29.339\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_337\",\n \"data-name\": \"Path 337\",\n d: \"M30.9,14.442H21.917V8.147a3.4,3.4,0,0,0-3.4-3.4H5.457a3.4,3.4,0,0,0-3.4,3.4v8.168a3.322,3.322,0,0,0,.582,1.9c1.244,2.423,7.166,6.057,7.226,6.111a.535.535,0,0,0,.775-.657,23.594,23.594,0,0,1-1.077-3.957h4.878v6.3a3.4,3.4,0,0,0,3.4,3.392H26.8a23.593,23.593,0,0,1-1.077,3.957.532.532,0,0,0,.775.652c.059-.038,5.982-3.688,7.226-6.111A3.322,3.322,0,0,0,34.3,26V17.839A3.4,3.4,0,0,0,30.9,14.442ZM12.522,18.631h-3.6a.541.541,0,0,0-.533.625,29.232,29.232,0,0,0,.748,3.306c-1.863-1.26-4.8-3.424-5.53-4.819a.689.689,0,0,0-.059-.108,2.283,2.283,0,0,1-.415-1.319V8.147A2.326,2.326,0,0,1,5.457,5.827H18.52A2.326,2.326,0,0,1,20.84,8.147v6.294h-3A3.4,3.4,0,0,0,15.2,15.707a4.754,4.754,0,0,1-2.208-.538,6.746,6.746,0,0,0,1.68-4.1h.678a.538.538,0,1,0,0-1.077h-2.8v-1.7a.538.538,0,0,0-1.077,0V9.978H8.666a.538.538,0,1,0,0,1.077h4.921a5.637,5.637,0,0,1-1.395,3.371l-.086.081a5.594,5.594,0,0,1-1.346-2.084.539.539,0,0,0-1.007.388,6.709,6.709,0,0,0,1.465,2.337,5.282,5.282,0,0,1-2.536.565h0a.538.538,0,1,0,0,1.077,6.192,6.192,0,0,0,3.43-.91,5.567,5.567,0,0,0,2.514.851,3.3,3.3,0,0,0-.183,1.077V18.6Zm20.7,7.376a2.283,2.283,0,0,1-.415,1.319.372.372,0,0,0-.054.1c-.732,1.395-3.672,3.564-5.535,4.846a29.231,29.231,0,0,0,.748-3.306.541.541,0,0,0-.533-.625H17.841a2.321,2.321,0,0,1-2.321-2.315V17.839a2.326,2.326,0,0,1,2.321-2.321H30.9a2.326,2.326,0,0,1,2.321,2.321Zm-8.329-8.281h0a.49.49,0,0,0-.081-.124.062.062,0,0,0-.038-.054.565.565,0,0,0-.059-.038.538.538,0,0,0-.113-.075h0a.484.484,0,0,0-.086,0,.834.834,0,0,0-.113,0,.641.641,0,0,0-.14.027h-.059a.608.608,0,0,0-.14.086l-.038.027-.043.065a.824.824,0,0,0-.075.113h0l-3.231,8.076a.538.538,0,0,0,.3.7.506.506,0,0,0,.2.038.538.538,0,0,0,.5-.339l.937-2.353H26.2l.942,2.353a.539.539,0,1,0,1-.4Zm-1.868,5.045,1.362-3.4,1.357,3.4Z\",\n transform: \"translate(-2.06 -4.75)\",\n fill: \"#707070\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLangIcon);\nexport default __webpack_public_path__ + \"static/media/langIcon.fb0ced7ad01d14f2be90631078f11e29.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\n\r\nconst FavouriteIconBig = ({ fill, stroke }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FavouriteIconBig;\r\n","import React from \"react\";\r\n\r\nconst ArrowNextIcon = ({ fill }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nexport default ArrowNextIcon;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"homeNavbar\":\"HomeNavbar_homeNavbar__wyN9Q\",\"homeNavbar__filter\":\"HomeNavbar_homeNavbar__filter__A6Bxb\",\"homeNavbar__homeLinks\":\"HomeNavbar_homeNavbar__homeLinks__bmcu5\",\"globalSearchLinks\":\"HomeNavbar_globalSearchLinks__L86hW\",\"homenavbar__mobile\":\"HomeNavbar_homenavbar__mobile__y54RQ\",\"homeNavbar__links\":\"HomeNavbar_homeNavbar__links__28uxF\",\"checkbox_section\":\"HomeNavbar_checkbox_section__8JBps\",\"moreDropdownContainer\":\"HomeNavbar_moreDropdownContainer__W5xPQ\",\"threeDots\":\"HomeNavbar_threeDots__ppXsh\",\"threeDotsDropDownContainer\":\"HomeNavbar_threeDotsDropDownContainer__Zt0BZ\",\"result_count\":\"HomeNavbar_result_count__R3npc\",\"homeNavbar__filterAndFavourite\":\"HomeNavbar_homeNavbar__filterAndFavourite__ATA8n\",\"homeNavbar__filterAndFavourite__link\":\"HomeNavbar_homeNavbar__filterAndFavourite__link__PzqkO\",\"contentLangDropdown\":\"HomeNavbar_contentLangDropdown__-4F3W\",\"dropdown_heading\":\"HomeNavbar_dropdown_heading__hd0WX\",\"language_searchbox\":\"HomeNavbar_language_searchbox__TvMxb\",\"language_list\":\"HomeNavbar_language_list__XX2aH\",\"language_list_item\":\"HomeNavbar_language_list_item__Qk9h6\",\"filterDropdown\":\"HomeNavbar_filterDropdown__J8wt1\",\"drop\":\"HomeNavbar_drop__OR-Ol\",\"dropdown_header\":\"HomeNavbar_dropdown_header__Yc3+V\",\"heading_text\":\"HomeNavbar_heading_text__ZF0nR\",\"action_box\":\"HomeNavbar_action_box__h0csY\",\"btn_reset\":\"HomeNavbar_btn_reset__72d+5\",\"filterBody\":\"HomeNavbar_filterBody__M1H6E\",\"filterBody_heading\":\"HomeNavbar_filterBody_heading__f1rsW\",\"filterBody_list\":\"HomeNavbar_filterBody_list__W1gao\",\"filterBody_list_item\":\"HomeNavbar_filterBody_list_item__VW0Sz\",\"trainingTypes\":\"HomeNavbar_trainingTypes__ni+v9\",\"trainingType_header\":\"HomeNavbar_trainingType_header__FZmV+\",\"trainingType_searchbox\":\"HomeNavbar_trainingType_searchbox__ImYbi\",\"trainingType_list\":\"HomeNavbar_trainingType_list__ii5+B\",\"trainingType_list_item\":\"HomeNavbar_trainingType_list_item__zdVTX\",\"homeNavbar__links__creditStateType\":\"HomeNavbar_homeNavbar__links__creditStateType__Bkkeg\",\"homeNavbar__links__creditStateType__stateType\":\"HomeNavbar_homeNavbar__links__creditStateType__stateType__vhQz9\",\"homeNavbar__links__creditStateType__stateTypeActive\":\"HomeNavbar_homeNavbar__links__creditStateType__stateTypeActive__NQghF\",\"homeNavbar__links__creditStateType__toggleBtn\":\"HomeNavbar_homeNavbar__links__creditStateType__toggleBtn__OnjJe\",\"homeNavbar__links__creditStateType__toggleBtn__innerCircle\":\"HomeNavbar_homeNavbar__links__creditStateType__toggleBtn__innerCircle__B++57\",\"homeNavbar__links__creditStateType__toggleBtn__innerCircleRight\":\"HomeNavbar_homeNavbar__links__creditStateType__toggleBtn__innerCircleRight__TPYx2\",\"tooltip\":\"HomeNavbar_tooltip__Cd34p\",\"tooltiptext\":\"HomeNavbar_tooltiptext__OnUbv\",\"custom-checkbox\":\"HomeNavbar_custom-checkbox__0880h\",\"backToReport\":\"HomeNavbar_backToReport__u5IJL\",\"backToReport__active\":\"HomeNavbar_backToReport__active__sEfah\",\"homeNavbarfilterAndFavouritemobile\":\"HomeNavbar_homeNavbarfilterAndFavouritemobile__n54Bu\",\"homeNavbarMobileFilter\":\"HomeNavbar_homeNavbarMobileFilter__JGw08\",\"opaqueLayer\":\"HomeNavbar_opaqueLayer__9PnIK\"};","// extracted by mini-css-extract-plugin\nexport default {\"filter\":\"FilterCredit_filter__3aY2A\",\"filter__header\":\"FilterCredit_filter__header__LWjq6\",\"filter__header__heading\":\"FilterCredit_filter__header__heading__NSXtn\",\"filter__header__img\":\"FilterCredit_filter__header__img__23fmA\",\"filter__header__reset\":\"FilterCredit_filter__header__reset__Da6fZ\",\"filter__body\":\"FilterCredit_filter__body__kpnq9\",\"filter__body__heading\":\"FilterCredit_filter__body__heading__JnpMG\",\"filter__body__list\":\"FilterCredit_filter__body__list__h0mPg\",\"box\":\"FilterCredit_box__4Yb4a\",\"option\":\"FilterCredit_option__+YOvT\"};","import React from \"react\";\r\nimport resetIcon from \"../../assets/images/reset_icon.png\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { setCreditFilterTypeAction } from \"../../store/actions/actionCreators/creditActionCreator\";\r\nimport classes from \"./FilterCredit.module.scss\";\r\nimport { FormattedMessage } from \"react-intl\";\r\nconst FilterCredit = ({ reference }) => {\r\n const dispatch = useDispatch();\r\n const creditState = useSelector((state) => state.creditReducer);\r\n const { creditFilterType } = creditState;\r\n const handleSetTime = (value) => {\r\n const val = parseInt(value);\r\n dispatch(setCreditFilterTypeAction(val));\r\n };\r\n const handleResetTime = () => {\r\n if (creditFilterType !== 1) {\r\n dispatch(setCreditFilterTypeAction(1));\r\n }\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n :\r\n
\r\n
    \r\n
  • handleSetTime(1)}>\r\n handleSetTime(e.target.value)}\r\n />\r\n \r\n
  • \r\n
  • handleSetTime(2)}>\r\n handleSetTime(e.target.value)}\r\n />\r\n \r\n
  • \r\n
    \r\n
  • handleSetTime(3)}>\r\n handleSetTime(e.target.value)}\r\n />\r\n \r\n
  • \r\n
  • handleSetTime(4)}>\r\n handleSetTime(e.target.value)}\r\n />\r\n \r\n
  • \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default FilterCredit;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"quizTimer\":\"QuizTimer_quizTimer__lHRG7\",\"quizTimerText\":\"QuizTimer_quizTimerText__D49cO\",\"timerText\":\"QuizTimer_timerText__UveJo\",\"timer\":\"QuizTimer_timer__zV4Nq\"};","var _g;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgTimerIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"timer_icon\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 22.582,\n height: 27.372,\n viewBox: \"0 0 22.582 27.372\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_1081\",\n \"data-name\": \"Group 1081\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1194\",\n \"data-name\": \"Path 1194\",\n d: \"M32.954,14.415a.847.847,0,1,0-1.2-1.2l-2.4,2.4a11.035,11.035,0,0,0-6.415-2.652V9.711h1.2A.808.808,0,0,0,25,8.855.808.808,0,0,0,24.144,8H19.953a.808.808,0,0,0-.855.855.808.808,0,0,0,.855.855h1.283v3.165a11.628,11.628,0,0,0-6.5,2.652l-2.4-2.4a.847.847,0,1,0-1.2,1.2l2.4,2.4A11.151,11.151,0,0,0,10.8,24.081a11.291,11.291,0,0,0,22.582,0,11.151,11.151,0,0,0-2.737-7.356ZM22.091,33.661a9.58,9.58,0,1,1,0-19.161,9.3,9.3,0,0,1,6.672,2.737h0A9.569,9.569,0,0,1,31.586,24,9.459,9.459,0,0,1,22.091,33.661Z\",\n transform: \"translate(-10.8 -8)\",\n fill: \"#404040\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_1195\",\n \"data-name\": \"Path 1195\",\n d: \"M24.711,25.446v-4.79a.855.855,0,0,0-1.711,0v5.132a.514.514,0,0,0,.086.342c.086.086.086.171.171.257L26.25,29.38a.827.827,0,0,0,1.2,0,.827.827,0,0,0,0-1.2Z\",\n transform: \"translate(-12.564 -9.707)\",\n fill: \"#404040\"\n }))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgTimerIcon);\nexport default __webpack_public_path__ + \"static/media/timer_icon.a09bb92f49ce16173322458275dbe025.svg\";\nexport { ForwardRef as ReactComponent };","import classes from \"./QuizTimer.module.scss\";\r\nimport timerIcon from \"../../../assets/images/QuizImageAndIcons/timer_icon.svg\";\r\nimport React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {\r\n setTimerDialog,\r\n setSessionDialog,\r\n startQuizTimer,\r\n endQuizTimer,\r\n endQuizCounter,\r\n startQuizCounter,\r\n} from \"../../../store/actions/actionCreators/quizActionCreator\";\r\nlet startcount = 0,\r\n endcount = 0;\r\nclass QuizTimer extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n running: false,\r\n currentTimeHr: 0,\r\n currentTimeMs: 0,\r\n currentTimeSec: 0,\r\n currentTimeMin: 0,\r\n totalQDuration: 0,\r\n watch: 0,\r\n };\r\n }\r\n componentDidMount() {\r\n endcount = 0;\r\n startcount = 0;\r\n }\r\n\r\n formatTime = (val, ...rest) => {\r\n let value = val.toString();\r\n if (value.length < 2) {\r\n value = \"0\" + value;\r\n }\r\n if (rest[0] === \"ms\" && value.length < 3) {\r\n value = \"0\" + value;\r\n }\r\n return value;\r\n };\r\n\r\n start = () => {\r\n if (\r\n localStorage.getItem(\"resumeTimeMin\") !== null &&\r\n this.state.currentTimeMs === 0\r\n ) {\r\n this.setState({\r\n currentTimeMin: localStorage.getItem(\"resumeTimeMin\"),\r\n });\r\n localStorage.setItem(\r\n \"currentTimeMin\",\r\n localStorage.getItem(\"resumeTimeMin\")\r\n );\r\n }\r\n if (\r\n localStorage.getItem(\"resumeTimeHr\") !== null &&\r\n this.state.currentTimeMs === 0\r\n ) {\r\n this.setState({\r\n currentTimeHr: localStorage.getItem(\"resumeTimeHr\"),\r\n });\r\n localStorage.setItem(\r\n \"currentTimeHr\",\r\n localStorage.getItem(\"resumeTimeHr\")\r\n );\r\n }\r\n if (\r\n localStorage.getItem(\"resumeTimeSec\") !== null &&\r\n this.state.currentTimeMs === 0\r\n ) {\r\n this.setState({\r\n currentTimeSec: localStorage.getItem(\"resumeTimeSec\"),\r\n });\r\n localStorage.setItem(\r\n \"currentTimeSec\",\r\n localStorage.getItem(\"resumeTimeSec\")\r\n );\r\n }\r\n if (\r\n localStorage.getItem(\"resumeTimeMs\") !== null &&\r\n this.state.currentTimeMs === 0\r\n ) {\r\n this.setState({\r\n currentTimeMs: localStorage.getItem(\"resumeTimeMs\"),\r\n });\r\n localStorage.setItem(\r\n \"currentTimeMs\",\r\n localStorage.getItem(\"resumeTimeMs\")\r\n );\r\n }\r\n\r\n if (!this.state.running) {\r\n this.setState({ running: true });\r\n this.watch = setInterval(() => this.pace(), 10);\r\n }\r\n };\r\n\r\n stop = () => {\r\n this.setState({ running: false });\r\n clearInterval(this.watch);\r\n };\r\n\r\n pace = () => {\r\n if (this.state.running) {\r\n this.setState({\r\n currentTimeMs: Number(this.state.currentTimeMs) + 10,\r\n });\r\n localStorage.setItem(\"currentTimeMs\", this.state.currentTimeMs);\r\n\r\n if (this.state.currentTimeMs >= 1000) {\r\n this.setState({\r\n currentTimeSec: Number(this.state.currentTimeSec) + 1,\r\n });\r\n this.setState({ currentTimeMs: 0 });\r\n localStorage.setItem(\r\n \"currentTimeSec\",\r\n this.state.currentTimeSec\r\n );\r\n }\r\n if (this.state.currentTimeSec >= 60) {\r\n this.setState({\r\n currentTimeMin: Number(this.state.currentTimeMin) + 1,\r\n });\r\n this.setState({ currentTimeSec: 0 });\r\n localStorage.setItem(\r\n \"currentTimeMin\",\r\n this.state.currentTimeMin\r\n );\r\n }\r\n if (this.state.currentTimeMin >= 60) {\r\n this.setState({\r\n currentTimeHr: Number(this.state.currentTimeHr) + 1,\r\n });\r\n this.setState({ currentTimeMin: 0 });\r\n localStorage.setItem(\"currentTimeHr\", this.state.currentTimeHr);\r\n }\r\n }\r\n };\r\n reset = () => {\r\n this.setState({\r\n currentTimeHr: 0,\r\n currentTimeMs: 0,\r\n currentTimeSec: 0,\r\n currentTimeMin: 0,\r\n });\r\n };\r\n\r\n componentDidUpdate() {\r\n if (this.props.startTimer && this.props.startQCounter === 0) {\r\n startcount++;\r\n this.props.startQuizCounter();\r\n this.start();\r\n }\r\n if (this.props.endTimer && this.props.endQCounter === 0) {\r\n endcount++;\r\n this.props.endQuizCounter();\r\n this.stop();\r\n }\r\n if (this.props.isReset) {\r\n this.reset();\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \"timerIcon\"\r\n

\r\n Quiz Timer\r\n \r\n {this.formatTime(this.state.currentTimeHr)}:\r\n {this.formatTime(this.state.currentTimeMin)}:\r\n {this.formatTime(this.state.currentTimeSec)}\r\n \r\n

\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n timereset: state.quizReducer.timerreset,\r\n startTimer: state.quizReducer.vQuizStarted,\r\n endTimer: state.quizReducer.vQuizEnded,\r\n startQCounter: state.quizReducer.startQCounter,\r\n endQCounter: state.quizReducer.endQCounter,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setTimerDialog: (value) => {\r\n dispatch(setTimerDialog(value));\r\n },\r\n setSessionDialog: (value) => {\r\n dispatch(setSessionDialog(value));\r\n },\r\n startQuizTimer: () => {\r\n dispatch(startQuizTimer());\r\n },\r\n endQuizTimer: () => {\r\n dispatch(endQuizTimer());\r\n },\r\n endQuizCounter: () => {\r\n dispatch(endQuizCounter());\r\n },\r\n startQuizCounter: () => {\r\n dispatch(startQuizCounter());\r\n },\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(QuizTimer);\r\n\r\n// import React, { useEffect, useState } from \"react\";\r\n// import classes from \"./QuizTimer.module.scss\";\r\n// import timerIcon from \"../../../assets/images/QuizImageAndIcons/timer_icon.svg\";\r\n// import { useDispatch, useSelector } from \"react-redux\";\r\n// import {\r\n// endQuizCounter,\r\n// startQuizCounter,\r\n// } from \"../../../store/actions/actionCreators/quizActionCreator\";\r\n\r\n// const QuizTimer = () => {\r\n// const quizState = useSelector((state) => state.quizReducer);\r\n// const { vQuizStarted, vQuizEnded, startQCounter, endQCounter } = quizState;\r\n// const dispatch = useDispatch();\r\n// const [running, setrunning] = useState(false);\r\n// const [currentTimeHr, setcurrentTimeHr] = useState(0);\r\n// const [currentTimeMin, setcurrentTimeMin] = useState(0);\r\n// const [currentTimeSec, setcurrentTimeSec] = useState(0);\r\n// const [currentTimeMs, setcurrentTimeMs] = useState(0);\r\n// const [watch, setwatch] = useState(0);\r\n// let startcount = 0;\r\n// let endcount = 0;\r\n\r\n// useEffect(() => {\r\n// console.log(\"started\");\r\n// if (vQuizStarted && startQCounter === 0) {\r\n// startcount++;\r\n// dispatch(startQuizCounter());\r\n// start();\r\n// }\r\n// if (vQuizEnded && endQCounter === 0) {\r\n// endcount++;\r\n// dispatch(endQuizCounter());\r\n// stop();\r\n// }\r\n// });\r\n// const formatTime = (val, ...rest) => {\r\n// let value = val.toString();\r\n// if (value.length < 2) {\r\n// value = \"0\" + value;\r\n// }\r\n// if (rest[0] === \"ms\" && value.length < 3) {\r\n// value = \"0\" + value;\r\n// }\r\n// return value;\r\n// };\r\n// const start = () => {\r\n// if (\r\n// localStorage.getItem(\"resumeTimeMin\") !== null &&\r\n// currentTimeMs === 0\r\n// ) {\r\n// setcurrentTimeMin(localStorage.getItem(\"resumeTimeMin\"));\r\n// localStorage.setItem(\r\n// \"currentTimeMin\",\r\n// localStorage.getItem(\"resumeTimeMin\")\r\n// );\r\n// }\r\n// if (\r\n// localStorage.getItem(\"resumeTimeHr\") !== null &&\r\n// currentTimeMs === 0\r\n// ) {\r\n// setcurrentTimeHr(localStorage.getItem(\"resumeTimeHr\"));\r\n// localStorage.setItem(\r\n// \"currentTimeHr\",\r\n// localStorage.getItem(\"resumeTimeHr\")\r\n// );\r\n// }\r\n// if (\r\n// localStorage.getItem(\"resumeTimeSec\") !== null &&\r\n// currentTimeMs === 0\r\n// ) {\r\n// setcurrentTimeSec(localStorage.getItem(\"resumeTimeSec\"));\r\n// localStorage.setItem(\r\n// \"currentTimeSec\",\r\n// localStorage.getItem(\"resumeTimeSec\")\r\n// );\r\n// }\r\n// if (\r\n// localStorage.getItem(\"resumeTimeMs\") !== null &&\r\n// currentTimeMs === 0\r\n// ) {\r\n// setcurrentTimeMs(localStorage.getItem(\"resumeTimeMs\"));\r\n// localStorage.setItem(\r\n// \"currentTimeMs\",\r\n// localStorage.getItem(\"resumeTimeMs\")\r\n// );\r\n// }\r\n\r\n// if (!running) {\r\n// console.log(\"in start\");\r\n// setrunning(true);\r\n// setwatch(() => setInterval(pace, 10));\r\n// }\r\n// };\r\n// const stop = () => {\r\n// setrunning(false);\r\n// clearInterval(watch);\r\n// };\r\n// const pace = () => {\r\n// if (running) {\r\n// console.log(\"running\");\r\n// setcurrentTimeMs(Number(currentTimeMs) + 10);\r\n// localStorage.setItem(\"currentTimeMs\", currentTimeMs);\r\n\r\n// if (currentTimeMs >= 1000) {\r\n// console.log(\"currentTimeMs\", currentTimeMs);\r\n// setcurrentTimeSec(Number(currentTimeSec) + 1);\r\n// setcurrentTimeMs(0);\r\n// localStorage.setItem(\"currentTimeSec\", currentTimeSec);\r\n// }\r\n// if (currentTimeSec >= 60) {\r\n// console.log(\"currentTimeSec\", currentTimeSec);\r\n// setcurrentTimeMin(Number(currentTimeMin) + 1);\r\n// setcurrentTimeSec(0);\r\n// localStorage.setItem(\"currentTimeMin\", currentTimeMin);\r\n// }\r\n// if (currentTimeMin >= 60) {\r\n// console.log(\"currentTimeMin\", currentTimeSec);\r\n// setcurrentTimeHr(Number(currentTimeHr) + 1);\r\n// setcurrentTimeMin(0);\r\n// localStorage.setItem(\"currentTimeHr\", currentTimeHr);\r\n// }\r\n// }\r\n// };\r\n// const reset = () => {\r\n// setcurrentTimeHr(0);\r\n// setcurrentTimeMin(0);\r\n// setcurrentTimeSec(0);\r\n// setcurrentTimeMs(0);\r\n// };\r\n\r\n// return (\r\n//
\r\n// \"timerIcon\"\r\n//

\r\n// Quiz Timer\r\n// \r\n// {formatTime(currentTimeHr)}:{formatTime(currentTimeMin)}:\r\n// {formatTime(currentTimeSec)}\r\n// \r\n//

\r\n//
\r\n// );\r\n// };\r\n\r\n// export default QuizTimer;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"homeNavbarFilter\":\"HomeNavbarFilter_homeNavbarFilter__YSHDF\",\"drop\":\"HomeNavbarFilter_drop__Zkr5D\",\"homeNavbarOpaqueLayer\":\"HomeNavbarFilter_homeNavbarOpaqueLayer__l7Wrv\",\"homeNavbarFilter__header\":\"HomeNavbarFilter_homeNavbarFilter__header__+77UR\",\"homeNavbarFilter__header__heading\":\"HomeNavbarFilter_homeNavbarFilter__header__heading__eiovx\",\"homeNavbarFilter__header__reset\":\"HomeNavbarFilter_homeNavbarFilter__header__reset__a-70C\",\"homeNavbarFilter__sortBy\":\"HomeNavbarFilter_homeNavbarFilter__sortBy__H6m-q\",\"homeNavbarFilter__sortByStatus\":\"HomeNavbarFilter_homeNavbarFilter__sortByStatus__11+mm\",\"homeNavbarFilter__sortBy__heading\":\"HomeNavbarFilter_homeNavbarFilter__sortBy__heading__8cRRp\",\"homeNavbarFilter__sortByStatus__heading\":\"HomeNavbarFilter_homeNavbarFilter__sortByStatus__heading__fiEjE\",\"homeNavbarFilter__sortBy__sortList\":\"HomeNavbarFilter_homeNavbarFilter__sortBy__sortList__n-nzN\",\"homeNavbarFilter__sortByStatus__sortList\":\"HomeNavbarFilter_homeNavbarFilter__sortByStatus__sortList__Y0l8C\",\"homeNavbarFilter__sortBy__sortList__item\":\"HomeNavbarFilter_homeNavbarFilter__sortBy__sortList__item__YtOmu\",\"homeNavbarFilter__sortByStatus__sortList__item\":\"HomeNavbarFilter_homeNavbarFilter__sortByStatus__sortList__item__dcF0f\",\"homeNavbarFilter__filterByType\":\"HomeNavbarFilter_homeNavbarFilter__filterByType__bnX8E\",\"homeNavbarFilter__filterByType__header\":\"HomeNavbarFilter_homeNavbarFilter__filterByType__header__D-zte\",\"homeNavbarFilter__filterByType__header__heading\":\"HomeNavbarFilter_homeNavbarFilter__filterByType__header__heading__ViqGH\",\"homeNavbarFilter__filterByType__header__search\":\"HomeNavbarFilter_homeNavbarFilter__filterByType__header__search__jywQr\",\"homeNavbarFilter__filterByType__filterList\":\"HomeNavbarFilter_homeNavbarFilter__filterByType__filterList__1auVZ\",\"homeNavbarFilter__filterByType__filterList__item\":\"HomeNavbarFilter_homeNavbarFilter__filterByType__filterList__item__ag5ss\"};","import React, { useEffect, useState } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport resetIcon from \"../../../assets/images/reset_icon.png\";\r\nimport smallMagnifyingGlass from \"../../../assets/images/smallMagnifyingGlass.png\";\r\nimport {\r\n setHomeFilterAction,\r\n setHomeFilterSelectedAction,\r\n} from \"../../../store/actions/actionCreators/homeActionCreator\";\r\nimport classes from \"./HomeNavbarFilter.module.scss\";\r\nimport { FormattedMessage, injectIntl } from \"react-intl\";\r\n\r\nconst HomeNavbarFilter = ({ reference, intl }) => {\r\n const dispatch = useDispatch();\r\n const homeState = useSelector((state) => state.homeReducer);\r\n const { homeFilter, homeFilterSelected } = homeState;\r\n\r\n const [searchTrainingType, setSearchTrainingType] = useState(\"\");\r\n const [searchTrainingTypesList, setSearchTrainingTypesList] = useState([]);\r\n const [trainingTypesList, setTrainingTypesList] = useState([]);\r\n const [sortBySeriesSelected, setSortBySeriesSelected] = useState(false);\r\n useEffect(() => {\r\n // homeFilter?.sortBy?.forEach((sort) => {\r\n if (homeFilterSelected?.sortBy === \"Series\") {\r\n setSortBySeriesSelected(true);\r\n } else if (homeFilterSelected?.sortBy !== \"Series\") {\r\n setSortBySeriesSelected(false);\r\n }\r\n // });\r\n }, [homeFilterSelected?.sortBy]);\r\n\r\n useEffect(() => {\r\n setTrainingTypesList(homeFilter?.filterByType);\r\n }, [homeFilter?.filterByType]);\r\n useEffect(() => {\r\n const filteredTrainingTypeArray = homeFilter?.filterByType?.filter((type) =>\r\n type.Name.toLowerCase().includes(searchTrainingType.toLowerCase())\r\n );\r\n if (searchTrainingType.length > 0) {\r\n setSearchTrainingTypesList(filteredTrainingTypeArray);\r\n } else {\r\n setSearchTrainingTypesList(homeFilter?.filterByType);\r\n }\r\n }, [searchTrainingType, homeFilter?.filterByType]);\r\n\r\n useEffect(() => {\r\n let count = 0;\r\n homeFilter?.sortByStatus?.forEach((status) => {\r\n if (status.isSelected === false) {\r\n count++;\r\n }\r\n });\r\n if (count === 4) {\r\n const updatedSortByStatusArr = homeFilter?.sortByStatus?.map(\r\n (type, index) => {\r\n if (index === 0) {\r\n return { ...type, isSelected: true };\r\n } else {\r\n return { ...type, isSelected: false };\r\n }\r\n }\r\n );\r\n dispatch(\r\n setHomeFilterAction({\r\n ...homeFilter,\r\n sortByStatus: updatedSortByStatusArr,\r\n })\r\n );\r\n dispatch(\r\n setHomeFilterSelectedAction({\r\n ...homeFilterSelected,\r\n sortByStatus: \"All Courses\",\r\n })\r\n );\r\n }\r\n }, [dispatch, homeFilter, homeFilterSelected]);\r\n\r\n const handleSearch = (e) => {\r\n const value = e.target.value;\r\n if (value.length > 0) {\r\n setSearchTrainingType(value);\r\n } else {\r\n setSearchTrainingType(\"\");\r\n }\r\n };\r\n\r\n const handleSortBy = (name) => {\r\n // const updatedSortByArr = homeFilter?.sortBy?.map((sort) => {\r\n // if (sort?.id === id) {\r\n // return { ...sort, isSelected: true };\r\n // } else {\r\n // return { ...sort, isSelected: false };\r\n // }\r\n // });\r\n const updatedSortByStatusArr = homeFilter?.sortByStatus?.map(\r\n (type, index) => {\r\n if (index === 0) {\r\n return { ...type, isSelected: true };\r\n } else {\r\n return { ...type, isSelected: false };\r\n }\r\n }\r\n );\r\n if (name === \"Series\") {\r\n dispatch(\r\n setHomeFilterSelectedAction({\r\n sortBy: name,\r\n sortByStatus: \"All Courses\",\r\n filterByType: \"All\",\r\n })\r\n );\r\n dispatch(\r\n setHomeFilterAction({\r\n ...homeFilter,\r\n sortByStatus: updatedSortByStatusArr,\r\n })\r\n );\r\n } else {\r\n dispatch(\r\n setHomeFilterSelectedAction({ ...homeFilterSelected, sortBy: name })\r\n );\r\n }\r\n };\r\n\r\n const handleSortByStatus = (name) => {\r\n const updatedSortByStatusArr = homeFilter?.sortByStatus?.map((sort) => {\r\n if (name === \"All Courses\") {\r\n if (sort?.name === name) {\r\n return { ...sort, isSelected: true };\r\n } else {\r\n return { ...sort, isSelected: false };\r\n }\r\n } else if (sort?.name === \"All Courses\" && sort?.isSelected) {\r\n return { ...sort, isSelected: false };\r\n } else if (sort?.name === name) {\r\n if (sort?.isSelected) {\r\n return { ...sort, isSelected: false };\r\n } else {\r\n return { ...sort, isSelected: true };\r\n }\r\n } else {\r\n return sort;\r\n }\r\n });\r\n dispatch(\r\n setHomeFilterAction({\r\n ...homeFilter,\r\n sortByStatus: updatedSortByStatusArr,\r\n })\r\n );\r\n dispatch(\r\n setHomeFilterSelectedAction({ ...homeFilterSelected, sortByStatus: name })\r\n );\r\n };\r\n const handleFilterByType = (name) => {\r\n // const updatedFilterByTypeArr = homeFilter?.filterByType?.map((type) => {\r\n // if (type?.TypeId === id) {\r\n // return { ...type, isSelected: true };\r\n // } else {\r\n // return { ...type, isSelected: false };\r\n // }\r\n // });\r\n // dispatch(\r\n // setHomeFilterAction({\r\n // ...homeFilter,\r\n // filterByType: updatedFilterByTypeArr,\r\n // })\r\n // );\r\n dispatch(\r\n setHomeFilterSelectedAction({ ...homeFilterSelected, filterByType: name })\r\n );\r\n };\r\n\r\n const handleReset = () => {\r\n setSearchTrainingType(\"\");\r\n const updatedSortByArr = homeFilter?.sortBy?.map((type, index) => {\r\n if (index === 0) {\r\n return { ...type, isSelected: true };\r\n } else {\r\n return { ...type, isSelected: false };\r\n }\r\n });\r\n const updatedSortByStatusArr = homeFilter?.sortByStatus?.map(\r\n (type, index) => {\r\n if (index === 0) {\r\n return { ...type, isSelected: true };\r\n } else {\r\n return { ...type, isSelected: false };\r\n }\r\n }\r\n );\r\n const updatedFilterByTypeArr = homeFilter?.filterByType?.map(\r\n (type, index) => {\r\n if (index === 0) {\r\n return { ...type, isSelected: true };\r\n } else {\r\n return { ...type, isSelected: false };\r\n }\r\n }\r\n );\r\n\r\n dispatch(\r\n setHomeFilterAction({\r\n sortBy: updatedSortByArr,\r\n sortByStatus: updatedSortByStatusArr,\r\n\r\n filterByType: updatedFilterByTypeArr,\r\n })\r\n );\r\n dispatch(\r\n setHomeFilterSelectedAction({\r\n sortBy: \"All\",\r\n sortByStatus: \"All Courses\",\r\n filterByType: \"All\",\r\n })\r\n );\r\n };\r\n return (\r\n <>\r\n
\r\n
\r\n

\r\n \r\n

\r\n \r\n \"Reset\"\r\n \r\n
\r\n
\r\n
\r\n
\r\n :\r\n
\r\n
    \r\n {homeFilter?.sortBy?.map((sort) => {\r\n return (\r\n {\r\n e.preventDefault();\r\n handleSortBy(sort?.name);\r\n }}\r\n key={sort?.id}\r\n >\r\n \r\n \r\n );\r\n })}\r\n
\r\n
\r\n {sortBySeriesSelected === false && (\r\n <>\r\n
\r\n
\r\n :\r\n
\r\n
    \r\n {homeFilter?.sortByStatus?.map((sort) => {\r\n return (\r\n {\r\n e.preventDefault();\r\n handleSortByStatus(sort?.name);\r\n }}\r\n className={\r\n classes.homeNavbarFilter__sortByStatus__sortList__item\r\n }\r\n >\r\n \r\n \r\n );\r\n })}\r\n
\r\n
\r\n {trainingTypesList.length <= 2 ? (\r\n <>\r\n ) : (\r\n
\r\n
\r\n \r\n :\r\n \r\n\r\n \r\n \"Category\"\r\n \r\n
\r\n
\r\n {searchTrainingType.length > 0 ? (\r\n \r\n {searchTrainingTypesList?.map((type) => {\r\n return (\r\n {\r\n e.preventDefault();\r\n handleFilterByType(type?.Name);\r\n }}\r\n >\r\n \r\n \r\n );\r\n })}\r\n \r\n ) : (\r\n \r\n {trainingTypesList?.map((type) => {\r\n return (\r\n {\r\n e.preventDefault();\r\n handleFilterByType(type?.Name);\r\n }}\r\n >\r\n \r\n \r\n );\r\n })}\r\n \r\n )}\r\n \r\n )}\r\n \r\n )}\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default injectIntl(HomeNavbarFilter);\r\n","import React, { useState, useEffect } from \"react\";\r\nimport HomeNavbarLink from \"../../../components/HomeComponents/HomeNavbarLink/HomeNavbarLink\";\r\nimport filterLogo from \"../../../assets/images/homeIcons/filterIcon.svg\";\r\nimport backLogo from \"../../../assets/images/homeIcons/backIcon.svg\";\r\nimport homeNavLogo from \"../../../assets/images/homeIcons/homeIcon.svg\";\r\nimport langIcon from \"../../../assets/images/homeIcons/langIcon.svg\";\r\nimport Logo from \"../../../components/CommonComponents/Logo/Logo\";\r\nimport resetIcon from \"../../../assets/images/reset_icon.png\";\r\nimport smallMagnifyingGlass from \"../../../assets/images/smallMagnifyingGlass.png\";\r\nimport { useLocation, useNavigate, useParams } from \"react-router\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport FavouriteIconBig from \"../../../components/CustomSvgIcons/FavouriteIconBig\";\r\nimport ArrowNextIcon from \"../../../components/CustomSvgIcons/ArrowNextIcon\";\r\nimport { FormattedMessage, injectIntl } from \"react-intl\";\r\nimport classes from \"./HomeNavbar.module.scss\";\r\nimport { setCreditStateTypeAction } from \"../../../store/actions/actionCreators/creditActionCreator\";\r\nimport useComponentVisible from \"../../../hooks/useComponentVisible\";\r\nimport FilterCredit from \"../../../components/FilterCreditComponents/FilterCredit\";\r\nimport useWindowWidthLessThan from \"../../../hooks/useWindowWidthLessThan\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport Menu from \"@mui/material/Menu\";\r\nimport MenuItem from \"@mui/material/MenuItem\";\r\nimport MoreVertIcon from \"@mui/icons-material/MoreVert\";\r\nimport QuizTimer from \"../../../components/VirtualOrLiveQuizComponents/QuizTimer/QuizTimer\";\r\nimport HomeNavbarFilter from \"../../../components/HomeComponents/HomeNavbarFilter/HomeNavbarFilter\";\r\nimport actionTypes from \"../../../store/actions/actionTypes\";\r\nimport { userScoreObjCreation } from \"../../../utils/commonQuizFunction\";\r\nimport { postVQAssessScore } from \"../../../store/actions/actionHandlers/quizActionHandler\";\r\nimport { endQuizTimer } from \"../../../store/actions/actionCreators/quizActionCreator\";\r\nimport * as globalSearchActionCreator from \"../../../store/actions/actionCreators/globalSearchActionCreator\";\r\n\r\nconst HomeNavbar = (props, intl) => {\r\n const dispatch = useDispatch();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n const param = useParams();\r\n const homeState = useSelector((state) => state.homeReducer);\r\n const classState = useSelector((state) => state.classReducer);\r\n const creditState = useSelector((state) => state.creditReducer);\r\n const commonState = useSelector((state) => state.commonReducer);\r\n const globalSearchState = useSelector((state) => state.globalSearchReducer);\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const open = Boolean(anchorEl);\r\n\r\n const topicsState = useSelector((state) => state.topicsReducer);\r\n const favoriteState = useSelector((state) => state.favoriteReducer);\r\n const { isFavoriteAvailable } = favoriteState;\r\n const { subTopics, topicDetails } = topicsState;\r\n const {\r\n themeStyles,\r\n assignedClasses,\r\n inProgressClasses,\r\n trendingClasses,\r\n completedClasses,\r\n notInProgressClasses,\r\n assignedSeries,\r\n trendingSeries,\r\n completedSeries,\r\n inProgressSeries,\r\n notInProgressSeries,\r\n } = homeState;\r\n const { classDetails, currentView } = classState;\r\n const { creditStateType } = creditState;\r\n\r\n const [filterRef, isFilterVisible, setIsFilterVisible] =\r\n useComponentVisible();\r\n\r\n const [globalFilterRef, isGlobalFilterVisible, setIsGlobalFilterVisible] =\r\n useComponentVisible();\r\n\r\n const [customCheckBoxRef, show, setShow] = useComponentVisible();\r\n\r\n const customCheckBoxHandleClick = () => {\r\n setShow(!show);\r\n };\r\n\r\n const quizState = useSelector((state) => state.quizReducer);\r\n const { quizData, virtualQuizData } = quizState;\r\n\r\n const handleClickGlobalFilterPopUp = () => {\r\n setIsGlobalFilterVisible(!isGlobalFilterVisible);\r\n };\r\n\r\n useEffect(() => {\r\n return () => {\r\n dispatch(globalSearchActionCreator.updateSearchText(\"\")); // did you means set as []\r\n };\r\n }, []);\r\n\r\n const handleClickLanguagePopUp = () => {\r\n setIsFilterVisible(!isFilterVisible);\r\n };\r\n\r\n const [contentLangRef, isContentLangVisible, setIsContentLangVisible] =\r\n useComponentVisible();\r\n const [homeFilterRef, isHomeFilterVisible, setIsHomeFilterVisible] =\r\n useComponentVisible();\r\n\r\n const handleClickHomeFilterPopUp = () => {\r\n setIsHomeFilterVisible(!isHomeFilterVisible);\r\n };\r\n\r\n const handleClickContentLangPopUp = () => {\r\n setIsContentLangVisible(!isContentLangVisible);\r\n };\r\n\r\n const tenantData = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n const ToggleClass = () => {\r\n if (creditStateType === 1) {\r\n dispatch(setCreditStateTypeAction(2));\r\n } else {\r\n dispatch(setCreditStateTypeAction(1));\r\n }\r\n };\r\n const isWidthLessThan = useWindowWidthLessThan(600);\r\n const accessScoreCall = () => {\r\n const userScoreObj = userScoreObjCreation(\r\n false,\r\n false,\r\n quizData,\r\n virtualQuizData\r\n );\r\n dispatch(postVQAssessScore(userScoreObj, userScoreObj.ClassId));\r\n };\r\n const onHomeClick = () => {\r\n if (localStorage.getItem(\"quizSubmit\") === \"false\") {\r\n accessScoreCall();\r\n }\r\n dispatch(endQuizTimer());\r\n dispatch({\r\n type: actionTypes.quizTypes.VALIDATE_PASSCODE,\r\n payload: null,\r\n });\r\n dispatch({\r\n type: actionTypes.quizTypes.virtualQuiz.FETCH_QUIZ_DETAILS,\r\n payload: null,\r\n });\r\n dispatch({\r\n type: actionTypes.quizTypes.liveQuiz.SET_LIVE_QUIZ_SCREEN_VIEW,\r\n payload: null,\r\n });\r\n };\r\n\r\n const accountReports = () => {\r\n navigate(\"/account/myaccount\", {\r\n state: {\r\n assignedType: 2,\r\n },\r\n });\r\n };\r\n return isWidthLessThan && location.pathname === \"/home\" ? (\r\n (assignedClasses?.length > 0 ||\r\n trendingClasses?.length > 0 ||\r\n completedClasses?.length > 0 ||\r\n assignedSeries?.length > 0 ||\r\n trendingSeries?.length > 0 ||\r\n completedSeries?.length > 0) && (\r\n
\r\n
\r\n \r\n {!isHomeFilterVisible && (\r\n \r\n \r\n \r\n )}\r\n
\r\n {isHomeFilterVisible && }\r\n
\r\n )\r\n ) : (\r\n <>\r\n
\r\n {location.pathname === \"/home\" ? (\r\n
\r\n
\r\n \r\n \r\n \r\n {tenantData?.ActiveFeatures.includes(\"Topic\") && (\r\n \r\n \r\n \r\n )}\r\n {(tenantData?.ActiveFeatures.includes(\"Learner Query\") ||\r\n tenantData?.ActiveFeatures.includes(\"Forum\") ||\r\n tenantData?.ActiveFeatures.includes(\"Poll\")) && (\r\n \r\n \r\n \r\n )}\r\n {tenantData?.ActiveFeatures.includes(\r\n \"ShotclassesCrowdSourcing\"\r\n ) && (\r\n \r\n \r\n \r\n )}\r\n {(tenantData?.ActiveFeatures.includes(\"LiveQuizzing\") ||\r\n tenantData?.ActiveFeatures.includes(\"VirtualQuizzing\")) && (\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n
\r\n {(assignedClasses?.length > 0 ||\r\n trendingClasses?.length > 0 ||\r\n completedClasses?.length > 0 ||\r\n assignedSeries?.length > 0 ||\r\n trendingSeries?.length > 0 ||\r\n completedSeries?.length > 0) && (\r\n \r\n
\r\n \r\n {!isHomeFilterVisible && (\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n )}\r\n {isHomeFilterVisible && (\r\n \r\n )}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n ) : location.pathname === \"/topics\" ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n ) : location.pathname === \"/topics/\" + param?.topicId ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {subTopics?.Name}\r\n \r\n
\r\n ) : location.pathname ===\r\n \"/topics/\" + param?.topicId + \"/topicDetails/\" + param?.subTopicId ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {param?.topicId != \"search\" ? (\r\n subTopics ? (\r\n <>\r\n \r\n {subTopics?.Name}\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n )\r\n ) : (\r\n <>\r\n \r\n {\"Global Search\"}\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n
\r\n ) : location.pathname === \"/connect/generalqueries\" ||\r\n location.pathname === \"/connect/forum\" ||\r\n location.pathname === \"/connect/poll\" ? (\r\n
\r\n \r\n \r\n \r\n \r\n {tenantData?.ActiveFeatures.includes(\"Learner Query\") && (\r\n \r\n \r\n \r\n )}\r\n {tenantData?.ActiveFeatures.includes(\"Forum\") && (\r\n \r\n \r\n \r\n )}\r\n {tenantData?.ActiveFeatures.includes(\"Poll\") && (\r\n \r\n \r\n \r\n )}\r\n
\r\n ) : location.pathname === \"/contribute\" ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n ) : location.pathname === \"/contribute/\" + param?.id ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n ) : location.pathname === \"/quiz\" ||\r\n location.pathname === \"/quiz/virtualquiz\" ||\r\n location.pathname === \"/quiz/livequiz\" ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {quizData &&\r\n quizData?.UserRole !== \"instructor\" &&\r\n localStorage.getItem(\"quizSubmit\") === \"false\" &&\r\n virtualQuizData && }\r\n
\r\n ) : location.pathname === \"/credit\" ? (\r\n
\r\n
\r\n {/*
*/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/*
*/}\r\n
\r\n
\r\n
\r\n \r\n {\" \"}\r\n \r\n
\r\n \r\n \r\n {\" \"}\r\n
\r\n
\r\n \r\n {\" \"}\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {isFilterVisible ? (\r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n \r\n \r\n ) : location.pathname === \"/myfavorites\" ? (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n {isFavoriteAvailable && (\r\n \r\n
\r\n \r\n {!isHomeFilterVisible && (\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n )}\r\n {isHomeFilterVisible && (\r\n \r\n )}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n ) : location.pathname === \"/privacyPolicy\" ? (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n ) : location.pathname === \"/contactUs\" ? (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n ) : location.pathname === \"/account/notifications\" ||\r\n location.pathname === \"/account/myaccount\" ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n ) : location.pathname === \"/skillDetail/\" + param?.skillsId ||\r\n location.pathname === \"/account/myaccount\" ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n ) : location.pathname ===\r\n `/skillDetail/${param?.skillsId}/classDetail/${param?.id}` ||\r\n location.pathname === \"/account/myaccount\" ? (\r\n
\r\n \r\n \r\n \r\n \r\n {currentView !== 4 ? (\r\n <>\r\n \r\n \r\n \r\n {(currentView === 1 || currentView === 2) &&\r\n (classDetails?.ShotClassType === 2 ||\r\n classDetails?.ShotClassType === 3 ||\r\n classDetails?.ShotClassType === 5 ||\r\n classDetails?.ShotClassType === 6) && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {currentView === 2 && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n
\r\n ) : location.pathname ===\r\n \"/account/notifications/classDetails/\" + param?.id ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {currentView !== 4 ? (\r\n <>\r\n \r\n \r\n \r\n {(currentView === 1 || currentView === 2) &&\r\n (classDetails?.ShotClassType === 2 ||\r\n classDetails?.ShotClassType === 3 ||\r\n classDetails?.ShotClassType === 5 ||\r\n classDetails?.ShotClassType === 6) && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {currentView === 2 && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n
\r\n ) : location.pathname === \"/shotclass/\" + param?.id ? (\r\n
\r\n \r\n \r\n \r\n \r\n\r\n {currentView !== 4 ? (\r\n <>\r\n \r\n \r\n \r\n {(currentView === 1 || currentView === 2) &&\r\n (classDetails?.ShotClassType === 2 ||\r\n classDetails?.ShotClassType === 3 ||\r\n classDetails?.ShotClassType === 5 ||\r\n classDetails?.ShotClassType === 6) && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {currentView === 2 && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n
\r\n ) : location.pathname === \"/shotclass/\" + param?.id + \"/search\" ? (\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n {currentView !== 4 ? (\r\n <>\r\n \r\n \r\n \r\n {(currentView === 1 || currentView === 2) &&\r\n (classDetails?.ShotClassType === 2 ||\r\n classDetails?.ShotClassType === 3 ||\r\n classDetails?.ShotClassType === 5 ||\r\n classDetails?.ShotClassType === 6) && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {currentView === 2 && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n
\r\n ) : location.pathname ===\r\n `/topics/${param?.topicId}/topicDetails/${param?.subTopicId}/shotclass/${param?.id}` ? (\r\n
\r\n \r\n \r\n \r\n \r\n {currentView !== 4 ? (\r\n <>\r\n \r\n \r\n \r\n {(currentView === 1 || currentView === 2) &&\r\n (classDetails?.ShotClassType === 2 ||\r\n classDetails?.ShotClassType === 3 ||\r\n classDetails?.ShotClassType === 5 ||\r\n classDetails?.ShotClassType === 6) && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {currentView === 2 && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n
\r\n ) : location.pathname === \"/series/\" + param?.id ? (\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n ) : location.pathname.includes(\"account/notifications/pollDetail\") ||\r\n location.pathname.includes(\"account/notifications/pollResult\") ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n ) : location.pathname === \"/series/\" + param?.id + \"/search\" ? (\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n ) : location.pathname === \"/series/\" + param?.id + \"/related\" ? (\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n ) : location.pathname ===\r\n `/topics/${param?.topicId}/topicDetails/${param?.subTopicId}/series/${param?.id}` ? (\r\n
\r\n {/* \r\n \r\n Topics\r\n */}\r\n \r\n \r\n \r\n \r\n Topics\r\n \r\n {param?.topicId != \"search\" ? (\r\n subTopics ? (\r\n <>\r\n \r\n {subTopics?.Name}\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n )\r\n ) : (\r\n <>\r\n \r\n {\"Global Search\"}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n ) : location.pathname === \"/connect/forum/\" + param?.id ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n ) : location.pathname === \"/globalSearch\" ? (\r\n \r\n
\r\n {globalSearchState.globalSearch.length > 0 &&\r\n commonState.globalSearchText !== \"\" && (\r\n \r\n {isWidthLessThan && (\r\n \r\n
\r\n \r\n
\r\n
\r\n )}\r\n \r\n )}\r\n {globalSearchState.globalSearch.length > 0 &&\r\n commonState.globalSearchText !== \"\" &&\r\n props.sortby !== \"series\" &&\r\n props.sortby !== \"topics\" && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n {/* */}\r\n\r\n {/* {!commonState.isAdvanceSearch && ( */}\r\n {/* */}\r\n {/* )} */}\r\n\r\n {/* */}\r\n\r\n {/*
\r\n \r\n
  • \r\n
  • \r\n
  • \r\n \r\n {show ? (\r\n \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    • \r\n \r\n
    • */}\r\n\r\n {/* {!commonState.isAdvanceSearch && ( */}\r\n {/*
    • \r\n \r\n
    • */}\r\n {/* )} */}\r\n {/*
    \r\n
    \r\n ) : (\r\n \"\"\r\n )}\r\n */}\r\n\r\n {/*
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    */}\r\n \r\n \r\n )}\r\n {globalSearchState.globalSearch.length > 0 && (\r\n
    \r\n \r\n {commonState.isAdvanceSearch\r\n ? globalSearchState.searchText\r\n : commonState.globalSearchText}\r\n \r\n (\r\n {props.advanceSearchData.length > 0\r\n ? props.advanceSearchData.length\r\n : props.searchData.length}{\" \"}\r\n )\r\n \r\n \r\n
    \r\n )}\r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n {!isContentLangVisible ? (\r\n \r\n Content Language\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
    \r\n
    \r\n {isContentLangVisible ? (\r\n // {true ? (\r\n \r\n
    \r\n Select Content Language\r\n
    \r\n
    \r\n \"Search\r\n \r\n
    \r\n
      \r\n {props.languagearray.length > 0 ? (\r\n props.languagearray.map((item) => (\r\n
    • \r\n \r\n
    • \r\n ))\r\n ) : (\r\n
    • \r\n \r\n Languguage Not Available\r\n \r\n
    • \r\n )}\r\n
    \r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n {globalSearchState.globalSearch.length > 0 ? ( //888 bug\r\n
    \r\n \r\n
    \r\n {!isWidthLessThan && }\r\n\r\n {!isGlobalFilterVisible ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
    \r\n
    \r\n {isGlobalFilterVisible ? (\r\n \r\n
    \r\n

    \r\n \r\n

    \r\n
    \r\n \r\n \"Reset\"\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n :\r\n
    \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    • \r\n \r\n
    • \r\n
    • \r\n \r\n
    • \r\n
    • \r\n \r\n
    • \r\n
    \r\n
    \r\n\r\n {props.sortby !== \"series\" &&\r\n props.sortby !== \"topics\" && (\r\n
    \r\n
    \r\n :\r\n
    \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    • \r\n \r\n
    • \r\n
    • \r\n \r\n
    • \r\n
    • \r\n \r\n
    • \r\n
    \r\n
    \r\n )}\r\n\r\n {homeState.TrainingTypes.length >= 2 &&\r\n props.sortby !== \"series\" &&\r\n props.sortby !== \"topics\" && (\r\n
    \r\n
    \r\n

    \r\n :\r\n

    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
      \r\n {homeState.TrainingTypes.length >= 2 && (\r\n
    • \r\n \r\n
    • \r\n )}\r\n {homeState.TrainingTypes.length >= 2 &&\r\n props.trainingtypearr.map((item) => (\r\n \r\n \r\n \r\n ))}\r\n
    \r\n
    \r\n )}\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n ) : location.pathname === \"/connect/poll/pollDetail\" ? (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n ) : (\r\n <>\r\n )}\r\n \r\n {/* FIlter for mobile */}\r\n {globalSearchState.globalSearch.length && isWidthLessThan > 0 ? ( //888 bug\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n {isGlobalFilterVisible &&
    }\r\n \r\n );\r\n};\r\n\r\nexport default injectIntl(HomeNavbar);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"homeHeaderContainer\":\"HomeHeaderContainer_homeHeaderContainer__YG79l\"};","import React, { useRef } from \"react\";\r\nimport HomeHeader from \"../HomeHeader/HomeHeader\";\r\nimport HomeNavbar from \"../HomeNavbar/HomeNavbar\";\r\nimport classes from \"./HomeHeaderContainer.module.scss\";\r\nconst HomeHeaderContainer = props => {\r\n const ref = useRef();\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default HomeHeaderContainer;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"switch\":\"ToggleSwitch_switch__OUfks\",\"slider\":\"ToggleSwitch_slider__bpx+i\",\"on\":\"ToggleSwitch_on__44Vjh\",\"off\":\"ToggleSwitch_off__puCEv\",\"round\":\"ToggleSwitch_round__WNNn1\"};","import React from 'react';\r\nimport classes from './ToggleSwitch.module.scss';\r\nimport {FormattedMessage} from \"react-intl\";\r\nconst ToggleSwitch = (props) => {\r\n function handleOnSwitchChange(event) {\r\n props.onSwitchChange(event);\r\n }\r\n\r\n return(\r\n \r\n )\r\n}\r\nexport default ToggleSwitch;","import React from \"react\";\r\n\r\nconst CloseIcon = ({ fill }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nexport default CloseIcon;\r\n","import React from \"react\";\r\n\r\nconst HomeHeaderSearchIcon = ({ fill, stroke, circleNotRequired }) => {\r\n if (circleNotRequired) {\r\n return (\r\n \r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n};\r\n\r\nexport default HomeHeaderSearchIcon;\r\n","import React from \"react\";\r\n\r\nconst HomeHeaderLangIcon = ({ fill }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default HomeHeaderLangIcon;\r\n","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgLangChangeIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"lang_ic\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 26,\n height: 26,\n viewBox: \"0 0 26 26\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_331\",\n \"data-name\": \"Path 331\",\n d: \"M20,7A13,13,0,1,0,33,20,13,13,0,0,0,20,7Zm-.3.614v7.549a17.655,17.655,0,0,1-5.338-.869,15.376,15.376,0,0,1,1.181-3.137c1.076-2.07,2.5-3.351,4.072-3.533Zm.6,0c1.605.143,3.06,1.432,4.157,3.543a15.377,15.377,0,0,1,1.181,3.137,17.656,17.656,0,0,1-5.338.869Zm-2.844.255a8.329,8.329,0,0,0-2.456,3,15.868,15.868,0,0,0-1.219,3.212,16.025,16.025,0,0,1-3.467-1.814,12.382,12.382,0,0,1,7.142-4.4Zm5.092,0a12.356,12.356,0,0,1,7.133,4.4,16.024,16.024,0,0,1-3.467,1.814A15.871,15.871,0,0,0,25,10.874a8.359,8.359,0,0,0-2.447-3Zm-12.6,4.884a16.574,16.574,0,0,0,3.694,1.918,23.31,23.31,0,0,0-.6,5.026H7.614A12.317,12.317,0,0,1,9.948,12.754Zm20.1,0A12.335,12.335,0,0,1,32.386,19.7H26.953a23.312,23.312,0,0,0-.6-5.026A16.575,16.575,0,0,0,30.052,12.754ZM14.218,14.879a18.327,18.327,0,0,0,5.48.888V19.7H13.651A22.742,22.742,0,0,1,14.218,14.879Zm11.564,0a22.741,22.741,0,0,1,.567,4.818H20.3v-3.93A18.326,18.326,0,0,0,25.782,14.879ZM7.614,20.3h5.432a23.246,23.246,0,0,0,.6,5.026,16.468,16.468,0,0,0-3.694,1.918A12.329,12.329,0,0,1,7.614,20.3Zm6.037,0H19.7v3.94a18.4,18.4,0,0,0-5.48.879A22.678,22.678,0,0,1,13.651,20.3Zm6.651,0h6.047a22.677,22.677,0,0,1-.567,4.818,18.4,18.4,0,0,0-5.48-.879Zm6.651,0h5.432a12.347,12.347,0,0,1-2.334,6.944,16.468,16.468,0,0,0-3.694-1.918A23.246,23.246,0,0,0,26.953,20.3ZM19.7,24.847v7.53c-1.6-.144-3.061-1.433-4.157-3.543a15.311,15.311,0,0,1-1.181-3.118A17.712,17.712,0,0,1,19.7,24.847Zm.6,0a17.713,17.713,0,0,1,5.338.869,15.312,15.312,0,0,1-1.181,3.118c-1.1,2.11-2.553,3.4-4.157,3.543Zm-6.509,1.068A15.914,15.914,0,0,0,15,29.117a8.459,8.459,0,0,0,2.438,3,12.378,12.378,0,0,1-7.133-4.393A15.909,15.909,0,0,1,13.793,25.914Zm12.414,0a15.91,15.91,0,0,1,3.486,1.814,12.356,12.356,0,0,1-7.142,4.4A8.46,8.46,0,0,0,25,29.117a15.913,15.913,0,0,0,1.209-3.2Z\",\n transform: \"translate(-7 -7)\",\n fill: \"#707070\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLangChangeIcon);\nexport default __webpack_public_path__ + \"static/media/langChangeIcon.1f09bcc97a8010bbba5466677bdc942c.svg\";\nexport { ForwardRef as ReactComponent };","// extracted by mini-css-extract-plugin\nexport default {\"homeHeaderLanguage\":\"HomeHeaderLanguageChange_homeHeaderLanguage__yWf3a\",\"homeHeaderLanguage__heading\":\"HomeHeaderLanguageChange_homeHeaderLanguage__heading__cFmIZ\",\"homeHeaderLanguage__searchBox\":\"HomeHeaderLanguageChange_homeHeaderLanguage__searchBox__ap2uA\",\"homeHeaderLanguage__searchBox__image\":\"HomeHeaderLanguageChange_homeHeaderLanguage__searchBox__image__OOthg\",\"homeHeaderLanguage__searchBox__inputField\":\"HomeHeaderLanguageChange_homeHeaderLanguage__searchBox__inputField__w6oAI\",\"homeHeaderLanguage__list\":\"HomeHeaderLanguageChange_homeHeaderLanguage__list__iIaYq\",\"homeHeaderLanguage__list__item\":\"HomeHeaderLanguageChange_homeHeaderLanguage__list__item__8hYnA\",\"homeHeaderLanguage__list__language\":\"HomeHeaderLanguageChange_homeHeaderLanguage__list__language__gQ1Fi\",\"homeHeaderLanguage__buttonArea\":\"HomeHeaderLanguageChange_homeHeaderLanguage__buttonArea__gx5+i\",\"homeHeaderLanguage__button\":\"HomeHeaderLanguageChange_homeHeaderLanguage__button__LjXV4\"};","import { setSelectedLanguageHandler } from \"../store/actions/actionHandlers/homeActionHandler\";\r\n\r\nconst addLangToLocalStorage = (languageTerm, language, dispatch) => {\r\n const replacedLanguageTerm = languageTerm\r\n .toString()\r\n .replaceAll(/&/g, \"&\")\r\n .replaceAll(//g, \">\")\r\n .replaceAll(/\"/g, '\"')\r\n .replaceAll(/'/g, \"'\");\r\n localStorage.setItem(\"languageTerm\", replacedLanguageTerm);\r\n const replacedLanguage = language\r\n .toString()\r\n .replaceAll(/&/g, \"&\")\r\n .replaceAll(//g, \">\")\r\n .replaceAll(/\"/g, '\"')\r\n .replaceAll(/'/g, \"'\");\r\n localStorage.setItem(\"language\", replacedLanguage);\r\n dispatch(setSelectedLanguageHandler(languageTerm?.split(\"-\")[0]));\r\n const savedLanguage = localStorage.getItem(\"languageTerm\");\r\n return savedLanguage;\r\n};\r\n\r\nexport default addLangToLocalStorage;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport smallMagnifyingGlass from \"../../../assets/images/smallMagnifyingGlass.png\";\r\nimport classes from \"./HomeHeaderLanguageChange.module.scss\";\r\nimport addLangToLocalStorage from \"../../../utils/addLangToLocalStorage\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { FormattedMessage ,injectIntl } from \"react-intl\";\r\n\r\nconst HomeHeaderLanguageChange = ({ reference, handleClickLanguagePopUp,intl }) => {\r\n const dispatch = useDispatch();\r\n const homeState = useSelector((state) => state.homeReducer);\r\n const { allLanguages } = homeState;\r\n const [lang, setLang] = useState(allLanguages);\r\n const [selectedLang, setSelectedLang] = useState(null);\r\n\r\n useEffect(() => {\r\n if (selectedLang === null) {\r\n allLanguages?.forEach((language) => {\r\n if (language.Value.includes(localStorage.getItem(\"language\"))) {\r\n setSelectedLang(language);\r\n }\r\n });\r\n }\r\n }, [allLanguages, selectedLang]);\r\n\r\n const handleChange = (e) => {\r\n const value = e.target.value;\r\n const filteredLangArray = allLanguages?.filter((lang) => {\r\n if (lang.Value.toLowerCase().includes(value.toLowerCase())) {\r\n return lang;\r\n } else {\r\n return \"\";\r\n }\r\n });\r\n if (value.length > 0) {\r\n setLang(filteredLangArray);\r\n } else {\r\n setLang(allLanguages);\r\n }\r\n };\r\n\r\n const handleClick = (lang) => {\r\n setSelectedLang(lang);\r\n };\r\n\r\n const handleSubmit = (lang) => {\r\n addLangToLocalStorage(lang.Locale, lang.Value, dispatch);\r\n handleClickLanguagePopUp();\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n {\" \"}\r\n {\" \"}\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
      \r\n {lang?.map((language) => {\r\n if (\r\n language?.Value !== \"Elliniká\" &&\r\n language?.Value !== \"Polski\" &&\r\n language?.Value !== \"Português-Brasil\" &&\r\n language?.Value !== \"Italiano\" &&\r\n language?.Value !== \"Nederlands\" &&\r\n language?.Value !== \"Româna\"\r\n ) {\r\n return (\r\n handleClick(language)}\r\n className={classes.homeHeaderLanguage__list__item}\r\n >\r\n handleClick(language)}\r\n checked={selectedLang?.Locale === language?.Locale}\r\n className={classes.homeHeaderLanguage__list__check}\r\n />\r\n

      \r\n {language?.Value}\r\n

      \r\n \r\n );\r\n }\r\n })}\r\n
    \r\n
    \r\n handleSubmit(selectedLang)}\r\n >\r\n \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default injectIntl(HomeHeaderLanguageChange);\r\n","import React from \"react\";\r\n\r\nconst AccountUserIcon = ({ fill }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AccountUserIcon;\r\n","import React from \"react\";\r\n\r\nconst LogoutIcon = ({ fill }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LogoutIcon;\r\n","import React from \"react\";\r\n\r\nconst NotificationBellIcon = ({ fill }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default NotificationBellIcon;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"homeHeaderProfile\":\"HomeHeaderProfile_homeHeaderProfile__Q-xEb\",\"slideInDown\":\"HomeHeaderProfile_slideInDown__uj1It\",\"profileOpaqueLayer\":\"HomeHeaderProfile_profileOpaqueLayer__KZqtQ\",\"homeHeaderProfile__imageAndName\":\"HomeHeaderProfile_homeHeaderProfile__imageAndName__mnCBg\",\"homeHeaderProfile__image\":\"HomeHeaderProfile_homeHeaderProfile__image__kvrXt\",\"homeHeaderProfile__fullName\":\"HomeHeaderProfile_homeHeaderProfile__fullName__-i-63\",\"homeHeaderProfile__links\":\"HomeHeaderProfile_homeHeaderProfile__links__ElyXK\",\"homeHeaderProfile__link\":\"HomeHeaderProfile_homeHeaderProfile__link__Y4JNS\",\"homeHeaderProfile__link__notification\":\"HomeHeaderProfile_homeHeaderProfile__link__notification__GD32y\",\"homeHeaderProfile__link__notificationCount\":\"HomeHeaderProfile_homeHeaderProfile__link__notificationCount__B6Qo+\",\"homeHeaderProfile__link__lastVisited\":\"HomeHeaderProfile_homeHeaderProfile__link__lastVisited__UWQ+F\"};","import React, { useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport profilePicture from \"../../../assets/images/homeIcons/userCircleIcon.svg\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport { logoutHandler } from \"../../../store/actions/actionHandlers/loginActionHandler\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport AccountUserIcon from \"../../CustomSvgIcons/AccountUserIcon\";\r\nimport LogoutIcon from \"../../CustomSvgIcons/LogoutIcon\";\r\nimport NotificationBellIcon from \"../../CustomSvgIcons/NotificationBellIcon\";\r\nimport { useLocation, useNavigate, useParams } from \"react-router\";\r\nimport classes from \"./HomeHeaderProfile.module.scss\";\r\nimport { FormattedMessage } from \"react-intl\";\r\n// import { userScoreObjCreation } from \"../../../utils/commonQuizFunction\";\r\n// import { postVQAssessScore } from \"../../../store/actions/actionHandlers/quizActionHandler\";\r\nimport QuizModal from \"../../VirtualOrLiveQuizComponents/QuizModal/QuizModal\";\r\nimport {\r\n endQuizTimer,\r\n setLiveQuizNormalExitAction,\r\n startQuizTimer,\r\n} from \"../../../store/actions/actionCreators/quizActionCreator\";\r\nimport { postVQAssessScore } from \"../../../store/actions/actionHandlers/quizActionHandler\";\r\nimport { convertToMillisec } from \"../../../utils/commonQuizFunction\";\r\nimport { updateVideoPlayedDuration } from \"../../../store/actions/actionHandlers/classActionHandler\";\r\nimport {\r\n setLoadingHandler,\r\n unSetLoadingHandler,\r\n} from \"../../../store/actions/actionHandlers/errorActionHandler\";\r\n\r\nconst HomeHeaderProfile = ({ reference, handleClickProfilePopUp }) => {\r\n const dispatch = useDispatch();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n const param = useParams();\r\n\r\n const homeState = useSelector((state) => state.homeReducer);\r\n const { notifications, themeStyles } = homeState;\r\n const userState = useSelector((state) => state.userReducer);\r\n const { profile } = userState;\r\n const loginState = useSelector((state) => state.loginReducer);\r\n const { lastLoginTime } = loginState;\r\n const quizState = useSelector((state) => state.quizReducer);\r\n const { quizData, virtualQuizData } = quizState;\r\n const classState = useSelector((state) => state.classReducer);\r\n const { classDetails, videoDurationForLogout, currentView } = classState;\r\n\r\n const [hoverBellIcon, setHoverBellIcon] = useState(false);\r\n const [hoverAccountUserIcon, setHoverAccountUserIcon] = useState(false);\r\n const [hoverLogoutIcon, setHoverLogoutIcon] = useState(false);\r\n const [isExit, setIsExit] = useState(false);\r\n\r\n const userScoreObjCreation = (IsSubmitted, IsUserAssessmentSuccess) => {\r\n console.log(\"inside----------\");\r\n const totalQDuration = convertToMillisec();\r\n const { ShotClassId, VirtualOrLiveQuizEventId } = quizData;\r\n let UserQuestionResponse = [];\r\n virtualQuizData.AssessmentSet.QuestionList.forEach((ques) => {\r\n let optionId, IsRightAnswer;\r\n ques.ChoiceList.forEach((option) => {\r\n if (\r\n option.Isselected === true ||\r\n option.IsselectedByUserInResonse === true\r\n ) {\r\n optionId = option.ID;\r\n if (option.IsAnswer === true) {\r\n IsRightAnswer = true;\r\n } else {\r\n IsRightAnswer = false;\r\n }\r\n }\r\n });\r\n UserQuestionResponse.push({\r\n QuestionId: ques.ID,\r\n ChoiceId: optionId,\r\n IsRightAnswer: IsRightAnswer,\r\n });\r\n });\r\n return {\r\n ClassId: parseInt(ShotClassId),\r\n ClassName: virtualQuizData.Name,\r\n CourseCompletionDuration: totalQDuration,\r\n IsQuizSubmitForLiveOrVirtualEvent: IsSubmitted,\r\n IsUserAssessmentSuccess: IsUserAssessmentSuccess,\r\n Score: 0,\r\n TotalCACount: 0,\r\n UserQuestionResponse: UserQuestionResponse,\r\n VirtualOrLiveQuizEventId: VirtualOrLiveQuizEventId,\r\n };\r\n };\r\n\r\n const onclickedExit = () => {\r\n if (isExit) {\r\n dispatch(setLiveQuizNormalExitAction(false));\r\n } else {\r\n dispatch(setLiveQuizNormalExitAction(true));\r\n }\r\n setIsExit(!isExit);\r\n dispatch(startQuizTimer());\r\n };\r\n const onConfirmExit = () => {\r\n if (\r\n location.pathname === \"/quiz/virtualquiz\" ||\r\n location.pathname.includes(\"virtualquiz\")\r\n ) {\r\n const userScoreObj = userScoreObjCreation(false, false);\r\n dispatch(postVQAssessScore(userScoreObj, userScoreObj.ClassId));\r\n }\r\n dispatch(logoutHandler(navigate, true));\r\n };\r\n\r\n let dateObj = new Date(lastLoginTime + \"Z\");\r\n let lastLoginTimeString = dateObj.toString().replace(/GMT.*/g, \"\");\r\n let securityProvider = localStorage.getItem(\"securityProviderName\");\r\n return (\r\n <>\r\n
    \r\n
    \r\n {\r\n e.target.onerror = null;\r\n e.target.src = profilePicture;\r\n }}\r\n className={classes.homeHeaderProfile__image}\r\n alt=\"profile\"\r\n />\r\n
    \r\n {profile?.FirstName + \" \" + profile?.LastName}\r\n
    \r\n
    \r\n
    \r\n handleClickProfilePopUp()}\r\n onMouseEnter={() => setHoverBellIcon(true)}\r\n onMouseLeave={() => setHoverBellIcon(false)}\r\n >\r\n
    \r\n {hoverBellIcon ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n {notifications?.TotalNotifications > 99\r\n ? \"99+\"\r\n : notifications?.TotalNotifications}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n handleClickProfilePopUp()}\r\n to=\"/account/myaccount\"\r\n onMouseEnter={() => setHoverAccountUserIcon(true)}\r\n onMouseLeave={() => setHoverAccountUserIcon(false)}\r\n >\r\n {hoverAccountUserIcon ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
    \r\n \r\n
    \r\n \r\n {\r\n if (\r\n (location.pathname.includes(\"/shotclass/\" + param?.id) ||\r\n location.pathname.includes(\"/classDetails/\" + param?.id) ||\r\n location.pathname.includes(\"/classDetail/\" + param?.id)) &&\r\n classDetails?.Mediatype === 1 &&\r\n currentView === 0\r\n ) {\r\n dispatch(setLoadingHandler());\r\n dispatch(\r\n updateVideoPlayedDuration(\r\n classDetails?.ID,\r\n videoDurationForLogout\r\n )\r\n ).then(() => {\r\n dispatch(logoutHandler(navigate, true));\r\n dispatch(unSetLoadingHandler());\r\n });\r\n } else if (\r\n location.pathname === \"/quiz/livequiz\" ||\r\n location.pathname.includes(\"livequiz\") ||\r\n ((location.pathname === \"/quiz/virtualquiz\" ||\r\n location.pathname.includes(\"virtualquiz\")) &&\r\n quizData.UserRole === \"participant\" &&\r\n quizData.IsVirtualOrLiveQuizSubmitted === false &&\r\n quizData.IsExpired === false &&\r\n localStorage.getItem(\"quizSubmit\") === \"false\")\r\n ) {\r\n dispatch(setLiveQuizNormalExitAction(true));\r\n setIsExit(!isExit);\r\n dispatch(endQuizTimer());\r\n } else {\r\n dispatch(logoutHandler(navigate, true));\r\n }\r\n // if (localStorage.getItem(\"quizSubmit\") === \"false\") {\r\n // const userScoreObj = userScoreObjCreation(\r\n // false,\r\n // false,\r\n // quizData,\r\n // virtualQuizData\r\n // );\r\n // dispatch(postVQAssessScore(userScoreObj, userScoreObj.ClassId));\r\n // }\r\n // dispatch(logoutHandler(navigate));\r\n }}\r\n to=\"/\"\r\n onMouseEnter={() => setHoverLogoutIcon(true)}\r\n onMouseLeave={() => setHoverLogoutIcon(false)}\r\n >\r\n {hoverLogoutIcon ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
    \r\n \r\n
    \r\n
    \r\n {isExit && (\r\n \r\n )}\r\n \r\n {securityProvider && securityProvider === \"custom\" && (\r\n
    \r\n : {lastLoginTimeString}\r\n
    \r\n )}\r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default HomeHeaderProfile;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"LeaderboardModal\":\"LeaderboardModalCarousel_LeaderboardModal__97TAU\",\"champion\":\"LeaderboardModalCarousel_champion__qkVmp\",\"champion1\":\"LeaderboardModalCarousel_champion1__LmkvE\",\"title\":\"LeaderboardModalCarousel_title__fZ3eA\",\"flex2\":\"LeaderboardModalCarousel_flex2__jEBj3\",\"items\":\"LeaderboardModalCarousel_items__68xqp\",\"row\":\"LeaderboardModalCarousel_row__oEzk8\",\"list_button\":\"LeaderboardModalCarousel_list_button__JtfC7\",\"primaryThemeButton\":\"LeaderboardModalCarousel_primaryThemeButton__OEv3G\",\"points\":\"LeaderboardModalCarousel_points__kWNgs\",\"prev\":\"LeaderboardModalCarousel_prev__6lRqF\",\"next\":\"LeaderboardModalCarousel_next__d3xvY\"};","import React, { useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport Button from \"../../CommonComponents/Button/Button\";\r\nimport champ from \"../../../assets/images/champ.png\";\r\nimport classes from \"./LeaderboardModalCarousel.module.scss\";\r\nimport { useNavigate } from \"react-router\";\r\nimport useWindowWidthLessThan from \"../../../hooks/useWindowWidthLessThan\";\r\nimport { FormattedMessage } from \"react-intl\";\r\nconst LeaderboardModalCarousel = () => {\r\n const homeState = useSelector((state) => state.homeReducer);\r\n const { leaderboardData } = homeState;\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const navigate = useNavigate();\r\n // useEffect(() => {\r\n // if (leaderboardData?.length > 0) {\r\n // setCurrentPage(1);\r\n // }\r\n // }, [leaderboardData]);\r\n const handleNext = () => {\r\n if (currentPage === lastPage) {\r\n setCurrentPage(1);\r\n } else {\r\n setCurrentPage(currentPage + 1);\r\n }\r\n };\r\n const handlePrevious = () => {\r\n if (currentPage === 1) {\r\n setCurrentPage(lastPage);\r\n } else {\r\n setCurrentPage(currentPage - 1);\r\n }\r\n };\r\n const isWidthLessThan = useWindowWidthLessThan(600);\r\n const lastPage = isWidthLessThan\r\n ? leaderboardData?.length\r\n : Math.ceil(leaderboardData?.length / 2);\r\n\r\n return (\r\n
    \r\n
    \r\n {isWidthLessThan\r\n ? leaderboardData\r\n // ?.slice(currentPage - 1, currentPage)\r\n .map((data, index) => {\r\n return (\r\n \r\n \"badge\"\r\n
    {data?.GameName}
    \r\n
    \r\n
    \r\n
    {data?.Rank}
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {data?.UserLeaderBoardScores?.find(\r\n (val) => val.ScoreType === \"Points\"\r\n )?.ScoreValueMap || 0}\r\n {/* {data?.UserLeaderBoardScores[0]?.ScoreValueMap} */}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {data?.UserLeaderBoardScores?.find(\r\n (val) => val.ScoreType === \"Level\"\r\n )?.ScoreValueMap || \"-\"}\r\n {/* {data?.UserLeaderBoardScores[1]?.ScoreValueMap} */}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n navigate(\"/credit\", {\r\n state: { GameCode: data?.GameCode },\r\n })\r\n }\r\n className={classes.list__button}\r\n >\r\n }\r\n className={classes.primaryThemeButton}\r\n />\r\n
    \r\n
    \r\n );\r\n })\r\n : leaderboardData\r\n ?.slice(currentPage * 2 - 2, currentPage * 2)\r\n .map((data, index) => {\r\n return (\r\n \r\n \"badge\"\r\n
    {data?.GameName}
    \r\n
    \r\n
    \r\n
    {data?.Rank}
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {data?.UserLeaderBoardScores?.find(\r\n (val) => val.ScoreType === \"Points\"\r\n )?.ScoreValueMap || 0}\r\n {/* {data?.UserLeaderBoardScores[0]?.ScoreValueMap} */}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {data?.UserLeaderBoardScores?.find(\r\n (val) => val.ScoreType === \"Level\"\r\n )?.ScoreValueMap || \"-\"}\r\n {/* {data?.UserLeaderBoardScores[1]?.ScoreValueMap} */}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n navigate(\"/credit\", {\r\n state: { GameCode: data?.GameCode },\r\n })\r\n }\r\n className={classes.list__button}\r\n >\r\n }\r\n className={classes.primaryThemeButton}\r\n />\r\n \r\n \r\n );\r\n })}\r\n \r\n {leaderboardData?.length > 0 && (\r\n <>\r\n {currentPage !== 1 && currentPage !== 0 && (\r\n
    \r\n ❮\r\n
    \r\n )}\r\n {currentPage !== lastPage && (\r\n
    \r\n ❯\r\n
    \r\n )}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default LeaderboardModalCarousel;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"LeaderboardModal\":\"LeaderboardModal_LeaderboardModal__jNltu\",\"title\":\"LeaderboardModal_title__HDcDj\",\"title1\":\"LeaderboardModal_title1__FAMEm\"};","import React from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport Modal from \"../../CommonComponents/Modal/Modal\";\r\nimport ModalBody from \"../../CommonComponents/Modal/ModalBody\";\r\nimport ModalHeader from \"../../CommonComponents/Modal/ModalHeader\";\r\nimport LeaderboardModalCarousel from \"../LeaderboardModalCarousel/LeaderboardModalCarousel\";\r\nimport classes from \"../LeaderboardModal/LeaderboardModal.module.scss\";\r\nimport { FormattedMessage } from \"react-intl\";\r\nconst LeaderboardModal = ({ closeModal }) => {\r\n const homeState = useSelector((state) => state.homeReducer);\r\n const { leaderboardData } = homeState;\r\n\r\n return (\r\n // \r\n
    \r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n
    \r\n {leaderboardData?.length > 0 && (\r\n <>\r\n
    \r\n
    \r\n
    -
    \r\n \r\n ×\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ×\r\n \r\n
    \r\n
    \r\n \r\n )}\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default LeaderboardModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"homeHeaderLinks\":\"HomeHeaderLinks_homeHeaderLinks__obtPm\",\"homeHeaderLinks__logo\":\"HomeHeaderLinks_homeHeaderLinks__logo__a4A5y\",\"homeHeaderLinks__logo__magnifyingGlass\":\"HomeHeaderLinks_homeHeaderLinks__logo__magnifyingGlass__Jha-T\",\"homeHeaderLinks__logo__worldLang\":\"HomeHeaderLinks_homeHeaderLinks__logo__worldLang__0PDM-\",\"homeHeaderLinks__logo__leaderBoardScore\":\"HomeHeaderLinks_homeHeaderLinks__logo__leaderBoardScore__brHrT\",\"homeHeaderLinks__logo__leaderBoardScore__score\":\"HomeHeaderLinks_homeHeaderLinks__logo__leaderBoardScore__score__kCxyF\",\"homeHeaderLinks__logo__profile\":\"HomeHeaderLinks_homeHeaderLinks__logo__profile__K6N7Y\",\"homeHeaderLinks__logo__profile__profileImage\":\"HomeHeaderLinks_homeHeaderLinks__logo__profile__profileImage__0FGBt\",\"homeHeaderLinks__logo__profile__profileImageDark\":\"HomeHeaderLinks_homeHeaderLinks__logo__profile__profileImageDark__dO4Ms\",\"homeHeaderLinks__logo__profile__notificationCount\":\"HomeHeaderLinks_homeHeaderLinks__logo__profile__notificationCount__Y35nx\",\"homeHeaderLinks__logo__profile__notificationCountDark\":\"HomeHeaderLinks_homeHeaderLinks__logo__profile__notificationCountDark__0OGV3\",\"homeHeader_searchContainer\":\"HomeHeaderLinks_homeHeader_searchContainer__IUePT\",\"homeHeader_searchbar\":\"HomeHeaderLinks_homeHeader_searchbar__qOXkd\",\"switchIcon\":\"HomeHeaderLinks_switchIcon__VMJ7H\",\"switchIconDark\":\"HomeHeaderLinks_switchIconDark__iNkLd\",\"input_box\":\"HomeHeaderLinks_input_box__4APWf\",\"input_box__input\":\"HomeHeaderLinks_input_box__input__as6pX\",\"input_box__inputDark\":\"HomeHeaderLinks_input_box__inputDark__CstTQ\",\"remove_search\":\"HomeHeaderLinks_remove_search__WDTTx\",\"icon_box\":\"HomeHeaderLinks_icon_box__JKEI8\",\"searchIcon\":\"HomeHeaderLinks_searchIcon__fZa-T\",\"relatedResult\":\"HomeHeaderLinks_relatedResult__+FsXX\",\"result_item\":\"HomeHeaderLinks_result_item__Z1vS8\",\"result_item_text\":\"HomeHeaderLinks_result_item_text__ce6Mt\",\"homeHeaderLinks__logo__worldLangContainer\":\"HomeHeaderLinks_homeHeaderLinks__logo__worldLangContainer__fwMDn\",\"HomeHeaderLinks_homeHeaderLinks__logo__leaderBoardScore__score\":\"HomeHeaderLinks_HomeHeaderLinks_homeHeaderLinks__logo__leaderBoardScore__score__D-TsI\"};","import React, { useEffect, useState } from \"react\";\r\nimport { SHOTCLASS_API_URL } from \"../../../utils/devApiContants\";\r\nimport ToggleSwitch from \"../../CommonComponents/ToggleSwitch/ToggleSwitch\";\r\nimport Logo from \"../../CommonComponents/Logo/Logo\";\r\nimport CloseIcon from \"../../CustomSvgIcons/CloseIcon_nobg\";\r\nimport magnifyingGlass from \"../../../assets/images/ci-8.png\";\r\nimport HomeHeaderSearchIcon from \"../../CustomSvgIcons/HomeHeaderSearchIcon\";\r\nimport HomeHeaderLangIcon from \"../../CustomSvgIcons/HomeHeaderLangIcon\";\r\nimport worldLang from \"../../../assets/images/homeIcons/langChangeIcon.svg\";\r\nimport cupLeaderBoard from \"../../../assets/images/cup.png\";\r\nimport profilePicture from \"../../../assets/images/homeIcons/userCircleIcon.svg\";\r\nimport useComponentVisible from \"../../../hooks/useComponentVisible\";\r\nimport HomeHeaderLanguageChange from \"../HomeHeaderLanguageChange/HomeHeaderLanguageChange\";\r\nimport HomeHeaderProfile from \"../HomeHeaderProfile/HomeHeaderProfile\";\r\nimport LeaderboardModal from \"../LeaderboardModal/LeaderboardModal\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport classes from \"./HomeHeaderLinks.module.scss\";\r\nimport axios from \"axios\";\r\nimport { FormattedMessage, injectIntl } from \"react-intl\";\r\nimport {\r\n toggleSearchBarAction,\r\n toggleAdvanceSearchAction,\r\n toggleAdvanceSearchLoadingAction,\r\n getRelatedResultAction,\r\n updateGlobalSearchTextAction,\r\n toggleDropdownText,\r\n updateGlobalCheckboxes,\r\n updateResultLanguage,\r\n} from \"../../../store/actions/actionCreators/commonActionCreator\";\r\n\r\nimport { useNavigate } from \"react-router\";\r\nimport {\r\n removeGlobalSearchResult,\r\n getSearchResultDone,\r\n} from \"../../../store/actions/actionCreators/globalSearchActionCreator\";\r\nimport { getSearchResult } from \"../../../store/actions/actionHandlers/globalSearchActionHandler\";\r\nimport useWindowWidthLessThan from \"../../../hooks/useWindowWidthLessThan\";\r\nlet sourceToken = null;\r\nconst HomeHeaderLinks = ({\r\n resethandler,\r\n setIsSidebar,\r\n isDarkTheme,\r\n intl,\r\n ref,\r\n}) => {\r\n let relatedResultTimer = null;\r\n let navigate = useNavigate();\r\n const dispatch = useDispatch();\r\n const userState = useSelector((state) => state.userReducer);\r\n const commonState = useSelector((state) => state.commonReducer);\r\n const { profile } = userState;\r\n const homeState = useSelector((state) => state.homeReducer);\r\n const { notifications, leaderboardData } = homeState;\r\n const [leaderBoardPoints, setLederBoardPoints] = useState(0);\r\n const [advanchSearchFlag, setAdvanchSearchFlag] = useState(false);\r\n const [globalSearchVal, setGlobalSearchVal] = useState(\r\n commonState.globalSearchText\r\n );\r\n\r\n const tenantData = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n const themeData = JSON.parse(localStorage.getItem(\"themeData\"));\r\n // console.log(tenantData?.ActiveFeatures.includes(\"Gamification\"));\r\n const isWidthLessThan = useWindowWidthLessThan(600);\r\n\r\n useEffect(() => {\r\n if (leaderboardData) {\r\n setLederBoardPoints(0);\r\n leaderboardData?.map((data) =>\r\n data.UserLeaderBoardScores.map((points) => {\r\n if (points.ScoreType === \"Points\") {\r\n setLederBoardPoints(\r\n (state) => state + parseInt(points.ScoreValueMap)\r\n );\r\n }\r\n return points;\r\n })\r\n );\r\n }\r\n }, [leaderboardData]);\r\n\r\n useEffect(() => {\r\n const tenantSlugName = localStorage.getItem(\"tenantSlugName\");\r\n if (\r\n (tenantSlugName?.toLowerCase() === \"search\" &&\r\n !window.location.href.includes(\"/globalSearch\")) ||\r\n (tenantSlugName?.toLowerCase() === \"qaaadsep26\" &&\r\n !window.location.href.includes(\"/globalSearch\")) ||\r\n (tenantSlugName?.toLowerCase() === \"ltimindtree\" &&\r\n !window.location.href.includes(\"/globalSearch\"))\r\n ) {\r\n dispatch(toggleAdvanceSearchAction(true));\r\n } \r\n // else {\r\n // if (!window.location.href.includes(\"/globalSearch\"))\r\n // dispatch(toggleAdvanceSearchAction(false));\r\n // }\r\n }, [dispatch]);\r\n\r\n const [languageRef, isLanguageVisible, setIsLanguageVisible] =\r\n useComponentVisible();\r\n const [profileRef, isProfileVisible, setIsProfileVisible] =\r\n useComponentVisible();\r\n\r\n const [isModalVisible, setIsModalVisible] = useState(false);\r\n const handleClickLanguagePopUp = () => {\r\n setIsLanguageVisible(!isLanguageVisible);\r\n };\r\n const handleClickProfilePopUp = () => {\r\n // console.log(\"==\" + isProfileVisible);\r\n setIsProfileVisible(!isProfileVisible);\r\n // console.log(\"====\" + isProfileVisible);\r\n };\r\n const handleClickLeaderboardPopUp = () => {\r\n if (leaderBoardPoints !== 0) {\r\n setIsModalVisible(!isModalVisible);\r\n }\r\n setIsSidebar(false);\r\n setIsLanguageVisible(false);\r\n setIsProfileVisible(false);\r\n };\r\n const advanceSearchSwitchhandler = (e) => {\r\n dispatch(toggleAdvanceSearchAction(!commonState.isAdvanceSearch));\r\n // dispatch(updateGlobalSearchTextAction(''));\r\n // dispatch(getSearchResultDone([]));\r\n };\r\n\r\n const globalSearch = (event) => {\r\n if (event.target.value.trim() != \"\") {\r\n if (event.keyCode == 13) {\r\n //hide the suggestion in the dropdown\r\n if (sourceToken) {\r\n sourceToken.cancel();\r\n dispatch(getRelatedResultAction([]));\r\n dispatch(toggleAdvanceSearchLoadingAction(false));\r\n }\r\n\r\n dispatch(updateGlobalSearchTextAction(event.target.value));\r\n dispatch(\r\n getSearchResult(\r\n document.getElementById(\"globalSearchBar\").value,\r\n true,\r\n true\r\n )\r\n );\r\n // resethandler();\r\n dispatch(updateGlobalCheckboxes([])); //reset to all on enter\r\n navigate(\"/globalSearch\");\r\n }\r\n }\r\n };\r\n // console.log(commonState);\r\n const showRelatedResult = (event) => {\r\n // debugger;\r\n let queryString = event.target.value;\r\n if (sourceToken) {\r\n sourceToken.cancel();\r\n }\r\n clearTimeout(relatedResultTimer);\r\n if (event.target.value.length > 3 && commonState.isAdvanceSearch) {\r\n relatedResultTimer = setTimeout(() => {\r\n // console.log(\"api call\");\r\n\r\n dispatch(toggleAdvanceSearchLoadingAction(true));\r\n sourceToken = axios.CancelToken.source();\r\n\r\n axios\r\n .get(\r\n `${SHOTCLASS_API_URL}/SemanticSearchs/autocomplete?query=${queryString}`,\r\n {\r\n //method: 'GET',\r\n cancelToken: sourceToken.token,\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n }\r\n )\r\n // .then(\r\n // \tresponse =>response.json()\r\n // )\r\n .then((json) => {\r\n // console.log(json.data);\r\n dispatch(toggleAdvanceSearchLoadingAction(false));\r\n if (json.data.suggestions.Suggestions !== null) {\r\n //selecting max 10 suggestion\r\n let suggestionlength = json.data.suggestions.Suggestions.length;\r\n if (suggestionlength > 10) {\r\n json.data.suggestions.Suggestions =\r\n json.data.suggestions.Suggestions.slice(0, 10);\r\n }\r\n dispatch(\r\n getRelatedResultAction(json.data.suggestions.Suggestions)\r\n );\r\n } else {\r\n dispatch(getRelatedResultAction([]));\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"Search Dropdown list Error \" + error);\r\n });\r\n }, 1000); //search dropdown suggetions 0==>1000\r\n } else if (event.target.value.length <= 3) {\r\n dispatch(getRelatedResultAction([]));\r\n dispatch(toggleAdvanceSearchLoadingAction(false));\r\n }\r\n };\r\n\r\n const clearSearch = () => {\r\n if (document.getElementById(\"globalSearchBar\").value != \"\") {\r\n document.getElementById(\"globalSearchBar\").value = \"\";\r\n // dispatch(updateGlobalSearchTextAction(''));\r\n if (sourceToken) {\r\n sourceToken.cancel();\r\n }\r\n dispatch(getRelatedResultAction([]));\r\n dispatch(toggleAdvanceSearchLoadingAction(false));\r\n } else {\r\n // console.log(\"second\");\r\n dispatch(toggleSearchBarAction(false));\r\n }\r\n };\r\n\r\n const handleSearchBarRedirect = () => {\r\n dispatch(toggleSearchBarAction(true));\r\n dispatch(toggleAdvanceSearchLoadingAction(false));\r\n if (!window.location.href.includes(\"/globalSearch\")) {\r\n navigate(\"/globalSearch\");\r\n dispatch(toggleAdvanceSearchAction(false));\r\n dispatch(updateResultLanguage(\"All\"));\r\n dispatch(updateGlobalCheckboxes([]));\r\n dispatch(updateGlobalSearchTextAction(\"\"));\r\n dispatch(removeGlobalSearchResult());\r\n if (sourceToken) {\r\n sourceToken.cancel();\r\n dispatch(getRelatedResultAction([]));\r\n dispatch(toggleAdvanceSearchLoadingAction(false));\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (document.getElementById(\"globalSearchBar\") && !isWidthLessThan) {\r\n dispatch(getRelatedResultAction([]));\r\n dispatch(toggleAdvanceSearchLoadingAction(false));\r\n }\r\n }, [dispatch, document.getElementById(\"globalSearchBar\")]);\r\n return (\r\n
    \r\n {!commonState.isShowSearchBar && isWidthLessThan && (\r\n \r\n {/*
    \r\n \r\n
    */}\r\n \r\n
    \r\n )}\r\n {isWidthLessThan\r\n ? commonState.isShowSearchBar && (\r\n \r\n
    \r\n {tenantData?.ActiveFeatures.includes(\"SemanticSearch\") && (\r\n \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n globalSearch(e)}\r\n onChange={(e) => {\r\n // dispatch(updateGlobalSearchTextAction(e.target.value));\r\n showRelatedResult(e);\r\n }}\r\n />\r\n \r\n \r\n \r\n
    \r\n
    \r\n {\r\n if (\r\n document\r\n .getElementById(\"globalSearchBar\")\r\n .value.trim() != \"\"\r\n ) {\r\n if (sourceToken) {\r\n sourceToken.cancel();\r\n dispatch(getRelatedResultAction([]));\r\n dispatch(toggleAdvanceSearchLoadingAction(false));\r\n }\r\n dispatch(\r\n updateGlobalSearchTextAction(\r\n document.getElementById(\"globalSearchBar\").value\r\n )\r\n );\r\n dispatch(\r\n getSearchResult(\r\n document.getElementById(\"globalSearchBar\").value,\r\n true,\r\n true\r\n )\r\n );\r\n dispatch(updateGlobalCheckboxes([])); //reset to all on search click\r\n // resethandler();\r\n navigate(\"/globalSearch\");\r\n }\r\n }}\r\n >\r\n {/* */}\r\n \r\n \r\n
    \r\n \r\n {((commonState.relatedResult.length > 0 &&\r\n commonState.isAdvanceSearch) ||\r\n commonState.isAdvanceSearchLoading) && (\r\n
    \r\n {commonState.isAdvanceSearchLoading ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : (\r\n commonState.relatedResult.map((item, index) => (\r\n {\r\n dispatch(updateGlobalSearchTextAction(item));\r\n dispatch(toggleDropdownText(true));\r\n // this.props.history.push('/globalSearch');\r\n navigate(\"/globalSearch\");\r\n document.getElementById(\"globalSearchBar\").value =\r\n item;\r\n // resethandler();\r\n dispatch(updateGlobalCheckboxes([])); //reset to all on suggetion click\r\n dispatch(getRelatedResultAction([]));\r\n }}\r\n >\r\n {item}\r\n
    \r\n ))\r\n )}\r\n \r\n )}\r\n \r\n )\r\n : !commonState.isShowSearchBar && (\r\n \r\n
    \r\n {tenantData?.ActiveFeatures.includes(\"SemanticSearch\") && (\r\n \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n globalSearch(e)}\r\n onChange={(e) => {\r\n // dispatch(updateGlobalSearchTextAction(e.target.value));\r\n showRelatedResult(e);\r\n }}\r\n />\r\n \r\n \r\n \r\n
    \r\n
    \r\n {\r\n if (\r\n document\r\n .getElementById(\"globalSearchBar\")\r\n .value.trim() != \"\"\r\n ) {\r\n if (sourceToken) {\r\n sourceToken.cancel();\r\n dispatch(getRelatedResultAction([]));\r\n dispatch(toggleAdvanceSearchLoadingAction(false));\r\n }\r\n dispatch(\r\n updateGlobalSearchTextAction(\r\n document.getElementById(\"globalSearchBar\").value\r\n )\r\n );\r\n dispatch(\r\n getSearchResult(\r\n document.getElementById(\"globalSearchBar\").value,\r\n true,\r\n true\r\n )\r\n );\r\n dispatch(updateGlobalCheckboxes([])); //reset to all on search click\r\n // resethandler();\r\n navigate(\"/globalSearch\");\r\n }\r\n }}\r\n >\r\n {/* */}\r\n \r\n \r\n
    \r\n \r\n {((commonState.relatedResult.length > 0 &&\r\n commonState.isAdvanceSearch) ||\r\n commonState.isAdvanceSearchLoading) && (\r\n
    \r\n {commonState.isAdvanceSearchLoading ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : (\r\n commonState.relatedResult.map((item, index) => (\r\n {\r\n dispatch(updateGlobalSearchTextAction(item));\r\n dispatch(toggleDropdownText(true));\r\n // this.props.history.push('/globalSearch');\r\n navigate(\"/globalSearch\");\r\n document.getElementById(\"globalSearchBar\").value =\r\n item;\r\n // resethandler();\r\n dispatch(updateGlobalCheckboxes([])); //reset to all on suggetion click\r\n dispatch(getRelatedResultAction([]));\r\n }}\r\n >\r\n {item}\r\n
    \r\n ))\r\n )}\r\n \r\n )}\r\n \r\n )}\r\n\r\n \r\n \r\n {/* */}\r\n \r\n
    \r\n {localStorage.getItem(\"languageTerm\")\r\n ? localStorage\r\n .getItem(\"languageTerm\")\r\n ?.split(\"-\")[0]\r\n ?.toLocaleUpperCase()\r\n : \"EN\"}\r\n
    \r\n \r\n {isLanguageVisible ? (\r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n {tenantData?.ActiveFeatures.includes(\"Gamification\") && (\r\n \r\n
    \r\n \r\n \r\n {leaderBoardPoints}\r\n
    \r\n \r\n {isModalVisible ? (\r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n )}\r\n
    \r\n \r\n {\r\n e.target.onerror = null;\r\n e.target.src = profilePicture;\r\n }}\r\n className={\r\n isDarkTheme\r\n ? classes.homeHeaderLinks__logo__profile__profileImage +\r\n \" \" +\r\n classes.homeHeaderLinks__logo__profile__profileImageDark\r\n : classes.homeHeaderLinks__logo__profile__profileImage\r\n }\r\n alt=\"profile\"\r\n />\r\n \r\n {notifications?.TotalNotifications > 99\r\n ? \"99+\"\r\n : notifications?.TotalNotifications}\r\n
    \r\n \r\n {isProfileVisible ? (\r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default injectIntl(HomeHeaderLinks);\r\n","// extracted by mini-css-extract-plugin\nexport default {\"homeHeader\":\"HomeHeader_homeHeader__4ZJTd\",\"homeHeader__logo\":\"HomeHeader_homeHeader__logo__yRuuI\",\"homeHeader__logo__lightHouseLinkContainer\":\"HomeHeader_homeHeader__logo__lightHouseLinkContainer__mJ-dR\",\"homeHeader__logo__link\":\"HomeHeader_homeHeader__logo__link__s3RMW\",\"homeHeader__logo__link__secondary\":\"HomeHeader_homeHeader__logo__link__secondary__JJZwx\",\"homeHeader__logo__link__secondary__main\":\"HomeHeader_homeHeader__logo__link__secondary__main__b8Ou6\",\"homeHeader__logo__pipe\":\"HomeHeader_homeHeader__logo__pipe__xj3hU\",\"homeHeader__logo__hamburgurMenuHeader\":\"HomeHeader_homeHeader__logo__hamburgurMenuHeader__PaIy3\",\"homeHeader__logo__mainLogo\":\"HomeHeader_homeHeader__logo__mainLogo__w-9PS\",\"homeHeader__logo__mainLogo__image\":\"HomeHeader_homeHeader__logo__mainLogo__image__+GZzV\",\"homeHeaderDark\":\"HomeHeader_homeHeaderDark__IDMwK\"};","import React from \"react\";\r\n\r\nconst HomeSidebarConnect = ({ active }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default HomeSidebarConnect;\r\n","import React from \"react\";\r\n\r\nconst HomeSidebarContribute = ({ active }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default HomeSidebarContribute;\r\n","import React from \"react\";\r\n\r\nconst HomeSidebarHome = ({ active }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default HomeSidebarHome;\r\n","import React from \"react\";\r\n\r\nconst HomeSidebarLogout = ({ fill }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default HomeSidebarLogout;\r\n","import React from \"react\";\r\n\r\nconst HomeSidebarMyFavorites = ({ active }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default HomeSidebarMyFavorites;\r\n","import React from \"react\";\r\n\r\nconst HomeSidebarQuiz = ({ active }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default HomeSidebarQuiz;\r\n","import React from \"react\";\r\n\r\nconst HomeSidebarTopics = ({ active }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default HomeSidebarTopics;\r\n","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgHomeSidebarArrow(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 8.214,\n height: 13.6,\n viewBox: \"0 0 8.214 13.6\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_289\",\n \"data-name\": \"Path 289\",\n d: \"M5964.578-2430.784l6.093,6.093-6.093,6.093\",\n transform: \"translate(-5963.871 2431.491)\",\n fill: \"none\",\n stroke: \"#fff\",\n strokeWidth: 2\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgHomeSidebarArrow);\nexport default __webpack_public_path__ + \"static/media/homeSidebarArrow.468be470c6bbcfccc160a4d532ce107c.svg\";\nexport { ForwardRef as ReactComponent };","// extracted by mini-css-extract-plugin\nexport default {\"homeSidebarLink\":\"HomeSidebarLink_homeSidebarLink__LTACx\",\"homeSidebarLink__active\":\"HomeSidebarLink_homeSidebarLink__active__r9p0k\",\"icon\":\"HomeSidebarLink_icon__KPJjQ\",\"name\":\"HomeSidebarLink_name__1R4jz\",\"iconArrow\":\"HomeSidebarLink_iconArrow__-sCrs\"};","import React from \"react\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport homeSidebarArrow from \"../../../assets/images/homeIcons/homeSidebarArrow.svg\";\r\nimport { useLocation } from \"react-router\";\r\nimport classes from \"./HomeSidebarLink.module.scss\";\r\nimport { FormattedMessage } from \"react-intl\";\r\nconst HomeSidebarLink = ({\r\n to,\r\n label,\r\n handleSidebar,\r\n icon: Component,\r\n msom,\r\n}) => {\r\n const location = useLocation();\r\n return (\r\n <>\r\n {msom && (\r\n {\r\n return isActive\r\n ? classes.homeSidebarLink + \" \" + classes.homeSidebarLink__active\r\n : classes.homeSidebarLink;\r\n }}\r\n >\r\n
    \r\n \r\n
    \r\n
    {}
    \r\n
    \r\n \r\n
    \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default HomeSidebarLink;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"homeSidebar__hide\":\"HomeSidebar_homeSidebar__hide__etD0x\",\"homeSidebar\":\"HomeSidebar_homeSidebar__rroyR\",\"sideNavbarOpaqueLayer\":\"HomeSidebar_sideNavbarOpaqueLayer__CkeO9\",\"homeSidebar__list\":\"HomeSidebar_homeSidebar__list__+DCBW\",\"homeSidebar__list__links\":\"HomeSidebar_homeSidebar__list__links__8E3nU\",\"homeSidebar__list__logout\":\"HomeSidebar_homeSidebar__list__logout__kJT92\",\"slideIn\":\"HomeSidebar_slideIn__LlwEk\",\"slideOut\":\"HomeSidebar_slideOut__ReJGr\"};","import React from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useNavigate } from \"react-router\";\r\nimport HomeSidebarConnect from \"../../../components/CustomSvgIcons/HomeSidebarConnect\";\r\nimport HomeSidebarContribute from \"../../../components/CustomSvgIcons/HomeSidebarContribute\";\r\nimport HomeSidebarHome from \"../../../components/CustomSvgIcons/HomeSidebarHome\";\r\nimport HomeSidebarLogout from \"../../../components/CustomSvgIcons/HomeSidebarLogout\";\r\nimport HomeSidebarMyFavorites from \"../../../components/CustomSvgIcons/HomeSidebarMyFavorites\";\r\nimport HomeSidebarQuiz from \"../../../components/CustomSvgIcons/HomeSidebarQuiz\";\r\nimport HomeSidebarTopics from \"../../../components/CustomSvgIcons/HomeSidebarTopics\";\r\nimport HomeHeaderLanguageChange from \"../../../components/HomeComponents/HomeHeaderLanguageChange/HomeHeaderLanguageChange\";\r\nimport HomeSidebarLink from \"../../../components/HomeComponents/HomeSidebarLink/HomeSidebarLink\";\r\nimport { logoutHandler } from \"../../../store/actions/actionHandlers/loginActionHandler\";\r\nimport classes from \"./HomeSidebar.module.scss\";\r\nconst HomeSidebar = ({ isSidebarVisible, reference, handleSidebar }) => {\r\n const dispatch = useDispatch();\r\n const navigate = useNavigate();\r\n const homeState = useSelector((state) => state.homeReducer);\r\n const { themeStyles } = homeState;\r\n const tenantData = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n const sidebarData = [\r\n {\r\n id: 1,\r\n label: \"home.home\",\r\n to: \"/home\",\r\n icon: HomeSidebarHome,\r\n msom: true,\r\n },\r\n {\r\n id: 2,\r\n label: \"home.topics\",\r\n to: \"/topics\",\r\n icon: HomeSidebarTopics,\r\n msom: tenantData?.ActiveFeatures.includes(\"Topic\"),\r\n },\r\n {\r\n id: 3,\r\n label: \"home.connect\",\r\n to: \"/connect\",\r\n icon: HomeSidebarConnect,\r\n msom:\r\n tenantData?.ActiveFeatures.includes(\"Learner Query\") ||\r\n tenantData?.ActiveFeatures.includes(\"Forum\") ||\r\n tenantData?.ActiveFeatures.includes(\"Poll\")\r\n ? true\r\n : false,\r\n },\r\n {\r\n id: 4,\r\n label: \"home.contribute\",\r\n to: \"/contribute\",\r\n icon: HomeSidebarContribute,\r\n msom: tenantData?.ActiveFeatures.includes(\"ShotclassesCrowdSourcing\") ? true : false,\r\n },\r\n {\r\n id: 5,\r\n label: \"home.quiz\",\r\n to: \"/quiz\",\r\n icon: HomeSidebarQuiz,\r\n msom:\r\n (tenantData?.ActiveFeatures.includes(\"LiveQuizzing\") ||\r\n tenantData?.ActiveFeatures.includes(\"VirtualQuizzing\")) ? true : false,\r\n },\r\n {\r\n id: 6,\r\n label: \"favorite.myFavorites\",\r\n to: \"/myfavorites\",\r\n icon: HomeSidebarMyFavorites,\r\n msom: true,\r\n },\r\n ];\r\n return (\r\n <>\r\n \r\n {isSidebarVisible ? (\r\n
    \r\n
    \r\n {sidebarData.map(({ id, label, to, icon, msom }) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
    \r\n {\r\n dispatch(logoutHandler(navigate));\r\n }}\r\n >\r\n \r\n
    \r\n \r\n ) : (\r\n
    \r\n
    \r\n {sidebarData.map(({ id, label, to, icon }) => {\r\n return (\r\n \r\n );\r\n })}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n )}\r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default HomeSidebar;\r\n","import React from \"react\";\r\n\r\nconst HamburgerIcon = ({ stroke }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default HamburgerIcon;\r\n","import React, { useEffect, useRef } from \"react\";\r\nimport HomeHeaderLinks from \"../../../components/HomeComponents/HomeHeaderLinks/HomeHeaderLinks\";\r\nimport Logo from \"../../../components/CommonComponents/Logo/Logo\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { getLastLoginTimeHandler } from \"../../../store/actions/actionHandlers/loginActionHandler\";\r\nimport {\r\n getAllLanguagesHandler,\r\n getNotificationsHandler,\r\n setSelectedLanguageHandler,\r\n} from \"../../../store/actions/actionHandlers/homeActionHandler\";\r\nimport addLangToLocalStorage from \"../../../utils/addLangToLocalStorage\";\r\nimport { useNavigate } from \"react-router\";\r\nimport { getUserProfileHandler } from \"../../../store/actions/actionHandlers/userActionHandler\";\r\nimport { getLeaderboardHandler } from \"../../../store/actions/actionHandlers/homeActionHandler\";\r\nimport classes from \"./HomeHeader.module.scss\";\r\nimport HomeSidebar from \"../HomeSidebar/HomeSidebar\";\r\nimport useComponentVisible from \"../../../hooks/useComponentVisible\";\r\nimport HamburgerIcon from \"../../../components/CustomSvgIcons/HamburgerIcon\";\r\nimport generalLogo from \"../../../assets/images/logo/LTIMindtree-White.png\";\r\n\r\nconst HomeHeader = ({ resethandler }) => {\r\n const dispatch = useDispatch();\r\n const navigate = useNavigate();\r\n\r\n const userState = useSelector((state) => state.userReducer);\r\n const loginState = useSelector((state) => state.loginReducer);\r\n const classState = useSelector((state) => state.classReducer);\r\n const homeState = useSelector((state) => state.homeReducer);\r\n\r\n const { notifications, allLanguages } = homeState;\r\n const { lastLoginTime } = loginState;\r\n const { postAssessmentScore } = classState;\r\n const { profile } = userState;\r\n\r\n const [sidebarRef, isSidebarVisible, setIsSidebar] = useComponentVisible();\r\n\r\n const tenantSlugLogoImage = JSON.parse(localStorage.getItem(\"themeData\"))\r\n ?.CustomData?.LogoImage;\r\n const isDarkTheme = JSON.parse(\r\n localStorage.getItem(\"themeData\")\r\n )?.IsDarkHeaderRequired;\r\n // const isDarkTheme = true\r\n const tenantSlugName = localStorage.getItem(\"tenantSlugName\");\r\n\r\n const handleSidebar = () => {\r\n setIsSidebar(!isSidebarVisible);\r\n };\r\n\r\n useEffect(() => {\r\n dispatch(getLeaderboardHandler(navigate));\r\n }, [dispatch, postAssessmentScore, navigate]);\r\n\r\n useEffect(() => {\r\n if (profile === null) {\r\n dispatch(getUserProfileHandler());\r\n }\r\n }, [dispatch, profile]);\r\n useEffect(() => {\r\n if (lastLoginTime === null) {\r\n dispatch(getLastLoginTimeHandler(navigate));\r\n }\r\n }, [dispatch, lastLoginTime, navigate]);\r\n useEffect(() => {\r\n // if (notifications === null) {\r\n dispatch(getNotificationsHandler(navigate));\r\n // }\r\n }, [dispatch, navigate]);\r\n\r\n useEffect(() => {\r\n if (!!allLanguages === false) {\r\n dispatch(getAllLanguagesHandler());\r\n }\r\n if (\r\n localStorage.getItem(\"languageTerm\") == null ||\r\n localStorage.getItem(\"language\") == null\r\n ) {\r\n addLangToLocalStorage(\"en-GB\", \"English\", dispatch);\r\n } else {\r\n dispatch(\r\n setSelectedLanguageHandler(\r\n localStorage.getItem(\"languageTerm\")?.split(\"-\")[0]\r\n )\r\n );\r\n }\r\n }, [dispatch, allLanguages]);\r\n\r\n const handleNavigate = () => {\r\n if (\r\n tenantSlugName?.toLowerCase() === \"search\" ||\r\n tenantSlugName?.toLowerCase() === \"qaaadsep26\" ||\r\n tenantSlugName?.toLowerCase() === \"ltimindtree\" ||\r\n tenantSlugName?.toLowerCase() === \"cybersec\"\r\n ) {\r\n window.open(\"https://ultimaworks.ltimindtree.com/\");\r\n } else {\r\n navigate(\"/home\");\r\n // window.scrollTo({ top: 0, left: 0, behavior: \"smooth\" });\r\n }\r\n };\r\n const ref = useRef();\r\n return (\r\n \r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n {tenantSlugName?.toLowerCase() === \"search\" ||\r\n tenantSlugName?.toLowerCase() === \"qaaadsep26\" ||\r\n tenantSlugName?.toLowerCase() === \"ltimindtree\" ? (\r\n
    \r\n
    |
    \r\n navigate(\"/home\")}\r\n className={classes.homeHeader__logo__link}\r\n >\r\n {/* ULTIMA WORKS */}\r\n
    \r\n Lighthouse\r\n
    \r\n
    \r\n Powered by\r\n \r\n Shotclasses\r\n
    \r\n
    \r\n {/* */}\r\n \r\n \r\n ) : tenantSlugName?.toLowerCase() === \"cybersec\" ? (\r\n
    \r\n
    |
    \r\n navigate(\"/home\")}\r\n className={classes.homeHeader__logo__link}\r\n >\r\n {/* ULTIMA WORKS */}\r\n
    \r\n Cyber Security\r\n
    \r\n
    \r\n Powered by\r\n \r\n Shotclasses\r\n
    \r\n
    \r\n {/* */}\r\n \r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default HomeHeader;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"progress\":\"ReportProgressContainer_progress__nG2Ok\",\"chart_box\":\"ReportProgressContainer_chart_box__Ac4Qn\",\"chart_wrapper\":\"ReportProgressContainer_chart_wrapper__4ZU95\",\"chartMain\":\"ReportProgressContainer_chartMain__cjkQQ\",\"chart\":\"ReportProgressContainer_chart__x6tW3\",\"profPic\":\"ReportProgressContainer_profPic__8N2KV\"};","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n MODE_SPACE = {name: \"space\"},\n MODE_HANDLE = {name: \"handle\"},\n MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n name: \"x\",\n handles: [\"w\", \"e\"].map(type),\n input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n name: \"y\",\n handles: [\"n\", \"s\"].map(type),\n input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n name: \"xy\",\n handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n input: function(xy) { return xy == null ? null : number2(xy); },\n output: function(xy) { return xy; }\n};\n\nvar cursors = {\n overlay: \"crosshair\",\n selection: \"move\",\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n};\n\nvar flipX = {\n e: \"w\",\n w: \"e\",\n nw: \"ne\",\n ne: \"nw\",\n se: \"sw\",\n sw: \"se\"\n};\n\nvar flipY = {\n n: \"s\",\n s: \"n\",\n nw: \"sw\",\n ne: \"se\",\n se: \"ne\",\n sw: \"nw\"\n};\n\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\n\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n if (svg.hasAttribute(\"viewBox\")) {\n svg = svg.viewBox.baseVal;\n return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n }\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n while (!node.__brush) if (!(node = node.parentNode)) return;\n return node.__brush;\n}\n\nfunction empty(extent) {\n return extent[0][0] === extent[1][0]\n || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n return brush(X);\n}\n\nexport function brushY() {\n return brush(Y);\n}\n\nexport default function() {\n return brush(XY);\n}\n\nfunction brush(dim) {\n var extent = defaultExtent,\n filter = defaultFilter,\n touchable = defaultTouchable,\n keys = true,\n listeners = dispatch(\"start\", \"brush\", \"end\"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group\n .property(\"__brush\", initialize)\n .selectAll(\".overlay\")\n .data([type(\"overlay\")]);\n\n overlay.enter().append(\"rect\")\n .attr(\"class\", \"overlay\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"cursor\", cursors.overlay)\n .merge(overlay)\n .each(function() {\n var extent = local(this).extent;\n select(this)\n .attr(\"x\", extent[0][0])\n .attr(\"y\", extent[0][1])\n .attr(\"width\", extent[1][0] - extent[0][0])\n .attr(\"height\", extent[1][1] - extent[0][1]);\n });\n\n group.selectAll(\".selection\")\n .data([type(\"selection\")])\n .enter().append(\"rect\")\n .attr(\"class\", \"selection\")\n .attr(\"cursor\", cursors.selection)\n .attr(\"fill\", \"#777\")\n .attr(\"fill-opacity\", 0.3)\n .attr(\"stroke\", \"#fff\")\n .attr(\"shape-rendering\", \"crispEdges\");\n\n var handle = group.selectAll(\".handle\")\n .data(dim.handles, function(d) { return d.type; });\n\n handle.exit().remove();\n\n handle.enter().append(\"rect\")\n .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n group\n .each(redraw)\n .attr(\"fill\", \"none\")\n .attr(\"pointer-events\", \"all\")\n .on(\"mousedown.brush\", started)\n .filter(touchable)\n .on(\"touchstart.brush\", started)\n .on(\"touchmove.brush\", touchmoved)\n .on(\"touchend.brush touchcancel.brush\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n brush.move = function(group, selection, event) {\n if (group.tween) {\n group\n .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n .tween(\"brush\", function() {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n i = interpolate(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && selection1 === null ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 !== null && selection1 !== null ? tween : tween(1);\n });\n } else {\n group\n .each(function() {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n\n interrupt(that);\n state.selection = selection1 === null ? null : selection1;\n redraw.call(that);\n emit.start(event).brush(event).end(event);\n });\n }\n };\n\n brush.clear = function(group, event) {\n brush.move(group, null, event);\n };\n\n function redraw() {\n var group = select(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(\".selection\")\n .style(\"display\", null)\n .attr(\"x\", selection[0][0])\n .attr(\"y\", selection[0][1])\n .attr(\"width\", selection[1][0] - selection[0][0])\n .attr(\"height\", selection[1][1] - selection[0][1]);\n\n group.selectAll(\".handle\")\n .style(\"display\", null)\n .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n }\n\n else {\n group.selectAll(\".selection,.handle\")\n .style(\"display\", \"none\")\n .attr(\"x\", null)\n .attr(\"y\", null)\n .attr(\"width\", null)\n .attr(\"height\", null);\n }\n }\n\n function emitter(that, args, clean) {\n var emit = that.__brush.emitter;\n return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n }\n\n function Emitter(that, args, clean) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n this.clean = clean;\n }\n\n Emitter.prototype = {\n beforestart: function() {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function(event, mode) {\n if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n else this.emit(\"brush\", event);\n return this;\n },\n brush: function(event, mode) {\n this.emit(\"brush\", event, mode);\n return this;\n },\n end: function(event, mode) {\n if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n return this;\n },\n emit: function(type, event, mode) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new BrushEvent(type, {\n sourceEvent: event,\n target: brush,\n selection: dim.output(this.state.selection),\n mode,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function started(event) {\n if (touchending && !event.touches) return;\n if (!filter.apply(this, arguments)) return;\n\n var that = this,\n type = event.target.__data__.type,\n mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0], w0, w1,\n N = extent[0][1], n0, n1,\n E = extent[1][0], e0, e1,\n S = extent[1][1], s0, s1,\n dx = 0,\n dy = 0,\n moving,\n shifting = signX && signY && keys && event.shiftKey,\n lockX,\n lockY,\n points = Array.from(event.touches || [event], t => {\n const i = t.identifier;\n t = pointer(t, that);\n t.point0 = t.slice();\n t.identifier = i;\n return t;\n });\n\n interrupt(that);\n var emit = emitter(that, arguments, true).beforestart();\n\n if (type === \"overlay\") {\n if (selection) moving = true;\n const pts = [points[0], points[1] || points[0]];\n state.selection = selection = [[\n w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n ], [\n e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n ]];\n if (points.length > 1) move(event);\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n\n var group = select(that)\n .attr(\"pointer-events\", \"none\");\n\n var overlay = group.selectAll(\".overlay\")\n .attr(\"cursor\", cursors[type]);\n\n if (event.touches) {\n emit.moved = moved;\n emit.ended = ended;\n } else {\n var view = select(event.view)\n .on(\"mousemove.brush\", moved, true)\n .on(\"mouseup.brush\", ended, true);\n if (keys) view\n .on(\"keydown.brush\", keydowned, true)\n .on(\"keyup.brush\", keyupped, true)\n\n dragDisable(event.view);\n }\n\n redraw.call(that);\n emit.start(event, mode.name);\n\n function moved(event) {\n for (const p of event.changedTouches || [event]) {\n for (const d of points)\n if (d.identifier === p.identifier) d.cur = pointer(p, that);\n }\n if (shifting && !lockX && !lockY && points.length === 1) {\n const point = points[0];\n if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n lockY = true;\n else\n lockX = true;\n }\n for (const point of points)\n if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n moving = true;\n noevent(event);\n move(event);\n }\n\n function move(event) {\n const point = points[0], point0 = point.point0;\n var t;\n\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG: {\n if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n case MODE_HANDLE: {\n if (points[1]) {\n if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n } else {\n if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n }\n break;\n }\n case MODE_CENTER: {\n if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1\n || selection[0][1] !== n1\n || selection[1][0] !== e1\n || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush(event, mode.name);\n }\n }\n\n function ended(event) {\n nopropagation(event);\n if (event.touches) {\n if (event.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n } else {\n dragEnable(event.view, moving);\n view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n }\n group.attr(\"pointer-events\", \"all\");\n overlay.attr(\"cursor\", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n if (empty(selection)) state.selection = null, redraw.call(that);\n emit.end(event, mode.name);\n }\n\n function keydowned(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n shifting = signX && signY;\n break;\n }\n case 18: { // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move(event);\n }\n break;\n }\n case 32: { // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr(\"cursor\", cursors.selection);\n move(event);\n }\n break;\n }\n default: return;\n }\n noevent(event);\n }\n\n function keyupped(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move(event);\n }\n break;\n }\n case 18: { // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move(event);\n }\n break;\n }\n case 32: { // SPACE\n if (mode === MODE_SPACE) {\n if (event.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n overlay.attr(\"cursor\", cursors[type]);\n move(event);\n }\n break;\n }\n default: return;\n }\n noevent(event);\n }\n }\n\n function touchmoved(event) {\n emitter(this, arguments).moved(event);\n }\n\n function touchended(event) {\n emitter(this, arguments).ended(event);\n }\n\n function initialize() {\n var state = this.__brush || {selection: null};\n state.extent = number2(extent.apply(this, arguments));\n state.dim = dim;\n return state;\n }\n\n brush.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n };\n\n brush.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n };\n\n brush.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n };\n\n brush.handleSize = function(_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.keyModifiers = function(_) {\n return arguments.length ? (keys = !!_, brush) : keys;\n };\n\n brush.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","import React, { Component, useCallback } from \"react\";\r\nimport { useEffect } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport classes from \"./ReportProgressContainer.module.scss\";\r\nimport profilePicture from \"../../../assets/images/homeIcons/userCircleIcon.svg\";\r\nimport * as d3 from \"d3\";\r\nimport { useLocation } from \"react-router\";\r\n\r\nconst ReportProgressContainer = (props) => {\r\n const userState = useSelector((state) => state.userReducer);\r\n const { profile } = userState;\r\n const location = useLocation();\r\n\r\n const chRef = React.createRef();\r\n\r\n const { data, colors, showNameLabel, chartDimmension, colorsReport } =\r\n props;\r\n\r\n const {\r\n width,\r\n height,\r\n margin,\r\n donutInnerArc,\r\n donutOuterArc,\r\n outerArcInner,\r\n outerArcOuter,\r\n polylinesPosition,\r\n labelPosition,\r\n } = chartDimmension;\r\n\r\n const drawChart = useCallback(() => {\r\n // const width=1000;\r\n // const height = 450;\r\n // const margin = 10;\r\n\r\n let radius = Math.min(width, height) / 2 - margin;\r\n // legend Position\r\n //let legendPosition = d3.arc().innerRadius(radius/1.75).outerRadius(radius);\r\n\r\n // Create SVG\r\n const svg = d3\r\n .select(chRef.current)\r\n .append(\"svg\")\r\n .attr(\"width\", width)\r\n .attr(\"height\", height)\r\n\r\n .append(\"g\")\r\n .attr(\r\n \"transform\",\r\n \"translate(\" + width / 2 + \",\" + height / 2 + \")\"\r\n );\r\n\r\n let pie = d3\r\n .pie()\r\n .sort(null)\r\n .value((d) => d.value);\r\n let data_ready = pie(data);\r\n\r\n let arc = d3\r\n .arc()\r\n .innerRadius(radius * donutInnerArc) // This is the size of the donut hole\r\n .outerRadius(radius * donutOuterArc);\r\n\r\n let outerArc = d3\r\n .arc()\r\n .innerRadius(radius * outerArcInner)\r\n .outerRadius(radius * outerArcOuter);\r\n\r\n // Donut partition\r\n svg.selectAll(\"allSlices\")\r\n .data(data_ready)\r\n .enter()\r\n .append(\"path\")\r\n .attr(\"d\", arc)\r\n .attr(\"fill\", (d) => {\r\n return colorsReport === true\r\n ? colors(d.data.name)\r\n : d.data.color;\r\n })\r\n\r\n .attr(\"stroke\", \"white\")\r\n .style(\"stroke-width\", \"0px\")\r\n .style(\"opacity\", \"0.8\");\r\n\r\n // Legend group and legend name\r\n svg.selectAll(\"allPolylines\")\r\n .data(data_ready)\r\n .enter()\r\n .append(\"polyline\")\r\n .attr(\"stroke\", \"black\")\r\n\r\n .style(\"fill\", \"none\")\r\n .attr(\"stroke-width\", 1)\r\n .attr(\"points\", (d) => {\r\n let posA = arc.centroid(d);\r\n let posB = outerArc.centroid(d);\r\n let posC = outerArc.centroid(d);\r\n var midangle = d.startAngle + (d.endAngle - d.startAngle) / 2;\r\n posC[0] =\r\n radius * polylinesPosition * (midangle < Math.PI ? 1 : -1);\r\n return [posA, posB, posC];\r\n });\r\n\r\n //Label for value\r\n svg.selectAll(\"allLabels\")\r\n .data(data_ready)\r\n .enter()\r\n\r\n .append(\"text\")\r\n\r\n .text((d) => {\r\n return showNameLabel === true\r\n ? d.data.name + \" : \" + d.data.value + \"%\"\r\n : d.data.value + \"%\";\r\n })\r\n\r\n .attr(\"transform\", (d) => {\r\n let pos = outerArc.centroid(d);\r\n\r\n var midangle = d.startAngle + (d.endAngle - d.startAngle) / 2;\r\n pos[0] = radius * labelPosition * (midangle < Math.PI ? 1 : -1);\r\n return \"translate(\" + pos + \")\";\r\n })\r\n\r\n .style(\"text-anchor\", (d) => {\r\n var midangle = d.startAngle + (d.endAngle - d.startAngle) / 2;\r\n return midangle < Math.PI ? \"start\" : \"end\";\r\n });\r\n }, [data, chRef?.current]);\r\n\r\n useEffect(() => {\r\n console.log(\"data\", data);\r\n d3.select(chRef.current).selectChildren().remove();\r\n drawChart();\r\n }, [drawChart, chRef?.current]);\r\n\r\n return (\r\n \r\n
    \r\n {location.pathname === \"/account/myaccount\" && (\r\n //
    \r\n
    \r\n {\r\n e.target.onerror = null;\r\n e.target.src = profilePicture;\r\n }}\r\n alt=\"profile\"\r\n />\r\n
    \r\n //
    \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ReportProgressContainer;\r\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","import { useState, useEffect, useRef } from \"react\";\r\n\r\nexport default function useComponentVisible() {\r\n const [isComponentVisible, setIsComponentVisible] = useState(false);\r\n const ref = useRef(null);\r\n\r\n const handleClickOutside = (event) => {\r\n if (\r\n isComponentVisible &&\r\n ref.current &&\r\n !ref.current.contains(event.target)\r\n ) {\r\n setIsComponentVisible(!isComponentVisible);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener(\"click\", handleClickOutside, !isComponentVisible);\r\n\r\n return () => {\r\n document.removeEventListener(\r\n \"click\",\r\n handleClickOutside,\r\n !isComponentVisible\r\n );\r\n };\r\n });\r\n\r\n return [ref, isComponentVisible, setIsComponentVisible];\r\n}\r\n","import { useState, useEffect } from \"react\";\r\n\r\nexport default function useWindowWidthLessThan(size) {\r\n const [width, setWidth] = useState(0);\r\n\r\n useEffect(() => {\r\n function handleResize() {\r\n setWidth(window.innerWidth);\r\n }\r\n\r\n window.addEventListener(\"resize\", handleResize);\r\n\r\n handleResize();\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n };\r\n }, [setWidth]);\r\n\r\n return width < size;\r\n}\r\n","import { isValidElement } from 'react';\n\nimport { Id } from '../types';\n\nexport function isNum(v: any): v is Number {\n return typeof v === 'number' && !isNaN(v);\n}\n\nexport function isBool(v: any): v is Boolean {\n return typeof v === 'boolean';\n}\n\nexport function isStr(v: any): v is String {\n return typeof v === 'string';\n}\n\nexport function isFn(v: any): v is Function {\n return typeof v === 'function';\n}\n\nexport function parseClassName(v: any) {\n return isStr(v) || isFn(v) ? v : null;\n}\n\nexport function isToastIdValid(toastId?: Id) {\n return toastId === 0 || toastId;\n}\n\nexport function getAutoCloseDelay(\n toastAutoClose?: false | number,\n containerAutoClose?: false | number\n) {\n return toastAutoClose === false ||\n (isNum(toastAutoClose) && toastAutoClose > 0)\n ? toastAutoClose\n : containerAutoClose;\n}\n\nexport const canUseDom = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nexport function canBeRendered(content: T): boolean {\n return (\n isValidElement(content) || isStr(content) || isFn(content) || isNum(content)\n );\n}\n","import { ToastPosition, TypeOptions } from '../types';\n\ntype KeyOfPosition =\n | 'TOP_LEFT'\n | 'TOP_RIGHT'\n | 'TOP_CENTER'\n | 'BOTTOM_LEFT'\n | 'BOTTOM_RIGHT'\n | 'BOTTOM_CENTER';\n\ntype KeyOfType = 'INFO' | 'SUCCESS' | 'WARNING' | 'ERROR' | 'DEFAULT';\n\nexport const POSITION: { [key in KeyOfPosition]: ToastPosition } = {\n TOP_LEFT: 'top-left',\n TOP_RIGHT: 'top-right',\n TOP_CENTER: 'top-center',\n BOTTOM_LEFT: 'bottom-left',\n BOTTOM_RIGHT: 'bottom-right',\n BOTTOM_CENTER: 'bottom-center'\n};\n\nexport const TYPE: { [key in KeyOfType]: TypeOptions } = {\n INFO: 'info',\n SUCCESS: 'success',\n WARNING: 'warning',\n ERROR: 'error',\n DEFAULT: 'default'\n};\n\nexport const enum Default {\n COLLAPSE_DURATION = 300,\n DEBOUNCE_DURATION = 50,\n CSS_NAMESPACE = 'Toastify',\n DRAGGABLE_PERCENT = 80\n}\n\nexport const enum Direction {\n X = 'x',\n Y = 'y'\n}\n\nexport const enum SyntheticEvent {\n ENTRANCE_ANIMATION_END = 'd'\n}\n","import React, { useEffect, useLayoutEffect, useRef } from 'react';\n\nimport { collapseToast } from './collapseToast';\nimport { Default, SyntheticEvent } from './constant';\n\nimport { ToastTransitionProps } from '../types';\n\nexport interface CSSTransitionProps {\n /**\n * Css class to apply when toast enter\n */\n enter: string;\n\n /**\n * Css class to apply when toast leave\n */\n exit: string;\n\n /**\n * Append current toast position to the classname.\n * If multiple classes are provided, only the last one will get the position\n * For instance `myclass--top-center`...\n * `Default: false`\n */\n appendPosition?: boolean;\n\n /**\n * Collapse toast smoothly when exit animation end\n * `Default: true`\n */\n collapse?: boolean;\n\n /**\n * Collapse transition duration\n * `Default: 300`\n */\n collapseDuration?: number;\n}\n\nconst enum AnimationStep {\n Enter,\n Exit\n}\n\n/**\n * Css animation that just work.\n * You could use animate.css for instance\n *\n *\n * ```\n * cssTransition({\n * enter: \"animate__animated animate__bounceIn\",\n * exit: \"animate__animated animate__bounceOut\"\n * })\n * ```\n *\n */\nexport function cssTransition({\n enter,\n exit,\n appendPosition = false,\n collapse = true,\n collapseDuration = Default.COLLAPSE_DURATION\n}: CSSTransitionProps) {\n return function ToastTransition({\n children,\n position,\n preventExitTransition,\n done,\n nodeRef,\n isIn\n }: ToastTransitionProps) {\n const enterClassName = appendPosition ? `${enter}--${position}` : enter;\n const exitClassName = appendPosition ? `${exit}--${position}` : exit;\n const baseClassName = useRef();\n const animationStep = useRef(AnimationStep.Enter);\n\n useLayoutEffect(() => {\n onEnter();\n }, []);\n\n useEffect(() => {\n if (!isIn) preventExitTransition ? onExited() : onExit();\n }, [isIn]);\n\n function onEnter() {\n const node = nodeRef.current!;\n baseClassName.current = node.className;\n node.className += ` ${enterClassName}`;\n node.addEventListener('animationend', onEntered);\n }\n\n function onEntered(e: AnimationEvent) {\n if (e.target !== nodeRef.current) return;\n\n const node = nodeRef.current!;\n node.dispatchEvent(new Event(SyntheticEvent.ENTRANCE_ANIMATION_END));\n node.removeEventListener('animationend', onEntered);\n if (animationStep.current === AnimationStep.Enter) {\n node.className = baseClassName.current!;\n }\n }\n\n function onExit() {\n animationStep.current = AnimationStep.Exit;\n const node = nodeRef.current!;\n\n node.className += ` ${exitClassName}`;\n node.addEventListener('animationend', onExited);\n }\n\n function onExited() {\n const node = nodeRef.current!;\n\n node.removeEventListener('animationend', onExited);\n collapse ? collapseToast(node, done, collapseDuration) : done();\n }\n\n return <>{children};\n };\n}\n","import { Default } from './constant';\n\n/**\n * Used to collapse toast after exit animation\n */\nexport function collapseToast(\n node: HTMLElement,\n done: () => void,\n duration = Default.COLLAPSE_DURATION\n) {\n const { scrollHeight, style } = node;\n\n requestAnimationFrame(() => {\n style.minHeight = 'initial';\n style.height = scrollHeight + 'px';\n style.transition = `all ${duration}ms`;\n\n requestAnimationFrame(() => {\n style.height = '0';\n style.padding = '0';\n style.margin = '0';\n setTimeout(done, duration as number);\n });\n });\n}\n","import {\n Id,\n ToastContent,\n ClearWaitingQueueParams,\n NotValidatedToastProps\n} from '../types';\nimport { ContainerInstance } from '../hooks';\n\nexport const enum Event {\n Show,\n Clear,\n DidMount,\n WillUnmount,\n Change,\n ClearWaitingQueue\n}\n\ntype OnShowCallback = (\n content: ToastContent,\n options: NotValidatedToastProps\n) => void;\ntype OnClearCallback = (id?: Id) => void;\ntype OnClearWaitingQueue = (params: ClearWaitingQueueParams) => void;\ntype OnDidMountCallback = (containerInstance: ContainerInstance) => void;\ntype OnWillUnmountCallback = OnDidMountCallback;\nexport type OnChangeCallback = (\n toast: number,\n containerId?: number | string\n) => void;\ntype Callback =\n | OnShowCallback\n | OnClearCallback\n | OnClearWaitingQueue\n | OnDidMountCallback\n | OnWillUnmountCallback\n | OnChangeCallback;\ntype TimeoutId = ReturnType;\n\nexport interface EventManager {\n list: Map;\n emitQueue: Map;\n on(event: Event.Show, callback: OnShowCallback): EventManager;\n on(event: Event.Clear, callback: OnClearCallback): EventManager;\n on(\n event: Event.ClearWaitingQueue,\n callback: OnClearWaitingQueue\n ): EventManager;\n on(event: Event.DidMount, callback: OnDidMountCallback): EventManager;\n on(event: Event.WillUnmount, callback: OnWillUnmountCallback): EventManager;\n on(event: Event.Change, callback: OnChangeCallback): EventManager;\n off(event: Event, callback?: Callback): EventManager;\n cancelEmit(event: Event): EventManager;\n emit(\n event: Event.Show,\n content: React.ReactNode,\n options: NotValidatedToastProps\n ): void;\n emit(event: Event.Clear, id?: string | number): void;\n emit(event: Event.ClearWaitingQueue, params: ClearWaitingQueueParams): void;\n emit(event: Event.DidMount, containerInstance: ContainerInstance): void;\n emit(event: Event.WillUnmount, containerInstance: ContainerInstance): void;\n emit(event: Event.Change, toast: number, containerId?: number | string): void;\n}\n\nexport const eventManager: EventManager = {\n list: new Map(),\n emitQueue: new Map(),\n\n on(event: Event, callback: Callback) {\n this.list.has(event) || this.list.set(event, []);\n this.list.get(event)!.push(callback);\n return this;\n },\n\n off(event, callback) {\n if (callback) {\n const cb = this.list.get(event)!.filter(cb => cb !== callback);\n this.list.set(event, cb);\n return this;\n }\n this.list.delete(event);\n return this;\n },\n\n cancelEmit(event) {\n const timers = this.emitQueue.get(event);\n if (timers) {\n timers.forEach(clearTimeout);\n this.emitQueue.delete(event);\n }\n\n return this;\n },\n\n /**\n * Enqueue the event at the end of the call stack\n * Doing so let the user call toast as follow:\n * toast('1')\n * toast('2')\n * toast('3')\n * Without setTimemout the code above will not work\n */\n emit(event: Event, ...args: any[]) {\n this.list.has(event) &&\n this.list.get(event)!.forEach((callback: Callback) => {\n const timer: TimeoutId = setTimeout(() => {\n // @ts-ignore\n callback(...args);\n }, 0);\n\n this.emitQueue.has(event) || this.emitQueue.set(event, []);\n this.emitQueue.get(event)!.push(timer);\n });\n }\n};\n","import {\n useEffect,\n useRef,\n useReducer,\n cloneElement,\n isValidElement,\n useState\n} from 'react';\nimport {\n parseClassName,\n canBeRendered,\n isBool,\n isFn,\n isNum,\n isStr,\n isToastIdValid,\n getAutoCloseDelay\n} from '../utils';\nimport { eventManager, Event } from '../core/eventManager';\n\nimport {\n Id,\n ToastContainerProps,\n ToastProps,\n ToastContent,\n Toast,\n ToastPosition,\n ClearWaitingQueueParams,\n NotValidatedToastProps,\n ToastTransition\n} from '../types';\n\ninterface QueuedToast {\n toastContent: ToastContent;\n toastProps: ToastProps;\n staleId?: Id;\n}\n\nexport interface ContainerInstance {\n toastKey: number;\n displayedToast: number;\n props: ToastContainerProps;\n containerId?: Id | null;\n isToastActive: (toastId: Id) => boolean;\n getToast: (id: Id) => Toast | null | undefined;\n queue: QueuedToast[];\n count: number;\n}\n\nexport function useToastContainer(props: ToastContainerProps) {\n const [, forceUpdate] = useReducer(x => x + 1, 0);\n const [toastIds, setToastIds] = useState([]);\n const containerRef = useRef(null);\n const toastToRender = useRef(new Map()).current;\n const isToastActive = (id: Id) => toastIds.indexOf(id) !== -1;\n const instance = useRef({\n toastKey: 1,\n displayedToast: 0,\n count: 0,\n queue: [],\n props,\n containerId: null,\n isToastActive,\n getToast: id => toastToRender.get(id)\n }).current;\n\n useEffect(() => {\n instance.containerId = props.containerId;\n eventManager\n .cancelEmit(Event.WillUnmount)\n .on(Event.Show, buildToast)\n .on(Event.Clear, toastId => containerRef.current && removeToast(toastId))\n .on(Event.ClearWaitingQueue, clearWaitingQueue)\n .emit(Event.DidMount, instance);\n\n return () => eventManager.emit(Event.WillUnmount, instance);\n }, []);\n\n useEffect(() => {\n instance.isToastActive = isToastActive;\n instance.displayedToast = toastIds.length;\n eventManager.emit(Event.Change, toastIds.length, props.containerId);\n }, [toastIds]);\n\n useEffect(() => {\n instance.props = props;\n });\n\n function clearWaitingQueue({ containerId }: ClearWaitingQueueParams) {\n const { limit } = instance.props;\n if (limit && (!containerId || instance.containerId === containerId)) {\n instance.count -= instance.queue.length;\n instance.queue = [];\n }\n }\n\n function removeToast(toastId?: Id) {\n setToastIds(state =>\n isToastIdValid(toastId) ? state.filter(id => id !== toastId) : []\n );\n }\n\n function dequeueToast() {\n const {\n toastContent,\n toastProps,\n staleId\n } = instance.queue.shift() as QueuedToast;\n appendToast(toastContent, toastProps, staleId);\n }\n\n /**\n * check if a container is attached to the dom\n * check for multi-container, build only if associated\n * check for duplicate toastId if no update\n */\n function isNotValid(options: NotValidatedToastProps) {\n return (\n !containerRef.current ||\n (instance.props.enableMultiContainer &&\n options.containerId !== instance.props.containerId) ||\n (toastToRender.has(options.toastId) && options.updateId == null)\n );\n }\n\n // this function and all the function called inside needs to rely on refs\n function buildToast(\n content: ToastContent,\n { delay, staleId, ...options }: NotValidatedToastProps\n ) {\n if (!canBeRendered(content) || isNotValid(options)) return;\n\n const { toastId, updateId, data } = options;\n const { props } = instance;\n const closeToast = () => removeToast(toastId);\n const isNotAnUpdate = updateId == null;\n\n if (isNotAnUpdate) instance.count++;\n\n const toastProps: ToastProps = {\n toastId,\n updateId,\n isLoading: options.isLoading,\n theme: options.theme || props.theme!,\n icon: options.icon != null ? options.icon : props.icon,\n isIn: false,\n key: options.key || instance.toastKey++,\n type: options.type!,\n closeToast: closeToast,\n closeButton: options.closeButton,\n rtl: props.rtl,\n position: options.position || (props.position as ToastPosition),\n transition: options.transition || (props.transition as ToastTransition),\n className: parseClassName(options.className || props.toastClassName),\n bodyClassName: parseClassName(\n options.bodyClassName || props.bodyClassName\n ),\n style: options.style || props.toastStyle,\n bodyStyle: options.bodyStyle || props.bodyStyle,\n onClick: options.onClick || props.onClick,\n pauseOnHover: isBool(options.pauseOnHover)\n ? options.pauseOnHover\n : props.pauseOnHover,\n pauseOnFocusLoss: isBool(options.pauseOnFocusLoss)\n ? options.pauseOnFocusLoss\n : props.pauseOnFocusLoss,\n draggable: isBool(options.draggable)\n ? options.draggable\n : props.draggable,\n draggablePercent:\n options.draggablePercent || (props.draggablePercent as number),\n draggableDirection:\n options.draggableDirection || props.draggableDirection,\n closeOnClick: isBool(options.closeOnClick)\n ? options.closeOnClick\n : props.closeOnClick,\n progressClassName: parseClassName(\n options.progressClassName || props.progressClassName\n ),\n progressStyle: options.progressStyle || props.progressStyle,\n autoClose: options.isLoading\n ? false\n : getAutoCloseDelay(options.autoClose, props.autoClose),\n hideProgressBar: isBool(options.hideProgressBar)\n ? options.hideProgressBar\n : props.hideProgressBar,\n progress: options.progress,\n role: options.role || props.role,\n deleteToast() {\n toastToRender.delete(toastId);\n const queueLen = instance.queue.length;\n instance.count = isToastIdValid(toastId)\n ? instance.count - 1\n : instance.count - instance.displayedToast;\n\n if (instance.count < 0) instance.count = 0;\n\n if (queueLen > 0) {\n const freeSlot = isToastIdValid(toastId) ? 1 : instance.props.limit!;\n\n if (queueLen === 1 || freeSlot === 1) {\n instance.displayedToast++;\n dequeueToast();\n } else {\n const toDequeue = freeSlot > queueLen ? queueLen : freeSlot;\n instance.displayedToast = toDequeue;\n\n for (let i = 0; i < toDequeue; i++) dequeueToast();\n }\n } else {\n forceUpdate();\n }\n }\n };\n\n if (isFn(options.onOpen)) toastProps.onOpen = options.onOpen;\n if (isFn(options.onClose)) toastProps.onClose = options.onClose;\n\n toastProps.closeButton = props.closeButton;\n\n if (options.closeButton === false || canBeRendered(options.closeButton)) {\n toastProps.closeButton = options.closeButton;\n } else if (options.closeButton === true) {\n toastProps.closeButton = canBeRendered(props.closeButton)\n ? props.closeButton\n : true;\n }\n\n let toastContent = content;\n\n if (isValidElement(content) && !isStr(content.type)) {\n toastContent = cloneElement(content, {\n closeToast,\n toastProps,\n data\n });\n } else if (isFn(content)) {\n toastContent = content({ closeToast, toastProps, data });\n }\n\n // not handling limit + delay by design. Waiting for user feedback first\n if (\n props.limit &&\n props.limit > 0 &&\n instance.count > props.limit &&\n isNotAnUpdate\n ) {\n instance.queue.push({ toastContent, toastProps, staleId });\n } else if (isNum(delay) && (delay as number) > 0) {\n setTimeout(() => {\n appendToast(toastContent, toastProps, staleId);\n }, delay);\n } else {\n appendToast(toastContent, toastProps, staleId);\n }\n }\n\n function appendToast(\n content: ToastContent,\n toastProps: ToastProps,\n staleId?: Id\n ) {\n const { toastId } = toastProps;\n\n if (staleId) toastToRender.delete(staleId);\n\n toastToRender.set(toastId, {\n content,\n props: toastProps\n });\n setToastIds(state => [...state, toastId].filter(id => id !== staleId));\n }\n\n function getToastToRender(\n cb: (position: ToastPosition, toastList: Toast[]) => T\n ) {\n const toRender = new Map();\n const collection = Array.from(toastToRender.values());\n\n if (props.newestOnTop) collection.reverse();\n\n collection.forEach(toast => {\n const { position } = toast.props;\n toRender.has(position) || toRender.set(position, []);\n toRender.get(position)!.push(toast);\n });\n\n return Array.from(toRender, p => cb(p[0], p[1]));\n }\n\n return {\n getToastToRender,\n containerRef,\n isToastActive\n };\n}\n","import {\n useState,\n useRef,\n useEffect,\n isValidElement,\n DOMAttributes\n} from 'react';\n\nimport { isFn, Default, Direction, SyntheticEvent } from '../utils';\nimport { ToastProps } from '../types';\n\ninterface Draggable {\n start: number;\n x: number;\n y: number;\n delta: number;\n removalDistance: number;\n canCloseOnClick: boolean;\n canDrag: boolean;\n boundingRect: DOMRect | null;\n didMove: boolean;\n}\n\ntype DragEvent = MouseEvent & TouchEvent;\n\nfunction getX(e: DragEvent) {\n return e.targetTouches && e.targetTouches.length >= 1\n ? e.targetTouches[0].clientX\n : e.clientX;\n}\n\nfunction getY(e: DragEvent) {\n return e.targetTouches && e.targetTouches.length >= 1\n ? e.targetTouches[0].clientY\n : e.clientY;\n}\n\nexport function useToast(props: ToastProps) {\n const [isRunning, setIsRunning] = useState(false);\n const [preventExitTransition, setPreventExitTransition] = useState(false);\n const toastRef = useRef(null);\n const drag = useRef({\n start: 0,\n x: 0,\n y: 0,\n delta: 0,\n removalDistance: 0,\n canCloseOnClick: true,\n canDrag: false,\n boundingRect: null,\n didMove: false\n }).current;\n const syncProps = useRef(props);\n const { autoClose, pauseOnHover, closeToast, onClick, closeOnClick } = props;\n\n useEffect(() => {\n syncProps.current = props;\n });\n\n useEffect(() => {\n if (toastRef.current)\n toastRef.current.addEventListener(\n SyntheticEvent.ENTRANCE_ANIMATION_END,\n playToast,\n { once: true }\n );\n\n if (isFn(props.onOpen))\n props.onOpen(isValidElement(props.children) && props.children.props);\n\n return () => {\n const props = syncProps.current;\n if (isFn(props.onClose))\n props.onClose(isValidElement(props.children) && props.children.props);\n };\n }, []);\n\n useEffect(() => {\n props.pauseOnFocusLoss && bindFocusEvents();\n return () => {\n props.pauseOnFocusLoss && unbindFocusEvents();\n };\n }, [props.pauseOnFocusLoss]);\n\n function onDragStart(\n e: React.MouseEvent | React.TouchEvent\n ) {\n if (props.draggable) {\n bindDragEvents();\n const toast = toastRef.current!;\n drag.canCloseOnClick = true;\n drag.canDrag = true;\n drag.boundingRect = toast.getBoundingClientRect();\n toast.style.transition = '';\n drag.x = getX(e.nativeEvent as DragEvent);\n drag.y = getY(e.nativeEvent as DragEvent);\n\n if (props.draggableDirection === Direction.X) {\n drag.start = drag.x;\n drag.removalDistance =\n toast.offsetWidth * (props.draggablePercent / 100);\n } else {\n drag.start = drag.y;\n drag.removalDistance =\n toast.offsetHeight *\n (props.draggablePercent === Default.DRAGGABLE_PERCENT\n ? props.draggablePercent * 1.5\n : props.draggablePercent / 100);\n }\n }\n }\n\n function onDragTransitionEnd() {\n if (drag.boundingRect) {\n const { top, bottom, left, right } = drag.boundingRect;\n\n if (\n props.pauseOnHover &&\n drag.x >= left &&\n drag.x <= right &&\n drag.y >= top &&\n drag.y <= bottom\n ) {\n pauseToast();\n } else {\n playToast();\n }\n }\n }\n\n function playToast() {\n setIsRunning(true);\n }\n\n function pauseToast() {\n setIsRunning(false);\n }\n\n function bindFocusEvents() {\n if (!document.hasFocus()) pauseToast();\n\n window.addEventListener('focus', playToast);\n window.addEventListener('blur', pauseToast);\n }\n\n function unbindFocusEvents() {\n window.removeEventListener('focus', playToast);\n window.removeEventListener('blur', pauseToast);\n }\n\n function bindDragEvents() {\n drag.didMove = false;\n document.addEventListener('mousemove', onDragMove);\n document.addEventListener('mouseup', onDragEnd);\n\n document.addEventListener('touchmove', onDragMove);\n document.addEventListener('touchend', onDragEnd);\n }\n\n function unbindDragEvents() {\n document.removeEventListener('mousemove', onDragMove);\n document.removeEventListener('mouseup', onDragEnd);\n\n document.removeEventListener('touchmove', onDragMove);\n document.removeEventListener('touchend', onDragEnd);\n }\n\n function onDragMove(e: MouseEvent | TouchEvent) {\n const toast = toastRef.current!;\n if (drag.canDrag && toast) {\n drag.didMove = true;\n if (isRunning) pauseToast();\n drag.x = getX(e as DragEvent);\n drag.y = getY(e as DragEvent);\n if (props.draggableDirection === Direction.X) {\n drag.delta = drag.x - drag.start;\n } else {\n drag.delta = drag.y - drag.start;\n }\n\n // prevent false positif during a toast click\n if (drag.start !== drag.x) drag.canCloseOnClick = false;\n toast.style.transform = `translate${props.draggableDirection}(${drag.delta}px)`;\n toast.style.opacity = `${1 -\n Math.abs(drag.delta / drag.removalDistance)}`;\n }\n }\n\n function onDragEnd() {\n unbindDragEvents();\n const toast = toastRef.current!;\n if (drag.canDrag && drag.didMove && toast) {\n drag.canDrag = false;\n if (Math.abs(drag.delta) > drag.removalDistance) {\n setPreventExitTransition(true);\n props.closeToast();\n return;\n }\n toast.style.transition = 'transform 0.2s, opacity 0.2s';\n toast.style.transform = `translate${props.draggableDirection}(0)`;\n toast.style.opacity = '1';\n }\n }\n\n const eventHandlers: DOMAttributes = {\n onMouseDown: onDragStart,\n onTouchStart: onDragStart,\n onMouseUp: onDragTransitionEnd,\n onTouchEnd: onDragTransitionEnd\n };\n\n if (autoClose && pauseOnHover) {\n eventHandlers.onMouseEnter = pauseToast;\n eventHandlers.onMouseLeave = playToast;\n }\n\n // prevent toast from closing when user drags the toast\n if (closeOnClick) {\n eventHandlers.onClick = (e: React.MouseEvent) => {\n onClick && onClick(e);\n drag.canCloseOnClick && closeToast();\n };\n }\n\n return {\n playToast,\n pauseToast,\n isRunning,\n preventExitTransition,\n toastRef,\n eventHandlers\n };\n}\n","import * as React from 'react';\nimport { Default } from '../utils';\nimport { Theme, TypeOptions } from '../types';\n\nexport interface CloseButtonProps {\n closeToast: (e: React.MouseEvent) => void;\n type: TypeOptions;\n ariaLabel?: string;\n theme: Theme;\n}\n\nexport function CloseButton({\n closeToast,\n theme,\n ariaLabel = 'close'\n}: CloseButtonProps) {\n return (\n {\n e.stopPropagation();\n closeToast(e);\n }}\n aria-label={ariaLabel}\n >\n \n \n \n \n );\n}\n","import * as React from 'react';\nimport cx from 'clsx';\n\nimport { TYPE, Default, isFn } from './../utils';\nimport { TypeOptions, ToastClassName, Theme } from '../types';\n\nexport interface ProgressBarProps {\n /**\n * The animation delay which determine when to close the toast\n */\n delay: number;\n\n /**\n * Whether or not the animation is running or paused\n */\n isRunning: boolean;\n\n /**\n * Func to close the current toast\n */\n closeToast: () => void;\n\n /**\n * Optional type : info, success ...\n */\n type: TypeOptions;\n\n /**\n * The theme that is currently used\n */\n theme: Theme;\n\n /**\n * Hide or not the progress bar\n */\n hide?: boolean;\n\n /**\n * Optionnal className\n */\n className?: ToastClassName;\n\n /**\n * Optionnal inline style\n */\n style?: React.CSSProperties;\n\n /**\n * Tell wether or not controlled progress bar is used\n */\n controlledProgress?: boolean;\n\n /**\n * Controlled progress value\n */\n progress?: number | string;\n\n /**\n * Support rtl content\n */\n rtl?: boolean;\n\n /**\n * Tell if the component is visible on screen or not\n */\n isIn?: boolean;\n}\n\nexport function ProgressBar({\n delay,\n isRunning,\n closeToast,\n type,\n hide,\n className,\n style: userStyle,\n controlledProgress,\n progress,\n rtl,\n isIn,\n theme\n}: ProgressBarProps) {\n const style: React.CSSProperties = {\n ...userStyle,\n animationDuration: `${delay}ms`,\n animationPlayState: isRunning ? 'running' : 'paused',\n opacity: hide ? 0 : 1\n };\n\n if (controlledProgress) style.transform = `scaleX(${progress})`;\n const defaultClassName = cx(\n `${Default.CSS_NAMESPACE}__progress-bar`,\n controlledProgress\n ? `${Default.CSS_NAMESPACE}__progress-bar--controlled`\n : `${Default.CSS_NAMESPACE}__progress-bar--animated`,\n `${Default.CSS_NAMESPACE}__progress-bar-theme--${theme}`,\n `${Default.CSS_NAMESPACE}__progress-bar--${type}`,\n {\n [`${Default.CSS_NAMESPACE}__progress-bar--rtl`]: rtl\n }\n );\n const classNames = isFn(className)\n ? className({\n rtl,\n type,\n defaultClassName\n })\n : cx(defaultClassName, className);\n\n // 🧐 controlledProgress is derived from progress\n // so if controlledProgress is set\n // it means that this is also the case for progress\n const animationEvent = {\n [controlledProgress && progress! >= 1\n ? 'onTransitionEnd'\n : 'onAnimationEnd']:\n controlledProgress && progress! < 1\n ? null\n : () => {\n isIn && closeToast();\n }\n };\n\n // TODO: add aria-valuenow, aria-valuemax, aria-valuemin\n\n return (\n \n );\n}\n\nProgressBar.defaultProps = {\n type: TYPE.DEFAULT,\n hide: false\n};\n","import * as React from 'react';\n\nimport { Theme, TypeOptions } from '../types';\nimport { Default } from '../utils';\n\n/**\n * Used when providing custom icon\n */\nexport interface IconProps {\n theme: Theme;\n type: TypeOptions;\n}\n\nexport type BuiltInIconProps = React.SVGProps & IconProps;\n\nconst Svg: React.FC = ({ theme, type, ...rest }) => (\n \n);\n\nfunction Warning(props: BuiltInIconProps) {\n return (\n \n \n \n );\n}\n\nfunction Info(props: BuiltInIconProps) {\n return (\n \n \n \n );\n}\n\nfunction Success(props: BuiltInIconProps) {\n return (\n \n \n \n );\n}\n\nfunction Error(props: BuiltInIconProps) {\n return (\n \n \n \n );\n}\n\nfunction Spinner() {\n return
    ;\n}\n\nexport const Icons = {\n info: Info,\n warning: Warning,\n success: Success,\n error: Error,\n spinner: Spinner\n};\n","import * as React from 'react';\nimport cx from 'clsx';\n\nimport { ProgressBar } from './ProgressBar';\nimport { Icons } from './Icons';\nimport { ToastProps } from '../types';\nimport { Default, isFn, isStr } from '../utils';\nimport { useToast } from '../hooks';\n\nexport const Toast: React.FC = props => {\n const {\n isRunning,\n preventExitTransition,\n toastRef,\n eventHandlers\n } = useToast(props);\n const {\n closeButton,\n children,\n autoClose,\n onClick,\n type,\n hideProgressBar,\n closeToast,\n transition: Transition,\n position,\n className,\n style,\n bodyClassName,\n bodyStyle,\n progressClassName,\n progressStyle,\n updateId,\n role,\n progress,\n rtl,\n toastId,\n deleteToast,\n isIn,\n isLoading,\n icon,\n theme\n } = props;\n const defaultClassName = cx(\n `${Default.CSS_NAMESPACE}__toast`,\n `${Default.CSS_NAMESPACE}__toast-theme--${theme}`,\n `${Default.CSS_NAMESPACE}__toast--${type}`,\n {\n [`${Default.CSS_NAMESPACE}__toast--rtl`]: rtl\n }\n );\n const cssClasses = isFn(className)\n ? className({\n rtl,\n position,\n type,\n defaultClassName\n })\n : cx(defaultClassName, className);\n const isProgressControlled = !!progress;\n const maybeIcon = Icons[type as keyof typeof Icons];\n const iconProps = { theme, type };\n let Icon: React.ReactNode = maybeIcon && maybeIcon(iconProps);\n\n if (icon === false) {\n Icon = void 0;\n } else if (isFn(icon)) {\n Icon = icon(iconProps);\n } else if (React.isValidElement(icon)) {\n Icon = React.cloneElement(icon, iconProps);\n } else if (isStr(icon)) {\n Icon = icon;\n } else if (isLoading) {\n Icon = Icons.spinner();\n }\n\n function renderCloseButton(closeButton: any) {\n if (!closeButton) return;\n\n const props = { closeToast, type, theme };\n\n if (isFn(closeButton)) return closeButton(props);\n\n if (React.isValidElement(closeButton))\n return React.cloneElement(closeButton, props);\n }\n\n return (\n \n \n \n {Icon && (\n \n {Icon}\n
    \n )}\n
    {children}
    \n \n {renderCloseButton(closeButton)}\n {(autoClose || isProgressControlled) && (\n \n )}\n \n \n );\n};\n","import { Default, cssTransition } from '../utils';\n\nconst Bounce = cssTransition({\n enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__bounce-enter`,\n exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__bounce-exit`,\n appendPosition: true\n});\n\nconst Slide = cssTransition({\n enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__slide-enter`,\n exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__slide-exit`,\n appendPosition: true\n});\n\nconst Zoom = cssTransition({\n enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__zoom-enter`,\n exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__zoom-exit`\n});\n\nconst Flip = cssTransition({\n enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__flip-enter`,\n exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__flip-exit`\n});\n\nexport { Bounce, Slide, Zoom, Flip };\n","import * as React from 'react';\nimport cx from 'clsx';\n\nimport { Toast } from './Toast';\nimport { CloseButton } from './CloseButton';\nimport { Bounce } from './Transitions';\nimport { POSITION, Direction, Default, parseClassName, isFn } from '../utils';\nimport { useToastContainer } from '../hooks';\nimport { ToastContainerProps, ToastPosition } from '../types';\n\nexport const ToastContainer: React.FC = props => {\n const { getToastToRender, containerRef, isToastActive } = useToastContainer(\n props\n );\n const { className, style, rtl, containerId } = props;\n\n function getClassName(position: ToastPosition) {\n const defaultClassName = cx(\n `${Default.CSS_NAMESPACE}__toast-container`,\n `${Default.CSS_NAMESPACE}__toast-container--${position}`,\n { [`${Default.CSS_NAMESPACE}__toast-container--rtl`]: rtl }\n );\n return isFn(className)\n ? className({\n position,\n rtl,\n defaultClassName\n })\n : cx(defaultClassName, parseClassName(className));\n }\n\n return (\n \n {getToastToRender((position, toastList) => {\n const containerStyle: React.CSSProperties = !toastList.length\n ? { ...style, pointerEvents: 'none' }\n : { ...style };\n\n return (\n \n {toastList.map(({ content, props: toastProps }) => {\n return (\n \n {content}\n \n );\n })}\n \n );\n })}\n \n );\n};\n\nToastContainer.defaultProps = {\n position: POSITION.TOP_RIGHT as ToastPosition,\n transition: Bounce,\n rtl: false,\n autoClose: 5000,\n hideProgressBar: false,\n closeButton: CloseButton,\n pauseOnHover: true,\n pauseOnFocusLoss: true,\n closeOnClick: true,\n newestOnTop: false,\n draggable: true,\n draggablePercent: Default.DRAGGABLE_PERCENT as number,\n draggableDirection: Direction.X,\n role: 'alert',\n theme: 'light'\n};\n","import * as React from 'react';\nimport { render } from 'react-dom';\n\nimport { POSITION, TYPE, canUseDom, isStr, isNum, isFn } from '../utils';\nimport { eventManager, OnChangeCallback, Event } from './eventManager';\nimport {\n ToastContent,\n ToastOptions,\n ToastProps,\n Id,\n ToastContainerProps,\n UpdateOptions,\n ClearWaitingQueueParams,\n NotValidatedToastProps,\n TypeOptions\n} from '../types';\nimport { ContainerInstance } from '../hooks';\nimport { ToastContainer } from '../components';\n\ninterface EnqueuedToast {\n content: ToastContent;\n options: NotValidatedToastProps;\n}\n\nlet containers = new Map();\nlet latestInstance: ContainerInstance | Id;\nlet containerDomNode: HTMLElement;\nlet containerConfig: ToastContainerProps;\nlet queue: EnqueuedToast[] = [];\nlet lazy = false;\n\n/**\n * Get the toast by id, given it's in the DOM, otherwise returns null\n */\nfunction getToast(toastId: Id, { containerId }: ToastOptions) {\n const container = containers.get(containerId || latestInstance);\n if (!container) return null;\n\n return container.getToast(toastId);\n}\n\n/**\n * Generate a random toastId\n */\nfunction generateToastId() {\n return Math.random()\n .toString(36)\n .substring(2, 9);\n}\n\n/**\n * Generate a toastId or use the one provided\n */\nfunction getToastId(options?: ToastOptions) {\n if (options && (isStr(options.toastId) || isNum(options.toastId))) {\n return options.toastId;\n }\n\n return generateToastId();\n}\n\n/**\n * If the container is not mounted, the toast is enqueued and\n * the container lazy mounted\n */\nfunction dispatchToast(\n content: ToastContent,\n options: NotValidatedToastProps\n): Id {\n if (containers.size > 0) {\n eventManager.emit(Event.Show, content, options);\n } else {\n queue.push({ content, options });\n if (lazy && canUseDom) {\n lazy = false;\n containerDomNode = document.createElement('div');\n document.body.appendChild(containerDomNode);\n render(, containerDomNode);\n }\n }\n\n return options.toastId;\n}\n\n/**\n * Merge provided options with the defaults settings and generate the toastId\n */\nfunction mergeOptions(type: string, options?: ToastOptions) {\n return {\n ...options,\n type: (options && options.type) || type,\n toastId: getToastId(options)\n } as NotValidatedToastProps;\n}\n\nfunction createToastByType(type: string) {\n return (content: ToastContent, options?: ToastOptions) =>\n dispatchToast(content, mergeOptions(type, options));\n}\n\nfunction toast(content: ToastContent, options?: ToastOptions) {\n return dispatchToast(content, mergeOptions(TYPE.DEFAULT, options));\n}\n\ntoast.loading = (content: ToastContent, options?: ToastOptions) =>\n dispatchToast(\n content,\n mergeOptions(TYPE.DEFAULT, {\n isLoading: true,\n autoClose: false,\n closeOnClick: false,\n closeButton: false,\n draggable: false,\n ...options\n })\n );\n\nexport interface ToastPromiseParams {\n pending?: string | UpdateOptions;\n success?: string | UpdateOptions;\n error?: string | UpdateOptions;\n}\n\nfunction handlePromise(\n promise: Promise | (() => Promise),\n { pending, error, success }: ToastPromiseParams,\n options?: ToastOptions\n) {\n let id: Id;\n\n if (pending) {\n id = isStr(pending)\n ? toast.loading(pending, options)\n : toast.loading(pending.render, {\n ...options,\n ...(pending as ToastOptions)\n });\n }\n\n const resetParams = {\n isLoading: null,\n autoClose: null,\n closeOnClick: null,\n closeButton: null,\n draggable: null\n };\n\n const resolver = (\n type: TypeOptions,\n input: string | UpdateOptions | undefined,\n result: T\n ) => {\n // Remove the toast if the input has not been provided. This prevents the toast from hanging\n // in the pending state if a success/error toast has not been provided.\n if (input == null) {\n toast.dismiss(id);\n return;\n }\n\n const baseParams = {\n type,\n ...resetParams,\n ...options,\n data: result\n };\n const params = isStr(input) ? { render: input } : input;\n\n // if the id is set we know that it's an update\n if (id) {\n toast.update(id, {\n ...baseParams,\n ...params\n });\n } else {\n // using toast.promise without loading\n toast(params.render, {\n ...baseParams,\n ...params\n } as ToastOptions);\n }\n\n return result;\n };\n\n const p = isFn(promise) ? promise() : promise;\n\n //call the resolvers only when needed\n p.then(result => resolver('success', success, result)).catch(err =>\n resolver('error', error, err)\n );\n\n return p;\n}\n\ntoast.promise = handlePromise;\ntoast.success = createToastByType(TYPE.SUCCESS);\ntoast.info = createToastByType(TYPE.INFO);\ntoast.error = createToastByType(TYPE.ERROR);\ntoast.warning = createToastByType(TYPE.WARNING);\ntoast.warn = toast.warning;\ntoast.dark = (content: ToastContent, options?: ToastOptions) =>\n dispatchToast(\n content,\n mergeOptions(TYPE.DEFAULT, {\n theme: 'dark',\n ...options\n })\n );\n\n/**\n * Remove toast programmaticaly\n */\ntoast.dismiss = (id?: Id) => eventManager.emit(Event.Clear, id);\n\n/**\n * Clear waiting queue when limit is used\n */\ntoast.clearWaitingQueue = (params: ClearWaitingQueueParams = {}) =>\n eventManager.emit(Event.ClearWaitingQueue, params);\n\n/**\n * return true if one container is displaying the toast\n */\ntoast.isActive = (id: Id) => {\n let isToastActive = false;\n\n containers.forEach(container => {\n if (container.isToastActive && container.isToastActive(id)) {\n isToastActive = true;\n }\n });\n\n return isToastActive;\n};\n\ntoast.update = (toastId: Id, options: UpdateOptions = {}) => {\n // if you call toast and toast.update directly nothing will be displayed\n // this is why I defered the update\n setTimeout(() => {\n const toast = getToast(toastId, options as ToastOptions);\n if (toast) {\n const { props: oldOptions, content: oldContent } = toast;\n\n const nextOptions = {\n ...oldOptions,\n ...options,\n toastId: options.toastId || toastId,\n updateId: generateToastId()\n } as ToastProps & UpdateOptions;\n\n if (nextOptions.toastId !== toastId) nextOptions.staleId = toastId;\n\n const content = nextOptions.render || oldContent;\n delete nextOptions.render;\n\n dispatchToast(content, nextOptions);\n }\n }, 0);\n};\n\n/**\n * Used for controlled progress bar.\n */\ntoast.done = (id: Id) => {\n toast.update(id, {\n progress: 1\n });\n};\n\n/**\n * Track changes. The callback get the number of toast displayed\n *\n */\ntoast.onChange = (callback: OnChangeCallback) => {\n if (isFn(callback)) {\n eventManager.on(Event.Change, callback);\n }\n return () => {\n isFn(callback) && eventManager.off(Event.Change, callback);\n };\n};\n\n/**\n * Configure the ToastContainer when lazy mounted\n * Prefer ToastContainer over this one\n */\ntoast.configure = (config: ToastContainerProps = {}) => {\n lazy = true;\n containerConfig = config;\n};\n\ntoast.POSITION = POSITION;\ntoast.TYPE = TYPE;\n\n/**\n * Wait until the ToastContainer is mounted to dispatch the toast\n * and attach isActive method\n */\neventManager\n .on(Event.DidMount, (containerInstance: ContainerInstance) => {\n latestInstance = containerInstance.containerId || containerInstance;\n containers.set(latestInstance, containerInstance);\n\n queue.forEach(item => {\n eventManager.emit(Event.Show, item.content, item.options);\n });\n\n queue = [];\n })\n .on(Event.WillUnmount, (containerInstance: ContainerInstance) => {\n containers.delete(containerInstance.containerId || containerInstance);\n\n if (containers.size === 0) {\n eventManager\n .off(Event.Show)\n .off(Event.Clear)\n .off(Event.ClearWaitingQueue);\n }\n\n if (canUseDom && containerDomNode) {\n document.body.removeChild(containerDomNode);\n }\n });\n\nexport { toast };\n","import React, { useEffect, useState } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { toast, ToastContainer } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport { unSetErrorHandler } from \"../../store/actions/actionHandlers/errorActionHandler\";\r\nimport { errorTypes } from \"../../utils/errorTypes\";\r\n\r\nconst ToastError = () => {\r\n const dispatch = useDispatch();\r\n const errorState = useSelector((state) => state.errorReducer);\r\n\r\n const { error, errorType, isError, closeTimer } = errorState;\r\n\r\n const { SUCCESS, FAIL, WARN } = errorTypes;\r\n\r\n const arabicLanguage = localStorage.getItem(\"languageTerm\");\r\n\r\n useEffect(() => {\r\n if (isError) {\r\n if (errorType === SUCCESS) {\r\n toast.success(error);\r\n } else if (errorType === WARN) {\r\n toast.warn(error);\r\n } else if (errorType === FAIL) {\r\n toast.error(error);\r\n }\r\n const timer = setTimeout(() => {\r\n dispatch(unSetErrorHandler());\r\n }, 3500);\r\n return () => clearTimeout(timer);\r\n }\r\n }, [dispatch, isError, error, errorType, FAIL, WARN, SUCCESS]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ToastError;\r\n","import { useEffect } from \"react\";\r\nimport { useLocation } from \"react-router-dom\";\r\n\r\nexport default function ScrollToTop() {\r\n const { pathname } = useLocation();\r\n\r\n useEffect(() => {\r\n window.scrollTo({ top: 0, left: 0, behavior: \"smooth\" });\r\n }, [pathname]);\r\n\r\n return null;\r\n}\r\n","// import { getToken } from \"./adalConfig\";\r\n\r\nconst getTokenFromLocal = () => {\r\n // let headers = localStorage.getItem(\"headers\");\r\n // if (!headers?.TenantSlugName) {\r\n // let headers = {\r\n // \"Content-Type\": \"application/json\",\r\n // TenantSlugName: localStorage.getItem(\"tenantName\"),\r\n // Authorization: \"bearer \" + getToken(),\r\n // };\r\n // localStorage.setItem(\"headers\", JSON.stringify(headers));\r\n // }\r\n\r\n let token = localStorage.getItem(\"token\");\r\n if (!token) {\r\n return false;\r\n }\r\n return token;\r\n};\r\n\r\nexport default getTokenFromLocal;\r\n","import React from \"react\";\r\nimport { Outlet, Navigate, useLocation } from \"react-router-dom\";\r\nimport getTokenFromLocal from \"../utils/getToken\";\r\n\r\nconst ProtectedRoute = () => {\r\n let location = useLocation();\r\n let token = getTokenFromLocal();\r\n return token ? : ;\r\n};\r\n\r\nexport default ProtectedRoute;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"sessionExpiredModal\":\"SessionExpiredModal_sessionExpiredModal__OgrGq\",\"sessionExpiredModal__subHeader\":\"SessionExpiredModal_sessionExpiredModal__subHeader__NhCRt\",\"sessionExpiredModal__buttonContainer\":\"SessionExpiredModal_sessionExpiredModal__buttonContainer__FqYz+\",\"sessionExpiredModal__buttonContainer__secondaryThemeButton\":\"SessionExpiredModal_sessionExpiredModal__buttonContainer__secondaryThemeButton__7E-Su\",\"sessionExpiredModal__buttonContainer__primaryThemeButton\":\"SessionExpiredModal_sessionExpiredModal__buttonContainer__primaryThemeButton__5Jo7y\"};","import React from \"react\";\r\nimport Button from \"../Button/Button\";\r\nimport classes from \"./SessionExpiredModal.module.scss\";\r\nconst SessionExpiredModal = ({ closeModal }) => {\r\n return (\r\n
    \r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n
    \r\n
    \r\n
    \r\n
    \r\n Your session has expired.\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default SessionExpiredModal;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"extendTimer\":\"ExtendTimerModal_extendTimer__I6p3C\",\"extendTimer__subHeader\":\"ExtendTimerModal_extendTimer__subHeader__eVYP3\",\"extendTimer__buttonContainer\":\"ExtendTimerModal_extendTimer__buttonContainer__r+HDO\",\"extendTimer__buttonContainer__logoutLink\":\"ExtendTimerModal_extendTimer__buttonContainer__logoutLink__M117S\",\"extendTimer__buttonContainer__primaryThemeButton\":\"ExtendTimerModal_extendTimer__buttonContainer__primaryThemeButton__yfHIG\"};","import React from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useLocation, useNavigate } from \"react-router\";\r\nimport { resetTimerAction } from \"../../../store/actions/actionCreators/homeActionCreator\";\r\nimport {\r\n getLastLoginTimeHandler,\r\n logoutHandler,\r\n} from \"../../../store/actions/actionHandlers/loginActionHandler\";\r\nimport { postVQAssessScore } from \"../../../store/actions/actionHandlers/quizActionHandler\";\r\nimport { convertToMillisec } from \"../../../utils/commonQuizFunction\";\r\nimport Button from \"../Button/Button\";\r\nimport classes from \"./ExtendTimerModal.module.scss\";\r\nconst ExtendTimerModal = ({\r\n closeModal,\r\n minutes,\r\n seconds,\r\n sessionTime,\r\n warningTime,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n const quizState = useSelector((state) => state.quizReducer);\r\n const { quizData, virtualQuizData } = quizState;\r\n\r\n const userScoreObjCreation = (IsSubmitted, IsUserAssessmentSuccess) => {\r\n console.log('inside----------')\r\n const totalQDuration = convertToMillisec();\r\n const { ShotClassId, VirtualOrLiveQuizEventId } = quizData;\r\n let UserQuestionResponse = [];\r\n virtualQuizData.AssessmentSet.QuestionList.forEach((ques) => {\r\n let optionId, IsRightAnswer;\r\n ques.ChoiceList.forEach((option) => {\r\n if (\r\n option.Isselected === true ||\r\n option.IsselectedByUserInResonse === true\r\n ) {\r\n optionId = option.ID;\r\n if (option.IsAnswer === true) {\r\n IsRightAnswer = true;\r\n } else {\r\n IsRightAnswer = false;\r\n }\r\n }\r\n });\r\n UserQuestionResponse.push({\r\n QuestionId: ques.ID,\r\n ChoiceId: optionId,\r\n IsRightAnswer: IsRightAnswer,\r\n });\r\n });\r\n return {\r\n ClassId: parseInt(ShotClassId),\r\n ClassName: virtualQuizData.Name,\r\n CourseCompletionDuration: totalQDuration,\r\n IsQuizSubmitForLiveOrVirtualEvent: IsSubmitted,\r\n IsUserAssessmentSuccess: IsUserAssessmentSuccess,\r\n Score: 0,\r\n TotalCACount: 0,\r\n UserQuestionResponse: UserQuestionResponse,\r\n VirtualOrLiveQuizEventId: VirtualOrLiveQuizEventId,\r\n };\r\n};\r\n return (\r\n
    \r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n
    \r\n
    \r\n
    \r\n
    \r\n Your session will expire in:{\" \"}\r\n {minutes < sessionTime\r\n ? sessionTime - 1 - minutes < 10\r\n ? \"0\" + (sessionTime - 1 - minutes).toString()\r\n : sessionTime - 1 - minutes\r\n : \"00\"}\r\n :\r\n {minutes >= sessionTime && seconds > 0\r\n ? \"00\"\r\n : 60 - seconds < 10\r\n ? \"0\" + (60 - seconds).toString()\r\n : 60 - seconds}\r\n
    \r\n
    \r\n {\r\n dispatch(resetTimerAction());\r\n dispatch(getLastLoginTimeHandler(navigate, true));\r\n closeModal();\r\n }}\r\n type=\"submit\"\r\n label=\"Extend\"\r\n className={\r\n classes.extendTimer__buttonContainer__primaryThemeButton\r\n }\r\n />\r\n {\r\n if(location.pathname === \"/quiz/virtualquiz\" ||\r\n location.pathname.includes(\"virtualquiz\")){\r\n const userScoreObj = userScoreObjCreation(false, false);\r\n dispatch(postVQAssessScore(userScoreObj, userScoreObj.ClassId));\r\n }\r\n dispatch(logoutHandler(navigate));\r\n closeModal();\r\n }}\r\n className={classes.extendTimer__buttonContainer__logoutLink}\r\n >\r\n Logout\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ExtendTimerModal;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useLocation, useNavigate } from \"react-router\";\r\nimport { logoutHandler } from \"../../../store/actions/actionHandlers/loginActionHandler\";\r\nimport { fetchInterceptor } from \"../../../utils/fetchInterceptor\";\r\nimport getTokenFromLocal from \"../../../utils/getToken\";\r\nimport SessionExpiredModal from \"../SessionExpiredModal/SessionExpiredModal\";\r\nimport ExtendTimerModal from \"./ExtendTimerModal\";\r\n\r\nconst ExtendTimer = () => {\r\n const dispatch = useDispatch();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n const sessionTime = 20; //2\r\n const warningTime = 18; //0\r\n\r\n const [timer, setTimer] = useState({ minutes: 0, seconds: 0 });\r\n const [extendModal, setExtendModal] = useState(false);\r\n const [sessionExpiredModal, setSessionExpiredModal] = useState(false);\r\n\r\n const homeState = useSelector((state) => state.homeReducer);\r\n const { resetTimer } = homeState;\r\n let token = getTokenFromLocal();\r\n\r\n // useEffect(() => {\r\n // if (location.pathname === \"/\" || location.pathname === \"/login\") {\r\n // setExtendModal(false);\r\n // }\r\n // }, [location]);\r\n\r\n useEffect(() => {\r\n fetchInterceptor(dispatch);\r\n }, [dispatch]);\r\n\r\n useEffect(() => {\r\n const timer = setInterval(() => {\r\n if (resetTimer && token) {\r\n const total = new Date() - resetTimer;\r\n const second = Math.floor((total / 1000) % 60);\r\n const minute = Math.floor((total / 1000 / 60) % 60);\r\n setTimer({ minutes: minute, seconds: second });\r\n if (minute >= warningTime && minute < sessionTime) {\r\n setExtendModal(true);\r\n } else if (minute >= sessionTime) {\r\n setExtendModal(false);\r\n dispatch(logoutHandler(navigate));\r\n setSessionExpiredModal(true);\r\n } else if (extendModal === true || sessionExpiredModal === true) {\r\n setExtendModal(false);\r\n setSessionExpiredModal(false);\r\n }\r\n } else if (extendModal === true) {\r\n setExtendModal(false);\r\n }\r\n }, 1000);\r\n return () => clearInterval(timer);\r\n }, [\r\n dispatch,\r\n extendModal,\r\n sessionExpiredModal,\r\n location.pathname,\r\n resetTimer,\r\n token,\r\n ]);\r\n // console.log(19 - timer.minutes, 60 - timer.seconds);\r\n const toggleExtendModal = () => {\r\n setExtendModal(!extendModal);\r\n };\r\n const toggleSessionExpiredModal = () => {\r\n setSessionExpiredModal(!sessionExpiredModal);\r\n };\r\n\r\n return (\r\n <>\r\n {/*
    \r\n {timer.minutes < 20 ? 19 - timer.minutes : 0} :{\" \"}\r\n {timer.minutes >= 20 && timer.seconds > 0 ? 0 : 60 - timer.seconds}\r\n
    */}\r\n {extendModal && (\r\n \r\n )}\r\n {sessionExpiredModal && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ExtendTimer;\r\n","import fetchIntercept from \"fetch-intercept\";\r\nimport { resetTimerAction } from \"../store/actions/actionCreators/homeActionCreator\";\r\n\r\nexport const fetchInterceptor = (dispatch) => {\r\n fetchIntercept.register({\r\n request: function (url, config) {\r\n return [url, config];\r\n },\r\n\r\n requestError: function (error) {\r\n // Called when an error occured during another 'request' interceptor call\r\n return Promise.reject(error);\r\n },\r\n\r\n response: function (response) {\r\n // Modify the reponse object\r\n dispatch(resetTimerAction());\r\n return response;\r\n },\r\n\r\n responseError: function (error) {\r\n // Handle an fetch error\r\n return Promise.reject(error);\r\n },\r\n });\r\n};\r\n","import React from \"react\";\r\n\r\nconst NoInternetFound = ({ fill }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n Oh!\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default NoInternetFound;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"noInternetPageHide\":\"NoInternetPage_noInternetPageHide__mhWd5\",\"noInternetPage\":\"NoInternetPage_noInternetPage__fRutq\",\"noInternetPage__main\":\"NoInternetPage_noInternetPage__main__Xd2EA\",\"noInternetPage__main__errorMessage\":\"NoInternetPage_noInternetPage__main__errorMessage__KNq1a\"};","import React, { useEffect, useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport NoInternetFound from \"../../components/CustomSvgIcons/NoInternetFound\";\r\nimport classes from \"./NoInternetPage.module.scss\";\r\nconst NoInternetPage = () => {\r\n const homeState = useSelector((state) => state.homeReducer);\r\n const { themeStyles } = homeState;\r\n\r\n // const [visible, setVisible] = useState(false);\r\n\r\n // const showVisible = () => {\r\n // setVisible(true);\r\n // };\r\n // const hideVisible = () => {\r\n // setVisible(false);\r\n // };\r\n // useEffect(() => {\r\n // window.addEventListener(\"offline\", showVisible);\r\n\r\n // window.addEventListener(\"online\", hideVisible);\r\n\r\n // return () => {\r\n // window.removeEventListener(\"offline\", showVisible);\r\n // window.removeEventListener(\"online\", hideVisible);\r\n // };\r\n // }, []);\r\n\r\n return (\r\n \r\n
    \r\n \r\n
    \r\n No Internet Connection\r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default NoInternetPage;\r\n","import React, { useEffect, useState, lazy, Suspense } from \"react\";\r\nimport { BrowserRouter as Router, Routes, Route } from \"react-router-dom\";\r\nimport ScrollToTop from \"./ScrollToTop\";\r\nimport ProtectedRoute from \"../../hoc/ProtectedRoute\";\r\nimport ExtendTimer from \"../../components/CommonComponents/ExtendTimerModal/ExtendTimer\";\r\nimport HomeFooterContainer from \"../../containers/HomeContainers/HomeFooterContainer/HomeFooterContainer\";\r\nimport PageLoader from \"../../components/CommonComponents/PageLoader/PageLoader\";\r\nimport NoInternetPage from \"../NoInternetPage/NoInternetPage\";\r\nimport PollResults from \"../ConnectPage/PollPage/PollResults/PollResults\";\r\n// import UnderMaintenance from \"../UnderMaintenance/UnderMaintenance\";\r\n\r\nconst AccountPage = lazy(() => import(\"../AccountPage/AccountPage\"));\r\nconst CheckTenantPage = lazy(() =>\r\n import(\"../CheckTenantPage/CheckTenantPage\")\r\n);\r\nconst ConnectPage = lazy(() => import(\"../ConnectPage/ConnectPage\"));\r\nconst ForumPage = lazy(() => import(\"../ConnectPage/ForumPage/ForumPage\"));\r\nconst PollPage = lazy(() => import(\"../ConnectPage/PollPage/PollPage\"));\r\nconst PollAttempt = lazy(() =>\r\n import(\"../ConnectPage/PollPage/PollAttempt/PollAttempt\")\r\n);\r\nconst GeneralQueryPage = lazy(() =>\r\n import(\"../ConnectPage/GeneralQueriesPage/GeneralQueriesPage\")\r\n);\r\nconst ContributePage = lazy(() => import(\"../ContributePage/ContributePage\"));\r\nconst OverviewPage = lazy(() =>\r\n import(\"../ContributePage/OverviewPage/OverviewPage\")\r\n);\r\nconst HomePage = lazy(() => import(\"../HomePage/HomePage\"));\r\nconst LoginPage = lazy(() => import(\"../LoginPage/LoginPage\"));\r\nconst MyFavoritesPage = lazy(() =>\r\n import(\"../MyFavoritesPage/MyFavoritesPage\")\r\n);\r\nconst PreLoginPage = lazy(() => import(\"../PreLoginPage/PreLoginPage\"));\r\nconst QuizPage = lazy(() => import(\"../QuizPage/QuizPage\"));\r\nconst SeriesPage = lazy(() => import(\"../SeriesPage/SeriesPage\"));\r\nconst ShotclassCoursePage = lazy(() =>\r\n import(\"../ShotclassCoursePage/ShotclassCoursePage\")\r\n);\r\nconst GroupTopicsPage = lazy(() => import(\"../TopicsPage/GroupTopicsPage\"));\r\nconst TopicDescription = lazy(() =>\r\n import(\"../ConnectPage/ForumPage/TopicDescription/TopicDescription\")\r\n);\r\nconst AADLoginPage = lazy(() => import(\"../AADLoginPage/AADLoginPage\"));\r\nconst ConfirmPasswordPage = lazy(() =>\r\n import(\"../ChangePasswordPage/ConfirmPasswordPage\")\r\n);\r\nconst PrivacyPolicypage = lazy(() =>\r\n import(\"../PrivacyPolicyPage/PrivacyPolicyPage\")\r\n);\r\nconst CreditPage = lazy(() =>\r\n import(\"../../../src/views/CreditPage/CreditPage\")\r\n);\r\nconst NotificationsPage = lazy(() =>\r\n import(\"../AccountPage/NotificationsPage/NotificationsPage\")\r\n);\r\nconst SkillsPage = lazy(() => import(\"../AccountPage/SkillsPage/SkillsPage\"));\r\nconst MyAccountPage = lazy(() =>\r\n import(\"../AccountPage/MyAccountsPage/MyAccountPage\")\r\n);\r\nconst NoPageFoundPage = lazy(() =>\r\n import(\"../NoPageFoundPage/NoPageFoundPage\")\r\n);\r\nconst RelatedSeriesPage = lazy(() =>\r\n import(\"../SeriesPage/RelatedSeriesPage/RelatedSeriesPage\")\r\n);\r\nconst GlobalSearchPage = lazy(() =>\r\n import(\"../GlobalSearchPage/GlobalSearchPage\")\r\n);\r\nconst TopicsPage = lazy(() => import(\"../TopicsPage/TopicsPage/TopicsPage\"));\r\nconst TopicDetailsPage = lazy(() =>\r\n import(\"../TopicsPage/TopicDetailsPage/TopicDetailsPage\")\r\n);\r\nconst ContactUsPage = lazy(() => import(\"../ContactUsPage/ContactUsPage\"));\r\nconst VirtualQuizPage = lazy(() =>\r\n import(\"../QuizPage/VirtualQuizPage/VirtualQuizPage\")\r\n);\r\nconst LiveQuizPage = lazy(() =>\r\n import(\"../QuizPage/LiveQuizPage/LiveQuizPage\")\r\n);\r\nconst RootRoute = () => {\r\n const [visible, setVisible] = useState(false);\r\n\r\n const showVisible = () => {\r\n setVisible(true);\r\n };\r\n const hideVisible = () => {\r\n setVisible(false);\r\n };\r\n useEffect(() => {\r\n window.addEventListener(\"offline\", showVisible);\r\n\r\n window.addEventListener(\"online\", hideVisible);\r\n\r\n return () => {\r\n window.removeEventListener(\"offline\", showVisible);\r\n window.removeEventListener(\"online\", hideVisible);\r\n };\r\n }, []);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n }>\r\n {visible && }\r\n \r\n } />\r\n } />\r\n } />\r\n } />\r\n }>\r\n } />\r\n \r\n }>\r\n }\r\n />\r\n }\r\n />\r\n \r\n }>\r\n } />\r\n } />\r\n } />\r\n \r\n\r\n }>\r\n } />\r\n } />\r\n }\r\n />\r\n }\r\n />\r\n }\r\n />\r\n }\r\n />\r\n \r\n }>\r\n } />\r\n }\r\n />\r\n } />\r\n } />\r\n } />\r\n } />\r\n \r\n }>\r\n } />\r\n } />\r\n \r\n }>\r\n } />\r\n \r\n }>\r\n } />\r\n } />\r\n } />\r\n \r\n }>\r\n } />\r\n \r\n }\r\n />\r\n }\r\n />}\r\n />\r\n }\r\n />\r\n \r\n }>\r\n } />\r\n }\r\n />\r\n }\r\n />\r\n }\r\n />\r\n }\r\n />\r\n }\r\n />\r\n } />\r\n \r\n Access Denied} />\r\n } />\r\n {/* } /> */}\r\n }>\r\n }\r\n />\r\n \r\n }>\r\n }\r\n />\r\n \r\n\r\n }>\r\n } />\r\n \r\n } />\r\n } />\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default RootRoute;\r\n","export const setLTIThemeStyle = () => async () => {\r\n const tenantName = localStorage.getItem(\"tenantSlugName\");\r\n if (\r\n tenantName !== undefined &&\r\n (tenantName?.toLowerCase() === \"search\" ||\r\n tenantName?.toLowerCase() === \"qaaadsep26\" ||\r\n tenantName?.toLowerCase() === \"ltimindtree\")\r\n ) {\r\n document.getElementsByTagName(\r\n \"body\"\r\n )[0].style.cssText = `font-family: \"Aller\", sans-serif; background-color: #f6f6f6;`;\r\n } else {\r\n document.getElementsByTagName(\"body\")[0].style.fontFamily = \"\";\r\n }\r\n};\r\n","import ToastError from \"./components/ToastError/ToastError\";\r\nimport RootRoute from \"./views/Routes/RootRoute\";\r\nimport \"./App.scss\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { setThemeStylesHandler } from \"./store/actions/actionHandlers/homeActionHandler\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { setLTIThemeStyle } from \"./utils/setLTIThemeStyle\";\r\nimport PageLoader from \"./components/CommonComponents/PageLoader/PageLoader\";\r\nfunction App() {\r\n const dispatch = useDispatch();\r\n const homeState = useSelector((state) => state.homeReducer);\r\n const { themeStyles } = homeState;\r\n const errorState = useSelector((state) => state.errorReducer);\r\n const { loading } = errorState;\r\n const [pageLoaded, setPageLoaded] = useState(false);\r\n\r\n useEffect(() => {\r\n const themeData = JSON.parse(localStorage.getItem(\"themeData\"));\r\n const tenantName = localStorage.getItem(\"tenantSlugName\");\r\n if (!!themeData && !!themeStyles === false) {\r\n dispatch(setThemeStylesHandler());\r\n }\r\n if (tenantName !== undefined) {\r\n dispatch(setLTIThemeStyle());\r\n }\r\n }, [dispatch, themeStyles, setLTIThemeStyle]);\r\n\r\n useEffect(() => {\r\n const ele = document.getElementById(\"page-loader\");\r\n if (ele || !pageLoaded) {\r\n ele.outerHTML = \"\";\r\n setPageLoaded(true);\r\n }\r\n }, [pageLoaded]);\r\n\r\n\r\n useEffect(() => {\r\n const tenantSlugName = localStorage.getItem(\"tenantSlugName\");\r\n let link = document.querySelector('link[rel=\"icon\"]');\r\n if (link && tenantSlugName?.toLowerCase() === \"search\" || link && tenantSlugName?.toLowerCase() === \"qaaadsep26\" || link && tenantSlugName?.toLowerCase() === \"ltimindtree\" || link && tenantSlugName?.toLowerCase() === \"cybersec\") {\r\n link.setAttribute('href', 'lighthouse_favicon_lti.png');\r\n document.title = \"Lighthouse\"\r\n } else {\r\n link.setAttribute('href', 'favicon.ico');\r\n document.title = \"Shotclasses\"\r\n }\r\n\r\n }, [themeStyles]);\r\n return pageLoaded ? (\r\n \r\n \r\n \r\n {loading && }\r\n \r\n ) : null;\r\n}\r\n\r\nexport default App;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n isAuthenticated: false,\r\n user: null,\r\n preLogin: null,\r\n login: null,\r\n lastLoginTime: null,\r\n isLoggingOut: false,\r\n};\r\n\r\nconst loginReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.loginTypes.PRE_LOGIN:\r\n return { ...state, preLogin: payload };\r\n case actionTypes.loginTypes.GET_TENANT_DETAILS:\r\n return { ...state, preLogin: payload };\r\n case actionTypes.loginTypes.LOGIN:\r\n return { ...state, login: payload, isAuthenticated: true };\r\n case actionTypes.loginTypes.LAST_LOGIN_TIME:\r\n return { ...state, lastLoginTime: payload };\r\n case actionTypes.loginTypes.IS_LOGGING_OUT:\r\n return { ...state, isLoggingOut: payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default loginReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n errorType: null,\r\n error: null,\r\n isError: false,\r\n loading: false,\r\n closeTimer: 3000,\r\n};\r\n\r\nconst errorReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n const { errorType, error } = payload || {};\r\n switch (type) {\r\n case actionTypes.errorTypes.SET_ERROR:\r\n return {\r\n ...state,\r\n isError: true,\r\n errorType: errorType,\r\n error: error,\r\n closeTimer: payload?.closeTimer ? payload?.closeTimer : 3000,\r\n };\r\n case actionTypes.errorTypes.UNSET_ERROR:\r\n return {\r\n ...state,\r\n isError: false,\r\n errorType: null,\r\n error: null,\r\n closeTimer: 3000,\r\n };\r\n case actionTypes.errorTypes.SET_LOADING:\r\n return {\r\n ...state,\r\n loading: true,\r\n };\r\n case actionTypes.errorTypes.UNSET_LOADING:\r\n return {\r\n ...state,\r\n loading: false,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default errorReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n profile: null,\r\n isUserExists: false,\r\n isUserActive: false,\r\n isMailSentForForgotPassword: false,\r\n isPasswordResetRequired: false,\r\n isPasswordResetDone: false\r\n};\r\n\r\nconst userReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.userTypes.IS_USER_EXISTS:\r\n return { ...state, isUserExists: payload };\r\n case actionTypes.userTypes.IS_USER_ACTIVE:\r\n return { ...state, isUserActive: payload };\r\n case actionTypes.userTypes.IS_MAIL_SENT_FORGOT_PASSWORD:\r\n return { ...state, isMailSentForForgotPassword: payload };\r\n case actionTypes.userTypes.IS_PASSWORD_RESET_REQUIRED:\r\n return { ...state, isPasswordResetRequired: payload };\r\n case actionTypes.userTypes.GET_USER_PROFILE:\r\n return { ...state, profile: payload };\r\n case actionTypes.userTypes.IS_PASSWORD_RESET_DONE:\r\n return { ...state, isPasswordResetDone: payload };\r\n case actionTypes.userTypes.PUT_EDIT_PROFILE:\r\n return { ...state, profile: payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default userReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\nimport { FormattedMessage } from \"react-intl\";\r\nconst initialState = {\r\n allLanguages: null,\r\n selectedLanguage: \"en\",\r\n notifications: null,\r\n themeStyles: null,\r\n isIterate: true,\r\n resetTimer: new Date(),\r\n isRedirectedToTopics: false,\r\n assignedClasses: null,\r\n assignedClassesDone: false,\r\n assignedClassesCount: 0,\r\n completedClasses: null,\r\n completedClassesDone: false,\r\n completedClassesCount: 0,\r\n trendingClasses: null,\r\n trendingClassesDone: false,\r\n trendingClassesCount: 0,\r\n inProgressClasses: null,\r\n inProgressClassesDone: false,\r\n inProgressClassesCount: 0,\r\n notInProgressClasses: null,\r\n notInProgressClassesDone: false,\r\n notInProgressClassesCount: 0,\r\n assignedSeries: null,\r\n assignedSeriesDone: false,\r\n assignedSeriesCount: 0,\r\n completedSeries: null,\r\n completedSeriesDone: false,\r\n completedSeriesCount: 0,\r\n trendingSeries: null,\r\n trendingSeriesDone: false,\r\n trendingSeriesCount: 0,\r\n inProgressSeries: null,\r\n inProgressSeriesDone: false,\r\n inProgressSeriesCount: 0,\r\n notInProgressSeries: null,\r\n notInProgressSeriesDone: false,\r\n notInProgressSeriesCount: 0,\r\n leaderboardData: null,\r\n TrainingTypes: [],\r\n homeFilter: {\r\n sortBy: [\r\n {\r\n id: 1,\r\n name: \"All\",\r\n isSelected: true,\r\n },\r\n { id: 2, name: \"Name\", isSelected: false },\r\n { id: 3, name: \"Classes\", isSelected: false },\r\n { id: 4, name: \"Series\", isSelected: false },\r\n ],\r\n sortByStatus: [\r\n {\r\n id: 1,\r\n name: \"All Courses\",\r\n isSelected: true,\r\n },\r\n { id: 2, name: \"In-Progress\", isSelected: false },\r\n { id: 3, name: \"Not Started\", isSelected: false },\r\n { id: 4, name: \"Completed\", isSelected: false },\r\n ],\r\n filterByType: [],\r\n },\r\n homeFilterSelected: {\r\n sortBy: \"All\",\r\n sortByStatus: \"All Courses\",\r\n filterByType: \"All\",\r\n },\r\n};\r\n\r\nconst homeReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.homeTypes.GET_ALL_LANGUAGES:\r\n return {\r\n ...state,\r\n allLanguages: payload,\r\n };\r\n case actionTypes.homeTypes.SET_LANGUAGE:\r\n return {\r\n ...state,\r\n selectedLanguage: payload,\r\n };\r\n case actionTypes.homeTypes.GET_NOTIFICATIONS:\r\n return {\r\n ...state,\r\n notifications: payload,\r\n };\r\n case actionTypes.homeTypes.GET_LEADERBOARD:\r\n return {\r\n ...state,\r\n leaderboardData: payload,\r\n };\r\n case actionTypes.homeTypes.SET_THEME_STYLES:\r\n return {\r\n ...state,\r\n themeStyles: payload,\r\n };\r\n case actionTypes.homeTypes.RESET_TIMER:\r\n return {\r\n ...state,\r\n resetTimer: new Date(),\r\n };\r\n case actionTypes.homeTypes.IS_REDIRECTED_TO_TOPICS:\r\n return {\r\n ...state,\r\n isRedirectedToTopics: true,\r\n };\r\n\r\n case actionTypes.homeTypes.GET_ASSIGNED_CLASSES:\r\n return {\r\n ...state,\r\n assignedClasses: payload,\r\n };\r\n case actionTypes.homeTypes.SET_LOADING_ASSIGNED_CLASSES:\r\n return {\r\n ...state,\r\n assignedClassesDone: payload,\r\n };\r\n case actionTypes.homeTypes.GET_ASSIGNED_CLASSES_COUNT:\r\n return {\r\n ...state,\r\n assignedClassesCount: payload,\r\n };\r\n\r\n case actionTypes.homeTypes.GET_COMPLETED_CLASSES:\r\n return {\r\n ...state,\r\n completedClasses: payload,\r\n };\r\n case actionTypes.homeTypes.SET_LOADING_COMPLETED_CLASSES:\r\n return {\r\n ...state,\r\n completedClassesDone: payload,\r\n };\r\n case actionTypes.homeTypes.GET_COMPLETED_CLASSES_COUNT:\r\n return {\r\n ...state,\r\n completedClassesCount: payload,\r\n };\r\n\r\n case actionTypes.homeTypes.GET_TRENDING_CLASSES:\r\n return {\r\n ...state,\r\n trendingClasses: payload,\r\n };\r\n case actionTypes.homeTypes.SET_LOADING_TRENDING_CLASSES:\r\n return {\r\n ...state,\r\n trendingClassesDone: payload,\r\n };\r\n case actionTypes.homeTypes.GET_TRENDING_CLASSES_COUNT:\r\n return {\r\n ...state,\r\n trendingClassesCount: payload,\r\n };\r\n case actionTypes.homeTypes.GET_INPROGRESS_CLASSES:\r\n return {\r\n ...state,\r\n inProgressClasses: payload,\r\n };\r\n case actionTypes.homeTypes.SET_LOADING_INPROGRESS_CLASSES:\r\n return {\r\n ...state,\r\n inProgressClassesDone: payload,\r\n };\r\n case actionTypes.homeTypes.GET_INPROGRESS_CLASSES_COUNT:\r\n return {\r\n ...state,\r\n inProgressClassesCount: payload,\r\n };\r\n\r\n case actionTypes.homeTypes.GET_NOTINPROGRESS_CLASSES:\r\n return {\r\n ...state,\r\n notInProgressClasses: payload,\r\n };\r\n case actionTypes.homeTypes.SET_LOADING_NOTINPROGRESS_CLASSES:\r\n return {\r\n ...state,\r\n notInProgressClassesDone: payload,\r\n };\r\n case actionTypes.homeTypes.GET_NOTINPROGRESS_CLASSES_COUNT:\r\n return {\r\n ...state,\r\n notInProgressClassesCount: payload,\r\n };\r\n\r\n case actionTypes.homeTypes.GET_ASSIGNED_SERIES:\r\n return {\r\n ...state,\r\n assignedSeries: payload,\r\n };\r\n case actionTypes.homeTypes.SET_LOADING_ASSIGNED_SERIES:\r\n return {\r\n ...state,\r\n assignedSeriesDone: payload,\r\n };\r\n case actionTypes.homeTypes.GET_ASSIGNED_SERIES_COUNT:\r\n return {\r\n ...state,\r\n assignedSeriesCount: payload,\r\n };\r\n\r\n case actionTypes.homeTypes.GET_COMPLETED_SERIES:\r\n return {\r\n ...state,\r\n completedSeries: payload,\r\n };\r\n case actionTypes.homeTypes.SET_LOADING_COMPLETED_SERIES:\r\n return {\r\n ...state,\r\n completedSeriesDone: payload,\r\n };\r\n case actionTypes.homeTypes.GET_COMPLETED_SERIES_COUNT:\r\n return {\r\n ...state,\r\n completedSeriesCount: payload,\r\n };\r\n\r\n case actionTypes.homeTypes.GET_TRENDING_SERIES:\r\n return {\r\n ...state,\r\n trendingSeries: payload,\r\n };\r\n case actionTypes.homeTypes.SET_LOADING_TRENDING_SERIES:\r\n return {\r\n ...state,\r\n trendingSeriesDone: payload,\r\n };\r\n case actionTypes.homeTypes.GET_TRENDING_SERIES_COUNT:\r\n return {\r\n ...state,\r\n trendingSeriesCount: payload,\r\n };\r\n\r\n case actionTypes.homeTypes.GET_INPROGRESS_SERIES:\r\n return {\r\n ...state,\r\n inProgressSeries: payload,\r\n };\r\n case actionTypes.homeTypes.SET_LOADING_INPROGRESS_SERIES:\r\n return {\r\n ...state,\r\n inProgressSeriesDone: payload,\r\n };\r\n case actionTypes.homeTypes.GET_INPROGRESS_SERIES_COUNT:\r\n return {\r\n ...state,\r\n inProgressSeriesCount: payload,\r\n };\r\n\r\n case actionTypes.homeTypes.GET_NOTINPROGRESS_SERIES:\r\n return {\r\n ...state,\r\n notInProgressSeries: payload,\r\n };\r\n case actionTypes.homeTypes.SET_LOADING_NOTINPROGRESS_SERIES:\r\n return {\r\n ...state,\r\n notInProgressSeriesDone: payload,\r\n };\r\n case actionTypes.homeTypes.GET_NOTINPROGRESS_SERIES_COUNT:\r\n return {\r\n ...state,\r\n notInProgressSeriesCount: payload,\r\n };\r\n case actionTypes.homeTypes.HOME_GET_TRAININGTYPE:\r\n return {\r\n ...state,\r\n TrainingTypes: payload,\r\n homeFilter: {\r\n ...state.homeFilter,\r\n filterByType: [\r\n {\r\n TypeId: -1,\r\n Name: \"All\",\r\n TenantId: 0,\r\n CanDelete: false,\r\n isSelected: true,\r\n },\r\n ...payload,\r\n ],\r\n },\r\n };\r\n case actionTypes.homeTypes.SET_HOME_FILTER:\r\n return {\r\n ...state,\r\n homeFilter: payload,\r\n };\r\n case actionTypes.homeTypes.SET_HOME_FILTER_SELECTED:\r\n return {\r\n ...state,\r\n homeFilterSelected: payload,\r\n };\r\n case actionTypes.homeTypes.SET_HOME_BANNER_ITERATION:\r\n return {\r\n ...state,\r\n isIterate: payload,\r\n };\r\n case actionTypes.homeTypes.SET_INITIAL_CLASSES_SERIES_STATE:\r\n return {\r\n ...state,\r\n assignedClasses: null,\r\n assignedClassesDone: false,\r\n assignedClassesCount: 0,\r\n completedClasses: null,\r\n completedClassesDone: false,\r\n completedClassesCount: 0,\r\n trendingClasses: null,\r\n trendingClassesDone: false,\r\n trendingClassesCount: 0,\r\n inProgressClasses: null,\r\n inProgressClassesDone: false,\r\n inProgressClassesCount: 0,\r\n notInProgressClasses: null,\r\n notInProgressClassesDone: false,\r\n notInProgressClassesCount: 0,\r\n assignedSeries: null,\r\n assignedSeriesDone: false,\r\n assignedSeriesCount: 0,\r\n completedSeries: null,\r\n completedSeriesDone: false,\r\n completedSeriesCount: 0,\r\n trendingSeries: null,\r\n trendingSeriesDone: false,\r\n trendingSeriesCount: 0,\r\n inProgressSeries: null,\r\n inProgressSeriesDone: false,\r\n inProgressSeriesCount: 0,\r\n notInProgressSeries: null,\r\n notInProgressSeriesDone: false,\r\n notInProgressSeriesCount: 0,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default homeReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n allLanguages: null,\r\n selectedLanguage: \"en\",\r\n notifications: null,\r\n themeStyles: null,\r\n getContributeCount: 0,\r\n getContributeSubmitted: [],\r\n postContribute: [],\r\n postContributeFile:[],\r\n getContributeYoutubeSearch: null,\r\n getContributeYoutubeVideosCount: 0,\r\n getContributeClassDetails:[],\r\n getContributeClassDetailsReducer: null,\r\n getClassAssetId:null,\r\n uploadChunkData:null,\r\n};\r\n\r\nconst contributeReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.homeTypes.GET_ALL_LANGUAGES:\r\n return {\r\n ...state,\r\n allLanguages: payload,\r\n };\r\n case actionTypes.homeTypes.SET_LANGUAGE:\r\n return {\r\n ...state,\r\n selectedLanguage: payload,\r\n };\r\n case actionTypes.homeTypes.GET_NOTIFICATIONS:\r\n return {\r\n ...state,\r\n notifications: payload,\r\n };\r\n case actionTypes.homeTypes.SET_THEME_STYLES:\r\n return {\r\n ...state,\r\n themeStyles: payload,\r\n };\r\n case actionTypes.contributeTypes.GET_CONTRIBUTE_CLASSES_SUBMITTED:\r\n return {\r\n ...state,\r\n getContributeSubmitted: payload,\r\n };\r\n case actionTypes.contributeTypes.POST_CONTRIBUTE_CLASSES:\r\n return {\r\n ...state,\r\n postContribute: payload,\r\n };\r\n case actionTypes.contributeTypes.POST_CONTRIBUTE_FILE_CLASSES:\r\n return {\r\n ...state,\r\n postContributeFile: payload,\r\n };\r\n case actionTypes.contributeTypes.GET_CONTRIBUTE_CLASSES_COUNT:\r\n return {\r\n ...state,\r\n getContributeCount: payload,\r\n };\r\n case actionTypes.contributeTypes.GET_CONTRIBUTE_YOUTUBE_SEARCH:\r\n return {\r\n ...state,\r\n getContributeYoutubeSearch: payload,\r\n };\r\n case actionTypes.contributeTypes.GET_CONTRIBUTE_YOUTUBE_COUNTS:\r\n return {\r\n ...state,\r\n getContributeYoutubeVideosCount: payload,\r\n };\r\n case actionTypes.contributeTypes.GET_CONTRIBUTE_CLASS_DETAILS:\r\n return {\r\n ...state,\r\n getContributeClassDetailsReducer: payload,\r\n };\r\n case actionTypes.contributeTypes.PUT_CONTRIBUTE_VIDEO_DURATION_DONE:\r\n return {\r\n ...state,\r\n putContributeVideoDurationDoneReducer: payload,\r\n };\r\n case actionTypes.contributeTypes.PUT_CONTRIBUTE_VIDEO_URL_DONE:\r\n return {\r\n ...state,\r\n putContributeVideoUrlDoneReducer: payload,\r\n };\r\n case actionTypes.contributeTypes.GET_CONTRIBUTE_ASSET_ID:\r\n return {\r\n ...state,\r\n getClassAssetId: payload,\r\n };\r\n case actionTypes.contributeTypes.UPLOAD_CHUNK:\r\n return {\r\n ...state,\r\n uploadChunkData: payload,\r\n };\r\n \r\n \r\n \r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default contributeReducer;","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n isProductPrivacyEnable: false,\r\n isPrivacyPolicy: false,\r\n getPrivacyPolicyDone: false,\r\n //isPrivacyPolicyAccepted: false,\r\n};\r\n\r\nconst privacyPolicyReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n\r\n switch (type) {\r\n case actionTypes.userTypes.GET_USER_PRIVACY_POLICY:\r\n return {\r\n ...state,\r\n isProductPrivacyEnable: payload.IsProductPrivacyEnable,\r\n isPrivacyPolicy: payload.IsPrivacyPolicy,\r\n getPrivacyPolicyDone: true,\r\n //isPrivacyPolicyAccepted: payload.IsPrivacyPolicyAccepted,\r\n };\r\n case actionTypes.userTypes.SET_INITIAL_PRIVACY_POLICY_STATE:\r\n return {\r\n ...state,\r\n isProductPrivacyEnable: false,\r\n isPrivacyPolicy: false,\r\n getPrivacyPolicyDone: false,\r\n };\r\n\r\n case actionTypes.userTypes.POST_USER_PRIVACY_POLICY:\r\n return {\r\n ...state,\r\n isProductPrivacyEnable: false,\r\n isPrivacyPolicy: false,\r\n // isPrivacyPolicyAccepted: false,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default privacyPolicyReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n generalQueries:[],\r\n forumTopics:[],\r\n forumFollowUnfollow: '',\r\n forumTopicsDetails: [],\r\n forumAddThread: [],\r\n ThreadComments: [],\r\n pollresponse:{}\r\n};\r\n\r\nconst connectReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.API_REQ_STARTED:\r\n return { ...state};\r\n case actionTypes.errorTypes.API_ERROR:\r\n return { ...state,error: payload};\r\n case actionTypes.connectTypes.GET_GENERAL_QUERIES:\r\n return { ...state,generalQueries: payload };\r\n case actionTypes.connectTypes.CONNECT_FORUM_TOPICS:\r\n return { ...state,forumTopics: payload };\r\n case actionTypes.connectTypes.CONNECT_FORUM_TOPICSFOLLOWUNFOLLOW:\r\n return { ...state,forumFollowUnfollow: payload };\r\n case actionTypes.connectTypes.CONNECT_FORUM_TOPICSDETAILS:\r\n return { ...state,forumTopicsDetails: payload };\r\n case actionTypes.connectTypes.CONNECT_FORUM_ADDTHREADS:\r\n return { ...state,forumAddThread: payload };\r\n case actionTypes.connectTypes.CONNECT_FORUM_ADDTHREADSCOMMENTS:\r\n return { ...state,ThreadComments: payload };\r\n case actionTypes.connectTypes.CONNECT_POLL_GETPOLLS:\r\n return { ...state,polls: payload };\r\n case actionTypes.connectTypes.CONNECT_POLL_GETRESPONSE:\r\n return { ...state,pollresponse: payload };\r\n case actionTypes.connectTypes.CONNECT_POLL_POSTUSERPOLLRESPONSE:\r\n return { ...state,postUserPollResponse: payload };\r\n case actionTypes.connectTypes.CONNECT_POLL_ISPOLLAVAILABLE:\r\n return { ...state,PollAvailable: payload };\r\n case actionTypes.connectTypes.CONNECT_POLL_GETPOLLHISTORY:\r\n return { ...state,pollhistory: payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default connectReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n globalSearchText:'',\r\n isAdvanceSearch:false,\r\n isAdvanceSearchLoading:false,\r\n isShowSearchBar:false,\r\n relatedResult: [],\r\n isDropdownText:false,\r\n globalCheckboxes:[],\r\n resultLanguage:'All'\r\n};\r\n\r\nconst commonReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.API_REQ_STARTED:\r\n return { ...state};\r\n case actionTypes.errorTypes.API_ERROR:\r\n return { ...state,error: payload};\r\n case actionTypes.commonTypes.GET_RELATED_RESULT:\r\n return { ...state,relatedResult: payload };\r\n case actionTypes.commonTypes.GLOBAL_SEARCH_TEXT:\r\n return { ...state,globalSearchText: payload };\r\n case actionTypes.commonTypes.TOGGLE_ADVANCE_SEARCH:\r\n return { ...state,isAdvanceSearch: payload };\r\n case actionTypes.commonTypes.TOGGLE_SEARCHBAR:\r\n return { ...state,isShowSearchBar: payload };\r\n case actionTypes.commonTypes.TOGGLE_ADVANCE_SEARCH_LOADING:\r\n return { ...state,isAdvanceSearchLoading: payload };\r\n case actionTypes.commonTypes.DROPDOWN_TEXT_BOOLEAN:\r\n return { ...state,isDropdownText: payload };\r\n case actionTypes.commonTypes.UPDATE_GLOBAL_CHECKBOX:\r\n return { ...state, globalCheckboxes:payload};\r\n case actionTypes.commonTypes.UPDATE_RESULT_LANGUAGE:\r\n return { ...state, resultLanguage:payload};\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default commonReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n globalSearch:[],\r\n didYouMeanSuggestions:[],\r\n searchText:''\r\n};\r\n\r\nconst globalSearchReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.API_REQ_STARTED:\r\n return { ...state,loading:true};\r\n case actionTypes.errorTypes.API_ERROR:\r\n return { ...state,loading:false,error:payload};\r\n case actionTypes.globalSearchTypes.GLOBAL_SEARCH:\r\n return { ...state,loading: false, globalSearch:payload};\r\n case actionTypes.globalSearchTypes.REMOVE_GLOBAL_RESULT:\r\n return { ...state,loading: false, globalSearch:[]};\r\n case actionTypes.globalSearchTypes.UPDATE_DID_YOU_MEAN_SUGGESTIONS:\r\n return { ...state, didYouMeanSuggestions:payload};\r\n case actionTypes.globalSearchTypes.UPDATE_SEARCH_TEXT:\r\n return { ...state, searchText:payload};\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default globalSearchReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n classDetails: null,\r\n currentView: 0,\r\n classTab: null,\r\n classAssetId: null,\r\n classQueries: null,\r\n scormVersion: null,\r\n scormBookmark: null,\r\n postAssessmentScore: null,\r\n videoDurationForLogout: null,\r\n nextClass: null,\r\n nextClassInSeries: null,\r\n relatedClasses: null,\r\n};\r\n\r\nconst classReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.classTypes.GET_CLASS_DETAILS:\r\n return {\r\n ...state,\r\n classDetails: payload,\r\n };\r\n case actionTypes.classTypes.SET_CURRENT_CLASS_VIEW:\r\n return {\r\n ...state,\r\n currentView: payload,\r\n };\r\n case actionTypes.classTypes.GET_CLASS_TAB:\r\n return {\r\n ...state,\r\n classTab: payload,\r\n };\r\n case actionTypes.classTypes.GET_CLASS_ASSET_ID:\r\n return {\r\n ...state,\r\n classAssetId: payload,\r\n };\r\n case actionTypes.classTypes.GET_CLASS_QUERIES:\r\n return {\r\n ...state,\r\n classQueries: payload,\r\n };\r\n case actionTypes.classTypes.GET_SCORM_VERSION:\r\n return {\r\n ...state,\r\n scormVersion: payload,\r\n };\r\n case actionTypes.classTypes.GET_SCORM_BOOKMARK:\r\n return {\r\n ...state,\r\n scormBookmark: payload,\r\n };\r\n case actionTypes.classTypes.UPDATE_VIDEO_DURATION_FOR_LOGOUT:\r\n return {\r\n ...state,\r\n videoDurationForLogout: payload,\r\n };\r\n case actionTypes.classTypes.POST_ASSESSMENT_SCORE:\r\n return {\r\n ...state,\r\n postAssessmentScore: payload,\r\n };\r\n case actionTypes.classTypes.GET_NEXT_CLASS:\r\n return {\r\n ...state,\r\n nextClass: payload,\r\n };\r\n case actionTypes.classTypes.GET_NEXT_CLASS_IN_SERIES:\r\n return {\r\n ...state,\r\n nextClassInSeries: payload,\r\n };\r\n case actionTypes.classTypes.GET_RELATED_CLASSES:\r\n return {\r\n ...state,\r\n relatedClasses: payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default classReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n classesBySeriesId: null,\r\n};\r\n\r\nconst seriesReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.seriesTypes.GET_CLASSES_BY_SERIESID:\r\n return {\r\n ...state,\r\n classesBySeriesId: payload,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default seriesReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n quizData: null,\r\n virtualQuizData: null,\r\n accessScoreData: null,\r\n vqLeaderboardData: null,\r\n vqQnaData: null,\r\n vqCorrectAnswerReport: null,\r\n loading: false,\r\n vQuizStarted: false,\r\n vQuizEnded: false,\r\n endQCounter: 0,\r\n startCounter: 0,\r\n timerdialog: false,\r\n sessiondialog: false,\r\n timerreset: new Date(),\r\n signalRconnection: null,\r\n beginEndLiveQuizQues: null,\r\n liveQuizUserChoiceCount: null,\r\n liveQuizscreenView: null,\r\n unAttemptedQuestionNumber: 1,\r\n answeredCurrentQuestion: false,\r\n liveQuizUserLeaderBoard: null,\r\n normalExit: false,\r\n};\r\n\r\nconst quizReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.quizTypes.VALIDATE_PASSCODE:\r\n return {\r\n ...state,\r\n quizData: payload,\r\n };\r\n case actionTypes.quizTypes.virtualQuiz.FETCH_QUIZ_DETAILS:\r\n return {\r\n ...state,\r\n virtualQuizData: payload,\r\n };\r\n case actionTypes.quizTypes.virtualQuiz.POSTVQASSESSCORE:\r\n return {\r\n ...state,\r\n accessScoreData: payload,\r\n };\r\n case actionTypes.quizTypes.virtualQuiz.FETCH_QUIZ_LEADERBOARD:\r\n return {\r\n ...state,\r\n vqLeaderboardData: payload,\r\n };\r\n case actionTypes.quizTypes.virtualQuiz.FETCH_QUIZ_QNA:\r\n return {\r\n ...state,\r\n vqQnaData: payload,\r\n };\r\n case actionTypes.quizTypes.virtualQuiz.FETCH_QUIZ_CORRECT_ANSWER_REPORT:\r\n return {\r\n ...state,\r\n vqCorrectAnswerReport: payload,\r\n };\r\n case actionTypes.quizTypes.virtualQuiz.timer.VQUIZ_TIMER_STARTED:\r\n return {\r\n ...state,\r\n loading: true,\r\n vQuizStarted: true,\r\n vQuizEnded: false,\r\n startQCounter: 0,\r\n };\r\n case actionTypes.quizTypes.virtualQuiz.timer.VQUIZ_TIMER_ENDED:\r\n return {\r\n ...state,\r\n loading: true,\r\n vQuizStarted: false,\r\n vQuizEnded: true,\r\n endQCounter: 0,\r\n endVQInprogress: false,\r\n };\r\n case actionTypes.quizTypes.virtualQuiz.timer.VQUIZ_TIMER_ENDEDCOUNT:\r\n return {\r\n ...state,\r\n loading: true,\r\n endQCounter: 1,\r\n };\r\n case actionTypes.quizTypes.virtualQuiz.timer.VQUIZ_TIMER_STARTEDCOUNT:\r\n return {\r\n ...state,\r\n loading: true,\r\n startQCounter: 1,\r\n };\r\n case actionTypes.quizTypes.virtualQuiz.timer.SET_TIMER_DIALOG:\r\n return {\r\n ...state,\r\n timerdialog: payload,\r\n };\r\n case actionTypes.quizTypes.virtualQuiz.timer.SET_SESSION_DIALOG:\r\n return {\r\n ...state,\r\n sessiondialog: payload,\r\n };\r\n case actionTypes.quizTypes.liveQuiz.SET_SIGNALR_NAGOTIATE:\r\n return {\r\n ...state,\r\n signalRconnection: payload,\r\n };\r\n case actionTypes.quizTypes.liveQuiz.FETCH_BEGIN_END_LIVE_QUIZ_QUESTION:\r\n return {\r\n ...state,\r\n beginEndLiveQuizQues: payload,\r\n };\r\n case actionTypes.quizTypes.liveQuiz.FETCH_USER_CHOICE_COUNT_LIVE_QUIZ:\r\n return {\r\n ...state,\r\n liveQuizUserChoiceCount: payload,\r\n };\r\n case actionTypes.quizTypes.liveQuiz.SET_LIVE_QUIZ_SCREEN_VIEW:\r\n return {\r\n ...state,\r\n liveQuizscreenView: payload,\r\n };\r\n case actionTypes.quizTypes.virtualQuiz.UNATTEMPTED_QUESTION_NUMBER:\r\n return {\r\n ...state,\r\n unAttemptedQuestionNumber: payload,\r\n };\r\n case actionTypes.quizTypes.liveQuiz.POST_LIVE_QUIZ_ASSESSMENT_SCORE:\r\n return {\r\n ...state,\r\n answeredCurrentQuestion: payload,\r\n };\r\n case actionTypes.quizTypes.liveQuiz.GET_LIVE_QUIZ_USER_LEADERBOARD:\r\n return {\r\n ...state,\r\n liveQuizUserLeaderBoard: payload,\r\n };\r\n case actionTypes.quizTypes.liveQuiz.SET_LIVE_QUIZ_NORMAL_EXIT:\r\n return {\r\n ...state,\r\n normalExit: payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default quizReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n getCreditDetails: null,\r\n creditStateType: 1,\r\n creditFilterType: 1,\r\n};\r\n\r\nconst creditReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.creditTypes.GET_CREDIT_DETAILS:\r\n return {\r\n ...state,\r\n getCreditDetails: payload,\r\n };\r\n\r\n case actionTypes.creditTypes.SET_CREDIT_STATE_TYPE:\r\n return {\r\n ...state,\r\n creditStateType: payload,\r\n };\r\n\r\n case actionTypes.creditTypes.SET_CREDIT_FILTER_TYPE:\r\n return {\r\n ...state,\r\n creditFilterType: payload,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default creditReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n profile: null,\r\n generalQueries: [],\r\n loading: false,\r\n notifications: null,\r\n allNotification: [],\r\n notificationSettings: [],\r\n notify: true,\r\n getConsolidatedReportReducer: [],\r\n getSkilledClassesReducer: [],\r\n getMySkillsReducer: [],\r\n getMyCertificatesReducer: [],\r\n getUserBadgesReducer: [],\r\n};\r\n\r\nconst accountReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n\r\n switch (type) {\r\n case actionTypes.errorTypes.API_ERROR:\r\n return { ...state, loading: false, error: payload };\r\n case actionTypes.notificationTypes.GET_BELL_NOTIFICATIONS:\r\n return { ...state, loading: false, notifications: payload };\r\n case actionTypes.notificationTypes.GET_ALL_BELL_NOTIFICATIONS:\r\n return { ...state, loading: false, allNotification: payload };\r\n case actionTypes.notificationTypes.GET_NOTIFICATION_SETTINGS:\r\n return { ...state, notificationSettings: payload };\r\n case actionTypes.notificationTypes.POST_NOTIFICATION_SETTINGS:\r\n return { ...state, notify: payload };\r\n case actionTypes.reports.REPORT_GET_CONSOLIDATEDREPORT:\r\n return { ...state, getConsolidatedReportReducer: payload };\r\n case actionTypes.reports.REPORT_GET_SKILLEDCLASSES:\r\n return { ...state, getSkilledClassesReducer: payload };\r\n case actionTypes.reports.REPORT_GET_MYSKILLS:\r\n return { ...state, getMySkillsReducer: payload };\r\n case actionTypes.reports.REPORT_GET_MYCERTIFICATES:\r\n return { ...state, getMyCertificatesReducer: payload };\r\n case actionTypes.reports.REPORT_GET_USERBADGES:\r\n return { ...state, getUserBadgesReducer: payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default accountReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n allPublishedTopics: null,\r\n publishedTopicsDone: false,\r\n allPublishedTopicsCount: 0,\r\n subTopics: null,\r\n topicDetails: null,\r\n topicsDetailsDone: false,\r\n};\r\n\r\nconst topicsReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.topicsTypes.GET_ALL_PUBLISHED_TOPICS:\r\n return { ...state, allPublishedTopics: payload };\r\n case actionTypes.topicsTypes.SET_LOADING_PUBLISHED_TOPICS:\r\n return { ...state, publishedTopicsDone: payload };\r\n case actionTypes.topicsTypes.GET_ALL_PUBLISHED_TOPICS_COUNT:\r\n return { ...state, allPublishedTopicsCount: payload };\r\n case actionTypes.topicsTypes.GET_SUB_TOPICS:\r\n return { ...state, subTopics: payload };\r\n case actionTypes.topicsTypes.GET_TOPIC_DETAILS:\r\n return { ...state, topicDetails: payload };\r\n case actionTypes.topicsTypes.SET_LOADING_TOPICS_DETAILS:\r\n return { ...state, topicsDetailsDone: payload };\r\n case actionTypes.topicsTypes.SET_INITIAL_TOPICS_STATE:\r\n return {\r\n ...state,\r\n allPublishedTopics: null,\r\n publishedTopicsDone: false,\r\n allPublishedTopicsCount: 0,\r\n subTopics: null,\r\n topicDetails: null,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default topicsReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n isFavoriteAvailable: false,\r\n otherFavoriteClasses: null,\r\n otherFavoriteClassesDone: false,\r\n otherFavoriteClassesCount: 0,\r\n otherFavoriteSeries: null,\r\n otherFavoriteSeriesDone: false,\r\n otherFavoriteSeriesCount: 0,\r\n};\r\n\r\nconst favoriteReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.favoriteTypes.IS_FAV_AVAILABLE:\r\n return {\r\n ...state,\r\n isFavoriteAvailable: payload,\r\n };\r\n case actionTypes.favoriteTypes.GET_OTHER_FAV_CLASSES:\r\n return {\r\n ...state,\r\n otherFavoriteClasses: payload,\r\n };\r\n case actionTypes.favoriteTypes.SET_LOADING_OTHER_FAV_CLASSES:\r\n return {\r\n ...state,\r\n otherFavoriteClassesDone: payload,\r\n };\r\n case actionTypes.favoriteTypes.GET_OTHER_FAV_CLASSES_COUNT:\r\n return {\r\n ...state,\r\n otherFavoriteClassesCount: payload,\r\n };\r\n\r\n case actionTypes.favoriteTypes.GET_OTHER_FAV_SERIES:\r\n return {\r\n ...state,\r\n otherFavoriteSeries: payload,\r\n };\r\n case actionTypes.favoriteTypes.SET_LOADING_OTHER_FAV_SERIES:\r\n return {\r\n ...state,\r\n otherFavoriteSeriesDone: payload,\r\n };\r\n case actionTypes.favoriteTypes.GET_OTHER_FAV_SERIES_COUNT:\r\n return {\r\n ...state,\r\n otherFavoriteSeriesCount: payload,\r\n };\r\n case actionTypes.favoriteTypes.SET_INITIAL_FAVORITE_CLASSES_SERIES_STATE:\r\n return {\r\n ...state,\r\n otherFavoriteClasses: null,\r\n otherFavoriteClassesDone: false,\r\n otherFavoriteClassesCount: 0,\r\n otherFavoriteSeries: null,\r\n otherFavoriteSeriesDone: false,\r\n otherFavoriteSeriesCount: 0,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default favoriteReducer;\r\n","import actionTypes from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n getContactUs: [],\r\n postContactUs: true,\r\n};\r\n\r\nconst contactUsReducer = (state = initialState, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case actionTypes.errorTypes.API_ERROR:\r\n return { ...state, loading: false, error: payload };\r\n case actionTypes.contactUsTypes.POST_CONTACT_US:\r\n return { ...state, postContactUs: payload };\r\n case actionTypes.contactUsTypes.GET_CONTACT_US:\r\n return { ...state, getContactUs: payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default contactUsReducer;\r\n","import { combineReducers } from \"redux\";\r\nimport loginReducer from \"./loginReducer\";\r\nimport errorReducer from \"./errorReducer\";\r\nimport userReducer from \"./userReducer\";\r\nimport homeReducer from \"./homeReducer\";\r\nimport contributeReducer from \"./contributeReducer\";\r\nimport privacyPolicyReducer from \"./privacyPolicyReducer\";\r\nimport connectReducer from \"./connectReducer\";\r\nimport commonReducer from \"./commonReducer\";\r\nimport globalSearchReducer from \"./globalSearchReducer\";\r\nimport actionTypes from \"../actions/actionTypes\";\r\nimport classReducer from \"./classReducer\";\r\nimport seriesReducer from \"./seriesReducer\";\r\nimport quizReducer from \"./quizReducer\";\r\nimport creditReducer from \"./creditReducer\";\r\nimport accountReducer from \"./accountReducer\";\r\nimport topicsReducer from \"./topicsReducer\";\r\nimport favoriteReducer from \"./favoriteReducer\";\r\nimport contactUsReducer from \"./contactUsReducer\";\r\n\r\nconst appReducer = combineReducers({\r\n loginReducer,\r\n errorReducer,\r\n userReducer,\r\n homeReducer,\r\n contributeReducer,\r\n privacyPolicyReducer,\r\n classReducer,\r\n seriesReducer,\r\n connectReducer,\r\n commonReducer,\r\n globalSearchReducer,\r\n quizReducer,\r\n creditReducer,\r\n accountReducer,\r\n topicsReducer,\r\n favoriteReducer,\r\n contactUsReducer,\r\n});\r\nconst rootReducer = (state, action) => {\r\n const { type } = action;\r\n if (type === actionTypes.loginTypes.LOGOUT) {\r\n // Preserve the userReducer state while resetting the rest\r\n const {\r\n loginReducer: { isLoggingOut },\r\n } = state;\r\n state = { loginReducer: { isLoggingOut } };\r\n }\r\n return appReducer(state, action);\r\n};\r\n\r\nexport default rootReducer;\r\n","/** A function that accepts a potential \"extra argument\" value to be injected later,\r\n * and returns an instance of the thunk middleware that uses that value\r\n */\nfunction createThunkMiddleware(extraArgument) {\n // Standard Redux middleware definition pattern:\n // See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware\n var middleware = function middleware(_ref) {\n var dispatch = _ref.dispatch,\n getState = _ref.getState;\n return function (next) {\n return function (action) {\n // The thunk middleware looks for any functions that were passed to `store.dispatch`.\n // If this \"action\" is really a function, call it and return the result.\n if (typeof action === 'function') {\n // Inject the store's `dispatch` and `getState` methods, as well as any \"extra arg\"\n return action(dispatch, getState, extraArgument);\n } // Otherwise, pass the action down the middleware chain as usual\n\n\n return next(action);\n };\n };\n };\n\n return middleware;\n}\n\nvar thunk = createThunkMiddleware(); // Attach the factory function so users can create a customized version\n// with whatever \"extra arg\" they want to inject into their thunks\n\nthunk.withExtraArgument = createThunkMiddleware;\nexport default thunk;","import { applyMiddleware, createStore } from \"@reduxjs/toolkit\";\r\nimport rootReducer from \"./reducers/rootReducer\";\r\nimport thunk from \"redux-thunk\";\r\nimport { composeWithDevTools } from \"redux-devtools-extension\";\r\n\r\nconst composeEnhancers = composeWithDevTools(\r\n { trace: true } \r\n );\r\n\r\nexport const store = createStore(\r\n rootReducer,\r\n composeEnhancers(applyMiddleware(thunk))\r\n);","import { __assign } from \"tslib\";\nimport { invariant } from '@formatjs/ecma402-abstract';\nimport { IntlMessageFormat, } from 'intl-messageformat';\nimport { MissingTranslationError, MessageFormatError } from './error';\nimport { TYPE } from '@formatjs/icu-messageformat-parser';\nfunction setTimeZoneInOptions(opts, timeZone) {\n return Object.keys(opts).reduce(function (all, k) {\n all[k] = __assign({ timeZone: timeZone }, opts[k]);\n return all;\n }, {});\n}\nfunction deepMergeOptions(opts1, opts2) {\n var keys = Object.keys(__assign(__assign({}, opts1), opts2));\n return keys.reduce(function (all, k) {\n all[k] = __assign(__assign({}, (opts1[k] || {})), (opts2[k] || {}));\n return all;\n }, {});\n}\nfunction deepMergeFormatsAndSetTimeZone(f1, timeZone) {\n if (!timeZone) {\n return f1;\n }\n var mfFormats = IntlMessageFormat.formats;\n return __assign(__assign(__assign({}, mfFormats), f1), { date: deepMergeOptions(setTimeZoneInOptions(mfFormats.date, timeZone), setTimeZoneInOptions(f1.date || {}, timeZone)), time: deepMergeOptions(setTimeZoneInOptions(mfFormats.time, timeZone), setTimeZoneInOptions(f1.time || {}, timeZone)) });\n}\nexport function formatMessage(_a, state, messageDescriptor, values, opts) {\n var locale = _a.locale, formats = _a.formats, messages = _a.messages, defaultLocale = _a.defaultLocale, defaultFormats = _a.defaultFormats, fallbackOnEmptyString = _a.fallbackOnEmptyString, onError = _a.onError, timeZone = _a.timeZone, defaultRichTextElements = _a.defaultRichTextElements;\n if (messageDescriptor === void 0) { messageDescriptor = { id: '' }; }\n var msgId = messageDescriptor.id, defaultMessage = messageDescriptor.defaultMessage;\n // `id` is a required field of a Message Descriptor.\n invariant(!!msgId, \"[@formatjs/intl] An `id` must be provided to format a message. You can either:\\n1. Configure your build toolchain with [babel-plugin-formatjs](https://formatjs.io/docs/tooling/babel-plugin)\\nor [@formatjs/ts-transformer](https://formatjs.io/docs/tooling/ts-transformer) OR\\n2. Configure your `eslint` config to include [eslint-plugin-formatjs](https://formatjs.io/docs/tooling/linter#enforce-id)\\nto autofix this issue\");\n var id = String(msgId);\n var message = \n // In case messages is Object.create(null)\n // e.g import('foo.json') from webpack)\n // See https://github.com/formatjs/formatjs/issues/1914\n messages &&\n Object.prototype.hasOwnProperty.call(messages, id) &&\n messages[id];\n // IMPORTANT: Hot path if `message` is AST with a single literal node\n if (Array.isArray(message) &&\n message.length === 1 &&\n message[0].type === TYPE.literal) {\n return message[0].value;\n }\n // IMPORTANT: Hot path straight lookup for performance\n if (!values &&\n message &&\n typeof message === 'string' &&\n !defaultRichTextElements) {\n return message.replace(/'\\{(.*?)\\}'/gi, \"{$1}\");\n }\n values = __assign(__assign({}, defaultRichTextElements), (values || {}));\n formats = deepMergeFormatsAndSetTimeZone(formats, timeZone);\n defaultFormats = deepMergeFormatsAndSetTimeZone(defaultFormats, timeZone);\n if (!message) {\n if (fallbackOnEmptyString === false && message === '') {\n return message;\n }\n if (!defaultMessage ||\n (locale && locale.toLowerCase() !== defaultLocale.toLowerCase())) {\n // This prevents warnings from littering the console in development\n // when no `messages` are passed into the for the\n // default locale.\n onError(new MissingTranslationError(messageDescriptor, locale));\n }\n if (defaultMessage) {\n try {\n var formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats, opts);\n return formatter.format(values);\n }\n catch (e) {\n onError(new MessageFormatError(\"Error formatting default message for: \\\"\".concat(id, \"\\\", rendering default message verbatim\"), locale, messageDescriptor, e));\n return typeof defaultMessage === 'string' ? defaultMessage : id;\n }\n }\n return id;\n }\n // We have the translated message\n try {\n var formatter = state.getMessageFormat(message, locale, formats, __assign({ formatters: state }, (opts || {})));\n return formatter.format(values);\n }\n catch (e) {\n onError(new MessageFormatError(\"Error formatting message: \\\"\".concat(id, \"\\\", using \").concat(defaultMessage ? 'default message' : 'id', \" as fallback.\"), locale, messageDescriptor, e));\n }\n if (defaultMessage) {\n try {\n var formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats, opts);\n return formatter.format(values);\n }\n catch (e) {\n onError(new MessageFormatError(\"Error formatting the default message for: \\\"\".concat(id, \"\\\", rendering message verbatim\"), locale, messageDescriptor, e));\n }\n }\n if (typeof message === 'string') {\n return message;\n }\n if (typeof defaultMessage === 'string') {\n return defaultMessage;\n }\n return id;\n}\n","import { getNamedFormat, filterProps } from './utils';\nimport { IntlError, IntlErrorCode } from './error';\nvar NUMBER_FORMAT_OPTIONS = [\n 'localeMatcher',\n 'style',\n 'currency',\n 'currencyDisplay',\n 'unit',\n 'unitDisplay',\n 'useGrouping',\n 'minimumIntegerDigits',\n 'minimumFractionDigits',\n 'maximumFractionDigits',\n 'minimumSignificantDigits',\n 'maximumSignificantDigits',\n // ES2020 NumberFormat\n 'compactDisplay',\n 'currencyDisplay',\n 'currencySign',\n 'notation',\n 'signDisplay',\n 'unit',\n 'unitDisplay',\n 'numberingSystem',\n];\nexport function getFormatter(_a, getNumberFormat, options) {\n var locale = _a.locale, formats = _a.formats, onError = _a.onError;\n if (options === void 0) { options = {}; }\n var format = options.format;\n var defaults = ((format &&\n getNamedFormat(formats, 'number', format, onError)) ||\n {});\n var filteredOptions = filterProps(options, NUMBER_FORMAT_OPTIONS, defaults);\n return getNumberFormat(locale, filteredOptions);\n}\nexport function formatNumber(config, getNumberFormat, value, options) {\n if (options === void 0) { options = {}; }\n try {\n return getFormatter(config, getNumberFormat, options).format(value);\n }\n catch (e) {\n config.onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting number.', e));\n }\n return String(value);\n}\nexport function formatNumberToParts(config, getNumberFormat, value, options) {\n if (options === void 0) { options = {}; }\n try {\n return getFormatter(config, getNumberFormat, options).formatToParts(value);\n }\n catch (e) {\n config.onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting number.', e));\n }\n return [];\n}\n","import { getNamedFormat, filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlFormatError } from './error';\nvar RELATIVE_TIME_FORMAT_OPTIONS = ['numeric', 'style'];\nfunction getFormatter(_a, getRelativeTimeFormat, options) {\n var locale = _a.locale, formats = _a.formats, onError = _a.onError;\n if (options === void 0) { options = {}; }\n var format = options.format;\n var defaults = (!!format && getNamedFormat(formats, 'relative', format, onError)) || {};\n var filteredOptions = filterProps(options, RELATIVE_TIME_FORMAT_OPTIONS, defaults);\n return getRelativeTimeFormat(locale, filteredOptions);\n}\nexport function formatRelativeTime(config, getRelativeTimeFormat, value, unit, options) {\n if (options === void 0) { options = {}; }\n if (!unit) {\n unit = 'second';\n }\n var RelativeTimeFormat = Intl.RelativeTimeFormat;\n if (!RelativeTimeFormat) {\n config.onError(new FormatError(\"Intl.RelativeTimeFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-relativetimeformat\\\"\\n\", ErrorCode.MISSING_INTL_API));\n }\n try {\n return getFormatter(config, getRelativeTimeFormat, options).format(value, unit);\n }\n catch (e) {\n config.onError(new IntlFormatError('Error formatting relative time.', config.locale, e));\n }\n return String(value);\n}\n","import { __assign } from \"tslib\";\nimport { filterProps, getNamedFormat } from './utils';\nimport { IntlError, IntlErrorCode } from './error';\nvar DATE_TIME_FORMAT_OPTIONS = [\n 'localeMatcher',\n 'formatMatcher',\n 'timeZone',\n 'hour12',\n 'weekday',\n 'era',\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'timeZoneName',\n 'hourCycle',\n 'dateStyle',\n 'timeStyle',\n 'calendar',\n // 'dayPeriod',\n 'numberingSystem',\n];\nexport function getFormatter(_a, type, getDateTimeFormat, options) {\n var locale = _a.locale, formats = _a.formats, onError = _a.onError, timeZone = _a.timeZone;\n if (options === void 0) { options = {}; }\n var format = options.format;\n var defaults = __assign(__assign({}, (timeZone && { timeZone: timeZone })), (format && getNamedFormat(formats, type, format, onError)));\n var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, defaults);\n if (type === 'time' &&\n !filteredOptions.hour &&\n !filteredOptions.minute &&\n !filteredOptions.second &&\n !filteredOptions.timeStyle &&\n !filteredOptions.dateStyle) {\n // Add default formatting options if hour, minute, or second isn't defined.\n filteredOptions = __assign(__assign({}, filteredOptions), { hour: 'numeric', minute: 'numeric' });\n }\n return getDateTimeFormat(locale, filteredOptions);\n}\nexport function formatDate(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n var date = typeof value === 'string' ? new Date(value || 0) : value;\n try {\n return getFormatter(config, 'date', getDateTimeFormat, options).format(date);\n }\n catch (e) {\n config.onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting date.', e));\n }\n return String(date);\n}\nexport function formatTime(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n var date = typeof value === 'string' ? new Date(value || 0) : value;\n try {\n return getFormatter(config, 'time', getDateTimeFormat, options).format(date);\n }\n catch (e) {\n config.onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting time.', e));\n }\n return String(date);\n}\nexport function formatDateTimeRange(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var from = _a[0], to = _a[1], _b = _a[2], options = _b === void 0 ? {} : _b;\n var timeZone = config.timeZone, locale = config.locale, onError = config.onError;\n var filteredOptions = filterProps(options, DATE_TIME_FORMAT_OPTIONS, timeZone ? { timeZone: timeZone } : {});\n try {\n return getDateTimeFormat(locale, filteredOptions).formatRange(from, to);\n }\n catch (e) {\n onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting date time range.', e));\n }\n return String(from);\n}\nexport function formatDateToParts(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n var date = typeof value === 'string' ? new Date(value || 0) : value;\n try {\n return getFormatter(config, 'date', getDateTimeFormat, options).formatToParts(date);\n }\n catch (e) {\n config.onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting date.', e));\n }\n return [];\n}\nexport function formatTimeToParts(config, getDateTimeFormat) {\n var _a = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _a[_i - 2] = arguments[_i];\n }\n var value = _a[0], _b = _a[1], options = _b === void 0 ? {} : _b;\n var date = typeof value === 'string' ? new Date(value || 0) : value;\n try {\n return getFormatter(config, 'time', getDateTimeFormat, options).formatToParts(date);\n }\n catch (e) {\n config.onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting time.', e));\n }\n return [];\n}\n","import { filterProps } from './utils';\nimport { IntlFormatError } from './error';\nimport { ErrorCode, FormatError } from 'intl-messageformat';\nvar PLURAL_FORMAT_OPTIONS = [\n 'localeMatcher',\n 'type',\n];\nexport function formatPlural(_a, getPluralRules, value, options) {\n var locale = _a.locale, onError = _a.onError;\n if (options === void 0) { options = {}; }\n if (!Intl.PluralRules) {\n onError(new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API));\n }\n var filteredOptions = filterProps(options, PLURAL_FORMAT_OPTIONS);\n try {\n return getPluralRules(locale, filteredOptions).select(value);\n }\n catch (e) {\n onError(new IntlFormatError('Error formatting plural.', locale, e));\n }\n return 'other';\n}\n","import { __assign } from \"tslib\";\nimport { filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlError, IntlErrorCode } from './error';\nvar LIST_FORMAT_OPTIONS = [\n 'localeMatcher',\n 'type',\n 'style',\n];\nvar now = Date.now();\nfunction generateToken(i) {\n return \"\".concat(now, \"_\").concat(i, \"_\").concat(now);\n}\nexport function formatList(opts, getListFormat, values, options) {\n if (options === void 0) { options = {}; }\n var results = formatListToParts(opts, getListFormat, values, options).reduce(function (all, el) {\n var val = el.value;\n if (typeof val !== 'string') {\n all.push(val);\n }\n else if (typeof all[all.length - 1] === 'string') {\n all[all.length - 1] += val;\n }\n else {\n all.push(val);\n }\n return all;\n }, []);\n return results.length === 1 ? results[0] : results;\n}\nexport function formatListToParts(_a, getListFormat, values, options) {\n var locale = _a.locale, onError = _a.onError;\n if (options === void 0) { options = {}; }\n var ListFormat = Intl.ListFormat;\n if (!ListFormat) {\n onError(new FormatError(\"Intl.ListFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-listformat\\\"\\n\", ErrorCode.MISSING_INTL_API));\n }\n var filteredOptions = filterProps(options, LIST_FORMAT_OPTIONS);\n try {\n var richValues_1 = {};\n var serializedValues = values.map(function (v, i) {\n if (typeof v === 'object') {\n var id = generateToken(i);\n richValues_1[id] = v;\n return id;\n }\n return String(v);\n });\n return getListFormat(locale, filteredOptions)\n .formatToParts(serializedValues)\n .map(function (part) {\n return part.type === 'literal'\n ? part\n : __assign(__assign({}, part), { value: richValues_1[part.value] || part.value });\n });\n }\n catch (e) {\n onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting list.', e));\n }\n // @ts-ignore\n return values;\n}\n","import { filterProps } from './utils';\nimport { FormatError, ErrorCode } from 'intl-messageformat';\nimport { IntlErrorCode, IntlError } from './error';\nvar DISPLAY_NAMES_OPTONS = [\n 'localeMatcher',\n 'style',\n 'type',\n 'fallback',\n];\nexport function formatDisplayName(_a, getDisplayNames, value, options) {\n var locale = _a.locale, onError = _a.onError;\n var DisplayNames = Intl.DisplayNames;\n if (!DisplayNames) {\n onError(new FormatError(\"Intl.DisplayNames is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-displaynames\\\"\\n\", ErrorCode.MISSING_INTL_API));\n }\n var filteredOptions = filterProps(options, DISPLAY_NAMES_OPTONS);\n try {\n return getDisplayNames(locale, filteredOptions).of(value);\n }\n catch (e) {\n onError(new IntlError(IntlErrorCode.FORMAT_ERROR, 'Error formatting display name.', e));\n }\n}\n","import { __assign } from \"tslib\";\nimport { createFormatters, DEFAULT_INTL_CONFIG } from './utils';\nimport { InvalidConfigError, MissingDataError } from './error';\nimport { formatNumber, formatNumberToParts } from './number';\nimport { formatRelativeTime } from './relativeTime';\nimport { formatDate, formatDateToParts, formatTime, formatTimeToParts, formatDateTimeRange, } from './dateTime';\nimport { formatPlural } from './plural';\nimport { formatMessage } from './message';\nimport { formatList, formatListToParts } from './list';\nimport { formatDisplayName } from './displayName';\nfunction messagesContainString(messages) {\n var firstMessage = messages ? messages[Object.keys(messages)[0]] : undefined;\n return typeof firstMessage === 'string';\n}\nfunction verifyConfigMessages(config) {\n if (config.defaultRichTextElements &&\n messagesContainString(config.messages || {})) {\n console.warn(\"[@formatjs/intl] \\\"defaultRichTextElements\\\" was specified but \\\"message\\\" was not pre-compiled. \\nPlease consider using \\\"@formatjs/cli\\\" to pre-compile your messages for performance.\\nFor more details see https://formatjs.io/docs/getting-started/message-distribution\");\n }\n}\n/**\n * Create intl object\n * @param config intl config\n * @param cache cache for formatter instances to prevent memory leak\n */\nexport function createIntl(config, cache) {\n var formatters = createFormatters(cache);\n var resolvedConfig = __assign(__assign({}, DEFAULT_INTL_CONFIG), config);\n var locale = resolvedConfig.locale, defaultLocale = resolvedConfig.defaultLocale, onError = resolvedConfig.onError;\n if (!locale) {\n if (onError) {\n onError(new InvalidConfigError(\"\\\"locale\\\" was not configured, using \\\"\".concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl/api#intlshape for more details\")));\n }\n // Since there's no registered locale data for `locale`, this will\n // fallback to the `defaultLocale` to make sure things can render.\n // The `messages` are overridden to the `defaultProps` empty object\n // to maintain referential equality across re-renders. It's assumed\n // each contains a `defaultMessage` prop.\n resolvedConfig.locale = resolvedConfig.defaultLocale || 'en';\n }\n else if (!Intl.NumberFormat.supportedLocalesOf(locale).length && onError) {\n onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.NumberFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n }\n else if (!Intl.DateTimeFormat.supportedLocalesOf(locale).length &&\n onError) {\n onError(new MissingDataError(\"Missing locale data for locale: \\\"\".concat(locale, \"\\\" in Intl.DateTimeFormat. Using default locale: \\\"\").concat(defaultLocale, \"\\\" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details\")));\n }\n verifyConfigMessages(resolvedConfig);\n return __assign(__assign({}, resolvedConfig), { formatters: formatters, formatNumber: formatNumber.bind(null, resolvedConfig, formatters.getNumberFormat), formatNumberToParts: formatNumberToParts.bind(null, resolvedConfig, formatters.getNumberFormat), formatRelativeTime: formatRelativeTime.bind(null, resolvedConfig, formatters.getRelativeTimeFormat), formatDate: formatDate.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateToParts: formatDateToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTime: formatTime.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatDateTimeRange: formatDateTimeRange.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatTimeToParts: formatTimeToParts.bind(null, resolvedConfig, formatters.getDateTimeFormat), formatPlural: formatPlural.bind(null, resolvedConfig, formatters.getPluralRules), formatMessage: formatMessage.bind(null, resolvedConfig, formatters), formatList: formatList.bind(null, resolvedConfig, formatters.getListFormat), formatListToParts: formatListToParts.bind(null, resolvedConfig, formatters.getListFormat), formatDisplayName: formatDisplayName.bind(null, resolvedConfig, formatters.getDisplayNames) });\n}\n","/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */\nimport { __assign, __extends, __rest, __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { Provider } from './injectIntl';\nimport { DEFAULT_INTL_CONFIG, invariantIntlContext, assignUniqueKeysToParts, shallowEqual, } from '../utils';\nimport { formatMessage as coreFormatMessage, createIntl as coreCreateIntl, createIntlCache, } from '@formatjs/intl';\nimport { isFormatXMLElementFn, } from 'intl-messageformat';\nfunction processIntlConfig(config) {\n return {\n locale: config.locale,\n timeZone: config.timeZone,\n fallbackOnEmptyString: config.fallbackOnEmptyString,\n formats: config.formats,\n textComponent: config.textComponent,\n messages: config.messages,\n defaultLocale: config.defaultLocale,\n defaultFormats: config.defaultFormats,\n onError: config.onError,\n wrapRichTextChunksInFragment: config.wrapRichTextChunksInFragment,\n defaultRichTextElements: config.defaultRichTextElements,\n };\n}\nfunction assignUniqueKeysToFormatXMLElementFnArgument(values) {\n if (!values) {\n return values;\n }\n return Object.keys(values).reduce(function (acc, k) {\n var v = values[k];\n acc[k] = isFormatXMLElementFn(v)\n ? assignUniqueKeysToParts(v)\n : v;\n return acc;\n }, {});\n}\nvar formatMessage = function (config, formatters, descriptor, rawValues) {\n var rest = [];\n for (var _i = 4; _i < arguments.length; _i++) {\n rest[_i - 4] = arguments[_i];\n }\n var values = assignUniqueKeysToFormatXMLElementFnArgument(rawValues);\n var chunks = coreFormatMessage.apply(void 0, __spreadArray([config,\n formatters,\n descriptor,\n values], rest, false));\n if (Array.isArray(chunks)) {\n return React.Children.toArray(chunks);\n }\n return chunks;\n};\n/**\n * Create intl object\n * @param config intl config\n * @param cache cache for formatter instances to prevent memory leak\n */\nexport var createIntl = function (_a, cache) {\n var rawDefaultRichTextElements = _a.defaultRichTextElements, config = __rest(_a, [\"defaultRichTextElements\"]);\n var defaultRichTextElements = assignUniqueKeysToFormatXMLElementFnArgument(rawDefaultRichTextElements);\n var coreIntl = coreCreateIntl(__assign(__assign(__assign({}, DEFAULT_INTL_CONFIG), config), { defaultRichTextElements: defaultRichTextElements }), cache);\n return __assign(__assign({}, coreIntl), { formatMessage: formatMessage.bind(null, {\n locale: coreIntl.locale,\n timeZone: coreIntl.timeZone,\n fallbackOnEmptyString: coreIntl.fallbackOnEmptyString,\n formats: coreIntl.formats,\n defaultLocale: coreIntl.defaultLocale,\n defaultFormats: coreIntl.defaultFormats,\n messages: coreIntl.messages,\n onError: coreIntl.onError,\n defaultRichTextElements: defaultRichTextElements,\n }, coreIntl.formatters) });\n};\nvar IntlProvider = /** @class */ (function (_super) {\n __extends(IntlProvider, _super);\n function IntlProvider() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.cache = createIntlCache();\n _this.state = {\n cache: _this.cache,\n intl: createIntl(processIntlConfig(_this.props), _this.cache),\n prevConfig: processIntlConfig(_this.props),\n };\n return _this;\n }\n IntlProvider.getDerivedStateFromProps = function (props, _a) {\n var prevConfig = _a.prevConfig, cache = _a.cache;\n var config = processIntlConfig(props);\n if (!shallowEqual(prevConfig, config)) {\n return {\n intl: createIntl(config, cache),\n prevConfig: config,\n };\n }\n return null;\n };\n IntlProvider.prototype.render = function () {\n invariantIntlContext(this.state.intl);\n return React.createElement(Provider, { value: this.state.intl }, this.props.children);\n };\n IntlProvider.displayName = 'IntlProvider';\n IntlProvider.defaultProps = DEFAULT_INTL_CONFIG;\n return IntlProvider;\n}(React.PureComponent));\nexport default IntlProvider;\n","import messages_de from \"./translations/de.json\";\r\nimport messages_en from \"./translations/en.json\";\r\nimport messages_ar from \"./translations/ar.json\";\r\nimport messages_pt from \"./translations/pt.json\";\r\nimport messages_fr from \"./translations/fr.json\";\r\nimport messages_es from \"./translations/es.json\";\r\nimport messages_ko from \"./translations/ko.json\";\r\nimport messages_ja from \"./translations/ja.json\";\r\nimport messages_zh from \"./translations/zh.json\";\r\nimport messages_zht from \"./translations/zht.json\";\r\n\r\nconst messages = {\r\n de: messages_de,\r\n en: messages_en,\r\n ar: messages_ar,\r\n pt: messages_pt,\r\n fr: messages_fr,\r\n es: messages_es,\r\n ko: messages_ko,\r\n ja: messages_ja,\r\n zh: messages_zh,\r\n \"zh-Hant-HK\": messages_zht,\r\n};\r\nexport default messages;\r\n","import React, { Fragment, useEffect } from \"react\";\r\nimport { IntlProvider } from \"react-intl\";\r\nimport { useSelector } from \"react-redux\";\r\nimport messages from \"../../utils/messages\";\r\n\r\nconst LanguageProvider = ({ children }) => {\r\n const rtlLangArr = [\"ar\"];\r\n const chineseLangArr = [\"zh\"];\r\n const franceLangArr = [\"fr\"];\r\n const germanLangArr = [\"de\"];\r\n const koreanLangArr = [\"ko\"];\r\n const japanLangArr = [\"ja\"];\r\n const spanishLangArr = [\"es\"];\r\n const portuguesLangArr = [\"pt\"];\r\n const homeState = useSelector((state) => state.homeReducer);\r\n const { selectedLanguage } = homeState;\r\n\r\n useEffect(() => {\r\n if (rtlLangArr.includes(selectedLanguage)) {\r\n document.getElementsByTagName(\"html\")[0].setAttribute(\"dir\", \"rtl\");\r\n document.getElementsByTagName(\"html\")[0].removeAttribute(\"data-language\");\r\n }\r\n else if (chineseLangArr.includes(selectedLanguage)) {\r\n document.getElementsByTagName(\"html\")[0].removeAttribute(\"dir\");\r\n document.getElementsByTagName(\"html\")[0].setAttribute(\"data-language\", \"zh\");\r\n }\r\n else if (franceLangArr.includes(selectedLanguage)) {\r\n document.getElementsByTagName(\"html\")[0].removeAttribute(\"dir\");\r\n document.getElementsByTagName(\"html\")[0].setAttribute(\"data-language\", \"fr\");\r\n }\r\n else if (germanLangArr.includes(selectedLanguage)) {\r\n document.getElementsByTagName(\"html\")[0].removeAttribute(\"dir\");\r\n document.getElementsByTagName(\"html\")[0].setAttribute(\"data-language\", \"de\");\r\n }\r\n else if (koreanLangArr.includes(selectedLanguage)) {\r\n document.getElementsByTagName(\"html\")[0].removeAttribute(\"dir\");\r\n document.getElementsByTagName(\"html\")[0].setAttribute(\"data-language\", \"ko\");\r\n }\r\n else if (japanLangArr.includes(selectedLanguage)) {\r\n document.getElementsByTagName(\"html\")[0].removeAttribute(\"dir\");\r\n document.getElementsByTagName(\"html\")[0].setAttribute(\"data-language\", \"ja\");\r\n } \r\n else if (spanishLangArr.includes(selectedLanguage)) {\r\n document.getElementsByTagName(\"html\")[0].removeAttribute(\"dir\");\r\n document.getElementsByTagName(\"html\")[0].setAttribute(\"data-language\", \"es\");\r\n }\r\n else if (portuguesLangArr.includes(selectedLanguage)) {\r\n document.getElementsByTagName(\"html\")[0].removeAttribute(\"dir\");\r\n document.getElementsByTagName(\"html\")[0].setAttribute(\"data-language\", \"pt\");\r\n } else {\r\n document.getElementsByTagName(\"html\")[0].removeAttribute(\"dir\");\r\n document.getElementsByTagName(\"html\")[0].removeAttribute(\"data-language\");\r\n }\r\n\r\n // other solution\r\n // const dir = rtlLanguages.includes(language) ? \"rtl\" : \"ltr\"\r\n // document.documentElement.dir = dir\r\n }, [selectedLanguage, rtlLangArr]);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default LanguageProvider;\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport App from \"./App\";\r\n// import reportWebVitals from \"./reportWebVitals\";\r\nimport { store } from \"./store/store\";\r\nimport { Provider } from \"react-redux\";\r\nimport LanguageProvider from \"./components/i18n/LanguageProvider\";\r\nimport \"./index.scss\";\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\n// reportWebVitals();\r\n","import actionTypes from \"../actionTypes\";\r\n\r\nexport const getClassDetailsAction = (data) => ({\r\n type: actionTypes.classTypes.GET_CLASS_DETAILS,\r\n payload: data,\r\n});\r\nexport const setCurrentViewAction = (data) => ({\r\n type: actionTypes.classTypes.SET_CURRENT_CLASS_VIEW,\r\n payload: data,\r\n});\r\nexport const getClassTabAction = (data) => ({\r\n type: actionTypes.classTypes.GET_CLASS_TAB,\r\n payload: data,\r\n});\r\nexport const getClassAssetIdAction = (data) => ({\r\n type: actionTypes.classTypes.GET_CLASS_ASSET_ID,\r\n payload: data,\r\n});\r\nexport const getClassQueriesAction = (data) => ({\r\n type: actionTypes.classTypes.GET_CLASS_QUERIES,\r\n payload: data,\r\n});\r\nexport const getScormVersionAction = (data) => ({\r\n type: actionTypes.classTypes.GET_SCORM_VERSION,\r\n payload: data,\r\n});\r\nexport const getScormBookmarkAction = (data) => ({\r\n type: actionTypes.classTypes.GET_SCORM_BOOKMARK,\r\n payload: data,\r\n});\r\nexport const addRemoveFavoriteClassAction = () => ({\r\n type: actionTypes.classTypes.ADD_REMOVE_FAVORITE_CLASS,\r\n});\r\n\r\nexport const updateVideoDurationForLogoutAction = (data) => ({\r\n type: actionTypes.classTypes.UPDATE_VIDEO_DURATION_FOR_LOGOUT,\r\n payload: data,\r\n});\r\nexport const postAssessmentScoreAction = (data) => ({\r\n type: actionTypes.classTypes.POST_ASSESSMENT_SCORE,\r\n payload: data,\r\n});\r\n\r\nexport const getNextClassAction = (data) => ({\r\n type: actionTypes.classTypes.GET_NEXT_CLASS,\r\n payload: data,\r\n});\r\nexport const getNextClassInSeriesAction = (data) => ({\r\n type: actionTypes.classTypes.GET_NEXT_CLASS_IN_SERIES,\r\n payload: data,\r\n});\r\nexport const getRelatedClassesAction = (data) => ({\r\n type: actionTypes.classTypes.GET_RELATED_CLASSES,\r\n payload: data,\r\n});\r\n","import actionTypes from \"../actionTypes\";\r\n\r\nexport const requestAPI = () => ({\r\n type: actionTypes.API_REQ_STARTED,\r\n});\r\nexport const getRelatedResultAction = (data) => ({\r\n type: actionTypes.commonTypes.GET_RELATED_RESULT,\r\n payload: data,\r\n});\r\nexport const updateGlobalSearchTextAction = (data) => ({\r\n type: actionTypes.commonTypes.GLOBAL_SEARCH_TEXT,\r\n payload: data,\r\n});\r\nexport const toggleDropdownText = data => ({\r\n type: actionTypes.commonTypes.DROPDOWN_TEXT_BOOLEAN,\r\n payload: data,\r\n});\r\nexport const toggleAdvanceSearchAction = (data) => ({\r\n type: actionTypes.commonTypes.TOGGLE_ADVANCE_SEARCH,\r\n payload: data,\r\n});\r\nexport const toggleSearchBarAction = (data) => ({\r\n type: actionTypes.commonTypes.TOGGLE_SEARCHBAR,\r\n payload: data,\r\n});\r\nexport const toggleAdvanceSearchLoadingAction = (data) => ({\r\n type: actionTypes.commonTypes.TOGGLE_ADVANCE_SEARCH_LOADING,\r\n payload: data,\r\n});\r\nexport const updateGlobalCheckboxes = (data) => ({\r\n type: actionTypes.commonTypes.UPDATE_GLOBAL_CHECKBOX,\r\n payload: data\r\n})\r\nexport const updateResultLanguage = (data) => ({\r\n type: actionTypes.commonTypes.UPDATE_RESULT_LANGUAGE,\r\n payload: data\r\n})\r\nexport const catchError = data => ({\r\n type: actionTypes.errorTypes.API_ERROR,\r\n payload: data,\r\n});\r\n","import actionTypes from \"../actionTypes\";\r\n\r\nexport const requestAPI = () => ({\r\n type: actionTypes.API_REQ_STARTED,\r\n});\r\nexport const getGeneralQueriesAction = (data) => ({\r\n type: actionTypes.connectTypes.GET_GENERAL_QUERIES,\r\n payload: data,\r\n});\r\nexport const getForumTopicsDone = data => ({\r\n type: actionTypes.connectTypes.CONNECT_FORUM_TOPICS,\r\n payload: data,\r\n});\r\nexport const putForumFollowUnfollowDone = data => ({\r\n type: actionTypes.connectTypes.CONNECT_FORUM_TOPICSFOLLOWUNFOLLOW,\r\n payload: data,\r\n});\r\nexport const getForumTopicsDetailsDone = data => ({\r\n type: actionTypes.connectTypes.CONNECT_FORUM_TOPICSDETAILS,\r\n payload: data,\r\n});\r\nexport const postForumThreadDone = data => ({\r\n type: actionTypes.connectTypes.CONNECT_FORUM_ADDTHREADS,\r\n payload: data,\r\n});\r\nexport const getForumTopicCommentsDone = data => ({\r\n type: actionTypes.connectTypes.CONNECT_FORUM_ADDTHREADSCOMMENTS,\r\n payload: data,\r\n});\r\nexport const deleteThreadDone = data => ({\r\n type: actionTypes.connectTypes.CONNECT_FORUM_DELETETHREAD,\r\n payload: data,\r\n});\r\nexport const getPollsDone = data => ({\r\n type: actionTypes.connectTypes.CONNECT_POLL_GETPOLLS,\r\n payload: data,\r\n});\r\nexport const getResponseDone = data => ({\r\n type: actionTypes.connectTypes.CONNECT_POLL_GETRESPONSE,\r\n payload: data,\r\n});\r\nexport const postUserPollResoponseDone = data => ({\r\n type: actionTypes.connectTypes.CONNECT_POLL_POSTUSERPOLLRESPONSE,\r\n payload: data,\r\n});\r\nexport const isPollAvailableDone = data => ({\r\n type: actionTypes.connectTypes.CONNECT_POLL_ISPOLLAVAILABLE,\r\n payload: data,\r\n});\r\nexport const getPollHistoryDone = data => ({\r\n type: actionTypes.connectTypes.CONNECT_POLL_GETPOLLHISTORY,\r\n payload: data,\r\n});\r\nexport const catchError = data => ({\r\n type: actionTypes.errorTypes.API_ERROR,\r\n payload: data,\r\n});\r\n","import actionTypes from \"../actionTypes\";\r\n\r\nexport const getCreditDetailsAction = (data) => ({\r\n type: actionTypes.creditTypes.GET_CREDIT_DETAILS,\r\n payload: data,\r\n});\r\n\r\nexport const setCreditStateTypeAction = (data) => ({\r\n type: actionTypes.creditTypes.SET_CREDIT_STATE_TYPE,\r\n payload: data,\r\n});\r\n\r\nexport const setCreditFilterTypeAction = (data) => ({\r\n type: actionTypes.creditTypes.SET_CREDIT_FILTER_TYPE,\r\n payload: data,\r\n});\r\n","import actionTypes from \"../actionTypes\";\r\n\r\nexport const isFavoriteAvailableAction = (data) => ({\r\n type: actionTypes.favoriteTypes.IS_FAV_AVAILABLE,\r\n payload: data,\r\n});\r\nexport const getOtherFavoriteClassesAction = (data) => ({\r\n type: actionTypes.favoriteTypes.GET_OTHER_FAV_CLASSES,\r\n payload: data,\r\n});\r\nexport const setLoadingOtherFavoriteClassesAction = (data) => ({\r\n type: actionTypes.favoriteTypes.SET_LOADING_OTHER_FAV_CLASSES,\r\n payload: data,\r\n});\r\nexport const getOtherFavoriteClassesCountAction = (data) => ({\r\n type: actionTypes.favoriteTypes.GET_OTHER_FAV_CLASSES_COUNT,\r\n payload: data,\r\n});\r\nexport const getOtherFavoriteSeriesAction = (data) => ({\r\n type: actionTypes.favoriteTypes.GET_OTHER_FAV_SERIES,\r\n payload: data,\r\n});\r\nexport const setLoadingOtherFavoriteSeriesAction = (data) => ({\r\n type: actionTypes.favoriteTypes.SET_LOADING_OTHER_FAV_SERIES,\r\n payload: data,\r\n});\r\nexport const getOtherFavoriteSeriesCountAction = (data) => ({\r\n type: actionTypes.favoriteTypes.GET_OTHER_FAV_SERIES_COUNT,\r\n payload: data,\r\n});\r\nexport const setInitialFavoriteClassesSeriesStateAction = () => ({\r\n type: actionTypes.favoriteTypes.SET_INITIAL_FAVORITE_CLASSES_SERIES_STATE,\r\n});\r\n","import actionTypes from \"../actionTypes\";\r\n\r\nexport const requestAPI = () => ({\r\n type: actionTypes.API_REQ_STARTED,\r\n});\r\nexport const removeGlobalSearchResult = () => ({\r\n type: actionTypes.globalSearchTypes.REMOVE_GLOBAL_RESULT,\r\n});\r\nexport const getSearchResultDone = data => ({\r\n type: actionTypes.globalSearchTypes.GLOBAL_SEARCH,\r\n payload: data\r\n});\r\nexport const updateSearchText = (data) => ({\r\n type: actionTypes.globalSearchTypes.UPDATE_SEARCH_TEXT,\r\n payload: data\r\n})\r\nexport const updateDidYouMeanSuggestions = (data) => ({\r\n type: actionTypes.globalSearchTypes.UPDATE_DID_YOU_MEAN_SUGGESTIONS,\r\n payload: data\r\n})\r\nexport const catchError = data => ({\r\n type: actionTypes.errorTypes.API_ERROR,\r\n payload: data,\r\n});\r\n","import actionTypes from \"../actionTypes\";\r\n\r\nexport const getAllLanguagesAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_ALL_LANGUAGES,\r\n payload: data,\r\n});\r\nexport const setSelectedLanguageAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_LANGUAGE,\r\n payload: data,\r\n});\r\nexport const getNotificationsAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_NOTIFICATIONS,\r\n payload: data,\r\n});\r\nexport const setThemeStylesAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_THEME_STYLES,\r\n payload: data,\r\n});\r\nexport const resetTimerAction = () => ({\r\n type: actionTypes.homeTypes.RESET_TIMER,\r\n});\r\nexport const isRedirectedToTopicsAction = () => ({\r\n type: actionTypes.homeTypes.IS_REDIRECTED_TO_TOPICS,\r\n});\r\n\r\nexport const getAssignedClassesAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_ASSIGNED_CLASSES,\r\n payload: data,\r\n});\r\nexport const setLoadingAssignedClassesAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_LOADING_ASSIGNED_CLASSES,\r\n payload: data,\r\n});\r\nexport const getAssignedClassesCountAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_ASSIGNED_CLASSES_COUNT,\r\n payload: data,\r\n});\r\n\r\nexport const getCompletedClassesAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_COMPLETED_CLASSES,\r\n payload: data,\r\n});\r\nexport const setLoadingCompletedClassesAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_LOADING_COMPLETED_CLASSES,\r\n payload: data,\r\n});\r\nexport const getCompletedClassesCountAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_COMPLETED_CLASSES_COUNT,\r\n payload: data,\r\n});\r\n\r\nexport const getTrendingClassesAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_TRENDING_CLASSES,\r\n payload: data,\r\n});\r\nexport const setLoadingTrendingClassesAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_LOADING_TRENDING_CLASSES,\r\n payload: data,\r\n});\r\nexport const getTrendingClassesCountAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_TRENDING_CLASSES_COUNT,\r\n payload: data,\r\n});\r\n\r\nexport const getInProgressClassesAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_INPROGRESS_CLASSES,\r\n payload: data,\r\n});\r\nexport const setLoadingInProgressClassesAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_LOADING_INPROGRESS_CLASSES,\r\n payload: data,\r\n});\r\nexport const getInProgressClassesCountAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_INPROGRESS_CLASSES_COUNT,\r\n payload: data,\r\n});\r\n\r\nexport const getNotInProgressClassesAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_NOTINPROGRESS_CLASSES,\r\n payload: data,\r\n});\r\nexport const setLoadingNotInProgressClassesAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_LOADING_NOTINPROGRESS_CLASSES,\r\n payload: data,\r\n});\r\nexport const getNotInProgressClassesCountAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_NOTINPROGRESS_CLASSES_COUNT,\r\n payload: data,\r\n});\r\n\r\nexport const getAssignedSeriesAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_ASSIGNED_SERIES,\r\n payload: data,\r\n});\r\nexport const setLoadingAssignedSeriesAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_LOADING_ASSIGNED_SERIES,\r\n payload: data,\r\n});\r\nexport const getAssignedSeriesCountAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_ASSIGNED_SERIES_COUNT,\r\n payload: data,\r\n});\r\n\r\nexport const getCompletedSeriesAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_COMPLETED_SERIES,\r\n payload: data,\r\n});\r\nexport const setLoadingCompletedSeriesAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_LOADING_COMPLETED_SERIES,\r\n payload: data,\r\n});\r\nexport const getCompletedSeriesCountAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_COMPLETED_SERIES_COUNT,\r\n payload: data,\r\n});\r\n\r\nexport const getTrendingSeriesAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_TRENDING_SERIES,\r\n payload: data,\r\n});\r\nexport const setLoadingTrendingSeriesAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_LOADING_TRENDING_SERIES,\r\n payload: data,\r\n});\r\nexport const getTrendingSeriesCountAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_TRENDING_SERIES_COUNT,\r\n payload: data,\r\n});\r\n\r\nexport const getInProgressSeriesAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_INPROGRESS_SERIES,\r\n payload: data,\r\n});\r\nexport const setLoadingInProgressSeriesAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_LOADING_INPROGRESS_SERIES,\r\n payload: data,\r\n});\r\nexport const getInProgressSeriesCountAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_INPROGRESS_SERIES_COUNT,\r\n payload: data,\r\n});\r\nexport const getNotInProgressSeriesAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_NOTINPROGRESS_SERIES,\r\n payload: data,\r\n});\r\nexport const setLoadingNotInProgressSeriesAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_LOADING_NOTINPROGRESS_SERIES,\r\n payload: data,\r\n});\r\nexport const getNotInProgressSeriesCountAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_NOTINPROGRESS_SERIES_COUNT,\r\n payload: data,\r\n});\r\nexport const getLeaderboardAction = (data) => ({\r\n type: actionTypes.homeTypes.GET_LEADERBOARD,\r\n payload: data,\r\n});\r\nexport const getTrainingTypesDone = (data) => ({\r\n type: actionTypes.homeTypes.HOME_GET_TRAININGTYPE,\r\n payload: data,\r\n});\r\n\r\nexport const setHomeFilterAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_HOME_FILTER,\r\n payload: data,\r\n});\r\nexport const setHomeFilterSelectedAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_HOME_FILTER_SELECTED,\r\n payload: data,\r\n});\r\n\r\nexport const setHomeBannerIterationAction = (data) => ({\r\n type: actionTypes.homeTypes.SET_HOME_BANNER_ITERATION,\r\n payload: data,\r\n});\r\n\r\nexport const setInitialClassesSeriesStateAction = () => ({\r\n type: actionTypes.homeTypes.SET_INITIAL_CLASSES_SERIES_STATE,\r\n});\r\n","import actionTypes from \"../actionTypes\";\r\n\r\nexport const preLoginAction = (data) => ({\r\n type: actionTypes.loginTypes.PRE_LOGIN,\r\n payload: data,\r\n});\r\nexport const getTenantDetailsAction = (data) => ({\r\n type: actionTypes.loginTypes.GET_TENANT_DETAILS,\r\n payload: data,\r\n});\r\nexport const loginAction = (data) => ({\r\n type: actionTypes.loginTypes.LOGIN,\r\n payload: data,\r\n});\r\nexport const changePasswordAction = () => ({\r\n type: actionTypes.loginTypes.CHANGE_PASSWORD,\r\n});\r\nexport const logOutAction = () => ({\r\n type: actionTypes.loginTypes.LOGOUT,\r\n});\r\n\r\nexport const getLastLoginTimeAction = (data) => ({\r\n type: actionTypes.loginTypes.LAST_LOGIN_TIME,\r\n payload: data,\r\n});\r\n\r\nexport const setIsLoggingOutAction = (data) => ({\r\n type: actionTypes.loginTypes.IS_LOGGING_OUT,\r\n payload: data,\r\n});\r\n","import actionTypes from \"../actionTypes\";\r\n\r\nexport const getUserPrivacyPolicyAction = (data) => ({\r\n type: actionTypes.userTypes.GET_USER_PRIVACY_POLICY,\r\n payload: data,\r\n});\r\nexport const setInitialPrivacyPolicyStateAction = () => ({\r\n type: actionTypes.userTypes.SET_INITIAL_PRIVACY_POLICY_STATE,\r\n});\r\n\r\nexport const postUserPrivacyPolicyAction = (data) => ({\r\n type: actionTypes.userTypes.POST_USER_PRIVACY_POLICY,\r\n payload: data,\r\n});\r\n","import actionTypes from \"../actionTypes\";\r\n\r\nexport const validateLiveEventPasscode = (data) => ({\r\n type: actionTypes.quizTypes.VALIDATE_PASSCODE,\r\n payload: data,\r\n});\r\n\r\nexport const resetQuizToPasswordAccessPage = () => ({\r\n type: actionTypes.quizTypes.RESET_QUIZ_TO_PASSCODE_ACCESS_PAGE,\r\n payload: null,\r\n});\r\n\r\nexport const fetchQuizDetails = (data) => ({\r\n type: actionTypes.quizTypes.virtualQuiz.FETCH_QUIZ_DETAILS,\r\n payload: data,\r\n});\r\n\r\nexport const postVQAssesScoreDone = (data) => ({\r\n type: actionTypes.quizTypes.virtualQuiz.POSTVQASSESSCORE,\r\n payload: data,\r\n});\r\n\r\nexport const getVQLeaderboardDetails = (data) => ({\r\n type: actionTypes.quizTypes.virtualQuiz.FETCH_QUIZ_LEADERBOARD,\r\n payload: data,\r\n});\r\n\r\nexport const getVQQNADetails = (data) => ({\r\n type: actionTypes.quizTypes.virtualQuiz.FETCH_QUIZ_QNA,\r\n payload: data,\r\n});\r\n\r\nexport const getVQCorrectAnswerReport = (data) => ({\r\n type: actionTypes.quizTypes.virtualQuiz.FETCH_QUIZ_CORRECT_ANSWER_REPORT,\r\n payload: data,\r\n});\r\n\r\nexport const setTimerDialog = (data) => ({\r\n type: actionTypes.quizTypes.virtualQuiz.timer.SET_TIMER_DIALOG,\r\n payload: data,\r\n});\r\n\r\nexport const setSessionDialog = (data) => ({\r\n type: actionTypes.quizTypes.virtualQuiz.timer.SET_SESSION_DIALOG,\r\n payload: data,\r\n});\r\n\r\nexport const startQuizTimer = (data) => ({\r\n type: actionTypes.quizTypes.virtualQuiz.timer.VQUIZ_TIMER_STARTED,\r\n payload: data,\r\n});\r\n\r\nexport const endQuizTimer = (data) => ({\r\n type: actionTypes.quizTypes.virtualQuiz.timer.VQUIZ_TIMER_ENDED,\r\n payload: data,\r\n});\r\n\r\nexport const endQuizCounter = (data) => ({\r\n type: actionTypes.quizTypes.virtualQuiz.timer.VQUIZ_TIMER_ENDEDCOUNT,\r\n payload: data,\r\n});\r\n\r\nexport const startQuizCounter = (data) => ({\r\n type: actionTypes.quizTypes.virtualQuiz.timer.VQUIZ_TIMER_STARTEDCOUNT,\r\n payload: data,\r\n});\r\n\r\nexport const setSignalRNegotiateAction = (data) => ({\r\n type: actionTypes.quizTypes.liveQuiz.SET_SIGNALR_NAGOTIATE,\r\n payload: data,\r\n});\r\n\r\nexport const getUserChoiceCountLiveQuiz = (data) => ({\r\n type: actionTypes.quizTypes.liveQuiz.FETCH_USER_CHOICE_COUNT_LIVE_QUIZ,\r\n payload: data,\r\n});\r\n\r\nexport const getBeginEndLiveQuizQuestion = (data) => ({\r\n type: actionTypes.quizTypes.liveQuiz.FETCH_BEGIN_END_LIVE_QUIZ_QUESTION,\r\n payload: data,\r\n});\r\n\r\nexport const setLiveQuizScreenView = (data) => ({\r\n type: actionTypes.quizTypes.liveQuiz.SET_LIVE_QUIZ_SCREEN_VIEW,\r\n payload: data,\r\n});\r\nexport const postLiveQuizAssessmentScoreAction = (data) => ({\r\n type: actionTypes.quizTypes.liveQuiz.POST_LIVE_QUIZ_ASSESSMENT_SCORE,\r\n payload: data,\r\n});\r\nexport const getLiveQuizUserLeaderBoardAction = (data) => ({\r\n type: actionTypes.quizTypes.liveQuiz.GET_LIVE_QUIZ_USER_LEADERBOARD,\r\n payload: data,\r\n});\r\nexport const setLiveQuizNormalExitAction = (data) => ({\r\n type: actionTypes.quizTypes.liveQuiz.SET_LIVE_QUIZ_NORMAL_EXIT,\r\n payload: data,\r\n});\r\n","import actionTypes from \"../actionTypes\";\r\nexport const addRemoveFavoriteSeriesAction = () => ({\r\n type: actionTypes.seriesTypes.ADD_REMOVE_FAVORITE_SERIES,\r\n});\r\n\r\nexport const getClassesBySeriesIdAction = (data) => ({\r\n type: actionTypes.seriesTypes.GET_CLASSES_BY_SERIESID,\r\n payload: data,\r\n});\r\n","import actionTypes from \"../actionTypes\";\r\n\r\nexport const getAllPublishedTopicsAction = (data) => ({\r\n type: actionTypes.topicsTypes.GET_ALL_PUBLISHED_TOPICS,\r\n payload: data,\r\n});\r\nexport const setLoadingPublishedTopicsAction = (data) => ({\r\n type: actionTypes.topicsTypes.SET_LOADING_PUBLISHED_TOPICS,\r\n payload: data,\r\n});\r\nexport const getAllPublishedTopicsCountAction = (data) => ({\r\n type: actionTypes.topicsTypes.GET_ALL_PUBLISHED_TOPICS_COUNT,\r\n payload: data,\r\n});\r\n\r\nexport const getSubTopicsAction = (data) => ({\r\n type: actionTypes.topicsTypes.GET_SUB_TOPICS,\r\n payload: data,\r\n});\r\n\r\nexport const getTopicDetailsAction = (data) => ({\r\n type: actionTypes.topicsTypes.GET_TOPIC_DETAILS,\r\n payload: data,\r\n});\r\nexport const setLoadingTopicsDetailsAction = (data) => ({\r\n type: actionTypes.topicsTypes.SET_LOADING_TOPICS_DETAILS,\r\n payload: data,\r\n});\r\n\r\nexport const setInitialTopicsStateAction = () => ({\r\n type: actionTypes.topicsTypes.SET_INITIAL_TOPICS_STATE,\r\n});\r\n","import actionTypes from \"../actionTypes\";\r\n\r\nexport const isUserExistsAction = (data) => ({\r\n type: actionTypes.userTypes.IS_USER_EXISTS,\r\n payload: data,\r\n});\r\nexport const isUserActiveAction = (data) => ({\r\n type: actionTypes.userTypes.IS_USER_ACTIVE,\r\n payload: data,\r\n});\r\nexport const isMailSentForForgotPasswordAction = (data) => ({\r\n type: actionTypes.userTypes.IS_MAIL_SENT_FORGOT_PASSWORD,\r\n payload: data,\r\n});\r\nexport const isPasswordResetRequiredAction = (data) => ({\r\n type: actionTypes.userTypes.IS_PASSWORD_RESET_REQUIRED,\r\n payload: data,\r\n});\r\nexport const getUserProfileAction = (data) => ({\r\n type: actionTypes.userTypes.GET_USER_PROFILE,\r\n payload: data,\r\n});\r\nexport const setIsPasswordResetDone = (data) => ({\r\n type: actionTypes.userTypes.IS_PASSWORD_RESET_DONE,\r\n payload: data,\r\n});\r\n","import {\r\n ADD_REMOVE_FAVORITE_CLASS_API_URL,\r\n GET_CLASS_ASSET_ID_API_URL,\r\n GET_CLASS_DETAILS_API_URL,\r\n GET_NEXT_CLASS_API_URL,\r\n GET_NEXT_CLASS_IN_SERIES_API_URL,\r\n GET_QUERIES_CLASS_API_URL,\r\n GET_RELATED_CLASSES_API_URL,\r\n GET_SCORM_BOOKMARK_API_URL,\r\n GET_SCORM_VERSION_API_URL,\r\n GET_USER_CLASS_ACCESS_API_URL,\r\n POST_ASSESSMENT_SCORE_API_URL,\r\n POST_QUERY_CLASS_API_URL,\r\n POST_QUERY_COMMENT_API_URL,\r\n POST_RATING_CLASS_API_URL,\r\n POST_SURVEY_API_URL,\r\n UPDATE_CLASS_PROGRESS_STATUS_API_URL,\r\n UPDATE_VIDEO_PLAYED_DURATION_API_URL,\r\n} from \"../../../utils/devApiContants\";\r\nimport * as classActionCreator from \"../actionCreators/classActionCreator\";\r\nimport {\r\n getCompletedClassesAction,\r\n getInProgressClassesAction,\r\n getNotInProgressClassesAction,\r\n getTrendingClassesAction,\r\n} from \"../actionCreators/homeActionCreator\";\r\nimport { getClassesBySeriesIdAction } from \"../actionCreators/seriesActionCreator\";\r\nimport { logoutHandler } from \"./loginActionHandler\";\r\nimport {\r\n setErrorHandler,\r\n setLoadingHandler,\r\n unSetLoadingHandler,\r\n} from \"./errorActionHandler\";\r\nimport { errorTypes } from \"../../../utils/errorTypes\";\r\nimport * as topicsActionCreator from \"../actionCreators/topicsActionCreator\";\r\nimport * as globalSearchActionCreator from \"../actionCreators/globalSearchActionCreator\";\r\nimport { FormattedMessage } from \"react-intl\";\r\nimport {\r\n getOtherFavoriteClassesAction,\r\n getOtherFavoriteClassesCountAction,\r\n} from \"../actionCreators/favoriteActionCreator\";\r\nconst { SUCCESS, WARN, FAIL } = errorTypes;\r\n\r\nexport const getClassTabHandler = (data) => (dispatch) => {\r\n dispatch(classActionCreator.getClassTabAction(data));\r\n};\r\n\r\nexport const getUserClassAccessActionHandler =\r\n (classID) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n return await fetch(GET_USER_CLASS_ACCESS_API_URL + classID, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n return result;\r\n })\r\n .catch((err) => {\r\n console.log(\"error \" + err);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\nexport const getClassDetailsHandler =\r\n (classID, navigate, variant) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n dispatch(classActionCreator.getClassDetailsAction(\"null\"));\r\n let url = null;\r\n if (variant)\r\n url = GET_CLASS_DETAILS_API_URL + classID + \"?locale=\" + variant;\r\n else url = GET_CLASS_DETAILS_API_URL + classID;\r\n\r\n await fetch(url, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => {\r\n if (response.status === 200) {\r\n return response.json();\r\n } else if (response.status === 401) {\r\n // localStorage.clear();\r\n // sessionStorage.clear();\r\n // navigate(\"/\");\r\n dispatch(logoutHandler(navigate));\r\n }\r\n })\r\n .then((result) => {\r\n const convertInSecs = (time) => {\r\n if (time === null) {\r\n time = \"00:00:00\";\r\n }\r\n let a = time.split(\":\");\r\n let seconds = +a[0] * 60 * 60 + +a[1] * 60 + +a[2];\r\n return seconds;\r\n };\r\n const getWidthInPercentage = (durPlayed, totalDur) => {\r\n if (durPlayed === 0 && totalDur === 0) return 0;\r\n\r\n let perWidth = (durPlayed / totalDur) * 100;\r\n if (perWidth > 100) return 100;\r\n else return perWidth;\r\n };\r\n\r\n if (result.Mediatype === 1) {\r\n let videoDuration = convertInSecs(result?.VideoDuration);\r\n let videoDurationPlayed = convertInSecs(result?.VideoDurationPlayed);\r\n let width = getWidthInPercentage(videoDurationPlayed, videoDuration);\r\n\r\n result.width = width;\r\n result.videoDurationInNumber = videoDuration;\r\n result.videoDurationPlayedInNumber = videoDurationPlayed;\r\n dispatch(classActionCreator.getClassDetailsAction(result));\r\n dispatch(getClassAssetIdHandler(result.AssetId)).then(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n } else {\r\n dispatch(unSetLoadingHandler());\r\n if (result.Mediatype === 2) {\r\n let videoDuration = convertInSecs(result?.VideoDuration);\r\n let videoDurationPlayed = convertInSecs(\r\n result?.VideoDurationPlayed\r\n );\r\n let width = getWidthInPercentage(\r\n videoDurationPlayed,\r\n videoDuration\r\n );\r\n\r\n result.width = width;\r\n result.videoDurationInNumber = videoDuration;\r\n result.videoDurationPlayedInNumber = videoDurationPlayed;\r\n dispatch(classActionCreator.getClassDetailsAction(result));\r\n }\r\n if (result.Mediatype === 9) {\r\n dispatch(getScormVersionHandler(result.ID));\r\n dispatch(getScormBookmarkHandler(result.ID));\r\n dispatch(classActionCreator.getClassDetailsAction(result));\r\n } else {\r\n dispatch(classActionCreator.getClassDetailsAction(result));\r\n }\r\n }\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"error \" + error);\r\n });\r\n // .finally(() => {\r\n // dispatch(unSetLoadingHandler());\r\n // });\r\n };\r\n\r\nexport const getClassAssetIdHandler = (id) => async (dispatch) => {\r\n // dispatch(setLoadingHandler());\r\n\r\n return await fetch(GET_CLASS_ASSET_ID_API_URL + id, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n localStorage.setItem(\"classAssetId\", JSON.stringify(result));\r\n dispatch(classActionCreator.getClassAssetIdAction(result));\r\n return result;\r\n })\r\n\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n });\r\n // .finally(() => {\r\n // dispatch(unSetLoadingHandler());\r\n // });\r\n};\r\n\r\nexport const getClassQueriesHandler = (classId) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n await fetch(GET_QUERIES_CLASS_API_URL, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n const queriesById = result?.filter(\r\n (query) => query?.RelatedId === classId.toString()\r\n );\r\n dispatch(classActionCreator.getClassQueriesAction(queriesById));\r\n })\r\n\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const postQueryCommentActionHandler =\r\n (queries, classId, navigate) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n await fetch(POST_QUERY_COMMENT_API_URL, {\r\n method: \"PUT\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n body: JSON.stringify(queries),\r\n })\r\n .then((response) => {\r\n if (response.status === 415) {\r\n dispatch(setErrorHandler(FAIL, `Unsupported Media Type`));\r\n } else if (response.status === 401) {\r\n dispatch(logoutHandler(navigate));\r\n } else {\r\n dispatch(\r\n setErrorHandler(\r\n SUCCESS,\r\n \r\n )\r\n );\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n dispatch(getClassQueriesHandler(classId));\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n });\r\n };\r\n\r\nexport const postQueryClassActionHandler =\r\n (queries, classId, navigate) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n await fetch(POST_QUERY_CLASS_API_URL, {\r\n method: \"POST\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n body: JSON.stringify(queries),\r\n })\r\n .then((response) => {\r\n if (response.status === 415) {\r\n dispatch(setErrorHandler(FAIL, `Unsupported Media Type`));\r\n } else if (response.status === 401) {\r\n dispatch(logoutHandler(navigate));\r\n } else {\r\n dispatch(\r\n setErrorHandler(\r\n SUCCESS,\r\n \r\n )\r\n );\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n dispatch(getClassQueriesHandler(classId));\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n });\r\n };\r\n\r\nexport const getScormVersionHandler = (id) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n\r\n await fetch(GET_SCORM_VERSION_API_URL + id, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n dispatch(classActionCreator.getScormVersionAction(result));\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const getScormBookmarkHandler = (id) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n\r\n await fetch(GET_SCORM_BOOKMARK_API_URL + id, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n dispatch(classActionCreator.getScormBookmarkAction(result));\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const updateClassProgressStatusActionHandler =\r\n (classId, status) => async () => {\r\n return await fetch(\r\n UPDATE_CLASS_PROGRESS_STATUS_API_URL + classId + \"&status=\" + status,\r\n\r\n {\r\n method: \"PUT\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n console.log(result);\r\n return result;\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n });\r\n };\r\nexport const updateVideoPlayedDuration =\r\n (classId, videoDuration) => async (dispatch) => {\r\n // UPDATE_VIDEO_PLAYED_DURATION\r\n return await fetch(\r\n UPDATE_VIDEO_PLAYED_DURATION_API_URL +\r\n classId +\r\n \"&duration=\" +\r\n videoDuration,\r\n\r\n {\r\n method: \"PUT\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n return result;\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n });\r\n };\r\nexport const addRemoveFavoriteClassHandler =\r\n (id, isAddTrue, navigate, tab) => async (dispatch, getState) => {\r\n // dispatch(setLoadingHandler());\r\n\r\n await fetch(\r\n ADD_REMOVE_FAVORITE_CLASS_API_URL +\r\n id +\r\n \"/favouritenew?IsClassFav=\" +\r\n isAddTrue,\r\n {\r\n method: \"PUT\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n }\r\n )\r\n .then((response) => {\r\n if (response.status === 200) {\r\n return response.json();\r\n } else {\r\n dispatch(logoutHandler(navigate));\r\n }\r\n })\r\n .then((json) => {\r\n // dispatch(getAssignedClassesHandle r(1, 20, \"en-GB\", navigate));\r\n if (tab === \"assigned\") {\r\n let updatedArray = getState().homeReducer?.notInProgressClasses?.map(\r\n (shotclass) => {\r\n if (shotclass?.ID !== id) {\r\n return shotclass;\r\n } else {\r\n return { ...shotclass, IsFavourite: json.IsFavourite };\r\n }\r\n }\r\n );\r\n dispatch(getNotInProgressClassesAction(updatedArray));\r\n } else if (tab === \"inProgress\") {\r\n let updatedArray = getState().homeReducer?.inProgressClasses?.map(\r\n (shotclass) => {\r\n if (shotclass?.ID !== id) {\r\n return shotclass;\r\n } else {\r\n return { ...shotclass, IsFavourite: json.IsFavourite };\r\n }\r\n }\r\n );\r\n dispatch(getInProgressClassesAction(updatedArray));\r\n } else if (tab === \"trending\") {\r\n let updatedArray = getState().homeReducer?.trendingClasses?.map(\r\n (shotclass) => {\r\n if (shotclass?.ID !== id) {\r\n return shotclass;\r\n } else {\r\n return { ...shotclass, IsFavourite: json.IsFavourite };\r\n }\r\n }\r\n );\r\n dispatch(getTrendingClassesAction(updatedArray));\r\n } else if (tab === \"completed\") {\r\n let updatedArray = getState().homeReducer?.completedClasses?.map(\r\n (shotclass) => {\r\n if (shotclass?.ID !== id) {\r\n return shotclass;\r\n } else {\r\n return { ...shotclass, IsFavourite: json.IsFavourite };\r\n }\r\n }\r\n );\r\n dispatch(getCompletedClassesAction(updatedArray));\r\n } else if (tab === \"series\") {\r\n let updatedArray =\r\n getState().seriesReducer?.classesBySeriesId?.Content?.map(\r\n (shotclass) => {\r\n if (shotclass?.ID !== id) {\r\n return shotclass;\r\n } else {\r\n return { ...shotclass, IsFavourite: json.IsFavourite };\r\n }\r\n }\r\n );\r\n dispatch(\r\n getClassesBySeriesIdAction({\r\n ...getState().seriesReducer?.classesBySeriesId,\r\n Content: updatedArray,\r\n })\r\n );\r\n } else if (tab === \"related\") {\r\n let updatedArray = getState().classReducer?.relatedClasses?.map(\r\n (shotclass) => {\r\n if (shotclass?.ID !== id) {\r\n return shotclass;\r\n } else {\r\n return { ...shotclass, IsFavourite: json.IsFavourite };\r\n }\r\n }\r\n );\r\n dispatch(classActionCreator.getRelatedClassesAction(updatedArray));\r\n } else if (tab === \"topicDetails\") {\r\n let topicShotclass =\r\n getState().topicsReducer?.topicDetails?.TopicCourses?.Shotclass;\r\n let updatedArray = topicShotclass?.map((shotclass) => {\r\n if (shotclass?.ID !== id) {\r\n return shotclass;\r\n } else {\r\n return { ...shotclass, IsFavourite: json.IsFavourite };\r\n }\r\n });\r\n let topicResult = {\r\n ...getState().topicsReducer?.topicDetails,\r\n TopicCourses: {\r\n ...getState().topicsReducer?.topicDetails?.TopicCourses,\r\n Shotclass: updatedArray,\r\n },\r\n };\r\n\r\n dispatch(topicsActionCreator.getTopicDetailsAction(topicResult));\r\n } else if (tab === \"globalSearch\") {\r\n let globalSearch = getState().globalSearchReducer.globalSearch;\r\n let selectedItem = globalSearch.find(\r\n (x) => x.GlobalSearch.ShotClassId === id\r\n );\r\n selectedItem.GlobalSearch.IsClassFavourite = json.IsFavourite;\r\n dispatch(globalSearchActionCreator.getSearchResultDone(globalSearch));\r\n } else if (tab === \"other\") {\r\n let updatedArray =\r\n getState().favoriteReducer?.otherFavoriteClasses?.map(\r\n (shotclass) => {\r\n if (shotclass?.ID !== id) {\r\n return shotclass;\r\n } else {\r\n return { ...shotclass, IsFavourite: json.IsFavourite };\r\n }\r\n }\r\n );\r\n dispatch(getOtherFavoriteClassesAction(updatedArray));\r\n dispatch(getOtherFavoriteClassesCountAction(updatedArray?.length));\r\n }\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n });\r\n };\r\n\r\nexport const postAssessmentScoreActionHandler =\r\n (obj, classID, tab, navigate, finish) => async (dispatch) => {\r\n dispatch(setLoadingHandler()); \r\n return await fetch(\r\n POST_ASSESSMENT_SCORE_API_URL + classID + \"/assessScores\",\r\n {\r\n method: \"POST\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n body: JSON.stringify(obj),\r\n }\r\n )\r\n .then((response) => {\r\n let tenanatObj = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n if (response.status === 200) {\r\n return response.json();\r\n } else if (\r\n response.status === 401 &&\r\n tenanatObj.SecurityProviderName !== \"aad\"\r\n ) {\r\n dispatch(logoutHandler(navigate));\r\n }\r\n })\r\n .then((result) => {\r\n dispatch(\r\n classActionCreator.postAssessmentScoreAction(\r\n obj?.IsUserAssessmentSuccess\r\n )\r\n );\r\n if (!!tab && tab?.type === \"series\") {\r\n dispatch(getNextClassOfSeriesActionHandler(tab?.seriesId));\r\n } else {\r\n dispatch(getNextClassActionHandler());\r\n }\r\n // dispatch(unSetLoadingHandler());\r\n if (finish) {\r\n dispatch(classActionCreator.setCurrentViewAction(3));\r\n }\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\n\r\nexport const getNextClassOfSeriesActionHandler =\r\n (seriesId) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n\r\n fetch(GET_NEXT_CLASS_IN_SERIES_API_URL + seriesId, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (result?.RelatedSeries?.length > 0) {\r\n let updatedRelatedSeries = result?.RelatedSeries?.map((series) => {\r\n return { ...series, Type: \"Program\" };\r\n });\r\n dispatch(\r\n classActionCreator.getNextClassInSeriesAction({\r\n ...result,\r\n RelatedSeries: updatedRelatedSeries,\r\n })\r\n );\r\n } else {\r\n dispatch(classActionCreator.getNextClassInSeriesAction(result));\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\nexport const getNextClassActionHandler = () => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n\r\n fetch(GET_NEXT_CLASS_API_URL, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (result.Variants !== undefined) {\r\n dispatch(classActionCreator.getNextClassAction(result));\r\n // navigate(`/shotclass/${result.Variants[0]?.Id}`);\r\n } else {\r\n dispatch(classActionCreator.getNextClassAction([]));\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const getRelatedClassesActionHandler =\r\n (locale, relClassId, setCurrentView) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n fetch(GET_RELATED_CLASSES_API_URL + locale + \"&searchText=\" + relClassId, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n dispatch(classActionCreator.getRelatedClassesAction(result.Content));\r\n if (result.Content.length > 0) {\r\n setCurrentView(4);\r\n } else {\r\n dispatch(\r\n setErrorHandler(\r\n WARN,\r\n \r\n )\r\n );\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\n\r\nexport const postRatingForClassActionHandler =\r\n (ratingObj, classId) => (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n\r\n fetch(POST_RATING_CLASS_API_URL + classId + \"/rating\", {\r\n method: \"PUT\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n body: JSON.stringify(ratingObj),\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n // dispatch(putRatingDone(json));\r\n console.log(json);\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\n\r\nexport const setSelectedQuizOptionActionHandler =\r\n (questionId, answerId) => (dispatch, getState) => {\r\n let classDetailsForQuiz = getState().classReducer?.classDetails;\r\n let updatedClassDetailsForQuiz =\r\n classDetailsForQuiz?.AssessmentSet?.QuestionList.map((question) => {\r\n if (question.ID !== questionId) {\r\n return { ...question };\r\n } else if (question.ID === questionId) {\r\n question.isAnswered = true;\r\n question.ChoiceList.map((answer) => {\r\n if (answer.ID !== answerId) {\r\n answer.Isselected = false;\r\n } else if (answer.ID === answerId) {\r\n answer.Isselected = true;\r\n if (answer.Isselected === true && answer.IsAnswer === true) {\r\n question.correctlyAnswered = true;\r\n } else {\r\n question.correctlyAnswered = false;\r\n }\r\n }\r\n return { ...answer };\r\n });\r\n }\r\n return { ...question };\r\n });\r\n console.log(updatedClassDetailsForQuiz);\r\n let dataAfterUpdate = {\r\n ...classDetailsForQuiz,\r\n AssessmentSet: {\r\n ...classDetailsForQuiz.AssessmentSet,\r\n QuestionList: updatedClassDetailsForQuiz,\r\n },\r\n };\r\n dispatch(classActionCreator.getClassDetailsAction(dataAfterUpdate));\r\n };\r\n\r\nexport const clearSelectedQuizOptionActionHandler =\r\n () => (dispatch, getState) => {\r\n let classDetailsForQuiz = getState().classReducer?.classDetails;\r\n let updatedClassDetailsForQuiz =\r\n classDetailsForQuiz?.AssessmentSet?.QuestionList.map((question) => {\r\n question.isAnswered = false;\r\n question.correctlyAnswered = false;\r\n question.ChoiceList.map((answer) => {\r\n answer.Isselected = false;\r\n return { ...answer };\r\n });\r\n return { ...question };\r\n });\r\n let dataAfterUpdate = {\r\n ...classDetailsForQuiz,\r\n AssessmentSet: {\r\n ...classDetailsForQuiz.AssessmentSet,\r\n QuestionList: updatedClassDetailsForQuiz,\r\n },\r\n };\r\n dispatch(classActionCreator.getClassDetailsAction(dataAfterUpdate));\r\n };\r\n\r\nexport const postSurveyActionHandler =\r\n (obj, tab, navigate, setCurrentView, setViewNumber) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n\r\n fetch(POST_SURVEY_API_URL, {\r\n method: \"POST\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n body: JSON.stringify(obj),\r\n })\r\n .then((response) => {\r\n if (response.status === 401) {\r\n dispatch(logoutHandler(navigate));\r\n }\r\n return response.json();\r\n })\r\n .then((result) => {\r\n console.log(result);\r\n dispatch(classActionCreator.postAssessmentScoreAction(true));\r\n if (!!tab && tab?.type === \"series\") {\r\n dispatch(getNextClassOfSeriesActionHandler(tab?.seriesId));\r\n } else {\r\n dispatch(getNextClassActionHandler());\r\n }\r\n if (setViewNumber) {\r\n setCurrentView(setViewNumber);\r\n }\r\n })\r\n\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\n\r\nexport const setSelectedSurveyOptionActionHandler =\r\n (questionId, answerId) => (dispatch, getState) => {\r\n let classDetailsForSurvey = getState().classReducer?.classDetails;\r\n let updatedClassDetailsForSurvey =\r\n classDetailsForSurvey?.Survey?.Questions.map((question) => {\r\n if (question.Id !== questionId) {\r\n return { ...question };\r\n } else if (question.Id === questionId) {\r\n question.isAnswered = true;\r\n question?.Choices?.map((answer) => {\r\n if (answer.Id !== answerId) {\r\n answer.Isselected = false;\r\n } else if (answer.Id === answerId) {\r\n answer.Isselected = true;\r\n }\r\n return { ...answer };\r\n });\r\n }\r\n return { ...question };\r\n });\r\n let dataAfterUpdate = {\r\n ...classDetailsForSurvey,\r\n Survey: {\r\n ...classDetailsForSurvey.Survey,\r\n Questions: updatedClassDetailsForSurvey,\r\n },\r\n };\r\n dispatch(classActionCreator.getClassDetailsAction(dataAfterUpdate));\r\n };\r\n\r\nexport const setSelectedSurveyMultiOptionActionHandler =\r\n (questionId, answerId) => (dispatch, getState) => {\r\n let classDetailsForSurvey = getState().classReducer?.classDetails;\r\n let updatedClassDetailsForSurvey =\r\n classDetailsForSurvey?.Survey?.Questions.map((question) => {\r\n if (question.Id !== questionId) {\r\n return { ...question };\r\n } else if (question.Id === questionId) {\r\n let count = 0;\r\n question?.Choices?.map((answer) => {\r\n if (answer.Id === answerId) {\r\n if (answer.Isselected === true) {\r\n answer.Isselected = false;\r\n } else {\r\n answer.Isselected = true;\r\n }\r\n }\r\n if (answer.Isselected === true) {\r\n count++;\r\n }\r\n return { ...answer };\r\n });\r\n if (count > 0) {\r\n question.isAnswered = true;\r\n } else {\r\n question.isAnswered = false;\r\n }\r\n }\r\n return { ...question };\r\n });\r\n let dataAfterUpdate = {\r\n ...classDetailsForSurvey,\r\n Survey: {\r\n ...classDetailsForSurvey.Survey,\r\n Questions: updatedClassDetailsForSurvey,\r\n },\r\n };\r\n dispatch(classActionCreator.getClassDetailsAction(dataAfterUpdate));\r\n };\r\n\r\nexport const setEnteredTextSurveyActionHandler =\r\n (questionId, text) => (dispatch, getState) => {\r\n let classDetailsForSurvey = getState().classReducer?.classDetails;\r\n let updatedClassDetailsForSurvey =\r\n classDetailsForSurvey?.Survey?.Questions.map((question) => {\r\n if (question.Id !== questionId) {\r\n return { ...question };\r\n } else if (question.Id === questionId) {\r\n if (text?.length > 0 && text?.length < 301) {\r\n question.textAnswer = text;\r\n question.isAnswered = true;\r\n } else if (text?.length > 300) {\r\n dispatch(setErrorHandler(WARN, ));\r\n question.isAnswered = true;\r\n } else if (text?.length === 0) {\r\n question.textAnswer = text;\r\n question.isAnswered = false;\r\n }\r\n }\r\n return { ...question };\r\n });\r\n let dataAfterUpdate = {\r\n ...classDetailsForSurvey,\r\n Survey: {\r\n ...classDetailsForSurvey.Survey,\r\n Questions: updatedClassDetailsForSurvey,\r\n },\r\n };\r\n dispatch(classActionCreator.getClassDetailsAction(dataAfterUpdate));\r\n };\r\n","import {\r\n GET_GENERAL_QUERIES_API_URL,\r\n PUT_GENERAL_QUERIES_API_URL,\r\n POST_GENERAL_QUERIES_API_URL,\r\n GET_FORUM_TOPICS_API_URL,\r\n SHOTCLASS_API_URL\r\n} from \"../../../utils/devApiContants\";\r\nimport * as connectActionCreator from \"../actionCreators/connectActionCreator\";\r\nimport { errorTypes } from \"../../../utils/errorTypes\";\r\nimport { setErrorHandler, setLoadingHandler, unSetLoadingHandler } from \"./errorActionHandler\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nconst { FAIL, SUCCESS } = errorTypes;\r\nexport const getGeneralQueriesHandler = (isLoad) => async (dispatch) => {\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(GET_GENERAL_QUERIES_API_URL, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n dispatch(connectActionCreator.getGeneralQueriesAction(result));\r\n })\r\n\r\n .catch((error) => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log(\"error \" + error);\r\n }).finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\nexport const putQueries = (queries, isLoad) => async (dispatch) => {\r\n console.log(queries);\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(PUT_GENERAL_QUERIES_API_URL, {\r\n method: 'PUT',\r\n headers: JSON.parse(localStorage.getItem('headers')),\r\n body: JSON.stringify(queries),\r\n }).then(response => {\r\n if (response.status === 415) {\r\n dispatch(setErrorHandler(FAIL, `Unsupported Media Type`));\r\n } else if (response.status === 401) {\r\n console.log('putQueries CLOSE');\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n window.location.href = '/';\r\n } else {\r\n dispatch(setErrorHandler(SUCCESS, ));\r\n dispatch(getGeneralQueriesHandler(true));\r\n }\r\n }).catch(error => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log('error ' + error);\r\n }).finally(() => {\r\n // dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const postExpertCornerQuery = (queries, toggleSubmitSuccess, isLoad) => async (dispatch) => {\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(POST_GENERAL_QUERIES_API_URL, {\r\n method: 'POST',\r\n headers: JSON.parse(localStorage.getItem('headers')),\r\n body: JSON.stringify(queries),\r\n }).then(response => {\r\n if (response.status === 415) {\r\n dispatch(setErrorHandler(FAIL, `Unsupported Media Type`));\r\n } else if (response.status === 401) {\r\n console.log('postExpertCornerQuery CLOSE');\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n window.location.href = '/';\r\n } else {\r\n dispatch(getGeneralQueriesHandler(true));\r\n // dispatch(setErrorHandler(SUCCESS, `Query posted successfully`));\r\n toggleSubmitSuccess();\r\n }\r\n }).catch(error => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log('error ' + error);\r\n });\r\n};\r\n\r\nexport const getForumTopics = (isLoad) => async (dispatch, getState) => {\r\n console.log('current stateI:', getState());\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(GET_FORUM_TOPICS_API_URL, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n dispatch(connectActionCreator.getForumTopicsDone(result.Content));\r\n })\r\n\r\n .catch((error) => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log(\"error \" + error);\r\n }).finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const putForumFollowUnfollow = (Id, IsForumFollowed) => async (dispatch, getState) => {\r\n await fetch(SHOTCLASS_API_URL + '/forums/forumtopics/topic?topicId=' + Id + '&IsForumFollowed=' + !IsForumFollowed, {\r\n method: 'PUT',\r\n headers: JSON.parse(localStorage.getItem('headers')),\r\n }).then(response => response.json())\r\n .then(json => {\r\n let object = getState().connectReducer.forumTopics.find(x => x.Id === Id)\r\n object.IsForumFollowed = json.ForumFollowed;\r\n dispatch(connectActionCreator.putForumFollowUnfollowDone(json));\r\n console.log('current stateS details:', getState());\r\n return json;\r\n })\r\n .catch(error => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log('error ' + error);\r\n }).finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const getForumTopicsDetails = (Id, isLoad) => async (dispatch, getState) => {\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(GET_FORUM_TOPICS_API_URL + '/' + Id + '/threads?&pageNum=1&pageSize=10', {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then(response => {\r\n var tenanatObj = JSON.parse(localStorage.tenantData);\r\n console.log('getForumTopicsDetails response.status -- ', response.status);\r\n if (response.status === 200) {\r\n response.json().then(json => {\r\n dispatch(connectActionCreator.getForumTopicsDetailsDone(json));\r\n console.log('current stateS details:', getState());\r\n return json.Content;\r\n });\r\n } else if (response.status === 401 && tenanatObj.SecurityProviderName !== 'aad') {\r\n console.log('getForumTopicsDetails CLOSE');\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n window.location.href = '/';\r\n }\r\n })\r\n .catch((error) => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log(\"error \" + error);\r\n }).finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const postForumThread = (threads, toggleSubmitSuccess, isLoad) => async (dispatch) => {\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(SHOTCLASS_API_URL + '/forums/forumtopics/threads', {\r\n method: 'POST',\r\n headers: JSON.parse(localStorage.getItem('headers')),\r\n body: JSON.stringify(threads),\r\n }).then(response => {\r\n if (response.status === 415) {\r\n dispatch(setErrorHandler(FAIL, `Unsupported Media Type`));\r\n } else if (response.status === 401) {\r\n console.log('postExpertCornerQuery CLOSE');\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n window.location.href = '/';\r\n } else {\r\n dispatch(getForumTopicsDetails(threads.TopicsId, true));\r\n // dispatch(setErrorHandler(SUCCESS, `Thread posted successfully`));\r\n toggleSubmitSuccess();\r\n }\r\n }).catch(error => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log('error ' + error);\r\n }).finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const getForumTopicsComments = (ThreadId, TopicsId, isLoad) => async (dispatch, getState) => {\r\n console.log('current stateI:', getState());\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(GET_FORUM_TOPICS_API_URL + '/' + TopicsId + '/threads/' + ThreadId + '/comments', {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then(response => {\r\n var tenanatObj = JSON.parse(localStorage.tenantData);\r\n console.log('getForumTopicsComments response.status -- ', response.status);\r\n if (response.status === 200) {\r\n response.json().then(json => {\r\n dispatch(connectActionCreator.getForumTopicCommentsDone(json));\r\n console.log('current stateS details:', getState());\r\n return json;\r\n });\r\n } else if (response.status === 401 && tenanatObj.SecurityProviderName !== 'aad') {\r\n console.log('getForumTopicsComments CLOSE');\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n window.location.href = '/';\r\n }\r\n })\r\n .then(json => {\r\n dispatch(getForumTopicsDetails(TopicsId, false));\r\n })\r\n .catch((error) => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log(\"error \" + error);\r\n }).finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const postForumComments = (ThreadId, TopicsId, comments, isLoad) => async (dispatch) => {\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(SHOTCLASS_API_URL + '/forumtopics/' + TopicsId + '/threads/' + ThreadId + '/comments', {\r\n method: 'POST',\r\n headers: JSON.parse(localStorage.getItem('headers')),\r\n body: JSON.stringify(comments),\r\n }).then(response => {\r\n if (response.status === 415) {\r\n dispatch(setErrorHandler(FAIL, `Unsupported Media Type`));\r\n } else if (response.status === 401) {\r\n console.log('Put Forum Comments CLOSE');\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n window.location.href = '/';\r\n } else {\r\n dispatch(setErrorHandler(SUCCESS, ));\r\n dispatch(getForumTopicsComments(ThreadId, TopicsId, true));\r\n }\r\n }).catch(error => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log('error ' + error);\r\n }).finally(() => {\r\n // dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const deleteThread = (ThreadId, TopicsId, isLoad) => async (dispatch) => {\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(SHOTCLASS_API_URL + '/forums/threads/' + ThreadId, {\r\n method: 'DELETE',\r\n headers: JSON.parse(localStorage.getItem('headers')),\r\n }).then(response => response.json())\r\n .then(json => {\r\n dispatch(connectActionCreator.deleteThreadDone(json));\r\n return json;\r\n })\r\n .then(json => {\r\n dispatch(setErrorHandler(SUCCESS,));\r\n dispatch(getForumTopicsDetails(TopicsId, true));\r\n })\r\n .catch(error => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log('error ' + error);\r\n }).finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const getPolls = (isLoad) => async (dispatch, getState) => {\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(SHOTCLASS_API_URL + '/me/polls', {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then(response => {\r\n var tenanatObj = JSON.parse(localStorage.tenantData);\r\n console.log('getPolls response.status -- ', response.status);\r\n if (response.status === 200) {\r\n response.json().then(json => {\r\n dispatch(connectActionCreator.getPollsDone(json));\r\n console.log('current stateS:getPollsDone', getState());\r\n return json;\r\n });\r\n } else if (response.status === 401 && tenanatObj.SecurityProviderName !== 'aad') {\r\n console.log('getPolls CLOSE');\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n window.location.href = '/';\r\n }\r\n })\r\n .catch((error) => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log(\"error \" + error);\r\n }).finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const getPollsInNotification = (setData) => async () => {\r\n await fetch(SHOTCLASS_API_URL + '/me/polls', {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then(response => {\r\n if (response.status === 200) {\r\n response.json().then(json => {\r\n setData(json.Data)\r\n console.log(json.Data)\r\n });\r\n }})\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n })\r\n};\r\n\r\nexport const getPollsHistoryInNotification = (setData) => async () => {\r\n await fetch(SHOTCLASS_API_URL + '/me/polls/history', {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then(response => {\r\n if (response.status === 200) {\r\n response.json().then(json => {\r\n setData(json.Data)\r\n console.log(json.Data)\r\n });\r\n }})\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n })\r\n};\r\n\r\nexport const getResponse = (pollId, distributionId, isLoad) => async (dispatch, getState) => {\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(SHOTCLASS_API_URL + '/polls' + '/' + pollId + '/' + distributionId + '/response', {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then(response => {\r\n var tenanatObj = JSON.parse(localStorage.tenantData);\r\n console.log('getPolls response.status -- ', response.status);\r\n if (response.status === 200) {\r\n response.json().then(json => {\r\n if (json.Data === null) {\r\n window.location.href = '/home/assigned';\r\n return;\r\n } else {\r\n dispatch(connectActionCreator.getResponseDone(json.Data));\r\n console.log('current stateS details:', getState());\r\n return json.Data;\r\n }\r\n });\r\n } else if (response.status === 401 && tenanatObj.SecurityProviderName !== \"aad\") {\r\n console.log('getResponse CLOSE');\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n window.location.href = '/';\r\n }\r\n })\r\n .catch((error) => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log(\"error \" + error);\r\n }).finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const pollResponseByPollId = (pollId, distributionId, setData) => async() => {\r\n \r\n await fetch(SHOTCLASS_API_URL + '/polls/' + pollId + '/' + distributionId + '/response', {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then(response => {\r\n if (response.status === 200) {\r\n response.json().then(json => {\r\n if(json.Data)\r\n setData(json.Data)\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n })\r\n}\r\n\r\nexport const isPollAvailable = (isLoad) => async (dispatch, getState) => {\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(SHOTCLASS_API_URL + '/polls/available', {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then(response => {\r\n var tenanatObj = JSON.parse(localStorage.tenantData)\r\n console.log('isPollAvailable response.status -- ', response.status);\r\n if (response.status === 200) {\r\n response.json().then(json => {\r\n dispatch(connectActionCreator.isPollAvailableDone(json));\r\n console.log('current stateS:isPollAvailableDone', getState());\r\n return json;\r\n });\r\n } else if (response.status === 401 && tenanatObj.SecurityProviderName !== \"aad\") {\r\n console.log('isPollAvailable CLOSE');\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n window.location.href = '/';\r\n }\r\n })\r\n .catch((error) => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log(\"error \" + error);\r\n }).finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const postUserPollResponse = (response, distributionId, redirectToPoll, isLoad) => async (dispatch, getState) => {\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(SHOTCLASS_API_URL + '/pollresponses', {\r\n method: 'POST',\r\n headers: JSON.parse(localStorage.getItem('headers')),\r\n body: JSON.stringify(response),\r\n }).then(response => {\r\n var tenanatObj = JSON.parse(localStorage.tenantData)\r\n console.log('postUserPollResponse response.status -- ', response.status);\r\n if (response.status === 200) {\r\n response.json().then(json => {\r\n dispatch(connectActionCreator.postUserPollResoponseDone(json));\r\n console.log('current stateS details:', getState());\r\n });\r\n } else if (response.status === 401 && tenanatObj.SecurityProviderName !== \"aad\") {\r\n console.log('postUserPollResponse CLOSE');\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n window.location.href = '/';\r\n }\r\n })\r\n .then(json =>\r\n dispatch(isPollAvailable()))\r\n .then(json => {\r\n // dispatch(setErrorHandler(SUCCESS, `Vote Submitted Successfully`));\r\n dispatch(getResponse(response.PollId, distributionId));\r\n console.log('current stateS details:', getState());\r\n return json;\r\n }).catch(error => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log('error ' + error);\r\n }).finally(() => {\r\n redirectToPoll();\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const getPollHistory = (isLoad) => async (dispatch,getState) => {\r\n if (isLoad) dispatch(setLoadingHandler());\r\n await fetch(SHOTCLASS_API_URL + '/me/polls/history', {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n }).then(response => {\r\n var tenanatObj = JSON.parse(localStorage.tenantData);\r\n console.log('getPollHistory response.status -- ', response.status);\r\n if (response.status === 200) {\r\n response.json().then(json => {\r\n dispatch(connectActionCreator.getPollHistoryDone(json));\r\n console.log('current stateS:getPollHistoryDone', getState());\r\n return json.Content;\r\n });\r\n } else if (response.status === 401 && tenanatObj.SecurityProviderName !== 'aad') {\r\n console.log('getPollHistory CLOSE');\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n window.location.href = '/';\r\n }\r\n }).catch((error) => {\r\n dispatch(connectActionCreator.catchError(error));\r\n console.log(\"error \" + error);\r\n }).finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};","import * as errorActionCreator from \"../actionCreators/errorActionCreator\";\r\n\r\nexport const setErrorHandler = (errorType, error, closeTimer) => (dispatch) => {\r\n dispatch(errorActionCreator.setErrorAction(errorType, error, closeTimer));\r\n};\r\nexport const unSetErrorHandler = () => (dispatch) => {\r\n dispatch(errorActionCreator.unSetErrorAction());\r\n};\r\n\r\nexport const setLoadingHandler = () => (dispatch) => {\r\n dispatch(errorActionCreator.setLoadingAction());\r\n};\r\nexport const unSetLoadingHandler = () => (dispatch) => {\r\n dispatch(errorActionCreator.unSetLoadingAction());\r\n};\r\n","import actionTypes from \"../actionTypes\";\r\n\r\nexport const setErrorAction = (errorType, error, closeTimer) => ({\r\n type: actionTypes.errorTypes.SET_ERROR,\r\n payload: { errorType, error, closeTimer },\r\n});\r\nexport const unSetErrorAction = () => ({\r\n type: actionTypes.errorTypes.UNSET_ERROR,\r\n});\r\n\r\nexport const setLoadingAction = () => ({\r\n type: actionTypes.errorTypes.SET_LOADING,\r\n});\r\nexport const unSetLoadingAction = () => ({\r\n type: actionTypes.errorTypes.UNSET_LOADING,\r\n});\r\n","import { SHOTCLASS_API_URL } from \"../../../utils/devApiContants\";\r\nimport * as globalSearchActionCreator from \"../actionCreators/globalSearchActionCreator\";\r\nimport * as commonActionCreator from \"../actionCreators/commonActionCreator\";\r\nimport { setLoadingHandler, unSetLoadingHandler } from \"./errorActionHandler\";\r\n\r\nexport const getSearchResult = (searchText, isEnabled, isLoad) => async (dispatch,getState) => {\r\n let isAdvanceSearch = getState().commonReducer.isAdvanceSearch;\r\n let isDropdownText = getState().commonReducer.isDropdownText;\r\n dispatch(globalSearchActionCreator.updateDidYouMeanSuggestions([]));\r\n if (isLoad){\r\n dispatch(setLoadingHandler());\r\n dispatch(globalSearchActionCreator.requestAPI());\r\n } \r\n let url;\r\n if (isAdvanceSearch) {\r\n url = SHOTCLASS_API_URL + '/shotclasses/globalsearchSections?searchText=' + searchText + '&isTopicEnabled=' + isEnabled + '&IsAdvanceSearch=' + isAdvanceSearch + '&isDropdownText=' + isDropdownText + '';\r\n } else {\r\n url = SHOTCLASS_API_URL + '/shotclasses/globalsearchSections?searchText=' + searchText + '&isTopicEnabled=' + isEnabled + '';\r\n }\r\n await fetch(url, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then(response => response.json())\r\n .then((json) => {\r\n if (json.SemanticGlobalSearchResults.length > 0) {\r\n json.SemanticGlobalSearchResults = json.SemanticGlobalSearchResults.filter(x => x.GlobalSearch !== null)\r\n }\r\n dispatch(globalSearchActionCreator.getSearchResultDone(json.SemanticGlobalSearchResults));\r\n dispatch(commonActionCreator.toggleDropdownText(false));\r\n dispatch(globalSearchActionCreator.updateSearchText(json.queryString));\r\n // console.log('current stateG:', getState());\r\n\r\n if (json.isDidyouMeanSectionRequired) {\r\n dispatch(globalSearchActionCreator.updateDidYouMeanSuggestions(json.suggestions));\r\n console.log('current stateG:', getState());\r\n } else {\r\n dispatch(globalSearchActionCreator.updateDidYouMeanSuggestions([]));\r\n }\r\n })\r\n .catch(error => {\r\n dispatch(globalSearchActionCreator.catchError(error))\r\n dispatch(commonActionCreator.toggleDropdownText(false));\r\n console.log('Global Search Error ' + error);\r\n }).finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n}","import { async } from \"q\";\r\nimport {\r\n GET_ALL_LANGUAGES_API_URL,\r\n GET_ASSIGNED_CLASSES_API_URL,\r\n GET_ASSIGNED_SERIES_API_URL,\r\n GET_COMPLETED_CLASSES_API_URL,\r\n GET_COMPLETED_SERIES_API_URL,\r\n GET_NOTIFICATIONS_API_URL,\r\n GET_TRENDING_CLASSES_API_URL,\r\n GET_TRENDING_SERIES_API_URL,\r\n GET_LEADERBOARDDATA_API_URL,\r\n SHOTCLASS_API_URL,\r\n} from \"../../../utils/devApiContants\";\r\nimport * as homeActionCreator from \"../actionCreators/homeActionCreator\";\r\nimport { setLoadingHandler, unSetLoadingHandler } from \"./errorActionHandler\";\r\nimport { logoutHandler } from \"./loginActionHandler\";\r\n\r\nconst convertInSecs = (time) => {\r\n if (time === null) {\r\n time = \"00:00:00\";\r\n }\r\n let a = time.split(\":\");\r\n let seconds = +a[0] * 60 * 60 + +a[1] * 60 + +a[2];\r\n return seconds;\r\n};\r\nconst getWidthInPercentage = (durPlayed, totalDur) => {\r\n if (durPlayed === 0 && totalDur === 0) return 0;\r\n\r\n let perWidth = (durPlayed / totalDur) * 100;\r\n if (perWidth > 100) return 100;\r\n else return perWidth;\r\n};\r\n\r\nexport const setThemeStylesHandler = () => (dispatch) => {\r\n const themeData = JSON.parse(localStorage.getItem(\"themeData\"));\r\n\r\n if (themeData !== undefined && themeData?.IsCustomSetting === true) {\r\n dispatch(homeActionCreator.setThemeStylesAction(themeData));\r\n document.documentElement.style.setProperty(\r\n \"--color-BGColor\",\r\n themeData?.CustomData?.BGColor\r\n );\r\n document.documentElement.style.setProperty(\r\n \"--color-PaneColor\",\r\n themeData?.CustomData?.PaneColor\r\n );\r\n document.documentElement.style.setProperty(\r\n \"--color-PrimaryColor1\",\r\n themeData?.CustomData?.PrimaryColor1\r\n );\r\n document.documentElement.style.setProperty(\r\n \"--color-PrimaryColor2\",\r\n themeData?.CustomData?.PrimaryColor2\r\n );\r\n document.documentElement.style.setProperty(\r\n \"--color-PrimaryColor3\",\r\n themeData?.CustomData?.PrimaryColor3\r\n );\r\n document.documentElement.style.setProperty(\r\n \"--color-PrimaryColor4\",\r\n themeData?.CustomData?.PrimaryColor4\r\n );\r\n document.documentElement.style.setProperty(\r\n \"--color-SecondaryColor\",\r\n themeData?.CustomData?.SecondaryColor\r\n );\r\n document.documentElement.style.setProperty(\r\n \"--color-TabDisable\",\r\n themeData?.CustomData?.TabDisable\r\n );\r\n document.documentElement.style.setProperty(\r\n \"--color-TabOnSelect\",\r\n themeData?.CustomData?.TabOnSelect\r\n );\r\n document.documentElement.style.setProperty(\r\n \"--color-TextColor\",\r\n themeData?.CustomData?.TextColor\r\n );\r\n }\r\n};\r\n\r\n// export const setLTIThemeStyle = () => async () => {\r\n// const tenantName = localStorage.getItem(\"tenantSlugName\");\r\n// if (tenantName !== undefined && tenantName == \"Search\") {\r\n// document.getElementsByTagName(\r\n// \"body\"\r\n// )[0].style.fontFamily = `\"Aller\", sans-serif`;\r\n// } else {\r\n// document.getElementsByTagName(\"body\")[0].style.fontFamily = \"\";\r\n// }\r\n// };\r\n\r\nexport const getAllLanguagesHandler = () => async (dispatch) => {\r\n // dispatch(setLoadingHandler());\r\n\r\n await fetch(GET_ALL_LANGUAGES_API_URL, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => {\r\n if (response.status === 200) {\r\n return response.json();\r\n } else if (response.status === 401) {\r\n console.log(\"getTrainingTypes CLOSE\");\r\n }\r\n })\r\n .then((result) => {\r\n // let filterNonArabic = result?.filter(\r\n // (lang) => lang?.Locale.toLowerCase() !== \"ar-sa\"\r\n // );\r\n dispatch(homeActionCreator.getAllLanguagesAction(result));\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n });\r\n};\r\n\r\nexport const setSelectedLanguageHandler = (data) => (dispatch) => {\r\n dispatch(homeActionCreator.setSelectedLanguageAction(data));\r\n};\r\n\r\nexport const getNotificationsHandler = (navigate) => async (dispatch) => {\r\n // dispatch(setLoadingHandler());\r\n\r\n await fetch(GET_NOTIFICATIONS_API_URL, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => {\r\n if (response.status === 200) {\r\n return response.json();\r\n } else if (response.status === 401) {\r\n dispatch(logoutHandler(navigate));\r\n }\r\n })\r\n .then((result) => {\r\n dispatch(homeActionCreator.getNotificationsAction(result));\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n console.log(\"errror \" + error);\r\n });\r\n};\r\n\r\nexport const getLeaderboardHandler = (navigate) => async (dispatch) => {\r\n await fetch(GET_LEADERBOARDDATA_API_URL, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => {\r\n if (response.status === 200) {\r\n return response.json();\r\n } else if (response.status === 401) {\r\n dispatch(logoutHandler(navigate));\r\n }\r\n })\r\n .then((result) => {\r\n dispatch(homeActionCreator.getLeaderboardAction(result));\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n });\r\n};\r\n\r\nexport const getAssignedClassesHandler =\r\n (pageNum, pageSize, locale, navigate) => async (dispatch) => {\r\n // dispatch(setLoadingHandler());\r\n\r\n // dispatch(homeActionCreator.setLoadingAssignedClassesAction());\r\n // dispatch(homeActionCreator.setLoadingInProgressClassesAction());\r\n // dispatch(homeActionCreator.setLoadingNotInProgressClassesAction());\r\n\r\n await fetch(\r\n GET_ASSIGNED_CLASSES_API_URL +\r\n pageNum +\r\n \"&pageSize=\" +\r\n pageSize +\r\n \"&Locale=\" +\r\n locale,\r\n {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n }\r\n )\r\n .then((response) => {\r\n let tenanatObj = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n\r\n if (\r\n response.status === 401 &&\r\n tenanatObj?.SecurityProviderName !== \"aad\"\r\n ) {\r\n // localStorage.clear();\r\n // sessionStorage.clear();\r\n // navigate(\"/\");\r\n dispatch(logoutHandler(navigate));\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then(async (result) => {\r\n if (pageSize >= result?.TotalRows) {\r\n // if (locale === \"en-GB\") {\r\n dispatch(homeActionCreator.getAssignedClassesAction(result?.Content));\r\n dispatch(\r\n homeActionCreator.getAssignedClassesCountAction(result?.TotalRows)\r\n );\r\n // } else {\r\n // const updatedForNonEnglish = result?.Content.filter(\r\n // (shotclass) => shotclass?.Locale === locale\r\n // );\r\n // dispatch(\r\n // homeActionCreator.getAssignedClassesAction(updatedForNonEnglish)\r\n // );\r\n // dispatch(\r\n // homeActionCreator.getAssignedClassesCountAction(\r\n // updatedForNonEnglish?.length\r\n // )\r\n // );\r\n // }\r\n\r\n // await dispatch(\r\n // getCompletedClassesHandler(\r\n // 1,\r\n // result?.TotalCompletedCount,\r\n // locale,\r\n // navigate\r\n // )\r\n // );\r\n // await dispatch(getTrendingClassesHandler(locale, navigate));\r\n } else {\r\n dispatch(\r\n getAssignedClassesHandler(1, result?.TotalRows, locale, navigate)\r\n );\r\n }\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"error \" + error);\r\n });\r\n // .finally(() => {\r\n // dispatch(unSetLoadingHandler());\r\n // });\r\n };\r\n\r\nexport const getCompletedClassesHandler =\r\n (pageNum, pageSize, locale, navigate) => async (dispatch) => {\r\n // dispatch(setLoadingHandler());\r\n\r\n // dispatch(homeActionCreator.setLoadingCompletedClassesAction());\r\n\r\n await fetch(\r\n GET_COMPLETED_CLASSES_API_URL +\r\n pageNum +\r\n \"&pageSize=\" +\r\n pageSize +\r\n \"&Locale=\" +\r\n locale,\r\n {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n }\r\n )\r\n .then((response) => {\r\n let tenanatObj = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n if (\r\n response.status === 401 &&\r\n tenanatObj?.SecurityProviderName !== \"aad\"\r\n ) {\r\n // localStorage.clear();\r\n // sessionStorage.clear();\r\n // navigate(\"/\");\r\n dispatch(logoutHandler(navigate));\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n if (pageSize >= result?.TotalRows) {\r\n const completedClasses = result?.Content?.map((data) => {\r\n if (data.Mediatype === 1) {\r\n let videoDuration = convertInSecs(data.VideoDuration);\r\n let videoDurationPlayed = convertInSecs(data.VideoDurationPlayed);\r\n let width = getWidthInPercentage(\r\n videoDurationPlayed,\r\n videoDuration\r\n );\r\n return {\r\n ...data,\r\n width,\r\n videoDurationInNumber: videoDuration,\r\n videoDurationPlayedInNumber: videoDurationPlayed,\r\n };\r\n } else {\r\n return data;\r\n }\r\n });\r\n\r\n // if (locale === \"en-GB\") {\r\n dispatch(\r\n homeActionCreator.getCompletedClassesAction(completedClasses)\r\n );\r\n dispatch(\r\n homeActionCreator.getCompletedClassesCountAction(result?.TotalRows)\r\n );\r\n // } else {\r\n // const updatedForNonEnglish = completedClasses.filter(\r\n // (shotclass) => shotclass?.Locale === locale\r\n // );\r\n // dispatch(\r\n // homeActionCreator.getCompletedClassesAction(updatedForNonEnglish)\r\n // );\r\n // dispatch(\r\n // homeActionCreator.getCompletedClassesCountAction(\r\n // updatedForNonEnglish?.length\r\n // )\r\n // );\r\n // }\r\n } else {\r\n dispatch(\r\n getCompletedClassesHandler(1, result?.TotalRows, locale, navigate)\r\n );\r\n }\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"error \" + error);\r\n });\r\n // .finally(() => {\r\n // dispatch(unSetLoadingHandler());\r\n // });\r\n };\r\n\r\nexport const getTrendingClassesHandler =\r\n (locale, navigate) => async (dispatch) => {\r\n // dispatch(setLoadingHandler());\r\n\r\n // dispatch(homeActionCreator.setLoadingTrendingClassesAction());\r\n\r\n await fetch(GET_TRENDING_CLASSES_API_URL + locale, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => {\r\n let tenanatObj = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n if (\r\n response.status === 401 &&\r\n tenanatObj?.SecurityProviderName !== \"aad\"\r\n ) {\r\n // localStorage.clear();\r\n // sessionStorage.clear();\r\n // navigate(\"/\");\r\n dispatch(logoutHandler(navigate));\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n // if (locale === \"en-GB\") {\r\n dispatch(homeActionCreator.getTrendingClassesAction(result?.Content));\r\n dispatch(\r\n homeActionCreator.getTrendingClassesCountAction(result?.TotalRows)\r\n );\r\n // } else {\r\n // const updatedForNonEnglish = result?.Content.filter(\r\n // (shotclass) => shotclass?.Locale === locale\r\n // );\r\n // dispatch(\r\n // homeActionCreator.getTrendingClassesAction(updatedForNonEnglish)\r\n // );\r\n // dispatch(\r\n // homeActionCreator.getTrendingClassesCountAction(\r\n // updatedForNonEnglish?.length\r\n // )\r\n // );\r\n // }\r\n\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"error \" + error);\r\n });\r\n // .finally(() => {\r\n // dispatch(unSetLoadingHandler());\r\n // });\r\n };\r\n\r\nexport const getInProgressClassesHandler = (assignedClasses) => (dispatch) => {\r\n // dispatch(setLoadingHandler());\r\n const notInProgressClasses = [];\r\n const inProgressClasses = assignedClasses?.map((assignedClass) => {\r\n if (assignedClass.Mediatype === 1) {\r\n let videoDuration = convertInSecs(assignedClass.VideoDuration);\r\n let videoDurationPlayed = convertInSecs(\r\n assignedClass.VideoDurationPlayed\r\n );\r\n let width = getWidthInPercentage(videoDurationPlayed, videoDuration);\r\n if (assignedClass.UserClassStatus === \"InProgress\") {\r\n return {\r\n ...assignedClass,\r\n width,\r\n videoDurationInNumber: videoDuration,\r\n videoDurationPlayedInNumber: videoDurationPlayed,\r\n };\r\n } else if (width > 0) {\r\n return {\r\n ...assignedClass,\r\n width,\r\n videoDurationInNumber: videoDuration,\r\n videoDurationPlayedInNumber: videoDurationPlayed,\r\n };\r\n } else {\r\n notInProgressClasses.push(assignedClass);\r\n return null;\r\n }\r\n } else if (\r\n assignedClass.UserClassStatus !== \"InProgress\" &&\r\n assignedClass.Mediatype !== 1\r\n ) {\r\n notInProgressClasses.push(assignedClass);\r\n return null;\r\n } else if (assignedClass.UserClassStatus === \"InProgress\") {\r\n return {\r\n ...assignedClass,\r\n width: 0,\r\n videoDurationInNumber: 0,\r\n videoDurationPlayedInNumber: 0,\r\n };\r\n }\r\n notInProgressClasses.push(assignedClass);\r\n return null;\r\n });\r\n const notNullInProgress = inProgressClasses?.filter(\r\n (inProgressClass) => inProgressClass !== null\r\n );\r\n\r\n let processedClasses = new Promise((resolve, reject) => {\r\n try {\r\n dispatch(\r\n homeActionCreator.getNotInProgressClassesAction(notInProgressClasses)\r\n );\r\n dispatch(\r\n homeActionCreator.getNotInProgressClassesCountAction(\r\n notInProgressClasses?.length\r\n )\r\n );\r\n dispatch(homeActionCreator.getInProgressClassesAction(notNullInProgress));\r\n dispatch(\r\n homeActionCreator.getInProgressClassesCountAction(\r\n notNullInProgress?.length\r\n )\r\n );\r\n resolve(true);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n return processedClasses;\r\n\r\n // dispatch(unSetLoadingHandler());\r\n};\r\nexport const getInProgressSeriesHandler = (assignedSeries) => (dispatch) => {\r\n // dispatch(setLoadingHandler());\r\n\r\n const notInProgressSeries = [];\r\n const inProgressSeries = [];\r\n assignedSeries.map((series) => {\r\n let width = getWidthInPercentage(\r\n series?.ShotClassCompletedCount,\r\n series?.ShotClassesCount\r\n );\r\n if (series?.ShotClassCompletedCount > 0) {\r\n inProgressSeries.push({ ...series, width });\r\n } else {\r\n notInProgressSeries.push({ ...series, width });\r\n }\r\n return null;\r\n });\r\n let processedSeries = new Promise((resolve, reject) => {\r\n try {\r\n dispatch(homeActionCreator.getInProgressSeriesAction(inProgressSeries));\r\n dispatch(\r\n homeActionCreator.getInProgressSeriesCountAction(\r\n inProgressSeries?.length\r\n )\r\n );\r\n dispatch(\r\n homeActionCreator.getNotInProgressSeriesAction(notInProgressSeries)\r\n );\r\n dispatch(\r\n homeActionCreator.getNotInProgressSeriesCountAction(\r\n notInProgressSeries?.length\r\n )\r\n );\r\n resolve(true);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n return processedSeries;\r\n\r\n // dispatch(unSetLoadingHandler());\r\n};\r\n\r\nexport const getAssignedSeriesHandler =\r\n (pageNum, pageSize, locale, navigate) => async (dispatch) => {\r\n // dispatch(setLoadingHandler());\r\n\r\n // dispatch(homeActionCreator.setLoadingAssignedSeriesAction());\r\n // dispatch(homeActionCreator.setLoadingInProgressSeriesAction());\r\n // dispatch(homeActionCreator.setLoadingNotInProgressSeriesAction());\r\n\r\n await fetch(\r\n GET_ASSIGNED_SERIES_API_URL + pageNum + \"&pageSize=\" + pageSize,\r\n {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n }\r\n )\r\n .then((response) => {\r\n let tenanatObj = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n if (response.status === 200) {\r\n return response.json();\r\n } else if (\r\n response.status === 401 &&\r\n tenanatObj?.SecurityProviderName !== \"aad\"\r\n ) {\r\n // localStorage.clear();\r\n // sessionStorage.clear();\r\n // navigate(\"/\");\r\n dispatch(logoutHandler(navigate));\r\n }\r\n })\r\n .then((result) => {\r\n if (pageSize >= result?.TotalRows) {\r\n // if (locale === \"en-GB\") {\r\n dispatch(homeActionCreator.getAssignedSeriesAction(result?.Content));\r\n dispatch(\r\n homeActionCreator.getAssignedSeriesCountAction(result?.TotalRows)\r\n );\r\n // } else {\r\n // dispatch(homeActionCreator.getAssignedSeriesAction([]));\r\n // dispatch(homeActionCreator.getAssignedSeriesCountAction(0));\r\n // }\r\n } else {\r\n dispatch(\r\n getAssignedSeriesHandler(1, result?.TotalRows, locale, navigate)\r\n );\r\n }\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"error \" + error);\r\n });\r\n // .finally(() => {\r\n // dispatch(unSetLoadingHandler());\r\n // });\r\n };\r\n\r\nexport const getCompletedSeriesHandler =\r\n (pageNum, pageSize, locale, navigate) => async (dispatch) => {\r\n // dispatch(setLoadingHandler());\r\n\r\n // dispatch(homeActionCreator.setLoadingCompletedSeriesAction());\r\n\r\n await fetch(\r\n GET_COMPLETED_SERIES_API_URL + pageNum + \"&pageSize=\" + pageSize,\r\n {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n }\r\n )\r\n .then((response) => {\r\n let tenanatObj = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n if (response.status === 200) {\r\n return response.json();\r\n } else if (\r\n response.status === 401 &&\r\n tenanatObj?.SecurityProviderName !== \"aad\"\r\n ) {\r\n // localStorage.clear();\r\n // sessionStorage.clear();\r\n // navigate(\"/\");\r\n dispatch(logoutHandler(navigate));\r\n }\r\n })\r\n .then((result) => {\r\n if (pageSize >= result?.TotalRows) {\r\n // if (locale === \"en-GB\") {\r\n dispatch(homeActionCreator.getCompletedSeriesAction(result?.Content));\r\n dispatch(\r\n homeActionCreator.getCompletedSeriesCountAction(result?.TotalRows)\r\n );\r\n // } else {\r\n // dispatch(homeActionCreator.getCompletedSeriesAction([]));\r\n // dispatch(homeActionCreator.getCompletedSeriesCountAction(0));\r\n // }\r\n } else {\r\n dispatch(\r\n getCompletedSeriesHandler(1, result?.TotalRows, locale, navigate)\r\n );\r\n }\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"error \" + error);\r\n });\r\n // .finally(() => {\r\n // dispatch(unSetLoadingHandler());\r\n // });\r\n };\r\nexport const getTrendingSeriesHandler =\r\n (locale, navigate) => async (dispatch) => {\r\n // dispatch(setLoadingHandler());\r\n\r\n // dispatch(homeActionCreator.setLoadingTrendingSeriesAction());\r\n\r\n await fetch(GET_TRENDING_SERIES_API_URL, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => {\r\n let tenanatObj = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n if (response.status === 200) {\r\n return response.json();\r\n } else if (\r\n response.status === 401 &&\r\n tenanatObj?.SecurityProviderName !== \"aad\"\r\n ) {\r\n // localStorage.clear();\r\n // sessionStorage.clear();\r\n // navigate(\"/\");\r\n dispatch(logoutHandler(navigate));\r\n }\r\n })\r\n .then((result) => {\r\n // if (locale === \"en-GB\") {\r\n dispatch(homeActionCreator.getTrendingSeriesAction(result?.Content));\r\n dispatch(\r\n homeActionCreator.getTrendingSeriesCountAction(result?.TotalRows)\r\n );\r\n // } else {\r\n // dispatch(homeActionCreator.getTrendingSeriesAction([]));\r\n // dispatch(homeActionCreator.getTrendingSeriesCountAction(0));\r\n // }\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"error \" + error);\r\n });\r\n // .finally(() => {\r\n // dispatch(unSetLoadingHandler());\r\n // });\r\n };\r\n\r\nexport const getTrainingTypes = (navigate) => async (dispatch) => {\r\n // dispatch(setLoadingHandler());\r\n\r\n await fetch(SHOTCLASS_API_URL + \"/TrainingTypes\", {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => {\r\n let tenanatObj = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n\r\n if (response.status === 200) {\r\n response.json().then((json) => {\r\n dispatch(homeActionCreator.getTrainingTypesDone(json));\r\n return json.Content;\r\n });\r\n } else if (\r\n response.status === 401 &&\r\n tenanatObj.SecurityProviderName !== \"aad\"\r\n ) {\r\n dispatch(logoutHandler(navigate));\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n });\r\n // .finally(() => {\r\n // dispatch(unSetLoadingHandler());\r\n // });\r\n};\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\n/**\r\n * Enumeration of operations that are instrumented by have their performance measured by the PerformanceClient.\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum PerformanceEvents {\r\n\r\n /**\r\n * acquireTokenByCode API (msal-browser and msal-node).\r\n * Used to acquire tokens by trading an authorization code against the token endpoint.\r\n */\r\n AcquireTokenByCode = \"acquireTokenByCode\",\r\n\r\n /**\r\n * acquireTokenByRefreshToken API (msal-browser and msal-node).\r\n * Used to renew an access token using a refresh token against the token endpoint.\r\n */\r\n AcquireTokenByRefreshToken = \"acquireTokenByRefreshToken\",\r\n\r\n /**\r\n * acquireTokenSilent API (msal-browser and msal-node).\r\n * Used to silently acquire a new access token (from the cache or the network).\r\n */\r\n AcquireTokenSilent = \"acquireTokenSilent\",\r\n\r\n /**\r\n * acquireTokenSilentAsync (msal-browser).\r\n * Internal API for acquireTokenSilent.\r\n */\r\n AcquireTokenSilentAsync = \"acquireTokenSilentAsync\",\r\n\r\n /**\r\n * acquireTokenPopup (msal-browser).\r\n * Used to acquire a new access token interactively through pop ups\r\n */\r\n AcquireTokenPopup = \"acquireTokenPopup\",\r\n\r\n /**\r\n * getPublicKeyThumbprint API in CryptoOpts class (msal-browser).\r\n * Used to generate a public/private keypair and generate a public key thumbprint for pop requests.\r\n */\r\n CryptoOptsGetPublicKeyThumbprint = \"cryptoOptsGetPublicKeyThumbprint\",\r\n\r\n /**\r\n * signJwt API in CryptoOpts class (msal-browser).\r\n * Used to signed a pop token.\r\n */\r\n CryptoOptsSignJwt = \"cryptoOptsSignJwt\",\r\n\r\n /**\r\n * acquireToken API in the SilentCacheClient class (msal-browser).\r\n * Used to read access tokens from the cache.\r\n */\r\n SilentCacheClientAcquireToken = \"silentCacheClientAcquireToken\",\r\n\r\n /**\r\n * acquireToken API in the SilentIframeClient class (msal-browser).\r\n * Used to acquire a new set of tokens from the authorize endpoint in a hidden iframe.\r\n */\r\n SilentIframeClientAcquireToken = \"silentIframeClientAcquireToken\",\r\n\r\n /**\r\n * acquireToken API in SilentRereshClient (msal-browser).\r\n * Used to acquire a new set of tokens from the token endpoint using a refresh token.\r\n */\r\n SilentRefreshClientAcquireToken = \"silentRefreshClientAcquireToken\",\r\n\r\n /**\r\n * ssoSilent API (msal-browser).\r\n * Used to silently acquire an authorization code and set of tokens using a hidden iframe.\r\n */\r\n SsoSilent = \"ssoSilent\",\r\n\r\n /**\r\n * getDiscoveredAuthority API in StandardInteractionClient class (msal-browser).\r\n * Used to load authority metadata for a request.\r\n */\r\n StandardInteractionClientGetDiscoveredAuthority = \"standardInteractionClientGetDiscoveredAuthority\",\r\n\r\n /**\r\n * acquireToken APIs in msal-browser.\r\n * Used to make an /authorize endpoint call with native brokering enabled.\r\n */\r\n FetchAccountIdWithNativeBroker = \"fetchAccountIdWithNativeBroker\",\r\n\r\n /**\r\n * acquireToken API in NativeInteractionClient class (msal-browser).\r\n * Used to acquire a token from Native component when native brokering is enabled.\r\n */\r\n NativeInteractionClientAcquireToken = \"nativeInteractionClientAcquireToken\",\r\n /**\r\n * Time spent creating default headers for requests to token endpoint\r\n */\r\n BaseClientCreateTokenRequestHeaders = \"baseClientCreateTokenRequestHeaders\",\r\n /**\r\n * Used to measure the time taken for completing embedded-broker handshake (PW-Broker).\r\n */\r\n BrokerHandhshake = \"brokerHandshake\",\r\n /**\r\n * acquireTokenByRefreshToken API in BrokerClientApplication (PW-Broker) .\r\n */\r\n AcquireTokenByRefreshTokenInBroker = \"acquireTokenByRefreshTokenInBroker\",\r\n /**\r\n * Time taken for token acquisition by broker\r\n */\r\n AcquireTokenByBroker = \"acquireTokenByBroker\",\r\n\r\n /**\r\n * Time spent on the network for refresh token acquisition\r\n */\r\n RefreshTokenClientExecuteTokenRequest = \"refreshTokenClientExecuteTokenRequest\",\r\n\r\n /**\r\n * Time taken for acquiring refresh token , records RT size\r\n */\r\n RefreshTokenClientAcquireToken = \"refreshTokenClientAcquireToken\",\r\n\r\n /**\r\n * Time taken for acquiring cached refresh token\r\n */\r\n RefreshTokenClientAcquireTokenWithCachedRefreshToken = \"refreshTokenClientAcquireTokenWithCachedRefreshToken\",\r\n\r\n /**\r\n * acquireTokenByRefreshToken API in RefreshTokenClient (msal-common).\r\n */\r\n RefreshTokenClientAcquireTokenByRefreshToken = \"refreshTokenClientAcquireTokenByRefreshToken\",\r\n\r\n /**\r\n * Helper function to create token request body in RefreshTokenClient (msal-common).\r\n */\r\n RefreshTokenClientCreateTokenRequestBody = \"refreshTokenClientCreateTokenRequestBody\",\r\n\r\n /**\r\n * acquireTokenFromCache (msal-browser).\r\n * Internal API for acquiring token from cache\r\n */\r\n AcquireTokenFromCache = \"acquireTokenFromCache\",\r\n\r\n /**\r\n * acquireTokenBySilentIframe (msal-browser).\r\n * Internal API for acquiring token by silent Iframe\r\n */\r\n AcquireTokenBySilentIframe = \"acquireTokenBySilentIframe\",\r\n\r\n /**\r\n * Internal API for initializing base request in BaseInteractionClient (msal-browser)\r\n */\r\n InitializeBaseRequest = \"initializeBaseRequest\",\r\n\r\n /**\r\n * Internal API for initializing silent request in SilentCacheClient (msal-browser)\r\n */\r\n InitializeSilentRequest = \"initializeSilentRequest\",\r\n\r\n InitializeClientApplication = \"initializeClientApplication\",\r\n\r\n /**\r\n * Helper function in SilentIframeClient class (msal-browser).\r\n */\r\n SilentIframeClientTokenHelper = \"silentIframeClientTokenHelper\",\r\n\r\n /**\r\n * SilentHandler\r\n */\r\n SilentHandlerInitiateAuthRequest = \"silentHandlerInitiateAuthRequest\",\r\n SilentHandlerMonitorIframeForHash = \"silentHandlerMonitorIframeForHash\",\r\n SilentHandlerLoadFrame = \"silentHandlerLoadFrame\",\r\n\r\n /**\r\n * Helper functions in StandardInteractionClient class (msal-browser)\r\n */\r\n StandardInteractionClientCreateAuthCodeClient = \"standardInteractionClientCreateAuthCodeClient\",\r\n StandardInteractionClientGetClientConfiguration = \"standardInteractionClientGetClientConfiguration\",\r\n StandardInteractionClientInitializeAuthorizationRequest = \"standardInteractionClientInitializeAuthorizationRequest\",\r\n StandardInteractionClientInitializeAuthorizationCodeRequest = \"standardInteractionClientInitializeAuthorizationCodeRequest\",\r\n\r\n /**\r\n * getAuthCodeUrl API (msal-browser and msal-node).\r\n */\r\n GetAuthCodeUrl = \"getAuthCodeUrl\",\r\n\r\n /**\r\n * Functions from InteractionHandler (msal-browser)\r\n */\r\n HandleCodeResponseFromServer = \"handleCodeResponseFromServer\",\r\n HandleCodeResponseFromHash = \"handleCodeResponseFromHash\",\r\n UpdateTokenEndpointAuthority = \"updateTokenEndpointAuthority\",\r\n\r\n /**\r\n * APIs in Authorization Code Client (msal-common)\r\n */\r\n AuthClientAcquireToken = \"authClientAcquireToken\",\r\n AuthClientExecuteTokenRequest = \"authClientExecuteTokenRequest\",\r\n AuthClientCreateTokenRequestBody = \"authClientCreateTokenRequestBody\",\r\n AuthClientCreateQueryString = \"authClientCreateQueryString\",\r\n\r\n /**\r\n * Generate functions in PopTokenGenerator (msal-common)\r\n */\r\n PopTokenGenerateCnf = \"popTokenGenerateCnf\",\r\n PopTokenGenerateKid = \"popTokenGenerateKid\",\r\n\r\n /**\r\n * handleServerTokenResponse API in ResponseHandler (msal-common)\r\n */\r\n HandleServerTokenResponse = \"handleServerTokenResponse\",\r\n\r\n /**\r\n * Authority functions\r\n */\r\n AuthorityFactoryCreateDiscoveredInstance = \"authorityFactoryCreateDiscoveredInstance\",\r\n AuthorityResolveEndpointsAsync = \"authorityResolveEndpointsAsync\",\r\n AuthorityGetCloudDiscoveryMetadataFromNetwork = \"authorityGetCloudDiscoveryMetadataFromNetwork\",\r\n AuthorityUpdateCloudDiscoveryMetadata = \"authorityUpdateCloudDiscoveryMetadata\",\r\n AuthorityGetEndpointMetadataFromNetwork = \"authorityGetEndpointMetadataFromNetwork\",\r\n AuthorityUpdateEndpointMetadata = \"authorityUpdateEndpointMetadata\",\r\n AuthorityUpdateMetadataWithRegionalInformation = \"authorityUpdateMetadataWithRegionalInformation\",\r\n\r\n /**\r\n * Region Discovery functions\r\n */\r\n RegionDiscoveryDetectRegion = \"regionDiscoveryDetectRegion\",\r\n RegionDiscoveryGetRegionFromIMDS = \"regionDiscoveryGetRegionFromIMDS\",\r\n RegionDiscoveryGetCurrentVersion = \"regionDiscoveryGetCurrentVersion\",\r\n\r\n AcquireTokenByCodeAsync = \"acquireTokenByCodeAsync\",\r\n\r\n GetEndpointMetadataFromNetwork = \"getEndpointMetadataFromNetwork\",\r\n GetCloudDiscoveryMetadataFromNetworkMeasurement = \"getCloudDiscoveryMetadataFromNetworkMeasurement\",\r\n\r\n HandleRedirectPromiseMeasurement= \"handleRedirectPromiseMeasurement\",\r\n\r\n UpdateCloudDiscoveryMetadataMeasurement = \"updateCloudDiscoveryMetadataMeasurement\",\r\n\r\n UsernamePasswordClientAcquireToken = \"usernamePasswordClientAcquireToken\",\r\n\r\n NativeMessageHandlerHandshake = \"nativeMessageHandlerHandshake\",\r\n}\r\n\r\n/**\r\n * State of the performance event.\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum PerformanceEventStatus {\r\n NotStarted,\r\n InProgress,\r\n Completed\r\n}\r\n\r\n/**\r\n * Fields whose value will not change throughout a request\r\n */\r\nexport type StaticFields = {\r\n /**\r\n * The Silent Token Cache Lookup Policy\r\n *\r\n * @type {?(number | undefined)}\r\n */\r\n cacheLookupPolicy?: number | undefined,\r\n\r\n /**\r\n * Size of the id token\r\n *\r\n * @type {number}\r\n */\r\n idTokenSize?: number,\r\n\r\n /**\r\n *\r\n * Size of the access token\r\n *\r\n * @type {number}\r\n */\r\n\r\n accessTokenSize?: number,\r\n\r\n /**\r\n *\r\n * Size of the refresh token\r\n *\r\n * @type {number}\r\n */\r\n\r\n refreshTokenSize?: number | undefined,\r\n\r\n /**\r\n * Application name as specified by the app.\r\n *\r\n * @type {?string}\r\n */\r\n appName?: string,\r\n\r\n /**\r\n * Application version as specified by the app.\r\n *\r\n * @type {?string}\r\n */\r\n appVersion?: string,\r\n\r\n /**\r\n * The following are fields that may be emitted in native broker scenarios\r\n */\r\n extensionId?: string,\r\n extensionVersion?: string\r\n matsBrokerVersion?: string;\r\n matsAccountJoinOnStart?: string;\r\n matsAccountJoinOnEnd?: string;\r\n matsDeviceJoin?: string;\r\n matsPromptBehavior?: string;\r\n matsApiErrorCode?: number;\r\n matsUiVisible?: boolean;\r\n matsSilentCode?: number;\r\n matsSilentBiSubCode?: number;\r\n matsSilentMessage?: string;\r\n matsSilentStatus?: number;\r\n matsHttpStatus?: number\r\n matsHttpEventCount?: number;\r\n httpVerToken?: string;\r\n httpVerAuthority?: string;\r\n\r\n /**\r\n * Native broker fields\r\n */\r\n allowNativeBroker?: boolean;\r\n extensionInstalled?: boolean;\r\n extensionHandshakeTimeoutMs?: number;\r\n extensionHandshakeTimedOut?: boolean;\r\n};\r\n\r\n/**\r\n * Fields whose value may change throughout a request\r\n */\r\nexport type Counters = {\r\n visibilityChangeCount?: number;\r\n incompleteSubsCount?: number;\r\n /**\r\n * Amount of times queued in the JS event queue.\r\n *\r\n * @type {?number}\r\n */\r\n queuedCount?: number\r\n /**\r\n * Amount of manually completed queue events.\r\n *\r\n * @type {?number}\r\n */\r\n queuedManuallyCompletedCount?: number;\r\n};\r\n\r\nexport type SubMeasurement = {\r\n name: PerformanceEvents,\r\n startTimeMs: number\r\n};\r\n\r\n/**\r\n * Performance measurement taken by the library, including metadata about the request and application.\r\n *\r\n * @export\r\n * @typedef {PerformanceEvent}\r\n */\r\nexport type PerformanceEvent = StaticFields & Counters & {\r\n /**\r\n * Unique id for the event\r\n *\r\n * @type {string}\r\n */\r\n eventId: string,\r\n\r\n /**\r\n * State of the perforance measure.\r\n *\r\n * @type {PerformanceEventStatus}\r\n */\r\n status: PerformanceEventStatus,\r\n\r\n /**\r\n * Login authority used for the request\r\n *\r\n * @type {string}\r\n */\r\n authority: string,\r\n\r\n /**\r\n * Client id for the application\r\n *\r\n * @type {string}\r\n */\r\n clientId: string\r\n\r\n /**\r\n * Correlation ID used for the request\r\n *\r\n * @type {string}\r\n */\r\n correlationId: string,\r\n\r\n /**\r\n * End-to-end duration in milliseconds.\r\n * @date 3/22/2022 - 3:40:05 PM\r\n *\r\n * @type {number}\r\n */\r\n durationMs?: number,\r\n\r\n /**\r\n * Visibility of the page when the event completed.\r\n * Read from: https://developer.mozilla.org/docs/Web/API/Page_Visibility_API\r\n *\r\n * @type {?(string | null)}\r\n */\r\n endPageVisibility?: string | null,\r\n\r\n /**\r\n * Whether the result was retrieved from the cache.\r\n *\r\n * @type {(boolean | null)}\r\n */\r\n fromCache?: boolean | null,\r\n\r\n /**\r\n * Event name (usually in the form of classNameFunctionName)\r\n *\r\n * @type {PerformanceEvents}\r\n */\r\n name: PerformanceEvents,\r\n\r\n /**\r\n * Visibility of the page when the event completed.\r\n * Read from: https://developer.mozilla.org/docs/Web/API/Page_Visibility_API\r\n *\r\n * @type {?(string | null)}\r\n */\r\n startPageVisibility?: string | null,\r\n\r\n /**\r\n * Unix millisecond timestamp when the event was initiated.\r\n *\r\n * @type {number}\r\n */\r\n startTimeMs: number,\r\n\r\n /**\r\n * Whether or the operation completed successfully.\r\n *\r\n * @type {(boolean | null)}\r\n */\r\n success?: boolean | null,\r\n\r\n /**\r\n * Add specific error code in case of failure\r\n *\r\n * @type {string}\r\n */\r\n errorCode?: string,\r\n\r\n /**\r\n * Add specific sub error code in case of failure\r\n *\r\n * @type {string}\r\n */\r\n subErrorCode?: string,\r\n\r\n /**\r\n * Name of the library used for the operation.\r\n *\r\n * @type {string}\r\n */\r\n libraryName: string,\r\n\r\n /**\r\n * Version of the library used for the operation.\r\n *\r\n * @type {string}\r\n */\r\n libraryVersion: string,\r\n\r\n /**\r\n * Whether the response is from a native component (e.g., WAM)\r\n *\r\n * @type {?boolean}\r\n */\r\n isNativeBroker?: boolean,\r\n\r\n /**\r\n * Request ID returned from the response\r\n *\r\n * @type {?string}\r\n */\r\n requestId?: string\r\n\r\n /**\r\n * Cache lookup policy\r\n *\r\n * @type {?number}\r\n */\r\n cacheLookupPolicy?: number | undefined,\r\n\r\n /**\r\n * Amount of time spent in the JS queue in milliseconds.\r\n *\r\n * @type {?number}\r\n */\r\n queuedTimeMs?: number,\r\n\r\n /**\r\n * Sub-measurements for internal use. To be deleted before flushing.\r\n */\r\n incompleteSubMeasurements?: Map\r\n};\r\n\r\nexport const IntFields: ReadonlySet = new Set([\r\n \"accessTokenSize\",\r\n \"durationMs\",\r\n \"idTokenSize\",\r\n \"matsSilentStatus\",\r\n \"matsHttpStatus\",\r\n \"refreshTokenSize\",\r\n \"queuedTimeMs\",\r\n \"startTimeMs\",\r\n \"status\",\r\n]);\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { OIDC_DEFAULT_SCOPES } from \"@azure/msal-common\";\r\nimport { PopupRequest } from \"../request/PopupRequest\";\r\nimport { RedirectRequest } from \"../request/RedirectRequest\";\r\n\r\n/**\r\n * Constants\r\n */\r\nexport const BrowserConstants = {\r\n /**\r\n * Interaction in progress cache value\r\n */\r\n INTERACTION_IN_PROGRESS_VALUE: \"interaction_in_progress\",\r\n /**\r\n * Invalid grant error code\r\n */\r\n INVALID_GRANT_ERROR: \"invalid_grant\",\r\n /**\r\n * Default popup window width\r\n */\r\n POPUP_WIDTH: 483,\r\n /**\r\n * Default popup window height\r\n */\r\n POPUP_HEIGHT: 600,\r\n /**\r\n * Name of the popup window starts with\r\n */\r\n POPUP_NAME_PREFIX: \"msal\",\r\n /**\r\n * Default popup monitor poll interval in milliseconds\r\n */\r\n DEFAULT_POLL_INTERVAL_MS: 30,\r\n /**\r\n * Msal-browser SKU\r\n */\r\n MSAL_SKU: \"msal.js.browser\",\r\n};\r\n\r\nexport const NativeConstants = {\r\n CHANNEL_ID: \"53ee284d-920a-4b59-9d30-a60315b26836\",\r\n PREFERRED_EXTENSION_ID: \"ppnbnpeolgkicgegkbkbjmhlideopiji\",\r\n MATS_TELEMETRY: \"MATS\"\r\n};\r\n\r\nexport enum NativeExtensionMethod {\r\n HandshakeRequest = \"Handshake\",\r\n HandshakeResponse = \"HandshakeResponse\",\r\n GetToken = \"GetToken\",\r\n Response = \"Response\"\r\n}\r\n\r\nexport enum BrowserCacheLocation {\r\n LocalStorage = \"localStorage\",\r\n SessionStorage = \"sessionStorage\",\r\n MemoryStorage = \"memoryStorage\"\r\n}\r\n\r\n/**\r\n * HTTP Request types supported by MSAL.\r\n */\r\nexport enum HTTP_REQUEST_TYPE {\r\n GET = \"GET\",\r\n POST = \"POST\"\r\n}\r\n\r\n/**\r\n * Temporary cache keys for MSAL, deleted after any request.\r\n */\r\nexport enum TemporaryCacheKeys {\r\n AUTHORITY = \"authority\",\r\n ACQUIRE_TOKEN_ACCOUNT = \"acquireToken.account\",\r\n SESSION_STATE = \"session.state\",\r\n REQUEST_STATE = \"request.state\",\r\n NONCE_IDTOKEN = \"nonce.id_token\",\r\n ORIGIN_URI = \"request.origin\",\r\n RENEW_STATUS = \"token.renew.status\",\r\n URL_HASH = \"urlHash\",\r\n REQUEST_PARAMS = \"request.params\",\r\n SCOPES = \"scopes\",\r\n INTERACTION_STATUS_KEY = \"interaction.status\",\r\n CCS_CREDENTIAL = \"ccs.credential\",\r\n CORRELATION_ID = \"request.correlationId\",\r\n NATIVE_REQUEST = \"request.native\",\r\n REDIRECT_CONTEXT = \"request.redirect.context\"\r\n}\r\n\r\nexport enum StaticCacheKeys {\r\n ACCOUNT_KEYS = \"msal.account.keys\",\r\n TOKEN_KEYS = \"msal.token.keys\"\r\n}\r\n\r\n/**\r\n * Cache keys stored in-memory\r\n */\r\nexport enum InMemoryCacheKeys {\r\n WRAPPER_SKU = \"wrapper.sku\",\r\n WRAPPER_VER = \"wrapper.version\"\r\n}\r\n\r\n/**\r\n * API Codes for Telemetry purposes. \r\n * Before adding a new code you must claim it in the MSAL Telemetry tracker as these number spaces are shared across all MSALs\r\n * 0-99 Silent Flow\r\n * 800-899 Auth Code Flow\r\n */\r\nexport enum ApiId {\r\n acquireTokenRedirect = 861,\r\n acquireTokenPopup = 862,\r\n ssoSilent = 863,\r\n acquireTokenSilent_authCode = 864,\r\n handleRedirectPromise = 865,\r\n acquireTokenByCode = 866,\r\n acquireTokenSilent_silentFlow = 61,\r\n logout = 961,\r\n logoutPopup = 962\r\n}\r\n\r\n/*\r\n * Interaction type of the API - used for state and telemetry\r\n */\r\nexport enum InteractionType {\r\n Redirect = \"redirect\",\r\n Popup = \"popup\",\r\n Silent = \"silent\",\r\n None = \"none\"\r\n}\r\n\r\n/**\r\n * Types of interaction currently in progress.\r\n * Used in events in wrapper libraries to invoke functions when certain interaction is in progress or all interactions are complete.\r\n */\r\nexport enum InteractionStatus {\r\n /**\r\n * Initial status before interaction occurs\r\n */\r\n Startup = \"startup\",\r\n /**\r\n * Status set when all login calls occuring\r\n */\r\n Login = \"login\",\r\n /**\r\n * Status set when logout call occuring\r\n */ \r\n Logout = \"logout\",\r\n /**\r\n * Status set for acquireToken calls\r\n */\r\n AcquireToken = \"acquireToken\",\r\n /**\r\n * Status set for ssoSilent calls\r\n */\r\n SsoSilent = \"ssoSilent\",\r\n /**\r\n * Status set when handleRedirect in progress\r\n */\r\n HandleRedirect = \"handleRedirect\",\r\n /**\r\n * Status set when interaction is complete\r\n */\r\n None = \"none\"\r\n}\r\n\r\nexport const DEFAULT_REQUEST: RedirectRequest|PopupRequest = {\r\n scopes: OIDC_DEFAULT_SCOPES\r\n};\r\n\r\n/**\r\n * JWK Key Format string (Type MUST be defined for window crypto APIs)\r\n */\r\nexport const KEY_FORMAT_JWK = \"jwk\";\r\n\r\n// Supported wrapper SKUs\r\nexport enum WrapperSKU {\r\n React = \"@azure/msal-react\",\r\n Angular = \"@azure/msal-angular\"\r\n}\r\n\r\n// DatabaseStorage Constants\r\nexport const DB_NAME = \"msal.db\";\r\nexport const DB_VERSION = 1;\r\nexport const DB_TABLE_NAME = `${DB_NAME}.keys`;\r\n\r\nexport enum CacheLookupPolicy {\r\n /*\r\n * acquireTokenSilent will attempt to retrieve an access token from the cache. If the access token is expired\r\n * or cannot be found the refresh token will be used to acquire a new one. Finally, if the refresh token\r\n * is expired acquireTokenSilent will attempt to acquire new access and refresh tokens.\r\n */\r\n Default = 0, // 0 is falsy, is equivalent to not passing in a CacheLookupPolicy\r\n /*\r\n * acquireTokenSilent will only look for access tokens in the cache. It will not attempt to renew access or\r\n * refresh tokens.\r\n */\r\n AccessToken = 1,\r\n /*\r\n * acquireTokenSilent will attempt to retrieve an access token from the cache. If the access token is expired or\r\n * cannot be found, the refresh token will be used to acquire a new one. If the refresh token is expired, it\r\n * will not be renewed and acquireTokenSilent will fail.\r\n */\r\n AccessTokenAndRefreshToken = 2,\r\n /*\r\n * acquireTokenSilent will not attempt to retrieve access tokens from the cache and will instead attempt to\r\n * exchange the cached refresh token for a new access token. If the refresh token is expired, it will not be\r\n * renewed and acquireTokenSilent will fail.\r\n */\r\n RefreshToken = 3,\r\n /*\r\n * acquireTokenSilent will not look in the cache for the access token. It will go directly to network with the\r\n * cached refresh token. If the refresh token is expired an attempt will be made to renew it. This is equivalent to\r\n * setting \"forceRefresh: true\".\r\n */\r\n RefreshTokenAndNetwork = 4,\r\n /*\r\n * acquireTokenSilent will attempt to renew both access and refresh tokens. It will not look in the cache. This will\r\n * always fail if 3rd party cookies are blocked by the browser.\r\n */\r\n Skip = 5,\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError } from \"./AuthError\";\r\n\r\n/**\r\n * Error thrown when there is an error with the server code, for example, unavailability.\r\n */\r\nexport class ServerError extends AuthError {\r\n\r\n constructor(errorCode?: string, errorMessage?: string, subError?: string) {\r\n super(errorCode, errorMessage, subError);\r\n this.name = \"ServerError\";\r\n\r\n Object.setPrototypeOf(this, ServerError.prototype);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants } from \"../utils/Constants\";\r\nimport { AuthError } from \"./AuthError\";\r\n\r\n/**\r\n * InteractionRequiredServerErrorMessage contains string constants used by error codes and messages returned by the server indicating interaction is required\r\n */\r\nexport const InteractionRequiredServerErrorMessage = [\r\n \"interaction_required\",\r\n \"consent_required\",\r\n \"login_required\"\r\n];\r\n\r\nexport const InteractionRequiredAuthSubErrorMessage = [\r\n \"message_only\",\r\n \"additional_action\",\r\n \"basic_action\",\r\n \"user_password_expired\",\r\n \"consent_required\"\r\n];\r\n\r\n/**\r\n * Interaction required errors defined by the SDK\r\n */\r\nexport const InteractionRequiredAuthErrorMessage = {\r\n noTokensFoundError: {\r\n code: \"no_tokens_found\",\r\n desc: \"No refresh token found in the cache. Please sign-in.\"\r\n },\r\n native_account_unavailable: {\r\n code: \"native_account_unavailable\",\r\n desc: \"The requested account is not available in the native broker. It may have been deleted or logged out. Please sign-in again using an interactive API.\"\r\n }\r\n};\r\n\r\n/**\r\n * Error thrown when user interaction is required.\r\n */\r\nexport class InteractionRequiredAuthError extends AuthError {\r\n /**\r\n * The time the error occured at\r\n */\r\n timestamp: string;\r\n\r\n /**\r\n * TraceId associated with the error\r\n */\r\n traceId: string;\r\n\r\n /**\r\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/claims-challenge.md\r\n * \r\n * A string with extra claims needed for the token request to succeed\r\n * web site: redirect the user to the authorization page and set the extra claims\r\n * web api: include the claims in the WWW-Authenticate header that are sent back to the client so that it knows to request a token with the extra claims\r\n * desktop application or browser context: include the claims when acquiring the token interactively\r\n * app to app context (client_credentials): include the claims in the AcquireTokenByClientCredential request\r\n */\r\n claims: string;\r\n\r\n constructor(errorCode?: string, errorMessage?: string, subError?: string, timestamp?: string, traceId?: string, correlationId?: string, claims?: string) {\r\n super(errorCode, errorMessage, subError);\r\n Object.setPrototypeOf(this, InteractionRequiredAuthError.prototype);\r\n \r\n this.timestamp = timestamp || Constants.EMPTY_STRING;\r\n this.traceId = traceId || Constants.EMPTY_STRING;\r\n this.correlationId = correlationId || Constants.EMPTY_STRING;\r\n this.claims = claims || Constants.EMPTY_STRING;\r\n this.name = \"InteractionRequiredAuthError\";\r\n }\r\n\r\n /**\r\n * Helper function used to determine if an error thrown by the server requires interaction to resolve\r\n * @param errorCode \r\n * @param errorString \r\n * @param subError \r\n */\r\n static isInteractionRequiredError(errorCode?: string, errorString?: string, subError?: string): boolean {\r\n const isInteractionRequiredErrorCode = !!errorCode && InteractionRequiredServerErrorMessage.indexOf(errorCode) > -1;\r\n const isInteractionRequiredSubError = !!subError && InteractionRequiredAuthSubErrorMessage.indexOf(subError) > -1;\r\n const isInteractionRequiredErrorDesc = !!errorString && InteractionRequiredServerErrorMessage.some((irErrorCode) => {\r\n return errorString.indexOf(irErrorCode) > -1;\r\n });\r\n\r\n return isInteractionRequiredErrorCode || isInteractionRequiredErrorDesc || isInteractionRequiredSubError;\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the authorization code required for a token request is null or empty.\r\n */\r\n static createNoTokensFoundError(): InteractionRequiredAuthError {\r\n return new InteractionRequiredAuthError(InteractionRequiredAuthErrorMessage.noTokensFoundError.code, InteractionRequiredAuthErrorMessage.noTokensFoundError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the native broker returns ACCOUNT_UNAVAILABLE status, indicating that the account was removed and interactive sign-in is required\r\n * @returns \r\n */\r\n static createNativeAccountUnavailableError(): InteractionRequiredAuthError {\r\n return new InteractionRequiredAuthError(InteractionRequiredAuthErrorMessage.native_account_unavailable.code, InteractionRequiredAuthErrorMessage.native_account_unavailable.desc);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError } from \"./AuthError\";\r\n\r\n/**\r\n * ClientAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nexport const JoseHeaderErrorMessage = {\r\n missingKidError: {\r\n code: \"missing_kid_error\",\r\n desc: \"The JOSE Header for the requested JWT, JWS or JWK object requires a keyId to be configured as the 'kid' header claim. No 'kid' value was provided.\"\r\n },\r\n missingAlgError: {\r\n code: \"missing_alg_error\",\r\n desc: \"The JOSE Header for the requested JWT, JWS or JWK object requires an algorithm to be specified as the 'alg' header claim. No 'alg' value was provided.\"\r\n },\r\n};\r\n\r\n/**\r\n * Error thrown when there is an error in the client code running on the browser.\r\n */\r\nexport class JoseHeaderError extends AuthError {\r\n constructor(errorCode: string, errorMessage?: string) {\r\n super(errorCode, errorMessage);\r\n this.name = \"JoseHeaderError\";\r\n\r\n Object.setPrototypeOf(this, JoseHeaderError.prototype);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when keyId isn't set on JOSE header.\r\n */\r\n static createMissingKidError(): JoseHeaderError {\r\n return new JoseHeaderError(JoseHeaderErrorMessage.missingKidError.code, JoseHeaderErrorMessage.missingKidError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when algorithm isn't set on JOSE header.\r\n */\r\n static createMissingAlgError(): JoseHeaderError {\r\n return new JoseHeaderError(JoseHeaderErrorMessage.missingAlgError.code, JoseHeaderErrorMessage.missingAlgError.desc);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Logger } from \"@azure/msal-common\";\r\nimport { CachedKeyPair } from \"../crypto/CryptoOps\";\r\nimport { AsyncMemoryStorage } from \"./AsyncMemoryStorage\";\r\n\r\nexport enum CryptoKeyStoreNames {\r\n asymmetricKeys = \"asymmetricKeys\",\r\n symmetricKeys = \"symmetricKeys\"\r\n}\r\n/**\r\n * MSAL CryptoKeyStore DB Version 2\r\n */\r\nexport class CryptoKeyStore {\r\n public asymmetricKeys: AsyncMemoryStorage;\r\n public symmetricKeys: AsyncMemoryStorage;\r\n public logger: Logger;\r\n\r\n constructor(logger: Logger){\r\n this.logger = logger;\r\n this.asymmetricKeys = new AsyncMemoryStorage(this.logger, CryptoKeyStoreNames.asymmetricKeys);\r\n this.symmetricKeys = new AsyncMemoryStorage(this.logger, CryptoKeyStoreNames.symmetricKeys);\r\n }\r\n\r\n async clear(): Promise {\r\n // Delete in-memory keystores\r\n this.asymmetricKeys.clearInMemory();\r\n\t this.symmetricKeys.clearInMemory();\r\n\t\t\r\n /**\r\n * There is only one database, so calling clearPersistent on asymmetric keystore takes care of\r\n * every persistent keystore\r\n */\r\n try {\r\n await this.asymmetricKeys.clearPersistent();\r\n return true;\r\n } catch (e) {\r\n if (e instanceof Error) {\r\n this.logger.error(`Clearing keystore failed with error: ${e.message}`);\r\n } else {\r\n this.logger.error(\"Clearing keystore failed with unknown error\");\r\n }\r\n \r\n return false;\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { JoseHeaderError } from \"../error/JoseHeaderError\";\r\nimport { JsonTypes } from \"../utils/Constants\";\r\n\r\nexport type JoseHeaderOptions = {\r\n typ?: JsonTypes,\r\n alg?: string,\r\n kid?: string\r\n};\r\n\r\nexport class JoseHeader {\r\n public typ?: JsonTypes;\r\n public alg?: string;\r\n public kid?: string;\r\n\r\n constructor (options: JoseHeaderOptions) {\r\n this.typ = options.typ;\r\n this.alg = options.alg;\r\n this.kid = options.kid;\r\n }\r\n\r\n /**\r\n * Builds SignedHttpRequest formatted JOSE Header from the\r\n * JOSE Header options provided or previously set on the object and returns\r\n * the stringified header object.\r\n * Throws if keyId or algorithm aren't provided since they are required for Access Token Binding.\r\n * @param shrHeaderOptions \r\n * @returns \r\n */\r\n static getShrHeaderString(shrHeaderOptions: JoseHeaderOptions): string {\r\n // KeyID is required on the SHR header\r\n if (!shrHeaderOptions.kid) {\r\n throw JoseHeaderError.createMissingKidError();\r\n }\r\n\r\n // Alg is required on the SHR header\r\n if (!shrHeaderOptions.alg) {\r\n throw JoseHeaderError.createMissingAlgError();\r\n }\r\n\r\n const shrHeader = new JoseHeader({\r\n // Access Token PoP headers must have type pop, but the type header can be overriden for special cases\r\n typ: shrHeaderOptions.typ || JsonTypes.Pop,\r\n kid: shrHeaderOptions.kid,\r\n alg: shrHeaderOptions.alg\r\n });\r\n\r\n return JSON.stringify(shrHeader);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\n/**\r\n * Utility class for math specific functions in browser.\r\n */\r\nexport class MathUtils {\r\n\r\n /**\r\n * Decimal to Hex\r\n *\r\n * @param num\r\n */\r\n static decimalToHex(num: number): string {\r\n let hex: string = num.toString(16);\r\n while (hex.length < 2) {\r\n hex = \"0\" + hex;\r\n }\r\n return hex;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants , IGuidGenerator } from \"@azure/msal-common\";\r\nimport { MathUtils } from \"../utils/MathUtils\";\r\nimport { BrowserCrypto } from \"./BrowserCrypto\";\r\nexport class GuidGenerator implements IGuidGenerator {\r\n\r\n // browser crypto object used to generate random values\r\n private cryptoObj: BrowserCrypto;\r\n\r\n constructor(cryptoObj: BrowserCrypto) {\r\n this.cryptoObj = cryptoObj;\r\n }\r\n\r\n /*\r\n * RFC4122: The version 4 UUID is meant for generating UUIDs from truly-random or\r\n * pseudo-random numbers.\r\n * The algorithm is as follows:\r\n * Set the two most significant bits (bits 6 and 7) of the\r\n * clock_seq_hi_and_reserved to zero and one, respectively.\r\n * Set the four most significant bits (bits 12 through 15) of the\r\n * time_hi_and_version field to the 4-bit version number from\r\n * Section 4.1.3. Version4\r\n * Set all the other bits to randomly (or pseudo-randomly) chosen\r\n * values.\r\n * UUID = time-low \"-\" time-mid \"-\"time-high-and-version \"-\"clock-seq-reserved and low(2hexOctet)\"-\" node\r\n * time-low = 4hexOctet\r\n * time-mid = 2hexOctet\r\n * time-high-and-version = 2hexOctet\r\n * clock-seq-and-reserved = hexOctet:\r\n * clock-seq-low = hexOctet\r\n * node = 6hexOctet\r\n * Format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\r\n * y could be 1000, 1001, 1010, 1011 since most significant two bits needs to be 10\r\n * y values are 8, 9, A, B\r\n */\r\n generateGuid(): string {\r\n try {\r\n const buffer: Uint8Array = new Uint8Array(16);\r\n this.cryptoObj.getRandomValues(buffer);\r\n\r\n // buffer[6] and buffer[7] represents the time_hi_and_version field. We will set the four most significant bits (4 through 7) of buffer[6] to represent decimal number 4 (UUID version number).\r\n buffer[6] |= 0x40; // buffer[6] | 01000000 will set the 6 bit to 1.\r\n buffer[6] &= 0x4f; // buffer[6] & 01001111 will set the 4, 5, and 7 bit to 0 such that bits 4-7 == 0100 = \"4\".\r\n\r\n // buffer[8] represents the clock_seq_hi_and_reserved field. We will set the two most significant bits (6 and 7) of the clock_seq_hi_and_reserved to zero and one, respectively.\r\n buffer[8] |= 0x80; // buffer[8] | 10000000 will set the 7 bit to 1.\r\n buffer[8] &= 0xbf; // buffer[8] & 10111111 will set the 6 bit to 0.\r\n\r\n return MathUtils.decimalToHex(buffer[0]) + MathUtils.decimalToHex(buffer[1])\r\n + MathUtils.decimalToHex(buffer[2]) + MathUtils.decimalToHex(buffer[3])\r\n + \"-\" + MathUtils.decimalToHex(buffer[4]) + MathUtils.decimalToHex(buffer[5])\r\n + \"-\" + MathUtils.decimalToHex(buffer[6]) + MathUtils.decimalToHex(buffer[7])\r\n + \"-\" + MathUtils.decimalToHex(buffer[8]) + MathUtils.decimalToHex(buffer[9])\r\n + \"-\" + MathUtils.decimalToHex(buffer[10]) + MathUtils.decimalToHex(buffer[11])\r\n + MathUtils.decimalToHex(buffer[12]) + MathUtils.decimalToHex(buffer[13])\r\n + MathUtils.decimalToHex(buffer[14]) + MathUtils.decimalToHex(buffer[15]);\r\n }\r\n catch (err) {\r\n const guidHolder: string = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\";\r\n const hex: string = \"0123456789abcdef\";\r\n let r: number = 0;\r\n let guidResponse: string = Constants.EMPTY_STRING;\r\n for (let i: number = 0; i < 36; i++) {\r\n if (guidHolder[i] !== \"-\" && guidHolder[i] !== \"4\") {\r\n // each x and y needs to be random\r\n r = Math.random() * 16 | 0;\r\n }\r\n if (guidHolder[i] === \"x\") {\r\n guidResponse += hex[r];\r\n } else if (guidHolder[i] === \"y\") {\r\n // clock-seq-and-reserved first hex is filtered and remaining hex values are random\r\n r &= 0x3; // bit and with 0011 to set pos 2 to zero ?0??\r\n r |= 0x8; // set pos 3 to 1 as 1???\r\n guidResponse += hex[r];\r\n } else {\r\n guidResponse += guidHolder[i];\r\n }\r\n }\r\n return guidResponse;\r\n }\r\n }\r\n\r\n /**\r\n * verifies if a string is GUID\r\n * @param guid\r\n */\r\n isGuid(guid: string): boolean {\r\n const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\r\n return regexGuid.test(guid);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants } from \"@azure/msal-common\";\r\n\r\n/**\r\n * Utility functions for strings in a browser. See here for implementation details:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64\r\n */\r\nexport class BrowserStringUtils {\r\n\r\n /**\r\n * Converts string to Uint8Array\r\n * @param sDOMStr \r\n */\r\n static stringToUtf8Arr (sDOMStr: string): Uint8Array {\r\n let nChr;\r\n let nArrLen = 0;\r\n const nStrLen = sDOMStr.length;\r\n /* mapping... */\r\n for (let nMapIdx = 0; nMapIdx < nStrLen; nMapIdx++) {\r\n nChr = sDOMStr.charCodeAt(nMapIdx);\r\n nArrLen += nChr < 0x80 ? 1 : nChr < 0x800 ? 2 : nChr < 0x10000 ? 3 : nChr < 0x200000 ? 4 : nChr < 0x4000000 ? 5 : 6;\r\n }\r\n\r\n const aBytes = new Uint8Array(nArrLen);\r\n\r\n /* transcription... */\r\n\r\n for (let nIdx = 0, nChrIdx = 0; nIdx < nArrLen; nChrIdx++) {\r\n nChr = sDOMStr.charCodeAt(nChrIdx);\r\n if (nChr < 128) {\r\n /* one byte */\r\n aBytes[nIdx++] = nChr;\r\n } else if (nChr < 0x800) {\r\n /* two bytes */\r\n aBytes[nIdx++] = 192 + (nChr >>> 6);\r\n aBytes[nIdx++] = 128 + (nChr & 63);\r\n } else if (nChr < 0x10000) {\r\n /* three bytes */\r\n aBytes[nIdx++] = 224 + (nChr >>> 12);\r\n aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);\r\n aBytes[nIdx++] = 128 + (nChr & 63);\r\n } else if (nChr < 0x200000) {\r\n /* four bytes */\r\n aBytes[nIdx++] = 240 + (nChr >>> 18);\r\n aBytes[nIdx++] = 128 + (nChr >>> 12 & 63);\r\n aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);\r\n aBytes[nIdx++] = 128 + (nChr & 63);\r\n } else if (nChr < 0x4000000) {\r\n /* five bytes */\r\n aBytes[nIdx++] = 248 + (nChr >>> 24);\r\n aBytes[nIdx++] = 128 + (nChr >>> 18 & 63);\r\n aBytes[nIdx++] = 128 + (nChr >>> 12 & 63);\r\n aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);\r\n aBytes[nIdx++] = 128 + (nChr & 63);\r\n } else /* if (nChr <= 0x7fffffff) */ {\r\n /* six bytes */\r\n aBytes[nIdx++] = 252 + (nChr >>> 30);\r\n aBytes[nIdx++] = 128 + (nChr >>> 24 & 63);\r\n aBytes[nIdx++] = 128 + (nChr >>> 18 & 63);\r\n aBytes[nIdx++] = 128 + (nChr >>> 12 & 63);\r\n aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);\r\n aBytes[nIdx++] = 128 + (nChr & 63);\r\n }\r\n }\r\n\r\n return aBytes; \r\n }\r\n\r\n /**\r\n * Converst string to ArrayBuffer\r\n * @param dataString \r\n */\r\n static stringToArrayBuffer(dataString: string): ArrayBuffer {\r\n const data = new ArrayBuffer(dataString.length);\r\n const dataView = new Uint8Array(data);\r\n for (let i: number = 0; i < dataString.length; i++) {\r\n dataView[i] = dataString.charCodeAt(i);\r\n }\r\n return data;\r\n }\r\n\r\n /**\r\n * Converts Uint8Array to a string\r\n * @param aBytes \r\n */\r\n static utf8ArrToString (aBytes: Uint8Array): string {\r\n let sView = Constants.EMPTY_STRING;\r\n for (let nPart, nLen = aBytes.length, nIdx = 0; nIdx < nLen; nIdx++) {\r\n nPart = aBytes[nIdx];\r\n sView += String.fromCharCode(\r\n nPart > 251 && nPart < 254 && nIdx + 5 < nLen ? /* six bytes */\r\n /* (nPart - 252 << 30) may be not so safe in ECMAScript! So...: */\r\n (nPart - 252) * 1073741824 + (aBytes[++nIdx] - 128 << 24) + (aBytes[++nIdx] - 128 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128\r\n : nPart > 247 && nPart < 252 && nIdx + 4 < nLen ? /* five bytes */\r\n (nPart - 248 << 24) + (aBytes[++nIdx] - 128 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128\r\n : nPart > 239 && nPart < 248 && nIdx + 3 < nLen ? /* four bytes */\r\n (nPart - 240 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128\r\n : nPart > 223 && nPart < 240 && nIdx + 2 < nLen ? /* three bytes */\r\n (nPart - 224 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128\r\n : nPart > 191 && nPart < 224 && nIdx + 1 < nLen ? /* two bytes */\r\n (nPart - 192 << 6) + aBytes[++nIdx] - 128\r\n : /* nPart < 127 ? */ /* one byte */\r\n nPart\r\n );\r\n }\r\n return sView;\r\n }\r\n\r\n /**\r\n * Returns stringified jwk.\r\n * @param jwk \r\n */\r\n static getSortedObjectString(obj: object): string {\r\n return JSON.stringify(obj, Object.keys(obj).sort());\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants } from \"@azure/msal-common\";\r\nimport { BrowserStringUtils } from \"../utils/BrowserStringUtils\";\r\n\r\n/**\r\n * Class which exposes APIs to encode plaintext to base64 encoded string. See here for implementation details:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64\r\n */\r\nexport class Base64Encode {\r\n \r\n /**\r\n * Returns URL Safe b64 encoded string from a plaintext string.\r\n * @param input \r\n */\r\n urlEncode(input: string): string {\r\n return encodeURIComponent(this.encode(input)\r\n .replace(/=/g, Constants.EMPTY_STRING)\r\n .replace(/\\+/g, \"-\")\r\n .replace(/\\//g, \"_\"));\r\n }\r\n\r\n /**\r\n * Returns URL Safe b64 encoded string from an int8Array.\r\n * @param inputArr \r\n */\r\n urlEncodeArr(inputArr: Uint8Array): string {\r\n return this.base64EncArr(inputArr)\r\n .replace(/=/g, Constants.EMPTY_STRING)\r\n .replace(/\\+/g, \"-\")\r\n .replace(/\\//g, \"_\");\r\n }\r\n\r\n /**\r\n * Returns b64 encoded string from plaintext string.\r\n * @param input \r\n */\r\n encode(input: string): string {\r\n const inputUtf8Arr = BrowserStringUtils.stringToUtf8Arr(input);\r\n return this.base64EncArr(inputUtf8Arr);\r\n }\r\n\r\n /**\r\n * Base64 encode byte array\r\n * @param aBytes \r\n */\r\n private base64EncArr(aBytes: Uint8Array): string { \r\n const eqLen = (3 - (aBytes.length % 3)) % 3;\r\n let sB64Enc = Constants.EMPTY_STRING;\r\n \r\n for (let nMod3, nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {\r\n nMod3 = nIdx % 3;\r\n /* Uncomment the following line in order to split the output in lines 76-character long: */\r\n /*\r\n *if (nIdx > 0 && (nIdx * 4 / 3) % 76 === 0) { sB64Enc += \"\\r\\n\"; }\r\n */\r\n nUint24 |= aBytes[nIdx] << (16 >>> nMod3 & 24);\r\n if (nMod3 === 2 || aBytes.length - nIdx === 1) {\r\n sB64Enc += String.fromCharCode(\r\n this.uint6ToB64(nUint24 >>> 18 & 63), \r\n this.uint6ToB64(nUint24 >>> 12 & 63), \r\n this.uint6ToB64(nUint24 >>> 6 & 63), \r\n this.uint6ToB64(nUint24 & 63)\r\n );\r\n nUint24 = 0;\r\n }\r\n }\r\n\r\n return eqLen === 0 ? sB64Enc : sB64Enc.substring(0, sB64Enc.length - eqLen) + (eqLen === 1 ? \"=\" : \"==\");\r\n }\r\n\r\n /**\r\n * Base64 string to array encoding helper\r\n * @param nUint6 \r\n */\r\n private uint6ToB64 (nUint6: number): number {\r\n return nUint6 < 26 ?\r\n nUint6 + 65\r\n : nUint6 < 52 ?\r\n nUint6 + 71\r\n : nUint6 < 62 ?\r\n nUint6 - 4\r\n : nUint6 === 62 ?\r\n 43\r\n : nUint6 === 63 ?\r\n 47\r\n :\r\n 65;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants } from \"@azure/msal-common\";\r\nimport { BrowserStringUtils } from \"../utils/BrowserStringUtils\";\r\n\r\n/**\r\n * Class which exposes APIs to decode base64 strings to plaintext. See here for implementation details:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64\r\n */\r\nexport class Base64Decode {\r\n\r\n /**\r\n * Returns a URL-safe plaintext decoded string from b64 encoded input.\r\n * @param input \r\n */\r\n decode(input: string): string {\r\n let encodedString = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\r\n switch (encodedString.length % 4) {\r\n case 0:\r\n break;\r\n case 2:\r\n encodedString += \"==\";\r\n break;\r\n case 3:\r\n encodedString += \"=\";\r\n break;\r\n default:\r\n throw new Error(\"Invalid base64 string\");\r\n }\r\n\r\n const inputUtf8Arr = this.base64DecToArr(encodedString);\r\n return BrowserStringUtils.utf8ArrToString(inputUtf8Arr);\r\n }\r\n\r\n /**\r\n * Decodes base64 into Uint8Array\r\n * @param base64String \r\n * @param nBlockSize \r\n */\r\n private base64DecToArr(base64String: string, nBlockSize?: number): Uint8Array {\r\n const sB64Enc = base64String.replace(/[^A-Za-z0-9\\+\\/]/g, Constants.EMPTY_STRING);\r\n const nInLen = sB64Enc.length;\r\n const nOutLen = nBlockSize ? Math.ceil((nInLen * 3 + 1 >>> 2) / nBlockSize) * nBlockSize : nInLen * 3 + 1 >>> 2;\r\n const aBytes = new Uint8Array(nOutLen);\r\n\r\n for (let nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; nInIdx < nInLen; nInIdx++) {\r\n nMod4 = nInIdx & 3;\r\n nUint24 |= this.b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << 18 - 6 * nMod4;\r\n if (nMod4 === 3 || nInLen - nInIdx === 1) {\r\n for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {\r\n aBytes[nOutIdx] = nUint24 >>> (16 >>> nMod3 & 24) & 255;\r\n }\r\n nUint24 = 0;\r\n }\r\n }\r\n\r\n return aBytes;\r\n }\r\n\r\n /**\r\n * Base64 string to array decoding helper\r\n * @param charNum \r\n */\r\n private b64ToUint6(charNum: number): number {\r\n return charNum > 64 && charNum < 91 ?\r\n charNum - 65\r\n : charNum > 96 && charNum < 123 ? \r\n charNum - 71\r\n : charNum > 47 && charNum < 58 ?\r\n charNum + 4\r\n : charNum === 43 ?\r\n 62\r\n : charNum === 47 ?\r\n 63\r\n :\r\n 0;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError, StringUtils } from \"@azure/msal-common\";\r\n\r\n/**\r\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nexport const BrowserAuthErrorMessage = {\r\n pkceNotGenerated: {\r\n code: \"pkce_not_created\",\r\n desc: \"The PKCE code challenge and verifier could not be generated.\"\r\n },\r\n cryptoDoesNotExist: {\r\n code: \"crypto_nonexistent\",\r\n desc: \"The crypto object or function is not available.\"\r\n },\r\n httpMethodNotImplementedError: {\r\n code: \"http_method_not_implemented\",\r\n desc: \"The HTTP method given has not been implemented in this library.\"\r\n },\r\n emptyNavigateUriError: {\r\n code: \"empty_navigate_uri\",\r\n desc: \"Navigation URI is empty. Please check stack trace for more info.\"\r\n },\r\n hashEmptyError: {\r\n code: \"hash_empty_error\",\r\n desc: \"Hash value cannot be processed because it is empty. Please verify that your redirectUri is not clearing the hash. For more visit: aka.ms/msaljs/browser-errors.\"\r\n },\r\n hashDoesNotContainStateError: {\r\n code: \"no_state_in_hash\",\r\n desc: \"Hash does not contain state. Please verify that the request originated from msal.\"\r\n },\r\n hashDoesNotContainKnownPropertiesError: {\r\n code: \"hash_does_not_contain_known_properties\",\r\n desc: \"Hash does not contain known properites. Please verify that your redirectUri is not changing the hash. For more visit: aka.ms/msaljs/browser-errors.\"\r\n },\r\n unableToParseStateError: {\r\n code: \"unable_to_parse_state\",\r\n desc: \"Unable to parse state. Please verify that the request originated from msal.\"\r\n },\r\n stateInteractionTypeMismatchError: {\r\n code: \"state_interaction_type_mismatch\",\r\n desc: \"Hash contains state but the interaction type does not match the caller.\"\r\n },\r\n interactionInProgress: {\r\n code: \"interaction_in_progress\",\r\n desc: \"Interaction is currently in progress. Please ensure that this interaction has been completed before calling an interactive API. For more visit: aka.ms/msaljs/browser-errors.\"\r\n },\r\n popupWindowError: {\r\n code: \"popup_window_error\",\r\n desc: \"Error opening popup window. This can happen if you are using IE or if popups are blocked in the browser.\"\r\n },\r\n emptyWindowError: {\r\n code: \"empty_window_error\",\r\n desc: \"window.open returned null or undefined window object.\"\r\n },\r\n userCancelledError: {\r\n code: \"user_cancelled\",\r\n desc: \"User cancelled the flow.\"\r\n },\r\n monitorPopupTimeoutError: {\r\n code: \"monitor_window_timeout\",\r\n desc: \"Token acquisition in popup failed due to timeout. For more visit: aka.ms/msaljs/browser-errors.\"\r\n },\r\n monitorIframeTimeoutError: {\r\n code: \"monitor_window_timeout\",\r\n desc: \"Token acquisition in iframe failed due to timeout. For more visit: aka.ms/msaljs/browser-errors.\"\r\n },\r\n redirectInIframeError: {\r\n code: \"redirect_in_iframe\",\r\n desc: \"Redirects are not supported for iframed or brokered applications. Please ensure you are using MSAL.js in a top frame of the window if using the redirect APIs, or use the popup APIs.\"\r\n },\r\n blockTokenRequestsInHiddenIframeError: {\r\n code: \"block_iframe_reload\",\r\n desc: \"Request was blocked inside an iframe because MSAL detected an authentication response. For more visit: aka.ms/msaljs/browser-errors\"\r\n },\r\n blockAcquireTokenInPopupsError: {\r\n code: \"block_nested_popups\",\r\n desc: \"Request was blocked inside a popup because MSAL detected it was running in a popup.\"\r\n },\r\n iframeClosedPrematurelyError: {\r\n code: \"iframe_closed_prematurely\",\r\n desc: \"The iframe being monitored was closed prematurely.\"\r\n },\r\n silentLogoutUnsupportedError: {\r\n code: \"silent_logout_unsupported\",\r\n desc: \"Silent logout not supported. Please call logoutRedirect or logoutPopup instead.\"\r\n },\r\n noAccountError: {\r\n code: \"no_account_error\",\r\n desc: \"No account object provided to acquireTokenSilent and no active account has been set. Please call setActiveAccount or provide an account on the request.\"\r\n },\r\n silentPromptValueError: {\r\n code: \"silent_prompt_value_error\",\r\n desc: \"The value given for the prompt value is not valid for silent requests - must be set to 'none' or 'no_session'.\"\r\n },\r\n noTokenRequestCacheError: {\r\n code: \"no_token_request_cache_error\",\r\n desc: \"No token request found in cache.\"\r\n },\r\n unableToParseTokenRequestCacheError: {\r\n code: \"unable_to_parse_token_request_cache_error\",\r\n desc: \"The cached token request could not be parsed.\"\r\n },\r\n noCachedAuthorityError: {\r\n code: \"no_cached_authority_error\",\r\n desc: \"No cached authority found.\"\r\n },\r\n authRequestNotSet: {\r\n code: \"auth_request_not_set_error\",\r\n desc: \"Auth Request not set. Please ensure initiateAuthRequest was called from the InteractionHandler\"\r\n },\r\n invalidCacheType: {\r\n code: \"invalid_cache_type\",\r\n desc: \"Invalid cache type\"\r\n },\r\n notInBrowserEnvironment: {\r\n code: \"non_browser_environment\",\r\n desc: \"Login and token requests are not supported in non-browser environments.\"\r\n },\r\n databaseNotOpen: {\r\n code: \"database_not_open\",\r\n desc: \"Database is not open!\"\r\n },\r\n noNetworkConnectivity: {\r\n code: \"no_network_connectivity\",\r\n desc: \"No network connectivity. Check your internet connection.\"\r\n },\r\n postRequestFailed: {\r\n code: \"post_request_failed\",\r\n desc: \"Network request failed: If the browser threw a CORS error, check that the redirectUri is registered in the Azure App Portal as type 'SPA'\"\r\n },\r\n getRequestFailed: {\r\n code: \"get_request_failed\",\r\n desc: \"Network request failed. Please check the network trace to determine root cause.\"\r\n },\r\n failedToParseNetworkResponse: {\r\n code: \"failed_to_parse_response\",\r\n desc: \"Failed to parse network response. Check network trace.\"\r\n },\r\n unableToLoadTokenError: {\r\n code: \"unable_to_load_token\",\r\n desc: \"Error loading token to cache.\"\r\n },\r\n signingKeyNotFoundInStorage: {\r\n code: \"crypto_key_not_found\",\r\n desc: \"Cryptographic Key or Keypair not found in browser storage.\"\r\n },\r\n authCodeRequired: {\r\n code: \"auth_code_required\",\r\n desc: \"An authorization code must be provided (as the `code` property on the request) to this flow.\"\r\n },\r\n authCodeOrNativeAccountRequired: {\r\n code: \"auth_code_or_nativeAccountId_required\",\r\n desc: \"An authorization code or nativeAccountId must be provided to this flow.\"\r\n },\r\n spaCodeAndNativeAccountPresent: {\r\n code: \"spa_code_and_nativeAccountId_present\",\r\n desc: \"Request cannot contain both spa code and native account id.\"\r\n },\r\n databaseUnavailable: {\r\n code: \"database_unavailable\",\r\n desc: \"IndexedDB, which is required for persistent cryptographic key storage, is unavailable. This may be caused by browser privacy features which block persistent storage in third-party contexts.\"\r\n },\r\n unableToAcquireTokenFromNativePlatform: {\r\n code: \"unable_to_acquire_token_from_native_platform\",\r\n desc: \"Unable to acquire token from native platform. For a list of possible reasons visit aka.ms/msaljs/browser-errors.\"\r\n },\r\n nativeHandshakeTimeout: {\r\n code: \"native_handshake_timeout\",\r\n desc: \"Timed out while attempting to establish connection to browser extension\"\r\n },\r\n nativeExtensionNotInstalled: {\r\n code: \"native_extension_not_installed\",\r\n desc: \"Native extension is not installed. If you think this is a mistake call the initialize function.\"\r\n },\r\n nativeConnectionNotEstablished: {\r\n code: \"native_connection_not_established\",\r\n desc: \"Connection to native platform has not been established. Please install a compatible browser extension and run initialize(). For more please visit aka.ms/msaljs/browser-errors.\"\r\n },\r\n nativeBrokerCalledBeforeInitialize: {\r\n code: \"native_broker_called_before_initialize\",\r\n desc: \"You must call and await the initialize function before attempting to call any other MSAL API when native brokering is enabled. For more please visit aka.ms/msaljs/browser-errors.\"\r\n },\r\n nativePromptNotSupported: {\r\n code: \"native_prompt_not_supported\",\r\n desc: \"The provided prompt is not supported by the native platform. This request should be routed to the web based flow.\"\r\n }\r\n};\r\n\r\n/**\r\n * Browser library error class thrown by the MSAL.js library for SPAs\r\n */\r\nexport class BrowserAuthError extends AuthError {\r\n\r\n constructor(errorCode: string, errorMessage?: string) {\r\n super(errorCode, errorMessage);\r\n\r\n Object.setPrototypeOf(this, BrowserAuthError.prototype);\r\n this.name = \"BrowserAuthError\";\r\n }\r\n\r\n /**\r\n * Creates an error thrown when PKCE is not implemented.\r\n * @param errDetail\r\n */\r\n static createPkceNotGeneratedError(errDetail: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.pkceNotGenerated.code,\r\n `${BrowserAuthErrorMessage.pkceNotGenerated.desc} Detail:${errDetail}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the crypto object is unavailable.\r\n * @param errDetail\r\n */\r\n static createCryptoNotAvailableError(errDetail: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.cryptoDoesNotExist.code,\r\n `${BrowserAuthErrorMessage.cryptoDoesNotExist.desc} Detail:${errDetail}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when an HTTP method hasn't been implemented by the browser class.\r\n * @param method\r\n */\r\n static createHttpMethodNotImplementedError(method: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.httpMethodNotImplementedError.code,\r\n `${BrowserAuthErrorMessage.httpMethodNotImplementedError.desc} Given Method: ${method}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the navigation URI is empty.\r\n */\r\n static createEmptyNavigationUriError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.emptyNavigateUriError.code, BrowserAuthErrorMessage.emptyNavigateUriError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the hash string value is unexpectedly empty.\r\n * @param hashValue\r\n */\r\n static createEmptyHashError(hashValue: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.hashEmptyError.code, `${BrowserAuthErrorMessage.hashEmptyError.desc} Given Url: ${hashValue}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the hash string value is unexpectedly empty.\r\n */\r\n static createHashDoesNotContainStateError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.hashDoesNotContainStateError.code, BrowserAuthErrorMessage.hashDoesNotContainStateError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the hash string value does not contain known properties\r\n */\r\n static createHashDoesNotContainKnownPropertiesError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.hashDoesNotContainKnownPropertiesError.code, BrowserAuthErrorMessage.hashDoesNotContainKnownPropertiesError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the hash string value is unexpectedly empty.\r\n */\r\n static createUnableToParseStateError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.unableToParseStateError.code, BrowserAuthErrorMessage.unableToParseStateError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the state value in the hash does not match the interaction type of the API attempting to consume it.\r\n */\r\n static createStateInteractionTypeMismatchError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.stateInteractionTypeMismatchError.code, BrowserAuthErrorMessage.stateInteractionTypeMismatchError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when a browser interaction (redirect or popup) is in progress.\r\n */\r\n static createInteractionInProgressError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.interactionInProgress.code, BrowserAuthErrorMessage.interactionInProgress.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the popup window could not be opened.\r\n * @param errDetail\r\n */\r\n static createPopupWindowError(errDetail?: string): BrowserAuthError {\r\n let errorMessage = BrowserAuthErrorMessage.popupWindowError.desc;\r\n errorMessage = !StringUtils.isEmpty(errDetail) ? `${errorMessage} Details: ${errDetail}` : errorMessage;\r\n return new BrowserAuthError(BrowserAuthErrorMessage.popupWindowError.code, errorMessage);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when window.open returns an empty window object.\r\n * @param errDetail\r\n */\r\n static createEmptyWindowCreatedError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.emptyWindowError.code, BrowserAuthErrorMessage.emptyWindowError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the user closes a popup.\r\n */\r\n static createUserCancelledError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.userCancelledError.code,\r\n BrowserAuthErrorMessage.userCancelledError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when monitorPopupFromHash times out for a given popup.\r\n */\r\n static createMonitorPopupTimeoutError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.monitorPopupTimeoutError.code,\r\n BrowserAuthErrorMessage.monitorPopupTimeoutError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when monitorIframeFromHash times out for a given iframe.\r\n */\r\n static createMonitorIframeTimeoutError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.monitorIframeTimeoutError.code,\r\n BrowserAuthErrorMessage.monitorIframeTimeoutError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when navigateWindow is called inside an iframe or brokered applications.\r\n * @param windowParentCheck\r\n */\r\n static createRedirectInIframeError(windowParentCheck: boolean): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.redirectInIframeError.code,\r\n `${BrowserAuthErrorMessage.redirectInIframeError.desc} (window.parent !== window) => ${windowParentCheck}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when an auth reload is done inside an iframe.\r\n */\r\n static createBlockReloadInHiddenIframeError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.blockTokenRequestsInHiddenIframeError.code,\r\n BrowserAuthErrorMessage.blockTokenRequestsInHiddenIframeError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when a popup attempts to call an acquireToken API\r\n * @returns\r\n */\r\n static createBlockAcquireTokenInPopupsError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.blockAcquireTokenInPopupsError.code,\r\n BrowserAuthErrorMessage.blockAcquireTokenInPopupsError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when an iframe is found to be closed before the timeout is reached.\r\n */\r\n static createIframeClosedPrematurelyError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.iframeClosedPrematurelyError.code, BrowserAuthErrorMessage.iframeClosedPrematurelyError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the logout API is called on any of the silent interaction clients\r\n */\r\n static createSilentLogoutUnsupportedError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.silentLogoutUnsupportedError.code, BrowserAuthErrorMessage.silentLogoutUnsupportedError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the account object is not provided in the acquireTokenSilent API.\r\n */\r\n static createNoAccountError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.noAccountError.code, BrowserAuthErrorMessage.noAccountError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when a given prompt value is invalid for silent requests.\r\n */\r\n static createSilentPromptValueError(givenPrompt: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.silentPromptValueError.code, `${BrowserAuthErrorMessage.silentPromptValueError.desc} Given value: ${givenPrompt}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the cached token request could not be retrieved from the cache\r\n */\r\n static createUnableToParseTokenRequestCacheError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.unableToParseTokenRequestCacheError.code,\r\n BrowserAuthErrorMessage.unableToParseTokenRequestCacheError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the token request could not be retrieved from the cache\r\n */\r\n static createNoTokenRequestCacheError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.noTokenRequestCacheError.code,\r\n BrowserAuthErrorMessage.noTokenRequestCacheError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when handleCodeResponse is called before initiateAuthRequest (InteractionHandler)\r\n */\r\n static createAuthRequestNotSetError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.authRequestNotSet.code,\r\n BrowserAuthErrorMessage.authRequestNotSet.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the authority could not be retrieved from the cache\r\n */\r\n static createNoCachedAuthorityError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.noCachedAuthorityError.code,\r\n BrowserAuthErrorMessage.noCachedAuthorityError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown if cache type is invalid.\r\n */\r\n static createInvalidCacheTypeError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.invalidCacheType.code, `${BrowserAuthErrorMessage.invalidCacheType.desc}`);\r\n }\r\n\r\n /**\r\n * Create an error thrown when login and token requests are made from a non-browser environment\r\n */\r\n static createNonBrowserEnvironmentError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.notInBrowserEnvironment.code, BrowserAuthErrorMessage.notInBrowserEnvironment.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when indexDB database is not open\r\n */\r\n static createDatabaseNotOpenError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.databaseNotOpen.code, BrowserAuthErrorMessage.databaseNotOpen.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when token fetch fails due to no internet\r\n */\r\n static createNoNetworkConnectivityError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.noNetworkConnectivity.code, BrowserAuthErrorMessage.noNetworkConnectivity.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when token fetch fails due to reasons other than internet connectivity\r\n */\r\n static createPostRequestFailedError(errorDesc: string, endpoint: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.postRequestFailed.code, `${BrowserAuthErrorMessage.postRequestFailed.desc} | Network client threw: ${errorDesc} | Attempted to reach: ${endpoint.split(\"?\")[0]}`);\r\n }\r\n\r\n /**\r\n * Create an error thrown when get request fails due to reasons other than internet connectivity\r\n */\r\n static createGetRequestFailedError(errorDesc: string, endpoint: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.getRequestFailed.code, `${BrowserAuthErrorMessage.getRequestFailed.desc} | Network client threw: ${errorDesc} | Attempted to reach: ${endpoint.split(\"?\")[0]}`);\r\n }\r\n\r\n /**\r\n * Create an error thrown when network client fails to parse network response\r\n */\r\n static createFailedToParseNetworkResponseError(endpoint: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.failedToParseNetworkResponse.code, `${BrowserAuthErrorMessage.failedToParseNetworkResponse.desc} | Attempted to reach: ${endpoint.split(\"?\")[0]}`);\r\n }\r\n\r\n /**\r\n * Create an error thrown when the necessary information is not available to sideload tokens\r\n */\r\n static createUnableToLoadTokenError(errorDetail: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.unableToLoadTokenError.code, `${BrowserAuthErrorMessage.unableToLoadTokenError.desc} | ${errorDetail}`);\r\n }\r\n\r\n /**\r\n * Create an error thrown when the queried cryptographic key is not found in IndexedDB\r\n */\r\n static createSigningKeyNotFoundInStorageError(keyId: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.signingKeyNotFoundInStorage.code, `${BrowserAuthErrorMessage.signingKeyNotFoundInStorage.desc} | No match found for KeyId: ${keyId}`);\r\n }\r\n\r\n /**\r\n * Create an error when an authorization code is required but not provided\r\n */\r\n static createAuthCodeRequiredError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.authCodeRequired.code, BrowserAuthErrorMessage.authCodeRequired.desc);\r\n }\r\n\r\n /**\r\n * Create an error when an authorization code or native account ID is required but not provided\r\n */\r\n static createAuthCodeOrNativeAccountIdRequiredError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.authCodeOrNativeAccountRequired.code, BrowserAuthErrorMessage.authCodeOrNativeAccountRequired.desc);\r\n }\r\n\r\n /**\r\n * Create an error when both authorization code and native account ID are provided\r\n */\r\n static createSpaCodeAndNativeAccountIdPresentError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.spaCodeAndNativeAccountPresent.code, BrowserAuthErrorMessage.spaCodeAndNativeAccountPresent.desc);\r\n }\r\n\r\n /**\r\n * Create an error when IndexedDB is unavailable\r\n */\r\n static createDatabaseUnavailableError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.databaseUnavailable.code, BrowserAuthErrorMessage.databaseUnavailable.desc);\r\n }\r\n\r\n /**\r\n * Create an error when native token acquisition is not possible\r\n */\r\n static createUnableToAcquireTokenFromNativePlatformError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.unableToAcquireTokenFromNativePlatform.code, BrowserAuthErrorMessage.unableToAcquireTokenFromNativePlatform.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when Handshake with browser extension times out\r\n */\r\n static createNativeHandshakeTimeoutError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.nativeHandshakeTimeout.code, BrowserAuthErrorMessage.nativeHandshakeTimeout.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when browser extension is not installed\r\n */\r\n static createNativeExtensionNotInstalledError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.nativeExtensionNotInstalled.code, BrowserAuthErrorMessage.nativeExtensionNotInstalled.desc);\r\n }\r\n\r\n /**\r\n * Create an error when native connection has not been established\r\n * @returns\r\n */\r\n static createNativeConnectionNotEstablishedError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.nativeConnectionNotEstablished.code, BrowserAuthErrorMessage.nativeConnectionNotEstablished.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when the initialize function hasn't been called\r\n */\r\n static createNativeBrokerCalledBeforeInitialize(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.nativeBrokerCalledBeforeInitialize.code, BrowserAuthErrorMessage.nativeBrokerCalledBeforeInitialize.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when requesting a token directly from the native platform with an unsupported prompt parameter e.g. select_account, login or create\r\n * These requests must go through eSTS to ensure eSTS is aware of the new account\r\n */\r\n static createNativePromptParameterNotSupportedError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.nativePromptNotSupported.code, BrowserAuthErrorMessage.nativePromptNotSupported.desc);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { PkceCodes } from \"@azure/msal-common\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { Base64Encode } from \"../encode/Base64Encode\";\r\nimport { BrowserCrypto } from \"./BrowserCrypto\";\r\n\r\n// Constant byte array length\r\nconst RANDOM_BYTE_ARR_LENGTH = 32;\r\n\r\n/**\r\n * Class which exposes APIs to generate PKCE codes and code verifiers.\r\n */\r\nexport class PkceGenerator {\r\n\r\n private base64Encode: Base64Encode;\r\n private cryptoObj: BrowserCrypto;\r\n\r\n constructor(cryptoObj: BrowserCrypto) {\r\n this.base64Encode = new Base64Encode();\r\n this.cryptoObj = cryptoObj;\r\n }\r\n\r\n /**\r\n * Generates PKCE Codes. See the RFC for more information: https://tools.ietf.org/html/rfc7636\r\n */\r\n async generateCodes(): Promise {\r\n const codeVerifier = this.generateCodeVerifier();\r\n const codeChallenge = await this.generateCodeChallengeFromVerifier(codeVerifier);\r\n return {\r\n verifier: codeVerifier,\r\n challenge: codeChallenge\r\n };\r\n }\r\n\r\n /**\r\n * Generates a random 32 byte buffer and returns the base64\r\n * encoded string to be used as a PKCE Code Verifier\r\n */\r\n private generateCodeVerifier(): string {\r\n try {\r\n // Generate random values as utf-8\r\n const buffer: Uint8Array = new Uint8Array(RANDOM_BYTE_ARR_LENGTH);\r\n this.cryptoObj.getRandomValues(buffer);\r\n // encode verifier as base64\r\n const pkceCodeVerifierB64: string = this.base64Encode.urlEncodeArr(buffer);\r\n return pkceCodeVerifierB64;\r\n } catch (e) {\r\n throw BrowserAuthError.createPkceNotGeneratedError(e);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a base64 encoded PKCE Code Challenge string from the\r\n * hash created from the PKCE Code Verifier supplied\r\n */\r\n private async generateCodeChallengeFromVerifier(pkceCodeVerifier: string): Promise {\r\n try {\r\n // hashed verifier\r\n const pkceHashedCodeVerifier = await this.cryptoObj.sha256Digest(pkceCodeVerifier);\r\n // encode hash as base64\r\n return this.base64Encode.urlEncodeArr(new Uint8Array(pkceHashedCodeVerifier));\r\n } catch (e) {\r\n throw BrowserAuthError.createPkceNotGeneratedError(e);\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { KEY_FORMAT_JWK } from \"../utils/BrowserConstants\";\r\nimport { ISubtleCrypto } from \"./ISubtleCrypto\";\r\n\r\nexport class ModernBrowserCrypto implements ISubtleCrypto {\r\n getRandomValues(dataBuffer: Uint8Array): Uint8Array {\r\n return window.crypto.getRandomValues(dataBuffer);\r\n }\r\n\r\n async generateKey(algorithm: RsaHashedKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise {\r\n return window.crypto.subtle.generateKey(algorithm, extractable, keyUsages) as Promise;\r\n }\r\n\r\n async exportKey(key: CryptoKey): Promise {\r\n return window.crypto.subtle.exportKey(KEY_FORMAT_JWK, key) as Promise;\r\n }\r\n\r\n async importKey(keyData: JsonWebKey, algorithm: RsaHashedImportParams, extractable: boolean, keyUsages: KeyUsage[]): Promise {\r\n return window.crypto.subtle.importKey(KEY_FORMAT_JWK, keyData, algorithm, extractable, keyUsages) as Promise;\r\n }\r\n\r\n async sign(algorithm: AlgorithmIdentifier, key: CryptoKey, data: ArrayBuffer): Promise {\r\n return window.crypto.subtle.sign(algorithm, key, data) as Promise;\r\n }\r\n\r\n async digest(algorithm: AlgorithmIdentifier, data: Uint8Array): Promise {\r\n return window.crypto.subtle.digest(algorithm, data) as Promise;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { KEY_FORMAT_JWK } from \"../utils/BrowserConstants\";\r\nimport { ISubtleCrypto } from \"./ISubtleCrypto\";\r\n\r\ndeclare global {\r\n interface Window {\r\n msrCrypto: Crypto & {\r\n initPrng: (entropy: Uint8Array | number[]) => void\r\n }\r\n }\r\n}\r\n\r\nexport class MsrBrowserCrypto implements ISubtleCrypto {\r\n initPrng(entropy : Uint8Array): void {\r\n // Turn into array, as initPrng seems to not always like Uint8Array (even though it should support both)\r\n return window.msrCrypto.initPrng([...entropy]);\r\n }\r\n\r\n getRandomValues(dataBuffer: Uint8Array): Uint8Array {\r\n return window.msrCrypto.getRandomValues(dataBuffer);\r\n }\r\n\r\n async generateKey(algorithm: RsaHashedKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise {\r\n return window.msrCrypto.subtle.generateKey(algorithm, extractable, keyUsages) as Promise;\r\n }\r\n\r\n async exportKey(key: CryptoKey): Promise {\r\n return window.msrCrypto.subtle.exportKey(KEY_FORMAT_JWK, key) as Promise as Promise;\r\n }\r\n\r\n async importKey(keyData: JsonWebKey, algorithm: RsaHashedImportParams, extractable: boolean, keyUsages: KeyUsage[]): Promise {\r\n return window.msrCrypto.subtle.importKey(KEY_FORMAT_JWK, keyData, algorithm, extractable, keyUsages) as Promise;\r\n }\r\n\r\n async sign(algorithm: AlgorithmIdentifier, key: CryptoKey, data: ArrayBuffer): Promise {\r\n return window.msrCrypto.subtle.sign(algorithm, key, data) as Promise;\r\n }\r\n\r\n async digest(algorithm: AlgorithmIdentifier, data: Uint8Array): Promise {\r\n return window.msrCrypto.subtle.digest(algorithm, data) as Promise; \r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants } from \"@azure/msal-common\";\r\nimport { KEY_FORMAT_JWK } from \"../utils/BrowserConstants\";\r\nimport { BrowserStringUtils } from \"../utils/BrowserStringUtils\";\r\nimport { ISubtleCrypto } from \"./ISubtleCrypto\";\r\n\r\nexport class MsBrowserCrypto implements ISubtleCrypto {\r\n getRandomValues(dataBuffer: Uint8Array): Uint8Array {\r\n return window[\"msCrypto\"].getRandomValues(dataBuffer);\r\n }\r\n\r\n async generateKey(algorithm: RsaHashedKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise {\r\n return new Promise((resolve: Function, reject: Function) => {\r\n const msGenerateKey = window[\"msCrypto\"].subtle.generateKey(algorithm, extractable, keyUsages);\r\n msGenerateKey.addEventListener(\"complete\", (e: { target: { result: CryptoKeyPair | PromiseLike; }; }) => {\r\n resolve(e.target.result);\r\n });\r\n\r\n msGenerateKey.addEventListener(\"error\", (error: string) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n async exportKey(key: CryptoKey): Promise {\r\n return new Promise((resolve: Function, reject: Function) => {\r\n const msExportKey = window[\"msCrypto\"].subtle.exportKey(KEY_FORMAT_JWK, key);\r\n msExportKey.addEventListener(\"complete\", (e: { target: { result: ArrayBuffer; }; }) => {\r\n const resultBuffer: ArrayBuffer = e.target.result;\r\n\r\n const resultString = BrowserStringUtils.utf8ArrToString(new Uint8Array(resultBuffer))\r\n .replace(/\\r/g, Constants.EMPTY_STRING)\r\n .replace(/\\n/g, Constants.EMPTY_STRING)\r\n .replace(/\\t/g, Constants.EMPTY_STRING)\r\n .split(\" \").join(Constants.EMPTY_STRING)\r\n .replace(\"\\u0000\", Constants.EMPTY_STRING);\r\n\r\n try {\r\n resolve(JSON.parse(resultString));\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n\r\n msExportKey.addEventListener(\"error\", (error: string) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n async importKey(keyData: JsonWebKey, algorithm: RsaHashedImportParams, extractable: boolean, keyUsages: KeyUsage[]): Promise {\r\n const keyString = BrowserStringUtils.getSortedObjectString(keyData);\r\n const keyBuffer = BrowserStringUtils.stringToArrayBuffer(keyString);\r\n\r\n return new Promise((resolve: Function, reject: Function) => {\r\n const msImportKey = window[\"msCrypto\"].subtle.importKey(KEY_FORMAT_JWK, keyBuffer, algorithm, extractable, keyUsages);\r\n msImportKey.addEventListener(\"complete\", (e: { target: { result: CryptoKey | PromiseLike; }; }) => {\r\n resolve(e.target.result);\r\n });\r\n\r\n msImportKey.addEventListener(\"error\", (error: string) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n async sign(algorithm: AlgorithmIdentifier, key: CryptoKey, data: ArrayBuffer): Promise {\r\n return new Promise((resolve: Function, reject: Function) => {\r\n const msSign = window[\"msCrypto\"].subtle.sign(algorithm, key, data);\r\n msSign.addEventListener(\"complete\", (e: { target: { result: ArrayBuffer | PromiseLike; }; }) => {\r\n resolve(e.target.result);\r\n });\r\n\r\n msSign.addEventListener(\"error\", (error: string) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n \r\n async digest(algorithm: AlgorithmIdentifier, data: Uint8Array): Promise {\r\n return new Promise((resolve, reject) => {\r\n const digestOperation = window[\"msCrypto\"].subtle.digest(algorithm, data.buffer);\r\n digestOperation.addEventListener(\"complete\", (e: { target: { result: ArrayBuffer | PromiseLike; }; }) => {\r\n resolve(e.target.result);\r\n });\r\n digestOperation.addEventListener(\"error\", (error: string) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError } from \"@azure/msal-common\";\r\n\r\n/**\r\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nexport const BrowserConfigurationAuthErrorMessage = {\r\n redirectUriNotSet: {\r\n code: \"redirect_uri_empty\",\r\n desc: \"A redirect URI is required for all calls, and none has been set.\"\r\n },\r\n postLogoutUriNotSet: {\r\n code: \"post_logout_uri_empty\",\r\n desc: \"A post logout redirect has not been set.\"\r\n },\r\n storageNotSupportedError: {\r\n code: \"storage_not_supported\",\r\n desc: \"Given storage configuration option was not supported.\"\r\n },\r\n noRedirectCallbacksSet: {\r\n code: \"no_redirect_callbacks\",\r\n desc: \"No redirect callbacks have been set. Please call setRedirectCallbacks() with the appropriate function arguments before continuing. \" +\r\n \"More information is available here: https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/MSAL-basics.\"\r\n },\r\n invalidCallbackObject: {\r\n code: \"invalid_callback_object\",\r\n desc: \"The object passed for the callback was invalid. \" +\r\n \"More information is available here: https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/MSAL-basics.\"\r\n },\r\n stubPcaInstanceCalled: {\r\n code: \"stubbed_public_client_application_called\",\r\n desc: \"Stub instance of Public Client Application was called. If using msal-react, please ensure context is not used without a provider. For more visit: aka.ms/msaljs/browser-errors\"\r\n },\r\n inMemRedirectUnavailable: {\r\n code: \"in_mem_redirect_unavailable\",\r\n desc: \"Redirect cannot be supported. In-memory storage was selected and storeAuthStateInCookie=false, which would cause the library to be unable to handle the incoming hash. If you would like to use the redirect API, please use session/localStorage or set storeAuthStateInCookie=true.\"\r\n },\r\n entropyNotProvided: {\r\n code: \"entropy_not_provided\",\r\n desc: \"The available browser crypto interface requires entropy set via system.cryptoOptions.entropy configuration option.\"\r\n }\r\n};\r\n\r\n/**\r\n * Browser library error class thrown by the MSAL.js library for SPAs\r\n */\r\nexport class BrowserConfigurationAuthError extends AuthError {\r\n\r\n constructor(errorCode: string, errorMessage?: string) {\r\n super(errorCode, errorMessage);\r\n this.name = \"BrowserConfigurationAuthError\";\r\n\r\n Object.setPrototypeOf(this, BrowserConfigurationAuthError.prototype);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the redirect uri is empty (not set by caller)\r\n */\r\n static createRedirectUriEmptyError(): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.redirectUriNotSet.code,\r\n BrowserConfigurationAuthErrorMessage.redirectUriNotSet.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the post-logout redirect uri is empty (not set by caller)\r\n */\r\n static createPostLogoutRedirectUriEmptyError(): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.postLogoutUriNotSet.code,\r\n BrowserConfigurationAuthErrorMessage.postLogoutUriNotSet.desc);\r\n }\r\n\r\n /**\r\n * Creates error thrown when given storage location is not supported.\r\n * @param givenStorageLocation \r\n */\r\n static createStorageNotSupportedError(givenStorageLocation: string): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.storageNotSupportedError.code, `${BrowserConfigurationAuthErrorMessage.storageNotSupportedError.desc} Given Location: ${givenStorageLocation}`);\r\n }\r\n\r\n /**\r\n * Creates error thrown when redirect callbacks are not set before calling loginRedirect() or acquireTokenRedirect().\r\n */\r\n static createRedirectCallbacksNotSetError(): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.noRedirectCallbacksSet.code, \r\n BrowserConfigurationAuthErrorMessage.noRedirectCallbacksSet.desc);\r\n }\r\n\r\n /**\r\n * Creates error thrown when the stub instance of PublicClientApplication is called.\r\n */\r\n static createStubPcaInstanceCalledError(): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.stubPcaInstanceCalled.code,\r\n BrowserConfigurationAuthErrorMessage.stubPcaInstanceCalled.desc);\r\n }\r\n\r\n /*\r\n * Create an error thrown when in-memory storage is used and storeAuthStateInCookie=false.\r\n */\r\n static createInMemoryRedirectUnavailableError(): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.inMemRedirectUnavailable.code, BrowserConfigurationAuthErrorMessage.inMemRedirectUnavailable.desc);\r\n }\r\n \r\n /**\r\n * Creates an error thrown when a crypto interface that requires entropy is initialized without entropy\r\n */\r\n static createEntropyNotProvided(): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.entropyNotProvided.code, BrowserConfigurationAuthErrorMessage.entropyNotProvided.desc);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { BrowserStringUtils } from \"../utils/BrowserStringUtils\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { ISubtleCrypto } from \"./ISubtleCrypto\";\r\nimport { ModernBrowserCrypto } from \"./ModernBrowserCrypto\";\r\nimport { MsrBrowserCrypto } from \"./MsrBrowserCrypto\";\r\nimport { MsBrowserCrypto } from \"./MsBrowserCrypto\";\r\nimport { Logger } from \"@azure/msal-common\";\r\nimport { BrowserConfigurationAuthError } from \"../error/BrowserConfigurationAuthError\";\r\nimport { CryptoOptions } from \"../config/Configuration\";\r\n/**\r\n * See here for more info on RsaHashedKeyGenParams: https://developer.mozilla.org/en-US/docs/Web/API/RsaHashedKeyGenParams\r\n */\r\n// RSA KeyGen Algorithm\r\nconst PKCS1_V15_KEYGEN_ALG = \"RSASSA-PKCS1-v1_5\";\r\n// SHA-256 hashing algorithm\r\nconst S256_HASH_ALG = \"SHA-256\";\r\n// MOD length for PoP tokens\r\nconst MODULUS_LENGTH = 2048;\r\n// Public Exponent\r\nconst PUBLIC_EXPONENT: Uint8Array = new Uint8Array([0x01, 0x00, 0x01]);\r\n\r\n/**\r\n * This class implements functions used by the browser library to perform cryptography operations such as\r\n * hashing and encoding. It also has helper functions to validate the availability of specific APIs.\r\n */\r\nexport class BrowserCrypto {\r\n\r\n private keygenAlgorithmOptions: RsaHashedKeyGenParams;\r\n private subtleCrypto: ISubtleCrypto;\r\n private logger: Logger;\r\n private cryptoOptions?: CryptoOptions;\r\n\r\n constructor(logger: Logger, cryptoOptions?: CryptoOptions) {\r\n this.logger = logger;\r\n this.cryptoOptions = cryptoOptions;\r\n\r\n if (this.hasBrowserCrypto()) {\r\n // Use standard modern web crypto if available\r\n this.logger.verbose(\"BrowserCrypto: modern crypto interface available\");\r\n this.subtleCrypto = new ModernBrowserCrypto();\r\n } else if (this.hasIECrypto()) {\r\n // For IE11, use msCrypto interface\r\n this.logger.verbose(\"BrowserCrypto: MS crypto interface available\");\r\n this.subtleCrypto = new MsBrowserCrypto();\r\n } else if (this.hasMsrCrypto() && this.cryptoOptions?.useMsrCrypto) {\r\n // For other browsers, use MSR Crypto if found\r\n this.logger.verbose(\"BrowserCrypto: MSR crypto interface available\");\r\n this.subtleCrypto = new MsrBrowserCrypto();\r\n } else {\r\n if (this.hasMsrCrypto()) {\r\n this.logger.info(\"BrowserCrypto: MSR Crypto interface available but system.cryptoOptions.useMsrCrypto not enabled\");\r\n }\r\n this.logger.error(\"BrowserCrypto: No crypto interfaces available.\");\r\n throw BrowserAuthError.createCryptoNotAvailableError(\"Browser crypto, msCrypto, or msrCrypto interfaces not available.\");\r\n }\r\n\r\n // Mainly needed for MSR Crypto: https://github.com/microsoft/MSR-JavaScript-Crypto#random-number-generator-prng\r\n if (this.subtleCrypto.initPrng) {\r\n this.logger.verbose(\"BrowserCrypto: Interface requires entropy\");\r\n\r\n if (!this.cryptoOptions?.entropy) {\r\n this.logger.error(\"BrowserCrypto: Interface requires entropy but none provided.\");\r\n throw BrowserConfigurationAuthError.createEntropyNotProvided();\r\n }\r\n\r\n this.logger.verbose(\"BrowserCrypto: Entropy provided\");\r\n this.subtleCrypto.initPrng(this.cryptoOptions.entropy);\r\n }\r\n\r\n this.keygenAlgorithmOptions = {\r\n name: PKCS1_V15_KEYGEN_ALG,\r\n hash: S256_HASH_ALG,\r\n modulusLength: MODULUS_LENGTH,\r\n publicExponent: PUBLIC_EXPONENT\r\n };\r\n }\r\n\r\n /**\r\n * Check whether IE crypto or other browser cryptography is available.\r\n */\r\n private hasIECrypto(): boolean {\r\n return \"msCrypto\" in window;\r\n }\r\n\r\n /**\r\n * Check whether browser crypto is available.\r\n */\r\n private hasBrowserCrypto(): boolean {\r\n return \"crypto\" in window;\r\n }\r\n\r\n /**\r\n * Check whether MSR crypto polyfill is available\r\n */\r\n private hasMsrCrypto(): boolean {\r\n return \"msrCrypto\" in window;\r\n }\r\n\r\n /**\r\n * Returns a sha-256 hash of the given dataString as an ArrayBuffer.\r\n * @param dataString \r\n */\r\n async sha256Digest(dataString: string): Promise {\r\n const data = BrowserStringUtils.stringToUtf8Arr(dataString);\r\n // MSR Crypto wants object with name property, instead of string\r\n return this.subtleCrypto.digest({ name: S256_HASH_ALG }, data);\r\n }\r\n\r\n /**\r\n * Populates buffer with cryptographically random values.\r\n * @param dataBuffer \r\n */\r\n getRandomValues(dataBuffer: Uint8Array): Uint8Array {\r\n return this.subtleCrypto.getRandomValues(dataBuffer);\r\n }\r\n\r\n /**\r\n * Generates a keypair based on current keygen algorithm config.\r\n * @param extractable \r\n * @param usages \r\n */\r\n async generateKeyPair(extractable: boolean, usages: Array): Promise {\r\n return this.subtleCrypto.generateKey(this.keygenAlgorithmOptions, extractable, usages);\r\n }\r\n\r\n /**\r\n * Export key as Json Web Key (JWK)\r\n * @param key \r\n * @param format \r\n */\r\n async exportJwk(key: CryptoKey): Promise {\r\n return this.subtleCrypto.exportKey(key);\r\n }\r\n\r\n /**\r\n * Imports key as Json Web Key (JWK), can set extractable and usages.\r\n * @param key \r\n * @param format \r\n * @param extractable \r\n * @param usages \r\n */\r\n async importJwk(key: JsonWebKey, extractable: boolean, usages: Array): Promise {\r\n return this.subtleCrypto.importKey(key, this.keygenAlgorithmOptions, extractable, usages);\r\n }\r\n\r\n /**\r\n * Signs given data with given key\r\n * @param key \r\n * @param data \r\n */\r\n async sign(key: CryptoKey, data: ArrayBuffer): Promise {\r\n return this.subtleCrypto.sign(this.keygenAlgorithmOptions, key, data);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { DB_NAME, DB_TABLE_NAME, DB_VERSION } from \"../utils/BrowserConstants\";\r\nimport { IAsyncStorage } from \"./IAsyncMemoryStorage\";\r\n\r\ninterface IDBOpenDBRequestEvent extends Event {\r\n target: IDBOpenDBRequest & EventTarget;\r\n}\r\n\r\ninterface IDBOpenOnUpgradeNeededEvent extends IDBVersionChangeEvent {\r\n target: IDBOpenDBRequest & EventTarget;\r\n}\r\n\r\ninterface IDBRequestEvent extends Event {\r\n target: IDBRequest & EventTarget;\r\n}\r\n\r\n/**\r\n * Storage wrapper for IndexedDB storage in browsers: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API\r\n */\r\nexport class DatabaseStorage implements IAsyncStorage {\r\n private db: IDBDatabase|undefined;\r\n private dbName: string;\r\n private tableName: string;\r\n private version: number;\r\n private dbOpen: boolean;\r\n\r\n constructor() {\r\n this.dbName = DB_NAME;\r\n this.version = DB_VERSION;\r\n this.tableName = DB_TABLE_NAME;\r\n this.dbOpen = false;\r\n }\r\n\r\n /**\r\n * Opens IndexedDB instance.\r\n */\r\n async open(): Promise {\r\n return new Promise((resolve, reject) => {\r\n const openDB = window.indexedDB.open(this.dbName, this.version);\r\n openDB.addEventListener(\"upgradeneeded\", (e: IDBVersionChangeEvent) => {\r\n const event = e as IDBOpenOnUpgradeNeededEvent;\r\n event.target.result.createObjectStore(this.tableName);\r\n });\r\n openDB.addEventListener(\"success\", (e: Event) => {\r\n const event = e as IDBOpenDBRequestEvent;\r\n this.db = event.target.result;\r\n this.dbOpen = true;\r\n resolve();\r\n });\r\n openDB.addEventListener(\"error\", () => reject(BrowserAuthError.createDatabaseUnavailableError()));\r\n });\r\n }\r\n\r\n /**\r\n * Closes the connection to IndexedDB database when all pending transactions\r\n * complete.\r\n */\r\n closeConnection(): void {\r\n const db = this.db;\r\n if (db && this.dbOpen) {\r\n db.close();\r\n this.dbOpen = false;\r\n }\r\n }\r\n\r\n /**\r\n * Opens database if it's not already open\r\n */\r\n private async validateDbIsOpen(): Promise {\r\n if (!this.dbOpen) {\r\n return await this.open();\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves item from IndexedDB instance.\r\n * @param key \r\n */\r\n async getItem(key: string): Promise {\r\n await this.validateDbIsOpen();\r\n return new Promise((resolve, reject) => {\r\n // TODO: Add timeouts?\r\n if (!this.db) {\r\n return reject(BrowserAuthError.createDatabaseNotOpenError());\r\n }\r\n const transaction = this.db.transaction([this.tableName], \"readonly\");\r\n const objectStore = transaction.objectStore(this.tableName);\r\n const dbGet = objectStore.get(key);\r\n \r\n dbGet.addEventListener(\"success\", (e: Event) => {\r\n const event = e as IDBRequestEvent;\r\n this.closeConnection();\r\n resolve(event.target.result);\r\n });\r\n\r\n dbGet.addEventListener(\"error\", (e: Event) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Adds item to IndexedDB under given key\r\n * @param key \r\n * @param payload \r\n */\r\n async setItem(key: string, payload: T): Promise {\r\n await this.validateDbIsOpen();\r\n return new Promise((resolve: Function, reject: Function) => {\r\n // TODO: Add timeouts?\r\n if (!this.db) {\r\n return reject(BrowserAuthError.createDatabaseNotOpenError());\r\n }\r\n const transaction = this.db.transaction([this.tableName], \"readwrite\");\r\n\r\n const objectStore = transaction.objectStore(this.tableName);\r\n\r\n const dbPut = objectStore.put(payload, key);\r\n\r\n dbPut.addEventListener(\"success\", () => {\r\n this.closeConnection();\r\n resolve();\r\n });\r\n\r\n dbPut.addEventListener(\"error\", (e) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Removes item from IndexedDB under given key\r\n * @param key\r\n */\r\n async removeItem(key: string): Promise {\r\n await this.validateDbIsOpen();\r\n return new Promise((resolve: Function, reject: Function) => {\r\n if (!this.db) {\r\n return reject(BrowserAuthError.createDatabaseNotOpenError());\r\n }\r\n\r\n const transaction = this.db.transaction([this.tableName], \"readwrite\");\r\n const objectStore = transaction.objectStore(this.tableName);\r\n const dbDelete = objectStore.delete(key);\r\n\r\n dbDelete.addEventListener(\"success\", () => {\r\n this.closeConnection();\r\n resolve();\r\n });\r\n\r\n dbDelete.addEventListener(\"error\", (e) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Get all the keys from the storage object as an iterable array of strings.\r\n */\r\n async getKeys(): Promise {\r\n await this.validateDbIsOpen();\r\n return new Promise((resolve: Function, reject: Function) => {\r\n if (!this.db) {\r\n return reject(BrowserAuthError.createDatabaseNotOpenError());\r\n }\r\n\r\n const transaction = this.db.transaction([this.tableName], \"readonly\");\r\n const objectStore = transaction.objectStore(this.tableName);\r\n const dbGetKeys = objectStore.getAllKeys();\r\n\r\n dbGetKeys.addEventListener(\"success\", (e: Event) => {\r\n const event = e as IDBRequestEvent;\r\n this.closeConnection();\r\n resolve(event.target.result);\r\n });\r\n\r\n dbGetKeys.addEventListener(\"error\", (e: Event) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * \r\n * Checks whether there is an object under the search key in the object store\r\n */\r\n async containsKey(key: string): Promise {\r\n await this.validateDbIsOpen();\r\n\r\n return new Promise((resolve: Function, reject: Function) => {\r\n if (!this.db) {\r\n return reject(BrowserAuthError.createDatabaseNotOpenError());\r\n }\r\n\r\n const transaction = this.db.transaction([this.tableName], \"readonly\");\r\n const objectStore = transaction.objectStore(this.tableName);\r\n const dbContainsKey = objectStore.count(key);\r\n\r\n dbContainsKey.addEventListener(\"success\", (e: Event) => {\r\n const event = e as IDBRequestEvent;\r\n this.closeConnection();\r\n resolve(event.target.result === 1);\r\n });\r\n\r\n dbContainsKey.addEventListener(\"error\", (e: Event) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Deletes the MSAL database. The database is deleted rather than cleared to make it possible\r\n * for client applications to downgrade to a previous MSAL version without worrying about forward compatibility issues\r\n * with IndexedDB database versions.\r\n */\r\n async deleteDatabase(): Promise {\r\n // Check if database being deleted exists\r\n\r\n if (this.db && this.dbOpen) {\r\n this.closeConnection();\r\n }\r\n\r\n return new Promise((resolve: Function, reject: Function) => {\r\n const deleteDbRequest = window.indexedDB.deleteDatabase(DB_NAME);\r\n deleteDbRequest.addEventListener(\"success\", () => resolve(true));\r\n deleteDbRequest.addEventListener(\"blocked\", () => resolve(true));\r\n deleteDbRequest.addEventListener(\"error\", () => reject(false));\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { IWindowStorage } from \"./IWindowStorage\";\r\n\r\nexport class MemoryStorage implements IWindowStorage {\r\n\r\n private cache: Map;\r\n\r\n constructor() {\r\n this.cache = new Map();\r\n }\r\n\r\n getItem(key: string): T | null {\r\n return this.cache.get(key) || null;\r\n }\r\n\r\n setItem(key: string, value: T): void {\r\n this.cache.set(key, value);\r\n }\r\n\r\n removeItem(key: string): void {\r\n this.cache.delete(key);\r\n }\r\n\r\n getKeys(): string[] {\r\n const cacheKeys: string[] = [];\r\n this.cache.forEach((value: T, key: string) => {\r\n cacheKeys.push(key);\r\n });\r\n return cacheKeys;\r\n }\r\n\r\n containsKey(key: string): boolean {\r\n return this.cache.has(key);\r\n }\r\n\r\n clear() :void {\r\n this.cache.clear();\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Logger } from \"@azure/msal-common\";\r\nimport { BrowserAuthError, BrowserAuthErrorMessage } from \"../error/BrowserAuthError\";\r\nimport { DatabaseStorage } from \"./DatabaseStorage\";\r\nimport { IAsyncStorage } from \"./IAsyncMemoryStorage\";\r\nimport { MemoryStorage } from \"./MemoryStorage\";\r\n\r\n/**\r\n * This class allows MSAL to store artifacts asynchronously using the DatabaseStorage IndexedDB wrapper,\r\n * backed up with the more volatile MemoryStorage object for cases in which IndexedDB may be unavailable.\r\n */\r\nexport class AsyncMemoryStorage implements IAsyncStorage {\r\n private inMemoryCache: MemoryStorage;\r\n private indexedDBCache: DatabaseStorage;\r\n private logger: Logger;\r\n private storeName: string;\r\n\r\n constructor(logger: Logger, storeName: string) {\r\n this.inMemoryCache = new MemoryStorage();\r\n this.indexedDBCache = new DatabaseStorage();\r\n this.logger = logger;\r\n this.storeName = storeName;\r\n }\r\n\r\n private handleDatabaseAccessError(error: unknown): void {\r\n if (error instanceof BrowserAuthError && error.errorCode === BrowserAuthErrorMessage.databaseUnavailable.code) {\r\n this.logger.error(\"Could not access persistent storage. This may be caused by browser privacy features which block persistent storage in third-party contexts.\");\r\n } else {\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Get the item matching the given key. Tries in-memory cache first, then in the asynchronous\r\n * storage object if item isn't found in-memory.\r\n * @param key \r\n */\r\n async getItem(key: string): Promise {\r\n const item = this.inMemoryCache.getItem(key);\r\n if(!item) {\r\n try {\r\n this.logger.verbose(\"Queried item not found in in-memory cache, now querying persistent storage.\");\r\n return await this.indexedDBCache.getItem(key);\r\n } catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n return item;\r\n }\r\n\r\n /**\r\n * Sets the item in the in-memory cache and then tries to set it in the asynchronous\r\n * storage object with the given key.\r\n * @param key \r\n * @param value \r\n */\r\n async setItem(key: string, value: T): Promise {\r\n this.inMemoryCache.setItem(key, value);\r\n try {\r\n await this.indexedDBCache.setItem(key, value);\r\n } catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n\r\n /**\r\n * Removes the item matching the key from the in-memory cache, then tries to remove it from the asynchronous storage object.\r\n * @param key \r\n */\r\n async removeItem(key: string): Promise {\r\n this.inMemoryCache.removeItem(key);\r\n try {\r\n await this.indexedDBCache.removeItem(key);\r\n } catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n\r\n /**\r\n * Get all the keys from the in-memory cache as an iterable array of strings. If no keys are found, query the keys in the \r\n * asynchronous storage object.\r\n */\r\n async getKeys(): Promise {\r\n const cacheKeys = this.inMemoryCache.getKeys();\r\n if (cacheKeys.length === 0) {\r\n try {\r\n this.logger.verbose(\"In-memory cache is empty, now querying persistent storage.\");\r\n return await this.indexedDBCache.getKeys();\r\n } catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n return cacheKeys;\r\n }\r\n\r\n /**\r\n * Returns true or false if the given key is present in the cache.\r\n * @param key \r\n */\r\n async containsKey(key: string): Promise {\r\n const containsKey = this.inMemoryCache.containsKey(key);\r\n if(!containsKey) {\r\n try {\r\n this.logger.verbose(\"Key not found in in-memory cache, now querying persistent storage.\");\r\n return await this.indexedDBCache.containsKey(key);\r\n } catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n return containsKey;\r\n }\r\n\r\n /**\r\n * Clears in-memory Map\r\n */\r\n clearInMemory(): void {\r\n // InMemory cache is a Map instance, clear is straightforward\r\n this.logger.verbose(`Deleting in-memory keystore ${this.storeName}`);\r\n this.inMemoryCache.clear();\r\n this.logger.verbose(`In-memory keystore ${this.storeName} deleted`);\r\n }\r\n\r\n /**\r\n * Tries to delete the IndexedDB database\r\n * @returns\r\n */\r\n async clearPersistent(): Promise {\r\n try {\r\n this.logger.verbose(\"Deleting persistent keystore\");\r\n const dbDeleted = await this.indexedDBCache.deleteDatabase();\r\n if (dbDeleted) {\r\n this.logger.verbose(\"Persistent keystore deleted\");\r\n }\r\n \r\n return dbDeleted;\r\n } catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n return false;\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\n/**\r\n * Authority types supported by MSAL.\r\n */\r\nexport enum AuthorityType {\r\n Default,\r\n Adfs,\r\n Dsts,\r\n Ciam\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ICrypto, IPerformanceClient, JoseHeader, Logger, PerformanceEvents, PkceCodes, SignedHttpRequest, SignedHttpRequestParameters } from \"@azure/msal-common\";\r\nimport { GuidGenerator } from \"./GuidGenerator\";\r\nimport { Base64Encode } from \"../encode/Base64Encode\";\r\nimport { Base64Decode } from \"../encode/Base64Decode\";\r\nimport { PkceGenerator } from \"./PkceGenerator\";\r\nimport { BrowserCrypto } from \"./BrowserCrypto\";\r\nimport { BrowserStringUtils } from \"../utils/BrowserStringUtils\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { CryptoKeyStore } from \"../cache/CryptoKeyStore\";\r\nimport { CryptoOptions } from \"../config/Configuration\";\r\n\r\nexport type CachedKeyPair = {\r\n publicKey: CryptoKey,\r\n privateKey: CryptoKey,\r\n requestMethod?: string,\r\n requestUri?: string\r\n};\r\n\r\n/**\r\n * This class implements MSAL's crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and \r\n * implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636).\r\n */\r\nexport class CryptoOps implements ICrypto {\r\n\r\n private browserCrypto: BrowserCrypto;\r\n private guidGenerator: GuidGenerator;\r\n private b64Encode: Base64Encode;\r\n private b64Decode: Base64Decode;\r\n private pkceGenerator: PkceGenerator;\r\n private logger: Logger;\r\n\r\n /**\r\n * CryptoOps can be used in contexts outside a PCA instance,\r\n * meaning there won't be a performance manager available.\r\n */\r\n private performanceClient: IPerformanceClient | undefined;\r\n\r\n private static POP_KEY_USAGES: Array = [\"sign\", \"verify\"];\r\n private static EXTRACTABLE: boolean = true;\r\n private cache: CryptoKeyStore;\r\n\r\n constructor(logger: Logger, performanceClient?: IPerformanceClient, cryptoConfig?: CryptoOptions) {\r\n this.logger = logger;\r\n // Browser crypto needs to be validated first before any other classes can be set.\r\n this.browserCrypto = new BrowserCrypto(this.logger, cryptoConfig);\r\n this.b64Encode = new Base64Encode();\r\n this.b64Decode = new Base64Decode();\r\n this.guidGenerator = new GuidGenerator(this.browserCrypto);\r\n this.pkceGenerator = new PkceGenerator(this.browserCrypto);\r\n this.cache = new CryptoKeyStore(this.logger);\r\n this.performanceClient = performanceClient;\r\n }\r\n\r\n /**\r\n * Creates a new random GUID - used to populate state and nonce.\r\n * @returns string (GUID)\r\n */\r\n createNewGuid(): string {\r\n return this.guidGenerator.generateGuid();\r\n }\r\n\r\n /**\r\n * Encodes input string to base64.\r\n * @param input \r\n */\r\n base64Encode(input: string): string {\r\n return this.b64Encode.encode(input);\r\n } \r\n \r\n /**\r\n * Decodes input string from base64.\r\n * @param input \r\n */\r\n base64Decode(input: string): string {\r\n return this.b64Decode.decode(input);\r\n }\r\n\r\n /**\r\n * Generates PKCE codes used in Authorization Code Flow.\r\n */\r\n async generatePkceCodes(): Promise {\r\n return this.pkceGenerator.generateCodes();\r\n }\r\n\r\n /**\r\n * Generates a keypair, stores it and returns a thumbprint\r\n * @param request\r\n */\r\n async getPublicKeyThumbprint(request: SignedHttpRequestParameters): Promise {\r\n const publicKeyThumbMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.CryptoOptsGetPublicKeyThumbprint, request.correlationId);\r\n\r\n // Generate Keypair\r\n const keyPair: CryptoKeyPair = await this.browserCrypto.generateKeyPair(CryptoOps.EXTRACTABLE, CryptoOps.POP_KEY_USAGES);\r\n\r\n // Generate Thumbprint for Public Key\r\n const publicKeyJwk: JsonWebKey = await this.browserCrypto.exportJwk(keyPair.publicKey);\r\n \r\n const pubKeyThumprintObj: JsonWebKey = {\r\n e: publicKeyJwk.e,\r\n kty: publicKeyJwk.kty,\r\n n: publicKeyJwk.n\r\n };\r\n \r\n const publicJwkString: string = BrowserStringUtils.getSortedObjectString(pubKeyThumprintObj);\r\n const publicJwkHash = await this.hashString(publicJwkString);\r\n\r\n // Generate Thumbprint for Private Key\r\n const privateKeyJwk: JsonWebKey = await this.browserCrypto.exportJwk(keyPair.privateKey);\r\n // Re-import private key to make it unextractable\r\n const unextractablePrivateKey: CryptoKey = await this.browserCrypto.importJwk(privateKeyJwk, false, [\"sign\"]);\r\n\r\n // Store Keypair data in keystore\r\n await this.cache.asymmetricKeys.setItem(\r\n publicJwkHash, \r\n {\r\n privateKey: unextractablePrivateKey,\r\n publicKey: keyPair.publicKey,\r\n requestMethod: request.resourceRequestMethod,\r\n requestUri: request.resourceRequestUri\r\n }\r\n );\r\n\r\n if (publicKeyThumbMeasurement) {\r\n publicKeyThumbMeasurement.endMeasurement({\r\n success: true\r\n });\r\n }\r\n\r\n return publicJwkHash;\r\n }\r\n\r\n /**\r\n * Removes cryptographic keypair from key store matching the keyId passed in\r\n * @param kid \r\n */\r\n async removeTokenBindingKey(kid: string): Promise {\r\n await this.cache.asymmetricKeys.removeItem(kid);\r\n const keyFound = await this.cache.asymmetricKeys.containsKey(kid);\r\n return !keyFound;\r\n }\r\n\r\n /**\r\n * Removes all cryptographic keys from IndexedDB storage\r\n */\r\n async clearKeystore(): Promise {\r\n return await this.cache.clear();\r\n }\r\n\r\n /**\r\n * Signs the given object as a jwt payload with private key retrieved by given kid.\r\n * @param payload \r\n * @param kid \r\n */\r\n async signJwt(payload: SignedHttpRequest, kid: string, correlationId?: string): Promise {\r\n const signJwtMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.CryptoOptsSignJwt, correlationId);\r\n const cachedKeyPair = await this.cache.asymmetricKeys.getItem(kid);\r\n \r\n if (!cachedKeyPair) {\r\n throw BrowserAuthError.createSigningKeyNotFoundInStorageError(kid);\r\n }\r\n\r\n // Get public key as JWK\r\n const publicKeyJwk = await this.browserCrypto.exportJwk(cachedKeyPair.publicKey);\r\n const publicKeyJwkString = BrowserStringUtils.getSortedObjectString(publicKeyJwk);\r\n\r\n // Base64URL encode public key thumbprint with keyId only: BASE64URL({ kid: \"FULL_PUBLIC_KEY_HASH\" })\r\n const encodedKeyIdThumbprint = this.b64Encode.urlEncode(JSON.stringify({ kid: kid }));\r\n \r\n // Generate header\r\n const shrHeader = JoseHeader.getShrHeaderString({ kid: encodedKeyIdThumbprint, alg: publicKeyJwk.alg });\r\n const encodedShrHeader = this.b64Encode.urlEncode(shrHeader);\r\n\r\n // Generate payload\r\n payload.cnf = {\r\n jwk: JSON.parse(publicKeyJwkString)\r\n };\r\n const encodedPayload = this.b64Encode.urlEncode(JSON.stringify(payload));\r\n\r\n // Form token string\r\n const tokenString = `${encodedShrHeader}.${encodedPayload}`;\r\n\r\n // Sign token\r\n const tokenBuffer = BrowserStringUtils.stringToArrayBuffer(tokenString);\r\n const signatureBuffer = await this.browserCrypto.sign(cachedKeyPair.privateKey, tokenBuffer);\r\n const encodedSignature = this.b64Encode.urlEncodeArr(new Uint8Array(signatureBuffer));\r\n\r\n const signedJwt = `${tokenString}.${encodedSignature}`;\r\n\r\n if (signJwtMeasurement) {\r\n signJwtMeasurement.endMeasurement({\r\n success: true\r\n });\r\n }\r\n\r\n return signedJwt;\r\n }\r\n\r\n /**\r\n * Returns the SHA-256 hash of an input string\r\n * @param plainText\r\n */\r\n async hashString(plainText: string): Promise {\r\n const hashBuffer: ArrayBuffer = await this.browserCrypto.sha256Digest(plainText);\r\n const hashBytes = new Uint8Array(hashBuffer);\r\n return this.b64Encode.urlEncodeArr(hashBytes);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ApplicationTelemetry } from \"../../config/ClientConfiguration\";\r\nimport { Logger } from \"../../logger/Logger\";\r\nimport {\r\n InProgressPerformanceEvent,\r\n IPerformanceClient,\r\n PerformanceCallbackFunction,\r\n QueueMeasurement\r\n} from \"./IPerformanceClient\";\r\nimport { IPerformanceMeasurement } from \"./IPerformanceMeasurement\";\r\nimport {\r\n Counters,\r\n IntFields,\r\n PerformanceEvent,\r\n PerformanceEvents,\r\n PerformanceEventStatus,\r\n StaticFields\r\n} from \"./PerformanceEvent\";\r\n\r\nexport interface PreQueueEvent {\r\n name: PerformanceEvents;\r\n time: number;\r\n}\r\n\r\nexport abstract class PerformanceClient implements IPerformanceClient {\r\n protected authority: string;\r\n protected libraryName: string;\r\n protected libraryVersion: string;\r\n protected applicationTelemetry: ApplicationTelemetry;\r\n protected clientId: string;\r\n protected logger: Logger;\r\n protected callbacks: Map;\r\n\r\n /**\r\n * Multiple events with the same correlation id.\r\n * @protected\r\n * @type {Map}\r\n */\r\n protected eventsByCorrelationId: Map;\r\n\r\n /**\r\n * Map of pre-queue times by correlation Id\r\n *\r\n * @protected\r\n * @type {Map}\r\n */\r\n protected preQueueTimeByCorrelationId: Map;\r\n\r\n /**\r\n * Map of queue measurements by correlation Id\r\n *\r\n * @protected\r\n * @type {Map>}\r\n */\r\n protected queueMeasurements: Map>;\r\n\r\n /**\r\n * Creates an instance of PerformanceClient,\r\n * an abstract class containing core performance telemetry logic.\r\n *\r\n * @constructor\r\n * @param {string} clientId Client ID of the application\r\n * @param {string} authority Authority used by the application\r\n * @param {Logger} logger Logger used by the application\r\n * @param {string} libraryName Name of the library\r\n * @param {string} libraryVersion Version of the library\r\n */\r\n constructor(clientId: string, authority: string, logger: Logger, libraryName: string, libraryVersion: string, applicationTelemetry: ApplicationTelemetry) {\r\n this.authority = authority;\r\n this.libraryName = libraryName;\r\n this.libraryVersion = libraryVersion;\r\n this.applicationTelemetry = applicationTelemetry;\r\n this.clientId = clientId;\r\n this.logger = logger;\r\n this.callbacks = new Map();\r\n this.eventsByCorrelationId = new Map();\r\n this.queueMeasurements = new Map();\r\n this.preQueueTimeByCorrelationId = new Map();\r\n }\r\n\r\n /**\r\n * Generates and returns a unique id, typically a guid.\r\n *\r\n * @abstract\r\n * @returns {string}\r\n */\r\n abstract generateId(): string;\r\n\r\n /**\r\n * Starts and returns an platform-specific implementation of IPerformanceMeasurement.\r\n * Note: this function can be changed to abstract at the next major version bump.\r\n *\r\n * @param {string} measureName\r\n * @param {string} correlationId\r\n * @returns {IPerformanceMeasurement}\r\n */\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n startPerformanceMeasurement(measureName: string, correlationId: string): IPerformanceMeasurement {\r\n return {} as IPerformanceMeasurement;\r\n }\r\n\r\n /**\r\n * Starts and returns an platform-specific implementation of IPerformanceMeasurement.\r\n * Note: this incorrectly-named function will be removed at the next major version bump.\r\n *\r\n * @param {string} measureName\r\n * @param {string} correlationId\r\n * @returns {IPerformanceMeasurement}\r\n */\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n startPerformanceMeasuremeant(measureName: string, correlationId: string): IPerformanceMeasurement {\r\n return {} as IPerformanceMeasurement;\r\n }\r\n\r\n /**\r\n * Sets pre-queue time by correlation Id\r\n *\r\n * @abstract\r\n * @param {PerformanceEvents} eventName\r\n * @param {string} correlationId\r\n * @returns\r\n */\r\n abstract setPreQueueTime(eventName: PerformanceEvents, correlationId?: string): void;\r\n\r\n /**\r\n * Get integral fields.\r\n * Override to change the set.\r\n */\r\n getIntFields(): ReadonlySet {\r\n return IntFields;\r\n }\r\n\r\n /**\r\n * Gets map of pre-queue times by correlation Id\r\n *\r\n * @param {PerformanceEvents} eventName\r\n * @param {string} correlationId\r\n * @returns {number}\r\n */\r\n getPreQueueTime(eventName: PerformanceEvents, correlationId: string): number | void {\r\n const preQueueEvent: PreQueueEvent | undefined = this.preQueueTimeByCorrelationId.get(correlationId);\r\n\r\n if (!preQueueEvent) {\r\n this.logger.trace(`PerformanceClient.getPreQueueTime: no pre-queue times found for correlationId: ${correlationId}, unable to add queue measurement`);\r\n return;\r\n } else if (preQueueEvent.name !== eventName) {\r\n this.logger.trace(`PerformanceClient.getPreQueueTime: no pre-queue time found for ${eventName}, unable to add queue measurement`);\r\n return;\r\n }\r\n\r\n return preQueueEvent.time;\r\n }\r\n\r\n /**\r\n * Calculates the difference between current time and time when function was queued.\r\n * Note: It is possible to have 0 as the queue time if the current time and the queued time was the same.\r\n *\r\n * @param {number} preQueueTime\r\n * @param {number} currentTime\r\n * @returns {number}\r\n */\r\n calculateQueuedTime(preQueueTime: number, currentTime: number): number {\r\n if (preQueueTime < 1) {\r\n this.logger.trace(`PerformanceClient: preQueueTime should be a positive integer and not ${preQueueTime}`);\r\n return 0;\r\n }\r\n\r\n if (currentTime < 1) {\r\n this.logger.trace(`PerformanceClient: currentTime should be a positive integer and not ${currentTime}`);\r\n return 0;\r\n }\r\n\r\n if (currentTime < preQueueTime) {\r\n this.logger.trace(\"PerformanceClient: currentTime is less than preQueueTime, check how time is being retrieved\");\r\n return 0;\r\n }\r\n\r\n return currentTime-preQueueTime;\r\n }\r\n\r\n /**\r\n * Adds queue measurement time to QueueMeasurements array for given correlation ID.\r\n *\r\n * @param {PerformanceEvents} eventName\r\n * @param {?string} correlationId\r\n * @param {?number} queueTime\r\n * @param {?boolean} manuallyCompleted - indicator for manually completed queue measurements\r\n * @returns\r\n */\r\n addQueueMeasurement(eventName: PerformanceEvents, correlationId?: string, queueTime?: number, manuallyCompleted?: boolean): void {\r\n if (!correlationId) {\r\n this.logger.trace(`PerformanceClient.addQueueMeasurement: correlationId not provided for ${eventName}, cannot add queue measurement`);\r\n return;\r\n }\r\n\r\n if (queueTime === 0) {\r\n // Possible for there to be no queue time after calculation\r\n this.logger.trace(`PerformanceClient.addQueueMeasurement: queue time provided for ${eventName} is ${queueTime}`);\r\n } else if (!queueTime) {\r\n this.logger.trace(`PerformanceClient.addQueueMeasurement: no queue time provided for ${eventName}`);\r\n return;\r\n }\r\n\r\n const queueMeasurement: QueueMeasurement = {eventName, queueTime, manuallyCompleted};\r\n\r\n // Adds to existing correlation Id if present in queueMeasurements\r\n const existingMeasurements = this.queueMeasurements.get(correlationId);\r\n if (existingMeasurements) {\r\n existingMeasurements.push(queueMeasurement);\r\n this.queueMeasurements.set(correlationId, existingMeasurements);\r\n } else {\r\n // Sets new correlation Id if not present in queueMeasurements\r\n this.logger.trace(`PerformanceClient.addQueueMeasurement: adding correlationId ${correlationId} to queue measurements`);\r\n const measurementArray = [queueMeasurement];\r\n this.queueMeasurements.set(correlationId, measurementArray);\r\n }\r\n // Delete processed pre-queue event.\r\n this.preQueueTimeByCorrelationId.delete(correlationId);\r\n }\r\n\r\n /**\r\n * Starts measuring performance for a given operation. Returns a function that should be used to end the measurement.\r\n *\r\n * @param {PerformanceEvents} measureName\r\n * @param {?string} [correlationId]\r\n * @returns {InProgressPerformanceEvent}\r\n */\r\n startMeasurement(measureName: PerformanceEvents, correlationId?: string): InProgressPerformanceEvent {\r\n // Generate a placeholder correlation if the request does not provide one\r\n const eventCorrelationId = correlationId || this.generateId();\r\n if (!correlationId) {\r\n this.logger.info(`PerformanceClient: No correlation id provided for ${measureName}, generating`, eventCorrelationId);\r\n }\r\n\r\n // Duplicate code to address spelling error will be removed at the next major version bump.\r\n this.logger.trace(`PerformanceClient: Performance measurement started for ${measureName}`, eventCorrelationId);\r\n const performanceMeasurement = this.startPerformanceMeasuremeant(measureName, eventCorrelationId);\r\n performanceMeasurement.startMeasurement();\r\n\r\n const inProgressEvent: PerformanceEvent = {\r\n eventId: this.generateId(),\r\n status: PerformanceEventStatus.InProgress,\r\n authority: this.authority,\r\n libraryName: this.libraryName,\r\n libraryVersion: this.libraryVersion,\r\n clientId: this.clientId,\r\n name: measureName,\r\n startTimeMs: Date.now(),\r\n correlationId: eventCorrelationId,\r\n appName: this.applicationTelemetry?.appName,\r\n appVersion: this.applicationTelemetry?.appVersion,\r\n };\r\n\r\n // Store in progress events so they can be discarded if not ended properly\r\n this.cacheEventByCorrelationId(inProgressEvent);\r\n\r\n // Return the event and functions the caller can use to properly end/flush the measurement\r\n return {\r\n endMeasurement: (event?: Partial): PerformanceEvent | null => {\r\n return this.endMeasurement({\r\n // Initial set of event properties\r\n ...inProgressEvent,\r\n // Properties set when event ends\r\n ...event\r\n },\r\n performanceMeasurement);\r\n },\r\n discardMeasurement: () => {\r\n return this.discardMeasurements(inProgressEvent.correlationId);\r\n },\r\n addStaticFields: (fields: StaticFields) => {\r\n return this.addStaticFields(fields, inProgressEvent.correlationId);\r\n },\r\n increment: (counters: Counters) => {\r\n return this.increment(counters, inProgressEvent.correlationId);\r\n },\r\n measurement: performanceMeasurement,\r\n event: inProgressEvent\r\n };\r\n\r\n }\r\n\r\n /**\r\n * Stops measuring the performance for an operation. Should only be called directly by PerformanceClient classes,\r\n * as consumers should instead use the function returned by startMeasurement.\r\n * Adds a new field named as \"[event name]DurationMs\" for sub-measurements, completes and emits an event\r\n * otherwise.\r\n *\r\n * @param {PerformanceEvent} event\r\n * @param {IPerformanceMeasurement} measurement\r\n * @returns {(PerformanceEvent | null)}\r\n */\r\n endMeasurement(event: PerformanceEvent, measurement?: IPerformanceMeasurement): PerformanceEvent | null {\r\n const rootEvent: PerformanceEvent | undefined = this.eventsByCorrelationId.get(event.correlationId);\r\n if (!rootEvent) {\r\n this.logger.trace(`PerformanceClient: Measurement not found for ${event.eventId}`, event.correlationId);\r\n return null;\r\n }\r\n\r\n const isRoot = event.eventId === rootEvent.eventId;\r\n let queueInfo = {\r\n totalQueueTime: 0,\r\n totalQueueCount: 0,\r\n manuallyCompletedCount: 0\r\n };\r\n if (isRoot) {\r\n queueInfo = this.getQueueInfo(event.correlationId);\r\n this.discardCache(rootEvent.correlationId);\r\n } else {\r\n rootEvent.incompleteSubMeasurements?.delete(event.eventId);\r\n }\r\n\r\n measurement?.endMeasurement();\r\n const durationMs = measurement?.flushMeasurement();\r\n // null indicates no measurement was taken (e.g. needed performance APIs not present)\r\n if (!durationMs) {\r\n this.logger.trace(\"PerformanceClient: Performance measurement not taken\", rootEvent.correlationId);\r\n return null;\r\n }\r\n\r\n this.logger.trace(`PerformanceClient: Performance measurement ended for ${event.name}: ${durationMs} ms`, event.correlationId);\r\n\r\n // Add sub-measurement attribute to root event.\r\n if (!isRoot) {\r\n rootEvent[event.name + \"DurationMs\"] = Math.floor(durationMs);\r\n return { ...rootEvent };\r\n }\r\n\r\n let finalEvent: PerformanceEvent = { ...rootEvent, ...event };\r\n let incompleteSubsCount: number = 0;\r\n // Incomplete sub-measurements are discarded. They are likely an instrumentation bug that should be fixed.\r\n finalEvent.incompleteSubMeasurements?.forEach(subMeasurement => {\r\n this.logger.trace(`PerformanceClient: Incomplete submeasurement ${subMeasurement.name} found for ${event.name}`, finalEvent.correlationId);\r\n incompleteSubsCount++;\r\n });\r\n finalEvent.incompleteSubMeasurements = undefined;\r\n\r\n finalEvent = {\r\n ...finalEvent,\r\n durationMs: Math.round(durationMs),\r\n queuedTimeMs: queueInfo.totalQueueTime,\r\n queuedCount: queueInfo.totalQueueCount,\r\n queuedManuallyCompletedCount: queueInfo.manuallyCompletedCount,\r\n status: PerformanceEventStatus.Completed,\r\n incompleteSubsCount\r\n };\r\n this.truncateIntegralFields(finalEvent, this.getIntFields());\r\n this.emitEvents([finalEvent], event.correlationId);\r\n\r\n return finalEvent;\r\n }\r\n\r\n /**\r\n * Saves extra information to be emitted when the measurements are flushed\r\n * @param fields\r\n * @param correlationId\r\n */\r\n addStaticFields(fields: StaticFields, correlationId: string) : void {\r\n this.logger.trace(\"PerformanceClient: Updating static fields\");\r\n const event = this.eventsByCorrelationId.get(correlationId);\r\n if (event) {\r\n this.eventsByCorrelationId.set(correlationId, {...event, ...fields});\r\n } else {\r\n this.logger.trace(\"PerformanceClient: Event not found for\", correlationId);\r\n }\r\n }\r\n\r\n /**\r\n * Increment counters to be emitted when the measurements are flushed\r\n * @param counters {Counters}\r\n * @param correlationId {string} correlation identifier\r\n */\r\n increment(counters: Counters, correlationId: string): void {\r\n this.logger.trace(\"PerformanceClient: Updating counters\");\r\n const event = this.eventsByCorrelationId.get(correlationId);\r\n if (event) {\r\n for (const counter in counters) {\r\n if (!event.hasOwnProperty(counter)) {\r\n event[counter] = 0;\r\n }\r\n event[counter] += counters[counter];\r\n }\r\n } else {\r\n this.logger.trace(\"PerformanceClient: Event not found for\", correlationId);\r\n }\r\n }\r\n\r\n /**\r\n * Upserts event into event cache.\r\n * First key is the correlation id, second key is the event id.\r\n * Allows for events to be grouped by correlation id,\r\n * and to easily allow for properties on them to be updated.\r\n *\r\n * @private\r\n * @param {PerformanceEvent} event\r\n */\r\n private cacheEventByCorrelationId(event: PerformanceEvent) {\r\n const rootEvent = this.eventsByCorrelationId.get(event.correlationId);\r\n if (rootEvent) {\r\n this.logger.trace(`PerformanceClient: Performance measurement for ${event.name} added/updated`, event.correlationId);\r\n rootEvent.incompleteSubMeasurements = rootEvent.incompleteSubMeasurements || new Map();\r\n rootEvent.incompleteSubMeasurements.set(event.eventId, {name: event.name, startTimeMs: event.startTimeMs });\r\n } else {\r\n this.logger.trace(`PerformanceClient: Performance measurement for ${event.name} started`, event.correlationId);\r\n this.eventsByCorrelationId.set(event.correlationId, { ...event });\r\n }\r\n }\r\n\r\n private getQueueInfo(correlationId: string): { totalQueueTime: number, totalQueueCount: number, manuallyCompletedCount: number } {\r\n const queueMeasurementForCorrelationId = this.queueMeasurements.get(correlationId);\r\n if (!queueMeasurementForCorrelationId) {\r\n this.logger.trace(`PerformanceClient: no queue measurements found for for correlationId: ${correlationId}`);\r\n }\r\n\r\n let totalQueueTime = 0;\r\n let totalQueueCount = 0;\r\n let manuallyCompletedCount = 0;\r\n queueMeasurementForCorrelationId?.forEach((measurement) => {\r\n totalQueueTime += measurement.queueTime;\r\n totalQueueCount++;\r\n manuallyCompletedCount += measurement.manuallyCompleted ? 1 : 0;\r\n });\r\n\r\n return {\r\n totalQueueTime,\r\n totalQueueCount,\r\n manuallyCompletedCount\r\n };\r\n }\r\n\r\n /**\r\n * Removes measurements for a given correlation id.\r\n *\r\n * @param {string} correlationId\r\n */\r\n discardMeasurements(correlationId: string): void {\r\n this.logger.trace(\"PerformanceClient: Performance measurements discarded\", correlationId);\r\n this.eventsByCorrelationId.delete(correlationId);\r\n }\r\n\r\n /**\r\n * Removes cache for a given correlation id.\r\n *\r\n * @param {string} correlationId correlation identifier\r\n */\r\n private discardCache(correlationId: string): void {\r\n this.discardMeasurements(correlationId);\r\n\r\n this.logger.trace(\"PerformanceClient: QueueMeasurements discarded\", correlationId);\r\n this.queueMeasurements.delete(correlationId);\r\n\r\n this.logger.trace(\"PerformanceClient: Pre-queue times discarded\", correlationId);\r\n this.preQueueTimeByCorrelationId.delete(correlationId);\r\n }\r\n\r\n /**\r\n * Registers a callback function to receive performance events.\r\n *\r\n * @param {PerformanceCallbackFunction} callback\r\n * @returns {string}\r\n */\r\n addPerformanceCallback(callback: PerformanceCallbackFunction): string {\r\n const callbackId = this.generateId();\r\n this.callbacks.set(callbackId, callback);\r\n this.logger.verbose(`PerformanceClient: Performance callback registered with id: ${callbackId}`);\r\n\r\n return callbackId;\r\n }\r\n\r\n /**\r\n * Removes a callback registered with addPerformanceCallback.\r\n *\r\n * @param {string} callbackId\r\n * @returns {boolean}\r\n */\r\n removePerformanceCallback(callbackId: string): boolean {\r\n const result = this.callbacks.delete(callbackId);\r\n\r\n if (result) {\r\n this.logger.verbose(`PerformanceClient: Performance callback ${callbackId} removed.`);\r\n } else {\r\n this.logger.verbose(`PerformanceClient: Performance callback ${callbackId} not removed.`);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Emits events to all registered callbacks.\r\n *\r\n * @param {PerformanceEvent[]} events\r\n * @param {?string} [correlationId]\r\n */\r\n emitEvents(events: PerformanceEvent[], correlationId: string): void {\r\n this.logger.verbose(\"PerformanceClient: Emitting performance events\", correlationId);\r\n\r\n this.callbacks.forEach((callback: PerformanceCallbackFunction, callbackId: string) => {\r\n this.logger.trace(`PerformanceClient: Emitting event to callback ${callbackId}`, correlationId);\r\n callback.apply(null, [events]);\r\n });\r\n }\r\n\r\n /**\r\n * Enforce truncation of integral fields in performance event.\r\n * @param {PerformanceEvent} event performance event to update.\r\n * @param {Set} intFields integral fields.\r\n */\r\n private truncateIntegralFields(event: PerformanceEvent, intFields: ReadonlySet): void {\r\n intFields.forEach((key) => {\r\n if (key in event && typeof event[key] === \"number\") {\r\n event[key] = Math.floor(event[key]);\r\n }\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { IPerformanceClient } from \"./IPerformanceClient\";\r\nimport { IPerformanceMeasurement } from \"./IPerformanceMeasurement\";\r\nimport { PerformanceClient } from \"./PerformanceClient\";\r\nimport { PerformanceEvents } from \"./PerformanceEvent\";\r\n\r\nexport class StubPerformanceMeasurement implements IPerformanceMeasurement {\r\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\r\n startMeasurement(): void { }\r\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\r\n endMeasurement(): void { }\r\n flushMeasurement(): number | null {\r\n return null;\r\n }\r\n \r\n}\r\n\r\nexport class StubPerformanceClient extends PerformanceClient implements IPerformanceClient {\r\n generateId(): string {\r\n return \"callback-id\";\r\n }\r\n \r\n startPerformanceMeasuremeant(): IPerformanceMeasurement {\r\n return new StubPerformanceMeasurement();\r\n }\r\n\r\n startPerformanceMeasurement(): IPerformanceMeasurement {\r\n return new StubPerformanceMeasurement();\r\n }\r\n\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n calculateQueuedTime(preQueueTime: number, currentTime: number): number {\r\n return 0;\r\n }\r\n\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n addQueueMeasurement(eventName: PerformanceEvents, correlationId: string, queueTime: number): void {\r\n return;\r\n }\r\n\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n setPreQueueTime(eventName: PerformanceEvents, correlationId?: string | undefined): void {\r\n return;\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError } from \"../error/AuthError\";\r\nimport { BaseAuthRequest } from \"../request/BaseAuthRequest\";\r\nimport { SignedHttpRequest } from \"./SignedHttpRequest\";\r\n\r\n/**\r\n * The PkceCodes type describes the structure\r\n * of objects that contain PKCE code\r\n * challenge and verifier pairs\r\n */\r\nexport type PkceCodes = {\r\n verifier: string,\r\n challenge: string\r\n};\r\n\r\nexport type SignedHttpRequestParameters = Pick & {\r\n correlationId?: string\r\n};\r\n\r\n/**\r\n * Interface for crypto functions used by library\r\n */\r\nexport interface ICrypto {\r\n /**\r\n * Creates a guid randomly.\r\n */\r\n createNewGuid(): string;\r\n /**\r\n * base64 Encode string\r\n * @param input \r\n */\r\n base64Encode(input: string): string;\r\n /**\r\n * base64 decode string\r\n * @param input \r\n */\r\n base64Decode(input: string): string;\r\n /**\r\n * Generate PKCE codes for OAuth. See RFC here: https://tools.ietf.org/html/rfc7636\r\n */\r\n generatePkceCodes(): Promise;\r\n /**\r\n * Generates an JWK RSA S256 Thumbprint\r\n * @param request\r\n */\r\n getPublicKeyThumbprint(request: SignedHttpRequestParameters): Promise;\r\n /**\r\n * Removes cryptographic keypair from key store matching the keyId passed in\r\n * @param kid \r\n */\r\n removeTokenBindingKey(kid: string): Promise;\r\n /**\r\n * Removes all cryptographic keys from IndexedDB storage\r\n */\r\n clearKeystore(): Promise;\r\n /** \r\n * Returns a signed proof-of-possession token with a given acces token that contains a cnf claim with the required kid.\r\n * @param accessToken \r\n */\r\n signJwt(payload: SignedHttpRequest, kid: string, correlationId?: string): Promise;\r\n /**\r\n * Returns the SHA-256 hash of an input string\r\n * @param plainText\r\n */\r\n hashString(plainText: string): Promise;\r\n}\r\n\r\nexport const DEFAULT_CRYPTO_IMPLEMENTATION: ICrypto = {\r\n createNewGuid: (): string => {\r\n const notImplErr = \"Crypto interface - createNewGuid() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n base64Decode: (): string => {\r\n const notImplErr = \"Crypto interface - base64Decode() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n base64Encode: (): string => {\r\n const notImplErr = \"Crypto interface - base64Encode() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async generatePkceCodes(): Promise {\r\n const notImplErr = \"Crypto interface - generatePkceCodes() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async getPublicKeyThumbprint(): Promise {\r\n const notImplErr = \"Crypto interface - getPublicKeyThumbprint() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async removeTokenBindingKey(): Promise {\r\n const notImplErr = \"Crypto interface - removeTokenBindingKey() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async clearKeystore(): Promise {\r\n const notImplErr = \"Crypto interface - clearKeystore() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async signJwt(): Promise {\r\n const notImplErr = \"Crypto interface - signJwt() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async hashString(): Promise {\r\n const notImplErr = \"Crypto interface - hashString() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n};\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Separators, CredentialType, CacheType, Constants, AuthenticationScheme } from \"../../utils/Constants\";\r\nimport { ClientAuthError } from \"../../error/ClientAuthError\";\r\n\r\n/**\r\n * Base type for credentials to be stored in the cache: eg: ACCESS_TOKEN, ID_TOKEN etc\r\n *\r\n * Key:Value Schema:\r\n *\r\n * Key: -------\r\n *\r\n * Value Schema:\r\n * {\r\n * homeAccountId: home account identifier for the auth scheme,\r\n * environment: entity that issued the token, represented as a full host\r\n * credentialType: Type of credential as a string, can be one of the following: RefreshToken, AccessToken, IdToken, Password, Cookie, Certificate, Other\r\n * clientId: client ID of the application\r\n * secret: Actual credential as a string\r\n * familyId: Family ID identifier, usually only used for refresh tokens\r\n * realm: Full tenant or organizational identifier that the account belongs to\r\n * target: Permissions that are included in the token, or for refresh tokens, the resource identifier.\r\n * tokenType: Matches the authentication scheme for which the token was issued (i.e. Bearer or pop)\r\n * requestedClaimsHash: Matches the SHA 256 hash of the claims object included in the token request\r\n * userAssertionHash: Matches the SHA 256 hash of the obo_assertion for the OBO flow\r\n * }\r\n */\r\nexport class CredentialEntity {\r\n homeAccountId: string;\r\n environment: string;\r\n credentialType: CredentialType;\r\n clientId: string;\r\n secret: string;\r\n familyId?: string;\r\n realm?: string;\r\n target?: string;\r\n userAssertionHash?: string;\r\n tokenType?: AuthenticationScheme;\r\n keyId?: string;\r\n requestedClaimsHash?: string;\r\n\r\n /**\r\n * Generate Account Id key component as per the schema: -\r\n */\r\n generateAccountId(): string {\r\n return CredentialEntity.generateAccountIdForCacheKey(this.homeAccountId, this.environment);\r\n }\r\n\r\n /**\r\n * Generate Credential Id key component as per the schema: --\r\n */\r\n generateCredentialId(): string {\r\n return CredentialEntity.generateCredentialIdForCacheKey(\r\n this.credentialType,\r\n this.clientId,\r\n this.realm,\r\n this.familyId\r\n );\r\n }\r\n\r\n /**\r\n * Generate target key component as per schema: \r\n */\r\n generateTarget(): string {\r\n return CredentialEntity.generateTargetForCacheKey(this.target);\r\n }\r\n\r\n /**\r\n * generates credential key\r\n */\r\n generateCredentialKey(): string {\r\n return CredentialEntity.generateCredentialCacheKey(\r\n this.homeAccountId,\r\n this.environment,\r\n this.credentialType,\r\n this.clientId,\r\n this.realm,\r\n this.target,\r\n this.familyId,\r\n this.tokenType,\r\n this.requestedClaimsHash,\r\n );\r\n }\r\n\r\n /**\r\n * returns the type of the cache (in this case credential)\r\n */\r\n generateType(): number {\r\n switch (this.credentialType) {\r\n case CredentialType.ID_TOKEN:\r\n return CacheType.ID_TOKEN;\r\n case CredentialType.ACCESS_TOKEN:\r\n case CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME:\r\n return CacheType.ACCESS_TOKEN;\r\n case CredentialType.REFRESH_TOKEN:\r\n return CacheType.REFRESH_TOKEN;\r\n default: {\r\n throw ClientAuthError.createUnexpectedCredentialTypeError();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * generates credential key\r\n * -\\-----\r\n */\r\n static generateCredentialCacheKey(\r\n homeAccountId: string,\r\n environment: string,\r\n credentialType: CredentialType,\r\n clientId: string,\r\n realm?: string,\r\n target?: string,\r\n familyId?: string,\r\n tokenType?: AuthenticationScheme,\r\n requestedClaimsHash?: string\r\n ): string {\r\n const credentialKey = [\r\n this.generateAccountIdForCacheKey(homeAccountId, environment),\r\n this.generateCredentialIdForCacheKey(credentialType, clientId, realm, familyId),\r\n this.generateTargetForCacheKey(target),\r\n this.generateClaimsHashForCacheKey(requestedClaimsHash),\r\n this.generateSchemeForCacheKey(tokenType)\r\n ];\r\n\r\n return credentialKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n\r\n /**\r\n * generates Account Id for keys\r\n * @param homeAccountId\r\n * @param environment\r\n */\r\n private static generateAccountIdForCacheKey(\r\n homeAccountId: string,\r\n environment: string\r\n ): string {\r\n const accountId: Array = [homeAccountId, environment];\r\n return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n\r\n /**\r\n * Generates Credential Id for keys\r\n * @param credentialType\r\n * @param realm\r\n * @param clientId\r\n * @param familyId\r\n */\r\n private static generateCredentialIdForCacheKey(\r\n credentialType: CredentialType,\r\n clientId: string,\r\n realm?: string,\r\n familyId?: string\r\n ): string {\r\n const clientOrFamilyId =\r\n credentialType === CredentialType.REFRESH_TOKEN\r\n ? familyId || clientId\r\n : clientId;\r\n const credentialId: Array = [\r\n credentialType,\r\n clientOrFamilyId,\r\n realm || Constants.EMPTY_STRING,\r\n ];\r\n\r\n return credentialId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n\r\n /**\r\n * Generate target key component as per schema: \r\n */\r\n private static generateTargetForCacheKey(scopes?: string): string {\r\n return (scopes || Constants.EMPTY_STRING).toLowerCase();\r\n }\r\n\r\n /**\r\n * Generate requested claims key component as per schema: \r\n */\r\n private static generateClaimsHashForCacheKey(requestedClaimsHash?: string): string {\r\n return(requestedClaimsHash || Constants.EMPTY_STRING).toLowerCase();\r\n }\r\n\r\n /**\r\n * Generate scheme key componenet as per schema: \r\n */\r\n private static generateSchemeForCacheKey(tokenType?: string): string {\r\n /*\r\n * PoP Tokens and SSH certs include scheme in cache key\r\n * Cast to lowercase to handle \"bearer\" from ADFS\r\n */\r\n return (tokenType && tokenType.toLowerCase() !== AuthenticationScheme.BEARER.toLowerCase()) ? tokenType.toLowerCase() : Constants.EMPTY_STRING;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { CredentialEntity } from \"./CredentialEntity\";\r\nimport { CredentialType } from \"../../utils/Constants\";\r\n\r\n/**\r\n * ID_TOKEN Cache\r\n *\r\n * Key:Value Schema:\r\n *\r\n * Key Example: uid.utid-login.microsoftonline.com-idtoken-clientId-contoso.com-\r\n *\r\n * Value Schema:\r\n * {\r\n * homeAccountId: home account identifier for the auth scheme,\r\n * environment: entity that issued the token, represented as a full host\r\n * credentialType: Type of credential as a string, can be one of the following: RefreshToken, AccessToken, IdToken, Password, Cookie, Certificate, Other\r\n * clientId: client ID of the application\r\n * secret: Actual credential as a string\r\n * realm: Full tenant or organizational identifier that the account belongs to\r\n * }\r\n */\r\nexport class IdTokenEntity extends CredentialEntity {\r\n realm: string;\r\n\r\n /**\r\n * Create IdTokenEntity\r\n * @param homeAccountId\r\n * @param authenticationResult\r\n * @param clientId\r\n * @param authority\r\n */\r\n static createIdTokenEntity(\r\n homeAccountId: string,\r\n environment: string,\r\n idToken: string,\r\n clientId: string,\r\n tenantId: string,\r\n ): IdTokenEntity {\r\n const idTokenEntity = new IdTokenEntity();\r\n\r\n idTokenEntity.credentialType = CredentialType.ID_TOKEN;\r\n idTokenEntity.homeAccountId = homeAccountId;\r\n idTokenEntity.environment = environment;\r\n idTokenEntity.clientId = clientId;\r\n idTokenEntity.secret = idToken;\r\n idTokenEntity.realm = tenantId;\r\n\r\n return idTokenEntity;\r\n }\r\n\r\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\n static isIdTokenEntity(entity: object): boolean {\r\n\r\n if (!entity) {\r\n return false;\r\n }\r\n\r\n return (\r\n entity.hasOwnProperty(\"homeAccountId\") &&\r\n entity.hasOwnProperty(\"environment\") &&\r\n entity.hasOwnProperty(\"credentialType\") &&\r\n entity.hasOwnProperty(\"realm\") &&\r\n entity.hasOwnProperty(\"clientId\") &&\r\n entity.hasOwnProperty(\"secret\") &&\r\n entity[\"credentialType\"] === CredentialType.ID_TOKEN\r\n );\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ClientAuthError } from \"./ClientAuthError\";\r\n\r\n/**\r\n * ClientConfigurationErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nexport const ClientConfigurationErrorMessage = {\r\n redirectUriNotSet: {\r\n code: \"redirect_uri_empty\",\r\n desc: \"A redirect URI is required for all calls, and none has been set.\"\r\n },\r\n postLogoutUriNotSet: {\r\n code: \"post_logout_uri_empty\",\r\n desc: \"A post logout redirect has not been set.\"\r\n },\r\n claimsRequestParsingError: {\r\n code: \"claims_request_parsing_error\",\r\n desc: \"Could not parse the given claims request object.\"\r\n },\r\n authorityUriInsecure: {\r\n code: \"authority_uri_insecure\",\r\n desc: \"Authority URIs must use https. Please see here for valid authority configuration options: https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications#configuration-options\"\r\n },\r\n urlParseError: {\r\n code: \"url_parse_error\",\r\n desc: \"URL could not be parsed into appropriate segments.\"\r\n },\r\n urlEmptyError: {\r\n code: \"empty_url_error\",\r\n desc: \"URL was empty or null.\"\r\n },\r\n emptyScopesError: {\r\n code: \"empty_input_scopes_error\",\r\n desc: \"Scopes cannot be passed as null, undefined or empty array because they are required to obtain an access token.\"\r\n },\r\n nonArrayScopesError: {\r\n code: \"nonarray_input_scopes_error\",\r\n desc: \"Scopes cannot be passed as non-array.\"\r\n },\r\n clientIdSingleScopeError: {\r\n code: \"clientid_input_scopes_error\",\r\n desc: \"Client ID can only be provided as a single scope.\"\r\n },\r\n invalidPrompt: {\r\n code: \"invalid_prompt_value\",\r\n desc: \"Supported prompt values are 'login', 'select_account', 'consent', 'create', 'none' and 'no_session'. Please see here for valid configuration options: https://azuread.github.io/microsoft-authentication-library-for-js/ref/modules/_azure_msal_common.html#commonauthorizationurlrequest\",\r\n },\r\n invalidClaimsRequest: {\r\n code: \"invalid_claims\",\r\n desc: \"Given claims parameter must be a stringified JSON object.\"\r\n },\r\n tokenRequestEmptyError: {\r\n code: \"token_request_empty\",\r\n desc: \"Token request was empty and not found in cache.\"\r\n },\r\n logoutRequestEmptyError: {\r\n code: \"logout_request_empty\",\r\n desc: \"The logout request was null or undefined.\"\r\n },\r\n invalidCodeChallengeMethod: {\r\n code: \"invalid_code_challenge_method\",\r\n desc: \"code_challenge_method passed is invalid. Valid values are \\\"plain\\\" and \\\"S256\\\".\"\r\n },\r\n invalidCodeChallengeParams: {\r\n code: \"pkce_params_missing\",\r\n desc: \"Both params: code_challenge and code_challenge_method are to be passed if to be sent in the request\"\r\n },\r\n invalidCloudDiscoveryMetadata: {\r\n code: \"invalid_cloud_discovery_metadata\",\r\n desc: \"Invalid cloudDiscoveryMetadata provided. Must be a stringified JSON object containing tenant_discovery_endpoint and metadata fields\"\r\n },\r\n invalidAuthorityMetadata: {\r\n code: \"invalid_authority_metadata\",\r\n desc: \"Invalid authorityMetadata provided. Must by a stringified JSON object containing authorization_endpoint, token_endpoint, issuer fields.\"\r\n },\r\n untrustedAuthority: {\r\n code: \"untrusted_authority\",\r\n desc: \"The provided authority is not a trusted authority. Please include this authority in the knownAuthorities config parameter.\"\r\n },\r\n invalidAzureCloudInstance: {\r\n code: \"invalid_azure_cloud_instance\",\r\n desc: \"Invalid AzureCloudInstance provided. Please refer MSAL JS docs: aks.ms/msaljs/azure_cloud_instance for valid values\"\r\n },\r\n missingSshJwk: {\r\n code: \"missing_ssh_jwk\",\r\n desc: \"Missing sshJwk in SSH certificate request. A stringified JSON Web Key is required when using the SSH authentication scheme.\"\r\n },\r\n missingSshKid: {\r\n code: \"missing_ssh_kid\",\r\n desc: \"Missing sshKid in SSH certificate request. A string that uniquely identifies the public SSH key is required when using the SSH authentication scheme.\"\r\n },\r\n missingNonceAuthenticationHeader: {\r\n code: \"missing_nonce_authentication_header\",\r\n desc: \"Unable to find an authentication header containing server nonce. Either the Authentication-Info or WWW-Authenticate headers must be present in order to obtain a server nonce.\"\r\n },\r\n invalidAuthenticationHeader: {\r\n code: \"invalid_authentication_header\",\r\n desc: \"Invalid authentication header provided\"\r\n },\r\n authorityMismatch: {\r\n code: \"authority_mismatch\",\r\n desc: \"Authority mismatch error. Authority provided in login request or PublicClientApplication config does not match the environment of the provided account. Please use a matching account or make an interactive request to login to this authority.\"\r\n }\r\n};\r\n\r\n/**\r\n * Error thrown when there is an error in configuration of the MSAL.js library.\r\n */\r\nexport class ClientConfigurationError extends ClientAuthError {\r\n\r\n constructor(errorCode: string, errorMessage?: string) {\r\n super(errorCode, errorMessage);\r\n this.name = \"ClientConfigurationError\";\r\n Object.setPrototypeOf(this, ClientConfigurationError.prototype);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the redirect uri is empty (not set by caller)\r\n */\r\n static createRedirectUriEmptyError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.redirectUriNotSet.code,\r\n ClientConfigurationErrorMessage.redirectUriNotSet.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the post-logout redirect uri is empty (not set by caller)\r\n */\r\n static createPostLogoutRedirectUriEmptyError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.postLogoutUriNotSet.code,\r\n ClientConfigurationErrorMessage.postLogoutUriNotSet.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the claims request could not be successfully parsed\r\n */\r\n static createClaimsRequestParsingError(claimsRequestParseError: string): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.claimsRequestParsingError.code,\r\n `${ClientConfigurationErrorMessage.claimsRequestParsingError.desc} Given value: ${claimsRequestParseError}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown if authority uri is given an insecure protocol.\r\n * @param urlString\r\n */\r\n static createInsecureAuthorityUriError(urlString: string): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.authorityUriInsecure.code,\r\n `${ClientConfigurationErrorMessage.authorityUriInsecure.desc} Given URI: ${urlString}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown if URL string does not parse into separate segments.\r\n * @param urlString\r\n */\r\n static createUrlParseError(urlParseError: string): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.urlParseError.code,\r\n `${ClientConfigurationErrorMessage.urlParseError.desc} Given Error: ${urlParseError}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown if URL string is empty or null.\r\n * @param urlString\r\n */\r\n static createUrlEmptyError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.urlEmptyError.code,\r\n ClientConfigurationErrorMessage.urlEmptyError.desc);\r\n }\r\n\r\n /**\r\n * Error thrown when scopes are empty.\r\n * @param scopesValue\r\n */\r\n static createEmptyScopesArrayError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.emptyScopesError.code,\r\n `${ClientConfigurationErrorMessage.emptyScopesError.desc}`);\r\n }\r\n\r\n /**\r\n * Error thrown when client id scope is not provided as single scope.\r\n * @param inputScopes\r\n */\r\n static createClientIdSingleScopeError(inputScopes: Array): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.clientIdSingleScopeError.code,\r\n `${ClientConfigurationErrorMessage.clientIdSingleScopeError.desc} Given Scopes: ${inputScopes}`);\r\n }\r\n\r\n /**\r\n * Error thrown when prompt is not an allowed type.\r\n * @param promptValue\r\n */\r\n static createInvalidPromptError(promptValue: string): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidPrompt.code,\r\n `${ClientConfigurationErrorMessage.invalidPrompt.desc} Given value: ${promptValue}`);\r\n }\r\n\r\n /**\r\n * Creates error thrown when claims parameter is not a stringified JSON object\r\n */\r\n static createInvalidClaimsRequestError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidClaimsRequest.code,\r\n ClientConfigurationErrorMessage.invalidClaimsRequest.desc);\r\n }\r\n\r\n /**\r\n * Throws error when token request is empty and nothing cached in storage.\r\n */\r\n static createEmptyLogoutRequestError(): ClientConfigurationError {\r\n return new ClientConfigurationError(\r\n ClientConfigurationErrorMessage.logoutRequestEmptyError.code,\r\n ClientConfigurationErrorMessage.logoutRequestEmptyError.desc\r\n );\r\n }\r\n\r\n /**\r\n * Throws error when token request is empty and nothing cached in storage.\r\n */\r\n static createEmptyTokenRequestError(): ClientConfigurationError {\r\n return new ClientConfigurationError(\r\n ClientConfigurationErrorMessage.tokenRequestEmptyError.code,\r\n ClientConfigurationErrorMessage.tokenRequestEmptyError.desc\r\n );\r\n }\r\n\r\n /**\r\n * Throws error when an invalid code_challenge_method is passed by the user\r\n */\r\n static createInvalidCodeChallengeMethodError(): ClientConfigurationError {\r\n return new ClientConfigurationError(\r\n ClientConfigurationErrorMessage.invalidCodeChallengeMethod.code,\r\n ClientConfigurationErrorMessage.invalidCodeChallengeMethod.desc\r\n );\r\n }\r\n\r\n /**\r\n * Throws error when both params: code_challenge and code_challenge_method are not passed together\r\n */\r\n static createInvalidCodeChallengeParamsError(): ClientConfigurationError {\r\n return new ClientConfigurationError(\r\n ClientConfigurationErrorMessage.invalidCodeChallengeParams.code,\r\n ClientConfigurationErrorMessage.invalidCodeChallengeParams.desc\r\n );\r\n }\r\n\r\n /**\r\n * Throws an error when the user passes invalid cloudDiscoveryMetadata\r\n */\r\n static createInvalidCloudDiscoveryMetadataError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidCloudDiscoveryMetadata.code,\r\n ClientConfigurationErrorMessage.invalidCloudDiscoveryMetadata.desc);\r\n }\r\n\r\n /**\r\n * Throws an error when the user passes invalid cloudDiscoveryMetadata\r\n */\r\n static createInvalidAuthorityMetadataError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidAuthorityMetadata.code,\r\n ClientConfigurationErrorMessage.invalidAuthorityMetadata.desc);\r\n }\r\n\r\n /**\r\n * Throws error when provided authority is not a member of the trusted host list\r\n */\r\n static createUntrustedAuthorityError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.untrustedAuthority.code,\r\n ClientConfigurationErrorMessage.untrustedAuthority.desc);\r\n }\r\n\r\n /**\r\n * Throws error when the AzureCloudInstance is set to an invalid value\r\n */\r\n static createInvalidAzureCloudInstanceError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidAzureCloudInstance.code,\r\n ClientConfigurationErrorMessage.invalidAzureCloudInstance.desc);\r\n }\r\n\r\n /**\r\n * Throws an error when the authentication scheme is set to SSH but the SSH public key is omitted from the request\r\n */\r\n static createMissingSshJwkError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.missingSshJwk.code,\r\n ClientConfigurationErrorMessage.missingSshJwk.desc);\r\n }\r\n\r\n /**\r\n * Throws an error when the authentication scheme is set to SSH but the SSH public key ID is omitted from the request\r\n */\r\n static createMissingSshKidError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.missingSshKid.code,\r\n ClientConfigurationErrorMessage.missingSshKid.desc);\r\n }\r\n\r\n /**\r\n * Throws error when provided headers don't contain a header that a server nonce can be extracted from\r\n */\r\n static createMissingNonceAuthenticationHeadersError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.missingNonceAuthenticationHeader.code,\r\n ClientConfigurationErrorMessage.missingNonceAuthenticationHeader.desc);\r\n }\r\n\r\n /**\r\n * Throws error when a provided header is invalid in any way\r\n */\r\n static createInvalidAuthenticationHeaderError(invalidHeaderName: string, details: string): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidAuthenticationHeader.code,\r\n `${ClientConfigurationErrorMessage.invalidAuthenticationHeader.desc}. Invalid header: ${invalidHeaderName}. Details: ${details}`);\r\n }\r\n \r\n /**\r\n * Create an error when the authority provided in request does not match authority provided in account or MSAL.js configuration.\r\n */\r\n static createAuthorityMismatchError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.authorityMismatch.code, ClientConfigurationErrorMessage.authorityMismatch.desc);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { Constants, OIDC_SCOPES } from \"../utils/Constants\";\r\n\r\n/**\r\n * The ScopeSet class creates a set of scopes. Scopes are case-insensitive, unique values, so the Set object in JS makes\r\n * the most sense to implement for this class. All scopes are trimmed and converted to lower case strings in intersection and union functions\r\n * to ensure uniqueness of strings.\r\n */\r\nexport class ScopeSet {\r\n // Scopes as a Set of strings\r\n private scopes: Set;\r\n\r\n constructor(inputScopes: Array) {\r\n // Filter empty string and null/undefined array items\r\n const scopeArr = inputScopes ? StringUtils.trimArrayEntries([...inputScopes]) : [];\r\n const filteredInput = scopeArr ? StringUtils.removeEmptyStringsFromArray(scopeArr) : [];\r\n\r\n // Validate and filter scopes (validate function throws if validation fails)\r\n this.validateInputScopes(filteredInput);\r\n\r\n this.scopes = new Set(); // Iterator in constructor not supported by IE11\r\n filteredInput.forEach(scope => this.scopes.add(scope));\r\n }\r\n\r\n /**\r\n * Factory method to create ScopeSet from space-delimited string\r\n * @param inputScopeString\r\n * @param appClientId\r\n * @param scopesRequired\r\n */\r\n static fromString(inputScopeString: string): ScopeSet {\r\n const scopeString = inputScopeString || Constants.EMPTY_STRING;\r\n const inputScopes: Array = scopeString.split(\" \");\r\n return new ScopeSet(inputScopes);\r\n }\r\n\r\n /**\r\n * Creates the set of scopes to search for in cache lookups\r\n * @param inputScopeString \r\n * @returns \r\n */\r\n static createSearchScopes(inputScopeString: Array): ScopeSet {\r\n const scopeSet = new ScopeSet(inputScopeString);\r\n if (!scopeSet.containsOnlyOIDCScopes()) {\r\n scopeSet.removeOIDCScopes();\r\n } else {\r\n scopeSet.removeScope(Constants.OFFLINE_ACCESS_SCOPE);\r\n }\r\n\r\n return scopeSet;\r\n }\r\n\r\n /**\r\n * Used to validate the scopes input parameter requested by the developer.\r\n * @param {Array} inputScopes - Developer requested permissions. Not all scopes are guaranteed to be included in the access token returned.\r\n * @param {boolean} scopesRequired - Boolean indicating whether the scopes array is required or not\r\n */\r\n private validateInputScopes(inputScopes: Array): void {\r\n // Check if scopes are required but not given or is an empty array\r\n if (!inputScopes || inputScopes.length < 1) {\r\n throw ClientConfigurationError.createEmptyScopesArrayError();\r\n }\r\n }\r\n\r\n /**\r\n * Check if a given scope is present in this set of scopes.\r\n * @param scope\r\n */\r\n containsScope(scope: string): boolean {\r\n const lowerCaseScopes = this.printScopesLowerCase().split(\" \");\r\n const lowerCaseScopesSet = new ScopeSet(lowerCaseScopes);\r\n // compare lowercase scopes\r\n return !StringUtils.isEmpty(scope) ? lowerCaseScopesSet.scopes.has(scope.toLowerCase()) : false;\r\n }\r\n\r\n /**\r\n * Check if a set of scopes is present in this set of scopes.\r\n * @param scopeSet\r\n */\r\n containsScopeSet(scopeSet: ScopeSet): boolean {\r\n if (!scopeSet || scopeSet.scopes.size <= 0) {\r\n return false;\r\n }\r\n\r\n return (this.scopes.size >= scopeSet.scopes.size && scopeSet.asArray().every(scope => this.containsScope(scope)));\r\n }\r\n\r\n /**\r\n * Check if set of scopes contains only the defaults\r\n */\r\n containsOnlyOIDCScopes(): boolean {\r\n let defaultScopeCount = 0;\r\n OIDC_SCOPES.forEach((defaultScope: string) => {\r\n if (this.containsScope(defaultScope)) {\r\n defaultScopeCount += 1;\r\n }\r\n });\r\n\r\n return this.scopes.size === defaultScopeCount;\r\n }\r\n\r\n /**\r\n * Appends single scope if passed\r\n * @param newScope\r\n */\r\n appendScope(newScope: string): void {\r\n if (!StringUtils.isEmpty(newScope)) {\r\n this.scopes.add(newScope.trim());\r\n }\r\n }\r\n\r\n /**\r\n * Appends multiple scopes if passed\r\n * @param newScopes\r\n */\r\n appendScopes(newScopes: Array): void {\r\n try {\r\n newScopes.forEach(newScope => this.appendScope(newScope));\r\n } catch (e) {\r\n throw ClientAuthError.createAppendScopeSetError(e);\r\n }\r\n }\r\n\r\n /**\r\n * Removes element from set of scopes.\r\n * @param scope\r\n */\r\n removeScope(scope: string): void {\r\n if (StringUtils.isEmpty(scope)) {\r\n throw ClientAuthError.createRemoveEmptyScopeFromSetError(scope);\r\n }\r\n this.scopes.delete(scope.trim());\r\n }\r\n\r\n /**\r\n * Removes default scopes from set of scopes\r\n * Primarily used to prevent cache misses if the default scopes are not returned from the server\r\n */\r\n removeOIDCScopes(): void {\r\n OIDC_SCOPES.forEach((defaultScope: string) => {\r\n this.scopes.delete(defaultScope);\r\n });\r\n }\r\n\r\n /**\r\n * Combines an array of scopes with the current set of scopes.\r\n * @param otherScopes\r\n */\r\n unionScopeSets(otherScopes: ScopeSet): Set {\r\n if (!otherScopes) {\r\n throw ClientAuthError.createEmptyInputScopeSetError();\r\n }\r\n const unionScopes = new Set(); // Iterator in constructor not supported in IE11\r\n otherScopes.scopes.forEach(scope => unionScopes.add(scope.toLowerCase()));\r\n this.scopes.forEach(scope => unionScopes.add(scope.toLowerCase()));\r\n return unionScopes;\r\n }\r\n\r\n /**\r\n * Check if scopes intersect between this set and another.\r\n * @param otherScopes\r\n */\r\n intersectingScopeSets(otherScopes: ScopeSet): boolean {\r\n if (!otherScopes) {\r\n throw ClientAuthError.createEmptyInputScopeSetError();\r\n }\r\n \r\n // Do not allow OIDC scopes to be the only intersecting scopes\r\n if (!otherScopes.containsOnlyOIDCScopes()) {\r\n otherScopes.removeOIDCScopes();\r\n }\r\n const unionScopes = this.unionScopeSets(otherScopes);\r\n const sizeOtherScopes = otherScopes.getScopeCount();\r\n const sizeThisScopes = this.getScopeCount();\r\n const sizeUnionScopes = unionScopes.size;\r\n return sizeUnionScopes < (sizeThisScopes + sizeOtherScopes);\r\n }\r\n\r\n /**\r\n * Returns size of set of scopes.\r\n */\r\n getScopeCount(): number {\r\n return this.scopes.size;\r\n }\r\n\r\n /**\r\n * Returns the scopes as an array of string values\r\n */\r\n asArray(): Array {\r\n const array: Array = [];\r\n this.scopes.forEach(val => array.push(val));\r\n return array;\r\n }\r\n\r\n /**\r\n * Prints scopes into a space-delimited string\r\n */\r\n printScopes(): string {\r\n if (this.scopes) {\r\n const scopeArr = this.asArray();\r\n return scopeArr.join(\" \");\r\n }\r\n return Constants.EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * Prints scopes into a space-delimited lower-case string (used for caching)\r\n */\r\n printScopesLowerCase(): string {\r\n return this.printScopes().toLowerCase();\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { ICrypto } from \"../crypto/ICrypto\";\r\nimport { Separators, Constants } from \"../utils/Constants\";\r\n\r\n/**\r\n * Client info object which consists of two IDs. Need to add more info here.\r\n */\r\nexport type ClientInfo = {\r\n uid: string,\r\n utid: string\r\n};\r\n\r\n/**\r\n * Function to build a client info object from server clientInfo string\r\n * @param rawClientInfo\r\n * @param crypto\r\n */\r\nexport function buildClientInfo(rawClientInfo: string, crypto: ICrypto): ClientInfo {\r\n if (StringUtils.isEmpty(rawClientInfo)) {\r\n throw ClientAuthError.createClientInfoEmptyError();\r\n }\r\n\r\n try {\r\n const decodedClientInfo: string = crypto.base64Decode(rawClientInfo);\r\n return JSON.parse(decodedClientInfo) as ClientInfo;\r\n } catch (e) {\r\n throw ClientAuthError.createClientInfoDecodingError((e as ClientAuthError).message);\r\n }\r\n}\r\n\r\n/**\r\n * Function to build a client info object from cached homeAccountId string\r\n * @param homeAccountId \r\n */\r\nexport function buildClientInfoFromHomeAccountId(homeAccountId: string): ClientInfo {\r\n if (StringUtils.isEmpty(homeAccountId)) {\r\n throw ClientAuthError.createClientInfoDecodingError(\"Home account ID was empty.\");\r\n }\r\n const clientInfoParts: string[] = homeAccountId.split(Separators.CLIENT_INFO_SEPARATOR, 2);\r\n return {\r\n uid: clientInfoParts[0],\r\n utid: clientInfoParts.length < 2 ? Constants.EMPTY_STRING : clientInfoParts[1]\r\n };\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport {\r\n Separators,\r\n CacheAccountType,\r\n CacheType,\r\n Constants,\r\n} from \"../../utils/Constants\";\r\nimport { Authority } from \"../../authority/Authority\";\r\nimport { AuthToken } from \"../../account/AuthToken\";\r\nimport { ICrypto } from \"../../crypto/ICrypto\";\r\nimport { buildClientInfo } from \"../../account/ClientInfo\";\r\nimport { StringUtils } from \"../../utils/StringUtils\";\r\nimport { AccountInfo } from \"../../account/AccountInfo\";\r\nimport { ClientAuthError } from \"../../error/ClientAuthError\";\r\nimport { AuthorityType } from \"../../authority/AuthorityType\";\r\nimport { Logger } from \"../../logger/Logger\";\r\nimport { TokenClaims } from \"../../account/TokenClaims\";\r\n\r\n/**\r\n * Type that defines required and optional parameters for an Account field (based on universal cache schema implemented by all MSALs).\r\n *\r\n * Key : Value Schema\r\n *\r\n * Key: --\r\n *\r\n * Value Schema:\r\n * {\r\n * homeAccountId: home account identifier for the auth scheme,\r\n * environment: entity that issued the token, represented as a full host\r\n * realm: Full tenant or organizational identifier that the account belongs to\r\n * localAccountId: Original tenant-specific accountID, usually used for legacy cases\r\n * username: primary username that represents the user, usually corresponds to preferred_username in the v2 endpt\r\n * authorityType: Accounts authority type as a string\r\n * name: Full name for the account, including given name and family name,\r\n * clientInfo: Full base64 encoded client info received from ESTS\r\n * lastModificationTime: last time this entity was modified in the cache\r\n * lastModificationApp:\r\n * idTokenClaims: Object containing claims parsed from ID token\r\n * nativeAccountId: Account identifier on the native device\r\n * }\r\n */\r\nexport class AccountEntity {\r\n homeAccountId: string;\r\n environment: string;\r\n realm: string;\r\n localAccountId: string;\r\n username: string;\r\n authorityType: string;\r\n name?: string;\r\n clientInfo?: string;\r\n lastModificationTime?: string;\r\n lastModificationApp?: string;\r\n cloudGraphHostName?: string;\r\n msGraphHost?: string;\r\n idTokenClaims?: TokenClaims;\r\n nativeAccountId?: string;\r\n\r\n /**\r\n * Generate Account Id key component as per the schema: -\r\n */\r\n generateAccountId(): string {\r\n const accountId: Array = [this.homeAccountId, this.environment];\r\n return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n\r\n /**\r\n * Generate Account Cache Key as per the schema: --\r\n */\r\n generateAccountKey(): string {\r\n return AccountEntity.generateAccountCacheKey({\r\n homeAccountId: this.homeAccountId,\r\n environment: this.environment,\r\n tenantId: this.realm,\r\n username: this.username,\r\n localAccountId: this.localAccountId\r\n });\r\n }\r\n\r\n /**\r\n * returns the type of the cache (in this case account)\r\n */\r\n generateType(): number {\r\n switch (this.authorityType) {\r\n case CacheAccountType.ADFS_ACCOUNT_TYPE:\r\n return CacheType.ADFS;\r\n case CacheAccountType.MSAV1_ACCOUNT_TYPE:\r\n return CacheType.MSA;\r\n case CacheAccountType.MSSTS_ACCOUNT_TYPE:\r\n return CacheType.MSSTS;\r\n case CacheAccountType.GENERIC_ACCOUNT_TYPE:\r\n return CacheType.GENERIC;\r\n default: {\r\n throw ClientAuthError.createUnexpectedAccountTypeError();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns the AccountInfo interface for this account.\r\n */\r\n getAccountInfo(): AccountInfo {\r\n return {\r\n homeAccountId: this.homeAccountId,\r\n environment: this.environment,\r\n tenantId: this.realm,\r\n username: this.username,\r\n localAccountId: this.localAccountId,\r\n name: this.name,\r\n idTokenClaims: this.idTokenClaims,\r\n nativeAccountId: this.nativeAccountId\r\n };\r\n }\r\n\r\n /**\r\n * Generates account key from interface\r\n * @param accountInterface\r\n */\r\n static generateAccountCacheKey(accountInterface: AccountInfo): string {\r\n const accountKey = [\r\n accountInterface.homeAccountId,\r\n accountInterface.environment || Constants.EMPTY_STRING,\r\n accountInterface.tenantId || Constants.EMPTY_STRING,\r\n ];\r\n\r\n return accountKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n\r\n /**\r\n * Build Account cache from IdToken, clientInfo and authority/policy. Associated with AAD.\r\n * @param clientInfo\r\n * @param authority\r\n * @param idToken\r\n * @param policy\r\n */\r\n static createAccount(\r\n clientInfo: string,\r\n homeAccountId: string,\r\n idToken: AuthToken,\r\n authority?: Authority,\r\n cloudGraphHostName?: string,\r\n msGraphHost?: string,\r\n environment?: string,\r\n nativeAccountId?: string\r\n ): AccountEntity {\r\n const account: AccountEntity = new AccountEntity();\r\n\r\n account.authorityType = CacheAccountType.MSSTS_ACCOUNT_TYPE;\r\n account.clientInfo = clientInfo;\r\n account.homeAccountId = homeAccountId;\r\n account.nativeAccountId = nativeAccountId;\r\n\r\n const env = environment || (authority && authority.getPreferredCache());\r\n\r\n if (!env) {\r\n throw ClientAuthError.createInvalidCacheEnvironmentError();\r\n }\r\n\r\n account.environment = env;\r\n // non AAD scenarios can have empty realm\r\n account.realm = idToken?.claims?.tid || Constants.EMPTY_STRING;\r\n\r\n if (idToken) {\r\n account.idTokenClaims = idToken.claims;\r\n\r\n // How do you account for MSA CID here?\r\n account.localAccountId = idToken?.claims?.oid || idToken?.claims?.sub || Constants.EMPTY_STRING;\r\n\r\n /*\r\n * In B2C scenarios the emails claim is used instead of preferred_username and it is an array.\r\n * In most cases it will contain a single email. This field should not be relied upon if a custom \r\n * policy is configured to return more than 1 email.\r\n */\r\n const preferredUsername = idToken?.claims?.preferred_username;\r\n const email = (idToken?.claims?.emails) ? idToken.claims.emails[0] : null;\r\n \r\n account.username = preferredUsername || email || Constants.EMPTY_STRING;\r\n account.name = idToken?.claims?.name;\r\n }\r\n\r\n account.cloudGraphHostName = cloudGraphHostName;\r\n account.msGraphHost = msGraphHost;\r\n\r\n return account;\r\n }\r\n\r\n /**\r\n * Builds non-AAD/ADFS account.\r\n * @param authority\r\n * @param idToken\r\n */\r\n static createGenericAccount(\r\n homeAccountId: string,\r\n idToken: AuthToken,\r\n authority?: Authority,\r\n cloudGraphHostName?: string,\r\n msGraphHost?: string,\r\n environment?: string\r\n ): AccountEntity {\r\n const account: AccountEntity = new AccountEntity();\r\n\r\n account.authorityType = (\r\n authority &&\r\n authority.authorityType === AuthorityType.Adfs\r\n ) ? CacheAccountType.ADFS_ACCOUNT_TYPE : CacheAccountType.GENERIC_ACCOUNT_TYPE;\r\n \r\n account.homeAccountId = homeAccountId;\r\n // non AAD scenarios can have empty realm\r\n account.realm = Constants.EMPTY_STRING;\r\n\r\n const env = environment || authority && authority.getPreferredCache();\r\n\r\n if (!env) {\r\n throw ClientAuthError.createInvalidCacheEnvironmentError();\r\n }\r\n\r\n if (idToken) {\r\n // How do you account for MSA CID here?\r\n account.localAccountId = idToken?.claims?.oid || idToken?.claims?.sub || Constants.EMPTY_STRING;\r\n // upn claim for most ADFS scenarios\r\n account.username = idToken?.claims?.upn || Constants.EMPTY_STRING;\r\n account.name = idToken?.claims?.name || Constants.EMPTY_STRING;\r\n account.idTokenClaims = idToken?.claims;\r\n }\r\n\r\n account.environment = env;\r\n\r\n account.cloudGraphHostName = cloudGraphHostName;\r\n account.msGraphHost = msGraphHost;\r\n\r\n /*\r\n * add uniqueName to claims\r\n * account.name = idToken.claims.uniqueName;\r\n */\r\n\r\n return account;\r\n }\r\n\r\n /**\r\n * Generate HomeAccountId from server response\r\n * @param serverClientInfo\r\n * @param authType\r\n */\r\n static generateHomeAccountId(\r\n serverClientInfo: string,\r\n authType: AuthorityType,\r\n logger: Logger,\r\n cryptoObj: ICrypto,\r\n idToken?: AuthToken\r\n ): string {\r\n\r\n const accountId = idToken?.claims?.sub ? idToken.claims.sub : Constants.EMPTY_STRING;\r\n\r\n // since ADFS does not have tid and does not set client_info\r\n if (authType === AuthorityType.Adfs || authType === AuthorityType.Dsts) {\r\n return accountId;\r\n }\r\n\r\n // for cases where there is clientInfo\r\n if (serverClientInfo) {\r\n try {\r\n const clientInfo = buildClientInfo(serverClientInfo, cryptoObj);\r\n if (!StringUtils.isEmpty(clientInfo.uid) && !StringUtils.isEmpty(clientInfo.utid)) {\r\n return `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`;\r\n }\r\n } catch (e) {}\r\n }\r\n\r\n // default to \"sub\" claim\r\n logger.verbose(\"No client info in response\");\r\n return accountId;\r\n }\r\n\r\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\n static isAccountEntity(entity: object): boolean {\r\n\r\n if (!entity) {\r\n return false;\r\n }\r\n\r\n return (\r\n entity.hasOwnProperty(\"homeAccountId\") &&\r\n entity.hasOwnProperty(\"environment\") &&\r\n entity.hasOwnProperty(\"realm\") &&\r\n entity.hasOwnProperty(\"localAccountId\") &&\r\n entity.hasOwnProperty(\"username\") &&\r\n entity.hasOwnProperty(\"authorityType\")\r\n );\r\n }\r\n\r\n /**\r\n * Helper function to determine whether 2 accountInfo objects represent the same account\r\n * @param accountA\r\n * @param accountB\r\n * @param compareClaims - If set to true idTokenClaims will also be compared to determine account equality\r\n */\r\n static accountInfoIsEqual(accountA: AccountInfo | null, accountB: AccountInfo | null, compareClaims?: boolean): boolean {\r\n if (!accountA || !accountB) {\r\n return false;\r\n }\r\n\r\n let claimsMatch = true; // default to true so as to not fail comparison below if compareClaims: false\r\n if (compareClaims) {\r\n const accountAClaims = (accountA.idTokenClaims || {}) as TokenClaims;\r\n const accountBClaims = (accountB.idTokenClaims || {}) as TokenClaims;\r\n\r\n // issued at timestamp and nonce are expected to change each time a new id token is acquired\r\n claimsMatch = (accountAClaims.iat === accountBClaims.iat) &&\r\n (accountAClaims.nonce === accountBClaims.nonce);\r\n }\r\n\r\n return (accountA.homeAccountId === accountB.homeAccountId) &&\r\n (accountA.localAccountId === accountB.localAccountId) &&\r\n (accountA.username === accountB.username) &&\r\n (accountA.tenantId === accountB.tenantId) &&\r\n (accountA.environment === accountB.environment) &&\r\n (accountA.nativeAccountId === accountB.nativeAccountId) &&\r\n claimsMatch;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nexport type CcsCredential = {\r\n credential: string,\r\n type: CcsCredentialType\r\n};\r\n\r\nexport enum CcsCredentialType {\r\n HOME_ACCOUNT_ID = \"home_account_id\",\r\n UPN = \"UPN\"\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { TokenClaims } from \"./TokenClaims\";\r\nimport { DecodedAuthToken } from \"./DecodedAuthToken\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { ICrypto } from \"../crypto/ICrypto\";\r\n\r\n/**\r\n * JWT Token representation class. Parses token string and generates claims object.\r\n */\r\nexport class AuthToken {\r\n\r\n // Raw Token string\r\n rawToken: string;\r\n // Claims inside token\r\n claims: TokenClaims;\r\n constructor(rawToken: string, crypto: ICrypto) {\r\n if (StringUtils.isEmpty(rawToken)) {\r\n throw ClientAuthError.createTokenNullOrEmptyError(rawToken);\r\n }\r\n\r\n this.rawToken = rawToken;\r\n this.claims = AuthToken.extractTokenClaims(rawToken, crypto);\r\n }\r\n\r\n /**\r\n * Extract token by decoding the rawToken\r\n *\r\n * @param encodedToken\r\n */\r\n static extractTokenClaims(encodedToken: string, crypto: ICrypto): TokenClaims {\r\n\r\n const decodedToken: DecodedAuthToken = StringUtils.decodeAuthToken(encodedToken);\r\n\r\n // token will be decoded to get the username\r\n try {\r\n const base64TokenPayload = decodedToken.JWSPayload;\r\n\r\n // base64Decode() should throw an error if there is an issue\r\n const base64Decoded = crypto.base64Decode(base64TokenPayload);\r\n return JSON.parse(base64Decoded) as TokenClaims;\r\n } catch (err) {\r\n throw ClientAuthError.createTokenParsingError(err);\r\n }\r\n }\r\n\r\n /**\r\n * Determine if the token's max_age has transpired\r\n */\r\n static checkMaxAge(authTime: number, maxAge: number): void {\r\n /*\r\n * per https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest\r\n * To force an immediate re-authentication: If an app requires that a user re-authenticate prior to access,\r\n * provide a value of 0 for the max_age parameter and the AS will force a fresh login.\r\n */\r\n const fiveMinuteSkew = 300000; // five minutes in milliseconds\r\n if ((maxAge === 0) || ((Date.now() - fiveMinuteSkew) > (authTime + maxAge))) {\r\n throw ClientAuthError.createMaxAgeTranspiredError();\r\n }\r\n }\r\n}\r\n","/* eslint-disable header/header */\r\nexport const name = \"@azure/msal-common\";\r\nexport const version = \"13.2.1\";\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AccountFilter, CredentialFilter, ValidCredentialType, AppMetadataFilter, AppMetadataCache, TokenKeys } from \"./utils/CacheTypes\";\r\nimport { CacheRecord } from \"./entities/CacheRecord\";\r\nimport { CredentialType, APP_METADATA, THE_FAMILY_ID, AUTHORITY_METADATA_CONSTANTS, AuthenticationScheme, Separators } from \"../utils/Constants\";\r\nimport { CredentialEntity } from \"./entities/CredentialEntity\";\r\nimport { ScopeSet } from \"../request/ScopeSet\";\r\nimport { AccountEntity } from \"./entities/AccountEntity\";\r\nimport { AccessTokenEntity } from \"./entities/AccessTokenEntity\";\r\nimport { IdTokenEntity } from \"./entities/IdTokenEntity\";\r\nimport { RefreshTokenEntity } from \"./entities/RefreshTokenEntity\";\r\nimport { AuthError } from \"../error/AuthError\";\r\nimport { ICacheManager } from \"./interface/ICacheManager\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { AccountInfo } from \"../account/AccountInfo\";\r\nimport { AppMetadataEntity } from \"./entities/AppMetadataEntity\";\r\nimport { ServerTelemetryEntity } from \"./entities/ServerTelemetryEntity\";\r\nimport { ThrottlingEntity } from \"./entities/ThrottlingEntity\";\r\nimport { AuthToken } from \"../account/AuthToken\";\r\nimport { ICrypto } from \"../crypto/ICrypto\";\r\nimport { AuthorityMetadataEntity } from \"./entities/AuthorityMetadataEntity\";\r\nimport { BaseAuthRequest } from \"../request/BaseAuthRequest\";\r\nimport { Logger } from \"../logger/Logger\";\r\nimport { name, version } from \"../packageMetadata\";\r\n\r\n/**\r\n * Interface class which implement cache storage functions used by MSAL to perform validity checks, and store tokens.\r\n */\r\nexport abstract class CacheManager implements ICacheManager {\r\n protected clientId: string;\r\n protected cryptoImpl: ICrypto;\r\n // Instance of logger for functions defined in the msal-common layer\r\n private commonLogger: Logger;\r\n\r\n constructor(clientId: string, cryptoImpl: ICrypto, logger: Logger) {\r\n this.clientId = clientId;\r\n this.cryptoImpl = cryptoImpl;\r\n this.commonLogger = logger.clone(name, version);\r\n }\r\n\r\n /**\r\n * fetch the account entity from the platform cache\r\n * @param accountKey\r\n */\r\n abstract getAccount(accountKey: string): AccountEntity | null;\r\n\r\n /**\r\n * set account entity in the platform cache\r\n * @param account\r\n */\r\n abstract setAccount(account: AccountEntity): void;\r\n\r\n /**\r\n * fetch the idToken entity from the platform cache\r\n * @param idTokenKey\r\n */\r\n abstract getIdTokenCredential(idTokenKey: string): IdTokenEntity | null;\r\n\r\n /**\r\n * set idToken entity to the platform cache\r\n * @param idToken\r\n */\r\n abstract setIdTokenCredential(idToken: IdTokenEntity): void;\r\n\r\n /**\r\n * fetch the idToken entity from the platform cache\r\n * @param accessTokenKey\r\n */\r\n abstract getAccessTokenCredential(accessTokenKey: string): AccessTokenEntity | null;\r\n\r\n /**\r\n * set idToken entity to the platform cache\r\n * @param accessToken\r\n */\r\n abstract setAccessTokenCredential(accessToken: AccessTokenEntity): void;\r\n\r\n /**\r\n * fetch the idToken entity from the platform cache\r\n * @param refreshTokenKey\r\n */\r\n abstract getRefreshTokenCredential(refreshTokenKey: string): RefreshTokenEntity | null;\r\n\r\n /**\r\n * set idToken entity to the platform cache\r\n * @param refreshToken\r\n */\r\n abstract setRefreshTokenCredential(refreshToken: RefreshTokenEntity): void;\r\n\r\n /**\r\n * fetch appMetadata entity from the platform cache\r\n * @param appMetadataKey\r\n */\r\n abstract getAppMetadata(appMetadataKey: string): AppMetadataEntity | null;\r\n\r\n /**\r\n * set appMetadata entity to the platform cache\r\n * @param appMetadata\r\n */\r\n abstract setAppMetadata(appMetadata: AppMetadataEntity): void;\r\n\r\n /**\r\n * fetch server telemetry entity from the platform cache\r\n * @param serverTelemetryKey\r\n */\r\n abstract getServerTelemetry(serverTelemetryKey: string): ServerTelemetryEntity | null;\r\n\r\n /**\r\n * set server telemetry entity to the platform cache\r\n * @param serverTelemetryKey\r\n * @param serverTelemetry\r\n */\r\n abstract setServerTelemetry(serverTelemetryKey: string, serverTelemetry: ServerTelemetryEntity): void;\r\n\r\n /**\r\n * fetch cloud discovery metadata entity from the platform cache\r\n * @param key\r\n */\r\n abstract getAuthorityMetadata(key: string): AuthorityMetadataEntity | null;\r\n\r\n /**\r\n *\r\n */\r\n abstract getAuthorityMetadataKeys(): Array;\r\n\r\n /**\r\n * set cloud discovery metadata entity to the platform cache\r\n * @param key\r\n * @param value\r\n */\r\n abstract setAuthorityMetadata(key: string, value: AuthorityMetadataEntity): void;\r\n\r\n /**\r\n * fetch throttling entity from the platform cache\r\n * @param throttlingCacheKey\r\n */\r\n abstract getThrottlingCache(throttlingCacheKey: string): ThrottlingEntity | null;\r\n\r\n /**\r\n * set throttling entity to the platform cache\r\n * @param throttlingCacheKey\r\n * @param throttlingCache\r\n */\r\n abstract setThrottlingCache(throttlingCacheKey: string, throttlingCache: ThrottlingEntity): void;\r\n\r\n /**\r\n * Function to remove an item from cache given its key.\r\n * @param key\r\n */\r\n abstract removeItem(key: string): void;\r\n\r\n /**\r\n * Function which returns boolean whether cache contains a specific key.\r\n * @param key\r\n */\r\n abstract containsKey(key: string, type?: string): boolean;\r\n\r\n /**\r\n * Function which retrieves all current keys from the cache.\r\n */\r\n abstract getKeys(): string[];\r\n\r\n /**\r\n * Function which retrieves all account keys from the cache\r\n */\r\n abstract getAccountKeys(): string[];\r\n\r\n /**\r\n * Function which retrieves all token keys from the cache\r\n */\r\n abstract getTokenKeys(): TokenKeys;\r\n\r\n /**\r\n * Function which clears cache.\r\n */\r\n abstract clear(): Promise;\r\n\r\n /**\r\n * Function which updates an outdated credential cache key\r\n */\r\n abstract updateCredentialCacheKey(currentCacheKey: string, credential: ValidCredentialType): string;\r\n\r\n /**\r\n * Returns all accounts in cache\r\n */\r\n getAllAccounts(): AccountInfo[] {\r\n const allAccountKeys = this.getAccountKeys();\r\n if (allAccountKeys.length < 1) {\r\n return [];\r\n }\r\n\r\n const accountEntities: AccountEntity[] = allAccountKeys.reduce((accounts: AccountEntity[], key: string) => {\r\n const entity: AccountEntity | null = this.getAccount(key);\r\n\r\n if (!entity) {\r\n return accounts;\r\n }\r\n accounts.push(entity);\r\n return accounts;\r\n }, []);\r\n\r\n if (accountEntities.length < 1) {\r\n return [];\r\n } else {\r\n const allAccounts = accountEntities.map((accountEntity) => {\r\n return this.getAccountInfoFromEntity(accountEntity);\r\n });\r\n return allAccounts;\r\n }\r\n }\r\n\r\n /** \r\n * Gets accountInfo object based on provided filters\r\n */\r\n getAccountInfoFilteredBy(accountFilter: AccountFilter): AccountInfo | null{\r\n const allAccounts = this.getAccountsFilteredBy(accountFilter);\r\n if (allAccounts.length > 0) {\r\n return this.getAccountInfoFromEntity(allAccounts[0]);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n private getAccountInfoFromEntity(accountEntity: AccountEntity): AccountInfo {\r\n const accountInfo = accountEntity.getAccountInfo();\r\n const idToken = this.getIdToken(accountInfo);\r\n if (idToken) {\r\n accountInfo.idToken = idToken.secret;\r\n accountInfo.idTokenClaims = new AuthToken(idToken.secret, this.cryptoImpl).claims;\r\n }\r\n return accountInfo;\r\n }\r\n\r\n /**\r\n * saves a cache record\r\n * @param cacheRecord\r\n */\r\n async saveCacheRecord(cacheRecord: CacheRecord): Promise {\r\n if (!cacheRecord) {\r\n throw ClientAuthError.createNullOrUndefinedCacheRecord();\r\n }\r\n\r\n if (!!cacheRecord.account) {\r\n this.setAccount(cacheRecord.account);\r\n }\r\n\r\n if (!!cacheRecord.idToken) {\r\n this.setIdTokenCredential(cacheRecord.idToken);\r\n }\r\n\r\n if (!!cacheRecord.accessToken) {\r\n await this.saveAccessToken(cacheRecord.accessToken);\r\n }\r\n\r\n if (!!cacheRecord.refreshToken) {\r\n this.setRefreshTokenCredential(cacheRecord.refreshToken);\r\n }\r\n\r\n if (!!cacheRecord.appMetadata) {\r\n this.setAppMetadata(cacheRecord.appMetadata);\r\n }\r\n }\r\n\r\n /**\r\n * saves access token credential\r\n * @param credential\r\n */\r\n private async saveAccessToken(credential: AccessTokenEntity): Promise {\r\n const accessTokenFilter: CredentialFilter = {\r\n clientId: credential.clientId,\r\n credentialType: credential.credentialType,\r\n environment: credential.environment,\r\n homeAccountId: credential.homeAccountId,\r\n realm: credential.realm,\r\n tokenType: credential.tokenType,\r\n requestedClaimsHash: credential.requestedClaimsHash\r\n };\r\n\r\n const tokenKeys = this.getTokenKeys();\r\n const currentScopes = ScopeSet.fromString(credential.target);\r\n\r\n const removedAccessTokens: Array> = [];\r\n tokenKeys.accessToken.forEach((key) => {\r\n if(!this.accessTokenKeyMatchesFilter(key, accessTokenFilter, false)) {\r\n return;\r\n }\r\n \r\n const tokenEntity = this.getAccessTokenCredential(key);\r\n\r\n if (tokenEntity && this.credentialMatchesFilter(tokenEntity, accessTokenFilter)) {\r\n const tokenScopeSet = ScopeSet.fromString(tokenEntity.target);\r\n if (tokenScopeSet.intersectingScopeSets(currentScopes)) {\r\n removedAccessTokens.push(this.removeAccessToken(key));\r\n }\r\n }\r\n });\r\n await Promise.all(removedAccessTokens);\r\n this.setAccessTokenCredential(credential);\r\n }\r\n\r\n /**\r\n * retrieve accounts matching all provided filters; if no filter is set, get all accounts\r\n * not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared\r\n * @param homeAccountId\r\n * @param environment\r\n * @param realm\r\n */\r\n getAccountsFilteredBy(accountFilter: AccountFilter): AccountEntity[] {\r\n const allAccountKeys = this.getAccountKeys();\r\n const matchingAccounts: AccountEntity[] = [];\r\n\r\n allAccountKeys.forEach((cacheKey) => {\r\n if (!this.isAccountKey(cacheKey, accountFilter.homeAccountId, accountFilter.realm)) {\r\n // Don't parse value if the key doesn't match the account filters\r\n return;\r\n }\r\n\r\n const entity: AccountEntity | null = this.getAccount(cacheKey);\r\n\r\n if (!entity) {\r\n return;\r\n }\r\n\r\n if (!!accountFilter.homeAccountId && !this.matchHomeAccountId(entity, accountFilter.homeAccountId)) {\r\n return;\r\n }\r\n\r\n if (!!accountFilter.localAccountId && !this.matchLocalAccountId(entity, accountFilter.localAccountId)) {\r\n return;\r\n }\r\n\r\n if (!!accountFilter.username && !this.matchUsername(entity, accountFilter.username)) {\r\n return;\r\n }\r\n\r\n if (!!accountFilter.environment && !this.matchEnvironment(entity, accountFilter.environment)) {\r\n return;\r\n }\r\n\r\n if (!!accountFilter.realm && !this.matchRealm(entity, accountFilter.realm)) {\r\n return;\r\n }\r\n\r\n if (!!accountFilter.nativeAccountId && !this.matchNativeAccountId(entity, accountFilter.nativeAccountId)) {\r\n return;\r\n }\r\n\r\n matchingAccounts.push(entity);\r\n });\r\n\r\n return matchingAccounts;\r\n }\r\n\r\n /**\r\n * Returns true if the given key matches our account key schema. Also matches homeAccountId and/or tenantId if provided\r\n * @param key \r\n * @param homeAccountId \r\n * @param tenantId \r\n * @returns \r\n */\r\n isAccountKey(key: string, homeAccountId?: string, tenantId?: string): boolean {\r\n if (key.split(Separators.CACHE_KEY_SEPARATOR).length < 3) {\r\n // Account cache keys contain 3 items separated by '-' (each item may also contain '-')\r\n return false;\r\n }\r\n\r\n if (homeAccountId && !key.toLowerCase().includes(homeAccountId.toLowerCase())) {\r\n return false;\r\n }\r\n\r\n if (tenantId && !key.toLowerCase().includes(tenantId.toLowerCase())) {\r\n return false;\r\n }\r\n\r\n // Do not check environment as aliasing can cause false negatives\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns true if the given key matches our credential key schema.\r\n * @param key \r\n */\r\n isCredentialKey(key: string): boolean {\r\n if (key.split(Separators.CACHE_KEY_SEPARATOR).length < 6) {\r\n // Credential cache keys contain 6 items separated by '-' (each item may also contain '-')\r\n return false;\r\n }\r\n\r\n const lowerCaseKey = key.toLowerCase();\r\n // Credential keys must indicate what credential type they represent\r\n if (lowerCaseKey.indexOf(CredentialType.ID_TOKEN.toLowerCase()) === -1 &&\r\n lowerCaseKey.indexOf(CredentialType.ACCESS_TOKEN.toLowerCase()) === -1 &&\r\n lowerCaseKey.indexOf(CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase()) === -1 &&\r\n lowerCaseKey.indexOf(CredentialType.REFRESH_TOKEN.toLowerCase()) === -1\r\n ) {\r\n return false;\r\n }\r\n\r\n if (lowerCaseKey.indexOf(CredentialType.REFRESH_TOKEN.toLowerCase()) > -1) {\r\n // Refresh tokens must contain the client id or family id\r\n const clientIdValidation = `${CredentialType.REFRESH_TOKEN}${Separators.CACHE_KEY_SEPARATOR}${this.clientId}${Separators.CACHE_KEY_SEPARATOR}`;\r\n const familyIdValidation = `${CredentialType.REFRESH_TOKEN}${Separators.CACHE_KEY_SEPARATOR}${THE_FAMILY_ID}${Separators.CACHE_KEY_SEPARATOR}`;\r\n if (lowerCaseKey.indexOf(clientIdValidation.toLowerCase()) === -1 && lowerCaseKey.indexOf(familyIdValidation.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n } else if (lowerCaseKey.indexOf(this.clientId.toLowerCase()) === -1) {\r\n // Tokens must contain the clientId\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns whether or not the given credential entity matches the filter\r\n * @param entity \r\n * @param filter \r\n * @returns \r\n */\r\n credentialMatchesFilter(entity: ValidCredentialType, filter: CredentialFilter): boolean {\r\n if (!!filter.clientId && !this.matchClientId(entity, filter.clientId)) {\r\n return false;\r\n }\r\n\r\n if (!!filter.userAssertionHash && !this.matchUserAssertionHash(entity, filter.userAssertionHash)) {\r\n return false;\r\n }\r\n\r\n /*\r\n * homeAccountId can be undefined, and we want to filter out cached items that have a homeAccountId of \"\"\r\n * because we don't want a client_credential request to return a cached token that has a homeAccountId\r\n */\r\n if ((typeof filter.homeAccountId === \"string\") && !this.matchHomeAccountId(entity, filter.homeAccountId)) {\r\n return false;\r\n }\r\n\r\n if (!!filter.environment && !this.matchEnvironment(entity, filter.environment)) {\r\n return false;\r\n }\r\n\r\n if (!!filter.realm && !this.matchRealm(entity, filter.realm)) {\r\n return false;\r\n }\r\n\r\n if (!!filter.credentialType && !this.matchCredentialType(entity, filter.credentialType)) {\r\n return false;\r\n }\r\n\r\n if (!!filter.familyId && !this.matchFamilyId(entity, filter.familyId)) {\r\n return false;\r\n }\r\n\r\n /*\r\n * idTokens do not have \"target\", target specific refreshTokens do exist for some types of authentication\r\n * Resource specific refresh tokens case will be added when the support is deemed necessary\r\n */\r\n if (!!filter.target && !this.matchTarget(entity, filter.target)) {\r\n return false;\r\n }\r\n\r\n // If request OR cached entity has requested Claims Hash, check if they match\r\n if (filter.requestedClaimsHash || entity.requestedClaimsHash) {\r\n // Don't match if either is undefined or they are different\r\n if (entity.requestedClaimsHash !== filter.requestedClaimsHash) {\r\n return false;\r\n }\r\n }\r\n\r\n // Access Token with Auth Scheme specific matching\r\n if (entity.credentialType === CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME) {\r\n if(!!filter.tokenType && !this.matchTokenType(entity, filter.tokenType)) {\r\n return false;\r\n }\r\n\r\n // KeyId (sshKid) in request must match cached SSH certificate keyId because SSH cert is bound to a specific key\r\n if (filter.tokenType === AuthenticationScheme.SSH) {\r\n if(filter.keyId && !this.matchKeyId(entity, filter.keyId)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * retrieve appMetadata matching all provided filters; if no filter is set, get all appMetadata\r\n * @param filter\r\n */\r\n getAppMetadataFilteredBy(filter: AppMetadataFilter): AppMetadataCache {\r\n return this.getAppMetadataFilteredByInternal(\r\n filter.environment,\r\n filter.clientId,\r\n );\r\n }\r\n\r\n /**\r\n * Support function to help match appMetadata\r\n * @param environment\r\n * @param clientId\r\n */\r\n private getAppMetadataFilteredByInternal(\r\n environment?: string,\r\n clientId?: string\r\n ): AppMetadataCache {\r\n\r\n const allCacheKeys = this.getKeys();\r\n const matchingAppMetadata: AppMetadataCache = {};\r\n\r\n allCacheKeys.forEach((cacheKey) => {\r\n // don't parse any non-appMetadata type cache entities\r\n if (!this.isAppMetadata(cacheKey)) {\r\n return;\r\n }\r\n\r\n // Attempt retrieval\r\n const entity = this.getAppMetadata(cacheKey);\r\n\r\n if (!entity) {\r\n return;\r\n }\r\n\r\n if (!!environment && !this.matchEnvironment(entity, environment)) {\r\n return;\r\n }\r\n\r\n if (!!clientId && !this.matchClientId(entity, clientId)) {\r\n return;\r\n }\r\n\r\n matchingAppMetadata[cacheKey] = entity;\r\n\r\n });\r\n\r\n return matchingAppMetadata;\r\n }\r\n\r\n /**\r\n * retrieve authorityMetadata that contains a matching alias\r\n * @param filter\r\n */\r\n getAuthorityMetadataByAlias(host: string): AuthorityMetadataEntity | null {\r\n const allCacheKeys = this.getAuthorityMetadataKeys();\r\n let matchedEntity = null;\r\n\r\n allCacheKeys.forEach((cacheKey) => {\r\n // don't parse any non-authorityMetadata type cache entities\r\n if (!this.isAuthorityMetadata(cacheKey) || cacheKey.indexOf(this.clientId) === -1) {\r\n return;\r\n }\r\n\r\n // Attempt retrieval\r\n const entity = this.getAuthorityMetadata(cacheKey);\r\n\r\n if (!entity) {\r\n return;\r\n }\r\n\r\n if (entity.aliases.indexOf(host) === -1) {\r\n return;\r\n }\r\n\r\n matchedEntity = entity;\r\n\r\n });\r\n\r\n return matchedEntity;\r\n }\r\n\r\n /**\r\n * Removes all accounts and related tokens from cache.\r\n */\r\n async removeAllAccounts(): Promise {\r\n const allAccountKeys = this.getAccountKeys();\r\n const removedAccounts: Array> = [];\r\n\r\n allAccountKeys.forEach((cacheKey) => {\r\n removedAccounts.push(this.removeAccount(cacheKey));\r\n });\r\n\r\n await Promise.all(removedAccounts);\r\n }\r\n\r\n /**\r\n * Removes the account and related tokens for a given account key\r\n * @param account\r\n */\r\n async removeAccount(accountKey: string): Promise {\r\n const account = this.getAccount(accountKey);\r\n if (!account) {\r\n throw ClientAuthError.createNoAccountFoundError();\r\n }\r\n await this.removeAccountContext(account);\r\n this.removeItem(accountKey);\r\n }\r\n\r\n /**\r\n * Removes credentials associated with the provided account\r\n * @param account\r\n */\r\n async removeAccountContext(account: AccountEntity): Promise {\r\n const allTokenKeys = this.getTokenKeys();\r\n const accountId = account.generateAccountId();\r\n const removedCredentials: Array> = [];\r\n\r\n allTokenKeys.idToken.forEach((key) => {\r\n if (key.indexOf(accountId) === 0) {\r\n this.removeIdToken(key);\r\n }\r\n });\r\n\r\n allTokenKeys.accessToken.forEach((key) => {\r\n if (key.indexOf(accountId) === 0) {\r\n removedCredentials.push(this.removeAccessToken(key));\r\n }\r\n });\r\n\r\n allTokenKeys.refreshToken.forEach((key) => {\r\n if (key.indexOf(accountId) === 0) {\r\n this.removeRefreshToken(key);\r\n }\r\n });\r\n\r\n await Promise.all(removedCredentials);\r\n }\r\n\r\n /**\r\n * returns a boolean if the given credential is removed\r\n * @param credential\r\n */\r\n async removeAccessToken(key: string): Promise {\r\n const credential = this.getAccessTokenCredential(key);\r\n if (!credential) {\r\n return;\r\n }\r\n\r\n // Remove Token Binding Key from key store for PoP Tokens Credentials\r\n if (credential.credentialType.toLowerCase() === CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase()) {\r\n if(credential.tokenType === AuthenticationScheme.POP) {\r\n const accessTokenWithAuthSchemeEntity = credential as AccessTokenEntity;\r\n const kid = accessTokenWithAuthSchemeEntity.keyId;\r\n\r\n if (kid) {\r\n try {\r\n await this.cryptoImpl.removeTokenBindingKey(kid);\r\n } catch (error) {\r\n throw ClientAuthError.createBindingKeyNotRemovedError();\r\n }\r\n }\r\n }\r\n }\r\n\r\n return this.removeItem(key);\r\n }\r\n\r\n /**\r\n * Removes all app metadata objects from cache.\r\n */\r\n removeAppMetadata(): boolean {\r\n const allCacheKeys = this.getKeys();\r\n allCacheKeys.forEach((cacheKey) => {\r\n if (this.isAppMetadata(cacheKey)) {\r\n this.removeItem(cacheKey);\r\n }\r\n });\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Retrieve the cached credentials into a cacherecord\r\n * @param account\r\n * @param clientId\r\n * @param scopes\r\n * @param environment\r\n * @param authScheme\r\n */\r\n readCacheRecord(account: AccountInfo, request: BaseAuthRequest, environment: string): CacheRecord {\r\n const tokenKeys = this.getTokenKeys();\r\n const cachedAccount = this.readAccountFromCache(account);\r\n const cachedIdToken = this.getIdToken(account, tokenKeys);\r\n const cachedAccessToken = this.getAccessToken(account, request, tokenKeys);\r\n const cachedRefreshToken = this.getRefreshToken(account, false, tokenKeys);\r\n const cachedAppMetadata = this.readAppMetadataFromCache(environment);\r\n\r\n if (cachedAccount && cachedIdToken) {\r\n cachedAccount.idTokenClaims = new AuthToken(cachedIdToken.secret, this.cryptoImpl).claims;\r\n }\r\n\r\n return {\r\n account: cachedAccount,\r\n idToken: cachedIdToken,\r\n accessToken: cachedAccessToken,\r\n refreshToken: cachedRefreshToken,\r\n appMetadata: cachedAppMetadata,\r\n };\r\n }\r\n\r\n /**\r\n * Retrieve AccountEntity from cache\r\n * @param account\r\n */\r\n readAccountFromCache(account: AccountInfo): AccountEntity | null {\r\n const accountKey: string = AccountEntity.generateAccountCacheKey(account);\r\n return this.getAccount(accountKey);\r\n }\r\n\r\n /**\r\n * Retrieve IdTokenEntity from cache\r\n * @param clientId\r\n * @param account\r\n * @param inputRealm\r\n */\r\n getIdToken(account: AccountInfo, tokenKeys?: TokenKeys): IdTokenEntity | null {\r\n this.commonLogger.trace(\"CacheManager - getIdToken called\");\r\n const idTokenFilter: CredentialFilter = {\r\n homeAccountId: account.homeAccountId,\r\n environment: account.environment,\r\n credentialType: CredentialType.ID_TOKEN,\r\n clientId: this.clientId,\r\n realm: account.tenantId,\r\n };\r\n\r\n const idTokens: IdTokenEntity[] = this.getIdTokensByFilter(idTokenFilter, tokenKeys);\r\n const numIdTokens = idTokens.length;\r\n\r\n if (numIdTokens < 1) {\r\n this.commonLogger.info(\"CacheManager:getIdToken - No token found\");\r\n return null;\r\n } else if (numIdTokens > 1) {\r\n throw ClientAuthError.createMultipleMatchingTokensInCacheError();\r\n }\r\n\r\n this.commonLogger.info(\"CacheManager:getIdToken - Returning id token\");\r\n return idTokens[0];\r\n }\r\n\r\n /**\r\n * Gets all idTokens matching the given filter\r\n * @param filter \r\n * @returns \r\n */\r\n getIdTokensByFilter(filter: CredentialFilter, tokenKeys?: TokenKeys): IdTokenEntity[] {\r\n const idTokenKeys = tokenKeys && tokenKeys.idToken || this.getTokenKeys().idToken;\r\n\r\n const idTokens: IdTokenEntity[] = [];\r\n idTokenKeys.forEach((key) => {\r\n if (!this.idTokenKeyMatchesFilter(key, {clientId: this.clientId, ...filter})) {\r\n return;\r\n }\r\n\r\n const idToken = this.getIdTokenCredential(key);\r\n if (idToken && this.credentialMatchesFilter(idToken, filter)) {\r\n idTokens.push(idToken);\r\n }\r\n });\r\n\r\n return idTokens;\r\n }\r\n\r\n /**\r\n * Validate the cache key against filter before retrieving and parsing cache value\r\n * @param key \r\n * @param filter\r\n * @returns \r\n */\r\n idTokenKeyMatchesFilter(inputKey: string, filter: CredentialFilter): boolean {\r\n const key = inputKey.toLowerCase();\r\n if (filter.clientId && key.indexOf(filter.clientId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n if (filter.homeAccountId && key.indexOf(filter.homeAccountId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Removes idToken from the cache\r\n * @param key \r\n */\r\n removeIdToken(key: string): void {\r\n this.removeItem(key);\r\n }\r\n\r\n /**\r\n * Removes refresh token from the cache\r\n * @param key \r\n */\r\n removeRefreshToken(key: string): void {\r\n this.removeItem(key);\r\n }\r\n\r\n /**\r\n * Retrieve AccessTokenEntity from cache\r\n * @param clientId\r\n * @param account\r\n * @param scopes\r\n * @param authScheme\r\n */\r\n getAccessToken(account: AccountInfo, request: BaseAuthRequest, tokenKeys?: TokenKeys): AccessTokenEntity | null {\r\n this.commonLogger.trace(\"CacheManager - getAccessToken called\");\r\n const scopes = ScopeSet.createSearchScopes(request.scopes);\r\n const authScheme = request.authenticationScheme || AuthenticationScheme.BEARER;\r\n /*\r\n * Distinguish between Bearer and PoP/SSH token cache types\r\n * Cast to lowercase to handle \"bearer\" from ADFS\r\n */\r\n const credentialType = (authScheme && authScheme.toLowerCase() !== AuthenticationScheme.BEARER.toLowerCase()) ? CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME : CredentialType.ACCESS_TOKEN;\r\n\r\n const accessTokenFilter: CredentialFilter = {\r\n homeAccountId: account.homeAccountId,\r\n environment: account.environment,\r\n credentialType: credentialType,\r\n clientId: this.clientId,\r\n realm: account.tenantId,\r\n target: scopes,\r\n tokenType: authScheme,\r\n keyId: request.sshKid,\r\n requestedClaimsHash: request.requestedClaimsHash,\r\n };\r\n\r\n const accessTokenKeys = tokenKeys && tokenKeys.accessToken || this.getTokenKeys().accessToken;\r\n const accessTokens: AccessTokenEntity[] = [];\r\n\r\n accessTokenKeys.forEach((key) => {\r\n // Validate key\r\n if (this.accessTokenKeyMatchesFilter(key, accessTokenFilter, true)) {\r\n const accessToken = this.getAccessTokenCredential(key);\r\n\r\n // Validate value\r\n if (accessToken && this.credentialMatchesFilter(accessToken, accessTokenFilter)) {\r\n accessTokens.push(accessToken);\r\n }\r\n }\r\n });\r\n\r\n const numAccessTokens = accessTokens.length;\r\n if (numAccessTokens < 1) {\r\n this.commonLogger.info(\"CacheManager:getAccessToken - No token found\");\r\n return null;\r\n } else if (numAccessTokens > 1) {\r\n throw ClientAuthError.createMultipleMatchingTokensInCacheError();\r\n }\r\n\r\n this.commonLogger.info(\"CacheManager:getAccessToken - Returning access token\");\r\n return accessTokens[0];\r\n }\r\n\r\n /**\r\n * Validate the cache key against filter before retrieving and parsing cache value\r\n * @param key \r\n * @param filter \r\n * @param keyMustContainAllScopes \r\n * @returns \r\n */\r\n accessTokenKeyMatchesFilter(inputKey: string, filter: CredentialFilter, keyMustContainAllScopes: boolean): boolean {\r\n const key = inputKey.toLowerCase();\r\n if (filter.clientId && key.indexOf(filter.clientId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n if (filter.homeAccountId && key.indexOf(filter.homeAccountId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n if (filter.realm && key.indexOf(filter.realm.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n if (filter.requestedClaimsHash && key.indexOf(filter.requestedClaimsHash.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n if (filter.target) {\r\n const scopes = filter.target.asArray();\r\n for (let i = 0; i < scopes.length; i++) {\r\n if (keyMustContainAllScopes && !key.includes(scopes[i].toLowerCase())) {\r\n // When performing a cache lookup a missing scope would be a cache miss\r\n return false;\r\n } else if (!keyMustContainAllScopes && key.includes(scopes[i].toLowerCase())) {\r\n // When performing a cache write, any token with a subset of requested scopes should be replaced\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Gets all access tokens matching the filter\r\n * @param filter \r\n * @returns \r\n */\r\n getAccessTokensByFilter(filter: CredentialFilter): AccessTokenEntity[] {\r\n const tokenKeys = this.getTokenKeys();\r\n\r\n const accessTokens: AccessTokenEntity[] = [];\r\n tokenKeys.accessToken.forEach((key) => {\r\n if (!this.accessTokenKeyMatchesFilter(key, filter, true)) {\r\n return;\r\n }\r\n\r\n const accessToken = this.getAccessTokenCredential(key);\r\n if (accessToken && this.credentialMatchesFilter(accessToken, filter)) {\r\n accessTokens.push(accessToken);\r\n }\r\n });\r\n\r\n return accessTokens;\r\n }\r\n\r\n /**\r\n * Helper to retrieve the appropriate refresh token from cache\r\n * @param clientId\r\n * @param account\r\n * @param familyRT\r\n */\r\n getRefreshToken(account: AccountInfo, familyRT: boolean, tokenKeys?: TokenKeys): RefreshTokenEntity | null {\r\n this.commonLogger.trace(\"CacheManager - getRefreshToken called\");\r\n const id = familyRT ? THE_FAMILY_ID : undefined;\r\n const refreshTokenFilter: CredentialFilter = {\r\n homeAccountId: account.homeAccountId,\r\n environment: account.environment,\r\n credentialType: CredentialType.REFRESH_TOKEN,\r\n clientId: this.clientId,\r\n familyId: id,\r\n };\r\n\r\n const refreshTokenKeys = tokenKeys && tokenKeys.refreshToken || this.getTokenKeys().refreshToken;\r\n const refreshTokens: RefreshTokenEntity[] = [];\r\n\r\n refreshTokenKeys.forEach((key) => {\r\n // Validate key\r\n if (this.refreshTokenKeyMatchesFilter(key, refreshTokenFilter)) {\r\n const refreshToken = this.getRefreshTokenCredential(key);\r\n // Validate value\r\n if (refreshToken && this.credentialMatchesFilter(refreshToken, refreshTokenFilter)) {\r\n refreshTokens.push(refreshToken);\r\n }\r\n }\r\n });\r\n\r\n const numRefreshTokens = refreshTokens.length;\r\n if (numRefreshTokens < 1) {\r\n this.commonLogger.info(\"CacheManager:getRefreshToken - No refresh token found.\");\r\n return null;\r\n }\r\n // address the else case after remove functions address environment aliases\r\n\r\n this.commonLogger.info(\"CacheManager:getRefreshToken - returning refresh token\");\r\n return refreshTokens[0] as RefreshTokenEntity;\r\n }\r\n\r\n /**\r\n * Validate the cache key against filter before retrieving and parsing cache value\r\n * @param key\r\n * @param filter\r\n */\r\n refreshTokenKeyMatchesFilter(inputKey: string, filter: CredentialFilter): boolean {\r\n const key = inputKey.toLowerCase();\r\n if (filter.familyId && key.indexOf(filter.familyId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n // If familyId is used, clientId is not in the key\r\n if (!filter.familyId && filter.clientId && key.indexOf(filter.clientId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n if (filter.homeAccountId && key.indexOf(filter.homeAccountId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Retrieve AppMetadataEntity from cache\r\n */\r\n readAppMetadataFromCache(environment: string): AppMetadataEntity | null {\r\n const appMetadataFilter: AppMetadataFilter = {\r\n environment,\r\n clientId: this.clientId,\r\n };\r\n\r\n const appMetadata: AppMetadataCache = this.getAppMetadataFilteredBy(appMetadataFilter);\r\n const appMetadataEntries: AppMetadataEntity[] = Object.keys(appMetadata).map((key) => appMetadata[key]);\r\n\r\n const numAppMetadata = appMetadataEntries.length;\r\n if (numAppMetadata < 1) {\r\n return null;\r\n } else if (numAppMetadata > 1) {\r\n throw ClientAuthError.createMultipleMatchingAppMetadataInCacheError();\r\n }\r\n\r\n return appMetadataEntries[0] as AppMetadataEntity;\r\n }\r\n\r\n /**\r\n * Return the family_id value associated with FOCI\r\n * @param environment\r\n * @param clientId\r\n */\r\n isAppMetadataFOCI(environment: string): boolean {\r\n const appMetadata = this.readAppMetadataFromCache(environment);\r\n return !!(appMetadata && appMetadata.familyId === THE_FAMILY_ID);\r\n }\r\n\r\n /**\r\n * helper to match account ids\r\n * @param value\r\n * @param homeAccountId\r\n */\r\n private matchHomeAccountId(entity: AccountEntity | CredentialEntity, homeAccountId: string): boolean {\r\n return !!((typeof entity.homeAccountId === \"string\") && (homeAccountId === entity.homeAccountId));\r\n }\r\n\r\n /**\r\n * helper to match account ids\r\n * @param entity \r\n * @param localAccountId \r\n * @returns \r\n */\r\n private matchLocalAccountId(entity: AccountEntity, localAccountId: string): boolean {\r\n return !!((typeof entity.localAccountId === \"string\") && (localAccountId === entity.localAccountId));\r\n }\r\n\r\n /**\r\n * helper to match usernames\r\n * @param entity \r\n * @param username \r\n * @returns \r\n */\r\n private matchUsername(entity: AccountEntity, username: string): boolean {\r\n return !!((typeof entity.username === \"string\") && (username.toLowerCase() === entity.username.toLowerCase()));\r\n }\r\n\r\n /**\r\n * helper to match assertion\r\n * @param value\r\n * @param oboAssertion\r\n */\r\n private matchUserAssertionHash(entity: CredentialEntity, userAssertionHash: string): boolean {\r\n return !!(entity.userAssertionHash && userAssertionHash === entity.userAssertionHash);\r\n }\r\n\r\n /**\r\n * helper to match environment\r\n * @param value\r\n * @param environment\r\n */\r\n private matchEnvironment(entity: AccountEntity | CredentialEntity | AppMetadataEntity, environment: string): boolean {\r\n const cloudMetadata = this.getAuthorityMetadataByAlias(environment);\r\n if (cloudMetadata && cloudMetadata.aliases.indexOf(entity.environment) > -1) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * helper to match credential type\r\n * @param entity\r\n * @param credentialType\r\n */\r\n private matchCredentialType(entity: CredentialEntity, credentialType: string): boolean {\r\n return (entity.credentialType && credentialType.toLowerCase() === entity.credentialType.toLowerCase());\r\n }\r\n\r\n /**\r\n * helper to match client ids\r\n * @param entity\r\n * @param clientId\r\n */\r\n private matchClientId(entity: CredentialEntity | AppMetadataEntity, clientId: string): boolean {\r\n return !!(entity.clientId && clientId === entity.clientId);\r\n }\r\n\r\n /**\r\n * helper to match family ids\r\n * @param entity\r\n * @param familyId\r\n */\r\n private matchFamilyId(entity: CredentialEntity | AppMetadataEntity, familyId: string): boolean {\r\n return !!(entity.familyId && familyId === entity.familyId);\r\n }\r\n\r\n /**\r\n * helper to match realm\r\n * @param entity\r\n * @param realm\r\n */\r\n private matchRealm(entity: AccountEntity | CredentialEntity, realm: string): boolean {\r\n return !!(entity.realm && realm === entity.realm);\r\n }\r\n\r\n /**\r\n * helper to match nativeAccountId\r\n * @param entity\r\n * @param nativeAccountId\r\n * @returns boolean indicating the match result\r\n */\r\n private matchNativeAccountId(entity: AccountEntity, nativeAccountId: string): boolean {\r\n return !!(entity.nativeAccountId && nativeAccountId === entity.nativeAccountId);\r\n }\r\n\r\n /**\r\n * Returns true if the target scopes are a subset of the current entity's scopes, false otherwise.\r\n * @param entity\r\n * @param target\r\n */\r\n private matchTarget(entity: CredentialEntity, target: ScopeSet): boolean {\r\n const isNotAccessTokenCredential = (entity.credentialType !== CredentialType.ACCESS_TOKEN && entity.credentialType !== CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME);\r\n\r\n if ( isNotAccessTokenCredential || !entity.target) {\r\n return false;\r\n }\r\n\r\n const entityScopeSet: ScopeSet = ScopeSet.fromString(entity.target);\r\n\r\n return entityScopeSet.containsScopeSet(target);\r\n }\r\n\r\n /**\r\n * Returns true if the credential's tokenType or Authentication Scheme matches the one in the request, false otherwise\r\n * @param entity\r\n * @param tokenType\r\n */\r\n private matchTokenType(entity: CredentialEntity, tokenType: AuthenticationScheme): boolean {\r\n return !!(entity.tokenType && entity.tokenType === tokenType);\r\n }\r\n\r\n /**\r\n * Returns true if the credential's keyId matches the one in the request, false otherwise\r\n * @param entity\r\n * @param tokenType\r\n */\r\n private matchKeyId(entity: CredentialEntity, keyId: string): boolean {\r\n return !!(entity.keyId && entity.keyId === keyId);\r\n }\r\n\r\n /**\r\n * returns if a given cache entity is of the type appmetadata\r\n * @param key\r\n */\r\n private isAppMetadata(key: string): boolean {\r\n return key.indexOf(APP_METADATA) !== -1;\r\n }\r\n\r\n /**\r\n * returns if a given cache entity is of the type authoritymetadata\r\n * @param key\r\n */\r\n protected isAuthorityMetadata(key: string): boolean {\r\n return key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) !== -1;\r\n }\r\n\r\n /**\r\n * returns cache key used for cloud instance metadata\r\n */\r\n generateAuthorityMetadataCacheKey(authority: string): string {\r\n return `${AUTHORITY_METADATA_CONSTANTS.CACHE_KEY}-${this.clientId}-${authority}`;\r\n }\r\n\r\n /**\r\n * Helper to convert serialized data to object\r\n * @param obj\r\n * @param json\r\n */\r\n static toObject(obj: T, json: object): T {\r\n for (const propertyName in json) {\r\n obj[propertyName] = json[propertyName];\r\n }\r\n return obj;\r\n }\r\n}\r\n\r\nexport class DefaultStorageClass extends CacheManager {\r\n setAccount(): void {\r\n const notImplErr = \"Storage interface - setAccount() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getAccount(): AccountEntity {\r\n const notImplErr = \"Storage interface - getAccount() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setIdTokenCredential(): void {\r\n const notImplErr = \"Storage interface - setIdTokenCredential() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getIdTokenCredential(): IdTokenEntity {\r\n const notImplErr = \"Storage interface - getIdTokenCredential() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setAccessTokenCredential(): void {\r\n const notImplErr = \"Storage interface - setAccessTokenCredential() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getAccessTokenCredential(): AccessTokenEntity {\r\n const notImplErr = \"Storage interface - getAccessTokenCredential() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setRefreshTokenCredential(): void {\r\n const notImplErr = \"Storage interface - setRefreshTokenCredential() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getRefreshTokenCredential(): RefreshTokenEntity {\r\n const notImplErr = \"Storage interface - getRefreshTokenCredential() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setAppMetadata(): void {\r\n const notImplErr = \"Storage interface - setAppMetadata() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getAppMetadata(): AppMetadataEntity {\r\n const notImplErr = \"Storage interface - getAppMetadata() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setServerTelemetry(): void {\r\n const notImplErr = \"Storage interface - setServerTelemetry() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getServerTelemetry(): ServerTelemetryEntity {\r\n const notImplErr = \"Storage interface - getServerTelemetry() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setAuthorityMetadata(): void {\r\n const notImplErr = \"Storage interface - setAuthorityMetadata() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getAuthorityMetadata(): AuthorityMetadataEntity | null {\r\n const notImplErr = \"Storage interface - getAuthorityMetadata() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getAuthorityMetadataKeys(): Array {\r\n const notImplErr = \"Storage interface - getAuthorityMetadataKeys() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setThrottlingCache(): void {\r\n const notImplErr = \"Storage interface - setThrottlingCache() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getThrottlingCache(): ThrottlingEntity {\r\n const notImplErr = \"Storage interface - getThrottlingCache() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n removeItem(): boolean {\r\n const notImplErr = \"Storage interface - removeItem() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n containsKey(): boolean {\r\n const notImplErr = \"Storage interface - containsKey() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getKeys(): string[] {\r\n const notImplErr = \"Storage interface - getKeys() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getAccountKeys(): string[] {\r\n const notImplErr = \"Storage interface - getAccountKeys() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getTokenKeys(): TokenKeys {\r\n const notImplErr = \"Storage interface - getTokenKeys() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n async clear(): Promise {\r\n const notImplErr = \"Storage interface - clear() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n updateCredentialCacheKey(): string {\r\n const notImplErr = \"Storage interface - updateCredentialCacheKey() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\n/**\r\n * Utility class which exposes functions for managing date and time operations.\r\n */\r\nexport class TimeUtils {\r\n\r\n /**\r\n * return the current time in Unix time (seconds).\r\n */\r\n static nowSeconds(): number {\r\n // Date.getTime() returns in milliseconds.\r\n return Math.round(new Date().getTime() / 1000.0);\r\n }\r\n \r\n /**\r\n * check if a token is expired based on given UTC time in seconds.\r\n * @param expiresOn\r\n */\r\n static isTokenExpired(expiresOn: string, offset: number): boolean {\r\n // check for access token expiry\r\n const expirationSec = Number(expiresOn) || 0;\r\n const offsetCurrentTimeSec = TimeUtils.nowSeconds() + offset;\r\n\r\n // If current time + offset is greater than token expiration time, then token is expired.\r\n return (offsetCurrentTimeSec > expirationSec);\r\n }\r\n\r\n /**\r\n * If the current time is earlier than the time that a token was cached at, we must discard the token\r\n * i.e. The system clock was turned back after acquiring the cached token\r\n * @param cachedAt \r\n * @param offset \r\n */\r\n static wasClockTurnedBack(cachedAt: string): boolean {\r\n const cachedAtSec = Number(cachedAt);\r\n\r\n return cachedAtSec > TimeUtils.nowSeconds();\r\n }\r\n\r\n /**\r\n * Waits for t number of milliseconds\r\n * @param t number\r\n * @param value T\r\n */\r\n static delay(t: number, value?: T): Promise {\r\n return new Promise((resolve) => setTimeout(() => resolve(value), t));\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { CredentialEntity } from \"./CredentialEntity\";\r\nimport { CredentialType, AuthenticationScheme } from \"../../utils/Constants\";\r\nimport { TimeUtils } from \"../../utils/TimeUtils\";\r\nimport { StringUtils } from \"../../utils/StringUtils\";\r\nimport { ICrypto } from \"../../crypto/ICrypto\";\r\nimport { TokenClaims } from \"../../account/TokenClaims\";\r\nimport { AuthToken } from \"../../account/AuthToken\";\r\nimport { ClientAuthError } from \"../../error/ClientAuthError\";\r\n\r\n/**\r\n * ACCESS_TOKEN Credential Type\r\n *\r\n * Key:Value Schema:\r\n *\r\n * Key Example: uid.utid-login.microsoftonline.com-accesstoken-clientId-contoso.com-user.read\r\n *\r\n * Value Schema:\r\n * {\r\n * homeAccountId: home account identifier for the auth scheme,\r\n * environment: entity that issued the token, represented as a full host\r\n * credentialType: Type of credential as a string, can be one of the following: RefreshToken, AccessToken, IdToken, Password, Cookie, Certificate, Other\r\n * clientId: client ID of the application\r\n * secret: Actual credential as a string\r\n * familyId: Family ID identifier, usually only used for refresh tokens\r\n * realm: Full tenant or organizational identifier that the account belongs to\r\n * target: Permissions that are included in the token, or for refresh tokens, the resource identifier.\r\n * cachedAt: Absolute device time when entry was created in the cache.\r\n * expiresOn: Token expiry time, calculated based on current UTC time in seconds. Represented as a string.\r\n * extendedExpiresOn: Additional extended expiry time until when token is valid in case of server-side outage. Represented as string in UTC seconds.\r\n * keyId: used for POP and SSH tokenTypes\r\n * tokenType: Type of the token issued. Usually \"Bearer\"\r\n * }\r\n */\r\nexport class AccessTokenEntity extends CredentialEntity {\r\n realm: string;\r\n target: string;\r\n cachedAt: string;\r\n expiresOn: string;\r\n extendedExpiresOn?: string;\r\n refreshOn?: string;\r\n keyId?: string; // for POP and SSH tokenTypes\r\n tokenType?: AuthenticationScheme;\r\n requestedClaims?: string;\r\n requestedClaimsHash?: string;\r\n\r\n /**\r\n * Create AccessTokenEntity\r\n * @param homeAccountId\r\n * @param environment\r\n * @param accessToken\r\n * @param clientId\r\n * @param tenantId\r\n * @param scopes\r\n * @param expiresOn\r\n * @param extExpiresOn\r\n */\r\n static createAccessTokenEntity(\r\n homeAccountId: string,\r\n environment: string,\r\n accessToken: string,\r\n clientId: string,\r\n tenantId: string,\r\n scopes: string,\r\n expiresOn: number,\r\n extExpiresOn: number,\r\n cryptoUtils: ICrypto,\r\n refreshOn?: number,\r\n tokenType?: AuthenticationScheme,\r\n userAssertionHash?:string,\r\n keyId?: string,\r\n requestedClaims?: string,\r\n requestedClaimsHash?: string\r\n ): AccessTokenEntity {\r\n const atEntity: AccessTokenEntity = new AccessTokenEntity();\r\n\r\n atEntity.homeAccountId = homeAccountId;\r\n atEntity.credentialType = CredentialType.ACCESS_TOKEN;\r\n atEntity.secret = accessToken;\r\n\r\n const currentTime = TimeUtils.nowSeconds();\r\n atEntity.cachedAt = currentTime.toString();\r\n\r\n /*\r\n * Token expiry time.\r\n * This value should be  calculated based on the current UTC time measured locally and the value  expires_in Represented as a string in JSON.\r\n */\r\n atEntity.expiresOn = expiresOn.toString();\r\n atEntity.extendedExpiresOn = extExpiresOn.toString();\r\n if (refreshOn) {\r\n atEntity.refreshOn = refreshOn.toString();\r\n }\r\n\r\n atEntity.environment = environment;\r\n atEntity.clientId = clientId;\r\n atEntity.realm = tenantId;\r\n atEntity.target = scopes;\r\n atEntity.userAssertionHash = userAssertionHash;\r\n\r\n atEntity.tokenType = StringUtils.isEmpty(tokenType) ? AuthenticationScheme.BEARER : tokenType;\r\n\r\n if (requestedClaims) {\r\n atEntity.requestedClaims = requestedClaims;\r\n atEntity.requestedClaimsHash = requestedClaimsHash;\r\n }\r\n\r\n /*\r\n * Create Access Token With Auth Scheme instead of regular access token\r\n * Cast to lower to handle \"bearer\" from ADFS\r\n */\r\n if (atEntity.tokenType?.toLowerCase() !== AuthenticationScheme.BEARER.toLowerCase()) {\r\n atEntity.credentialType = CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME;\r\n switch (atEntity.tokenType) {\r\n case AuthenticationScheme.POP:\r\n // Make sure keyId is present and add it to credential\r\n const tokenClaims: TokenClaims | null = AuthToken.extractTokenClaims(accessToken, cryptoUtils);\r\n if (!tokenClaims?.cnf?.kid) {\r\n throw ClientAuthError.createTokenClaimsRequiredError();\r\n }\r\n atEntity.keyId = tokenClaims.cnf.kid;\r\n break;\r\n case AuthenticationScheme.SSH:\r\n atEntity.keyId = keyId;\r\n }\r\n }\r\n\r\n return atEntity;\r\n }\r\n\r\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\n static isAccessTokenEntity(entity: object): boolean {\r\n\r\n if (!entity) {\r\n return false;\r\n }\r\n\r\n return (\r\n entity.hasOwnProperty(\"homeAccountId\") &&\r\n entity.hasOwnProperty(\"environment\") &&\r\n entity.hasOwnProperty(\"credentialType\") &&\r\n entity.hasOwnProperty(\"realm\") &&\r\n entity.hasOwnProperty(\"clientId\") &&\r\n entity.hasOwnProperty(\"secret\") &&\r\n entity.hasOwnProperty(\"target\") &&\r\n (entity[\"credentialType\"] === CredentialType.ACCESS_TOKEN || entity[\"credentialType\"] === CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME)\r\n );\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { CredentialEntity } from \"./CredentialEntity\";\r\nimport { CredentialType } from \"../../utils/Constants\";\r\n\r\n/**\r\n * REFRESH_TOKEN Cache\r\n *\r\n * Key:Value Schema:\r\n *\r\n * Key Example: uid.utid-login.microsoftonline.com-refreshtoken-clientId--\r\n *\r\n * Value:\r\n * {\r\n * homeAccountId: home account identifier for the auth scheme,\r\n * environment: entity that issued the token, represented as a full host\r\n * credentialType: Type of credential as a string, can be one of the following: RefreshToken, AccessToken, IdToken, Password, Cookie, Certificate, Other\r\n * clientId: client ID of the application\r\n * secret: Actual credential as a string\r\n * familyId: Family ID identifier, '1' represents Microsoft Family\r\n * realm: Full tenant or organizational identifier that the account belongs to\r\n * target: Permissions that are included in the token, or for refresh tokens, the resource identifier.\r\n * }\r\n */\r\nexport class RefreshTokenEntity extends CredentialEntity {\r\n familyId?: string;\r\n\r\n /**\r\n * Create RefreshTokenEntity\r\n * @param homeAccountId\r\n * @param authenticationResult\r\n * @param clientId\r\n * @param authority\r\n */\r\n static createRefreshTokenEntity(\r\n homeAccountId: string,\r\n environment: string,\r\n refreshToken: string,\r\n clientId: string,\r\n familyId?: string,\r\n userAssertionHash?: string\r\n ): RefreshTokenEntity {\r\n const rtEntity = new RefreshTokenEntity();\r\n\r\n rtEntity.clientId = clientId;\r\n rtEntity.credentialType = CredentialType.REFRESH_TOKEN;\r\n rtEntity.environment = environment;\r\n rtEntity.homeAccountId = homeAccountId;\r\n rtEntity.secret = refreshToken;\r\n rtEntity.userAssertionHash = userAssertionHash;\r\n\r\n if (familyId)\r\n rtEntity.familyId = familyId;\r\n\r\n return rtEntity;\r\n }\r\n\r\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\n static isRefreshTokenEntity(entity: object): boolean {\r\n\r\n if (!entity) {\r\n return false;\r\n }\r\n\r\n return (\r\n entity.hasOwnProperty(\"homeAccountId\") &&\r\n entity.hasOwnProperty(\"environment\") &&\r\n entity.hasOwnProperty(\"credentialType\") &&\r\n entity.hasOwnProperty(\"clientId\") &&\r\n entity.hasOwnProperty(\"secret\") &&\r\n entity[\"credentialType\"] === CredentialType.REFRESH_TOKEN\r\n );\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { APP_METADATA, Separators } from \"../../utils/Constants\";\r\n\r\n/**\r\n * APP_METADATA Cache\r\n *\r\n * Key:Value Schema:\r\n *\r\n * Key: appmetadata--\r\n *\r\n * Value:\r\n * {\r\n * clientId: client ID of the application\r\n * environment: entity that issued the token, represented as a full host\r\n * familyId: Family ID identifier, '1' represents Microsoft Family\r\n * }\r\n */\r\nexport class AppMetadataEntity {\r\n clientId: string;\r\n environment: string;\r\n familyId?: string;\r\n\r\n /**\r\n * Generate AppMetadata Cache Key as per the schema: appmetadata--\r\n */\r\n generateAppMetadataKey(): string {\r\n return AppMetadataEntity.generateAppMetadataCacheKey(this.environment, this.clientId);\r\n }\r\n\r\n /**\r\n * Generate AppMetadata Cache Key\r\n */\r\n static generateAppMetadataCacheKey(environment: string, clientId: string): string {\r\n const appMetaDataKeyArray: Array = [\r\n APP_METADATA,\r\n environment,\r\n clientId,\r\n ];\r\n return appMetaDataKeyArray.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n\r\n /**\r\n * Creates AppMetadataEntity\r\n * @param clientId\r\n * @param environment\r\n * @param familyId\r\n */\r\n static createAppMetadataEntity(clientId: string, environment: string, familyId?: string): AppMetadataEntity {\r\n const appMetadata = new AppMetadataEntity();\r\n\r\n appMetadata.clientId = clientId;\r\n appMetadata.environment = environment;\r\n if (familyId) {\r\n appMetadata.familyId = familyId;\r\n }\r\n\r\n return appMetadata;\r\n }\r\n\r\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\n static isAppMetadataEntity(key: string, entity: object): boolean {\r\n\r\n if (!entity) {\r\n return false;\r\n }\r\n\r\n return (\r\n key.indexOf(APP_METADATA) === 0 &&\r\n entity.hasOwnProperty(\"clientId\") &&\r\n entity.hasOwnProperty(\"environment\")\r\n );\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { SERVER_TELEM_CONSTANTS } from \"../../utils/Constants\";\r\n\r\nexport class ServerTelemetryEntity {\r\n failedRequests: Array;\r\n errors: string[];\r\n cacheHits: number;\r\n\r\n constructor() {\r\n this.failedRequests = [];\r\n this.errors = [];\r\n this.cacheHits = 0;\r\n }\r\n\r\n /**\r\n * validates if a given cache entry is \"Telemetry\", parses \r\n * @param key\r\n * @param entity\r\n */\r\n static isServerTelemetryEntity(key: string, entity?: object): boolean {\r\n\r\n const validateKey: boolean = key.indexOf(SERVER_TELEM_CONSTANTS.CACHE_KEY) === 0;\r\n let validateEntity: boolean = true;\r\n\r\n if (entity) {\r\n validateEntity =\r\n entity.hasOwnProperty(\"failedRequests\") &&\r\n entity.hasOwnProperty(\"errors\") &&\r\n entity.hasOwnProperty(\"cacheHits\");\r\n }\r\n\r\n return validateKey && validateEntity;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { CloudDiscoveryMetadata } from \"../../authority/CloudDiscoveryMetadata\";\r\nimport { OpenIdConfigResponse } from \"../../authority/OpenIdConfigResponse\";\r\nimport { AUTHORITY_METADATA_CONSTANTS } from \"../../utils/Constants\";\r\nimport { TimeUtils } from \"../../utils/TimeUtils\";\r\n\r\nexport class AuthorityMetadataEntity {\r\n aliases: Array;\r\n preferred_cache: string;\r\n preferred_network: string;\r\n canonical_authority: string;\r\n authorization_endpoint: string;\r\n token_endpoint: string;\r\n end_session_endpoint?: string;\r\n issuer: string;\r\n aliasesFromNetwork: boolean;\r\n endpointsFromNetwork: boolean;\r\n expiresAt: number;\r\n jwks_uri: string;\r\n\r\n constructor() {\r\n this.expiresAt = TimeUtils.nowSeconds() + AUTHORITY_METADATA_CONSTANTS.REFRESH_TIME_SECONDS;\r\n }\r\n\r\n /**\r\n * Update the entity with new aliases, preferred_cache and preferred_network values\r\n * @param metadata \r\n * @param fromNetwork \r\n */\r\n updateCloudDiscoveryMetadata(metadata: CloudDiscoveryMetadata, fromNetwork: boolean): void {\r\n this.aliases = metadata.aliases;\r\n this.preferred_cache = metadata.preferred_cache;\r\n this.preferred_network = metadata.preferred_network;\r\n this.aliasesFromNetwork = fromNetwork;\r\n }\r\n\r\n /**\r\n * Update the entity with new endpoints\r\n * @param metadata \r\n * @param fromNetwork \r\n */\r\n updateEndpointMetadata(metadata: OpenIdConfigResponse, fromNetwork: boolean): void {\r\n this.authorization_endpoint = metadata.authorization_endpoint;\r\n this.token_endpoint = metadata.token_endpoint;\r\n this.end_session_endpoint = metadata.end_session_endpoint;\r\n this.issuer = metadata.issuer;\r\n this.endpointsFromNetwork = fromNetwork;\r\n this.jwks_uri = metadata.jwks_uri;\r\n }\r\n\r\n /**\r\n * Save the authority that was used to create this cache entry\r\n * @param authority \r\n */\r\n updateCanonicalAuthority(authority: string): void {\r\n this.canonical_authority = authority;\r\n }\r\n\r\n /**\r\n * Reset the exiresAt value\r\n */\r\n resetExpiresAt(): void {\r\n this.expiresAt = TimeUtils.nowSeconds() + AUTHORITY_METADATA_CONSTANTS.REFRESH_TIME_SECONDS;\r\n }\r\n\r\n /**\r\n * Returns whether or not the data needs to be refreshed\r\n */\r\n isExpired(): boolean {\r\n return this.expiresAt <= TimeUtils.nowSeconds();\r\n }\r\n\r\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\n static isAuthorityMetadataEntity(key: string, entity: object): boolean {\r\n\r\n if (!entity) {\r\n return false;\r\n }\r\n\r\n return (\r\n key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) === 0 &&\r\n entity.hasOwnProperty(\"aliases\") &&\r\n entity.hasOwnProperty(\"preferred_cache\") &&\r\n entity.hasOwnProperty(\"preferred_network\") &&\r\n entity.hasOwnProperty(\"canonical_authority\") &&\r\n entity.hasOwnProperty(\"authorization_endpoint\") &&\r\n entity.hasOwnProperty(\"token_endpoint\") &&\r\n entity.hasOwnProperty(\"issuer\") &&\r\n entity.hasOwnProperty(\"aliasesFromNetwork\") &&\r\n entity.hasOwnProperty(\"endpointsFromNetwork\") &&\r\n entity.hasOwnProperty(\"expiresAt\") &&\r\n entity.hasOwnProperty(\"jwks_uri\")\r\n );\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ThrottlingConstants } from \"../../utils/Constants\";\r\n\r\nexport class ThrottlingEntity {\r\n // Unix-time value representing the expiration of the throttle\r\n throttleTime: number;\r\n // Information provided by the server\r\n error?: string;\r\n errorCodes?: Array;\r\n errorMessage?: string;\r\n subError?: string;\r\n\r\n /**\r\n * validates if a given cache entry is \"Throttling\", parses \r\n * @param key\r\n * @param entity\r\n */\r\n static isThrottlingEntity(key: string, entity?: object): boolean {\r\n \r\n let validateKey: boolean = false;\r\n if (key) {\r\n validateKey = key.indexOf(ThrottlingConstants.THROTTLING_PREFIX) === 0;\r\n }\r\n \r\n let validateEntity: boolean = true;\r\n if (entity) {\r\n validateEntity = entity.hasOwnProperty(\"throttleTime\");\r\n }\r\n\r\n return validateKey && validateEntity;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { StringUtils } from \"./StringUtils\";\r\nimport { Constants } from \"./Constants\";\r\nimport { ICrypto } from \"../crypto/ICrypto\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\n\r\n/**\r\n * Type which defines the object that is stringified, encoded and sent in the state value.\r\n * Contains the following:\r\n * - id - unique identifier for this request\r\n * - ts - timestamp for the time the request was made. Used to ensure that token expiration is not calculated incorrectly.\r\n * - platformState - string value sent from the platform.\r\n */\r\nexport type LibraryStateObject = {\r\n id: string,\r\n meta?: Record\r\n};\r\n\r\n/**\r\n * Type which defines the stringified and encoded object sent to the service in the authorize request.\r\n */\r\nexport type RequestStateObject = {\r\n userRequestState: string,\r\n libraryState: LibraryStateObject\r\n};\r\n\r\n/**\r\n * Class which provides helpers for OAuth 2.0 protocol specific values\r\n */\r\nexport class ProtocolUtils {\r\n\r\n /**\r\n * Appends user state with random guid, or returns random guid.\r\n * @param userState \r\n * @param randomGuid \r\n */\r\n static setRequestState(cryptoObj: ICrypto, userState?: string, meta?: Record): string {\r\n const libraryState = ProtocolUtils.generateLibraryState(cryptoObj, meta);\r\n return !StringUtils.isEmpty(userState) ? `${libraryState}${Constants.RESOURCE_DELIM}${userState}` : libraryState;\r\n }\r\n\r\n /**\r\n * Generates the state value used by the common library.\r\n * @param randomGuid \r\n * @param cryptoObj \r\n */\r\n static generateLibraryState(cryptoObj: ICrypto, meta?: Record): string {\r\n if (!cryptoObj) {\r\n throw ClientAuthError.createNoCryptoObjectError(\"generateLibraryState\");\r\n }\r\n\r\n // Create a state object containing a unique id and the timestamp of the request creation\r\n const stateObj: LibraryStateObject = {\r\n id: cryptoObj.createNewGuid()\r\n };\r\n\r\n if (meta) {\r\n stateObj.meta = meta;\r\n }\r\n\r\n const stateString = JSON.stringify(stateObj);\r\n\r\n return cryptoObj.base64Encode(stateString);\r\n }\r\n\r\n /**\r\n * Parses the state into the RequestStateObject, which contains the LibraryState info and the state passed by the user.\r\n * @param state \r\n * @param cryptoObj \r\n */\r\n static parseRequestState(cryptoObj: ICrypto, state: string): RequestStateObject {\r\n if (!cryptoObj) {\r\n throw ClientAuthError.createNoCryptoObjectError(\"parseRequestState\");\r\n }\r\n\r\n if (StringUtils.isEmpty(state)) {\r\n throw ClientAuthError.createInvalidStateError(state, \"Null, undefined or empty state\");\r\n }\r\n\r\n try {\r\n // Split the state between library state and user passed state and decode them separately\r\n const splitState = state.split(Constants.RESOURCE_DELIM);\r\n const libraryState = splitState[0];\r\n const userState = splitState.length > 1 ? splitState.slice(1).join(Constants.RESOURCE_DELIM) : Constants.EMPTY_STRING;\r\n const libraryStateString = cryptoObj.base64Decode(libraryState);\r\n const libraryStateObj = JSON.parse(libraryStateString) as LibraryStateObject;\r\n return {\r\n userRequestState: !StringUtils.isEmpty(userState) ? userState : Constants.EMPTY_STRING,\r\n libraryState: libraryStateObj\r\n };\r\n } catch(e) {\r\n throw ClientAuthError.createInvalidStateError(state, e);\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\n/**\r\n * Protocol modes supported by MSAL.\r\n */\r\nexport enum ProtocolMode {\r\n AAD = \"AAD\",\r\n OIDC = \"OIDC\"\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ProtocolMode } from \"./ProtocolMode\";\r\nimport { AzureRegionConfiguration } from \"./AzureRegionConfiguration\";\r\n\r\nexport type AuthorityOptions = {\r\n protocolMode: ProtocolMode;\r\n knownAuthorities: Array;\r\n cloudDiscoveryMetadata: string;\r\n authorityMetadata: string;\r\n skipAuthorityMetadataCache?: boolean;\r\n azureRegionConfiguration?: AzureRegionConfiguration;\r\n};\r\n\r\nexport enum AzureCloudInstance {\r\n // AzureCloudInstance is not specified.\r\n None,\r\n\r\n // Microsoft Azure public cloud\r\n AzurePublic = \"https://login.microsoftonline.com\",\r\n\r\n // Microsoft PPE\r\n AzurePpe = \"https://login.windows-ppe.net\",\r\n\r\n // Microsoft Chinese national cloud\r\n AzureChina = \"https://login.chinacloudapi.cn\",\r\n\r\n // Microsoft German national cloud (\"Black Forest\")\r\n AzureGermany = \"https://login.microsoftonline.de\",\r\n\r\n // US Government cloud\r\n AzureUsGovernment = \"https://login.microsoftonline.us\",\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { BrowserConfigurationAuthError } from \"../error/BrowserConfigurationAuthError\";\r\nimport { BrowserCacheLocation } from \"../utils/BrowserConstants\";\r\nimport { IWindowStorage } from \"./IWindowStorage\";\r\n\r\nexport class BrowserStorage implements IWindowStorage {\r\n\r\n private windowStorage: Storage;\r\n\r\n constructor(cacheLocation: string) {\r\n this.validateWindowStorage(cacheLocation);\r\n this.windowStorage = window[cacheLocation];\r\n }\r\n\r\n private validateWindowStorage(cacheLocation: string): void {\r\n if (cacheLocation !== BrowserCacheLocation.LocalStorage && cacheLocation !== BrowserCacheLocation.SessionStorage) {\r\n throw BrowserConfigurationAuthError.createStorageNotSupportedError(cacheLocation);\r\n }\r\n const storageSupported = !!window[cacheLocation];\r\n if (!storageSupported) {\r\n throw BrowserConfigurationAuthError.createStorageNotSupportedError(cacheLocation);\r\n }\r\n }\r\n\r\n getItem(key: string): string | null {\r\n return this.windowStorage.getItem(key);\r\n }\r\n\r\n setItem(key: string, value: string): void {\r\n this.windowStorage.setItem(key, value);\r\n }\r\n\r\n removeItem(key: string): void {\r\n this.windowStorage.removeItem(key);\r\n }\r\n\r\n getKeys(): string[] {\r\n return Object.keys(this.windowStorage);\r\n }\r\n\r\n containsKey(key: string): boolean {\r\n return this.windowStorage.hasOwnProperty(key);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ServerAuthorizationCodeResponse } from \"../response/ServerAuthorizationCodeResponse\";\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { IUri } from \"./IUri\";\r\nimport { AADAuthorityConstants, Constants } from \"../utils/Constants\";\r\n\r\n/**\r\n * Url object class which can perform various transformations on url strings.\r\n */\r\nexport class UrlString {\r\n\r\n // internal url string field\r\n private _urlString: string;\r\n public get urlString(): string {\r\n return this._urlString;\r\n }\r\n\r\n constructor(url: string) {\r\n this._urlString = url;\r\n if (StringUtils.isEmpty(this._urlString)) {\r\n // Throws error if url is empty\r\n throw ClientConfigurationError.createUrlEmptyError();\r\n }\r\n\r\n if (StringUtils.isEmpty(this.getHash())) {\r\n this._urlString = UrlString.canonicalizeUri(url);\r\n }\r\n }\r\n\r\n /**\r\n * Ensure urls are lower case and end with a / character.\r\n * @param url\r\n */\r\n static canonicalizeUri(url: string): string {\r\n if (url) {\r\n let lowerCaseUrl = url.toLowerCase();\r\n\r\n if (StringUtils.endsWith(lowerCaseUrl, \"?\")) {\r\n lowerCaseUrl = lowerCaseUrl.slice(0, -1);\r\n } else if (StringUtils.endsWith(lowerCaseUrl, \"?/\")) {\r\n lowerCaseUrl = lowerCaseUrl.slice(0, -2);\r\n }\r\n\r\n if (!StringUtils.endsWith(lowerCaseUrl, \"/\")) {\r\n lowerCaseUrl += \"/\";\r\n }\r\n\r\n return lowerCaseUrl;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Throws if urlString passed is not a valid authority URI string.\r\n */\r\n validateAsUri(): void {\r\n // Attempts to parse url for uri components\r\n let components;\r\n try {\r\n components = this.getUrlComponents();\r\n } catch (e) {\r\n throw ClientConfigurationError.createUrlParseError(e);\r\n }\r\n\r\n // Throw error if URI or path segments are not parseable.\r\n if (!components.HostNameAndPort || !components.PathSegments) {\r\n throw ClientConfigurationError.createUrlParseError(`Given url string: ${this.urlString}`);\r\n }\r\n\r\n // Throw error if uri is insecure.\r\n if(!components.Protocol || components.Protocol.toLowerCase() !== \"https:\") {\r\n throw ClientConfigurationError.createInsecureAuthorityUriError(this.urlString);\r\n }\r\n }\r\n\r\n /**\r\n * Given a url and a query string return the url with provided query string appended\r\n * @param url\r\n * @param queryString\r\n */\r\n static appendQueryString(url: string, queryString: string): string {\r\n if (StringUtils.isEmpty(queryString)) {\r\n return url;\r\n }\r\n\r\n return url.indexOf(\"?\") < 0 ? `${url}?${queryString}` : `${url}&${queryString}`;\r\n }\r\n\r\n /**\r\n * Returns a url with the hash removed\r\n * @param url\r\n */\r\n static removeHashFromUrl(url: string): string {\r\n return UrlString.canonicalizeUri(url.split(\"#\")[0]);\r\n }\r\n\r\n /**\r\n * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d\r\n * @param href The url\r\n * @param tenantId The tenant id to replace\r\n */\r\n replaceTenantPath(tenantId: string): UrlString {\r\n const urlObject = this.getUrlComponents();\r\n const pathArray = urlObject.PathSegments;\r\n if (tenantId && (pathArray.length !== 0 && (pathArray[0] === AADAuthorityConstants.COMMON || pathArray[0] === AADAuthorityConstants.ORGANIZATIONS))) {\r\n pathArray[0] = tenantId;\r\n }\r\n return UrlString.constructAuthorityUriFromObject(urlObject);\r\n }\r\n\r\n /**\r\n * Returns the anchor part(#) of the URL\r\n */\r\n getHash(): string {\r\n return UrlString.parseHash(this.urlString);\r\n }\r\n\r\n /**\r\n * Parses out the components from a url string.\r\n * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url.\r\n */\r\n getUrlComponents(): IUri {\r\n // https://gist.github.com/curtisz/11139b2cfcaef4a261e0\r\n const regEx = RegExp(\"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\\\?([^#]*))?(#(.*))?\");\r\n\r\n // If url string does not match regEx, we throw an error\r\n const match = this.urlString.match(regEx);\r\n if (!match) {\r\n throw ClientConfigurationError.createUrlParseError(`Given url string: ${this.urlString}`);\r\n }\r\n\r\n // Url component object\r\n const urlComponents = {\r\n Protocol: match[1],\r\n HostNameAndPort: match[4],\r\n AbsolutePath: match[5],\r\n QueryString: match[7]\r\n } as IUri;\r\n\r\n let pathSegments = urlComponents.AbsolutePath.split(\"/\");\r\n pathSegments = pathSegments.filter((val) => val && val.length > 0); // remove empty elements\r\n urlComponents.PathSegments = pathSegments;\r\n\r\n if (!StringUtils.isEmpty(urlComponents.QueryString) && urlComponents.QueryString.endsWith(\"/\")) {\r\n urlComponents.QueryString = urlComponents.QueryString.substring(0, urlComponents.QueryString.length-1);\r\n }\r\n return urlComponents;\r\n }\r\n\r\n static getDomainFromUrl(url: string): string {\r\n const regEx = RegExp(\"^([^:/?#]+://)?([^/?#]*)\");\r\n\r\n const match = url.match(regEx);\r\n\r\n if (!match) {\r\n throw ClientConfigurationError.createUrlParseError(`Given url string: ${url}`);\r\n }\r\n\r\n return match[2];\r\n }\r\n\r\n static getAbsoluteUrl(relativeUrl: string, baseUrl: string): string {\r\n if (relativeUrl[0] === Constants.FORWARD_SLASH) {\r\n const url = new UrlString(baseUrl);\r\n const baseComponents = url.getUrlComponents();\r\n\r\n return baseComponents.Protocol + \"//\" + baseComponents.HostNameAndPort + relativeUrl;\r\n }\r\n\r\n return relativeUrl;\r\n }\r\n\r\n /**\r\n * Parses hash string from given string. Returns empty string if no hash symbol is found.\r\n * @param hashString\r\n */\r\n static parseHash(hashString: string): string {\r\n const hashIndex1 = hashString.indexOf(\"#\");\r\n const hashIndex2 = hashString.indexOf(\"#/\");\r\n if (hashIndex2 > -1) {\r\n return hashString.substring(hashIndex2 + 2);\r\n } else if (hashIndex1 > -1) {\r\n return hashString.substring(hashIndex1 + 1);\r\n }\r\n return Constants.EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * Parses query string from given string. Returns empty string if no query symbol is found.\r\n * @param queryString\r\n */\r\n static parseQueryString(queryString: string): string {\r\n const queryIndex1 = queryString.indexOf(\"?\");\r\n const queryIndex2 = queryString.indexOf(\"/?\");\r\n if (queryIndex2 > -1) {\r\n return queryString.substring(queryIndex2 + 2);\r\n } else if (queryIndex1 > -1) {\r\n return queryString.substring(queryIndex1 + 1);\r\n }\r\n return Constants.EMPTY_STRING;\r\n }\r\n\r\n static constructAuthorityUriFromObject(urlObject: IUri): UrlString {\r\n return new UrlString(urlObject.Protocol + \"//\" + urlObject.HostNameAndPort + \"/\" + urlObject.PathSegments.join(\"/\"));\r\n }\r\n\r\n /**\r\n * Returns URL hash as server auth code response object.\r\n */\r\n static getDeserializedHash(hash: string): ServerAuthorizationCodeResponse {\r\n // Check if given hash is empty\r\n if (StringUtils.isEmpty(hash)) {\r\n return {};\r\n }\r\n // Strip the # symbol if present\r\n const parsedHash = UrlString.parseHash(hash);\r\n // If # symbol was not present, above will return empty string, so give original hash value\r\n const deserializedHash: ServerAuthorizationCodeResponse = StringUtils.queryStringToObject(StringUtils.isEmpty(parsedHash) ? hash : parsedHash);\r\n // Check if deserialization didn't work\r\n if (!deserializedHash) {\r\n throw ClientAuthError.createHashNotDeserializedError(JSON.stringify(deserializedHash));\r\n }\r\n return deserializedHash;\r\n }\r\n\r\n /**\r\n * Returns URL query string as server auth code response object.\r\n */\r\n static getDeserializedQueryString(query: string): ServerAuthorizationCodeResponse {\r\n // Check if given query is empty\r\n if (StringUtils.isEmpty(query)) {\r\n return {};\r\n }\r\n // Strip the ? symbol if present\r\n const parsedQueryString = UrlString.parseQueryString(query);\r\n // If ? symbol was not present, above will return empty string, so give original query value\r\n const deserializedQueryString: ServerAuthorizationCodeResponse = StringUtils.queryStringToObject(StringUtils.isEmpty(parsedQueryString) ? query : parsedQueryString);\r\n // Check if deserialization didn't work\r\n if (!deserializedQueryString) {\r\n throw ClientAuthError.createHashNotDeserializedError(JSON.stringify(deserializedQueryString));\r\n }\r\n return deserializedQueryString;\r\n }\r\n\r\n /**\r\n * Check if the hash of the URL string contains known properties\r\n */\r\n static hashContainsKnownProperties(hash: string): boolean {\r\n if (StringUtils.isEmpty(hash) || hash.indexOf(\"=\") < 0) {\r\n // Hash doesn't contain key/value pairs\r\n return false;\r\n }\r\n\r\n const parameters: ServerAuthorizationCodeResponse = UrlString.getDeserializedHash(hash);\r\n return !!(\r\n parameters.code ||\r\n parameters.error_description ||\r\n parameters.error ||\r\n parameters.state\r\n );\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { InteractionType } from \"./BrowserConstants\";\r\nimport { StringUtils, ClientAuthError, ICrypto, RequestStateObject, ProtocolUtils, ServerAuthorizationCodeResponse, UrlString } from \"@azure/msal-common\";\r\n\r\nexport type BrowserStateObject = {\r\n interactionType: InteractionType\r\n};\r\n\r\nexport class BrowserProtocolUtils {\r\n\r\n /**\r\n * Extracts the BrowserStateObject from the state string.\r\n * @param browserCrypto \r\n * @param state \r\n */\r\n static extractBrowserRequestState(browserCrypto: ICrypto, state: string): BrowserStateObject | null {\r\n if (StringUtils.isEmpty(state)) {\r\n return null;\r\n }\r\n\r\n try {\r\n const requestStateObj: RequestStateObject = ProtocolUtils.parseRequestState(browserCrypto, state);\r\n return requestStateObj.libraryState.meta as BrowserStateObject;\r\n } catch (e) {\r\n throw ClientAuthError.createInvalidStateError(state, e);\r\n }\r\n }\r\n\r\n /**\r\n * Parses properties of server response from url hash\r\n * @param locationHash Hash from url\r\n */\r\n static parseServerResponseFromHash(locationHash: string): ServerAuthorizationCodeResponse {\r\n if (!locationHash) {\r\n return {};\r\n }\r\n \r\n const hashUrlString = new UrlString(locationHash);\r\n return UrlString.getDeserializedHash(hashUrlString.getHash());\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants, PersistentCacheKeys, StringUtils, CommonAuthorizationCodeRequest, ICrypto, AccountEntity, IdTokenEntity, AccessTokenEntity, RefreshTokenEntity, AppMetadataEntity, CacheManager, ServerTelemetryEntity, ThrottlingEntity, ProtocolUtils, Logger, AuthorityMetadataEntity, DEFAULT_CRYPTO_IMPLEMENTATION, AccountInfo, ActiveAccountFilters, CcsCredential, CcsCredentialType, IdToken, ValidCredentialType, ClientAuthError, TokenKeys, CredentialType } from \"@azure/msal-common\";\r\nimport { CacheOptions } from \"../config/Configuration\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { BrowserCacheLocation, InteractionType, TemporaryCacheKeys, InMemoryCacheKeys, StaticCacheKeys } from \"../utils/BrowserConstants\";\r\nimport { BrowserStorage } from \"./BrowserStorage\";\r\nimport { MemoryStorage } from \"./MemoryStorage\";\r\nimport { IWindowStorage } from \"./IWindowStorage\";\r\nimport { BrowserProtocolUtils } from \"../utils/BrowserProtocolUtils\";\r\nimport { NativeTokenRequest } from \"../broker/nativeBroker/NativeRequest\";\r\n\r\n/**\r\n * This class implements the cache storage interface for MSAL through browser local or session storage.\r\n * Cookies are only used if storeAuthStateInCookie is true, and are only used for\r\n * parameters such as state and nonce, generally.\r\n */\r\nexport class BrowserCacheManager extends CacheManager {\r\n\r\n // Cache configuration, either set by user or default values.\r\n protected cacheConfig: Required;\r\n // Window storage object (either local or sessionStorage)\r\n protected browserStorage: IWindowStorage;\r\n // Internal in-memory storage object used for data used by msal that does not need to persist across page loads\r\n protected internalStorage: MemoryStorage;\r\n // Temporary cache\r\n protected temporaryCacheStorage: IWindowStorage;\r\n // Logger instance\r\n protected logger: Logger;\r\n\r\n // Cookie life calculation (hours * minutes * seconds * ms)\r\n protected readonly COOKIE_LIFE_MULTIPLIER = 24 * 60 * 60 * 1000;\r\n\r\n constructor(clientId: string, cacheConfig: Required, cryptoImpl: ICrypto, logger: Logger) {\r\n super(clientId, cryptoImpl, logger);\r\n this.cacheConfig = cacheConfig;\r\n this.logger = logger;\r\n this.internalStorage = new MemoryStorage();\r\n this.browserStorage = this.setupBrowserStorage(this.cacheConfig.cacheLocation);\r\n this.temporaryCacheStorage = this.setupTemporaryCacheStorage(this.cacheConfig.temporaryCacheLocation, this.cacheConfig.cacheLocation);\r\n\r\n // Migrate cache entries from older versions of MSAL.\r\n if (cacheConfig.cacheMigrationEnabled) {\r\n this.migrateCacheEntries();\r\n this.createKeyMaps();\r\n }\r\n }\r\n\r\n /**\r\n * Returns a window storage class implementing the IWindowStorage interface that corresponds to the configured cacheLocation.\r\n * @param cacheLocation\r\n */\r\n protected setupBrowserStorage(cacheLocation: BrowserCacheLocation | string): IWindowStorage {\r\n switch (cacheLocation) {\r\n case BrowserCacheLocation.LocalStorage:\r\n case BrowserCacheLocation.SessionStorage:\r\n try {\r\n return new BrowserStorage(cacheLocation);\r\n } catch (e) {\r\n this.logger.verbose(e);\r\n break;\r\n }\r\n case BrowserCacheLocation.MemoryStorage:\r\n default:\r\n break;\r\n }\r\n this.cacheConfig.cacheLocation = BrowserCacheLocation.MemoryStorage;\r\n return new MemoryStorage();\r\n }\r\n\r\n /**\r\n * Returns a window storage class implementing the IWindowStorage interface that corresponds to the configured temporaryCacheLocation.\r\n * @param temporaryCacheLocation\r\n * @param cacheLocation\r\n */\r\n protected setupTemporaryCacheStorage(temporaryCacheLocation: BrowserCacheLocation | string, cacheLocation: BrowserCacheLocation | string): IWindowStorage {\r\n switch (cacheLocation) {\r\n case BrowserCacheLocation.LocalStorage:\r\n case BrowserCacheLocation.SessionStorage:\r\n try {\r\n /*\r\n * When users do not explicitly choose their own temporaryCacheLocation, \r\n * temporary cache items will always be stored in session storage to mitigate problems caused by multiple tabs\r\n */\r\n return new BrowserStorage(temporaryCacheLocation || BrowserCacheLocation.SessionStorage);\r\n } catch (e) {\r\n this.logger.verbose(e);\r\n return this.internalStorage;\r\n }\r\n case BrowserCacheLocation.MemoryStorage:\r\n default:\r\n return this.internalStorage;\r\n }\r\n }\r\n\r\n /**\r\n * Migrate all old cache entries to new schema. No rollback supported.\r\n * @param storeAuthStateInCookie\r\n */\r\n protected migrateCacheEntries(): void {\r\n const idTokenKey = `${Constants.CACHE_PREFIX}.${PersistentCacheKeys.ID_TOKEN}`;\r\n const clientInfoKey = `${Constants.CACHE_PREFIX}.${PersistentCacheKeys.CLIENT_INFO}`;\r\n const errorKey = `${Constants.CACHE_PREFIX}.${PersistentCacheKeys.ERROR}`;\r\n const errorDescKey = `${Constants.CACHE_PREFIX}.${PersistentCacheKeys.ERROR_DESC}`;\r\n\r\n const idTokenValue = this.browserStorage.getItem(idTokenKey);\r\n const clientInfoValue = this.browserStorage.getItem(clientInfoKey);\r\n const errorValue = this.browserStorage.getItem(errorKey);\r\n const errorDescValue = this.browserStorage.getItem(errorDescKey);\r\n\r\n const values = [idTokenValue, clientInfoValue, errorValue, errorDescValue];\r\n const keysToMigrate = [PersistentCacheKeys.ID_TOKEN, PersistentCacheKeys.CLIENT_INFO, PersistentCacheKeys.ERROR, PersistentCacheKeys.ERROR_DESC];\r\n\r\n keysToMigrate.forEach((cacheKey: string, index: number) => this.migrateCacheEntry(cacheKey, values[index]));\r\n }\r\n\r\n /**\r\n * Utility function to help with migration.\r\n * @param newKey\r\n * @param value\r\n * @param storeAuthStateInCookie\r\n */\r\n protected migrateCacheEntry(newKey: string, value: string | null): void {\r\n if (value) {\r\n this.setTemporaryCache(newKey, value, true);\r\n }\r\n }\r\n\r\n /**\r\n * Searches all cache entries for MSAL accounts and creates the account key map\r\n * This is used to migrate users from older versions of MSAL which did not create the map.\r\n * @returns \r\n */\r\n private createKeyMaps(): void {\r\n this.logger.trace(\"BrowserCacheManager - createKeyMaps called.\");\r\n const accountKeys = this.getItem(StaticCacheKeys.ACCOUNT_KEYS);\r\n const tokenKeys = this.getItem(`${StaticCacheKeys.TOKEN_KEYS}.${this.clientId}`);\r\n if (accountKeys && tokenKeys) {\r\n this.logger.verbose(\"BrowserCacheManager:createKeyMaps - account and token key maps already exist, skipping migration.\");\r\n // Key maps already exist, no need to iterate through cache\r\n return;\r\n }\r\n\r\n const allKeys = this.browserStorage.getKeys();\r\n allKeys.forEach((key) => {\r\n if (this.isCredentialKey(key)) {\r\n // Get item, parse, validate and write key to map\r\n const value = this.getItem(key);\r\n if (value) {\r\n const credObj = this.validateAndParseJson(value);\r\n if (credObj && credObj.hasOwnProperty(\"credentialType\")) {\r\n switch (credObj[\"credentialType\"]) {\r\n case CredentialType.ID_TOKEN:\r\n if (IdTokenEntity.isIdTokenEntity(credObj)) {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - idToken found, saving key to token key map\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - idToken with key: ${key} found, saving key to token key map`);\r\n const idTokenEntity = CacheManager.toObject(new IdTokenEntity(), credObj);\r\n const newKey = this.updateCredentialCacheKey(key, idTokenEntity);\r\n this.addTokenKey(newKey, CredentialType.ID_TOKEN);\r\n return;\r\n } else {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - key found matching idToken schema with value containing idToken credentialType field but value failed IdTokenEntity validation, skipping.\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - failed idToken validation on key: ${key}`);\r\n }\r\n break;\r\n case CredentialType.ACCESS_TOKEN:\r\n case CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME:\r\n if (AccessTokenEntity.isAccessTokenEntity(credObj)) {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - accessToken found, saving key to token key map\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - accessToken with key: ${key} found, saving key to token key map`);\r\n const accessTokenEntity = CacheManager.toObject(new AccessTokenEntity(), credObj);\r\n const newKey = this.updateCredentialCacheKey(key, accessTokenEntity);\r\n this.addTokenKey(newKey, CredentialType.ACCESS_TOKEN);\r\n return;\r\n } else {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - key found matching accessToken schema with value containing accessToken credentialType field but value failed AccessTokenEntity validation, skipping.\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - failed accessToken validation on key: ${key}`);\r\n }\r\n break;\r\n case CredentialType.REFRESH_TOKEN:\r\n if (RefreshTokenEntity.isRefreshTokenEntity(credObj)) {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - refreshToken found, saving key to token key map\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - refreshToken with key: ${key} found, saving key to token key map`);\r\n const refreshTokenEntity = CacheManager.toObject(new RefreshTokenEntity(), credObj);\r\n const newKey = this.updateCredentialCacheKey(key, refreshTokenEntity);\r\n this.addTokenKey(newKey, CredentialType.REFRESH_TOKEN);\r\n return;\r\n } else {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - key found matching refreshToken schema with value containing refreshToken credentialType field but value failed RefreshTokenEntity validation, skipping.\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - failed refreshToken validation on key: ${key}`);\r\n }\r\n break;\r\n default:\r\n // If credentialType isn't one of our predefined ones, it may not be an MSAL cache value. Ignore.\r\n }\r\n }\r\n }\r\n } \r\n \r\n if (this.isAccountKey(key)) {\r\n const value = this.getItem(key);\r\n if (value) {\r\n const accountObj = this.validateAndParseJson(value);\r\n if (accountObj && AccountEntity.isAccountEntity(accountObj)) {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - account found, saving key to account key map\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - account with key: ${key} found, saving key to account key map`);\r\n this.addAccountKeyToMap(key);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Parses passed value as JSON object, JSON.parse() will throw an error.\r\n * @param input\r\n */\r\n protected validateAndParseJson(jsonValue: string): object | null {\r\n try {\r\n const parsedJson = JSON.parse(jsonValue);\r\n /**\r\n * There are edge cases in which JSON.parse will successfully parse a non-valid JSON object\r\n * (e.g. JSON.parse will parse an escaped string into an unescaped string), so adding a type check\r\n * of the parsed value is necessary in order to be certain that the string represents a valid JSON object.\r\n *\r\n */\r\n return (parsedJson && typeof parsedJson === \"object\") ? parsedJson : null;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * fetches the entry from the browser storage based off the key\r\n * @param key\r\n */\r\n getItem(key: string): string | null {\r\n return this.browserStorage.getItem(key);\r\n }\r\n\r\n /**\r\n * sets the entry in the browser storage\r\n * @param key\r\n * @param value\r\n */\r\n setItem(key: string, value: string): void {\r\n this.browserStorage.setItem(key, value);\r\n }\r\n\r\n /**\r\n * fetch the account entity from the platform cache\r\n * @param accountKey\r\n */\r\n getAccount(accountKey: string): AccountEntity | null {\r\n this.logger.trace(\"BrowserCacheManager.getAccount called\");\r\n const account = this.getItem(accountKey);\r\n if (!account) {\r\n this.removeAccountKeyFromMap(accountKey);\r\n return null;\r\n }\r\n\r\n const parsedAccount = this.validateAndParseJson(account);\r\n if (!parsedAccount || !AccountEntity.isAccountEntity(parsedAccount)) {\r\n this.removeAccountKeyFromMap(accountKey);\r\n return null;\r\n }\r\n\r\n return CacheManager.toObject(new AccountEntity(), parsedAccount);\r\n }\r\n\r\n /**\r\n * set account entity in the platform cache\r\n * @param key\r\n * @param value\r\n */\r\n setAccount(account: AccountEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setAccount called\");\r\n const key = account.generateAccountKey();\r\n this.setItem(key, JSON.stringify(account));\r\n this.addAccountKeyToMap(key);\r\n }\r\n\r\n /**\r\n * Returns the array of account keys currently cached\r\n * @returns \r\n */\r\n getAccountKeys(): Array {\r\n this.logger.trace(\"BrowserCacheManager.getAccountKeys called\");\r\n const accountKeys = this.getItem(StaticCacheKeys.ACCOUNT_KEYS);\r\n if (accountKeys) {\r\n return JSON.parse(accountKeys);\r\n }\r\n\r\n this.logger.verbose(\"BrowserCacheManager.getAccountKeys - No account keys found\");\r\n return [];\r\n }\r\n\r\n /**\r\n * Add a new account to the key map\r\n * @param key \r\n */\r\n addAccountKeyToMap(key: string): void {\r\n this.logger.trace(\"BrowserCacheManager.addAccountKeyToMap called\");\r\n this.logger.tracePii(`BrowserCacheManager.addAccountKeyToMap called with key: ${key}`);\r\n const accountKeys = this.getAccountKeys();\r\n if (accountKeys.indexOf(key) === -1) {\r\n // Only add key if it does not already exist in the map\r\n accountKeys.push(key);\r\n this.setItem(StaticCacheKeys.ACCOUNT_KEYS, JSON.stringify(accountKeys));\r\n this.logger.verbose(\"BrowserCacheManager.addAccountKeyToMap account key added\");\r\n } else {\r\n this.logger.verbose(\"BrowserCacheManager.addAccountKeyToMap account key already exists in map\");\r\n }\r\n }\r\n\r\n /**\r\n * Remove an account from the key map\r\n * @param key \r\n */\r\n removeAccountKeyFromMap(key: string): void {\r\n this.logger.trace(\"BrowserCacheManager.removeAccountKeyFromMap called\");\r\n this.logger.tracePii(`BrowserCacheManager.removeAccountKeyFromMap called with key: ${key}`);\r\n const accountKeys = this.getAccountKeys();\r\n const removalIndex = accountKeys.indexOf(key);\r\n if (removalIndex > -1) {\r\n accountKeys.splice(removalIndex, 1);\r\n this.setItem(StaticCacheKeys.ACCOUNT_KEYS, JSON.stringify(accountKeys));\r\n this.logger.trace(\"BrowserCacheManager.removeAccountKeyFromMap account key removed\");\r\n } else {\r\n this.logger.trace(\"BrowserCacheManager.removeAccountKeyFromMap key not found in existing map\");\r\n }\r\n }\r\n\r\n /**\r\n * Extends inherited removeAccount function to include removal of the account key from the map\r\n * @param key \r\n */\r\n async removeAccount(key: string): Promise {\r\n super.removeAccount(key);\r\n this.removeAccountKeyFromMap(key);\r\n }\r\n\r\n /**\r\n * Removes given idToken from the cache and from the key map\r\n * @param key \r\n */\r\n removeIdToken(key: string): void {\r\n super.removeIdToken(key);\r\n this.removeTokenKey(key, CredentialType.ID_TOKEN);\r\n }\r\n\r\n /**\r\n * Removes given accessToken from the cache and from the key map\r\n * @param key \r\n */\r\n async removeAccessToken(key: string): Promise {\r\n super.removeAccessToken(key);\r\n this.removeTokenKey(key, CredentialType.ACCESS_TOKEN);\r\n }\r\n\r\n /**\r\n * Removes given refreshToken from the cache and from the key map\r\n * @param key \r\n */\r\n removeRefreshToken(key: string): void {\r\n super.removeRefreshToken(key);\r\n this.removeTokenKey(key, CredentialType.REFRESH_TOKEN);\r\n }\r\n\r\n /**\r\n * Gets the keys for the cached tokens associated with this clientId\r\n * @returns \r\n */\r\n getTokenKeys(): TokenKeys {\r\n this.logger.trace(\"BrowserCacheManager.getTokenKeys called\");\r\n const item = this.getItem(`${StaticCacheKeys.TOKEN_KEYS}.${this.clientId}`);\r\n if (item) {\r\n const tokenKeys = this.validateAndParseJson(item);\r\n if (tokenKeys && \r\n tokenKeys.hasOwnProperty(\"idToken\") &&\r\n tokenKeys.hasOwnProperty(\"accessToken\") &&\r\n tokenKeys.hasOwnProperty(\"refreshToken\")\r\n ) {\r\n return tokenKeys as TokenKeys;\r\n } else {\r\n this.logger.error(\"BrowserCacheManager.getTokenKeys - Token keys found but in an unknown format. Returning empty key map.\");\r\n }\r\n } else {\r\n this.logger.verbose(\"BrowserCacheManager.getTokenKeys - No token keys found\");\r\n }\r\n\r\n return {\r\n idToken: [],\r\n accessToken: [],\r\n refreshToken: []\r\n };\r\n }\r\n\r\n /**\r\n * Adds the given key to the token key map\r\n * @param key \r\n * @param type \r\n */\r\n addTokenKey(key: string, type: CredentialType): void {\r\n this.logger.trace(\"BrowserCacheManager addTokenKey called\");\r\n const tokenKeys = this.getTokenKeys();\r\n\r\n switch (type) {\r\n case CredentialType.ID_TOKEN:\r\n if (tokenKeys.idToken.indexOf(key) === -1) {\r\n this.logger.info(\"BrowserCacheManager: addTokenKey - idToken added to map\");\r\n tokenKeys.idToken.push(key);\r\n }\r\n break;\r\n case CredentialType.ACCESS_TOKEN:\r\n if (tokenKeys.accessToken.indexOf(key) === -1) {\r\n this.logger.info(\"BrowserCacheManager: addTokenKey - accessToken added to map\");\r\n tokenKeys.accessToken.push(key);\r\n }\r\n break;\r\n case CredentialType.REFRESH_TOKEN:\r\n if (tokenKeys.refreshToken.indexOf(key) === -1) {\r\n this.logger.info(\"BrowserCacheManager: addTokenKey - refreshToken added to map\");\r\n tokenKeys.refreshToken.push(key);\r\n }\r\n break;\r\n default:\r\n this.logger.error(`BrowserCacheManager:addTokenKey - CredentialType provided invalid. CredentialType: ${type}`);\r\n ClientAuthError.createUnexpectedCredentialTypeError();\r\n }\r\n\r\n this.setItem(`${StaticCacheKeys.TOKEN_KEYS}.${this.clientId}`, JSON.stringify(tokenKeys));\r\n }\r\n\r\n /**\r\n * Removes the given key from the token key map\r\n * @param key \r\n * @param type \r\n */\r\n removeTokenKey(key: string, type: CredentialType): void {\r\n this.logger.trace(\"BrowserCacheManager removeTokenKey called\");\r\n const tokenKeys = this.getTokenKeys();\r\n\r\n switch (type) {\r\n case CredentialType.ID_TOKEN:\r\n this.logger.infoPii(`BrowserCacheManager: removeTokenKey - attempting to remove idToken with key: ${key} from map`);\r\n const idRemoval = tokenKeys.idToken.indexOf(key);\r\n if (idRemoval > -1) {\r\n this.logger.info(\"BrowserCacheManager: removeTokenKey - idToken removed from map\");\r\n tokenKeys.idToken.splice(idRemoval, 1);\r\n } else {\r\n this.logger.info(\"BrowserCacheManager: removeTokenKey - idToken does not exist in map. Either it was previously removed or it was never added.\");\r\n }\r\n break;\r\n case CredentialType.ACCESS_TOKEN:\r\n this.logger.infoPii(`BrowserCacheManager: removeTokenKey - attempting to remove accessToken with key: ${key} from map`);\r\n const accessRemoval = tokenKeys.accessToken.indexOf(key);\r\n if (accessRemoval > -1) {\r\n this.logger.info(\"BrowserCacheManager: removeTokenKey - accessToken removed from map\");\r\n tokenKeys.accessToken.splice(accessRemoval, 1);\r\n } else {\r\n this.logger.info(\"BrowserCacheManager: removeTokenKey - accessToken does not exist in map. Either it was previously removed or it was never added.\");\r\n }\r\n break;\r\n case CredentialType.REFRESH_TOKEN:\r\n this.logger.infoPii(`BrowserCacheManager: removeTokenKey - attempting to remove refreshToken with key: ${key} from map`);\r\n const refreshRemoval = tokenKeys.refreshToken.indexOf(key);\r\n if (refreshRemoval > -1) {\r\n this.logger.info(\"BrowserCacheManager: removeTokenKey - refreshToken removed from map\");\r\n tokenKeys.refreshToken.splice(refreshRemoval, 1);\r\n } else {\r\n this.logger.info(\"BrowserCacheManager: removeTokenKey - refreshToken does not exist in map. Either it was previously removed or it was never added.\");\r\n }\r\n break;\r\n default:\r\n this.logger.error(`BrowserCacheManager:removeTokenKey - CredentialType provided invalid. CredentialType: ${type}`);\r\n ClientAuthError.createUnexpectedCredentialTypeError();\r\n }\r\n\r\n this.setItem(`${StaticCacheKeys.TOKEN_KEYS}.${this.clientId}`, JSON.stringify(tokenKeys));\r\n }\r\n\r\n /**\r\n * generates idToken entity from a string\r\n * @param idTokenKey\r\n */\r\n getIdTokenCredential(idTokenKey: string): IdTokenEntity | null {\r\n const value = this.getItem(idTokenKey);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getIdTokenCredential: called, no cache hit\");\r\n this.removeTokenKey(idTokenKey, CredentialType.ID_TOKEN);\r\n return null;\r\n }\r\n\r\n const parsedIdToken = this.validateAndParseJson(value);\r\n if (!parsedIdToken || !IdTokenEntity.isIdTokenEntity(parsedIdToken)) {\r\n this.logger.trace(\"BrowserCacheManager.getIdTokenCredential: called, no cache hit\");\r\n this.removeTokenKey(idTokenKey, CredentialType.ID_TOKEN);\r\n return null;\r\n }\r\n\r\n this.logger.trace(\"BrowserCacheManager.getIdTokenCredential: cache hit\");\r\n return CacheManager.toObject(new IdTokenEntity(), parsedIdToken);\r\n }\r\n\r\n /**\r\n * set IdToken credential to the platform cache\r\n * @param idToken\r\n */\r\n setIdTokenCredential(idToken: IdTokenEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setIdTokenCredential called\");\r\n const idTokenKey = idToken.generateCredentialKey();\r\n\r\n this.setItem(idTokenKey, JSON.stringify(idToken));\r\n\r\n this.addTokenKey(idTokenKey, CredentialType.ID_TOKEN);\r\n }\r\n\r\n /**\r\n * generates accessToken entity from a string\r\n * @param key\r\n */\r\n getAccessTokenCredential(accessTokenKey: string): AccessTokenEntity | null {\r\n const value = this.getItem(accessTokenKey);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getAccessTokenCredential: called, no cache hit\");\r\n this.removeTokenKey(accessTokenKey, CredentialType.ACCESS_TOKEN);\r\n return null;\r\n }\r\n const parsedAccessToken = this.validateAndParseJson(value);\r\n if (!parsedAccessToken || !AccessTokenEntity.isAccessTokenEntity(parsedAccessToken)) {\r\n this.logger.trace(\"BrowserCacheManager.getAccessTokenCredential: called, no cache hit\");\r\n this.removeTokenKey(accessTokenKey, CredentialType.ACCESS_TOKEN);\r\n return null;\r\n }\r\n\r\n this.logger.trace(\"BrowserCacheManager.getAccessTokenCredential: cache hit\");\r\n return CacheManager.toObject(new AccessTokenEntity(), parsedAccessToken);\r\n }\r\n\r\n /**\r\n * set accessToken credential to the platform cache\r\n * @param accessToken\r\n */\r\n setAccessTokenCredential(accessToken: AccessTokenEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setAccessTokenCredential called\");\r\n const accessTokenKey = accessToken.generateCredentialKey();\r\n this.setItem(accessTokenKey, JSON.stringify(accessToken));\r\n\r\n this.addTokenKey(accessTokenKey, CredentialType.ACCESS_TOKEN);\r\n }\r\n\r\n /**\r\n * generates refreshToken entity from a string\r\n * @param refreshTokenKey\r\n */\r\n getRefreshTokenCredential(refreshTokenKey: string): RefreshTokenEntity | null {\r\n const value = this.getItem(refreshTokenKey);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getRefreshTokenCredential: called, no cache hit\");\r\n this.removeTokenKey(refreshTokenKey, CredentialType.REFRESH_TOKEN);\r\n return null;\r\n }\r\n const parsedRefreshToken = this.validateAndParseJson(value);\r\n if (!parsedRefreshToken || !RefreshTokenEntity.isRefreshTokenEntity(parsedRefreshToken)) {\r\n this.logger.trace(\"BrowserCacheManager.getRefreshTokenCredential: called, no cache hit\");\r\n this.removeTokenKey(refreshTokenKey, CredentialType.REFRESH_TOKEN);\r\n return null;\r\n }\r\n\r\n this.logger.trace(\"BrowserCacheManager.getRefreshTokenCredential: cache hit\");\r\n return CacheManager.toObject(new RefreshTokenEntity(), parsedRefreshToken);\r\n }\r\n\r\n /**\r\n * set refreshToken credential to the platform cache\r\n * @param refreshToken\r\n */\r\n setRefreshTokenCredential(refreshToken: RefreshTokenEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setRefreshTokenCredential called\");\r\n const refreshTokenKey = refreshToken.generateCredentialKey();\r\n this.setItem(refreshTokenKey, JSON.stringify(refreshToken));\r\n\r\n this.addTokenKey(refreshTokenKey, CredentialType.REFRESH_TOKEN);\r\n }\r\n\r\n /**\r\n * fetch appMetadata entity from the platform cache\r\n * @param appMetadataKey\r\n */\r\n getAppMetadata(appMetadataKey: string): AppMetadataEntity | null {\r\n const value = this.getItem(appMetadataKey);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getAppMetadata: called, no cache hit\");\r\n return null;\r\n }\r\n\r\n const parsedMetadata = this.validateAndParseJson(value);\r\n if (!parsedMetadata || !AppMetadataEntity.isAppMetadataEntity(appMetadataKey, parsedMetadata)) {\r\n this.logger.trace(\"BrowserCacheManager.getAppMetadata: called, no cache hit\");\r\n return null;\r\n }\r\n\r\n this.logger.trace(\"BrowserCacheManager.getAppMetadata: cache hit\");\r\n return CacheManager.toObject(new AppMetadataEntity(), parsedMetadata);\r\n }\r\n\r\n /**\r\n * set appMetadata entity to the platform cache\r\n * @param appMetadata\r\n */\r\n setAppMetadata(appMetadata: AppMetadataEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setAppMetadata called\");\r\n const appMetadataKey = appMetadata.generateAppMetadataKey();\r\n this.setItem(appMetadataKey, JSON.stringify(appMetadata));\r\n }\r\n\r\n /**\r\n * fetch server telemetry entity from the platform cache\r\n * @param serverTelemetryKey\r\n */\r\n getServerTelemetry(serverTelemetryKey: string): ServerTelemetryEntity | null {\r\n const value = this.getItem(serverTelemetryKey);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getServerTelemetry: called, no cache hit\");\r\n return null;\r\n }\r\n const parsedMetadata = this.validateAndParseJson(value);\r\n if (!parsedMetadata || !ServerTelemetryEntity.isServerTelemetryEntity(serverTelemetryKey, parsedMetadata)) {\r\n this.logger.trace(\"BrowserCacheManager.getServerTelemetry: called, no cache hit\");\r\n return null;\r\n }\r\n\r\n this.logger.trace(\"BrowserCacheManager.getServerTelemetry: cache hit\");\r\n return CacheManager.toObject(new ServerTelemetryEntity(), parsedMetadata);\r\n }\r\n\r\n /**\r\n * set server telemetry entity to the platform cache\r\n * @param serverTelemetryKey\r\n * @param serverTelemetry\r\n */\r\n setServerTelemetry(serverTelemetryKey: string, serverTelemetry: ServerTelemetryEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setServerTelemetry called\");\r\n this.setItem(serverTelemetryKey, JSON.stringify(serverTelemetry));\r\n }\r\n\r\n /**\r\n *\r\n */\r\n getAuthorityMetadata(key: string): AuthorityMetadataEntity | null {\r\n const value = this.internalStorage.getItem(key);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getAuthorityMetadata: called, no cache hit\");\r\n return null;\r\n }\r\n const parsedMetadata = this.validateAndParseJson(value);\r\n if (parsedMetadata && AuthorityMetadataEntity.isAuthorityMetadataEntity(key, parsedMetadata)) {\r\n this.logger.trace(\"BrowserCacheManager.getAuthorityMetadata: cache hit\");\r\n return CacheManager.toObject(new AuthorityMetadataEntity(), parsedMetadata);\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n *\r\n */\r\n getAuthorityMetadataKeys(): Array {\r\n const allKeys = this.internalStorage.getKeys();\r\n return allKeys.filter((key) => {\r\n return this.isAuthorityMetadata(key);\r\n });\r\n }\r\n\r\n /**\r\n * Sets wrapper metadata in memory\r\n * @param wrapperSKU\r\n * @param wrapperVersion\r\n */\r\n setWrapperMetadata(wrapperSKU: string, wrapperVersion: string): void {\r\n this.internalStorage.setItem(InMemoryCacheKeys.WRAPPER_SKU, wrapperSKU);\r\n this.internalStorage.setItem(InMemoryCacheKeys.WRAPPER_VER, wrapperVersion);\r\n }\r\n\r\n /**\r\n * Returns wrapper metadata from in-memory storage\r\n */\r\n getWrapperMetadata(): [string, string] {\r\n const sku = this.internalStorage.getItem(InMemoryCacheKeys.WRAPPER_SKU) || Constants.EMPTY_STRING;\r\n const version = this.internalStorage.getItem(InMemoryCacheKeys.WRAPPER_VER) || Constants.EMPTY_STRING;\r\n return [sku, version];\r\n }\r\n\r\n /**\r\n *\r\n * @param entity\r\n */\r\n setAuthorityMetadata(key: string, entity: AuthorityMetadataEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setAuthorityMetadata called\");\r\n this.internalStorage.setItem(key, JSON.stringify(entity));\r\n }\r\n\r\n /**\r\n * Gets the active account\r\n */\r\n getActiveAccount(): AccountInfo | null {\r\n const activeAccountKeyFilters = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT_FILTERS);\r\n const activeAccountValueFilters = this.getItem(activeAccountKeyFilters);\r\n if (!activeAccountValueFilters) {\r\n // if new active account cache type isn't found, it's an old version, so look for that instead\r\n this.logger.trace(\"BrowserCacheManager.getActiveAccount: No active account filters cache schema found, looking for legacy schema\");\r\n const activeAccountKeyLocal = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT);\r\n const activeAccountValueLocal = this.getItem(activeAccountKeyLocal);\r\n if (!activeAccountValueLocal) {\r\n this.logger.trace(\"BrowserCacheManager.getActiveAccount: No active account found\");\r\n return null;\r\n }\r\n const activeAccount = this.getAccountInfoByFilter({ localAccountId: activeAccountValueLocal })[0] || null;\r\n if (activeAccount) {\r\n this.logger.trace(\"BrowserCacheManager.getActiveAccount: Legacy active account cache schema found\");\r\n this.logger.trace(\"BrowserCacheManager.getActiveAccount: Adding active account filters cache schema\");\r\n this.setActiveAccount(activeAccount);\r\n return activeAccount;\r\n }\r\n return null;\r\n }\r\n const activeAccountValueObj = this.validateAndParseJson(activeAccountValueFilters) as AccountInfo;\r\n if (activeAccountValueObj) {\r\n this.logger.trace(\"BrowserCacheManager.getActiveAccount: Active account filters schema found\");\r\n return this.getAccountInfoByFilter({\r\n homeAccountId: activeAccountValueObj.homeAccountId,\r\n localAccountId: activeAccountValueObj.localAccountId\r\n })[0] || null;\r\n }\r\n this.logger.trace(\"BrowserCacheManager.getActiveAccount: No active account found\");\r\n return null;\r\n }\r\n\r\n /**\r\n * Sets the active account's localAccountId in cache\r\n * @param account\r\n */\r\n setActiveAccount(account: AccountInfo | null): void {\r\n const activeAccountKey = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT_FILTERS);\r\n const activeAccountKeyLocal = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT);\r\n if (account) {\r\n this.logger.verbose(\"setActiveAccount: Active account set\");\r\n const activeAccountValue: ActiveAccountFilters = {\r\n homeAccountId: account.homeAccountId,\r\n localAccountId: account.localAccountId\r\n };\r\n this.browserStorage.setItem(activeAccountKey, JSON.stringify(activeAccountValue));\r\n this.browserStorage.setItem(activeAccountKeyLocal, account.localAccountId);\r\n } else {\r\n this.logger.verbose(\"setActiveAccount: No account passed, active account not set\");\r\n this.browserStorage.removeItem(activeAccountKey);\r\n this.browserStorage.removeItem(activeAccountKeyLocal);\r\n }\r\n }\r\n\r\n /**\r\n * Gets a list of accounts that match all of the filters provided\r\n * @param account\r\n */\r\n getAccountInfoByFilter(accountFilter: Partial>): AccountInfo[] {\r\n const allAccounts = this.getAllAccounts();\r\n this.logger.trace(`BrowserCacheManager.getAccountInfoByFilter: total ${allAccounts.length} accounts found`);\r\n\r\n return allAccounts.filter((accountObj) => {\r\n if (accountFilter.username && accountFilter.username.toLowerCase() !== accountObj.username.toLowerCase()) {\r\n return false;\r\n }\r\n\r\n if (accountFilter.homeAccountId && accountFilter.homeAccountId !== accountObj.homeAccountId) {\r\n return false;\r\n }\r\n\r\n if (accountFilter.localAccountId && accountFilter.localAccountId !== accountObj.localAccountId) {\r\n return false;\r\n }\r\n\r\n if (accountFilter.tenantId && accountFilter.tenantId !== accountObj.tenantId) {\r\n return false;\r\n }\r\n\r\n if (accountFilter.environment && accountFilter.environment !== accountObj.environment) {\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n\r\n /**\r\n * Checks the cache for accounts matching loginHint or SID\r\n * @param loginHint\r\n * @param sid\r\n */\r\n getAccountInfoByHints(loginHint?: string, sid?: string): AccountInfo | null {\r\n const matchingAccounts = this.getAllAccounts().filter((accountInfo) => {\r\n if (sid) {\r\n const accountSid = accountInfo.idTokenClaims && accountInfo.idTokenClaims[\"sid\"];\r\n return sid === accountSid;\r\n }\r\n\r\n if (loginHint) {\r\n return loginHint === accountInfo.username;\r\n }\r\n\r\n return false;\r\n });\r\n\r\n if (matchingAccounts.length === 1) {\r\n return matchingAccounts[0];\r\n } else if (matchingAccounts.length > 1) {\r\n throw ClientAuthError.createMultipleMatchingAccountsInCacheError();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * fetch throttling entity from the platform cache\r\n * @param throttlingCacheKey\r\n */\r\n getThrottlingCache(throttlingCacheKey: string): ThrottlingEntity | null {\r\n const value = this.getItem(throttlingCacheKey);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getThrottlingCache: called, no cache hit\");\r\n return null;\r\n }\r\n\r\n const parsedThrottlingCache = this.validateAndParseJson(value);\r\n if (!parsedThrottlingCache || !ThrottlingEntity.isThrottlingEntity(throttlingCacheKey, parsedThrottlingCache)) {\r\n this.logger.trace(\"BrowserCacheManager.getThrottlingCache: called, no cache hit\");\r\n return null;\r\n }\r\n\r\n this.logger.trace(\"BrowserCacheManager.getThrottlingCache: cache hit\");\r\n return CacheManager.toObject(new ThrottlingEntity(), parsedThrottlingCache);\r\n }\r\n\r\n /**\r\n * set throttling entity to the platform cache\r\n * @param throttlingCacheKey\r\n * @param throttlingCache\r\n */\r\n setThrottlingCache(throttlingCacheKey: string, throttlingCache: ThrottlingEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setThrottlingCache called\");\r\n this.setItem(throttlingCacheKey, JSON.stringify(throttlingCache));\r\n }\r\n\r\n /**\r\n * Gets cache item with given key.\r\n * Will retrieve from cookies if storeAuthStateInCookie is set to true.\r\n * @param key\r\n */\r\n getTemporaryCache(cacheKey: string, generateKey?: boolean): string | null {\r\n const key = generateKey ? this.generateCacheKey(cacheKey) : cacheKey;\r\n if (this.cacheConfig.storeAuthStateInCookie) {\r\n const itemCookie = this.getItemCookie(key);\r\n if (itemCookie) {\r\n this.logger.trace(\"BrowserCacheManager.getTemporaryCache: storeAuthStateInCookies set to true, retrieving from cookies\");\r\n return itemCookie;\r\n }\r\n }\r\n\r\n const value = this.temporaryCacheStorage.getItem(key);\r\n if (!value) {\r\n // If temp cache item not found in session/memory, check local storage for items set by old versions\r\n if (this.cacheConfig.cacheLocation === BrowserCacheLocation.LocalStorage) {\r\n const item = this.browserStorage.getItem(key);\r\n if (item) {\r\n this.logger.trace(\"BrowserCacheManager.getTemporaryCache: Temporary cache item found in local storage\");\r\n return item;\r\n }\r\n }\r\n this.logger.trace(\"BrowserCacheManager.getTemporaryCache: No cache item found in local storage\");\r\n return null;\r\n }\r\n this.logger.trace(\"BrowserCacheManager.getTemporaryCache: Temporary cache item returned\");\r\n return value;\r\n }\r\n\r\n /**\r\n * Sets the cache item with the key and value given.\r\n * Stores in cookie if storeAuthStateInCookie is set to true.\r\n * This can cause cookie overflow if used incorrectly.\r\n * @param key\r\n * @param value\r\n */\r\n setTemporaryCache(cacheKey: string, value: string, generateKey?: boolean): void {\r\n const key = generateKey ? this.generateCacheKey(cacheKey) : cacheKey;\r\n\r\n this.temporaryCacheStorage.setItem(key, value);\r\n if (this.cacheConfig.storeAuthStateInCookie) {\r\n this.logger.trace(\"BrowserCacheManager.setTemporaryCache: storeAuthStateInCookie set to true, setting item cookie\");\r\n this.setItemCookie(key, value);\r\n }\r\n }\r\n\r\n /**\r\n * Removes the cache item with the given key.\r\n * Will also clear the cookie item if storeAuthStateInCookie is set to true.\r\n * @param key\r\n */\r\n removeItem(key: string): void {\r\n this.browserStorage.removeItem(key);\r\n this.temporaryCacheStorage.removeItem(key);\r\n if (this.cacheConfig.storeAuthStateInCookie) {\r\n this.logger.trace(\"BrowserCacheManager.removeItem: storeAuthStateInCookie is true, clearing item cookie\");\r\n this.clearItemCookie(key);\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether key is in cache.\r\n * @param key\r\n */\r\n containsKey(key: string): boolean {\r\n return this.browserStorage.containsKey(key) || this.temporaryCacheStorage.containsKey(key);\r\n }\r\n\r\n /**\r\n * Gets all keys in window.\r\n */\r\n getKeys(): string[] {\r\n return [\r\n ...this.browserStorage.getKeys(),\r\n ...this.temporaryCacheStorage.getKeys()\r\n ];\r\n }\r\n\r\n /**\r\n * Clears all cache entries created by MSAL.\r\n */\r\n async clear(): Promise {\r\n // Removes all accounts and their credentials\r\n await this.removeAllAccounts();\r\n this.removeAppMetadata();\r\n\r\n // Removes all remaining MSAL cache items\r\n this.getKeys().forEach((cacheKey: string) => {\r\n // Check if key contains msal prefix; For now, we are clearing all the cache items created by MSAL.js\r\n if ((this.browserStorage.containsKey(cacheKey) || this.temporaryCacheStorage.containsKey(cacheKey)) && ((cacheKey.indexOf(Constants.CACHE_PREFIX) !== -1) || (cacheKey.indexOf(this.clientId) !== -1))) {\r\n this.removeItem(cacheKey);\r\n }\r\n });\r\n\r\n this.internalStorage.clear();\r\n }\r\n\r\n /**\r\n * Add value to cookies\r\n * @param cookieName\r\n * @param cookieValue\r\n * @param expires\r\n */\r\n setItemCookie(cookieName: string, cookieValue: string, expires?: number): void {\r\n let cookieStr = `${encodeURIComponent(cookieName)}=${encodeURIComponent(cookieValue)};path=/;SameSite=Lax;`;\r\n if (expires) {\r\n const expireTime = this.getCookieExpirationTime(expires);\r\n cookieStr += `expires=${expireTime};`;\r\n }\r\n\r\n if (this.cacheConfig.secureCookies) {\r\n cookieStr += \"Secure;\";\r\n }\r\n\r\n document.cookie = cookieStr;\r\n }\r\n\r\n /**\r\n * Get one item by key from cookies\r\n * @param cookieName\r\n */\r\n getItemCookie(cookieName: string): string {\r\n const name = `${encodeURIComponent(cookieName)}=`;\r\n const cookieList = document.cookie.split(\";\");\r\n for (let i: number = 0; i < cookieList.length; i++) {\r\n let cookie = cookieList[i];\r\n while (cookie.charAt(0) === \" \") {\r\n cookie = cookie.substring(1);\r\n }\r\n if (cookie.indexOf(name) === 0) {\r\n return decodeURIComponent(cookie.substring(name.length, cookie.length));\r\n }\r\n }\r\n return Constants.EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * Clear all msal-related cookies currently set in the browser. Should only be used to clear temporary cache items.\r\n */\r\n clearMsalCookies(): void {\r\n const cookiePrefix = `${Constants.CACHE_PREFIX}.${this.clientId}`;\r\n const cookieList = document.cookie.split(\";\");\r\n cookieList.forEach((cookie: string): void => {\r\n while (cookie.charAt(0) === \" \") {\r\n // eslint-disable-next-line no-param-reassign\r\n cookie = cookie.substring(1);\r\n }\r\n if (cookie.indexOf(cookiePrefix) === 0) {\r\n const cookieKey = cookie.split(\"=\")[0];\r\n this.clearItemCookie(cookieKey);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Clear an item in the cookies by key\r\n * @param cookieName\r\n */\r\n clearItemCookie(cookieName: string): void {\r\n this.setItemCookie(cookieName, Constants.EMPTY_STRING, -1);\r\n }\r\n\r\n /**\r\n * Get cookie expiration time\r\n * @param cookieLifeDays\r\n */\r\n getCookieExpirationTime(cookieLifeDays: number): string {\r\n const today = new Date();\r\n const expr = new Date(today.getTime() + cookieLifeDays * this.COOKIE_LIFE_MULTIPLIER);\r\n return expr.toUTCString();\r\n }\r\n\r\n /**\r\n * Gets the cache object referenced by the browser\r\n */\r\n getCache(): object {\r\n return this.browserStorage;\r\n }\r\n\r\n /**\r\n * interface compat, we cannot overwrite browser cache; Functionality is supported by individual entities in browser\r\n */\r\n setCache(): void {\r\n // sets nothing\r\n }\r\n\r\n /**\r\n * Prepend msal. to each key; Skip for any JSON object as Key (defined schemas do not need the key appended: AccessToken Keys or the upcoming schema)\r\n * @param key\r\n * @param addInstanceId\r\n */\r\n generateCacheKey(key: string): string {\r\n const generatedKey = this.validateAndParseJson(key);\r\n if (!generatedKey) {\r\n if (StringUtils.startsWith(key, Constants.CACHE_PREFIX) || StringUtils.startsWith(key, PersistentCacheKeys.ADAL_ID_TOKEN)) {\r\n return key;\r\n }\r\n return `${Constants.CACHE_PREFIX}.${this.clientId}.${key}`;\r\n }\r\n\r\n return JSON.stringify(key);\r\n }\r\n\r\n /**\r\n * Create authorityKey to cache authority\r\n * @param state\r\n */\r\n generateAuthorityKey(stateString: string): string {\r\n const {\r\n libraryState: {\r\n id: stateId\r\n }\r\n } = ProtocolUtils.parseRequestState(this.cryptoImpl, stateString);\r\n\r\n return this.generateCacheKey(`${TemporaryCacheKeys.AUTHORITY}.${stateId}`);\r\n }\r\n\r\n /**\r\n * Create Nonce key to cache nonce\r\n * @param state\r\n */\r\n generateNonceKey(stateString: string): string {\r\n const {\r\n libraryState: {\r\n id: stateId\r\n }\r\n } = ProtocolUtils.parseRequestState(this.cryptoImpl, stateString);\r\n\r\n return this.generateCacheKey(`${TemporaryCacheKeys.NONCE_IDTOKEN}.${stateId}`);\r\n }\r\n\r\n /**\r\n * Creates full cache key for the request state\r\n * @param stateString State string for the request\r\n */\r\n generateStateKey(stateString: string): string {\r\n // Use the library state id to key temp storage for uniqueness for multiple concurrent requests\r\n const {\r\n libraryState: {\r\n id: stateId\r\n }\r\n } = ProtocolUtils.parseRequestState(this.cryptoImpl, stateString);\r\n return this.generateCacheKey(`${TemporaryCacheKeys.REQUEST_STATE}.${stateId}`);\r\n }\r\n\r\n /**\r\n * Gets the cached authority based on the cached state. Returns empty if no cached state found.\r\n */\r\n getCachedAuthority(cachedState: string): string | null {\r\n const stateCacheKey = this.generateStateKey(cachedState);\r\n const state = this.getTemporaryCache(stateCacheKey);\r\n if (!state) {\r\n return null;\r\n }\r\n\r\n const authorityCacheKey = this.generateAuthorityKey(state);\r\n return this.getTemporaryCache(authorityCacheKey);\r\n }\r\n\r\n /**\r\n * Updates account, authority, and state in cache\r\n * @param serverAuthenticationRequest\r\n * @param account\r\n */\r\n updateCacheEntries(state: string, nonce: string, authorityInstance: string, loginHint: string, account: AccountInfo | null): void {\r\n this.logger.trace(\"BrowserCacheManager.updateCacheEntries called\");\r\n // Cache the request state\r\n const stateCacheKey = this.generateStateKey(state);\r\n this.setTemporaryCache(stateCacheKey, state, false);\r\n\r\n // Cache the nonce\r\n const nonceCacheKey = this.generateNonceKey(state);\r\n this.setTemporaryCache(nonceCacheKey, nonce, false);\r\n\r\n // Cache authorityKey\r\n const authorityCacheKey = this.generateAuthorityKey(state);\r\n this.setTemporaryCache(authorityCacheKey, authorityInstance, false);\r\n\r\n if (account) {\r\n const ccsCredential: CcsCredential = {\r\n credential: account.homeAccountId,\r\n type: CcsCredentialType.HOME_ACCOUNT_ID\r\n };\r\n this.setTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, JSON.stringify(ccsCredential), true);\r\n } else if (!StringUtils.isEmpty(loginHint)) {\r\n const ccsCredential: CcsCredential = {\r\n credential: loginHint,\r\n type: CcsCredentialType.UPN\r\n };\r\n this.setTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, JSON.stringify(ccsCredential), true);\r\n }\r\n }\r\n\r\n /**\r\n * Reset all temporary cache items\r\n * @param state\r\n */\r\n resetRequestCache(state: string): void {\r\n this.logger.trace(\"BrowserCacheManager.resetRequestCache called\");\r\n // check state and remove associated cache items\r\n if (!StringUtils.isEmpty(state)) {\r\n this.getKeys().forEach(key => {\r\n if (key.indexOf(state) !== -1) {\r\n this.removeItem(key);\r\n }\r\n });\r\n }\r\n\r\n // delete generic interactive request parameters\r\n if (state) {\r\n this.removeItem(this.generateStateKey(state));\r\n this.removeItem(this.generateNonceKey(state));\r\n this.removeItem(this.generateAuthorityKey(state));\r\n }\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS));\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.ORIGIN_URI));\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.URL_HASH));\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.CORRELATION_ID));\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.CCS_CREDENTIAL));\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.NATIVE_REQUEST));\r\n this.setInteractionInProgress(false);\r\n }\r\n\r\n /**\r\n * Removes temporary cache for the provided state\r\n * @param stateString\r\n */\r\n cleanRequestByState(stateString: string): void {\r\n this.logger.trace(\"BrowserCacheManager.cleanRequestByState called\");\r\n // Interaction is completed - remove interaction status.\r\n if (stateString) {\r\n const stateKey = this.generateStateKey(stateString);\r\n const cachedState = this.temporaryCacheStorage.getItem(stateKey);\r\n this.logger.infoPii(`BrowserCacheManager.cleanRequestByState: Removing temporary cache items for state: ${cachedState}`);\r\n this.resetRequestCache(cachedState || Constants.EMPTY_STRING);\r\n }\r\n this.clearMsalCookies();\r\n }\r\n\r\n /**\r\n * Looks in temporary cache for any state values with the provided interactionType and removes all temporary cache items for that state\r\n * Used in scenarios where temp cache needs to be cleaned but state is not known, such as clicking browser back button.\r\n * @param interactionType\r\n */\r\n cleanRequestByInteractionType(interactionType: InteractionType): void {\r\n this.logger.trace(\"BrowserCacheManager.cleanRequestByInteractionType called\");\r\n // Loop through all keys to find state key\r\n this.getKeys().forEach((key) => {\r\n // If this key is not the state key, move on\r\n if (key.indexOf(TemporaryCacheKeys.REQUEST_STATE) === -1) {\r\n return;\r\n }\r\n\r\n // Retrieve state value, return if not a valid value\r\n const stateValue = this.temporaryCacheStorage.getItem(key);\r\n if (!stateValue) {\r\n return;\r\n }\r\n // Extract state and ensure it matches given InteractionType, then clean request cache\r\n const parsedState = BrowserProtocolUtils.extractBrowserRequestState(this.cryptoImpl, stateValue);\r\n if (parsedState && parsedState.interactionType === interactionType) {\r\n this.logger.infoPii(`BrowserCacheManager.cleanRequestByInteractionType: Removing temporary cache items for state: ${stateValue}`);\r\n this.resetRequestCache(stateValue);\r\n }\r\n });\r\n this.clearMsalCookies();\r\n this.setInteractionInProgress(false);\r\n }\r\n\r\n cacheCodeRequest(authCodeRequest: CommonAuthorizationCodeRequest, browserCrypto: ICrypto): void {\r\n this.logger.trace(\"BrowserCacheManager.cacheCodeRequest called\");\r\n\r\n const encodedValue = browserCrypto.base64Encode(JSON.stringify(authCodeRequest));\r\n this.setTemporaryCache(TemporaryCacheKeys.REQUEST_PARAMS, encodedValue, true);\r\n }\r\n\r\n /**\r\n * Gets the token exchange parameters from the cache. Throws an error if nothing is found.\r\n */\r\n getCachedRequest(state: string, browserCrypto: ICrypto): CommonAuthorizationCodeRequest {\r\n this.logger.trace(\"BrowserCacheManager.getCachedRequest called\");\r\n // Get token request from cache and parse as TokenExchangeParameters.\r\n const encodedTokenRequest = this.getTemporaryCache(TemporaryCacheKeys.REQUEST_PARAMS, true);\r\n if (!encodedTokenRequest) {\r\n throw BrowserAuthError.createNoTokenRequestCacheError();\r\n }\r\n\r\n const parsedRequest = this.validateAndParseJson(browserCrypto.base64Decode(encodedTokenRequest)) as CommonAuthorizationCodeRequest;\r\n if (!parsedRequest) {\r\n throw BrowserAuthError.createUnableToParseTokenRequestCacheError();\r\n }\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS));\r\n\r\n // Get cached authority and use if no authority is cached with request.\r\n if (StringUtils.isEmpty(parsedRequest.authority)) {\r\n const authorityCacheKey: string = this.generateAuthorityKey(state);\r\n const cachedAuthority = this.getTemporaryCache(authorityCacheKey);\r\n if (!cachedAuthority) {\r\n throw BrowserAuthError.createNoCachedAuthorityError();\r\n }\r\n parsedRequest.authority = cachedAuthority;\r\n }\r\n\r\n return parsedRequest;\r\n }\r\n\r\n /**\r\n * Gets cached native request for redirect flows\r\n */\r\n getCachedNativeRequest(): NativeTokenRequest | null {\r\n this.logger.trace(\"BrowserCacheManager.getCachedNativeRequest called\");\r\n const cachedRequest = this.getTemporaryCache(TemporaryCacheKeys.NATIVE_REQUEST, true);\r\n if (!cachedRequest) {\r\n this.logger.trace(\"BrowserCacheManager.getCachedNativeRequest: No cached native request found\");\r\n return null;\r\n }\r\n\r\n const parsedRequest = this.validateAndParseJson(cachedRequest) as NativeTokenRequest;\r\n if (!parsedRequest) {\r\n this.logger.error(\"BrowserCacheManager.getCachedNativeRequest: Unable to parse native request\");\r\n return null;\r\n }\r\n\r\n return parsedRequest;\r\n }\r\n\r\n isInteractionInProgress(matchClientId?: boolean): boolean {\r\n const clientId = this.getInteractionInProgress();\r\n\r\n if (matchClientId) {\r\n return clientId === this.clientId;\r\n } else {\r\n return !!clientId;\r\n }\r\n }\r\n\r\n getInteractionInProgress(): string | null {\r\n const key = `${Constants.CACHE_PREFIX}.${TemporaryCacheKeys.INTERACTION_STATUS_KEY}`;\r\n return this.getTemporaryCache(key, false);\r\n }\r\n\r\n setInteractionInProgress(inProgress: boolean): void {\r\n // Ensure we don't overwrite interaction in progress for a different clientId\r\n const key = `${Constants.CACHE_PREFIX}.${TemporaryCacheKeys.INTERACTION_STATUS_KEY}`;\r\n if (inProgress) {\r\n if (this.getInteractionInProgress()) {\r\n throw BrowserAuthError.createInteractionInProgressError();\r\n } else {\r\n // No interaction is in progress\r\n this.setTemporaryCache(key, this.clientId, false);\r\n }\r\n } else if (!inProgress && this.getInteractionInProgress() === this.clientId) {\r\n this.removeItem(key);\r\n }\r\n }\r\n\r\n /**\r\n * Returns username retrieved from ADAL or MSAL v1 idToken\r\n */\r\n getLegacyLoginHint(): string | null {\r\n // Only check for adal/msal token if no SSO params are being used\r\n const adalIdTokenString = this.getTemporaryCache(PersistentCacheKeys.ADAL_ID_TOKEN);\r\n if (adalIdTokenString) {\r\n this.browserStorage.removeItem(PersistentCacheKeys.ADAL_ID_TOKEN);\r\n this.logger.verbose(\"Cached ADAL id token retrieved.\");\r\n }\r\n\r\n // Check for cached MSAL v1 id token\r\n const msalIdTokenString = this.getTemporaryCache(PersistentCacheKeys.ID_TOKEN, true);\r\n if (msalIdTokenString) {\r\n this.removeItem(this.generateCacheKey(PersistentCacheKeys.ID_TOKEN));\r\n this.logger.verbose(\"Cached MSAL.js v1 id token retrieved\");\r\n }\r\n\r\n const cachedIdTokenString = msalIdTokenString || adalIdTokenString;\r\n if (cachedIdTokenString) {\r\n const cachedIdToken = new IdToken(cachedIdTokenString, this.cryptoImpl);\r\n if (cachedIdToken.claims && cachedIdToken.claims.preferred_username) {\r\n this.logger.verbose(\"No SSO params used and ADAL/MSAL v1 token retrieved, setting ADAL/MSAL v1 preferred_username as loginHint\");\r\n return cachedIdToken.claims.preferred_username;\r\n }\r\n else if (cachedIdToken.claims && cachedIdToken.claims.upn) {\r\n this.logger.verbose(\"No SSO params used and ADAL/MSAL v1 token retrieved, setting ADAL/MSAL v1 upn as loginHint\");\r\n return cachedIdToken.claims.upn;\r\n }\r\n else {\r\n this.logger.verbose(\"No SSO params used and ADAL/MSAL v1 token retrieved, however, no account hint claim found. Enable preferred_username or upn id token claim to get SSO.\");\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Updates a credential's cache key if the current cache key is outdated\r\n */\r\n updateCredentialCacheKey(currentCacheKey: string, credential: ValidCredentialType): string {\r\n const updatedCacheKey = credential.generateCredentialKey();\r\n\r\n if (currentCacheKey !== updatedCacheKey) {\r\n const cacheItem = this.getItem(currentCacheKey);\r\n if (cacheItem) {\r\n this.removeItem(currentCacheKey);\r\n this.setItem(updatedCacheKey, cacheItem);\r\n this.logger.verbose(`Updated an outdated ${credential.credentialType} cache key`);\r\n return updatedCacheKey;\r\n } else {\r\n this.logger.error(`Attempted to update an outdated ${credential.credentialType} cache key but no item matching the outdated key was found in storage`);\r\n }\r\n }\r\n\r\n return currentCacheKey;\r\n }\r\n\r\n /**\r\n * Returns application id as redirect context during AcquireTokenRedirect flow.\r\n */\r\n getRedirectRequestContext(): string | null {\r\n return this.getTemporaryCache(TemporaryCacheKeys.REDIRECT_CONTEXT, true);\r\n }\r\n\r\n /**\r\n * Sets application id as the redirect context during AcquireTokenRedirect flow.\r\n * @param value\r\n */\r\n setRedirectRequestContext(value: string): void {\r\n this.setTemporaryCache(TemporaryCacheKeys.REDIRECT_CONTEXT, value, true);\r\n }\r\n}\r\n\r\nexport const DEFAULT_BROWSER_CACHE_MANAGER = (clientId: string, logger: Logger): BrowserCacheManager => {\r\n const cacheOptions: Required = {\r\n cacheLocation: BrowserCacheLocation.MemoryStorage,\r\n temporaryCacheLocation: BrowserCacheLocation.MemoryStorage,\r\n storeAuthStateInCookie: false,\r\n secureCookies: false,\r\n cacheMigrationEnabled: false,\r\n claimsBasedCachingEnabled: true\r\n };\r\n return new BrowserCacheManager(clientId, cacheOptions, DEFAULT_CRYPTO_IMPLEMENTATION, logger);\r\n};\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { INetworkModule } from \"../network/INetworkModule\";\r\nimport { DEFAULT_CRYPTO_IMPLEMENTATION, ICrypto } from \"../crypto/ICrypto\";\r\nimport { AuthError } from \"../error/AuthError\";\r\nimport { ILoggerCallback, Logger, LogLevel } from \"../logger/Logger\";\r\nimport { Constants } from \"../utils/Constants\";\r\nimport { version } from \"../packageMetadata\";\r\nimport { Authority } from \"../authority/Authority\";\r\nimport { AzureCloudInstance } from \"../authority/AuthorityOptions\";\r\nimport { CacheManager, DefaultStorageClass } from \"../cache/CacheManager\";\r\nimport { ServerTelemetryManager } from \"../telemetry/server/ServerTelemetryManager\";\r\nimport { ICachePlugin } from \"../cache/interface/ICachePlugin\";\r\nimport { ISerializableTokenCache } from \"../cache/interface/ISerializableTokenCache\";\r\nimport { ClientCredentials } from \"../account/ClientCredentials\";\r\n\r\n// Token renewal offset default in seconds\r\nconst DEFAULT_TOKEN_RENEWAL_OFFSET_SEC = 300;\r\n\r\n/**\r\n * Use the configuration object to configure MSAL Modules and initialize the base interfaces for MSAL.\r\n *\r\n * This object allows you to configure important elements of MSAL functionality:\r\n * - authOptions - Authentication for application\r\n * - cryptoInterface - Implementation of crypto functions\r\n * - libraryInfo - Library metadata\r\n * - telemetry - Telemetry options and data\r\n * - loggerOptions - Logging for application\r\n * - cacheOptions - Cache options for application\r\n * - networkInterface - Network implementation\r\n * - storageInterface - Storage implementation\r\n * - systemOptions - Additional library options\r\n * - clientCredentials - Credentials options for confidential clients\r\n */\r\nexport type ClientConfiguration = {\r\n authOptions: AuthOptions,\r\n systemOptions?: SystemOptions,\r\n loggerOptions?: LoggerOptions,\r\n cacheOptions?: CacheOptions,\r\n storageInterface?: CacheManager,\r\n networkInterface?: INetworkModule,\r\n cryptoInterface?: ICrypto,\r\n clientCredentials?: ClientCredentials,\r\n libraryInfo?: LibraryInfo\r\n telemetry?: TelemetryOptions,\r\n serverTelemetryManager?: ServerTelemetryManager | null,\r\n persistencePlugin?: ICachePlugin | null,\r\n serializableCache?: ISerializableTokenCache | null, \r\n};\r\n\r\nexport type CommonClientConfiguration = {\r\n authOptions: Required,\r\n systemOptions: Required,\r\n loggerOptions : Required,\r\n cacheOptions: Required,\r\n storageInterface: CacheManager,\r\n networkInterface : INetworkModule,\r\n cryptoInterface : Required,\r\n libraryInfo : LibraryInfo,\r\n telemetry: Required,\r\n serverTelemetryManager: ServerTelemetryManager | null,\r\n clientCredentials: ClientCredentials,\r\n persistencePlugin: ICachePlugin | null,\r\n serializableCache: ISerializableTokenCache | null, \r\n};\r\n\r\n/**\r\n * Use this to configure the auth options in the ClientConfiguration object\r\n *\r\n * - clientId - Client ID of your app registered with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview in Microsoft Identity Platform\r\n * - authority - You can configure a specific authority, defaults to \" \" or \"https://login.microsoftonline.com/common\"\r\n * - knownAuthorities - An array of URIs that are known to be valid. Used in B2C scenarios.\r\n * - cloudDiscoveryMetadata - A string containing the cloud discovery response. Used in AAD scenarios.\r\n * - clientCapabilities - Array of capabilities which will be added to the claims.access_token.xms_cc request property on every network request.\r\n * - protocolMode - Enum that represents the protocol that msal follows. Used for configuring proper endpoints.\r\n * - skipAuthorityMetadataCache - A flag to choose whether to use or not use the local metadata cache during authority initialization. Defaults to false.\r\n */\r\nexport type AuthOptions = {\r\n clientId: string;\r\n authority: Authority;\r\n clientCapabilities?: Array;\r\n azureCloudOptions?: AzureCloudOptions;\r\n skipAuthorityMetadataCache?: boolean;\r\n};\r\n\r\n/**\r\n * Use this to configure token renewal info in the Configuration object\r\n *\r\n * - tokenRenewalOffsetSeconds - Sets the window of offset needed to renew the token before expiry\r\n */\r\nexport type SystemOptions = {\r\n tokenRenewalOffsetSeconds?: number;\r\n preventCorsPreflight?: boolean;\r\n};\r\n\r\n/**\r\n * Use this to configure the logging that MSAL does, by configuring logger options in the Configuration object\r\n *\r\n * - loggerCallback - Callback for logger\r\n * - piiLoggingEnabled - Sets whether pii logging is enabled\r\n * - logLevel - Sets the level at which logging happens\r\n * - correlationId - Sets the correlationId printed by the logger\r\n */\r\nexport type LoggerOptions = {\r\n loggerCallback?: ILoggerCallback,\r\n piiLoggingEnabled?: boolean,\r\n logLevel?: LogLevel,\r\n correlationId?: string\r\n};\r\n\r\n/**\r\n * Use this to configure credential cache preferences in the ClientConfiguration object\r\n *\r\n * - claimsBasedCachingEnabled - Sets whether tokens should be cached based on the claims hash. Default is true.\r\n */\r\nexport type CacheOptions = {\r\n claimsBasedCachingEnabled?: boolean;\r\n};\r\n\r\n/**\r\n * Library-specific options\r\n */\r\nexport type LibraryInfo = {\r\n sku: string,\r\n version: string,\r\n cpu: string,\r\n os: string\r\n};\r\n\r\n/**\r\n * AzureCloudInstance specific options\r\n *\r\n * - azureCloudInstance - string enum providing short notation for soverign and public cloud authorities\r\n * - tenant - provision to provide the tenant info\r\n */\r\nexport type AzureCloudOptions = {\r\n azureCloudInstance: AzureCloudInstance;\r\n tenant?: string,\r\n};\r\n\r\nexport type TelemetryOptions = {\r\n application: ApplicationTelemetry;\r\n};\r\n\r\n/**\r\n * Telemetry information sent on request\r\n * - appName: Unique string name of an application\r\n * - appVersion: Version of the application using MSAL\r\n */\r\nexport type ApplicationTelemetry = {\r\n appName: string;\r\n appVersion: string;\r\n};\r\n\r\nexport const DEFAULT_SYSTEM_OPTIONS: Required = {\r\n tokenRenewalOffsetSeconds: DEFAULT_TOKEN_RENEWAL_OFFSET_SEC,\r\n preventCorsPreflight: false\r\n};\r\n\r\nconst DEFAULT_LOGGER_IMPLEMENTATION: Required = {\r\n loggerCallback: () => {\r\n // allow users to not set loggerCallback\r\n },\r\n piiLoggingEnabled: false,\r\n logLevel: LogLevel.Info,\r\n correlationId: Constants.EMPTY_STRING\r\n};\r\n\r\nconst DEFAULT_CACHE_OPTIONS: Required = {\r\n claimsBasedCachingEnabled: true\r\n};\r\n\r\nconst DEFAULT_NETWORK_IMPLEMENTATION: INetworkModule = {\r\n async sendGetRequestAsync(): Promise {\r\n const notImplErr = \"Network interface - sendGetRequestAsync() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async sendPostRequestAsync(): Promise {\r\n const notImplErr = \"Network interface - sendPostRequestAsync() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n};\r\n\r\nconst DEFAULT_LIBRARY_INFO: LibraryInfo = {\r\n sku: Constants.SKU,\r\n version: version,\r\n cpu: Constants.EMPTY_STRING,\r\n os: Constants.EMPTY_STRING\r\n};\r\n\r\nconst DEFAULT_CLIENT_CREDENTIALS: ClientCredentials = {\r\n clientSecret: Constants.EMPTY_STRING,\r\n clientAssertion: undefined\r\n};\r\n\r\nconst DEFAULT_AZURE_CLOUD_OPTIONS: AzureCloudOptions = {\r\n azureCloudInstance: AzureCloudInstance.None,\r\n tenant: `${Constants.DEFAULT_COMMON_TENANT}`\r\n};\r\n\r\nconst DEFAULT_TELEMETRY_OPTIONS: Required = {\r\n application: {\r\n appName: \"\",\r\n appVersion: \"\"\r\n }\r\n};\r\n\r\n/**\r\n * Function that sets the default options when not explicitly configured from app developer\r\n *\r\n * @param Configuration\r\n *\r\n * @returns Configuration\r\n */\r\nexport function buildClientConfiguration(\r\n {\r\n authOptions: userAuthOptions,\r\n systemOptions: userSystemOptions,\r\n loggerOptions: userLoggerOption,\r\n cacheOptions: userCacheOptions,\r\n storageInterface: storageImplementation,\r\n networkInterface: networkImplementation,\r\n cryptoInterface: cryptoImplementation,\r\n clientCredentials: clientCredentials,\r\n libraryInfo: libraryInfo,\r\n telemetry: telemetry,\r\n serverTelemetryManager: serverTelemetryManager,\r\n persistencePlugin: persistencePlugin,\r\n serializableCache: serializableCache, \r\n }: ClientConfiguration): CommonClientConfiguration {\r\n\r\n const loggerOptions = { ...DEFAULT_LOGGER_IMPLEMENTATION, ...userLoggerOption };\r\n\r\n return {\r\n authOptions: buildAuthOptions(userAuthOptions),\r\n systemOptions: { ...DEFAULT_SYSTEM_OPTIONS, ...userSystemOptions },\r\n loggerOptions: loggerOptions,\r\n cacheOptions: {...DEFAULT_CACHE_OPTIONS, ...userCacheOptions },\r\n storageInterface: storageImplementation || new DefaultStorageClass(userAuthOptions.clientId, DEFAULT_CRYPTO_IMPLEMENTATION, new Logger(loggerOptions)),\r\n networkInterface: networkImplementation || DEFAULT_NETWORK_IMPLEMENTATION,\r\n cryptoInterface: cryptoImplementation || DEFAULT_CRYPTO_IMPLEMENTATION,\r\n clientCredentials: clientCredentials || DEFAULT_CLIENT_CREDENTIALS,\r\n libraryInfo: { ...DEFAULT_LIBRARY_INFO, ...libraryInfo },\r\n telemetry: { ...DEFAULT_TELEMETRY_OPTIONS, ...telemetry },\r\n serverTelemetryManager: serverTelemetryManager || null,\r\n persistencePlugin: persistencePlugin || null,\r\n serializableCache: serializableCache || null, \r\n };\r\n}\r\n\r\n/**\r\n * Construct authoptions from the client and platform passed values\r\n * @param authOptions\r\n */\r\nfunction buildAuthOptions(authOptions: AuthOptions): Required {\r\n return {\r\n clientCapabilities: [],\r\n azureCloudOptions: DEFAULT_AZURE_CLOUD_OPTIONS,\r\n skipAuthorityMetadataCache: false,\r\n ...authOptions\r\n };\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError } from \"../error/AuthError\";\r\nimport { NetworkResponse } from \"./NetworkManager\";\r\n\r\n/**\r\n * Options allowed by network request APIs.\r\n */\r\nexport type NetworkRequestOptions = {\r\n headers?: Record,\r\n body?: string;\r\n};\r\n\r\n/**\r\n * Client network interface to send backend requests.\r\n * @interface\r\n */\r\nexport interface INetworkModule {\r\n\r\n /**\r\n * Interface function for async network \"GET\" requests. Based on the Fetch standard: https://fetch.spec.whatwg.org/\r\n * @param url\r\n * @param requestParams\r\n * @param enableCaching\r\n */\r\n sendGetRequestAsync(url: string, options?: NetworkRequestOptions, cancellationToken?: number): Promise>;\r\n\r\n /**\r\n * Interface function for async network \"POST\" requests. Based on the Fetch standard: https://fetch.spec.whatwg.org/\r\n * @param url\r\n * @param requestParams\r\n * @param enableCaching\r\n */\r\n sendPostRequestAsync(url: string, options?: NetworkRequestOptions): Promise>;\r\n}\r\n\r\nexport const StubbedNetworkModule: INetworkModule = {\r\n sendGetRequestAsync: () => {\r\n const notImplErr = \"Network interface - sendGetRequestAsync() has not been implemented for the Network interface.\";\r\n return Promise.reject(AuthError.createUnexpectedError(notImplErr));\r\n },\r\n sendPostRequestAsync: () => {\r\n const notImplErr = \"Network interface - sendPostRequestAsync() has not been implemented for the Network interface.\";\r\n return Promise.reject(AuthError.createUnexpectedError(notImplErr));\r\n }\r\n};\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants, INetworkModule, NetworkRequestOptions, NetworkResponse } from \"@azure/msal-common\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { HTTP_REQUEST_TYPE } from \"../utils/BrowserConstants\";\r\n\r\n/**\r\n * This class implements the Fetch API for GET and POST requests. See more here: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API\r\n */\r\nexport class FetchClient implements INetworkModule {\r\n\r\n /**\r\n * Fetch Client for REST endpoints - Get request\r\n * @param url \r\n * @param headers \r\n * @param body \r\n */\r\n async sendGetRequestAsync(url: string, options?: NetworkRequestOptions): Promise> {\r\n let response;\r\n try {\r\n response = await fetch(url, {\r\n method: HTTP_REQUEST_TYPE.GET,\r\n headers: this.getFetchHeaders(options)\r\n });\r\n } catch (e) {\r\n if (window.navigator.onLine) {\r\n throw BrowserAuthError.createGetRequestFailedError(e, url);\r\n } else {\r\n throw BrowserAuthError.createNoNetworkConnectivityError();\r\n }\r\n }\r\n\r\n try {\r\n return {\r\n headers: this.getHeaderDict(response.headers),\r\n body: await response.json() as T,\r\n status: response.status\r\n };\r\n } catch (e) {\r\n throw BrowserAuthError.createFailedToParseNetworkResponseError(url);\r\n }\r\n }\r\n\r\n /**\r\n * Fetch Client for REST endpoints - Post request\r\n * @param url \r\n * @param headers \r\n * @param body \r\n */\r\n async sendPostRequestAsync(url: string, options?: NetworkRequestOptions): Promise> {\r\n const reqBody = (options && options.body) || Constants.EMPTY_STRING;\r\n\r\n let response;\r\n try {\r\n response = await fetch(url, {\r\n method: HTTP_REQUEST_TYPE.POST,\r\n headers: this.getFetchHeaders(options),\r\n body: reqBody\r\n });\r\n } catch (e) {\r\n if (window.navigator.onLine) {\r\n throw BrowserAuthError.createPostRequestFailedError(e, url);\r\n } else {\r\n throw BrowserAuthError.createNoNetworkConnectivityError();\r\n }\r\n }\r\n\r\n try {\r\n return {\r\n headers: this.getHeaderDict(response.headers),\r\n body: await response.json() as T,\r\n status: response.status\r\n };\r\n } catch (e) {\r\n throw BrowserAuthError.createFailedToParseNetworkResponseError(url);\r\n }\r\n }\r\n\r\n /**\r\n * Get Fetch API Headers object from string map\r\n * @param inputHeaders \r\n */\r\n private getFetchHeaders(options?: NetworkRequestOptions): Headers {\r\n const headers = new Headers();\r\n if (!(options && options.headers)) {\r\n return headers;\r\n }\r\n const optionsHeaders = options.headers;\r\n Object.keys(optionsHeaders).forEach((key) => {\r\n headers.append(key, optionsHeaders[key]);\r\n });\r\n return headers;\r\n }\r\n\r\n private getHeaderDict(headers: Headers): Record {\r\n const headerDict: Record = {};\r\n headers.forEach((value: string, key: string) => {\r\n headerDict[key] = value;\r\n });\r\n return headerDict;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { INetworkModule, NetworkRequestOptions, NetworkResponse } from \"@azure/msal-common\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { HTTP_REQUEST_TYPE } from \"../utils/BrowserConstants\";\r\n\r\n/**\r\n * This client implements the XMLHttpRequest class to send GET and POST requests.\r\n */\r\nexport class XhrClient implements INetworkModule {\r\n\r\n /**\r\n * XhrClient for REST endpoints - Get request\r\n * @param url \r\n * @param headers \r\n * @param body \r\n */\r\n async sendGetRequestAsync(url: string, options?: NetworkRequestOptions): Promise> {\r\n return this.sendRequestAsync(url, HTTP_REQUEST_TYPE.GET, options);\r\n }\r\n\r\n /**\r\n * XhrClient for REST endpoints - Post request\r\n * @param url \r\n * @param headers \r\n * @param body \r\n */\r\n async sendPostRequestAsync(url: string, options?: NetworkRequestOptions): Promise> {\r\n return this.sendRequestAsync(url, HTTP_REQUEST_TYPE.POST, options);\r\n }\r\n\r\n /**\r\n * Helper for XhrClient requests.\r\n * @param url \r\n * @param method \r\n * @param options \r\n */\r\n private sendRequestAsync(url: string, method: HTTP_REQUEST_TYPE, options?: NetworkRequestOptions): Promise> {\r\n return new Promise>((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(method, url, /* async: */ true);\r\n this.setXhrHeaders(xhr, options);\r\n xhr.onload = (): void => {\r\n if (xhr.status < 200 || xhr.status >= 300) {\r\n if (method === HTTP_REQUEST_TYPE.POST) {\r\n reject(BrowserAuthError.createPostRequestFailedError(`Failed with status ${xhr.status}`, url));\r\n } else {\r\n reject(BrowserAuthError.createGetRequestFailedError(`Failed with status ${xhr.status}`, url));\r\n }\r\n }\r\n try {\r\n const jsonResponse = JSON.parse(xhr.responseText) as T;\r\n const networkResponse: NetworkResponse = {\r\n headers: this.getHeaderDict(xhr),\r\n body: jsonResponse,\r\n status: xhr.status\r\n };\r\n resolve(networkResponse);\r\n } catch (e) {\r\n reject(BrowserAuthError.createFailedToParseNetworkResponseError(url));\r\n }\r\n };\r\n\r\n xhr.onerror = (): void => {\r\n if (window.navigator.onLine) {\r\n if (method === HTTP_REQUEST_TYPE.POST) {\r\n reject(BrowserAuthError.createPostRequestFailedError(`Failed with status ${xhr.status}`, url));\r\n } else {\r\n reject(BrowserAuthError.createGetRequestFailedError(`Failed with status ${xhr.status}`, url));\r\n }\r\n } else {\r\n reject(BrowserAuthError.createNoNetworkConnectivityError());\r\n }\r\n };\r\n\r\n if (method === HTTP_REQUEST_TYPE.POST && options && options.body) {\r\n xhr.send(options.body);\r\n } else if (method === HTTP_REQUEST_TYPE.GET) {\r\n xhr.send();\r\n } else {\r\n throw BrowserAuthError.createHttpMethodNotImplementedError(method);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Helper to set XHR headers for request.\r\n * @param xhr \r\n * @param options \r\n */\r\n private setXhrHeaders(xhr: XMLHttpRequest, options?: NetworkRequestOptions): void {\r\n if (options && options.headers) {\r\n const headers = options.headers;\r\n Object.keys(headers).forEach((key: string) => {\r\n xhr.setRequestHeader(key, headers[key]);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets a string map of the headers received in the response.\r\n * \r\n * Algorithm comes from https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/getAllResponseHeaders\r\n * @param xhr \r\n */\r\n private getHeaderDict(xhr: XMLHttpRequest): Record {\r\n const headerString = xhr.getAllResponseHeaders();\r\n const headerArr = headerString.trim().split(/[\\r\\n]+/);\r\n const headerDict: Record = {};\r\n headerArr.forEach((value: string) => {\r\n const parts = value.split(\": \");\r\n const headerName = parts.shift();\r\n const headerVal = parts.join(\": \");\r\n if (headerName && headerVal) {\r\n headerDict[headerName] = headerVal;\r\n }\r\n });\r\n\r\n return headerDict;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants, INetworkModule, UrlString } from \"@azure/msal-common\";\r\nimport { FetchClient } from \"../network/FetchClient\";\r\nimport { XhrClient } from \"../network/XhrClient\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { InteractionType, BrowserConstants } from \"./BrowserConstants\";\r\n\r\n/**\r\n * Utility class for browser specific functions\r\n */\r\nexport class BrowserUtils {\r\n\r\n // #region Window Navigation and URL management\r\n\r\n /**\r\n * Clears hash from window url.\r\n */\r\n static clearHash(contentWindow: Window): void {\r\n // Office.js sets history.replaceState to null\r\n contentWindow.location.hash = Constants.EMPTY_STRING;\r\n if (typeof contentWindow.history.replaceState === \"function\") {\r\n // Full removes \"#\" from url\r\n contentWindow.history.replaceState(null, Constants.EMPTY_STRING, `${contentWindow.location.origin}${contentWindow.location.pathname}${contentWindow.location.search}`);\r\n }\r\n }\r\n\r\n /**\r\n * Replaces current hash with hash from provided url\r\n */\r\n static replaceHash(url: string): void {\r\n const urlParts = url.split(\"#\");\r\n urlParts.shift(); // Remove part before the hash\r\n window.location.hash = urlParts.length > 0 ? urlParts.join(\"#\") : Constants.EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * Returns boolean of whether the current window is in an iframe or not.\r\n */\r\n static isInIframe(): boolean {\r\n return window.parent !== window;\r\n }\r\n\r\n /**\r\n * Returns boolean of whether or not the current window is a popup opened by msal\r\n */\r\n static isInPopup(): boolean {\r\n return typeof window !== \"undefined\" && !!window.opener && \r\n window.opener !== window && \r\n typeof window.name === \"string\" && \r\n window.name.indexOf(`${BrowserConstants.POPUP_NAME_PREFIX}.`) === 0;\r\n }\r\n\r\n // #endregion\r\n\r\n /**\r\n * Returns current window URL as redirect uri\r\n */\r\n static getCurrentUri(): string {\r\n return window.location.href.split(\"?\")[0].split(\"#\")[0];\r\n }\r\n\r\n /**\r\n * Gets the homepage url for the current window location.\r\n */\r\n static getHomepage(): string {\r\n const currentUrl = new UrlString(window.location.href);\r\n const urlComponents = currentUrl.getUrlComponents();\r\n return `${urlComponents.Protocol}//${urlComponents.HostNameAndPort}/`;\r\n }\r\n\r\n /**\r\n * Returns best compatible network client object. \r\n */\r\n static getBrowserNetworkClient(): INetworkModule {\r\n if (window.fetch && window.Headers) {\r\n return new FetchClient();\r\n } else {\r\n return new XhrClient();\r\n }\r\n }\r\n\r\n /**\r\n * Throws error if we have completed an auth and are \r\n * attempting another auth request inside an iframe.\r\n */\r\n static blockReloadInHiddenIframes(): void {\r\n const isResponseHash = UrlString.hashContainsKnownProperties(window.location.hash);\r\n // return an error if called from the hidden iframe created by the msal js silent calls\r\n if (isResponseHash && BrowserUtils.isInIframe()) {\r\n throw BrowserAuthError.createBlockReloadInHiddenIframeError();\r\n }\r\n }\r\n\r\n /**\r\n * Block redirect operations in iframes unless explicitly allowed\r\n * @param interactionType Interaction type for the request\r\n * @param allowRedirectInIframe Config value to allow redirects when app is inside an iframe\r\n */\r\n static blockRedirectInIframe(interactionType: InteractionType, allowRedirectInIframe: boolean): void {\r\n const isIframedApp = BrowserUtils.isInIframe();\r\n if (interactionType === InteractionType.Redirect && isIframedApp && !allowRedirectInIframe) {\r\n // If we are not in top frame, we shouldn't redirect. This is also handled by the service.\r\n throw BrowserAuthError.createRedirectInIframeError(isIframedApp);\r\n }\r\n }\r\n\r\n /**\r\n * Block redirectUri loaded in popup from calling AcquireToken APIs\r\n */\r\n static blockAcquireTokenInPopups(): void {\r\n // Popups opened by msal popup APIs are given a name that starts with \"msal.\"\r\n if (BrowserUtils.isInPopup()) {\r\n throw BrowserAuthError.createBlockAcquireTokenInPopupsError();\r\n }\r\n }\r\n\r\n /**\r\n * Throws error if token requests are made in non-browser environment\r\n * @param isBrowserEnvironment Flag indicating if environment is a browser.\r\n */\r\n static blockNonBrowserEnvironment(isBrowserEnvironment: boolean): void {\r\n if (!isBrowserEnvironment) {\r\n throw BrowserAuthError.createNonBrowserEnvironmentError();\r\n }\r\n }\r\n\r\n /**\r\n * Throws error if native brokering is enabled but initialize hasn't been called\r\n * @param allowNativeBroker \r\n * @param initialized \r\n */\r\n static blockNativeBrokerCalledBeforeInitialized(allowNativeBroker: boolean, initialized: boolean): void {\r\n if (allowNativeBroker && !initialized) {\r\n throw BrowserAuthError.createNativeBrokerCalledBeforeInitialize();\r\n }\r\n }\r\n\r\n /**\r\n * Returns boolean of whether current browser is an Internet Explorer or Edge browser.\r\n */\r\n static detectIEOrEdge(): boolean {\r\n const ua = window.navigator.userAgent;\r\n const msie = ua.indexOf(\"MSIE \");\r\n const msie11 = ua.indexOf(\"Trident/\");\r\n const msedge = ua.indexOf(\"Edge/\");\r\n const isIE = msie > 0 || msie11 > 0;\r\n const isEdge = msedge > 0;\r\n return isIE || isEdge;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { INavigationClient } from \"./INavigationClient\";\r\nimport { NavigationOptions } from \"./NavigationOptions\";\r\n\r\nexport class NavigationClient implements INavigationClient {\r\n /**\r\n * Navigates to other pages within the same web application\r\n * @param url \r\n * @param options \r\n */\r\n navigateInternal(url: string, options: NavigationOptions): Promise{\r\n return NavigationClient.defaultNavigateWindow(url, options);\r\n }\r\n\r\n /**\r\n * Navigates to other pages outside the web application i.e. the Identity Provider\r\n * @param url \r\n * @param options \r\n */\r\n navigateExternal(url: string, options: NavigationOptions): Promise {\r\n return NavigationClient.defaultNavigateWindow(url, options);\r\n }\r\n\r\n /**\r\n * Default navigation implementation invoked by the internal and external functions\r\n * @param url \r\n * @param options \r\n */\r\n private static defaultNavigateWindow(url: string, options: NavigationOptions): Promise {\r\n if (options.noHistory) {\r\n window.location.replace(url);\r\n } else {\r\n window.location.assign(url);\r\n }\r\n\r\n return new Promise((resolve) => {\r\n setTimeout(() => {\r\n resolve(true);\r\n }, options.timeout);\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { SystemOptions, LoggerOptions, INetworkModule, DEFAULT_SYSTEM_OPTIONS, Constants, ProtocolMode, LogLevel, StubbedNetworkModule, AzureCloudInstance, AzureCloudOptions, ApplicationTelemetry } from \"@azure/msal-common\";\r\nimport { BrowserUtils } from \"../utils/BrowserUtils\";\r\nimport { BrowserCacheLocation, BrowserConstants } from \"../utils/BrowserConstants\";\r\nimport { INavigationClient } from \"../navigation/INavigationClient\";\r\nimport { NavigationClient } from \"../navigation/NavigationClient\";\r\n\r\n// Default timeout for popup windows and iframes in milliseconds\r\nexport const DEFAULT_POPUP_TIMEOUT_MS = 60000;\r\nexport const DEFAULT_IFRAME_TIMEOUT_MS = 6000;\r\nexport const DEFAULT_REDIRECT_TIMEOUT_MS = 30000;\r\nexport const DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS = 2000;\r\n\r\n/**\r\n * Use this to configure the auth options in the Configuration object\r\n */\r\nexport type BrowserAuthOptions = {\r\n /**\r\n * Client ID of your app registered with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview in Microsoft Identity Platform\r\n */\r\n clientId: string;\r\n /**\r\n * You can configure a specific authority, defaults to \" \" or \"https://login.microsoftonline.com/common\"\r\n */\r\n authority?: string;\r\n /**\r\n * An array of URIs that are known to be valid. Used in B2C scenarios.\r\n */\r\n knownAuthorities?: Array;\r\n /**\r\n * A string containing the cloud discovery response. Used in AAD scenarios.\r\n */\r\n cloudDiscoveryMetadata?: string;\r\n /**\r\n * A string containing the .well-known/openid-configuration endpoint response\r\n */\r\n authorityMetadata?: string;\r\n /**\r\n * The redirect URI where authentication responses can be received by your application. It must exactly match one of the redirect URIs registered in the Azure portal.\r\n */\r\n redirectUri?: string;\r\n /**\r\n * The redirect URI where the window navigates after a successful logout.\r\n */\r\n postLogoutRedirectUri?: string | null;\r\n /**\r\n * Boolean indicating whether to navigate to the original request URL after the auth server navigates to the redirect URL.\r\n */\r\n navigateToLoginRequestUrl?: boolean;\r\n /**\r\n * Array of capabilities which will be added to the claims.access_token.xms_cc request property on every network request.\r\n */\r\n clientCapabilities?: Array;\r\n /**\r\n * Enum that represents the protocol that msal follows. Used for configuring proper endpoints.\r\n */\r\n protocolMode?: ProtocolMode;\r\n /**\r\n * Enum that represents the Azure Cloud to use.\r\n */\r\n azureCloudOptions?: AzureCloudOptions;\r\n /**\r\n * Flag of whether to use the local metadata cache\r\n */\r\n skipAuthorityMetadataCache?: boolean;\r\n};\r\n\r\n/**\r\n * Use this to configure the below cache configuration options:\r\n */\r\nexport type CacheOptions = {\r\n /**\r\n * Used to specify the cacheLocation user wants to set. Valid values are \"localStorage\", \"sessionStorage\" and \"memoryStorage\".\r\n */\r\n cacheLocation?: BrowserCacheLocation | string;\r\n /**\r\n * Used to specify the temporaryCacheLocation user wants to set. Valid values are \"localStorage\", \"sessionStorage\" and \"memoryStorage\".\r\n */\r\n temporaryCacheLocation?: BrowserCacheLocation | string;\r\n /**\r\n * If set, MSAL stores the auth request state required for validation of the auth flows in the browser cookies. By default this flag is set to false.\r\n */\r\n storeAuthStateInCookie?: boolean;\r\n /**\r\n * If set, MSAL sets the \"Secure\" flag on cookies so they can only be sent over HTTPS. By default this flag is set to false.\r\n */\r\n secureCookies?: boolean;\r\n /**\r\n * If set, MSAL will attempt to migrate cache entries from older versions on initialization. By default this flag is set to true if cacheLocation is localStorage, otherwise false.\r\n */\r\n cacheMigrationEnabled?: boolean;\r\n /**\r\n * Flag that determines whether access tokens are stored based on requested claims\r\n */\r\n claimsBasedCachingEnabled?: boolean;\r\n};\r\n\r\nexport type BrowserSystemOptions = SystemOptions & {\r\n /**\r\n * Used to initialize the Logger object (See ClientConfiguration.ts)\r\n */\r\n loggerOptions?: LoggerOptions;\r\n /**\r\n * Network interface implementation\r\n */\r\n networkClient?: INetworkModule;\r\n /**\r\n * Override the methods used to navigate to other webpages. Particularly useful if you are using a client-side router\r\n */\r\n navigationClient?: INavigationClient;\r\n /**\r\n * Sets the timeout for waiting for a response hash in a popup. Will take precedence over loadFrameTimeout if both are set.\r\n */\r\n windowHashTimeout?: number;\r\n /**\r\n * Sets the timeout for waiting for a response hash in an iframe. Will take precedence over loadFrameTimeout if both are set.\r\n */\r\n iframeHashTimeout?: number;\r\n /**\r\n * Sets the timeout for waiting for a response hash in an iframe or popup\r\n */\r\n loadFrameTimeout?: number;\r\n /**\r\n * Maximum time the library should wait for a frame to load\r\n */\r\n navigateFrameWait?: number;\r\n /**\r\n * Time to wait for redirection to occur before resolving promise\r\n */\r\n redirectNavigationTimeout?: number;\r\n /**\r\n * Sets whether popups are opened asynchronously. By default, this flag is set to false. When set to false, blank popups are opened before anything else happens. When set to true, popups are opened when making the network request.\r\n */\r\n asyncPopups?: boolean;\r\n /**\r\n * Flag to enable redirect opertaions when the app is rendered in an iframe (to support scenarios such as embedded B2C login).\r\n */\r\n allowRedirectInIframe?: boolean;\r\n /**\r\n * Flag to enable native broker support (e.g. acquiring tokens from WAM on Windows)\r\n */\r\n allowNativeBroker?: boolean;\r\n /**\r\n * Sets the timeout for waiting for the native broker handshake to resolve\r\n */\r\n nativeBrokerHandshakeTimeout?: number;\r\n /**\r\n * Options related to browser crypto APIs\r\n */\r\n cryptoOptions?: CryptoOptions;\r\n /**\r\n * Sets the interval length in milliseconds for polling the location attribute in popup windows (default is 30ms)\r\n */\r\n pollIntervalMilliseconds?: number;\r\n};\r\n\r\nexport type CryptoOptions = {\r\n\r\n /**\r\n * Enables the application to use the MSR Crypto interface, if available (and other interfaces are not)\r\n * @type {?boolean}\r\n */\r\n useMsrCrypto?: boolean;\r\n\r\n /**\r\n * Entropy to seed browser crypto API (needed for MSR Crypto). Must be cryptographically strong random numbers (e.g. crypto.randomBytes(48) from Node)\r\n * @type {?Uint8Array}\r\n */\r\n entropy?: Uint8Array;\r\n};\r\n\r\n/**\r\n * Telemetry Options\r\n */\r\nexport type BrowserTelemetryOptions = {\r\n /**\r\n * Telemetry information sent on request\r\n * - appName: Unique string name of an application\r\n * - appVersion: Version of the application using MSAL\r\n */\r\n application?: ApplicationTelemetry;\r\n};\r\n\r\n/**\r\n * This object allows you to configure important elements of MSAL functionality and is passed into the constructor of PublicClientApplication\r\n */\r\nexport type Configuration = {\r\n /**\r\n * This is where you configure auth elements like clientID, authority used for authenticating against the Microsoft Identity Platform\r\n */\r\n auth: BrowserAuthOptions,\r\n /**\r\n * This is where you configure cache location and whether to store cache in cookies\r\n */\r\n cache?: CacheOptions,\r\n /**\r\n * This is where you can configure the network client, logger, token renewal offset\r\n */\r\n system?: BrowserSystemOptions,\r\n /**\r\n * This is where you can configure telemetry data and options\r\n */\r\n telemetry?: BrowserTelemetryOptions\r\n};\r\n\r\nexport type BrowserConfiguration = {\r\n auth: Required,\r\n cache: Required,\r\n system: Required,\r\n telemetry: Required\r\n};\r\n\r\n/**\r\n * MSAL function that sets the default options when not explicitly configured from app developer\r\n *\r\n * @param auth\r\n * @param cache\r\n * @param system\r\n *\r\n * @returns Configuration object\r\n */\r\nexport function buildConfiguration({ auth: userInputAuth, cache: userInputCache, system: userInputSystem, telemetry: userInputTelemetry }: Configuration, isBrowserEnvironment: boolean): BrowserConfiguration {\r\n\r\n // Default auth options for browser\r\n const DEFAULT_AUTH_OPTIONS: Required = {\r\n clientId: Constants.EMPTY_STRING,\r\n authority: `${Constants.DEFAULT_AUTHORITY}`,\r\n knownAuthorities: [],\r\n cloudDiscoveryMetadata: Constants.EMPTY_STRING,\r\n authorityMetadata: Constants.EMPTY_STRING,\r\n redirectUri: Constants.EMPTY_STRING,\r\n postLogoutRedirectUri: Constants.EMPTY_STRING,\r\n navigateToLoginRequestUrl: true,\r\n clientCapabilities: [],\r\n protocolMode: ProtocolMode.AAD,\r\n azureCloudOptions: {\r\n azureCloudInstance: AzureCloudInstance.None,\r\n tenant: Constants.EMPTY_STRING\r\n },\r\n skipAuthorityMetadataCache: false, \r\n };\r\n\r\n // Default cache options for browser\r\n const DEFAULT_CACHE_OPTIONS: Required = {\r\n cacheLocation: BrowserCacheLocation.SessionStorage,\r\n temporaryCacheLocation: BrowserCacheLocation.SessionStorage,\r\n storeAuthStateInCookie: false,\r\n secureCookies: false,\r\n // Default cache migration to true if cache location is localStorage since entries are preserved across tabs/windows. Migration has little to no benefit in sessionStorage and memoryStorage\r\n cacheMigrationEnabled: userInputCache && userInputCache.cacheLocation === BrowserCacheLocation.LocalStorage ? true : false,\r\n claimsBasedCachingEnabled: true\r\n };\r\n\r\n // Default logger options for browser\r\n const DEFAULT_LOGGER_OPTIONS: LoggerOptions = {\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n loggerCallback: (): void => {\r\n // allow users to not set logger call back \r\n },\r\n logLevel: LogLevel.Info,\r\n piiLoggingEnabled: false\r\n };\r\n\r\n // Default system options for browser\r\n const DEFAULT_BROWSER_SYSTEM_OPTIONS: Required = {\r\n ...DEFAULT_SYSTEM_OPTIONS,\r\n loggerOptions: DEFAULT_LOGGER_OPTIONS,\r\n networkClient: isBrowserEnvironment ? BrowserUtils.getBrowserNetworkClient() : StubbedNetworkModule,\r\n navigationClient: new NavigationClient(),\r\n loadFrameTimeout: 0,\r\n // If loadFrameTimeout is provided, use that as default.\r\n windowHashTimeout: userInputSystem?.loadFrameTimeout || DEFAULT_POPUP_TIMEOUT_MS,\r\n iframeHashTimeout: userInputSystem?.loadFrameTimeout || DEFAULT_IFRAME_TIMEOUT_MS,\r\n navigateFrameWait: isBrowserEnvironment && BrowserUtils.detectIEOrEdge() ? 500 : 0,\r\n redirectNavigationTimeout: DEFAULT_REDIRECT_TIMEOUT_MS,\r\n asyncPopups: false,\r\n allowRedirectInIframe: false,\r\n allowNativeBroker: false,\r\n nativeBrokerHandshakeTimeout: userInputSystem?.nativeBrokerHandshakeTimeout || DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS,\r\n pollIntervalMilliseconds: BrowserConstants.DEFAULT_POLL_INTERVAL_MS,\r\n cryptoOptions: {\r\n useMsrCrypto: false,\r\n entropy: undefined\r\n }\r\n };\r\n\r\n const providedSystemOptions: BrowserSystemOptions = {\r\n ...userInputSystem,\r\n loggerOptions: userInputSystem?.loggerOptions || DEFAULT_LOGGER_OPTIONS\r\n };\r\n\r\n const DEFAULT_TELEMETRY_OPTIONS: Required = {\r\n application: {\r\n appName: Constants.EMPTY_STRING,\r\n appVersion: Constants.EMPTY_STRING\r\n }\r\n };\r\n\r\n const overlayedConfig: BrowserConfiguration = {\r\n auth: { ...DEFAULT_AUTH_OPTIONS, ...userInputAuth },\r\n cache: { ...DEFAULT_CACHE_OPTIONS, ...userInputCache },\r\n system: { ...DEFAULT_BROWSER_SYSTEM_OPTIONS, ...providedSystemOptions },\r\n telemetry: { ...DEFAULT_TELEMETRY_OPTIONS, ...userInputTelemetry }\r\n };\r\n return overlayedConfig;\r\n}\r\n\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nexport enum EventType {\r\n INITIALIZE_START = \"msal:initializeStart\",\r\n INITIALIZE_END = \"msal:initializeEnd\",\r\n ACCOUNT_ADDED = \"msal:accountAdded\",\r\n ACCOUNT_REMOVED = \"msal:accountRemoved\",\r\n LOGIN_START = \"msal:loginStart\",\r\n LOGIN_SUCCESS = \"msal:loginSuccess\",\r\n LOGIN_FAILURE = \"msal:loginFailure\",\r\n ACQUIRE_TOKEN_START = \"msal:acquireTokenStart\",\r\n ACQUIRE_TOKEN_SUCCESS = \"msal:acquireTokenSuccess\",\r\n ACQUIRE_TOKEN_FAILURE = \"msal:acquireTokenFailure\",\r\n ACQUIRE_TOKEN_NETWORK_START = \"msal:acquireTokenFromNetworkStart\",\r\n SSO_SILENT_START = \"msal:ssoSilentStart\",\r\n SSO_SILENT_SUCCESS = \"msal:ssoSilentSuccess\",\r\n SSO_SILENT_FAILURE = \"msal:ssoSilentFailure\",\r\n ACQUIRE_TOKEN_BY_CODE_START = \"msal:acquireTokenByCodeStart\",\r\n ACQUIRE_TOKEN_BY_CODE_SUCCESS = \"msal:acquireTokenByCodeSuccess\",\r\n ACQUIRE_TOKEN_BY_CODE_FAILURE = \"msal:acquireTokenByCodeFailure\",\r\n HANDLE_REDIRECT_START = \"msal:handleRedirectStart\",\r\n HANDLE_REDIRECT_END = \"msal:handleRedirectEnd\",\r\n POPUP_OPENED = \"msal:popupOpened\",\r\n LOGOUT_START = \"msal:logoutStart\",\r\n LOGOUT_SUCCESS = \"msal:logoutSuccess\",\r\n LOGOUT_FAILURE = \"msal:logoutFailure\",\r\n LOGOUT_END = \"msal:logoutEnd\",\r\n RESTORE_FROM_BFCACHE = \"msal:restoreFromBFCache\"\r\n}\r\n","/* eslint-disable header/header */\r\nexport const name = \"@azure/msal-browser\";\r\nexport const version = \"2.38.1\";\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ICrypto, SignedHttpRequestParameters } from \"./ICrypto\";\r\nimport { TimeUtils } from \"../utils/TimeUtils\";\r\nimport { UrlString } from \"../url/UrlString\";\r\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient\";\r\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent\";\r\n\r\n/**\r\n * See eSTS docs for more info.\r\n * - A kid element, with the value containing an RFC 7638-compliant JWK thumbprint that is base64 encoded.\r\n * - xms_ksl element, representing the storage location of the key's secret component on the client device. One of two values:\r\n * - sw: software storage\r\n * - uhw: hardware storage\r\n */\r\ntype ReqCnf = {\r\n kid: string;\r\n xms_ksl: KeyLocation;\r\n};\r\n\r\nexport type ReqCnfData = {\r\n kid: string;\r\n reqCnfString: string;\r\n reqCnfHash: string;\r\n};\r\n\r\nenum KeyLocation {\r\n SW = \"sw\",\r\n UHW = \"uhw\"\r\n}\r\n\r\nexport class PopTokenGenerator {\r\n\r\n private cryptoUtils: ICrypto;\r\n private performanceClient?: IPerformanceClient;\r\n\r\n constructor(cryptoUtils: ICrypto, performanceClient?: IPerformanceClient) {\r\n this.cryptoUtils = cryptoUtils;\r\n this.performanceClient = performanceClient;\r\n }\r\n\r\n /**\r\n * Generates the req_cnf validated at the RP in the POP protocol for SHR parameters\r\n * and returns an object containing the keyid, the full req_cnf string and the req_cnf string hash\r\n * @param request\r\n * @returns\r\n */\r\n async generateCnf(request: SignedHttpRequestParameters): Promise {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.PopTokenGenerateCnf, request.correlationId);\r\n\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.PopTokenGenerateKid, request.correlationId);\r\n const reqCnf = await this.generateKid(request);\r\n const reqCnfString: string = this.cryptoUtils.base64Encode(JSON.stringify(reqCnf));\r\n\r\n return {\r\n kid: reqCnf.kid,\r\n reqCnfString, \r\n reqCnfHash: await this.cryptoUtils.hashString(reqCnfString) \r\n };\r\n }\r\n\r\n /**\r\n * Generates key_id for a SHR token request\r\n * @param request\r\n * @returns\r\n */\r\n async generateKid(request: SignedHttpRequestParameters): Promise {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.PopTokenGenerateKid, request.correlationId);\r\n\r\n const kidThumbprint = await this.cryptoUtils.getPublicKeyThumbprint(request);\r\n\r\n return {\r\n kid: kidThumbprint,\r\n xms_ksl: KeyLocation.SW\r\n };\r\n }\r\n\r\n /**\r\n * Signs the POP access_token with the local generated key-pair\r\n * @param accessToken\r\n * @param request\r\n * @returns\r\n */\r\n async signPopToken(accessToken: string, keyId: string, request: SignedHttpRequestParameters): Promise {\r\n return this.signPayload(accessToken, keyId, request);\r\n }\r\n\r\n /**\r\n * Utility function to generate the signed JWT for an access_token\r\n * @param payload\r\n * @param kid\r\n * @param request\r\n * @param claims\r\n * @returns\r\n */\r\n async signPayload(payload: string, keyId: string, request: SignedHttpRequestParameters, claims?: object): Promise {\r\n\r\n // Deconstruct request to extract SHR parameters\r\n const { resourceRequestMethod, resourceRequestUri, shrClaims, shrNonce } = request;\r\n\r\n const resourceUrlString = (resourceRequestUri) ? new UrlString(resourceRequestUri) : undefined;\r\n const resourceUrlComponents = resourceUrlString?.getUrlComponents();\r\n return await this.cryptoUtils.signJwt({\r\n at: payload,\r\n ts: TimeUtils.nowSeconds(),\r\n m: resourceRequestMethod?.toUpperCase(),\r\n u: resourceUrlComponents?.HostNameAndPort,\r\n nonce: shrNonce || this.cryptoUtils.createNewGuid(),\r\n p: resourceUrlComponents?.AbsolutePath,\r\n q: (resourceUrlComponents?.QueryString) ? [[], resourceUrlComponents.QueryString] : undefined,\r\n client_claims: shrClaims || undefined,\r\n ...claims\r\n }, keyId, request.correlationId);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ICrypto, Logger, AccountEntity, CacheManager } from \"@azure/msal-common\";\r\nimport { InteractionType } from \"../utils/BrowserConstants\";\r\nimport { EventCallbackFunction, EventError, EventMessage, EventPayload } from \"./EventMessage\";\r\nimport { EventType } from \"./EventType\";\r\n\r\nexport class EventHandler {\r\n // Callback for subscribing to events\r\n private eventCallbacks: Map;\r\n private logger: Logger;\r\n private browserCrypto: ICrypto;\r\n private listeningToStorageEvents: boolean;\r\n\r\n constructor(logger: Logger, browserCrypto: ICrypto) {\r\n this.eventCallbacks = new Map();\r\n this.logger = logger;\r\n this.browserCrypto = browserCrypto;\r\n this.listeningToStorageEvents = false;\r\n this.handleAccountCacheChange = this.handleAccountCacheChange.bind(this);\r\n }\r\n\r\n /**\r\n * Adds event callbacks to array\r\n * @param callback\r\n */\r\n addEventCallback(callback: EventCallbackFunction): string | null {\r\n if (typeof window !== \"undefined\") {\r\n const callbackId = this.browserCrypto.createNewGuid();\r\n this.eventCallbacks.set(callbackId, callback);\r\n this.logger.verbose(`Event callback registered with id: ${callbackId}`);\r\n \r\n return callbackId;\r\n }\r\n \r\n return null;\r\n }\r\n\r\n /**\r\n * Removes callback with provided id from callback array\r\n * @param callbackId\r\n */\r\n removeEventCallback(callbackId: string): void {\r\n this.eventCallbacks.delete(callbackId);\r\n this.logger.verbose(`Event callback ${callbackId} removed.`);\r\n }\r\n\r\n /**\r\n * Adds event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n */\r\n enableAccountStorageEvents(): void {\r\n if (typeof window === \"undefined\") {\r\n return;\r\n }\r\n\r\n if (!this.listeningToStorageEvents) {\r\n this.logger.verbose(\"Adding account storage listener.\");\r\n this.listeningToStorageEvents = true;\r\n window.addEventListener(\"storage\", this.handleAccountCacheChange);\r\n } else {\r\n this.logger.verbose(\"Account storage listener already registered.\");\r\n }\r\n }\r\n\r\n /**\r\n * Removes event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n */\r\n disableAccountStorageEvents(): void {\r\n if (typeof window === \"undefined\") {\r\n return;\r\n }\r\n\r\n if (this.listeningToStorageEvents) {\r\n this.logger.verbose(\"Removing account storage listener.\");\r\n window.removeEventListener(\"storage\", this.handleAccountCacheChange);\r\n this.listeningToStorageEvents = false;\r\n } else {\r\n this.logger.verbose(\"No account storage listener registered.\");\r\n }\r\n }\r\n\r\n /**\r\n * Emits events by calling callback with event message\r\n * @param eventType\r\n * @param interactionType\r\n * @param payload\r\n * @param error\r\n */\r\n emitEvent(eventType: EventType, interactionType?: InteractionType, payload?: EventPayload, error?: EventError): void {\r\n if (typeof window !== \"undefined\") {\r\n const message: EventMessage = {\r\n eventType: eventType,\r\n interactionType: interactionType || null,\r\n payload: payload || null,\r\n error: error || null,\r\n timestamp: Date.now()\r\n };\r\n\r\n this.logger.info(`Emitting event: ${eventType}`);\r\n\r\n this.eventCallbacks.forEach((callback: EventCallbackFunction, callbackId: string) => {\r\n this.logger.verbose(`Emitting event to callback ${callbackId}: ${eventType}`);\r\n callback.apply(null, [message]);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Emit account added/removed events when cached accounts are changed in a different tab or frame\r\n */\r\n private handleAccountCacheChange(e: StorageEvent): void {\r\n try {\r\n const cacheValue = e.newValue || e.oldValue;\r\n if (!cacheValue) {\r\n return;\r\n }\r\n const parsedValue = JSON.parse(cacheValue);\r\n if (typeof parsedValue !== \"object\" || !AccountEntity.isAccountEntity(parsedValue)) {\r\n return;\r\n }\r\n const accountEntity = CacheManager.toObject(new AccountEntity(), parsedValue);\r\n const accountInfo = accountEntity.getAccountInfo();\r\n if (!e.oldValue && e.newValue) {\r\n this.logger.info(\"Account was added to cache in a different window\");\r\n this.emitEvent(EventType.ACCOUNT_ADDED, undefined, accountInfo);\r\n } else if (!e.newValue && e.oldValue) {\r\n this.logger.info(\"Account was removed from cache in a different window\");\r\n this.emitEvent(EventType.ACCOUNT_REMOVED, undefined, accountInfo);\r\n }\r\n } catch (e) {\r\n return;\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { NetworkResponse } from \"./NetworkManager\";\r\nimport { ServerAuthorizationTokenResponse } from \"../response/ServerAuthorizationTokenResponse\";\r\nimport { HeaderNames, ThrottlingConstants, Constants } from \"../utils/Constants\";\r\nimport { CacheManager } from \"../cache/CacheManager\";\r\nimport { ServerError } from \"../error/ServerError\";\r\nimport { RequestThumbprint } from \"./RequestThumbprint\";\r\nimport { ThrottlingEntity } from \"../cache/entities/ThrottlingEntity\";\r\nimport { BaseAuthRequest } from \"../request/BaseAuthRequest\";\r\n\r\nexport class ThrottlingUtils {\r\n\r\n /**\r\n * Prepares a RequestThumbprint to be stored as a key.\r\n * @param thumbprint\r\n */\r\n static generateThrottlingStorageKey(thumbprint: RequestThumbprint): string {\r\n return `${ThrottlingConstants.THROTTLING_PREFIX}.${JSON.stringify(thumbprint)}`;\r\n }\r\n\r\n /**\r\n * Performs necessary throttling checks before a network request.\r\n * @param cacheManager\r\n * @param thumbprint\r\n */\r\n static preProcess(cacheManager: CacheManager, thumbprint: RequestThumbprint): void {\r\n const key = ThrottlingUtils.generateThrottlingStorageKey(thumbprint);\r\n const value = cacheManager.getThrottlingCache(key);\r\n\r\n if (value) {\r\n if (value.throttleTime < Date.now()) {\r\n cacheManager.removeItem(key);\r\n return;\r\n }\r\n throw new ServerError(value.errorCodes?.join(\" \") || Constants.EMPTY_STRING, value.errorMessage, value.subError);\r\n }\r\n }\r\n\r\n /**\r\n * Performs necessary throttling checks after a network request.\r\n * @param cacheManager\r\n * @param thumbprint\r\n * @param response\r\n */\r\n static postProcess(cacheManager: CacheManager, thumbprint: RequestThumbprint, response: NetworkResponse): void {\r\n if (ThrottlingUtils.checkResponseStatus(response) || ThrottlingUtils.checkResponseForRetryAfter(response)) {\r\n const thumbprintValue: ThrottlingEntity = {\r\n throttleTime: ThrottlingUtils.calculateThrottleTime(parseInt(response.headers[HeaderNames.RETRY_AFTER])),\r\n error: response.body.error,\r\n errorCodes: response.body.error_codes,\r\n errorMessage: response.body.error_description,\r\n subError: response.body.suberror\r\n };\r\n cacheManager.setThrottlingCache(\r\n ThrottlingUtils.generateThrottlingStorageKey(thumbprint),\r\n thumbprintValue\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Checks a NetworkResponse object's status codes against 429 or 5xx\r\n * @param response\r\n */\r\n static checkResponseStatus(response: NetworkResponse): boolean {\r\n return response.status === 429 || response.status >= 500 && response.status < 600;\r\n }\r\n\r\n /**\r\n * Checks a NetworkResponse object's RetryAfter header\r\n * @param response\r\n */\r\n static checkResponseForRetryAfter(response: NetworkResponse): boolean {\r\n if (response.headers) {\r\n return response.headers.hasOwnProperty(HeaderNames.RETRY_AFTER) && (response.status < 200 || response.status >= 300);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Calculates the Unix-time value for a throttle to expire given throttleTime in seconds.\r\n * @param throttleTime\r\n */\r\n static calculateThrottleTime(throttleTime: number): number {\r\n const time = throttleTime <= 0 ? 0 : throttleTime;\r\n\r\n const currentSeconds = Date.now() / 1000;\r\n return Math.floor(Math.min(\r\n currentSeconds + (time || ThrottlingConstants.DEFAULT_THROTTLE_TIME_SECONDS),\r\n currentSeconds + ThrottlingConstants.DEFAULT_MAX_THROTTLE_TIME_SECONDS\r\n ) * 1000);\r\n }\r\n\r\n static removeThrottle(cacheManager: CacheManager, clientId: string, request: BaseAuthRequest, homeAccountIdentifier?: string): void {\r\n const thumbprint: RequestThumbprint = {\r\n clientId: clientId,\r\n authority: request.authority,\r\n scopes: request.scopes,\r\n homeAccountIdentifier: homeAccountIdentifier,\r\n claims: request.claims,\r\n authenticationScheme: request.authenticationScheme,\r\n resourceRequestMethod: request.resourceRequestMethod,\r\n resourceRequestUri: request.resourceRequestUri,\r\n shrClaims: request.shrClaims,\r\n sshKid: request.sshKid\r\n };\r\n\r\n const key = this.generateThrottlingStorageKey(thumbprint);\r\n cacheManager.removeItem(key);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { INetworkModule, NetworkRequestOptions } from \"./INetworkModule\";\r\nimport { RequestThumbprint } from \"./RequestThumbprint\";\r\nimport { ThrottlingUtils } from \"./ThrottlingUtils\";\r\nimport { CacheManager } from \"../cache/CacheManager\";\r\nimport { AuthError } from \"../error/AuthError\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\n\r\nexport type NetworkResponse = {\r\n headers: Record;\r\n body: T;\r\n status: number;\r\n};\r\n\r\nexport type UrlToHttpRequestOptions = {\r\n protocol: string;\r\n hostname: string;\r\n hash: string;\r\n search: string;\r\n pathname: string;\r\n path: string;\r\n href: string;\r\n port?: number;\r\n auth?: string;\r\n};\r\n\r\nexport class NetworkManager {\r\n private networkClient: INetworkModule;\r\n private cacheManager: CacheManager;\r\n\r\n constructor(networkClient: INetworkModule, cacheManager: CacheManager) {\r\n this.networkClient = networkClient;\r\n this.cacheManager = cacheManager;\r\n }\r\n\r\n /**\r\n * Wraps sendPostRequestAsync with necessary preflight and postflight logic\r\n * @param thumbprint\r\n * @param tokenEndpoint\r\n * @param options\r\n */\r\n async sendPostRequest(thumbprint: RequestThumbprint, tokenEndpoint: string, options: NetworkRequestOptions): Promise> {\r\n ThrottlingUtils.preProcess(this.cacheManager, thumbprint);\r\n\r\n let response;\r\n try {\r\n response = await this.networkClient.sendPostRequestAsync(tokenEndpoint, options);\r\n } catch (e) {\r\n if (e instanceof AuthError) {\r\n throw e;\r\n } else {\r\n throw ClientAuthError.createNetworkError(tokenEndpoint, e);\r\n }\r\n }\r\n\r\n ThrottlingUtils.postProcess(this.cacheManager, thumbprint, response);\r\n\r\n return response;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { PromptValue, CodeChallengeMethodValues} from \"../utils/Constants\";\r\nimport { StringDict } from \"../utils/MsalTypes\";\r\n\r\n/**\r\n * Validates server consumable params from the \"request\" objects\r\n */\r\nexport class RequestValidator {\r\n\r\n /**\r\n * Utility to check if the `redirectUri` in the request is a non-null value\r\n * @param redirectUri\r\n */\r\n static validateRedirectUri(redirectUri: string) : void {\r\n if (StringUtils.isEmpty(redirectUri)) {\r\n throw ClientConfigurationError.createRedirectUriEmptyError();\r\n }\r\n }\r\n\r\n /**\r\n * Utility to validate prompt sent by the user in the request\r\n * @param prompt\r\n */\r\n static validatePrompt(prompt: string) : void {\r\n const promptValues = [];\r\n\r\n for (const value in PromptValue) {\r\n promptValues.push(PromptValue[value]);\r\n }\r\n\r\n if (promptValues.indexOf(prompt) < 0) {\r\n throw ClientConfigurationError.createInvalidPromptError(prompt);\r\n }\r\n }\r\n\r\n static validateClaims(claims: string) : void {\r\n try {\r\n JSON.parse(claims);\r\n } catch(e) {\r\n throw ClientConfigurationError.createInvalidClaimsRequestError();\r\n }\r\n }\r\n\r\n /**\r\n * Utility to validate code_challenge and code_challenge_method\r\n * @param codeChallenge\r\n * @param codeChallengeMethod\r\n */\r\n static validateCodeChallengeParams(codeChallenge: string, codeChallengeMethod: string) : void {\r\n if (StringUtils.isEmpty(codeChallenge) || StringUtils.isEmpty(codeChallengeMethod)) {\r\n throw ClientConfigurationError.createInvalidCodeChallengeParamsError();\r\n } else {\r\n this.validateCodeChallengeMethod(codeChallengeMethod);\r\n }\r\n }\r\n\r\n /**\r\n * Utility to validate code_challenge_method\r\n * @param codeChallengeMethod\r\n */\r\n static validateCodeChallengeMethod(codeChallengeMethod: string) : void {\r\n if (\r\n [\r\n CodeChallengeMethodValues.PLAIN,\r\n CodeChallengeMethodValues.S256\r\n ].indexOf(codeChallengeMethod) < 0\r\n ) {\r\n throw ClientConfigurationError.createInvalidCodeChallengeMethodError();\r\n }\r\n }\r\n\r\n /**\r\n * Removes unnecessary, duplicate, and empty string query parameters from extraQueryParameters\r\n * @param request\r\n */\r\n static sanitizeEQParams(eQParams: StringDict, queryParams: Map) : StringDict {\r\n if (!eQParams) {\r\n return {};\r\n }\r\n\r\n // Remove any query parameters already included in SSO params\r\n queryParams.forEach((value, key) => {\r\n if (eQParams[key]) {\r\n delete eQParams[key];\r\n }\r\n });\r\n\r\n // remove empty string parameters\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n return Object.fromEntries(Object.entries(eQParams).filter(([key, value]) => value !== \"\"));\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AADServerParamKeys, Constants, ResponseMode, SSOTypes, CLIENT_INFO, AuthenticationScheme, ClaimsRequestKeys, PasswordGrantConstants, OIDC_DEFAULT_SCOPES, ThrottlingConstants, HeaderNames} from \"../utils/Constants\";\r\nimport { ScopeSet } from \"./ScopeSet\";\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { StringDict } from \"../utils/MsalTypes\";\r\nimport { RequestValidator } from \"./RequestValidator\";\r\nimport { ApplicationTelemetry, LibraryInfo } from \"../config/ClientConfiguration\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { ServerTelemetryManager } from \"../telemetry/server/ServerTelemetryManager\";\r\nimport { ClientInfo } from \"../account/ClientInfo\";\r\n\r\nexport class RequestParameterBuilder {\r\n\r\n private parameters: Map;\r\n\r\n constructor() {\r\n this.parameters = new Map();\r\n }\r\n\r\n /**\r\n * add response_type = code\r\n */\r\n addResponseTypeCode(): void {\r\n this.parameters.set(\r\n AADServerParamKeys.RESPONSE_TYPE, encodeURIComponent(Constants.CODE_RESPONSE_TYPE)\r\n );\r\n }\r\n\r\n /**\r\n * add response_type = token id_token\r\n */\r\n addResponseTypeForTokenAndIdToken(): void {\r\n this.parameters.set(\r\n AADServerParamKeys.RESPONSE_TYPE, encodeURIComponent(`${Constants.TOKEN_RESPONSE_TYPE} ${Constants.ID_TOKEN_RESPONSE_TYPE}`)\r\n );\r\n }\r\n\r\n /**\r\n * add response_mode. defaults to query.\r\n * @param responseMode\r\n */\r\n addResponseMode(responseMode?: ResponseMode): void {\r\n this.parameters.set(\r\n AADServerParamKeys.RESPONSE_MODE,\r\n encodeURIComponent((responseMode) ? responseMode : ResponseMode.QUERY)\r\n );\r\n }\r\n\r\n /**\r\n * Add flag to indicate STS should attempt to use WAM if available\r\n */\r\n addNativeBroker(): void {\r\n this.parameters.set(\r\n AADServerParamKeys.NATIVE_BROKER,\r\n encodeURIComponent(\"1\")\r\n );\r\n }\r\n\r\n /**\r\n * add scopes. set addOidcScopes to false to prevent default scopes in non-user scenarios\r\n * @param scopeSet\r\n * @param addOidcScopes\r\n */\r\n addScopes(scopes: string[], addOidcScopes: boolean = true): void {\r\n const requestScopes = addOidcScopes ? [...scopes || [], ...OIDC_DEFAULT_SCOPES] : scopes || [];\r\n const scopeSet = new ScopeSet(requestScopes);\r\n this.parameters.set(AADServerParamKeys.SCOPE, encodeURIComponent(scopeSet.printScopes()));\r\n }\r\n\r\n /**\r\n * add clientId\r\n * @param clientId\r\n */\r\n addClientId(clientId: string): void {\r\n this.parameters.set(AADServerParamKeys.CLIENT_ID, encodeURIComponent(clientId));\r\n }\r\n\r\n /**\r\n * add redirect_uri\r\n * @param redirectUri\r\n */\r\n addRedirectUri(redirectUri: string): void {\r\n RequestValidator.validateRedirectUri(redirectUri);\r\n this.parameters.set(AADServerParamKeys.REDIRECT_URI, encodeURIComponent(redirectUri));\r\n }\r\n\r\n /**\r\n * add post logout redirectUri\r\n * @param redirectUri\r\n */\r\n addPostLogoutRedirectUri(redirectUri: string): void {\r\n RequestValidator.validateRedirectUri(redirectUri);\r\n this.parameters.set(AADServerParamKeys.POST_LOGOUT_URI, encodeURIComponent(redirectUri));\r\n }\r\n\r\n /**\r\n * add id_token_hint to logout request\r\n * @param idTokenHint\r\n */\r\n addIdTokenHint(idTokenHint: string): void {\r\n this.parameters.set(AADServerParamKeys.ID_TOKEN_HINT, encodeURIComponent(idTokenHint));\r\n }\r\n\r\n /**\r\n * add domain_hint\r\n * @param domainHint\r\n */\r\n addDomainHint(domainHint: string): void {\r\n this.parameters.set(SSOTypes.DOMAIN_HINT, encodeURIComponent(domainHint));\r\n }\r\n\r\n /**\r\n * add login_hint\r\n * @param loginHint\r\n */\r\n addLoginHint(loginHint: string): void {\r\n this.parameters.set(SSOTypes.LOGIN_HINT, encodeURIComponent(loginHint));\r\n }\r\n\r\n /**\r\n * Adds the CCS (Cache Credential Service) query parameter for login_hint\r\n * @param loginHint\r\n */\r\n addCcsUpn(loginHint: string): void {\r\n this.parameters.set(HeaderNames.CCS_HEADER, encodeURIComponent(`UPN:${loginHint}`));\r\n }\r\n\r\n /**\r\n * Adds the CCS (Cache Credential Service) query parameter for account object\r\n * @param loginHint\r\n */\r\n addCcsOid(clientInfo: ClientInfo): void {\r\n this.parameters.set(HeaderNames.CCS_HEADER, encodeURIComponent(`Oid:${clientInfo.uid}@${clientInfo.utid}`));\r\n }\r\n\r\n /**\r\n * add sid\r\n * @param sid\r\n */\r\n addSid(sid: string): void {\r\n this.parameters.set(SSOTypes.SID, encodeURIComponent(sid));\r\n }\r\n\r\n /**\r\n * add claims\r\n * @param claims\r\n */\r\n addClaims(claims?: string, clientCapabilities?: Array): void {\r\n const mergedClaims = this.addClientCapabilitiesToClaims(claims, clientCapabilities);\r\n RequestValidator.validateClaims(mergedClaims);\r\n this.parameters.set(AADServerParamKeys.CLAIMS, encodeURIComponent(mergedClaims));\r\n }\r\n\r\n /**\r\n * add correlationId\r\n * @param correlationId\r\n */\r\n addCorrelationId(correlationId: string): void {\r\n this.parameters.set(AADServerParamKeys.CLIENT_REQUEST_ID, encodeURIComponent(correlationId));\r\n }\r\n\r\n /**\r\n * add library info query params\r\n * @param libraryInfo\r\n */\r\n addLibraryInfo(libraryInfo: LibraryInfo): void {\r\n // Telemetry Info\r\n this.parameters.set(AADServerParamKeys.X_CLIENT_SKU, libraryInfo.sku);\r\n this.parameters.set(AADServerParamKeys.X_CLIENT_VER, libraryInfo.version);\r\n if (libraryInfo.os) {\r\n this.parameters.set(AADServerParamKeys.X_CLIENT_OS, libraryInfo.os);\r\n }\r\n if (libraryInfo.cpu) {\r\n this.parameters.set(AADServerParamKeys.X_CLIENT_CPU, libraryInfo.cpu);\r\n }\r\n }\r\n\r\n /**\r\n * Add client telemetry parameters\r\n * @param appTelemetry\r\n */\r\n addApplicationTelemetry(appTelemetry: ApplicationTelemetry): void {\r\n if (appTelemetry?.appName) {\r\n this.parameters.set(AADServerParamKeys.X_APP_NAME, appTelemetry.appName);\r\n }\r\n\r\n if (appTelemetry?.appVersion) {\r\n this.parameters.set(AADServerParamKeys.X_APP_VER, appTelemetry.appVersion);\r\n }\r\n }\r\n\r\n /**\r\n * add prompt\r\n * @param prompt\r\n */\r\n addPrompt(prompt: string): void {\r\n RequestValidator.validatePrompt(prompt);\r\n this.parameters.set(`${AADServerParamKeys.PROMPT}`, encodeURIComponent(prompt));\r\n }\r\n\r\n /**\r\n * add state\r\n * @param state\r\n */\r\n addState(state: string): void {\r\n if (!StringUtils.isEmpty(state)) {\r\n this.parameters.set(AADServerParamKeys.STATE, encodeURIComponent(state));\r\n }\r\n }\r\n\r\n /**\r\n * add nonce\r\n * @param nonce\r\n */\r\n addNonce(nonce: string): void {\r\n this.parameters.set(AADServerParamKeys.NONCE, encodeURIComponent(nonce));\r\n }\r\n\r\n /**\r\n * add code_challenge and code_challenge_method\r\n * - throw if either of them are not passed\r\n * @param codeChallenge\r\n * @param codeChallengeMethod\r\n */\r\n addCodeChallengeParams(\r\n codeChallenge: string,\r\n codeChallengeMethod: string\r\n ): void {\r\n RequestValidator.validateCodeChallengeParams(codeChallenge, codeChallengeMethod);\r\n if (codeChallenge && codeChallengeMethod) {\r\n this.parameters.set(AADServerParamKeys.CODE_CHALLENGE, encodeURIComponent(codeChallenge));\r\n this.parameters.set(AADServerParamKeys.CODE_CHALLENGE_METHOD, encodeURIComponent(codeChallengeMethod));\r\n } else {\r\n throw ClientConfigurationError.createInvalidCodeChallengeParamsError();\r\n }\r\n }\r\n\r\n /**\r\n * add the `authorization_code` passed by the user to exchange for a token\r\n * @param code\r\n */\r\n addAuthorizationCode(code: string): void {\r\n this.parameters.set(AADServerParamKeys.CODE, encodeURIComponent(code));\r\n }\r\n\r\n /**\r\n * add the `authorization_code` passed by the user to exchange for a token\r\n * @param code\r\n */\r\n addDeviceCode(code: string): void {\r\n this.parameters.set(AADServerParamKeys.DEVICE_CODE, encodeURIComponent(code));\r\n }\r\n\r\n /**\r\n * add the `refreshToken` passed by the user\r\n * @param refreshToken\r\n */\r\n addRefreshToken(refreshToken: string): void {\r\n this.parameters.set(AADServerParamKeys.REFRESH_TOKEN, encodeURIComponent(refreshToken));\r\n }\r\n\r\n /**\r\n * add the `code_verifier` passed by the user to exchange for a token\r\n * @param codeVerifier\r\n */\r\n addCodeVerifier(codeVerifier: string): void {\r\n this.parameters.set(AADServerParamKeys.CODE_VERIFIER, encodeURIComponent(codeVerifier));\r\n }\r\n\r\n /**\r\n * add client_secret\r\n * @param clientSecret\r\n */\r\n addClientSecret(clientSecret: string): void {\r\n this.parameters.set(AADServerParamKeys.CLIENT_SECRET, encodeURIComponent(clientSecret));\r\n }\r\n\r\n /**\r\n * add clientAssertion for confidential client flows\r\n * @param clientAssertion\r\n */\r\n addClientAssertion(clientAssertion: string): void {\r\n if (!StringUtils.isEmpty(clientAssertion)) {\r\n this.parameters.set(AADServerParamKeys.CLIENT_ASSERTION, encodeURIComponent(clientAssertion));\r\n }\r\n }\r\n\r\n /**\r\n * add clientAssertionType for confidential client flows\r\n * @param clientAssertionType\r\n */\r\n addClientAssertionType(clientAssertionType: string): void {\r\n if (!StringUtils.isEmpty(clientAssertionType)) {\r\n this.parameters.set(AADServerParamKeys.CLIENT_ASSERTION_TYPE, encodeURIComponent(clientAssertionType));\r\n }\r\n }\r\n\r\n /**\r\n * add OBO assertion for confidential client flows\r\n * @param clientAssertion\r\n */\r\n addOboAssertion(oboAssertion: string): void {\r\n this.parameters.set(AADServerParamKeys.OBO_ASSERTION, encodeURIComponent(oboAssertion));\r\n }\r\n\r\n /**\r\n * add grant type\r\n * @param grantType\r\n */\r\n addRequestTokenUse(tokenUse: string): void {\r\n this.parameters.set(AADServerParamKeys.REQUESTED_TOKEN_USE, encodeURIComponent(tokenUse));\r\n }\r\n\r\n /**\r\n * add grant type\r\n * @param grantType\r\n */\r\n addGrantType(grantType: string): void {\r\n this.parameters.set(AADServerParamKeys.GRANT_TYPE, encodeURIComponent(grantType));\r\n }\r\n\r\n /**\r\n * add client info\r\n *\r\n */\r\n addClientInfo(): void {\r\n this.parameters.set(CLIENT_INFO, \"1\");\r\n }\r\n\r\n /**\r\n * add extraQueryParams\r\n * @param eQParams\r\n */\r\n addExtraQueryParameters(eQParams: StringDict): void {\r\n const sanitizedEQParams = RequestValidator.sanitizeEQParams(eQParams, this.parameters);\r\n Object.keys(sanitizedEQParams).forEach((key) => {\r\n this.parameters.set(key, eQParams[key]);\r\n });\r\n }\r\n\r\n addClientCapabilitiesToClaims(claims?: string, clientCapabilities?: Array): string {\r\n let mergedClaims: object;\r\n\r\n // Parse provided claims into JSON object or initialize empty object\r\n if (!claims) {\r\n mergedClaims = {};\r\n } else {\r\n try {\r\n mergedClaims = JSON.parse(claims);\r\n } catch(e) {\r\n throw ClientConfigurationError.createInvalidClaimsRequestError();\r\n }\r\n }\r\n\r\n if (clientCapabilities && clientCapabilities.length > 0) {\r\n if (!mergedClaims.hasOwnProperty(ClaimsRequestKeys.ACCESS_TOKEN)){\r\n // Add access_token key to claims object\r\n mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN] = {};\r\n }\r\n\r\n // Add xms_cc claim with provided clientCapabilities to access_token key\r\n mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN][ClaimsRequestKeys.XMS_CC] = {\r\n values: clientCapabilities\r\n };\r\n }\r\n\r\n return JSON.stringify(mergedClaims);\r\n }\r\n\r\n /**\r\n * adds `username` for Password Grant flow\r\n * @param username\r\n */\r\n addUsername(username: string): void {\r\n this.parameters.set(PasswordGrantConstants.username, encodeURIComponent(username));\r\n }\r\n\r\n /**\r\n * adds `password` for Password Grant flow\r\n * @param password\r\n */\r\n addPassword(password: string): void {\r\n this.parameters.set(PasswordGrantConstants.password, encodeURIComponent(password));\r\n }\r\n\r\n /**\r\n * add pop_jwk to query params\r\n * @param cnfString\r\n */\r\n addPopToken(cnfString: string): void {\r\n if (!StringUtils.isEmpty(cnfString)) {\r\n this.parameters.set(AADServerParamKeys.TOKEN_TYPE, AuthenticationScheme.POP);\r\n this.parameters.set(AADServerParamKeys.REQ_CNF, encodeURIComponent(cnfString));\r\n }\r\n }\r\n\r\n /**\r\n * add SSH JWK and key ID to query params\r\n */\r\n addSshJwk(sshJwkString: string): void {\r\n if(!StringUtils.isEmpty(sshJwkString)) {\r\n this.parameters.set(AADServerParamKeys.TOKEN_TYPE, AuthenticationScheme.SSH);\r\n this.parameters.set(AADServerParamKeys.REQ_CNF, encodeURIComponent(sshJwkString));\r\n }\r\n }\r\n\r\n /**\r\n * add server telemetry fields\r\n * @param serverTelemetryManager\r\n */\r\n addServerTelemetry(serverTelemetryManager: ServerTelemetryManager): void {\r\n this.parameters.set(AADServerParamKeys.X_CLIENT_CURR_TELEM, serverTelemetryManager.generateCurrentRequestHeaderValue());\r\n this.parameters.set(AADServerParamKeys.X_CLIENT_LAST_TELEM, serverTelemetryManager.generateLastRequestHeaderValue());\r\n }\r\n\r\n /**\r\n * Adds parameter that indicates to the server that throttling is supported\r\n */\r\n addThrottling(): void {\r\n this.parameters.set(AADServerParamKeys.X_MS_LIB_CAPABILITY, ThrottlingConstants.X_MS_LIB_CAPABILITY_VALUE);\r\n }\r\n\r\n /**\r\n * Adds logout_hint parameter for \"silent\" logout which prevent server account picker\r\n */\r\n addLogoutHint(logoutHint: string): void {\r\n this.parameters.set(AADServerParamKeys.LOGOUT_HINT, encodeURIComponent(logoutHint));\r\n }\r\n\r\n /**\r\n * Utility to create a URL from the params map\r\n */\r\n createQueryString(): string {\r\n const queryParameterArray: Array = new Array();\r\n\r\n this.parameters.forEach((value, key) => {\r\n queryParameterArray.push(`${key}=${value}`);\r\n });\r\n\r\n return queryParameterArray.join(\"&\");\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ClientConfiguration, buildClientConfiguration, CommonClientConfiguration } from \"../config/ClientConfiguration\";\r\nimport { INetworkModule } from \"../network/INetworkModule\";\r\nimport { NetworkManager, NetworkResponse } from \"../network/NetworkManager\";\r\nimport { ICrypto } from \"../crypto/ICrypto\";\r\nimport { Authority } from \"../authority/Authority\";\r\nimport { Logger } from \"../logger/Logger\";\r\nimport { Constants, HeaderNames } from \"../utils/Constants\";\r\nimport { ServerAuthorizationTokenResponse } from \"../response/ServerAuthorizationTokenResponse\";\r\nimport { CacheManager } from \"../cache/CacheManager\";\r\nimport { ServerTelemetryManager } from \"../telemetry/server/ServerTelemetryManager\";\r\nimport { RequestThumbprint } from \"../network/RequestThumbprint\";\r\nimport { version, name } from \"../packageMetadata\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { CcsCredential, CcsCredentialType } from \"../account/CcsCredential\";\r\nimport { buildClientInfoFromHomeAccountId } from \"../account/ClientInfo\";\r\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient\";\r\nimport { RequestParameterBuilder } from \"../request/RequestParameterBuilder\";\r\nimport { BaseAuthRequest } from \"../request/BaseAuthRequest\";\r\n\r\n/**\r\n * Base application class which will construct requests to send to and handle responses from the Microsoft STS using the authorization code flow.\r\n */\r\nexport abstract class BaseClient {\r\n // Logger object\r\n public logger: Logger;\r\n\r\n // Application config\r\n protected config: CommonClientConfiguration;\r\n\r\n // Crypto Interface\r\n protected cryptoUtils: ICrypto;\r\n\r\n // Storage Interface\r\n protected cacheManager: CacheManager;\r\n\r\n // Network Interface\r\n protected networkClient: INetworkModule;\r\n\r\n // Server Telemetry Manager\r\n protected serverTelemetryManager: ServerTelemetryManager | null;\r\n\r\n // Network Manager\r\n protected networkManager: NetworkManager;\r\n\r\n // Default authority object\r\n public authority: Authority;\r\n\r\n // Performance telemetry client\r\n protected performanceClient?: IPerformanceClient;\r\n\r\n protected constructor(configuration: ClientConfiguration, performanceClient?: IPerformanceClient) {\r\n // Set the configuration\r\n this.config = buildClientConfiguration(configuration);\r\n\r\n // Initialize the logger\r\n this.logger = new Logger(this.config.loggerOptions, name, version);\r\n\r\n // Initialize crypto\r\n this.cryptoUtils = this.config.cryptoInterface;\r\n\r\n // Initialize storage interface\r\n this.cacheManager = this.config.storageInterface;\r\n\r\n // Set the network interface\r\n this.networkClient = this.config.networkInterface;\r\n\r\n // Set the NetworkManager\r\n this.networkManager = new NetworkManager(this.networkClient, this.cacheManager);\r\n\r\n // Set TelemetryManager\r\n this.serverTelemetryManager = this.config.serverTelemetryManager;\r\n\r\n // set Authority\r\n this.authority = this.config.authOptions.authority;\r\n\r\n // set performance telemetry client\r\n this.performanceClient = performanceClient;\r\n }\r\n\r\n /**\r\n * Creates default headers for requests to token endpoint\r\n */\r\n protected createTokenRequestHeaders(ccsCred?: CcsCredential): Record { \r\n const headers: Record = {};\r\n headers[HeaderNames.CONTENT_TYPE] = Constants.URL_FORM_CONTENT_TYPE;\r\n if (!this.config.systemOptions.preventCorsPreflight && ccsCred) {\r\n switch (ccsCred.type) {\r\n case CcsCredentialType.HOME_ACCOUNT_ID:\r\n try {\r\n const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential);\r\n headers[HeaderNames.CCS_HEADER] = `Oid:${clientInfo.uid}@${clientInfo.utid}`;\r\n } catch (e) {\r\n this.logger.verbose(\"Could not parse home account ID for CCS Header: \" + e);\r\n }\r\n break;\r\n case CcsCredentialType.UPN:\r\n headers[HeaderNames.CCS_HEADER] = `UPN: ${ccsCred.credential}`;\r\n break;\r\n }\r\n } \r\n return headers;\r\n }\r\n\r\n /**\r\n * Http post to token endpoint\r\n * @param tokenEndpoint\r\n * @param queryString\r\n * @param headers\r\n * @param thumbprint\r\n */\r\n protected async executePostToTokenEndpoint(tokenEndpoint: string, queryString: string, headers: Record, thumbprint: RequestThumbprint): Promise> {\r\n const response = await this.networkManager.sendPostRequest(\r\n thumbprint,\r\n tokenEndpoint,\r\n { body: queryString, headers: headers }\r\n );\r\n\r\n if (this.config.serverTelemetryManager && response.status < 500 && response.status !== 429) {\r\n // Telemetry data successfully logged by server, clear Telemetry cache\r\n this.config.serverTelemetryManager.clearTelemetryCache();\r\n }\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Updates the authority object of the client. Endpoint discovery must be completed.\r\n * @param updatedAuthority\r\n */\r\n updateAuthority(updatedAuthority: Authority): void {\r\n if (!updatedAuthority.discoveryComplete()) {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Updated authority has not completed endpoint discovery.\");\r\n }\r\n this.authority = updatedAuthority;\r\n }\r\n\r\n /**\r\n * Creates query string for the /token request\r\n * @param request\r\n */\r\n createTokenQueryParameters(request: BaseAuthRequest): string {\r\n const parameterBuilder = new RequestParameterBuilder();\r\n\r\n if (request.tokenQueryParameters) {\r\n parameterBuilder.addExtraQueryParameters(request.tokenQueryParameters);\r\n }\r\n\r\n return parameterBuilder.createQueryString();\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { IdTokenEntity } from \"./IdTokenEntity\";\r\nimport { AccessTokenEntity } from \"./AccessTokenEntity\";\r\nimport { RefreshTokenEntity } from \"./RefreshTokenEntity\";\r\nimport { AccountEntity } from \"./AccountEntity\";\r\nimport { AppMetadataEntity } from \"./AppMetadataEntity\";\r\n\r\nexport class CacheRecord {\r\n account: AccountEntity | null;\r\n idToken: IdTokenEntity | null;\r\n accessToken: AccessTokenEntity | null;\r\n refreshToken: RefreshTokenEntity | null;\r\n appMetadata: AppMetadataEntity | null;\r\n\r\n constructor(accountEntity?: AccountEntity | null, idTokenEntity?: IdTokenEntity | null, accessTokenEntity?: AccessTokenEntity | null, refreshTokenEntity?: RefreshTokenEntity | null, appMetadataEntity?: AppMetadataEntity | null) {\r\n this.account = accountEntity || null;\r\n this.idToken = idTokenEntity || null;\r\n this.accessToken = accessTokenEntity || null;\r\n this.refreshToken = refreshTokenEntity || null;\r\n this.appMetadata = appMetadataEntity || null;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ISerializableTokenCache } from \"../interface/ISerializableTokenCache\";\r\n\r\n/**\r\n * This class instance helps track the memory changes facilitating\r\n * decisions to read from and write to the persistent cache\r\n */export class TokenCacheContext {\r\n /**\r\n * boolean indicating cache change\r\n */\r\n hasChanged: boolean;\r\n /**\r\n * serializable token cache interface\r\n */\r\n cache: ISerializableTokenCache;\r\n\r\n constructor(tokenCache: ISerializableTokenCache, hasChanged: boolean) {\r\n this.cache = tokenCache;\r\n this.hasChanged = hasChanged;\r\n }\r\n\r\n /**\r\n * boolean which indicates the changes in cache\r\n */\r\n get cacheHasChanged(): boolean {\r\n return this.hasChanged;\r\n }\r\n\r\n /**\r\n * function to retrieve the token cache\r\n */\r\n get tokenCache(): ISerializableTokenCache {\r\n return this.cache;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ServerAuthorizationTokenResponse } from \"./ServerAuthorizationTokenResponse\";\r\nimport { buildClientInfo} from \"../account/ClientInfo\";\r\nimport { ICrypto } from \"../crypto/ICrypto\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { ServerAuthorizationCodeResponse } from \"./ServerAuthorizationCodeResponse\";\r\nimport { Logger } from \"../logger/Logger\";\r\nimport { ServerError } from \"../error/ServerError\";\r\nimport { AuthToken } from \"../account/AuthToken\";\r\nimport { ScopeSet } from \"../request/ScopeSet\";\r\nimport { AuthenticationResult } from \"./AuthenticationResult\";\r\nimport { AccountEntity } from \"../cache/entities/AccountEntity\";\r\nimport { Authority } from \"../authority/Authority\";\r\nimport { AuthorityType } from \"../authority/AuthorityType\";\r\nimport { IdTokenEntity } from \"../cache/entities/IdTokenEntity\";\r\nimport { AccessTokenEntity } from \"../cache/entities/AccessTokenEntity\";\r\nimport { RefreshTokenEntity } from \"../cache/entities/RefreshTokenEntity\";\r\nimport { InteractionRequiredAuthError } from \"../error/InteractionRequiredAuthError\";\r\nimport { CacheRecord } from \"../cache/entities/CacheRecord\";\r\nimport { CacheManager } from \"../cache/CacheManager\";\r\nimport { ProtocolUtils, RequestStateObject } from \"../utils/ProtocolUtils\";\r\nimport { AuthenticationScheme, Constants, THE_FAMILY_ID } from \"../utils/Constants\";\r\nimport { PopTokenGenerator } from \"../crypto/PopTokenGenerator\";\r\nimport { AppMetadataEntity } from \"../cache/entities/AppMetadataEntity\";\r\nimport { ICachePlugin } from \"../cache/interface/ICachePlugin\";\r\nimport { TokenCacheContext } from \"../cache/persistence/TokenCacheContext\";\r\nimport { ISerializableTokenCache } from \"../cache/interface/ISerializableTokenCache\";\r\nimport { AuthorizationCodePayload } from \"./AuthorizationCodePayload\";\r\nimport { BaseAuthRequest } from \"../request/BaseAuthRequest\";\r\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient\";\r\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent\";\r\n\r\n/**\r\n * Class that handles response parsing.\r\n */\r\nexport class ResponseHandler {\r\n private clientId: string;\r\n private cacheStorage: CacheManager;\r\n private cryptoObj: ICrypto;\r\n private logger: Logger;\r\n private homeAccountIdentifier: string;\r\n private serializableCache: ISerializableTokenCache | null;\r\n private persistencePlugin: ICachePlugin | null;\r\n private performanceClient?: IPerformanceClient;\r\n\r\n constructor(clientId: string, cacheStorage: CacheManager, cryptoObj: ICrypto, logger: Logger, serializableCache: ISerializableTokenCache | null, persistencePlugin: ICachePlugin | null, performanceClient?: IPerformanceClient) {\r\n this.clientId = clientId;\r\n this.cacheStorage = cacheStorage;\r\n this.cryptoObj = cryptoObj;\r\n this.logger = logger;\r\n this.serializableCache = serializableCache;\r\n this.persistencePlugin = persistencePlugin;\r\n this.performanceClient = performanceClient;\r\n }\r\n\r\n /**\r\n * Function which validates server authorization code response.\r\n * @param serverResponseHash\r\n * @param cachedState\r\n * @param cryptoObj\r\n */\r\n validateServerAuthorizationCodeResponse(serverResponseHash: ServerAuthorizationCodeResponse, cachedState: string, cryptoObj: ICrypto): void {\r\n\r\n if (!serverResponseHash.state || !cachedState) {\r\n throw !serverResponseHash.state ? ClientAuthError.createStateNotFoundError(\"Server State\") : ClientAuthError.createStateNotFoundError(\"Cached State\");\r\n }\r\n\r\n if (decodeURIComponent(serverResponseHash.state) !== decodeURIComponent(cachedState)) {\r\n throw ClientAuthError.createStateMismatchError();\r\n }\r\n\r\n // Check for error\r\n if (serverResponseHash.error || serverResponseHash.error_description || serverResponseHash.suberror) {\r\n if (InteractionRequiredAuthError.isInteractionRequiredError(serverResponseHash.error, serverResponseHash.error_description, serverResponseHash.suberror)) {\r\n throw new InteractionRequiredAuthError(\r\n serverResponseHash.error || Constants.EMPTY_STRING,\r\n serverResponseHash.error_description,\r\n serverResponseHash.suberror,\r\n serverResponseHash.timestamp || Constants.EMPTY_STRING,\r\n serverResponseHash.trace_id || Constants.EMPTY_STRING,\r\n serverResponseHash.correlation_id || Constants.EMPTY_STRING,\r\n serverResponseHash.claims || Constants.EMPTY_STRING,\r\n );\r\n }\r\n\r\n throw new ServerError(serverResponseHash.error || Constants.EMPTY_STRING, serverResponseHash.error_description, serverResponseHash.suberror);\r\n }\r\n\r\n if (serverResponseHash.client_info) {\r\n buildClientInfo(serverResponseHash.client_info, cryptoObj);\r\n }\r\n }\r\n\r\n /**\r\n * Function which validates server authorization token response.\r\n * @param serverResponse\r\n */\r\n validateTokenResponse(serverResponse: ServerAuthorizationTokenResponse): void {\r\n // Check for error\r\n if (serverResponse.error || serverResponse.error_description || serverResponse.suberror) {\r\n if (InteractionRequiredAuthError.isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) {\r\n throw new InteractionRequiredAuthError(\r\n serverResponse.error,\r\n serverResponse.error_description,\r\n serverResponse.suberror,\r\n serverResponse.timestamp || Constants.EMPTY_STRING,\r\n serverResponse.trace_id || Constants.EMPTY_STRING,\r\n serverResponse.correlation_id || Constants.EMPTY_STRING,\r\n serverResponse.claims || Constants.EMPTY_STRING,\r\n );\r\n }\r\n\r\n const errString = `${serverResponse.error_codes} - [${serverResponse.timestamp}]: ${serverResponse.error_description} - Correlation ID: ${serverResponse.correlation_id} - Trace ID: ${serverResponse.trace_id}`;\r\n throw new ServerError(serverResponse.error, errString, serverResponse.suberror);\r\n }\r\n }\r\n\r\n /**\r\n * Returns a constructed token response based on given string. Also manages the cache updates and cleanups.\r\n * @param serverTokenResponse\r\n * @param authority\r\n */\r\n async handleServerTokenResponse(\r\n serverTokenResponse: ServerAuthorizationTokenResponse,\r\n authority: Authority,\r\n reqTimestamp: number,\r\n request: BaseAuthRequest,\r\n authCodePayload?: AuthorizationCodePayload,\r\n userAssertionHash?: string,\r\n handlingRefreshTokenResponse?: boolean,\r\n forceCacheRefreshTokenResponse?: boolean,\r\n serverRequestId?: string): Promise {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.HandleServerTokenResponse, serverTokenResponse.correlation_id);\r\n\r\n // create an idToken object (not entity)\r\n let idTokenObj: AuthToken | undefined;\r\n if (serverTokenResponse.id_token) {\r\n idTokenObj = new AuthToken(serverTokenResponse.id_token || Constants.EMPTY_STRING, this.cryptoObj);\r\n\r\n // token nonce check (TODO: Add a warning if no nonce is given?)\r\n if (authCodePayload && !StringUtils.isEmpty(authCodePayload.nonce)) {\r\n if (idTokenObj.claims.nonce !== authCodePayload.nonce) {\r\n throw ClientAuthError.createNonceMismatchError();\r\n }\r\n }\r\n\r\n // token max_age check\r\n if (request.maxAge || (request.maxAge === 0)) {\r\n const authTime = idTokenObj.claims.auth_time;\r\n if (!authTime) {\r\n throw ClientAuthError.createAuthTimeNotFoundError();\r\n }\r\n\r\n AuthToken.checkMaxAge(authTime, request.maxAge);\r\n }\r\n }\r\n\r\n // generate homeAccountId\r\n this.homeAccountIdentifier = AccountEntity.generateHomeAccountId(serverTokenResponse.client_info || Constants.EMPTY_STRING, authority.authorityType, this.logger, this.cryptoObj, idTokenObj);\r\n\r\n // save the response tokens\r\n let requestStateObj: RequestStateObject | undefined;\r\n if (!!authCodePayload && !!authCodePayload.state) {\r\n requestStateObj = ProtocolUtils.parseRequestState(this.cryptoObj, authCodePayload.state);\r\n }\r\n\r\n // Add keyId from request to serverTokenResponse if defined\r\n serverTokenResponse.key_id = serverTokenResponse.key_id || request.sshKid || undefined;\r\n\r\n const cacheRecord = this.generateCacheRecord(serverTokenResponse, authority, reqTimestamp, request, idTokenObj, userAssertionHash, authCodePayload);\r\n let cacheContext;\r\n try {\r\n if (this.persistencePlugin && this.serializableCache) {\r\n this.logger.verbose(\"Persistence enabled, calling beforeCacheAccess\");\r\n cacheContext = new TokenCacheContext(this.serializableCache, true);\r\n await this.persistencePlugin.beforeCacheAccess(cacheContext);\r\n }\r\n /*\r\n * When saving a refreshed tokens to the cache, it is expected that the account that was used is present in the cache.\r\n * If not present, we should return null, as it's the case that another application called removeAccount in between\r\n * the calls to getAllAccounts and acquireTokenSilent. We should not overwrite that removal, unless explicitly flagged by\r\n * the developer, as in the case of refresh token flow used in ADAL Node to MSAL Node migration.\r\n */\r\n if (handlingRefreshTokenResponse && !forceCacheRefreshTokenResponse && cacheRecord.account) {\r\n const key = cacheRecord.account.generateAccountKey();\r\n const account = this.cacheStorage.getAccount(key);\r\n if (!account) {\r\n this.logger.warning(\"Account used to refresh tokens not in persistence, refreshed tokens will not be stored in the cache\");\r\n return ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, idTokenObj, requestStateObj, undefined, serverRequestId);\r\n }\r\n }\r\n await this.cacheStorage.saveCacheRecord(cacheRecord);\r\n } finally {\r\n if (this.persistencePlugin && this.serializableCache && cacheContext) {\r\n this.logger.verbose(\"Persistence enabled, calling afterCacheAccess\");\r\n await this.persistencePlugin.afterCacheAccess(cacheContext);\r\n }\r\n }\r\n return ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, idTokenObj, requestStateObj, serverTokenResponse, serverRequestId);\r\n }\r\n\r\n /**\r\n * Generates CacheRecord\r\n * @param serverTokenResponse\r\n * @param idTokenObj\r\n * @param authority\r\n */\r\n private generateCacheRecord(serverTokenResponse: ServerAuthorizationTokenResponse, authority: Authority, reqTimestamp: number, request: BaseAuthRequest, idTokenObj?: AuthToken, userAssertionHash?: string, authCodePayload?: AuthorizationCodePayload): CacheRecord {\r\n const env = authority.getPreferredCache();\r\n if (StringUtils.isEmpty(env)) {\r\n throw ClientAuthError.createInvalidCacheEnvironmentError();\r\n }\r\n\r\n // IdToken: non AAD scenarios can have empty realm\r\n let cachedIdToken: IdTokenEntity | undefined;\r\n let cachedAccount: AccountEntity | undefined;\r\n if (!StringUtils.isEmpty(serverTokenResponse.id_token) && !!idTokenObj) {\r\n cachedIdToken = IdTokenEntity.createIdTokenEntity(\r\n this.homeAccountIdentifier,\r\n env,\r\n serverTokenResponse.id_token || Constants.EMPTY_STRING,\r\n this.clientId,\r\n idTokenObj.claims.tid || Constants.EMPTY_STRING,\r\n );\r\n\r\n cachedAccount = this.generateAccountEntity(\r\n serverTokenResponse,\r\n idTokenObj,\r\n authority,\r\n authCodePayload\r\n );\r\n }\r\n\r\n // AccessToken\r\n let cachedAccessToken: AccessTokenEntity | null = null;\r\n if (!StringUtils.isEmpty(serverTokenResponse.access_token)) {\r\n\r\n // If scopes not returned in server response, use request scopes\r\n const responseScopes = serverTokenResponse.scope ? ScopeSet.fromString(serverTokenResponse.scope) : new ScopeSet(request.scopes || []);\r\n\r\n /*\r\n * Use timestamp calculated before request\r\n * Server may return timestamps as strings, parse to numbers if so.\r\n */\r\n const expiresIn: number = (typeof serverTokenResponse.expires_in === \"string\" ? parseInt(serverTokenResponse.expires_in, 10) : serverTokenResponse.expires_in) || 0;\r\n const extExpiresIn: number = (typeof serverTokenResponse.ext_expires_in === \"string\" ? parseInt(serverTokenResponse.ext_expires_in, 10) : serverTokenResponse.ext_expires_in) || 0;\r\n const refreshIn: number | undefined = (typeof serverTokenResponse.refresh_in === \"string\" ? parseInt(serverTokenResponse.refresh_in, 10) : serverTokenResponse.refresh_in) || undefined;\r\n const tokenExpirationSeconds = reqTimestamp + expiresIn;\r\n const extendedTokenExpirationSeconds = tokenExpirationSeconds + extExpiresIn;\r\n const refreshOnSeconds = refreshIn && refreshIn > 0 ? reqTimestamp + refreshIn : undefined;\r\n\r\n // non AAD scenarios can have empty realm\r\n cachedAccessToken = AccessTokenEntity.createAccessTokenEntity(\r\n this.homeAccountIdentifier,\r\n env,\r\n serverTokenResponse.access_token || Constants.EMPTY_STRING,\r\n this.clientId,\r\n idTokenObj ? idTokenObj.claims.tid || Constants.EMPTY_STRING : authority.tenant,\r\n responseScopes.printScopes(),\r\n tokenExpirationSeconds,\r\n extendedTokenExpirationSeconds,\r\n this.cryptoObj,\r\n refreshOnSeconds,\r\n serverTokenResponse.token_type,\r\n userAssertionHash,\r\n serverTokenResponse.key_id,\r\n request.claims,\r\n request.requestedClaimsHash\r\n );\r\n }\r\n\r\n // refreshToken\r\n let cachedRefreshToken: RefreshTokenEntity | null = null;\r\n if (!StringUtils.isEmpty(serverTokenResponse.refresh_token)) {\r\n cachedRefreshToken = RefreshTokenEntity.createRefreshTokenEntity(\r\n this.homeAccountIdentifier,\r\n env,\r\n serverTokenResponse.refresh_token || Constants.EMPTY_STRING,\r\n this.clientId,\r\n serverTokenResponse.foci,\r\n userAssertionHash\r\n );\r\n }\r\n\r\n // appMetadata\r\n let cachedAppMetadata: AppMetadataEntity | null = null;\r\n if (!StringUtils.isEmpty(serverTokenResponse.foci)) {\r\n cachedAppMetadata = AppMetadataEntity.createAppMetadataEntity(this.clientId, env, serverTokenResponse.foci);\r\n }\r\n\r\n return new CacheRecord(cachedAccount, cachedIdToken, cachedAccessToken, cachedRefreshToken, cachedAppMetadata);\r\n }\r\n\r\n /**\r\n * Generate Account\r\n * @param serverTokenResponse\r\n * @param idToken\r\n * @param authority\r\n */\r\n private generateAccountEntity(serverTokenResponse: ServerAuthorizationTokenResponse, idToken: AuthToken, authority: Authority, authCodePayload?: AuthorizationCodePayload): AccountEntity {\r\n const authorityType = authority.authorityType;\r\n const cloudGraphHostName = authCodePayload ? authCodePayload.cloud_graph_host_name : Constants.EMPTY_STRING;\r\n const msGraphhost = authCodePayload ? authCodePayload.msgraph_host : Constants.EMPTY_STRING;\r\n\r\n // ADFS does not require client_info in the response\r\n if (authorityType === AuthorityType.Adfs) {\r\n this.logger.verbose(\"Authority type is ADFS, creating ADFS account\");\r\n return AccountEntity.createGenericAccount(this.homeAccountIdentifier, idToken, authority, cloudGraphHostName, msGraphhost);\r\n }\r\n\r\n // This fallback applies to B2C as well as they fall under an AAD account type.\r\n if (StringUtils.isEmpty(serverTokenResponse.client_info) && authority.protocolMode === \"AAD\") {\r\n throw ClientAuthError.createClientInfoEmptyError();\r\n }\r\n\r\n return serverTokenResponse.client_info ?\r\n AccountEntity.createAccount(serverTokenResponse.client_info, this.homeAccountIdentifier, idToken, authority, cloudGraphHostName, msGraphhost) :\r\n AccountEntity.createGenericAccount(this.homeAccountIdentifier, idToken, authority, cloudGraphHostName, msGraphhost);\r\n }\r\n\r\n /**\r\n * Creates an @AuthenticationResult from @CacheRecord , @IdToken , and a boolean that states whether or not the result is from cache.\r\n *\r\n * Optionally takes a state string that is set as-is in the response.\r\n *\r\n * @param cacheRecord\r\n * @param idTokenObj\r\n * @param fromTokenCache\r\n * @param stateString\r\n */\r\n static async generateAuthenticationResult(\r\n cryptoObj: ICrypto,\r\n authority: Authority,\r\n cacheRecord: CacheRecord,\r\n fromTokenCache: boolean,\r\n request: BaseAuthRequest,\r\n idTokenObj?: AuthToken,\r\n requestState?: RequestStateObject,\r\n serverTokenResponse?: ServerAuthorizationTokenResponse,\r\n requestId?: string,\r\n ): Promise {\r\n let accessToken: string = Constants.EMPTY_STRING;\r\n let responseScopes: Array = [];\r\n let expiresOn: Date | null = null;\r\n let extExpiresOn: Date | undefined;\r\n let familyId: string = Constants.EMPTY_STRING;\r\n\r\n if (cacheRecord.accessToken) {\r\n if (cacheRecord.accessToken.tokenType === AuthenticationScheme.POP) {\r\n const popTokenGenerator: PopTokenGenerator = new PopTokenGenerator(cryptoObj);\r\n const { secret, keyId } = cacheRecord.accessToken;\r\n\r\n if (!keyId) {\r\n throw ClientAuthError.createKeyIdMissingError();\r\n }\r\n\r\n accessToken = await popTokenGenerator.signPopToken(secret, keyId, request);\r\n } else {\r\n accessToken = cacheRecord.accessToken.secret;\r\n }\r\n responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray();\r\n expiresOn = new Date(Number(cacheRecord.accessToken.expiresOn) * 1000);\r\n extExpiresOn = new Date(Number(cacheRecord.accessToken.extendedExpiresOn) * 1000);\r\n }\r\n\r\n if (cacheRecord.appMetadata) {\r\n familyId = cacheRecord.appMetadata.familyId === THE_FAMILY_ID ? THE_FAMILY_ID : Constants.EMPTY_STRING;\r\n }\r\n const uid = idTokenObj?.claims.oid || idTokenObj?.claims.sub || Constants.EMPTY_STRING;\r\n const tid = idTokenObj?.claims.tid || Constants.EMPTY_STRING;\r\n\r\n // for hybrid + native bridge enablement, send back the native account Id\r\n if(serverTokenResponse?.spa_accountid && !!cacheRecord.account){\r\n cacheRecord.account.nativeAccountId = serverTokenResponse?.spa_accountid;\r\n }\r\n\r\n return {\r\n authority: authority.canonicalAuthority,\r\n uniqueId: uid,\r\n tenantId: tid,\r\n scopes: responseScopes,\r\n account: cacheRecord.account ? cacheRecord.account.getAccountInfo() : null,\r\n idToken: idTokenObj ? idTokenObj.rawToken : Constants.EMPTY_STRING,\r\n idTokenClaims: idTokenObj ? idTokenObj.claims : {},\r\n accessToken: accessToken,\r\n fromCache: fromTokenCache,\r\n expiresOn: expiresOn,\r\n correlationId: request.correlationId,\r\n requestId: requestId || Constants.EMPTY_STRING,\r\n extExpiresOn: extExpiresOn,\r\n familyId: familyId,\r\n tokenType: cacheRecord.accessToken?.tokenType || Constants.EMPTY_STRING,\r\n state: requestState ? requestState.userRequestState : Constants.EMPTY_STRING,\r\n cloudGraphHostName: cacheRecord.account?.cloudGraphHostName || Constants.EMPTY_STRING,\r\n msGraphHost: cacheRecord.account?.msGraphHost || Constants.EMPTY_STRING,\r\n code: serverTokenResponse?.spa_code,\r\n fromNativeBroker: false,\r\n };\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { BaseClient } from \"./BaseClient\";\r\nimport { CommonAuthorizationUrlRequest } from \"../request/CommonAuthorizationUrlRequest\";\r\nimport { CommonAuthorizationCodeRequest } from \"../request/CommonAuthorizationCodeRequest\";\r\nimport { Authority } from \"../authority/Authority\";\r\nimport { RequestParameterBuilder } from \"../request/RequestParameterBuilder\";\r\nimport { GrantType, AuthenticationScheme, PromptValue, Separators, AADServerParamKeys, HeaderNames } from \"../utils/Constants\";\r\nimport { ClientConfiguration } from \"../config/ClientConfiguration\";\r\nimport { ServerAuthorizationTokenResponse } from \"../response/ServerAuthorizationTokenResponse\";\r\nimport { NetworkResponse } from \"../network/NetworkManager\";\r\nimport { ResponseHandler } from \"../response/ResponseHandler\";\r\nimport { AuthenticationResult } from \"../response/AuthenticationResult\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { UrlString } from \"../url/UrlString\";\r\nimport { ServerAuthorizationCodeResponse } from \"../response/ServerAuthorizationCodeResponse\";\r\nimport { CommonEndSessionRequest } from \"../request/CommonEndSessionRequest\";\r\nimport { PopTokenGenerator } from \"../crypto/PopTokenGenerator\";\r\nimport { RequestThumbprint } from \"../network/RequestThumbprint\";\r\nimport { AuthorizationCodePayload } from \"../response/AuthorizationCodePayload\";\r\nimport { TimeUtils } from \"../utils/TimeUtils\";\r\nimport { AccountInfo } from \"../account/AccountInfo\";\r\nimport { buildClientInfoFromHomeAccountId, buildClientInfo } from \"../account/ClientInfo\";\r\nimport { CcsCredentialType, CcsCredential } from \"../account/CcsCredential\";\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { RequestValidator } from \"../request/RequestValidator\";\r\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient\";\r\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent\";\r\n\r\n/**\r\n * Oauth2.0 Authorization Code client\r\n */\r\nexport class AuthorizationCodeClient extends BaseClient {\r\n // Flag to indicate if client is for hybrid spa auth code redemption\r\n protected includeRedirectUri: boolean = true;\r\n\r\n constructor(configuration: ClientConfiguration, performanceClient?: IPerformanceClient) {\r\n super(configuration, performanceClient);\r\n }\r\n\r\n /**\r\n * Creates the URL of the authorization request letting the user input credentials and consent to the\r\n * application. The URL target the /authorize endpoint of the authority configured in the\r\n * application object.\r\n *\r\n * Once the user inputs their credentials and consents, the authority will send a response to the redirect URI\r\n * sent in the request and should contain an authorization code, which can then be used to acquire tokens via\r\n * acquireToken(AuthorizationCodeRequest)\r\n * @param request\r\n */\r\n async getAuthCodeUrl(request: CommonAuthorizationUrlRequest): Promise {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.GetAuthCodeUrl, request.correlationId);\r\n\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.AuthClientCreateQueryString, request.correlationId);\r\n const queryString = await this.createAuthCodeUrlQueryString(request);\r\n\r\n return UrlString.appendQueryString(this.authority.authorizationEndpoint, queryString);\r\n }\r\n\r\n /**\r\n * API to acquire a token in exchange of 'authorization_code` acquired by the user in the first leg of the\r\n * authorization_code_grant\r\n * @param request\r\n */\r\n async acquireToken(request: CommonAuthorizationCodeRequest, authCodePayload?: AuthorizationCodePayload): Promise {\r\n if (!request || !request.code) {\r\n throw ClientAuthError.createTokenRequestCannotBeMadeError();\r\n }\r\n\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientAcquireToken, request.correlationId);\r\n \r\n // @ts-ignore\r\n const atsMeasurement = this.performanceClient?.startMeasurement(\"AuthCodeClientAcquireToken\", request.correlationId);\r\n this.logger.info(\"in acquireToken call in auth-code client\");\r\n\r\n const reqTimestamp = TimeUtils.nowSeconds();\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.AuthClientExecuteTokenRequest, request.correlationId);\r\n const response = await this.executeTokenRequest(this.authority, request);\r\n\r\n // Retrieve requestId from response headers\r\n const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID];\r\n const httpVerAuthority = response.headers?.[HeaderNames.X_MS_HTTP_VERSION];\r\n if(httpVerAuthority)\r\n {\r\n atsMeasurement?.addStaticFields({\r\n httpVerAuthority\r\n });\r\n }\r\n const responseHandler = new ResponseHandler(\r\n this.config.authOptions.clientId,\r\n this.cacheManager,\r\n this.cryptoUtils,\r\n this.logger,\r\n this.config.serializableCache,\r\n this.config.persistencePlugin,\r\n this.performanceClient\r\n );\r\n\r\n // Validate response. This function throws a server error if an error is returned by the server.\r\n responseHandler.validateTokenResponse(response.body);\r\n\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.HandleServerTokenResponse, request.correlationId);\r\n return responseHandler.handleServerTokenResponse(\r\n response.body,\r\n this.authority,\r\n reqTimestamp,\r\n request,\r\n authCodePayload,\r\n undefined,\r\n undefined,\r\n undefined,\r\n requestId\r\n ).then((result: AuthenticationResult) => {\r\n atsMeasurement?.endMeasurement({\r\n success: true\r\n });\r\n return result;\r\n })\r\n .catch((error) => {\r\n this.logger.verbose(\"Error in fetching token in ACC\", request.correlationId);\r\n atsMeasurement?.endMeasurement({\r\n errorCode: error.errorCode,\r\n subErrorCode: error.subError,\r\n success: false\r\n });\r\n throw error;\r\n });\r\n }\r\n\r\n /**\r\n * Handles the hash fragment response from public client code request. Returns a code response used by\r\n * the client to exchange for a token in acquireToken.\r\n * @param hashFragment\r\n */\r\n handleFragmentResponse(hashFragment: string, cachedState: string): AuthorizationCodePayload {\r\n // Handle responses.\r\n const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, null, null);\r\n\r\n // Deserialize hash fragment response parameters.\r\n const hashUrlString = new UrlString(hashFragment);\r\n // Deserialize hash fragment response parameters.\r\n const serverParams: ServerAuthorizationCodeResponse = UrlString.getDeserializedHash(hashUrlString.getHash());\r\n\r\n // Get code response\r\n responseHandler.validateServerAuthorizationCodeResponse(serverParams, cachedState, this.cryptoUtils);\r\n\r\n // throw when there is no auth code in the response\r\n if (!serverParams.code) {\r\n throw ClientAuthError.createNoAuthCodeInServerResponseError();\r\n }\r\n return {\r\n ...serverParams,\r\n // Code param is optional in ServerAuthorizationCodeResponse but required in AuthorizationCodePaylod\r\n code: serverParams.code\r\n };\r\n }\r\n\r\n /**\r\n * Used to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n * Default behaviour is to redirect the user to `window.location.href`.\r\n * @param authorityUri\r\n */\r\n getLogoutUri(logoutRequest: CommonEndSessionRequest): string {\r\n // Throw error if logoutRequest is null/undefined\r\n if (!logoutRequest) {\r\n throw ClientConfigurationError.createEmptyLogoutRequestError();\r\n }\r\n const queryString = this.createLogoutUrlQueryString(logoutRequest);\r\n\r\n // Construct logout URI\r\n return UrlString.appendQueryString(this.authority.endSessionEndpoint, queryString);\r\n }\r\n\r\n /**\r\n * Executes POST request to token endpoint\r\n * @param authority\r\n * @param request\r\n */\r\n private async executeTokenRequest(authority: Authority, request: CommonAuthorizationCodeRequest): Promise> {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientExecuteTokenRequest, request.correlationId);\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.AuthClientCreateTokenRequestBody, request.correlationId);\r\n \r\n const queryParametersString = this.createTokenQueryParameters(request);\r\n const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString);\r\n \r\n const requestBody = await this.createTokenRequestBody(request);\r\n \r\n let ccsCredential: CcsCredential | undefined = undefined;\r\n if (request.clientInfo) {\r\n try {\r\n const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils);\r\n ccsCredential = {\r\n credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`,\r\n type: CcsCredentialType.HOME_ACCOUNT_ID\r\n };\r\n } catch (e) {\r\n this.logger.verbose(\"Could not parse client info for CCS Header: \" + e);\r\n }\r\n }\r\n const headers: Record = this.createTokenRequestHeaders(ccsCredential || request.ccsCredential);\r\n\r\n const thumbprint: RequestThumbprint = {\r\n clientId: this.config.authOptions.clientId,\r\n authority: authority.canonicalAuthority,\r\n scopes: request.scopes,\r\n claims: request.claims,\r\n authenticationScheme: request.authenticationScheme,\r\n resourceRequestMethod: request.resourceRequestMethod,\r\n resourceRequestUri: request.resourceRequestUri,\r\n shrClaims: request.shrClaims,\r\n sshKid: request.sshKid\r\n };\r\n\r\n return this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint);\r\n }\r\n\r\n /**\r\n * Generates a map for all the params to be sent to the service\r\n * @param request\r\n */\r\n private async createTokenRequestBody(request: CommonAuthorizationCodeRequest): Promise {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientCreateTokenRequestBody, request.correlationId);\r\n\r\n const parameterBuilder = new RequestParameterBuilder();\r\n\r\n parameterBuilder.addClientId(this.config.authOptions.clientId);\r\n\r\n /*\r\n * For hybrid spa flow, there will be a code but no verifier\r\n * In this scenario, don't include redirect uri as auth code will not be bound to redirect URI\r\n */\r\n if (!this.includeRedirectUri) {\r\n // Just validate\r\n RequestValidator.validateRedirectUri(request.redirectUri);\r\n } else {\r\n // Validate and include redirect uri\r\n parameterBuilder.addRedirectUri(request.redirectUri);\r\n }\r\n\r\n // Add scope array, parameter builder will add default scopes and dedupe\r\n parameterBuilder.addScopes(request.scopes);\r\n\r\n // add code: user set, not validated\r\n parameterBuilder.addAuthorizationCode(request.code);\r\n\r\n // Add library metadata\r\n parameterBuilder.addLibraryInfo(this.config.libraryInfo);\r\n parameterBuilder.addApplicationTelemetry(this.config.telemetry.application);\r\n parameterBuilder.addThrottling();\r\n\r\n if (this.serverTelemetryManager) {\r\n parameterBuilder.addServerTelemetry(this.serverTelemetryManager);\r\n }\r\n\r\n // add code_verifier if passed\r\n if (request.codeVerifier) {\r\n parameterBuilder.addCodeVerifier(request.codeVerifier);\r\n }\r\n\r\n if (this.config.clientCredentials.clientSecret) {\r\n parameterBuilder.addClientSecret(this.config.clientCredentials.clientSecret);\r\n }\r\n\r\n if (this.config.clientCredentials.clientAssertion) {\r\n const clientAssertion = this.config.clientCredentials.clientAssertion;\r\n parameterBuilder.addClientAssertion(clientAssertion.assertion);\r\n parameterBuilder.addClientAssertionType(clientAssertion.assertionType);\r\n }\r\n\r\n parameterBuilder.addGrantType(GrantType.AUTHORIZATION_CODE_GRANT);\r\n parameterBuilder.addClientInfo();\r\n\r\n if (request.authenticationScheme === AuthenticationScheme.POP) {\r\n const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient);\r\n\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.PopTokenGenerateCnf, request.correlationId);\r\n const reqCnfData = await popTokenGenerator.generateCnf(request);\r\n // SPA PoP requires full Base64Url encoded req_cnf string (unhashed)\r\n parameterBuilder.addPopToken(reqCnfData.reqCnfString);\r\n } else if (request.authenticationScheme === AuthenticationScheme.SSH) {\r\n if (request.sshJwk) {\r\n parameterBuilder.addSshJwk(request.sshJwk);\r\n } else {\r\n throw ClientConfigurationError.createMissingSshJwkError();\r\n }\r\n }\r\n\r\n const correlationId = request.correlationId || this.config.cryptoInterface.createNewGuid();\r\n parameterBuilder.addCorrelationId(correlationId);\r\n\r\n if (!StringUtils.isEmptyObj(request.claims) || this.config.authOptions.clientCapabilities && this.config.authOptions.clientCapabilities.length > 0) {\r\n parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);\r\n }\r\n\r\n let ccsCred: CcsCredential | undefined = undefined;\r\n if (request.clientInfo) {\r\n try {\r\n const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils);\r\n ccsCred = {\r\n credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`,\r\n type: CcsCredentialType.HOME_ACCOUNT_ID\r\n };\r\n } catch (e) {\r\n this.logger.verbose(\"Could not parse client info for CCS Header: \" + e);\r\n }\r\n } else {\r\n ccsCred = request.ccsCredential;\r\n }\r\n\r\n // Adds these as parameters in the request instead of headers to prevent CORS preflight request\r\n if (this.config.systemOptions.preventCorsPreflight && ccsCred) {\r\n switch (ccsCred.type) {\r\n case CcsCredentialType.HOME_ACCOUNT_ID:\r\n try {\r\n const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential);\r\n parameterBuilder.addCcsOid(clientInfo);\r\n } catch (e) {\r\n this.logger.verbose(\"Could not parse home account ID for CCS Header: \" + e);\r\n }\r\n break;\r\n case CcsCredentialType.UPN:\r\n parameterBuilder.addCcsUpn(ccsCred.credential);\r\n break;\r\n }\r\n }\r\n\r\n if (request.tokenBodyParameters) {\r\n parameterBuilder.addExtraQueryParameters(request.tokenBodyParameters);\r\n }\r\n\r\n // Add hybrid spa parameters if not already provided\r\n if (request.enableSpaAuthorizationCode && (!request.tokenBodyParameters || !request.tokenBodyParameters[AADServerParamKeys.RETURN_SPA_CODE])) {\r\n parameterBuilder.addExtraQueryParameters({\r\n [AADServerParamKeys.RETURN_SPA_CODE]: \"1\"\r\n });\r\n }\r\n\r\n return parameterBuilder.createQueryString();\r\n }\r\n\r\n /**\r\n * This API validates the `AuthorizationCodeUrlRequest` and creates a URL\r\n * @param request\r\n */\r\n private async createAuthCodeUrlQueryString(request: CommonAuthorizationUrlRequest): Promise {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientCreateQueryString, request.correlationId);\r\n\r\n const parameterBuilder = new RequestParameterBuilder();\r\n\r\n parameterBuilder.addClientId(this.config.authOptions.clientId);\r\n\r\n const requestScopes = [...request.scopes || [], ...request.extraScopesToConsent || []];\r\n parameterBuilder.addScopes(requestScopes);\r\n\r\n // validate the redirectUri (to be a non null value)\r\n parameterBuilder.addRedirectUri(request.redirectUri);\r\n\r\n // generate the correlationId if not set by the user and add\r\n const correlationId = request.correlationId || this.config.cryptoInterface.createNewGuid();\r\n parameterBuilder.addCorrelationId(correlationId);\r\n\r\n // add response_mode. If not passed in it defaults to query.\r\n parameterBuilder.addResponseMode(request.responseMode);\r\n\r\n // add response_type = code\r\n parameterBuilder.addResponseTypeCode();\r\n\r\n // add library info parameters\r\n parameterBuilder.addLibraryInfo(this.config.libraryInfo);\r\n parameterBuilder.addApplicationTelemetry(this.config.telemetry.application);\r\n\r\n // add client_info=1\r\n parameterBuilder.addClientInfo();\r\n\r\n if (request.codeChallenge && request.codeChallengeMethod) {\r\n parameterBuilder.addCodeChallengeParams(request.codeChallenge, request.codeChallengeMethod);\r\n }\r\n\r\n if (request.prompt) {\r\n parameterBuilder.addPrompt(request.prompt);\r\n }\r\n\r\n if (request.domainHint) {\r\n parameterBuilder.addDomainHint(request.domainHint);\r\n }\r\n\r\n // Add sid or loginHint with preference for login_hint claim (in request) -> sid -> loginHint (upn/email) -> username of AccountInfo object\r\n if (request.prompt !== PromptValue.SELECT_ACCOUNT) {\r\n // AAD will throw if prompt=select_account is passed with an account hint\r\n if (request.sid && request.prompt === PromptValue.NONE) {\r\n // SessionID is only used in silent calls\r\n this.logger.verbose(\"createAuthCodeUrlQueryString: Prompt is none, adding sid from request\");\r\n parameterBuilder.addSid(request.sid);\r\n } else if (request.account) {\r\n const accountSid = this.extractAccountSid(request.account);\r\n const accountLoginHintClaim = this.extractLoginHint(request.account);\r\n // If login_hint claim is present, use it over sid/username\r\n if (accountLoginHintClaim) {\r\n this.logger.verbose(\"createAuthCodeUrlQueryString: login_hint claim present on account\");\r\n parameterBuilder.addLoginHint(accountLoginHintClaim);\r\n try {\r\n const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);\r\n parameterBuilder.addCcsOid(clientInfo);\r\n } catch (e) {\r\n this.logger.verbose(\"createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header\");\r\n }\r\n } else if (accountSid && request.prompt === PromptValue.NONE) {\r\n /*\r\n * If account and loginHint are provided, we will check account first for sid before adding loginHint\r\n * SessionId is only used in silent calls\r\n */\r\n this.logger.verbose(\"createAuthCodeUrlQueryString: Prompt is none, adding sid from account\");\r\n parameterBuilder.addSid(accountSid);\r\n try {\r\n const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);\r\n parameterBuilder.addCcsOid(clientInfo);\r\n } catch (e) {\r\n this.logger.verbose(\"createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header\");\r\n }\r\n } else if (request.loginHint) {\r\n this.logger.verbose(\"createAuthCodeUrlQueryString: Adding login_hint from request\");\r\n parameterBuilder.addLoginHint(request.loginHint);\r\n parameterBuilder.addCcsUpn(request.loginHint);\r\n } else if (request.account.username) {\r\n // Fallback to account username if provided\r\n this.logger.verbose(\"createAuthCodeUrlQueryString: Adding login_hint from account\");\r\n parameterBuilder.addLoginHint(request.account.username);\r\n try {\r\n const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);\r\n parameterBuilder.addCcsOid(clientInfo);\r\n } catch (e) {\r\n this.logger.verbose(\"createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header\");\r\n }\r\n }\r\n } else if (request.loginHint) {\r\n this.logger.verbose(\"createAuthCodeUrlQueryString: No account, adding login_hint from request\");\r\n parameterBuilder.addLoginHint(request.loginHint);\r\n parameterBuilder.addCcsUpn(request.loginHint);\r\n }\r\n } else {\r\n this.logger.verbose(\"createAuthCodeUrlQueryString: Prompt is select_account, ignoring account hints\");\r\n }\r\n\r\n if (request.nonce) {\r\n parameterBuilder.addNonce(request.nonce);\r\n }\r\n\r\n if (request.state) {\r\n parameterBuilder.addState(request.state);\r\n }\r\n\r\n if (!StringUtils.isEmpty(request.claims) || this.config.authOptions.clientCapabilities && this.config.authOptions.clientCapabilities.length > 0) {\r\n parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);\r\n }\r\n\r\n if (request.extraQueryParameters) {\r\n parameterBuilder.addExtraQueryParameters(request.extraQueryParameters);\r\n }\r\n\r\n if (request.nativeBroker) {\r\n // signal ests that this is a WAM call\r\n parameterBuilder.addNativeBroker();\r\n\r\n // pass the req_cnf for POP\r\n if (request.authenticationScheme === AuthenticationScheme.POP) {\r\n const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils);\r\n // to reduce the URL length, it is recommended to send the short form of the req_cnf\r\n const reqCnfData = await popTokenGenerator.generateCnf(request);\r\n parameterBuilder.addPopToken(reqCnfData.reqCnfString);\r\n }\r\n }\r\n\r\n return parameterBuilder.createQueryString();\r\n }\r\n\r\n /**\r\n * This API validates the `EndSessionRequest` and creates a URL\r\n * @param request\r\n */\r\n private createLogoutUrlQueryString(request: CommonEndSessionRequest): string {\r\n const parameterBuilder = new RequestParameterBuilder();\r\n\r\n if (request.postLogoutRedirectUri) {\r\n parameterBuilder.addPostLogoutRedirectUri(request.postLogoutRedirectUri);\r\n }\r\n\r\n if (request.correlationId) {\r\n parameterBuilder.addCorrelationId(request.correlationId);\r\n }\r\n\r\n if (request.idTokenHint) {\r\n parameterBuilder.addIdTokenHint(request.idTokenHint);\r\n }\r\n\r\n if (request.state) {\r\n parameterBuilder.addState(request.state);\r\n }\r\n\r\n if (request.logoutHint) {\r\n parameterBuilder.addLogoutHint(request.logoutHint);\r\n }\r\n\r\n if (request.extraQueryParameters) {\r\n parameterBuilder.addExtraQueryParameters(request.extraQueryParameters);\r\n }\r\n\r\n return parameterBuilder.createQueryString();\r\n }\r\n\r\n /**\r\n * Helper to get sid from account. Returns null if idTokenClaims are not present or sid is not present.\r\n * @param account\r\n */\r\n private extractAccountSid(account: AccountInfo): string | null {\r\n return account.idTokenClaims?.sid || null;\r\n }\r\n\r\n private extractLoginHint(account: AccountInfo): string | null {\r\n return account.idTokenClaims?.login_hint || null;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\n/**\r\n * Tenant Discovery Response which contains the relevant OAuth endpoints and data needed for authentication and authorization.\r\n */\r\nexport type OpenIdConfigResponse = {\r\n authorization_endpoint: string;\r\n token_endpoint: string;\r\n end_session_endpoint?: string;\r\n issuer: string;\r\n jwks_uri: string;\r\n};\r\n\r\nexport function isOpenIdConfigResponse(response: object): boolean {\r\n return (\r\n response.hasOwnProperty(\"authorization_endpoint\") &&\r\n response.hasOwnProperty(\"token_endpoint\") && \r\n response.hasOwnProperty(\"issuer\") &&\r\n response.hasOwnProperty(\"jwks_uri\")\r\n );\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nexport const rawMetdataJSON = {\"endpointMetadata\":{\"https://login.microsoftonline.com/common/\":{\"token_endpoint\":\"https://login.microsoftonline.com/common/oauth2/v2.0/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_post\",\"private_key_jwt\",\"client_secret_basic\"],\"jwks_uri\":\"https://login.microsoftonline.com/common/discovery/v2.0/keys\",\"response_modes_supported\":[\"query\",\"fragment\",\"form_post\"],\"subject_types_supported\":[\"pairwise\"],\"id_token_signing_alg_values_supported\":[\"RS256\"],\"response_types_supported\":[\"code\",\"id_token\",\"code id_token\",\"id_token token\"],\"scopes_supported\":[\"openid\",\"profile\",\"email\",\"offline_access\"],\"issuer\":\"https://login.microsoftonline.com/{tenantid}/v2.0\",\"request_uri_parameter_supported\":false,\"userinfo_endpoint\":\"https://graph.microsoft.com/oidc/userinfo\",\"authorization_endpoint\":\"https://login.microsoftonline.com/common/oauth2/v2.0/authorize\",\"device_authorization_endpoint\":\"https://login.microsoftonline.com/common/oauth2/v2.0/devicecode\",\"http_logout_supported\":true,\"frontchannel_logout_supported\":true,\"end_session_endpoint\":\"https://login.microsoftonline.com/common/oauth2/v2.0/logout\",\"claims_supported\":[\"sub\",\"iss\",\"cloud_instance_name\",\"cloud_instance_host_name\",\"cloud_graph_host_name\",\"msgraph_host\",\"aud\",\"exp\",\"iat\",\"auth_time\",\"acr\",\"nonce\",\"preferred_username\",\"name\",\"tid\",\"ver\",\"at_hash\",\"c_hash\",\"email\"],\"kerberos_endpoint\":\"https://login.microsoftonline.com/common/kerberos\",\"tenant_region_scope\":null,\"cloud_instance_name\":\"microsoftonline.com\",\"cloud_graph_host_name\":\"graph.windows.net\",\"msgraph_host\":\"graph.microsoft.com\",\"rbac_url\":\"https://pas.windows.net\"},\"https://login.chinacloudapi.cn/common/\":{\"token_endpoint\":\"https://login.chinacloudapi.cn/common/oauth2/v2.0/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_post\",\"private_key_jwt\",\"client_secret_basic\"],\"jwks_uri\":\"https://login.chinacloudapi.cn/common/discovery/v2.0/keys\",\"response_modes_supported\":[\"query\",\"fragment\",\"form_post\"],\"subject_types_supported\":[\"pairwise\"],\"id_token_signing_alg_values_supported\":[\"RS256\"],\"response_types_supported\":[\"code\",\"id_token\",\"code id_token\",\"id_token token\"],\"scopes_supported\":[\"openid\",\"profile\",\"email\",\"offline_access\"],\"issuer\":\"https://login.partner.microsoftonline.cn/{tenantid}/v2.0\",\"request_uri_parameter_supported\":false,\"userinfo_endpoint\":\"https://microsoftgraph.chinacloudapi.cn/oidc/userinfo\",\"authorization_endpoint\":\"https://login.chinacloudapi.cn/common/oauth2/v2.0/authorize\",\"device_authorization_endpoint\":\"https://login.chinacloudapi.cn/common/oauth2/v2.0/devicecode\",\"http_logout_supported\":true,\"frontchannel_logout_supported\":true,\"end_session_endpoint\":\"https://login.chinacloudapi.cn/common/oauth2/v2.0/logout\",\"claims_supported\":[\"sub\",\"iss\",\"cloud_instance_name\",\"cloud_instance_host_name\",\"cloud_graph_host_name\",\"msgraph_host\",\"aud\",\"exp\",\"iat\",\"auth_time\",\"acr\",\"nonce\",\"preferred_username\",\"name\",\"tid\",\"ver\",\"at_hash\",\"c_hash\",\"email\"],\"kerberos_endpoint\":\"https://login.chinacloudapi.cn/common/kerberos\",\"tenant_region_scope\":null,\"cloud_instance_name\":\"partner.microsoftonline.cn\",\"cloud_graph_host_name\":\"graph.chinacloudapi.cn\",\"msgraph_host\":\"microsoftgraph.chinacloudapi.cn\",\"rbac_url\":\"https://pas.chinacloudapi.cn\"},\"https://login.microsoftonline.us/common/\":{\"token_endpoint\":\"https://login.microsoftonline.us/common/oauth2/v2.0/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_post\",\"private_key_jwt\",\"client_secret_basic\"],\"jwks_uri\":\"https://login.microsoftonline.us/common/discovery/v2.0/keys\",\"response_modes_supported\":[\"query\",\"fragment\",\"form_post\"],\"subject_types_supported\":[\"pairwise\"],\"id_token_signing_alg_values_supported\":[\"RS256\"],\"response_types_supported\":[\"code\",\"id_token\",\"code id_token\",\"id_token token\"],\"scopes_supported\":[\"openid\",\"profile\",\"email\",\"offline_access\"],\"issuer\":\"https://login.microsoftonline.us/{tenantid}/v2.0\",\"request_uri_parameter_supported\":false,\"userinfo_endpoint\":\"https://graph.microsoft.com/oidc/userinfo\",\"authorization_endpoint\":\"https://login.microsoftonline.us/common/oauth2/v2.0/authorize\",\"device_authorization_endpoint\":\"https://login.microsoftonline.us/common/oauth2/v2.0/devicecode\",\"http_logout_supported\":true,\"frontchannel_logout_supported\":true,\"end_session_endpoint\":\"https://login.microsoftonline.us/common/oauth2/v2.0/logout\",\"claims_supported\":[\"sub\",\"iss\",\"cloud_instance_name\",\"cloud_instance_host_name\",\"cloud_graph_host_name\",\"msgraph_host\",\"aud\",\"exp\",\"iat\",\"auth_time\",\"acr\",\"nonce\",\"preferred_username\",\"name\",\"tid\",\"ver\",\"at_hash\",\"c_hash\",\"email\"],\"kerberos_endpoint\":\"https://login.microsoftonline.us/common/kerberos\",\"tenant_region_scope\":null,\"cloud_instance_name\":\"microsoftonline.us\",\"cloud_graph_host_name\":\"graph.windows.net\",\"msgraph_host\":\"graph.microsoft.com\",\"rbac_url\":\"https://pasff.usgovcloudapi.net\"},\"https://login.microsoftonline.com/consumers/\":{\"token_endpoint\":\"https://login.microsoftonline.com/consumers/oauth2/v2.0/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_post\",\"private_key_jwt\",\"client_secret_basic\"],\"jwks_uri\":\"https://login.microsoftonline.com/consumers/discovery/v2.0/keys\",\"response_modes_supported\":[\"query\",\"fragment\",\"form_post\"],\"subject_types_supported\":[\"pairwise\"],\"id_token_signing_alg_values_supported\":[\"RS256\"],\"response_types_supported\":[\"code\",\"id_token\",\"code id_token\",\"id_token token\"],\"scopes_supported\":[\"openid\",\"profile\",\"email\",\"offline_access\"],\"issuer\":\"https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0\",\"request_uri_parameter_supported\":false,\"userinfo_endpoint\":\"https://graph.microsoft.com/oidc/userinfo\",\"authorization_endpoint\":\"https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize\",\"device_authorization_endpoint\":\"https://login.microsoftonline.com/consumers/oauth2/v2.0/devicecode\",\"http_logout_supported\":true,\"frontchannel_logout_supported\":true,\"end_session_endpoint\":\"https://login.microsoftonline.com/consumers/oauth2/v2.0/logout\",\"claims_supported\":[\"sub\",\"iss\",\"cloud_instance_name\",\"cloud_instance_host_name\",\"cloud_graph_host_name\",\"msgraph_host\",\"aud\",\"exp\",\"iat\",\"auth_time\",\"acr\",\"nonce\",\"preferred_username\",\"name\",\"tid\",\"ver\",\"at_hash\",\"c_hash\",\"email\"],\"kerberos_endpoint\":\"https://login.microsoftonline.com/consumers/kerberos\",\"tenant_region_scope\":null,\"cloud_instance_name\":\"microsoftonline.com\",\"cloud_graph_host_name\":\"graph.windows.net\",\"msgraph_host\":\"graph.microsoft.com\",\"rbac_url\":\"https://pas.windows.net\"},\"https://login.chinacloudapi.cn/consumers/\":{\"token_endpoint\":\"https://login.chinacloudapi.cn/consumers/oauth2/v2.0/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_post\",\"private_key_jwt\",\"client_secret_basic\"],\"jwks_uri\":\"https://login.chinacloudapi.cn/consumers/discovery/v2.0/keys\",\"response_modes_supported\":[\"query\",\"fragment\",\"form_post\"],\"subject_types_supported\":[\"pairwise\"],\"id_token_signing_alg_values_supported\":[\"RS256\"],\"response_types_supported\":[\"code\",\"id_token\",\"code id_token\",\"id_token token\"],\"scopes_supported\":[\"openid\",\"profile\",\"email\",\"offline_access\"],\"issuer\":\"https://login.partner.microsoftonline.cn/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0\",\"request_uri_parameter_supported\":false,\"userinfo_endpoint\":\"https://microsoftgraph.chinacloudapi.cn/oidc/userinfo\",\"authorization_endpoint\":\"https://login.chinacloudapi.cn/consumers/oauth2/v2.0/authorize\",\"device_authorization_endpoint\":\"https://login.chinacloudapi.cn/consumers/oauth2/v2.0/devicecode\",\"http_logout_supported\":true,\"frontchannel_logout_supported\":true,\"end_session_endpoint\":\"https://login.chinacloudapi.cn/consumers/oauth2/v2.0/logout\",\"claims_supported\":[\"sub\",\"iss\",\"cloud_instance_name\",\"cloud_instance_host_name\",\"cloud_graph_host_name\",\"msgraph_host\",\"aud\",\"exp\",\"iat\",\"auth_time\",\"acr\",\"nonce\",\"preferred_username\",\"name\",\"tid\",\"ver\",\"at_hash\",\"c_hash\",\"email\"],\"kerberos_endpoint\":\"https://login.chinacloudapi.cn/consumers/kerberos\",\"tenant_region_scope\":null,\"cloud_instance_name\":\"partner.microsoftonline.cn\",\"cloud_graph_host_name\":\"graph.chinacloudapi.cn\",\"msgraph_host\":\"microsoftgraph.chinacloudapi.cn\",\"rbac_url\":\"https://pas.chinacloudapi.cn\"},\"https://login.microsoftonline.us/consumers/\":{\"token_endpoint\":\"https://login.microsoftonline.us/consumers/oauth2/v2.0/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_post\",\"private_key_jwt\",\"client_secret_basic\"],\"jwks_uri\":\"https://login.microsoftonline.us/consumers/discovery/v2.0/keys\",\"response_modes_supported\":[\"query\",\"fragment\",\"form_post\"],\"subject_types_supported\":[\"pairwise\"],\"id_token_signing_alg_values_supported\":[\"RS256\"],\"response_types_supported\":[\"code\",\"id_token\",\"code id_token\",\"id_token token\"],\"scopes_supported\":[\"openid\",\"profile\",\"email\",\"offline_access\"],\"issuer\":\"https://login.microsoftonline.us/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0\",\"request_uri_parameter_supported\":false,\"userinfo_endpoint\":\"https://graph.microsoft.com/oidc/userinfo\",\"authorization_endpoint\":\"https://login.microsoftonline.us/consumers/oauth2/v2.0/authorize\",\"device_authorization_endpoint\":\"https://login.microsoftonline.us/consumers/oauth2/v2.0/devicecode\",\"http_logout_supported\":true,\"frontchannel_logout_supported\":true,\"end_session_endpoint\":\"https://login.microsoftonline.us/consumers/oauth2/v2.0/logout\",\"claims_supported\":[\"sub\",\"iss\",\"cloud_instance_name\",\"cloud_instance_host_name\",\"cloud_graph_host_name\",\"msgraph_host\",\"aud\",\"exp\",\"iat\",\"auth_time\",\"acr\",\"nonce\",\"preferred_username\",\"name\",\"tid\",\"ver\",\"at_hash\",\"c_hash\",\"email\"],\"kerberos_endpoint\":\"https://login.microsoftonline.us/consumers/kerberos\",\"tenant_region_scope\":null,\"cloud_instance_name\":\"microsoftonline.us\",\"cloud_graph_host_name\":\"graph.windows.net\",\"msgraph_host\":\"graph.microsoft.com\",\"rbac_url\":\"https://pasff.usgovcloudapi.net\"},\"https://login.microsoftonline.com/organizations/\":{\"token_endpoint\":\"https://login.microsoftonline.com/organizations/oauth2/v2.0/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_post\",\"private_key_jwt\",\"client_secret_basic\"],\"jwks_uri\":\"https://login.microsoftonline.com/organizations/discovery/v2.0/keys\",\"response_modes_supported\":[\"query\",\"fragment\",\"form_post\"],\"subject_types_supported\":[\"pairwise\"],\"id_token_signing_alg_values_supported\":[\"RS256\"],\"response_types_supported\":[\"code\",\"id_token\",\"code id_token\",\"id_token token\"],\"scopes_supported\":[\"openid\",\"profile\",\"email\",\"offline_access\"],\"issuer\":\"https://login.microsoftonline.com/{tenantid}/v2.0\",\"request_uri_parameter_supported\":false,\"userinfo_endpoint\":\"https://graph.microsoft.com/oidc/userinfo\",\"authorization_endpoint\":\"https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize\",\"device_authorization_endpoint\":\"https://login.microsoftonline.com/organizations/oauth2/v2.0/devicecode\",\"http_logout_supported\":true,\"frontchannel_logout_supported\":true,\"end_session_endpoint\":\"https://login.microsoftonline.com/organizations/oauth2/v2.0/logout\",\"claims_supported\":[\"sub\",\"iss\",\"cloud_instance_name\",\"cloud_instance_host_name\",\"cloud_graph_host_name\",\"msgraph_host\",\"aud\",\"exp\",\"iat\",\"auth_time\",\"acr\",\"nonce\",\"preferred_username\",\"name\",\"tid\",\"ver\",\"at_hash\",\"c_hash\",\"email\"],\"kerberos_endpoint\":\"https://login.microsoftonline.com/organizations/kerberos\",\"tenant_region_scope\":null,\"cloud_instance_name\":\"microsoftonline.com\",\"cloud_graph_host_name\":\"graph.windows.net\",\"msgraph_host\":\"graph.microsoft.com\",\"rbac_url\":\"https://pas.windows.net\"},\"https://login.chinacloudapi.cn/organizations/\":{\"token_endpoint\":\"https://login.chinacloudapi.cn/organizations/oauth2/v2.0/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_post\",\"private_key_jwt\",\"client_secret_basic\"],\"jwks_uri\":\"https://login.chinacloudapi.cn/organizations/discovery/v2.0/keys\",\"response_modes_supported\":[\"query\",\"fragment\",\"form_post\"],\"subject_types_supported\":[\"pairwise\"],\"id_token_signing_alg_values_supported\":[\"RS256\"],\"response_types_supported\":[\"code\",\"id_token\",\"code id_token\",\"id_token token\"],\"scopes_supported\":[\"openid\",\"profile\",\"email\",\"offline_access\"],\"issuer\":\"https://login.partner.microsoftonline.cn/{tenantid}/v2.0\",\"request_uri_parameter_supported\":false,\"userinfo_endpoint\":\"https://microsoftgraph.chinacloudapi.cn/oidc/userinfo\",\"authorization_endpoint\":\"https://login.chinacloudapi.cn/organizations/oauth2/v2.0/authorize\",\"device_authorization_endpoint\":\"https://login.chinacloudapi.cn/organizations/oauth2/v2.0/devicecode\",\"http_logout_supported\":true,\"frontchannel_logout_supported\":true,\"end_session_endpoint\":\"https://login.chinacloudapi.cn/organizations/oauth2/v2.0/logout\",\"claims_supported\":[\"sub\",\"iss\",\"cloud_instance_name\",\"cloud_instance_host_name\",\"cloud_graph_host_name\",\"msgraph_host\",\"aud\",\"exp\",\"iat\",\"auth_time\",\"acr\",\"nonce\",\"preferred_username\",\"name\",\"tid\",\"ver\",\"at_hash\",\"c_hash\",\"email\"],\"kerberos_endpoint\":\"https://login.chinacloudapi.cn/organizations/kerberos\",\"tenant_region_scope\":null,\"cloud_instance_name\":\"partner.microsoftonline.cn\",\"cloud_graph_host_name\":\"graph.chinacloudapi.cn\",\"msgraph_host\":\"microsoftgraph.chinacloudapi.cn\",\"rbac_url\":\"https://pas.chinacloudapi.cn\"},\"https://login.microsoftonline.us/organizations/\":{\"token_endpoint\":\"https://login.microsoftonline.us/organizations/oauth2/v2.0/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_post\",\"private_key_jwt\",\"client_secret_basic\"],\"jwks_uri\":\"https://login.microsoftonline.us/organizations/discovery/v2.0/keys\",\"response_modes_supported\":[\"query\",\"fragment\",\"form_post\"],\"subject_types_supported\":[\"pairwise\"],\"id_token_signing_alg_values_supported\":[\"RS256\"],\"response_types_supported\":[\"code\",\"id_token\",\"code id_token\",\"id_token token\"],\"scopes_supported\":[\"openid\",\"profile\",\"email\",\"offline_access\"],\"issuer\":\"https://login.microsoftonline.us/{tenantid}/v2.0\",\"request_uri_parameter_supported\":false,\"userinfo_endpoint\":\"https://graph.microsoft.com/oidc/userinfo\",\"authorization_endpoint\":\"https://login.microsoftonline.us/organizations/oauth2/v2.0/authorize\",\"device_authorization_endpoint\":\"https://login.microsoftonline.us/organizations/oauth2/v2.0/devicecode\",\"http_logout_supported\":true,\"frontchannel_logout_supported\":true,\"end_session_endpoint\":\"https://login.microsoftonline.us/organizations/oauth2/v2.0/logout\",\"claims_supported\":[\"sub\",\"iss\",\"cloud_instance_name\",\"cloud_instance_host_name\",\"cloud_graph_host_name\",\"msgraph_host\",\"aud\",\"exp\",\"iat\",\"auth_time\",\"acr\",\"nonce\",\"preferred_username\",\"name\",\"tid\",\"ver\",\"at_hash\",\"c_hash\",\"email\"],\"kerberos_endpoint\":\"https://login.microsoftonline.us/organizations/kerberos\",\"tenant_region_scope\":null,\"cloud_instance_name\":\"microsoftonline.us\",\"cloud_graph_host_name\":\"graph.windows.net\",\"msgraph_host\":\"graph.microsoft.com\",\"rbac_url\":\"https://pasff.usgovcloudapi.net\"}},\"instanceDiscoveryMetadata\":{\"https://login.microsoftonline.com/common/\":{\"tenant_discovery_endpoint\":\"https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration\",\"api-version\":\"1.1\",\"metadata\":[{\"preferred_network\":\"login.microsoftonline.com\",\"preferred_cache\":\"login.windows.net\",\"aliases\":[\"login.microsoftonline.com\",\"login.windows.net\",\"login.microsoft.com\",\"sts.windows.net\"]},{\"preferred_network\":\"login.partner.microsoftonline.cn\",\"preferred_cache\":\"login.partner.microsoftonline.cn\",\"aliases\":[\"login.partner.microsoftonline.cn\",\"login.chinacloudapi.cn\"]},{\"preferred_network\":\"login.microsoftonline.de\",\"preferred_cache\":\"login.microsoftonline.de\",\"aliases\":[\"login.microsoftonline.de\"]},{\"preferred_network\":\"login.microsoftonline.us\",\"preferred_cache\":\"login.microsoftonline.us\",\"aliases\":[\"login.microsoftonline.us\",\"login.usgovcloudapi.net\"]},{\"preferred_network\":\"login-us.microsoftonline.com\",\"preferred_cache\":\"login-us.microsoftonline.com\",\"aliases\":[\"login-us.microsoftonline.com\"]}]},\"https://login.chinacloudapi.cn/common/\":{\"tenant_discovery_endpoint\":\"https://login.chinacloudapi.cn/common/v2.0/.well-known/openid-configuration\",\"api-version\":\"1.1\",\"metadata\":[{\"preferred_network\":\"login.microsoftonline.com\",\"preferred_cache\":\"login.windows.net\",\"aliases\":[\"login.microsoftonline.com\",\"login.windows.net\",\"login.microsoft.com\",\"sts.windows.net\"]},{\"preferred_network\":\"login.partner.microsoftonline.cn\",\"preferred_cache\":\"login.partner.microsoftonline.cn\",\"aliases\":[\"login.partner.microsoftonline.cn\",\"login.chinacloudapi.cn\"]},{\"preferred_network\":\"login.microsoftonline.de\",\"preferred_cache\":\"login.microsoftonline.de\",\"aliases\":[\"login.microsoftonline.de\"]},{\"preferred_network\":\"login.microsoftonline.us\",\"preferred_cache\":\"login.microsoftonline.us\",\"aliases\":[\"login.microsoftonline.us\",\"login.usgovcloudapi.net\"]},{\"preferred_network\":\"login-us.microsoftonline.com\",\"preferred_cache\":\"login-us.microsoftonline.com\",\"aliases\":[\"login-us.microsoftonline.com\"]}]},\"https://login.microsoftonline.us/common/\":{\"tenant_discovery_endpoint\":\"https://login.microsoftonline.us/common/v2.0/.well-known/openid-configuration\",\"api-version\":\"1.1\",\"metadata\":[{\"preferred_network\":\"login.microsoftonline.com\",\"preferred_cache\":\"login.windows.net\",\"aliases\":[\"login.microsoftonline.com\",\"login.windows.net\",\"login.microsoft.com\",\"sts.windows.net\"]},{\"preferred_network\":\"login.partner.microsoftonline.cn\",\"preferred_cache\":\"login.partner.microsoftonline.cn\",\"aliases\":[\"login.partner.microsoftonline.cn\",\"login.chinacloudapi.cn\"]},{\"preferred_network\":\"login.microsoftonline.de\",\"preferred_cache\":\"login.microsoftonline.de\",\"aliases\":[\"login.microsoftonline.de\"]},{\"preferred_network\":\"login.microsoftonline.us\",\"preferred_cache\":\"login.microsoftonline.us\",\"aliases\":[\"login.microsoftonline.us\",\"login.usgovcloudapi.net\"]},{\"preferred_network\":\"login-us.microsoftonline.com\",\"preferred_cache\":\"login-us.microsoftonline.com\",\"aliases\":[\"login-us.microsoftonline.com\"]}]},\"https://login.microsoftonline.com/consumers/\":{\"tenant_discovery_endpoint\":\"https://login.microsoftonline.com/consumers/v2.0/.well-known/openid-configuration\",\"api-version\":\"1.1\",\"metadata\":[{\"preferred_network\":\"login.microsoftonline.com\",\"preferred_cache\":\"login.windows.net\",\"aliases\":[\"login.microsoftonline.com\",\"login.windows.net\",\"login.microsoft.com\",\"sts.windows.net\"]},{\"preferred_network\":\"login.partner.microsoftonline.cn\",\"preferred_cache\":\"login.partner.microsoftonline.cn\",\"aliases\":[\"login.partner.microsoftonline.cn\",\"login.chinacloudapi.cn\"]},{\"preferred_network\":\"login.microsoftonline.de\",\"preferred_cache\":\"login.microsoftonline.de\",\"aliases\":[\"login.microsoftonline.de\"]},{\"preferred_network\":\"login.microsoftonline.us\",\"preferred_cache\":\"login.microsoftonline.us\",\"aliases\":[\"login.microsoftonline.us\",\"login.usgovcloudapi.net\"]},{\"preferred_network\":\"login-us.microsoftonline.com\",\"preferred_cache\":\"login-us.microsoftonline.com\",\"aliases\":[\"login-us.microsoftonline.com\"]}]},\"https://login.chinacloudapi.cn/consumers/\":{\"tenant_discovery_endpoint\":\"https://login.chinacloudapi.cn/consumers/v2.0/.well-known/openid-configuration\",\"api-version\":\"1.1\",\"metadata\":[{\"preferred_network\":\"login.microsoftonline.com\",\"preferred_cache\":\"login.windows.net\",\"aliases\":[\"login.microsoftonline.com\",\"login.windows.net\",\"login.microsoft.com\",\"sts.windows.net\"]},{\"preferred_network\":\"login.partner.microsoftonline.cn\",\"preferred_cache\":\"login.partner.microsoftonline.cn\",\"aliases\":[\"login.partner.microsoftonline.cn\",\"login.chinacloudapi.cn\"]},{\"preferred_network\":\"login.microsoftonline.de\",\"preferred_cache\":\"login.microsoftonline.de\",\"aliases\":[\"login.microsoftonline.de\"]},{\"preferred_network\":\"login.microsoftonline.us\",\"preferred_cache\":\"login.microsoftonline.us\",\"aliases\":[\"login.microsoftonline.us\",\"login.usgovcloudapi.net\"]},{\"preferred_network\":\"login-us.microsoftonline.com\",\"preferred_cache\":\"login-us.microsoftonline.com\",\"aliases\":[\"login-us.microsoftonline.com\"]}]},\"https://login.microsoftonline.us/consumers/\":{\"tenant_discovery_endpoint\":\"https://login.microsoftonline.us/consumers/v2.0/.well-known/openid-configuration\",\"api-version\":\"1.1\",\"metadata\":[{\"preferred_network\":\"login.microsoftonline.com\",\"preferred_cache\":\"login.windows.net\",\"aliases\":[\"login.microsoftonline.com\",\"login.windows.net\",\"login.microsoft.com\",\"sts.windows.net\"]},{\"preferred_network\":\"login.partner.microsoftonline.cn\",\"preferred_cache\":\"login.partner.microsoftonline.cn\",\"aliases\":[\"login.partner.microsoftonline.cn\",\"login.chinacloudapi.cn\"]},{\"preferred_network\":\"login.microsoftonline.de\",\"preferred_cache\":\"login.microsoftonline.de\",\"aliases\":[\"login.microsoftonline.de\"]},{\"preferred_network\":\"login.microsoftonline.us\",\"preferred_cache\":\"login.microsoftonline.us\",\"aliases\":[\"login.microsoftonline.us\",\"login.usgovcloudapi.net\"]},{\"preferred_network\":\"login-us.microsoftonline.com\",\"preferred_cache\":\"login-us.microsoftonline.com\",\"aliases\":[\"login-us.microsoftonline.com\"]}]},\"https://login.microsoftonline.com/organizations/\":{\"tenant_discovery_endpoint\":\"https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration\",\"api-version\":\"1.1\",\"metadata\":[{\"preferred_network\":\"login.microsoftonline.com\",\"preferred_cache\":\"login.windows.net\",\"aliases\":[\"login.microsoftonline.com\",\"login.windows.net\",\"login.microsoft.com\",\"sts.windows.net\"]},{\"preferred_network\":\"login.partner.microsoftonline.cn\",\"preferred_cache\":\"login.partner.microsoftonline.cn\",\"aliases\":[\"login.partner.microsoftonline.cn\",\"login.chinacloudapi.cn\"]},{\"preferred_network\":\"login.microsoftonline.de\",\"preferred_cache\":\"login.microsoftonline.de\",\"aliases\":[\"login.microsoftonline.de\"]},{\"preferred_network\":\"login.microsoftonline.us\",\"preferred_cache\":\"login.microsoftonline.us\",\"aliases\":[\"login.microsoftonline.us\",\"login.usgovcloudapi.net\"]},{\"preferred_network\":\"login-us.microsoftonline.com\",\"preferred_cache\":\"login-us.microsoftonline.com\",\"aliases\":[\"login-us.microsoftonline.com\"]}]},\"https://login.chinacloudapi.cn/organizations/\":{\"tenant_discovery_endpoint\":\"https://login.chinacloudapi.cn/organizations/v2.0/.well-known/openid-configuration\",\"api-version\":\"1.1\",\"metadata\":[{\"preferred_network\":\"login.microsoftonline.com\",\"preferred_cache\":\"login.windows.net\",\"aliases\":[\"login.microsoftonline.com\",\"login.windows.net\",\"login.microsoft.com\",\"sts.windows.net\"]},{\"preferred_network\":\"login.partner.microsoftonline.cn\",\"preferred_cache\":\"login.partner.microsoftonline.cn\",\"aliases\":[\"login.partner.microsoftonline.cn\",\"login.chinacloudapi.cn\"]},{\"preferred_network\":\"login.microsoftonline.de\",\"preferred_cache\":\"login.microsoftonline.de\",\"aliases\":[\"login.microsoftonline.de\"]},{\"preferred_network\":\"login.microsoftonline.us\",\"preferred_cache\":\"login.microsoftonline.us\",\"aliases\":[\"login.microsoftonline.us\",\"login.usgovcloudapi.net\"]},{\"preferred_network\":\"login-us.microsoftonline.com\",\"preferred_cache\":\"login-us.microsoftonline.com\",\"aliases\":[\"login-us.microsoftonline.com\"]}]},\"https://login.microsoftonline.us/organizations/\":{\"tenant_discovery_endpoint\":\"https://login.microsoftonline.us/organizations/v2.0/.well-known/openid-configuration\",\"api-version\":\"1.1\",\"metadata\":[{\"preferred_network\":\"login.microsoftonline.com\",\"preferred_cache\":\"login.windows.net\",\"aliases\":[\"login.microsoftonline.com\",\"login.windows.net\",\"login.microsoft.com\",\"sts.windows.net\"]},{\"preferred_network\":\"login.partner.microsoftonline.cn\",\"preferred_cache\":\"login.partner.microsoftonline.cn\",\"aliases\":[\"login.partner.microsoftonline.cn\",\"login.chinacloudapi.cn\"]},{\"preferred_network\":\"login.microsoftonline.de\",\"preferred_cache\":\"login.microsoftonline.de\",\"aliases\":[\"login.microsoftonline.de\"]},{\"preferred_network\":\"login.microsoftonline.us\",\"preferred_cache\":\"login.microsoftonline.us\",\"aliases\":[\"login.microsoftonline.us\",\"login.usgovcloudapi.net\"]},{\"preferred_network\":\"login-us.microsoftonline.com\",\"preferred_cache\":\"login-us.microsoftonline.com\",\"aliases\":[\"login-us.microsoftonline.com\"]}]}}};\r\n\r\nexport const EndpointMetadata = rawMetdataJSON.endpointMetadata;\r\nexport const InstanceDiscoveryMetadata = rawMetdataJSON.instanceDiscoveryMetadata;\r\n\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { INetworkModule } from \"../network/INetworkModule\";\r\nimport { NetworkResponse } from \"../network/NetworkManager\";\r\nimport { IMDSBadResponse } from \"../response/IMDSBadResponse\";\r\nimport { Constants, RegionDiscoverySources, ResponseCodes } from \"../utils/Constants\";\r\nimport { RegionDiscoveryMetadata } from \"./RegionDiscoveryMetadata\";\r\nimport { ImdsOptions } from \"./ImdsOptions\";\r\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient\";\r\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent\";\r\n\r\nexport class RegionDiscovery {\r\n // Network interface to make requests with.\r\n protected networkInterface: INetworkModule;\r\n // Performance client\r\n protected performanceClient: IPerformanceClient | undefined;\r\n // CorrelationId\r\n protected correlationId: string | undefined;\r\n // Options for the IMDS endpoint request\r\n protected static IMDS_OPTIONS: ImdsOptions = {\r\n headers: {\r\n Metadata: \"true\",\r\n },\r\n };\r\n\r\n constructor(networkInterface: INetworkModule, performanceClient?: IPerformanceClient, correlationId?: string) {\r\n this.networkInterface = networkInterface;\r\n this.performanceClient = performanceClient;\r\n this.correlationId = correlationId;\r\n }\r\n\r\n /**\r\n * Detect the region from the application's environment.\r\n * \r\n * @returns Promise\r\n */\r\n public async detectRegion(environmentRegion: string | undefined, regionDiscoveryMetadata: RegionDiscoveryMetadata): Promise {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RegionDiscoveryDetectRegion, this.correlationId);\r\n \r\n // Initialize auto detected region with the region from the envrionment \r\n let autodetectedRegionName = environmentRegion;\r\n\r\n // Check if a region was detected from the environment, if not, attempt to get the region from IMDS \r\n if (!autodetectedRegionName) {\r\n const options = RegionDiscovery.IMDS_OPTIONS;\r\n\r\n try {\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.correlationId);\r\n const localIMDSVersionResponse = await this.getRegionFromIMDS(Constants.IMDS_VERSION, options);\r\n if (localIMDSVersionResponse.status === ResponseCodes.httpSuccess) {\r\n autodetectedRegionName = localIMDSVersionResponse.body;\r\n regionDiscoveryMetadata.region_source = RegionDiscoverySources.IMDS;\r\n } \r\n \r\n // If the response using the local IMDS version failed, try to fetch the current version of IMDS and retry. \r\n if (localIMDSVersionResponse.status === ResponseCodes.httpBadRequest) {\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.RegionDiscoveryGetCurrentVersion, this.correlationId);\r\n const currentIMDSVersion = await this.getCurrentVersion(options);\r\n if (!currentIMDSVersion) {\r\n regionDiscoveryMetadata.region_source = RegionDiscoverySources.FAILED_AUTO_DETECTION;\r\n return null;\r\n }\r\n\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.correlationId);\r\n const currentIMDSVersionResponse = await this.getRegionFromIMDS(currentIMDSVersion, options);\r\n if (currentIMDSVersionResponse.status === ResponseCodes.httpSuccess) {\r\n autodetectedRegionName = currentIMDSVersionResponse.body;\r\n regionDiscoveryMetadata.region_source = RegionDiscoverySources.IMDS;\r\n }\r\n }\r\n } catch(e) {\r\n regionDiscoveryMetadata.region_source = RegionDiscoverySources.FAILED_AUTO_DETECTION;\r\n return null;\r\n } \r\n } else {\r\n regionDiscoveryMetadata.region_source = RegionDiscoverySources.ENVIRONMENT_VARIABLE;\r\n }\r\n\r\n // If no region was auto detected from the environment or from the IMDS endpoint, mark the attempt as a FAILED_AUTO_DETECTION\r\n if (!autodetectedRegionName) {\r\n regionDiscoveryMetadata.region_source = RegionDiscoverySources.FAILED_AUTO_DETECTION;\r\n }\r\n\r\n return autodetectedRegionName || null;\r\n }\r\n\r\n /**\r\n * Make the call to the IMDS endpoint\r\n * \r\n * @param imdsEndpointUrl\r\n * @returns Promise>\r\n */\r\n private async getRegionFromIMDS(version: string, options: ImdsOptions): Promise> {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.correlationId);\r\n return this.networkInterface.sendGetRequestAsync(`${Constants.IMDS_ENDPOINT}?api-version=${version}&format=text`, options, Constants.IMDS_TIMEOUT);\r\n }\r\n\r\n /**\r\n * Get the most recent version of the IMDS endpoint available\r\n * \r\n * @returns Promise\r\n */\r\n private async getCurrentVersion(options: ImdsOptions): Promise {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RegionDiscoveryGetCurrentVersion, this.correlationId);\r\n try {\r\n const response = await this.networkInterface.sendGetRequestAsync(`${Constants.IMDS_ENDPOINT}?format=json`, options);\r\n\r\n // When IMDS endpoint is called without the api version query param, bad request response comes back with latest version.\r\n if (response.status === ResponseCodes.httpBadRequest && response.body && response.body[\"newest-versions\"] && response.body[\"newest-versions\"].length > 0) {\r\n return response.body[\"newest-versions\"][0];\r\n }\r\n\r\n return null;\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError, InteractionRequiredAuthError } from \"@azure/msal-common\";\r\nimport { BrowserAuthError } from \"./BrowserAuthError\";\r\n\r\nexport type OSError = {\r\n error: number;\r\n protocol_error: string;\r\n properties: object;\r\n status: string;\r\n retryable?: boolean;\r\n};\r\n\r\nexport enum NativeStatusCode {\r\n USER_INTERACTION_REQUIRED = \"USER_INTERACTION_REQUIRED\",\r\n USER_CANCEL = \"USER_CANCEL\",\r\n NO_NETWORK = \"NO_NETWORK\",\r\n TRANSIENT_ERROR = \"TRANSIENT_ERROR\",\r\n PERSISTENT_ERROR = \"PERSISTENT_ERROR\",\r\n DISABLED = \"DISABLED\",\r\n ACCOUNT_UNAVAILABLE = \"ACCOUNT_UNAVAILABLE\"\r\n}\r\n\r\nexport const NativeAuthErrorMessage = {\r\n extensionError: {\r\n code: \"ContentError\"\r\n },\r\n userSwitch: {\r\n code: \"user_switch\",\r\n desc: \"User attempted to switch accounts in the native broker, which is not allowed. All new accounts must sign-in through the standard web flow first, please try again.\"\r\n },\r\n tokensNotFoundInCache: {\r\n code: \"tokens_not_found_in_internal_memory_cache\",\r\n desc: \"Tokens not cached in MSAL JS internal memory, please make the WAM request\"\r\n }\r\n};\r\n\r\nexport class NativeAuthError extends AuthError {\r\n ext: OSError | undefined;\r\n\r\n constructor(errorCode: string, description: string, ext?: OSError) {\r\n super(errorCode, description);\r\n\r\n Object.setPrototypeOf(this, NativeAuthError.prototype);\r\n this.name = \"NativeAuthError\";\r\n this.ext = ext;\r\n }\r\n\r\n /**\r\n * These errors should result in a fallback to the 'standard' browser based auth flow.\r\n */\r\n isFatal(): boolean {\r\n if (this.ext && this.ext.status && (this.ext.status === NativeStatusCode.PERSISTENT_ERROR || this.ext.status === NativeStatusCode.DISABLED)) {\r\n return true;\r\n }\r\n\r\n switch (this.errorCode) {\r\n case NativeAuthErrorMessage.extensionError.code:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Create the appropriate error object based on the WAM status code.\r\n * @param code\r\n * @param description\r\n * @param ext\r\n * @returns\r\n */\r\n static createError(code: string, description: string, ext?: OSError): AuthError {\r\n if (ext && ext.status) {\r\n switch (ext.status) {\r\n case NativeStatusCode.ACCOUNT_UNAVAILABLE:\r\n return InteractionRequiredAuthError.createNativeAccountUnavailableError();\r\n case NativeStatusCode.USER_INTERACTION_REQUIRED:\r\n return new InteractionRequiredAuthError(code, description);\r\n case NativeStatusCode.USER_CANCEL:\r\n return BrowserAuthError.createUserCancelledError();\r\n case NativeStatusCode.NO_NETWORK:\r\n return BrowserAuthError.createNoNetworkConnectivityError();\r\n }\r\n }\r\n\r\n return new NativeAuthError(code, description, ext);\r\n }\r\n\r\n /**\r\n * Creates user switch error when the user chooses a different account in the native broker prompt\r\n * @returns\r\n */\r\n static createUserSwitchError(): NativeAuthError {\r\n return new NativeAuthError(NativeAuthErrorMessage.userSwitch.code, NativeAuthErrorMessage.userSwitch.desc);\r\n }\r\n\r\n /**\r\n * Creates a tokens not found error when the internal cache look up fails\r\n * @returns NativeAuthError: tokensNotFoundInCache\r\n */\r\n static createTokensNotFoundInCacheError(): NativeAuthError {\r\n return new NativeAuthError(NativeAuthErrorMessage.tokensNotFoundInCache.code, NativeAuthErrorMessage.tokensNotFoundInCache.desc);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthorityType } from \"./AuthorityType\";\r\nimport { isOpenIdConfigResponse, OpenIdConfigResponse } from \"./OpenIdConfigResponse\";\r\nimport { UrlString } from \"../url/UrlString\";\r\nimport { IUri } from \"../url/IUri\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { INetworkModule } from \"../network/INetworkModule\";\r\nimport { AADAuthorityConstants, AuthorityMetadataSource, Constants, RegionDiscoveryOutcomes } from \"../utils/Constants\";\r\nimport { EndpointMetadata, InstanceDiscoveryMetadata } from \"./AuthorityMetadata\";\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { ProtocolMode } from \"./ProtocolMode\";\r\nimport { ICacheManager } from \"../cache/interface/ICacheManager\";\r\nimport { AuthorityMetadataEntity } from \"../cache/entities/AuthorityMetadataEntity\";\r\nimport { AuthorityOptions, AzureCloudInstance } from \"./AuthorityOptions\";\r\nimport { CloudInstanceDiscoveryResponse, isCloudInstanceDiscoveryResponse } from \"./CloudInstanceDiscoveryResponse\";\r\nimport {\r\n CloudInstanceDiscoveryErrorResponse,\r\n isCloudInstanceDiscoveryErrorResponse\r\n} from \"./CloudInstanceDiscoveryErrorResponse\";\r\nimport { CloudDiscoveryMetadata } from \"./CloudDiscoveryMetadata\";\r\nimport { RegionDiscovery } from \"./RegionDiscovery\";\r\nimport { RegionDiscoveryMetadata } from \"./RegionDiscoveryMetadata\";\r\nimport { ImdsOptions } from \"./ImdsOptions\";\r\nimport { AzureCloudOptions } from \"../config/ClientConfiguration\";\r\nimport { Logger } from \"../logger/Logger\";\r\nimport { AuthError } from \"../error/AuthError\";\r\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient\";\r\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent\";\r\n\r\n/**\r\n * The authority class validates the authority URIs used by the user, and retrieves the OpenID Configuration Data from the\r\n * endpoint. It will store the pertinent config data in this object for use during token calls.\r\n */\r\nexport class Authority {\r\n // Canonical authority url string\r\n private _canonicalAuthority: UrlString;\r\n // Canonicaly authority url components\r\n private _canonicalAuthorityUrlComponents: IUri | null;\r\n // Network interface to make requests with.\r\n protected networkInterface: INetworkModule;\r\n // Cache Manager to cache network responses\r\n protected cacheManager: ICacheManager;\r\n // Protocol mode to construct endpoints\r\n private authorityOptions: AuthorityOptions;\r\n // Authority metadata\r\n private metadata: AuthorityMetadataEntity;\r\n // Region discovery service\r\n private regionDiscovery: RegionDiscovery;\r\n // Region discovery metadata\r\n public regionDiscoveryMetadata: RegionDiscoveryMetadata;\r\n // Logger object\r\n private logger: Logger;\r\n // Performance client\r\n protected performanceClient: IPerformanceClient | undefined;\r\n // Correlation Id\r\n protected correlationId: string | undefined;\r\n // Reserved tenant domain names that will not be replaced with tenant id\r\n private static reservedTenantDomains: Set = (new Set([\r\n \"{tenant}\",\r\n \"{tenantid}\",\r\n AADAuthorityConstants.COMMON,\r\n AADAuthorityConstants.CONSUMERS,\r\n AADAuthorityConstants.ORGANIZATIONS\r\n ]));\r\n\r\n constructor(\r\n authority: string,\r\n networkInterface: INetworkModule,\r\n cacheManager: ICacheManager,\r\n authorityOptions: AuthorityOptions,\r\n logger: Logger,\r\n performanceClient?: IPerformanceClient,\r\n correlationId?: string\r\n ) {\r\n this.canonicalAuthority = authority;\r\n this._canonicalAuthority.validateAsUri();\r\n this.networkInterface = networkInterface;\r\n this.cacheManager = cacheManager;\r\n this.authorityOptions = authorityOptions;\r\n this.regionDiscoveryMetadata = { region_used: undefined, region_source: undefined, region_outcome: undefined };\r\n this.logger = logger;\r\n this.performanceClient = performanceClient;\r\n this.correlationId = correlationId;\r\n this.regionDiscovery = new RegionDiscovery(networkInterface, this.performanceClient, this.correlationId);\r\n }\r\n\r\n /**\r\n * Get {@link AuthorityType}\r\n * @param authorityUri {@link IUri}\r\n * @private\r\n */\r\n private getAuthorityType(authorityUri: IUri): AuthorityType {\r\n // CIAM auth url pattern is being standardized as: .ciamlogin.com\r\n if (authorityUri.HostNameAndPort.endsWith(Constants.CIAM_AUTH_URL)) {\r\n return AuthorityType.Ciam;\r\n }\r\n\r\n const pathSegments = authorityUri.PathSegments;\r\n if (pathSegments.length) {\r\n switch(pathSegments[0].toLowerCase()) {\r\n case Constants.ADFS:\r\n return AuthorityType.Adfs;\r\n case Constants.DSTS:\r\n return AuthorityType.Dsts;\r\n default:\r\n break;\r\n }\r\n }\r\n return AuthorityType.Default;\r\n }\r\n\r\n // See above for AuthorityType\r\n public get authorityType(): AuthorityType {\r\n return this.getAuthorityType(this.canonicalAuthorityUrlComponents);\r\n }\r\n\r\n /**\r\n * ProtocolMode enum representing the way endpoints are constructed.\r\n */\r\n public get protocolMode(): ProtocolMode {\r\n return this.authorityOptions.protocolMode;\r\n }\r\n\r\n /**\r\n * Returns authorityOptions which can be used to reinstantiate a new authority instance\r\n */\r\n public get options(): AuthorityOptions {\r\n return this.authorityOptions;\r\n }\r\n\r\n /**\r\n * A URL that is the authority set by the developer\r\n */\r\n public get canonicalAuthority(): string {\r\n return this._canonicalAuthority.urlString;\r\n }\r\n\r\n /**\r\n * Sets canonical authority.\r\n */\r\n public set canonicalAuthority(url: string) {\r\n this._canonicalAuthority = new UrlString(url);\r\n this._canonicalAuthority.validateAsUri();\r\n this._canonicalAuthorityUrlComponents = null;\r\n }\r\n\r\n /**\r\n * Get authority components.\r\n */\r\n public get canonicalAuthorityUrlComponents(): IUri {\r\n if (!this._canonicalAuthorityUrlComponents) {\r\n this._canonicalAuthorityUrlComponents = this._canonicalAuthority.getUrlComponents();\r\n }\r\n\r\n return this._canonicalAuthorityUrlComponents;\r\n }\r\n\r\n /**\r\n * Get hostname and port i.e. login.microsoftonline.com\r\n */\r\n public get hostnameAndPort(): string {\r\n return this.canonicalAuthorityUrlComponents.HostNameAndPort.toLowerCase();\r\n }\r\n\r\n /**\r\n * Get tenant for authority.\r\n */\r\n public get tenant(): string {\r\n return this.canonicalAuthorityUrlComponents.PathSegments[0];\r\n }\r\n\r\n /**\r\n * OAuth /authorize endpoint for requests\r\n */\r\n public get authorizationEndpoint(): string {\r\n if(this.discoveryComplete()) {\r\n return this.replacePath(this.metadata.authorization_endpoint);\r\n } else {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\r\n }\r\n }\r\n\r\n /**\r\n * OAuth /token endpoint for requests\r\n */\r\n public get tokenEndpoint(): string {\r\n if(this.discoveryComplete()) {\r\n return this.replacePath(this.metadata.token_endpoint);\r\n } else {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\r\n }\r\n }\r\n\r\n public get deviceCodeEndpoint(): string {\r\n if(this.discoveryComplete()) {\r\n return this.replacePath(this.metadata.token_endpoint.replace(\"/token\", \"/devicecode\"));\r\n } else {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\r\n }\r\n }\r\n\r\n /**\r\n * OAuth logout endpoint for requests\r\n */\r\n public get endSessionEndpoint(): string {\r\n if(this.discoveryComplete()) {\r\n // ROPC policies may not have end_session_endpoint set\r\n if (!this.metadata.end_session_endpoint) {\r\n throw ClientAuthError.createLogoutNotSupportedError();\r\n }\r\n return this.replacePath(this.metadata.end_session_endpoint);\r\n } else {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\r\n }\r\n }\r\n\r\n /**\r\n * OAuth issuer for requests\r\n */\r\n public get selfSignedJwtAudience(): string {\r\n if(this.discoveryComplete()) {\r\n return this.replacePath(this.metadata.issuer);\r\n } else {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\r\n }\r\n }\r\n\r\n /**\r\n * Jwks_uri for token signing keys\r\n */\r\n public get jwksUri(): string {\r\n if(this.discoveryComplete()) {\r\n return this.replacePath(this.metadata.jwks_uri);\r\n } else {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\r\n }\r\n }\r\n\r\n /**\r\n * Returns a flag indicating that tenant name can be replaced in authority {@link IUri}\r\n * @param authorityUri {@link IUri}\r\n * @private\r\n */\r\n private canReplaceTenant(authorityUri: IUri): boolean {\r\n return authorityUri.PathSegments.length === 1\r\n && !Authority.reservedTenantDomains.has(authorityUri.PathSegments[0])\r\n && this.getAuthorityType(authorityUri) === AuthorityType.Default\r\n && this.protocolMode === ProtocolMode.AAD;\r\n }\r\n\r\n /**\r\n * Replaces tenant in url path with current tenant. Defaults to common.\r\n * @param urlString\r\n */\r\n private replaceTenant(urlString: string): string {\r\n return urlString.replace(/{tenant}|{tenantid}/g, this.tenant);\r\n }\r\n\r\n /**\r\n * Replaces path such as tenant or policy with the current tenant or policy.\r\n * @param urlString\r\n */\r\n private replacePath(urlString: string): string {\r\n let endpoint = urlString;\r\n const cachedAuthorityUrl = new UrlString(this.metadata.canonical_authority);\r\n const cachedAuthorityUrlComponents = cachedAuthorityUrl.getUrlComponents();\r\n const cachedAuthorityParts = cachedAuthorityUrlComponents.PathSegments;\r\n const currentAuthorityParts = this.canonicalAuthorityUrlComponents.PathSegments;\r\n\r\n currentAuthorityParts.forEach((currentPart, index) => {\r\n let cachedPart = cachedAuthorityParts[index];\r\n if (index === 0 && this.canReplaceTenant(cachedAuthorityUrlComponents))\r\n {\r\n const tenantId = (new UrlString(this.metadata.authorization_endpoint)).getUrlComponents().PathSegments[0];\r\n /**\r\n * Check if AAD canonical authority contains tenant domain name, for example \"testdomain.onmicrosoft.com\",\r\n * by comparing its first path segment to the corresponding authorization endpoint path segment, which is\r\n * always resolved with tenant id by OIDC.\r\n */\r\n if (cachedPart !== tenantId) {\r\n this.logger.verbose(`Replacing tenant domain name ${cachedPart} with id ${tenantId}`);\r\n cachedPart = tenantId;\r\n }\r\n }\r\n if (currentPart !== cachedPart) {\r\n endpoint = endpoint.replace(`/${cachedPart}/`, `/${currentPart}/`);\r\n }\r\n });\r\n\r\n return this.replaceTenant(endpoint);\r\n }\r\n\r\n /**\r\n * The default open id configuration endpoint for any canonical authority.\r\n */\r\n protected get defaultOpenIdConfigurationEndpoint(): string {\r\n if (\r\n this.authorityType === AuthorityType.Adfs ||\r\n this.authorityType === AuthorityType.Dsts ||\r\n this.protocolMode === ProtocolMode.OIDC\r\n ) {\r\n return `${this.canonicalAuthority}.well-known/openid-configuration`;\r\n }\r\n return `${this.canonicalAuthority}v2.0/.well-known/openid-configuration`;\r\n }\r\n\r\n /**\r\n * Boolean that returns whethr or not tenant discovery has been completed.\r\n */\r\n discoveryComplete(): boolean {\r\n return !!this.metadata;\r\n }\r\n\r\n /**\r\n * Perform endpoint discovery to discover aliases, preferred_cache, preferred_network\r\n * and the /authorize, /token and logout endpoints.\r\n */\r\n public async resolveEndpointsAsync(): Promise {\r\n\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityResolveEndpointsAsync, this.correlationId);\r\n\r\n let metadataEntity = this.cacheManager.getAuthorityMetadataByAlias(this.hostnameAndPort);\r\n if (!metadataEntity) {\r\n metadataEntity = new AuthorityMetadataEntity();\r\n metadataEntity.updateCanonicalAuthority(this.canonicalAuthority);\r\n }\r\n\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata, this.correlationId);\r\n const cloudDiscoverySource = await this.updateCloudDiscoveryMetadata(metadataEntity);\r\n this.canonicalAuthority = this.canonicalAuthority.replace(this.hostnameAndPort, metadataEntity.preferred_network);\r\n\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.AuthorityUpdateEndpointMetadata, this.correlationId);\r\n const endpointSource = await this.updateEndpointMetadata(metadataEntity);\r\n\r\n if (cloudDiscoverySource !== AuthorityMetadataSource.CACHE && endpointSource !== AuthorityMetadataSource.CACHE) {\r\n // Reset the expiration time unless both values came from a successful cache lookup\r\n metadataEntity.resetExpiresAt();\r\n metadataEntity.updateCanonicalAuthority(this.canonicalAuthority);\r\n }\r\n\r\n const cacheKey = this.cacheManager.generateAuthorityMetadataCacheKey(metadataEntity.preferred_cache);\r\n this.cacheManager.setAuthorityMetadata(cacheKey, metadataEntity);\r\n this.metadata = metadataEntity;\r\n }\r\n\r\n /**\r\n * Update AuthorityMetadataEntity with new endpoints and return where the information came from\r\n * @param metadataEntity\r\n */\r\n private async updateEndpointMetadata(metadataEntity: AuthorityMetadataEntity): Promise {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityUpdateEndpointMetadata, this.correlationId);\r\n\r\n let metadata = this.getEndpointMetadataFromConfig();\r\n if (metadata) {\r\n metadataEntity.updateEndpointMetadata(metadata, false);\r\n return AuthorityMetadataSource.CONFIG;\r\n }\r\n\r\n if (this.isAuthoritySameType(metadataEntity) && metadataEntity.endpointsFromNetwork && !metadataEntity.isExpired()) {\r\n // No need to update\r\n return AuthorityMetadataSource.CACHE;\r\n }\r\n\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork, this.correlationId);\r\n metadata = await this.getEndpointMetadataFromNetwork();\r\n if (metadata) {\r\n // If the user prefers to use an azure region replace the global endpoints with regional information.\r\n if (this.authorityOptions.azureRegionConfiguration?.azureRegion) {\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.correlationId);\r\n metadata = await this.updateMetadataWithRegionalInformation(metadata);\r\n }\r\n\r\n metadataEntity.updateEndpointMetadata(metadata, true);\r\n return AuthorityMetadataSource.NETWORK;\r\n }\r\n\r\n let harcodedMetadata = this.getEndpointMetadataFromHardcodedValues();\r\n if (harcodedMetadata && !this.authorityOptions.skipAuthorityMetadataCache) {\r\n // If the user prefers to use an azure region replace the global endpoints with regional information.\r\n if (this.authorityOptions.azureRegionConfiguration?.azureRegion) {\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.correlationId);\r\n harcodedMetadata = await this.updateMetadataWithRegionalInformation(\r\n harcodedMetadata\r\n );\r\n }\r\n\r\n metadataEntity.updateEndpointMetadata(harcodedMetadata, false);\r\n return AuthorityMetadataSource.HARDCODED_VALUES;\r\n } else {\r\n throw ClientAuthError.createUnableToGetOpenidConfigError(\r\n this.defaultOpenIdConfigurationEndpoint\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Compares the number of url components after the domain to determine if the cached\r\n * authority metadata can be used for the requested authority. Protects against same domain different\r\n * authority such as login.microsoftonline.com/tenant and login.microsoftonline.com/tfp/tenant/policy\r\n * @param metadataEntity\r\n */\r\n private isAuthoritySameType(metadataEntity: AuthorityMetadataEntity): boolean {\r\n const cachedAuthorityUrl = new UrlString(metadataEntity.canonical_authority);\r\n const cachedParts = cachedAuthorityUrl.getUrlComponents().PathSegments;\r\n\r\n return cachedParts.length === this.canonicalAuthorityUrlComponents.PathSegments.length;\r\n }\r\n\r\n /**\r\n * Parse authorityMetadata config option\r\n */\r\n private getEndpointMetadataFromConfig(): OpenIdConfigResponse | null {\r\n if (this.authorityOptions.authorityMetadata) {\r\n try {\r\n return JSON.parse(this.authorityOptions.authorityMetadata) as OpenIdConfigResponse;\r\n } catch (e) {\r\n throw ClientConfigurationError.createInvalidAuthorityMetadataError();\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets OAuth endpoints from the given OpenID configuration endpoint.\r\n *\r\n * @param hasHardcodedMetadata boolean\r\n */\r\n private async getEndpointMetadataFromNetwork(): Promise {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork, this.correlationId);\r\n\r\n const options: ImdsOptions = {};\r\n\r\n /*\r\n * TODO: Add a timeout if the authority exists in our library's\r\n * hardcoded list of metadata\r\n */\r\n\r\n try {\r\n const response = await this.networkInterface.\r\n sendGetRequestAsync(this.defaultOpenIdConfigurationEndpoint, options);\r\n return isOpenIdConfigResponse(response.body) ? response.body : null;\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get OAuth endpoints for common authorities.\r\n */\r\n private getEndpointMetadataFromHardcodedValues(): OpenIdConfigResponse | null {\r\n if (this.canonicalAuthority in EndpointMetadata) {\r\n return EndpointMetadata[this.canonicalAuthority];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Update the retrieved metadata with regional information.\r\n * User selected Azure region will be used if configured.\r\n */\r\n private async updateMetadataWithRegionalInformation(\r\n metadata: OpenIdConfigResponse\r\n ): Promise {\r\n this.performanceClient?.addQueueMeasurement(\r\n PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation,\r\n this.correlationId\r\n );\r\n\r\n const userConfiguredAzureRegion = this.authorityOptions.azureRegionConfiguration?.azureRegion;\r\n\r\n if (userConfiguredAzureRegion) {\r\n if (userConfiguredAzureRegion !== Constants.AZURE_REGION_AUTO_DISCOVER_FLAG) {\r\n this.regionDiscoveryMetadata.region_outcome = RegionDiscoveryOutcomes.CONFIGURED_NO_AUTO_DETECTION;\r\n this.regionDiscoveryMetadata.region_used = userConfiguredAzureRegion;\r\n return Authority.replaceWithRegionalInformation(\r\n metadata, \r\n userConfiguredAzureRegion\r\n );\r\n }\r\n \r\n this.performanceClient?.setPreQueueTime(\r\n PerformanceEvents.RegionDiscoveryDetectRegion,\r\n this.correlationId\r\n );\r\n \r\n const autodetectedRegionName = await this.regionDiscovery.detectRegion(\r\n this.authorityOptions.azureRegionConfiguration?.environmentRegion,\r\n this.regionDiscoveryMetadata\r\n );\r\n \r\n if (autodetectedRegionName) {\r\n this.regionDiscoveryMetadata.region_outcome = RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_SUCCESSFUL;\r\n this.regionDiscoveryMetadata.region_used = autodetectedRegionName;\r\n return Authority.replaceWithRegionalInformation(\r\n metadata, \r\n autodetectedRegionName\r\n );\r\n }\r\n \r\n this.regionDiscoveryMetadata.region_outcome = RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_FAILED;\r\n }\r\n\r\n return metadata;\r\n }\r\n\r\n /**\r\n * Updates the AuthorityMetadataEntity with new aliases, preferred_network and preferred_cache\r\n * and returns where the information was retrieved from\r\n * @param metadataEntity\r\n * @returns AuthorityMetadataSource\r\n */\r\n private async updateCloudDiscoveryMetadata(metadataEntity: AuthorityMetadataEntity): Promise {\r\n\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata, this.correlationId);\r\n\r\n // attempt to read metadata from the config\r\n this.logger.verbose(\"Attempting to get cloud discovery metadata in the config\");\r\n this.logger.verbosePii(`Known Authorities: ${this.authorityOptions.knownAuthorities || Constants.NOT_APPLICABLE}`);\r\n this.logger.verbosePii(`Authority Metadata: ${this.authorityOptions.authorityMetadata || Constants.NOT_APPLICABLE}`);\r\n this.logger.verbosePii(`Canonical Authority: ${metadataEntity.canonical_authority || Constants.NOT_APPLICABLE}`);\r\n let metadata = this.getCloudDiscoveryMetadataFromConfig();\r\n if (metadata) {\r\n this.logger.verbose(\"Found cloud discovery metadata in the config.\");\r\n metadataEntity.updateCloudDiscoveryMetadata(metadata, false);\r\n return AuthorityMetadataSource.CONFIG;\r\n }\r\n\r\n // If the cached metadata came from config but that config was not passed to this instance, we must go to the network\r\n this.logger.verbose(\"Did not find cloud discovery metadata in the config... Attempting to get cloud discovery metadata from the cache.\");\r\n const metadataEntityExpired = metadataEntity.isExpired();\r\n if (this.isAuthoritySameType(metadataEntity) && metadataEntity.aliasesFromNetwork && !metadataEntityExpired) {\r\n this.logger.verbose(\"Found metadata in the cache.\");\r\n // No need to update\r\n return AuthorityMetadataSource.CACHE;\r\n } else if (metadataEntityExpired) {\r\n this.logger.verbose(\"The metadata entity is expired.\");\r\n }\r\n\r\n this.logger.verbose(\"Did not find cloud discovery metadata in the cache... Attempting to get cloud discovery metadata from the network.\");\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork, this.correlationId);\r\n metadata = await this.getCloudDiscoveryMetadataFromNetwork();\r\n if (metadata) {\r\n this.logger.verbose(\"cloud discovery metadata was successfully returned from getCloudDiscoveryMetadataFromNetwork()\");\r\n metadataEntity.updateCloudDiscoveryMetadata(metadata, true);\r\n return AuthorityMetadataSource.NETWORK;\r\n }\r\n\r\n this.logger.verbose(\"Did not find cloud discovery metadata from the network... Attempting to get cloud discovery metadata from hardcoded values.\");\r\n const harcodedMetadata = this.getCloudDiscoveryMetadataFromHarcodedValues();\r\n if (harcodedMetadata && !this.options.skipAuthorityMetadataCache) {\r\n this.logger.verbose(\"Found cloud discovery metadata from hardcoded values.\");\r\n metadataEntity.updateCloudDiscoveryMetadata(harcodedMetadata, false);\r\n return AuthorityMetadataSource.HARDCODED_VALUES;\r\n }\r\n\r\n // Metadata could not be obtained from the config, cache, network or hardcoded values\r\n this.logger.error(\"Did not find cloud discovery metadata from hardcoded values... Metadata could not be obtained from config, cache, network or hardcoded values. Throwing Untrusted Authority Error.\");\r\n throw ClientConfigurationError.createUntrustedAuthorityError();\r\n }\r\n\r\n /**\r\n * Parse cloudDiscoveryMetadata config or check knownAuthorities\r\n */\r\n private getCloudDiscoveryMetadataFromConfig(): CloudDiscoveryMetadata | null {\r\n\r\n // CIAM does not support cloud discovery metadata\r\n if (this.authorityType === AuthorityType.Ciam) {\r\n this.logger.verbose(\"CIAM authorities do not support cloud discovery metadata, generate the aliases from authority host.\");\r\n return Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);\r\n }\r\n\r\n // Check if network response was provided in config\r\n if (this.authorityOptions.cloudDiscoveryMetadata) {\r\n this.logger.verbose(\"The cloud discovery metadata has been provided as a network response, in the config.\");\r\n try {\r\n this.logger.verbose(\"Attempting to parse the cloud discovery metadata.\");\r\n const parsedResponse = JSON.parse(this.authorityOptions.cloudDiscoveryMetadata) as CloudInstanceDiscoveryResponse;\r\n const metadata = Authority.getCloudDiscoveryMetadataFromNetworkResponse(\r\n parsedResponse.metadata,\r\n this.hostnameAndPort\r\n );\r\n this.logger.verbose(\"Parsed the cloud discovery metadata.\");\r\n if (metadata) {\r\n this.logger.verbose(\"There is returnable metadata attached to the parsed cloud discovery metadata.\");\r\n return metadata;\r\n } else {\r\n this.logger.verbose(\"There is no metadata attached to the parsed cloud discovery metadata.\");\r\n }\r\n } catch (e) {\r\n this.logger.verbose(\"Unable to parse the cloud discovery metadata. Throwing Invalid Cloud Discovery Metadata Error.\");\r\n throw ClientConfigurationError.createInvalidCloudDiscoveryMetadataError();\r\n }\r\n }\r\n\r\n // If cloudDiscoveryMetadata is empty or does not contain the host, check knownAuthorities\r\n if (this.isInKnownAuthorities()) {\r\n this.logger.verbose(\"The host is included in knownAuthorities. Creating new cloud discovery metadata from the host.\");\r\n return Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Called to get metadata from network if CloudDiscoveryMetadata was not populated by config\r\n *\r\n * @param hasHardcodedMetadata boolean\r\n */\r\n private async getCloudDiscoveryMetadataFromNetwork(): Promise {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork, this.correlationId);\r\n const instanceDiscoveryEndpoint =\r\n `${Constants.AAD_INSTANCE_DISCOVERY_ENDPT}${this.canonicalAuthority}oauth2/v2.0/authorize`;\r\n const options: ImdsOptions = {};\r\n\r\n /*\r\n * TODO: Add a timeout if the authority exists in our library's\r\n * hardcoded list of metadata\r\n */\r\n\r\n let match = null;\r\n try {\r\n const response =\r\n await this.networkInterface.sendGetRequestAsync(\r\n instanceDiscoveryEndpoint,\r\n options\r\n );\r\n\r\n let typedResponseBody: CloudInstanceDiscoveryResponse | CloudInstanceDiscoveryErrorResponse;\r\n let metadata: Array;\r\n if (isCloudInstanceDiscoveryResponse(response.body)) {\r\n typedResponseBody = response.body as CloudInstanceDiscoveryResponse;\r\n metadata = typedResponseBody.metadata;\r\n\r\n this.logger.verbosePii(`tenant_discovery_endpoint is: ${typedResponseBody.tenant_discovery_endpoint}`);\r\n } else if (isCloudInstanceDiscoveryErrorResponse(response.body)) {\r\n this.logger.warning(`A CloudInstanceDiscoveryErrorResponse was returned. The cloud instance discovery network request's status code is: ${response.status}`);\r\n\r\n typedResponseBody = response.body as CloudInstanceDiscoveryErrorResponse;\r\n if (typedResponseBody.error === Constants.INVALID_INSTANCE) {\r\n this.logger.error(\"The CloudInstanceDiscoveryErrorResponse error is invalid_instance.\");\r\n return null;\r\n }\r\n\r\n this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error is ${typedResponseBody.error}`);\r\n this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error description is ${typedResponseBody.error_description}`);\r\n\r\n this.logger.warning(\"Setting the value of the CloudInstanceDiscoveryMetadata (returned from the network) to []\");\r\n metadata = [];\r\n } else {\r\n this.logger.error(\"AAD did not return a CloudInstanceDiscoveryResponse or CloudInstanceDiscoveryErrorResponse\");\r\n return null;\r\n }\r\n\r\n this.logger.verbose(\"Attempting to find a match between the developer's authority and the CloudInstanceDiscoveryMetadata returned from the network request.\");\r\n match = Authority.getCloudDiscoveryMetadataFromNetworkResponse(\r\n metadata,\r\n this.hostnameAndPort\r\n );\r\n } catch (error) {\r\n if (error instanceof AuthError) {\r\n this.logger.error(`There was a network error while attempting to get the cloud discovery instance metadata.\\nError: ${error.errorCode}\\nError Description: ${error.errorMessage}`);\r\n } else {\r\n const typedError = error as Error;\r\n this.logger.error(`A non-MSALJS error was thrown while attempting to get the cloud instance discovery metadata.\\nError: ${typedError.name}\\nError Description: ${typedError.message}`);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n // Custom Domain scenario, host is trusted because Instance Discovery call succeeded\r\n if (!match) {\r\n this.logger.warning(\"The developer's authority was not found within the CloudInstanceDiscoveryMetadata returned from the network request.\");\r\n this.logger.verbose(\"Creating custom Authority for custom domain scenario.\");\r\n\r\n match = Authority.createCloudDiscoveryMetadataFromHost(\r\n this.hostnameAndPort\r\n );\r\n }\r\n return match;\r\n }\r\n\r\n /**\r\n * Get cloud discovery metadata for common authorities\r\n */\r\n private getCloudDiscoveryMetadataFromHarcodedValues(): CloudDiscoveryMetadata | null {\r\n if (this.canonicalAuthority in InstanceDiscoveryMetadata) {\r\n return InstanceDiscoveryMetadata[this.canonicalAuthority];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Helper function to determine if this host is included in the knownAuthorities config option\r\n */\r\n private isInKnownAuthorities(): boolean {\r\n const matches = this.authorityOptions.knownAuthorities.filter((authority) => {\r\n return UrlString.getDomainFromUrl(authority).toLowerCase() === this.hostnameAndPort;\r\n });\r\n\r\n return matches.length > 0;\r\n }\r\n\r\n /**\r\n * helper function to populate the authority based on azureCloudOptions\r\n * @param authorityString\r\n * @param azureCloudOptions\r\n */\r\n static generateAuthority(authorityString: string, azureCloudOptions?: AzureCloudOptions): string {\r\n let authorityAzureCloudInstance;\r\n\r\n if (azureCloudOptions && azureCloudOptions.azureCloudInstance !== AzureCloudInstance.None) {\r\n const tenant = azureCloudOptions.tenant ? azureCloudOptions.tenant : Constants.DEFAULT_COMMON_TENANT;\r\n authorityAzureCloudInstance = `${azureCloudOptions.azureCloudInstance}/${tenant}/`;\r\n }\r\n\r\n return authorityAzureCloudInstance ? authorityAzureCloudInstance : authorityString;\r\n }\r\n\r\n /**\r\n * Creates cloud discovery metadata object from a given host\r\n * @param host\r\n */\r\n static createCloudDiscoveryMetadataFromHost(host: string): CloudDiscoveryMetadata {\r\n return {\r\n preferred_network: host,\r\n preferred_cache: host,\r\n aliases: [host]\r\n };\r\n }\r\n\r\n /**\r\n * Searches instance discovery network response for the entry that contains the host in the aliases list\r\n * @param response\r\n * @param authority\r\n */\r\n static getCloudDiscoveryMetadataFromNetworkResponse(\r\n response: CloudDiscoveryMetadata[],\r\n authority: string\r\n ): CloudDiscoveryMetadata | null {\r\n for (let i = 0; i < response.length; i++) {\r\n const metadata = response[i];\r\n if (metadata.aliases.indexOf(authority) > -1) {\r\n return metadata;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * helper function to generate environment from authority object\r\n */\r\n getPreferredCache(): string {\r\n if(this.discoveryComplete()) {\r\n return this.metadata.preferred_cache;\r\n } else {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\r\n }\r\n }\r\n\r\n /**\r\n * Returns whether or not the provided host is an alias of this authority instance\r\n * @param host\r\n */\r\n isAlias(host: string): boolean {\r\n return this.metadata.aliases.indexOf(host) > -1;\r\n }\r\n\r\n /**\r\n * Checks whether the provided host is that of a public cloud authority\r\n *\r\n * @param authority string\r\n * @returns bool\r\n */\r\n static isPublicCloudAuthority(host: string): boolean {\r\n return Constants.KNOWN_PUBLIC_CLOUDS.indexOf(host) >= 0;\r\n }\r\n\r\n /**\r\n * Rebuild the authority string with the region\r\n *\r\n * @param host string\r\n * @param region string\r\n */\r\n static buildRegionalAuthorityString(host: string, region: string, queryString?: string): string {\r\n // Create and validate a Url string object with the initial authority string\r\n const authorityUrlInstance = new UrlString(host);\r\n authorityUrlInstance.validateAsUri();\r\n\r\n const authorityUrlParts = authorityUrlInstance.getUrlComponents();\r\n\r\n let hostNameAndPort= `${region}.${authorityUrlParts.HostNameAndPort}`;\r\n\r\n if (this.isPublicCloudAuthority(authorityUrlParts.HostNameAndPort)) {\r\n hostNameAndPort = `${region}.${Constants.REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX}`;\r\n }\r\n\r\n // Include the query string portion of the url\r\n const url = UrlString.constructAuthorityUriFromObject({\r\n ...authorityUrlInstance.getUrlComponents(),\r\n HostNameAndPort: hostNameAndPort\r\n }).urlString;\r\n\r\n // Add the query string if a query string was provided\r\n if (queryString) return `${url}?${queryString}`;\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Replace the endpoints in the metadata object with their regional equivalents.\r\n *\r\n * @param metadata OpenIdConfigResponse\r\n * @param azureRegion string\r\n */\r\n static replaceWithRegionalInformation(metadata: OpenIdConfigResponse, azureRegion: string): OpenIdConfigResponse {\r\n metadata.authorization_endpoint = Authority.buildRegionalAuthorityString(metadata.authorization_endpoint, azureRegion);\r\n // TODO: Enquire on whether we should leave the query string or remove it before releasing the feature\r\n metadata.token_endpoint = Authority.buildRegionalAuthorityString(\r\n metadata.token_endpoint, azureRegion, Constants.REGIONAL_AUTH_NON_MSI_QUERY_STRING\r\n );\r\n\r\n if (metadata.end_session_endpoint) {\r\n metadata.end_session_endpoint = Authority.buildRegionalAuthorityString(metadata.end_session_endpoint, azureRegion);\r\n }\r\n\r\n return metadata;\r\n }\r\n\r\n /**\r\n * Transform CIAM_AUTHORIY as per the below rules:\r\n * If no path segments found and it is a CIAM authority (hostname ends with .ciamlogin.com), then transform it\r\n *\r\n * NOTE: The transformation path should go away once STS supports CIAM with the format: `tenantIdorDomain.ciamlogin.com`\r\n * `ciamlogin.com` can also change in the future and we should accommodate the same\r\n *\r\n * @param authority\r\n */\r\n static transformCIAMAuthority(authority: string): string {\r\n let ciamAuthority = authority.endsWith(Constants.FORWARD_SLASH) ? authority : `${authority}${Constants.FORWARD_SLASH}`;\r\n const authorityUrl = new UrlString(authority);\r\n const authorityUrlComponents = authorityUrl.getUrlComponents();\r\n\r\n // check if transformation is needed\r\n if (authorityUrlComponents.PathSegments.length === 0 && (authorityUrlComponents.HostNameAndPort.endsWith(Constants.CIAM_AUTH_URL))){\r\n const tenantIdOrDomain = authorityUrlComponents.HostNameAndPort.split(\".\")[0];\r\n ciamAuthority = `${ciamAuthority}${tenantIdOrDomain}${Constants.AAD_TENANT_DOMAIN_SUFFIX}`;\r\n }\r\n\r\n return ciamAuthority;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { CloudDiscoveryMetadata } from \"./CloudDiscoveryMetadata\";\r\n\r\n/**\r\n * The OpenID Configuration Endpoint Response type. Used by the authority class to get relevant OAuth endpoints.\r\n */\r\nexport type CloudInstanceDiscoveryResponse = {\r\n tenant_discovery_endpoint: string;\r\n metadata: Array;\r\n};\r\n\r\nexport function isCloudInstanceDiscoveryResponse(response: object): boolean {\r\n return (\r\n response.hasOwnProperty(\"tenant_discovery_endpoint\") &&\r\n response.hasOwnProperty(\"metadata\")\r\n );\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\n/**\r\n * The OpenID Configuration Endpoint Response type. Used by the authority class to get relevant OAuth endpoints.\r\n */\r\nexport type CloudInstanceDiscoveryErrorResponse = {\r\n error: String;\r\n error_description: String;\r\n error_codes?: Array;\r\n timestamp?: String;\r\n trace_id?: String;\r\n correlation_id?: String;\r\n error_uri?: String;\r\n};\r\n\r\nexport function isCloudInstanceDiscoveryErrorResponse(response: object): boolean {\r\n return (\r\n response.hasOwnProperty(\"error\") &&\r\n response.hasOwnProperty(\"error_description\")\r\n );\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Authority } from \"./Authority\";\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { INetworkModule } from \"../network/INetworkModule\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { ICacheManager } from \"../cache/interface/ICacheManager\";\r\nimport { AuthorityOptions } from \"./AuthorityOptions\";\r\nimport { Logger } from \"../logger/Logger\";\r\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient\";\r\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent\";\r\n\r\nexport class AuthorityFactory {\r\n\r\n /**\r\n * Create an authority object of the correct type based on the url\r\n * Performs basic authority validation - checks to see if the authority is of a valid type (i.e. aad, b2c, adfs)\r\n *\r\n * Also performs endpoint discovery.\r\n *\r\n * @param authorityUri\r\n * @param networkClient\r\n * @param protocolMode\r\n */\r\n static async createDiscoveredInstance(\r\n authorityUri: string,\r\n networkClient: INetworkModule,\r\n cacheManager: ICacheManager,\r\n authorityOptions: AuthorityOptions,\r\n logger: Logger,\r\n performanceClient?: IPerformanceClient,\r\n correlationId?: string\r\n ): Promise {\r\n performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance, correlationId);\r\n \r\n const authorityUriFinal = Authority.transformCIAMAuthority(authorityUri);\r\n\r\n // Initialize authority and perform discovery endpoint check.\r\n const acquireTokenAuthority: Authority = AuthorityFactory.createInstance(\r\n authorityUriFinal,\r\n networkClient,\r\n cacheManager,\r\n authorityOptions,\r\n logger,\r\n performanceClient,\r\n correlationId\r\n );\r\n\r\n try {\r\n performanceClient?.setPreQueueTime(PerformanceEvents.AuthorityResolveEndpointsAsync, correlationId);\r\n await acquireTokenAuthority.resolveEndpointsAsync();\r\n return acquireTokenAuthority;\r\n } catch (e) {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(e);\r\n }\r\n }\r\n\r\n /**\r\n * Create an authority object of the correct type based on the url\r\n * Performs basic authority validation - checks to see if the authority is of a valid type (i.e. aad, b2c, adfs)\r\n *\r\n * Does not perform endpoint discovery.\r\n *\r\n * @param authorityUrl\r\n * @param networkInterface\r\n * @param protocolMode\r\n */\r\n static createInstance(\r\n authorityUrl: string,\r\n networkInterface: INetworkModule,\r\n cacheManager: ICacheManager,\r\n authorityOptions: AuthorityOptions,\r\n logger: Logger,\r\n performanceClient?: IPerformanceClient,\r\n correlationId?: string\r\n ): Authority {\r\n // Throw error if authority url is empty\r\n if (StringUtils.isEmpty(authorityUrl)) {\r\n throw ClientConfigurationError.createUrlEmptyError();\r\n }\r\n\r\n return new Authority(authorityUrl, networkInterface, cacheManager, authorityOptions, logger, performanceClient, correlationId);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { SERVER_TELEM_CONSTANTS, Separators, CacheOutcome, Constants, RegionDiscoverySources, RegionDiscoveryOutcomes } from \"../../utils/Constants\";\r\nimport { CacheManager } from \"../../cache/CacheManager\";\r\nimport { AuthError } from \"../../error/AuthError\";\r\nimport { ServerTelemetryRequest } from \"./ServerTelemetryRequest\";\r\nimport { ServerTelemetryEntity } from \"../../cache/entities/ServerTelemetryEntity\";\r\nimport { StringUtils } from \"../../utils/StringUtils\";\r\nimport { RegionDiscoveryMetadata } from \"../../authority/RegionDiscoveryMetadata\";\r\n\r\nexport class ServerTelemetryManager {\r\n private cacheManager: CacheManager;\r\n private apiId: number;\r\n private correlationId: string;\r\n private telemetryCacheKey: string;\r\n private wrapperSKU: String;\r\n private wrapperVer: String;\r\n private regionUsed: string | undefined;\r\n private regionSource: RegionDiscoverySources | undefined;\r\n private regionOutcome: RegionDiscoveryOutcomes | undefined;\r\n private cacheOutcome: CacheOutcome = CacheOutcome.NO_CACHE_HIT;\r\n\r\n constructor(telemetryRequest: ServerTelemetryRequest, cacheManager: CacheManager) {\r\n this.cacheManager = cacheManager;\r\n this.apiId = telemetryRequest.apiId;\r\n this.correlationId = telemetryRequest.correlationId;\r\n this.wrapperSKU = telemetryRequest.wrapperSKU || Constants.EMPTY_STRING;\r\n this.wrapperVer = telemetryRequest.wrapperVer || Constants.EMPTY_STRING;\r\n\r\n this.telemetryCacheKey = SERVER_TELEM_CONSTANTS.CACHE_KEY + Separators.CACHE_KEY_SEPARATOR + telemetryRequest.clientId;\r\n }\r\n\r\n /**\r\n * API to add MSER Telemetry to request\r\n */\r\n generateCurrentRequestHeaderValue(): string {\r\n const request = `${this.apiId}${SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR}${this.cacheOutcome}`;\r\n const platformFields = [this.wrapperSKU, this.wrapperVer].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n const regionDiscoveryFields = this.getRegionDiscoveryFields();\r\n const requestWithRegionDiscoveryFields = [request, regionDiscoveryFields].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n\r\n return [SERVER_TELEM_CONSTANTS.SCHEMA_VERSION, requestWithRegionDiscoveryFields, platformFields].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);\r\n }\r\n\r\n /**\r\n * API to add MSER Telemetry for the last failed request\r\n */\r\n generateLastRequestHeaderValue(): string {\r\n const lastRequests = this.getLastRequests();\r\n\r\n const maxErrors = ServerTelemetryManager.maxErrorsToSend(lastRequests);\r\n const failedRequests = lastRequests.failedRequests.slice(0, 2*maxErrors).join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n const errors = lastRequests.errors.slice(0, maxErrors).join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n const errorCount = lastRequests.errors.length;\r\n\r\n // Indicate whether this header contains all data or partial data\r\n const overflow = maxErrors < errorCount ? SERVER_TELEM_CONSTANTS.OVERFLOW_TRUE : SERVER_TELEM_CONSTANTS.OVERFLOW_FALSE;\r\n const platformFields = [errorCount, overflow].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n\r\n return [SERVER_TELEM_CONSTANTS.SCHEMA_VERSION, lastRequests.cacheHits, failedRequests, errors, platformFields].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);\r\n }\r\n\r\n /**\r\n * API to cache token failures for MSER data capture\r\n * @param error\r\n */\r\n cacheFailedRequest(error: AuthError): void {\r\n const lastRequests = this.getLastRequests();\r\n if (lastRequests.errors.length >= SERVER_TELEM_CONSTANTS.MAX_CACHED_ERRORS) {\r\n // Remove a cached error to make room, first in first out\r\n lastRequests.failedRequests.shift(); // apiId\r\n lastRequests.failedRequests.shift(); // correlationId\r\n lastRequests.errors.shift();\r\n }\r\n \r\n lastRequests.failedRequests.push(this.apiId, this.correlationId);\r\n\r\n if (!StringUtils.isEmpty(error.subError)) {\r\n lastRequests.errors.push(error.subError);\r\n } else if (!StringUtils.isEmpty(error.errorCode)) {\r\n lastRequests.errors.push(error.errorCode);\r\n } else if (!!error && error.toString()) {\r\n lastRequests.errors.push(error.toString());\r\n } else {\r\n lastRequests.errors.push(SERVER_TELEM_CONSTANTS.UNKNOWN_ERROR);\r\n }\r\n\r\n this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Update server telemetry cache entry by incrementing cache hit counter\r\n */\r\n incrementCacheHits(): number {\r\n const lastRequests = this.getLastRequests();\r\n lastRequests.cacheHits += 1;\r\n\r\n this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);\r\n return lastRequests.cacheHits;\r\n }\r\n\r\n /**\r\n * Get the server telemetry entity from cache or initialize a new one\r\n */\r\n getLastRequests(): ServerTelemetryEntity {\r\n const initialValue: ServerTelemetryEntity = new ServerTelemetryEntity();\r\n const lastRequests = this.cacheManager.getServerTelemetry(this.telemetryCacheKey) as ServerTelemetryEntity;\r\n\r\n return lastRequests || initialValue;\r\n }\r\n\r\n /**\r\n * Remove server telemetry cache entry\r\n */\r\n clearTelemetryCache(): void {\r\n const lastRequests = this.getLastRequests();\r\n const numErrorsFlushed = ServerTelemetryManager.maxErrorsToSend(lastRequests);\r\n const errorCount = lastRequests.errors.length;\r\n if (numErrorsFlushed === errorCount) {\r\n // All errors were sent on last request, clear Telemetry cache\r\n this.cacheManager.removeItem(this.telemetryCacheKey);\r\n } else {\r\n // Partial data was flushed to server, construct a new telemetry cache item with errors that were not flushed\r\n const serverTelemEntity = new ServerTelemetryEntity();\r\n serverTelemEntity.failedRequests = lastRequests.failedRequests.slice(numErrorsFlushed*2); // failedRequests contains 2 items for each error\r\n serverTelemEntity.errors = lastRequests.errors.slice(numErrorsFlushed);\r\n\r\n this.cacheManager.setServerTelemetry(this.telemetryCacheKey, serverTelemEntity);\r\n }\r\n }\r\n\r\n /**\r\n * Returns the maximum number of errors that can be flushed to the server in the next network request\r\n * @param serverTelemetryEntity\r\n */\r\n static maxErrorsToSend(serverTelemetryEntity: ServerTelemetryEntity): number {\r\n let i;\r\n let maxErrors = 0;\r\n let dataSize = 0;\r\n const errorCount = serverTelemetryEntity.errors.length;\r\n for (i = 0; i < errorCount; i++) {\r\n // failedRequests parameter contains pairs of apiId and correlationId, multiply index by 2 to preserve pairs\r\n const apiId = serverTelemetryEntity.failedRequests[2*i] || Constants.EMPTY_STRING;\r\n const correlationId = serverTelemetryEntity.failedRequests[2*i + 1] || Constants.EMPTY_STRING;\r\n const errorCode = serverTelemetryEntity.errors[i] || Constants.EMPTY_STRING;\r\n\r\n // Count number of characters that would be added to header, each character is 1 byte. Add 3 at the end to account for separators\r\n dataSize += apiId.toString().length + correlationId.toString().length + errorCode.length + 3;\r\n\r\n if (dataSize < SERVER_TELEM_CONSTANTS.MAX_LAST_HEADER_BYTES) {\r\n // Adding this entry to the header would still keep header size below the limit\r\n maxErrors += 1;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return maxErrors;\r\n }\r\n\r\n /**\r\n * Get the region discovery fields\r\n * \r\n * @returns string\r\n */\r\n getRegionDiscoveryFields(): string {\r\n const regionDiscoveryFields: string[] = [];\r\n\r\n regionDiscoveryFields.push(this.regionUsed || Constants.EMPTY_STRING);\r\n regionDiscoveryFields.push(this.regionSource || Constants.EMPTY_STRING);\r\n regionDiscoveryFields.push(this.regionOutcome || Constants.EMPTY_STRING);\r\n\r\n return regionDiscoveryFields.join(\",\");\r\n }\r\n\r\n /**\r\n * Update the region discovery metadata\r\n * \r\n * @param regionDiscoveryMetadata\r\n * @returns void\r\n */\r\n updateRegionDiscoveryMetadata(regionDiscoveryMetadata: RegionDiscoveryMetadata): void {\r\n this.regionUsed = regionDiscoveryMetadata.region_used;\r\n this.regionSource = regionDiscoveryMetadata.region_source;\r\n this.regionOutcome = regionDiscoveryMetadata.region_outcome;\r\n }\r\n\r\n /**\r\n * Set cache outcome \r\n */\r\n setCacheOutcome(cacheOutcome: CacheOutcome): void {\r\n this.cacheOutcome = cacheOutcome;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ICrypto, INetworkModule, Logger, AuthenticationResult, AccountInfo, AccountEntity, BaseAuthRequest, AuthenticationScheme, UrlString, ServerTelemetryManager, ServerTelemetryRequest, ClientConfigurationError, StringUtils, Authority, AuthorityOptions, AuthorityFactory, IPerformanceClient, PerformanceEvents } from \"@azure/msal-common\";\r\nimport { BrowserConfiguration } from \"../config/Configuration\";\r\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\r\nimport { EventHandler } from \"../event/EventHandler\";\r\nimport { EndSessionRequest } from \"../request/EndSessionRequest\";\r\nimport { RedirectRequest } from \"../request/RedirectRequest\";\r\nimport { PopupRequest } from \"../request/PopupRequest\";\r\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest\";\r\nimport { version } from \"../packageMetadata\";\r\nimport { BrowserConstants } from \"../utils/BrowserConstants\";\r\nimport { BrowserUtils } from \"../utils/BrowserUtils\";\r\nimport { INavigationClient } from \"../navigation/INavigationClient\";\r\nimport { NativeMessageHandler } from \"../broker/nativeBroker/NativeMessageHandler\";\r\n\r\nexport abstract class BaseInteractionClient {\r\n\r\n protected config: BrowserConfiguration;\r\n protected browserStorage: BrowserCacheManager;\r\n protected browserCrypto: ICrypto;\r\n protected networkClient: INetworkModule;\r\n protected logger: Logger;\r\n protected eventHandler: EventHandler;\r\n protected navigationClient: INavigationClient;\r\n protected nativeMessageHandler: NativeMessageHandler | undefined;\r\n protected correlationId: string;\r\n protected performanceClient: IPerformanceClient;\r\n\r\n constructor(config: BrowserConfiguration, storageImpl: BrowserCacheManager, browserCrypto: ICrypto, logger: Logger, eventHandler: EventHandler, navigationClient: INavigationClient, performanceClient: IPerformanceClient, nativeMessageHandler?: NativeMessageHandler, correlationId?: string) {\r\n this.config = config;\r\n this.browserStorage = storageImpl;\r\n this.browserCrypto = browserCrypto;\r\n this.networkClient = this.config.system.networkClient;\r\n this.eventHandler = eventHandler;\r\n this.navigationClient = navigationClient;\r\n this.nativeMessageHandler = nativeMessageHandler;\r\n this.correlationId = correlationId || this.browserCrypto.createNewGuid();\r\n this.logger = logger.clone(BrowserConstants.MSAL_SKU, version, this.correlationId);\r\n this.performanceClient = performanceClient;\r\n }\r\n\r\n abstract acquireToken(request: RedirectRequest|PopupRequest|SsoSilentRequest): Promise;\r\n\r\n abstract logout(request: EndSessionRequest): Promise;\r\n\r\n protected async clearCacheOnLogout(account?: AccountInfo| null): Promise {\r\n if (account) {\r\n if (AccountEntity.accountInfoIsEqual(account, this.browserStorage.getActiveAccount(), false)) {\r\n this.logger.verbose(\"Setting active account to null\");\r\n this.browserStorage.setActiveAccount(null);\r\n }\r\n // Clear given account.\r\n try {\r\n await this.browserStorage.removeAccount(AccountEntity.generateAccountCacheKey(account));\r\n this.logger.verbose(\"Cleared cache items belonging to the account provided in the logout request.\");\r\n } catch (error) {\r\n this.logger.error(\"Account provided in logout request was not found. Local cache unchanged.\");\r\n }\r\n } else {\r\n try {\r\n this.logger.verbose(\"No account provided in logout request, clearing all cache items.\", this.correlationId);\r\n // Clear all accounts and tokens\r\n await this.browserStorage.clear();\r\n // Clear any stray keys from IndexedDB\r\n await this.browserCrypto.clearKeystore();\r\n } catch(e) {\r\n this.logger.error(\"Attempted to clear all MSAL cache items and failed. Local cache unchanged.\");\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Initializer function for all request APIs\r\n * @param request\r\n */\r\n protected async initializeBaseRequest(request: Partial, account?: AccountInfo): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.InitializeBaseRequest, request.correlationId);\r\n this.logger.verbose(\"Initializing BaseAuthRequest\");\r\n const authority = request.authority || this.config.auth.authority;\r\n\r\n if (account) {\r\n await this.validateRequestAuthority(authority, account);\r\n }\r\n\r\n const scopes = [...((request && request.scopes) || [])];\r\n\r\n const validatedRequest: BaseAuthRequest = {\r\n ...request,\r\n correlationId: this.correlationId,\r\n authority,\r\n scopes\r\n };\r\n\r\n // Set authenticationScheme to BEARER if not explicitly set in the request\r\n if (!validatedRequest.authenticationScheme) {\r\n validatedRequest.authenticationScheme = AuthenticationScheme.BEARER;\r\n this.logger.verbose(\"Authentication Scheme wasn't explicitly set in request, defaulting to \\\"Bearer\\\" request\");\r\n } else {\r\n if (validatedRequest.authenticationScheme === AuthenticationScheme.SSH) {\r\n if (!request.sshJwk) {\r\n throw ClientConfigurationError.createMissingSshJwkError();\r\n }\r\n if(!request.sshKid) {\r\n throw ClientConfigurationError.createMissingSshKidError();\r\n }\r\n }\r\n this.logger.verbose(`Authentication Scheme set to \"${validatedRequest.authenticationScheme}\" as configured in Auth request`);\r\n }\r\n\r\n // Set requested claims hash if claims were requested and claims-based caching is enabled\r\n if (this.config.cache.claimsBasedCachingEnabled && request.claims && !StringUtils.isEmptyObj(request.claims)) {\r\n validatedRequest.requestedClaimsHash = await this.browserCrypto.hashString(request.claims);\r\n }\r\n\r\n return validatedRequest;\r\n }\r\n\r\n /**\r\n *\r\n * Use to get the redirect uri configured in MSAL or null.\r\n * @param requestRedirectUri\r\n * @returns Redirect URL\r\n *\r\n */\r\n getRedirectUri(requestRedirectUri?: string): string {\r\n this.logger.verbose(\"getRedirectUri called\");\r\n const redirectUri = requestRedirectUri || this.config.auth.redirectUri || BrowserUtils.getCurrentUri();\r\n return UrlString.getAbsoluteUrl(redirectUri, BrowserUtils.getCurrentUri());\r\n }\r\n\r\n /*\r\n * If authority provided in the request does not match environment/authority specified \r\n * in the account or MSAL config, we throw an error.\r\n */\r\n async validateRequestAuthority(authority: string, account: AccountInfo): Promise {\r\n const discoveredAuthority = await this.getDiscoveredAuthority(authority);\r\n \r\n if(!discoveredAuthority.isAlias(account.environment)) {\r\n throw ClientConfigurationError.createAuthorityMismatchError();\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param apiId\r\n * @param correlationId\r\n * @param forceRefresh\r\n */\r\n protected initializeServerTelemetryManager(apiId: number, forceRefresh?: boolean): ServerTelemetryManager {\r\n this.logger.verbose(\"initializeServerTelemetryManager called\");\r\n const telemetryPayload: ServerTelemetryRequest = {\r\n clientId: this.config.auth.clientId,\r\n correlationId: this.correlationId,\r\n apiId: apiId,\r\n forceRefresh: forceRefresh || false,\r\n wrapperSKU: this.browserStorage.getWrapperMetadata()[0],\r\n wrapperVer: this.browserStorage.getWrapperMetadata()[1]\r\n };\r\n\r\n return new ServerTelemetryManager(telemetryPayload, this.browserStorage);\r\n }\r\n\r\n /**\r\n * Used to get a discovered version of the default authority.\r\n * @param requestAuthority\r\n * @param requestCorrelationId\r\n */\r\n protected async getDiscoveredAuthority(requestAuthority?: string): Promise {\r\n this.logger.verbose(\"getDiscoveredAuthority called\");\r\n const authorityOptions: AuthorityOptions = {\r\n protocolMode: this.config.auth.protocolMode,\r\n knownAuthorities: this.config.auth.knownAuthorities,\r\n cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,\r\n authorityMetadata: this.config.auth.authorityMetadata\r\n };\r\n\r\n if (requestAuthority) {\r\n this.logger.verbose(\"Creating discovered authority with request authority\");\r\n return await AuthorityFactory.createDiscoveredInstance(requestAuthority, this.config.system.networkClient, this.browserStorage, authorityOptions, this.logger);\r\n }\r\n\r\n this.logger.verbose(\"Creating discovered authority with configured authority\");\r\n return await AuthorityFactory.createDiscoveredInstance(this.config.auth.authority, this.config.system.networkClient, this.browserStorage, authorityOptions, this.logger);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ServerTelemetryManager, CommonAuthorizationCodeRequest, Constants, AuthorizationCodeClient, ClientConfiguration, AuthorityOptions, Authority, AuthorityFactory, ServerAuthorizationCodeResponse, UrlString, CommonEndSessionRequest, ProtocolUtils, ResponseMode, StringUtils, IdTokenClaims, AccountInfo, AzureCloudOptions, PerformanceEvents, AuthError} from \"@azure/msal-common\";\r\nimport { BaseInteractionClient } from \"./BaseInteractionClient\";\r\nimport { AuthorizationUrlRequest } from \"../request/AuthorizationUrlRequest\";\r\nimport { BrowserConstants, InteractionType } from \"../utils/BrowserConstants\";\r\nimport { version } from \"../packageMetadata\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { BrowserProtocolUtils, BrowserStateObject } from \"../utils/BrowserProtocolUtils\";\r\nimport { EndSessionRequest } from \"../request/EndSessionRequest\";\r\nimport { BrowserUtils } from \"../utils/BrowserUtils\";\r\nimport { RedirectRequest } from \"../request/RedirectRequest\";\r\nimport { PopupRequest } from \"../request/PopupRequest\";\r\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest\";\r\n\r\n/**\r\n * Defines the class structure and helper functions used by the \"standard\", non-brokered auth flows (popup, redirect, silent (RT), silent (iframe))\r\n */\r\nexport abstract class StandardInteractionClient extends BaseInteractionClient {\r\n /**\r\n * Generates an auth code request tied to the url request.\r\n * @param request\r\n */\r\n protected async initializeAuthorizationCodeRequest(request: AuthorizationUrlRequest): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientInitializeAuthorizationCodeRequest, request.correlationId);\r\n this.logger.verbose(\"initializeAuthorizationRequest called\", request.correlationId);\r\n const generatedPkceParams = await this.browserCrypto.generatePkceCodes();\r\n\r\n const authCodeRequest: CommonAuthorizationCodeRequest = {\r\n ...request,\r\n redirectUri: request.redirectUri,\r\n code: Constants.EMPTY_STRING,\r\n codeVerifier: generatedPkceParams.verifier\r\n };\r\n\r\n request.codeChallenge = generatedPkceParams.challenge;\r\n request.codeChallengeMethod = Constants.S256_CODE_CHALLENGE_METHOD;\r\n\r\n return authCodeRequest;\r\n }\r\n\r\n /**\r\n * Initializer for the logout request.\r\n * @param logoutRequest\r\n */\r\n protected initializeLogoutRequest(logoutRequest?: EndSessionRequest): CommonEndSessionRequest {\r\n this.logger.verbose(\"initializeLogoutRequest called\", logoutRequest?.correlationId);\r\n\r\n const validLogoutRequest: CommonEndSessionRequest = {\r\n correlationId: this.correlationId || this.browserCrypto.createNewGuid(),\r\n ...logoutRequest\r\n };\r\n\r\n /**\r\n * Set logout_hint to be login_hint from ID Token Claims if present\r\n * and logoutHint attribute wasn't manually set in logout request\r\n */\r\n if (logoutRequest) {\r\n // If logoutHint isn't set and an account was passed in, try to extract logoutHint from ID Token Claims\r\n if (!logoutRequest.logoutHint) {\r\n if(logoutRequest.account) {\r\n const logoutHint = this.getLogoutHintFromIdTokenClaims(logoutRequest.account);\r\n if (logoutHint) {\r\n this.logger.verbose(\"Setting logoutHint to login_hint ID Token Claim value for the account provided\");\r\n validLogoutRequest.logoutHint = logoutHint;\r\n }\r\n } else {\r\n this.logger.verbose(\"logoutHint was not set and account was not passed into logout request, logoutHint will not be set\");\r\n }\r\n } else {\r\n this.logger.verbose(\"logoutHint has already been set in logoutRequest\");\r\n }\r\n } else {\r\n this.logger.verbose(\"logoutHint will not be set since no logout request was configured\");\r\n }\r\n\r\n /*\r\n * Only set redirect uri if logout request isn't provided or the set uri isn't null.\r\n * Otherwise, use passed uri, config, or current page.\r\n */\r\n if (!logoutRequest || logoutRequest.postLogoutRedirectUri !== null) {\r\n if (logoutRequest && logoutRequest.postLogoutRedirectUri) {\r\n this.logger.verbose(\"Setting postLogoutRedirectUri to uri set on logout request\", validLogoutRequest.correlationId);\r\n validLogoutRequest.postLogoutRedirectUri = UrlString.getAbsoluteUrl(logoutRequest.postLogoutRedirectUri, BrowserUtils.getCurrentUri());\r\n } else if (this.config.auth.postLogoutRedirectUri === null) {\r\n this.logger.verbose(\"postLogoutRedirectUri configured as null and no uri set on request, not passing post logout redirect\", validLogoutRequest.correlationId);\r\n } else if (this.config.auth.postLogoutRedirectUri) {\r\n this.logger.verbose(\"Setting postLogoutRedirectUri to configured uri\", validLogoutRequest.correlationId);\r\n validLogoutRequest.postLogoutRedirectUri = UrlString.getAbsoluteUrl(this.config.auth.postLogoutRedirectUri, BrowserUtils.getCurrentUri());\r\n } else {\r\n this.logger.verbose(\"Setting postLogoutRedirectUri to current page\", validLogoutRequest.correlationId);\r\n validLogoutRequest.postLogoutRedirectUri = UrlString.getAbsoluteUrl(BrowserUtils.getCurrentUri(), BrowserUtils.getCurrentUri());\r\n }\r\n } else {\r\n this.logger.verbose(\"postLogoutRedirectUri passed as null, not setting post logout redirect uri\", validLogoutRequest.correlationId);\r\n }\r\n\r\n return validLogoutRequest;\r\n }\r\n\r\n /**\r\n * Parses login_hint ID Token Claim out of AccountInfo object to be used as\r\n * logout_hint in end session request.\r\n * @param account\r\n */\r\n protected getLogoutHintFromIdTokenClaims(account: AccountInfo): string | null {\r\n const idTokenClaims: IdTokenClaims | undefined = account.idTokenClaims;\r\n if (idTokenClaims) {\r\n if (idTokenClaims.login_hint) {\r\n return idTokenClaims.login_hint;\r\n } else {\r\n this.logger.verbose(\"The ID Token Claims tied to the provided account do not contain a login_hint claim, logoutHint will not be added to logout request\");\r\n }\r\n } else {\r\n this.logger.verbose(\"The provided account does not contain ID Token Claims, logoutHint will not be added to logout request\");\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Creates an Authorization Code Client with the given authority, or the default authority.\r\n * @param serverTelemetryManager\r\n * @param authorityUrl\r\n */\r\n protected async createAuthCodeClient(serverTelemetryManager: ServerTelemetryManager, authorityUrl?: string, requestAzureCloudOptions?: AzureCloudOptions): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.correlationId);\r\n // Create auth module.\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.correlationId);\r\n const clientConfig = await this.getClientConfiguration(serverTelemetryManager, authorityUrl, requestAzureCloudOptions);\r\n return new AuthorizationCodeClient(clientConfig, this.performanceClient);\r\n }\r\n\r\n /**\r\n * Creates a Client Configuration object with the given request authority, or the default authority.\r\n * @param serverTelemetryManager\r\n * @param requestAuthority\r\n * @param requestCorrelationId\r\n */\r\n protected async getClientConfiguration(serverTelemetryManager: ServerTelemetryManager, requestAuthority?: string, requestAzureCloudOptions?: AzureCloudOptions): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.correlationId);\r\n this.logger.verbose(\"getClientConfiguration called\", this.correlationId);\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.correlationId);\r\n const discoveredAuthority = await this.getDiscoveredAuthority(requestAuthority, requestAzureCloudOptions);\r\n const logger= this.config.system.loggerOptions;\r\n\r\n return {\r\n authOptions: {\r\n clientId: this.config.auth.clientId,\r\n authority: discoveredAuthority,\r\n clientCapabilities: this.config.auth.clientCapabilities\r\n },\r\n systemOptions: {\r\n tokenRenewalOffsetSeconds: this.config.system.tokenRenewalOffsetSeconds,\r\n preventCorsPreflight: true\r\n },\r\n loggerOptions: {\r\n loggerCallback: logger.loggerCallback,\r\n piiLoggingEnabled: logger.piiLoggingEnabled,\r\n logLevel: logger.logLevel,\r\n correlationId: this.correlationId\r\n },\r\n cacheOptions: {\r\n claimsBasedCachingEnabled: this.config.cache.claimsBasedCachingEnabled\r\n },\r\n cryptoInterface: this.browserCrypto,\r\n networkInterface: this.networkClient,\r\n storageInterface: this.browserStorage,\r\n serverTelemetryManager: serverTelemetryManager,\r\n libraryInfo: {\r\n sku: BrowserConstants.MSAL_SKU,\r\n version: version,\r\n cpu: Constants.EMPTY_STRING,\r\n os: Constants.EMPTY_STRING\r\n },\r\n telemetry: this.config.telemetry\r\n };\r\n }\r\n \r\n /**\r\n * @param hash\r\n * @param interactionType\r\n */\r\n protected validateAndExtractStateFromHash(serverParams: ServerAuthorizationCodeResponse, interactionType: InteractionType, requestCorrelationId?: string): string {\r\n this.logger.verbose(\"validateAndExtractStateFromHash called\", requestCorrelationId);\r\n if (!serverParams.state) {\r\n throw BrowserAuthError.createHashDoesNotContainStateError();\r\n }\r\n\r\n const platformStateObj = BrowserProtocolUtils.extractBrowserRequestState(this.browserCrypto, serverParams.state);\r\n if (!platformStateObj) {\r\n throw BrowserAuthError.createUnableToParseStateError();\r\n }\r\n\r\n if (platformStateObj.interactionType !== interactionType) {\r\n throw BrowserAuthError.createStateInteractionTypeMismatchError();\r\n }\r\n\r\n this.logger.verbose(\"Returning state from hash\", requestCorrelationId);\r\n return serverParams.state;\r\n }\r\n\r\n /**\r\n * Used to get a discovered version of the default authority.\r\n * @param requestAuthority\r\n * @param requestCorrelationId\r\n */\r\n protected async getDiscoveredAuthority(requestAuthority?: string, requestAzureCloudOptions?: AzureCloudOptions): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.correlationId);\r\n this.logger.verbose(\"getDiscoveredAuthority called\", this.correlationId);\r\n const getAuthorityMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.correlationId);\r\n const authorityOptions: AuthorityOptions = {\r\n protocolMode: this.config.auth.protocolMode,\r\n knownAuthorities: this.config.auth.knownAuthorities,\r\n cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,\r\n authorityMetadata: this.config.auth.authorityMetadata,\r\n skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache\r\n };\r\n\r\n // build authority string based on auth params, precedence - azureCloudInstance + tenant >> authority\r\n const userAuthority = requestAuthority ? requestAuthority : this.config.auth.authority;\r\n\r\n // fall back to the authority from config\r\n const builtAuthority = Authority.generateAuthority(userAuthority, requestAzureCloudOptions || this.config.auth.azureCloudOptions);\r\n this.logger.verbose(\"Creating discovered authority with configured authority\", this.correlationId);\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance, this.correlationId);\r\n return await AuthorityFactory.createDiscoveredInstance(builtAuthority, this.config.system.networkClient, this.browserStorage, authorityOptions, this.logger, this.performanceClient, this.correlationId)\r\n .then((result: Authority) => {\r\n getAuthorityMeasurement.endMeasurement({\r\n success: true,\r\n });\r\n\r\n return result;\r\n })\r\n .catch((error:AuthError) => {\r\n getAuthorityMeasurement.endMeasurement({\r\n errorCode: error.errorCode,\r\n subErrorCode: error.subError,\r\n success: false\r\n });\r\n\r\n throw error;\r\n });\r\n }\r\n\r\n /**\r\n * Helper to initialize required request parameters for interactive APIs and ssoSilent()\r\n * @param request\r\n * @param interactionType\r\n */\r\n protected async initializeAuthorizationRequest(request: RedirectRequest|PopupRequest|SsoSilentRequest, interactionType: InteractionType): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.correlationId);\r\n this.logger.verbose(\"initializeAuthorizationRequest called\", this.correlationId);\r\n const redirectUri = this.getRedirectUri(request.redirectUri);\r\n const browserState: BrowserStateObject = {\r\n interactionType: interactionType\r\n };\r\n const state = ProtocolUtils.setRequestState(\r\n this.browserCrypto,\r\n (request && request.state)|| Constants.EMPTY_STRING,\r\n browserState\r\n );\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.InitializeBaseRequest, this.correlationId);\r\n const validatedRequest: AuthorizationUrlRequest = {\r\n ...await this.initializeBaseRequest(request),\r\n redirectUri: redirectUri,\r\n state: state,\r\n nonce: request.nonce || this.browserCrypto.createNewGuid(),\r\n responseMode: ResponseMode.FRAGMENT\r\n };\r\n\r\n const account = request.account || this.browserStorage.getActiveAccount();\r\n if (account) {\r\n this.logger.verbose(\"Setting validated request account\", this.correlationId);\r\n this.logger.verbosePii(`Setting validated request account: ${account.homeAccountId}`, this.correlationId);\r\n validatedRequest.account = account;\r\n }\r\n\r\n // Check for ADAL/MSAL v1 SSO\r\n if (StringUtils.isEmpty(validatedRequest.loginHint) && !account) {\r\n const legacyLoginHint = this.browserStorage.getLegacyLoginHint();\r\n if (legacyLoginHint) {\r\n validatedRequest.loginHint = legacyLoginHint;\r\n }\r\n }\r\n\r\n return validatedRequest;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ClientConfiguration } from \"../config/ClientConfiguration\";\r\nimport { BaseClient } from \"./BaseClient\";\r\nimport { CommonRefreshTokenRequest } from \"../request/CommonRefreshTokenRequest\";\r\nimport { Authority } from \"../authority/Authority\";\r\nimport { ServerAuthorizationTokenResponse } from \"../response/ServerAuthorizationTokenResponse\";\r\nimport { RequestParameterBuilder } from \"../request/RequestParameterBuilder\";\r\nimport { GrantType, AuthenticationScheme, Errors, HeaderNames } from \"../utils/Constants\";\r\nimport { ResponseHandler } from \"../response/ResponseHandler\";\r\nimport { AuthenticationResult } from \"../response/AuthenticationResult\";\r\nimport { PopTokenGenerator } from \"../crypto/PopTokenGenerator\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { RequestThumbprint } from \"../network/RequestThumbprint\";\r\nimport { NetworkResponse } from \"../network/NetworkManager\";\r\nimport { CommonSilentFlowRequest } from \"../request/CommonSilentFlowRequest\";\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { ServerError } from \"../error/ServerError\";\r\nimport { TimeUtils } from \"../utils/TimeUtils\";\r\nimport { UrlString } from \"../url/UrlString\";\r\nimport { CcsCredentialType } from \"../account/CcsCredential\";\r\nimport { buildClientInfoFromHomeAccountId } from \"../account/ClientInfo\";\r\nimport { InteractionRequiredAuthError, InteractionRequiredAuthErrorMessage } from \"../error/InteractionRequiredAuthError\";\r\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent\";\r\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient\";\r\n/**\r\n * OAuth2.0 refresh token client\r\n */\r\nexport class RefreshTokenClient extends BaseClient {\r\n constructor(configuration: ClientConfiguration, performanceClient?: IPerformanceClient) {\r\n super(configuration, performanceClient);\r\n\r\n }\r\n public async acquireToken(request: CommonRefreshTokenRequest): Promise {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireToken, request.correlationId);\r\n\r\n const atsMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.RefreshTokenClientAcquireToken, request.correlationId);\r\n this.logger.verbose(\"RefreshTokenClientAcquireToken called\", request.correlationId);\r\n const reqTimestamp = TimeUtils.nowSeconds();\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.RefreshTokenClientExecuteTokenRequest, request.correlationId);\r\n const response = await this.executeTokenRequest(request, this.authority);\r\n const httpVerToken = response.headers?.[HeaderNames.X_MS_HTTP_VERSION];\r\n atsMeasurement?.addStaticFields({\r\n refreshTokenSize: response.body.refresh_token?.length || 0,\r\n });\r\n if(httpVerToken)\r\n {\r\n atsMeasurement?.addStaticFields({\r\n httpVerToken,\r\n });\r\n }\r\n\r\n // Retrieve requestId from response headers\r\n const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID];\r\n const responseHandler = new ResponseHandler(\r\n this.config.authOptions.clientId,\r\n this.cacheManager,\r\n this.cryptoUtils,\r\n this.logger,\r\n this.config.serializableCache,\r\n this.config.persistencePlugin\r\n );\r\n responseHandler.validateTokenResponse(response.body);\r\n\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.HandleServerTokenResponse, request.correlationId);\r\n return responseHandler.handleServerTokenResponse(\r\n response.body,\r\n this.authority,\r\n reqTimestamp,\r\n request,\r\n undefined,\r\n undefined,\r\n true,\r\n request.forceCache,\r\n requestId\r\n ).then((result: AuthenticationResult) => {\r\n atsMeasurement?.endMeasurement({\r\n success: true\r\n });\r\n return result;\r\n })\r\n .catch((error) => {\r\n this.logger.verbose(\"Error in fetching refresh token\", request.correlationId);\r\n atsMeasurement?.endMeasurement({\r\n errorCode: error.errorCode,\r\n subErrorCode: error.subError,\r\n success: false\r\n });\r\n throw error;\r\n });\r\n }\r\n\r\n /**\r\n * Gets cached refresh token and attaches to request, then calls acquireToken API\r\n * @param request\r\n */\r\n public async acquireTokenByRefreshToken(request: CommonSilentFlowRequest): Promise {\r\n // Cannot renew token if no request object is given.\r\n if (!request) {\r\n throw ClientConfigurationError.createEmptyTokenRequestError();\r\n }\r\n\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken, request.correlationId);\r\n\r\n // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases\r\n if (!request.account) {\r\n throw ClientAuthError.createNoAccountInSilentRequestError();\r\n }\r\n\r\n // try checking if FOCI is enabled for the given application\r\n const isFOCI = this.cacheManager.isAppMetadataFOCI(request.account.environment);\r\n\r\n // if the app is part of the family, retrive a Family refresh token if present and make a refreshTokenRequest\r\n if (isFOCI) {\r\n try {\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, request.correlationId);\r\n return this.acquireTokenWithCachedRefreshToken(request, true);\r\n } catch (e) {\r\n const noFamilyRTInCache = e instanceof InteractionRequiredAuthError && e.errorCode === InteractionRequiredAuthErrorMessage.noTokensFoundError.code;\r\n const clientMismatchErrorWithFamilyRT = e instanceof ServerError && e.errorCode === Errors.INVALID_GRANT_ERROR && e.subError === Errors.CLIENT_MISMATCH_ERROR;\r\n\r\n // if family Refresh Token (FRT) cache acquisition fails or if client_mismatch error is seen with FRT, reattempt with application Refresh Token (ART)\r\n if (noFamilyRTInCache || clientMismatchErrorWithFamilyRT) {\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, request.correlationId);\r\n return this.acquireTokenWithCachedRefreshToken(request, false);\r\n // throw in all other cases\r\n } else {\r\n throw e;\r\n }\r\n }\r\n }\r\n // fall back to application refresh token acquisition\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, request.correlationId);\r\n return this.acquireTokenWithCachedRefreshToken(request, false);\r\n\r\n }\r\n\r\n /**\r\n * makes a network call to acquire tokens by exchanging RefreshToken available in userCache; throws if refresh token is not cached\r\n * @param request\r\n */\r\n private async acquireTokenWithCachedRefreshToken(request: CommonSilentFlowRequest, foci: boolean) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, request.correlationId);\r\n\r\n // fetches family RT or application RT based on FOCI value\r\n\r\n const atsMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, request.correlationId);\r\n this.logger.verbose(\"RefreshTokenClientAcquireTokenWithCachedRefreshToken called\", request.correlationId);\r\n const refreshToken = this.cacheManager.getRefreshToken(request.account, foci);\r\n\r\n if (!refreshToken) {\r\n atsMeasurement?.discardMeasurement();\r\n throw InteractionRequiredAuthError.createNoTokensFoundError();\r\n }\r\n // attach cached RT size to the current measurement\r\n atsMeasurement?.endMeasurement({\r\n success: true\r\n });\r\n\r\n const refreshTokenRequest: CommonRefreshTokenRequest = {\r\n ...request,\r\n refreshToken: refreshToken.secret,\r\n authenticationScheme: request.authenticationScheme || AuthenticationScheme.BEARER,\r\n ccsCredential: {\r\n credential: request.account.homeAccountId,\r\n type: CcsCredentialType.HOME_ACCOUNT_ID\r\n }\r\n };\r\n\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.RefreshTokenClientAcquireToken, request.correlationId);\r\n return this.acquireToken(refreshTokenRequest);\r\n }\r\n\r\n /**\r\n * Constructs the network message and makes a NW call to the underlying secure token service\r\n * @param request\r\n * @param authority\r\n */\r\n private async executeTokenRequest(request: CommonRefreshTokenRequest, authority: Authority)\r\n : Promise> {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientExecuteTokenRequest, request.correlationId);\r\n const acquireTokenMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.RefreshTokenClientExecuteTokenRequest, request.correlationId);\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.RefreshTokenClientCreateTokenRequestBody, request.correlationId);\r\n \r\n const queryParametersString = this.createTokenQueryParameters(request);\r\n const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString);\r\n \r\n const requestBody = await this.createTokenRequestBody(request);\r\n const headers: Record = this.createTokenRequestHeaders(request.ccsCredential);\r\n const thumbprint: RequestThumbprint = {\r\n clientId: this.config.authOptions.clientId,\r\n authority: authority.canonicalAuthority,\r\n scopes: request.scopes,\r\n claims: request.claims,\r\n authenticationScheme: request.authenticationScheme,\r\n resourceRequestMethod: request.resourceRequestMethod,\r\n resourceRequestUri: request.resourceRequestUri,\r\n shrClaims: request.shrClaims,\r\n sshKid: request.sshKid\r\n };\r\n\r\n return this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint)\r\n .then((result) => {\r\n acquireTokenMeasurement?.endMeasurement({\r\n success: true\r\n });\r\n return result;\r\n })\r\n .catch((error) => {\r\n acquireTokenMeasurement?.endMeasurement({\r\n success: false\r\n });\r\n throw error;\r\n });\r\n }\r\n\r\n /**\r\n * Helper function to create the token request body\r\n * @param request\r\n */\r\n private async createTokenRequestBody(request: CommonRefreshTokenRequest): Promise {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientCreateTokenRequestBody, request.correlationId);\r\n\r\n const correlationId = request.correlationId;\r\n const acquireTokenMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.BaseClientCreateTokenRequestHeaders, correlationId);\r\n const parameterBuilder = new RequestParameterBuilder();\r\n\r\n parameterBuilder.addClientId(this.config.authOptions.clientId);\r\n\r\n parameterBuilder.addScopes(request.scopes);\r\n\r\n parameterBuilder.addGrantType(GrantType.REFRESH_TOKEN_GRANT);\r\n\r\n parameterBuilder.addClientInfo();\r\n\r\n parameterBuilder.addLibraryInfo(this.config.libraryInfo);\r\n parameterBuilder.addApplicationTelemetry(this.config.telemetry.application);\r\n parameterBuilder.addThrottling();\r\n\r\n if (this.serverTelemetryManager) {\r\n parameterBuilder.addServerTelemetry(this.serverTelemetryManager);\r\n }\r\n\r\n parameterBuilder.addCorrelationId(correlationId);\r\n\r\n parameterBuilder.addRefreshToken(request.refreshToken);\r\n\r\n if (this.config.clientCredentials.clientSecret) {\r\n parameterBuilder.addClientSecret(this.config.clientCredentials.clientSecret);\r\n }\r\n\r\n if (this.config.clientCredentials.clientAssertion) {\r\n const clientAssertion = this.config.clientCredentials.clientAssertion;\r\n parameterBuilder.addClientAssertion(clientAssertion.assertion);\r\n parameterBuilder.addClientAssertionType(clientAssertion.assertionType);\r\n }\r\n\r\n if (request.authenticationScheme === AuthenticationScheme.POP) {\r\n const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient);\r\n this.performanceClient?.setPreQueueTime(PerformanceEvents.PopTokenGenerateCnf, request.correlationId);\r\n const reqCnfData = await popTokenGenerator.generateCnf(request);\r\n // SPA PoP requires full Base64Url encoded req_cnf string (unhashed)\r\n parameterBuilder.addPopToken(reqCnfData.reqCnfString);\r\n } else if (request.authenticationScheme === AuthenticationScheme.SSH) {\r\n if (request.sshJwk) {\r\n parameterBuilder.addSshJwk(request.sshJwk);\r\n } else {\r\n acquireTokenMeasurement?.endMeasurement({\r\n success: false\r\n });\r\n throw ClientConfigurationError.createMissingSshJwkError();\r\n }\r\n }\r\n\r\n if (!StringUtils.isEmptyObj(request.claims) || this.config.authOptions.clientCapabilities && this.config.authOptions.clientCapabilities.length > 0) {\r\n parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);\r\n }\r\n\r\n if (this.config.systemOptions.preventCorsPreflight && request.ccsCredential) {\r\n switch (request.ccsCredential.type) {\r\n case CcsCredentialType.HOME_ACCOUNT_ID:\r\n try {\r\n const clientInfo = buildClientInfoFromHomeAccountId(request.ccsCredential.credential);\r\n parameterBuilder.addCcsOid(clientInfo);\r\n } catch (e) {\r\n this.logger.verbose(\"Could not parse home account ID for CCS Header: \" + e);\r\n }\r\n break;\r\n case CcsCredentialType.UPN:\r\n parameterBuilder.addCcsUpn(request.ccsCredential.credential);\r\n break;\r\n }\r\n }\r\n acquireTokenMeasurement?.endMeasurement({\r\n success: true\r\n });\r\n return parameterBuilder.createQueryString();\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { BaseClient } from \"./BaseClient\";\r\nimport { ClientConfiguration } from \"../config/ClientConfiguration\";\r\nimport { CommonSilentFlowRequest } from \"../request/CommonSilentFlowRequest\";\r\nimport { AuthenticationResult } from \"../response/AuthenticationResult\";\r\nimport { AuthToken } from \"../account/AuthToken\";\r\nimport { TimeUtils } from \"../utils/TimeUtils\";\r\nimport { RefreshTokenClient } from \"./RefreshTokenClient\";\r\nimport { ClientAuthError, ClientAuthErrorMessage } from \"../error/ClientAuthError\";\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { ResponseHandler } from \"../response/ResponseHandler\";\r\nimport { CacheRecord } from \"../cache/entities/CacheRecord\";\r\nimport { CacheOutcome } from \"../utils/Constants\";\r\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\n\r\nexport class SilentFlowClient extends BaseClient {\r\n \r\n constructor(configuration: ClientConfiguration, performanceClient?: IPerformanceClient) {\r\n super(configuration,performanceClient);\r\n }\r\n \r\n /**\r\n * Retrieves a token from cache if it is still valid, or uses the cached refresh token to renew\r\n * the given token and returns the renewed token\r\n * @param request\r\n */\r\n async acquireToken(request: CommonSilentFlowRequest): Promise {\r\n try {\r\n return await this.acquireCachedToken(request);\r\n } catch (e) {\r\n if (e instanceof ClientAuthError && e.errorCode === ClientAuthErrorMessage.tokenRefreshRequired.code) {\r\n const refreshTokenClient = new RefreshTokenClient(this.config, this.performanceClient);\r\n return refreshTokenClient.acquireTokenByRefreshToken(request);\r\n } else {\r\n throw e;\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * Retrieves token from cache or throws an error if it must be refreshed.\r\n * @param request\r\n */\r\n async acquireCachedToken(request: CommonSilentFlowRequest): Promise {\r\n // Cannot renew token if no request object is given.\r\n if (!request) {\r\n throw ClientConfigurationError.createEmptyTokenRequestError();\r\n }\r\n\r\n if (request.forceRefresh) {\r\n // Must refresh due to present force_refresh flag.\r\n this.serverTelemetryManager?.setCacheOutcome(CacheOutcome.FORCE_REFRESH);\r\n this.logger.info(\"SilentFlowClient:acquireCachedToken - Skipping cache because forceRefresh is true.\");\r\n throw ClientAuthError.createRefreshRequiredError();\r\n } else if (!this.config.cacheOptions.claimsBasedCachingEnabled && !StringUtils.isEmptyObj(request.claims)) {\r\n // Must refresh due to presence of claims in request preventing cache lookup\r\n this.serverTelemetryManager?.setCacheOutcome(CacheOutcome.CLAIMS_REQUESTED_CACHE_SKIPPED);\r\n this.logger.info(\"SilentFlowClient:acquireCachedToken - Skipping cache because claims-based caching is disabled and claims were requested.\");\r\n throw ClientAuthError.createRefreshRequiredError();\r\n }\r\n\r\n // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases\r\n if (!request.account) {\r\n throw ClientAuthError.createNoAccountInSilentRequestError();\r\n }\r\n\r\n const environment = request.authority || this.authority.getPreferredCache();\r\n\r\n const cacheRecord = this.cacheManager.readCacheRecord(request.account, request, environment);\r\n\r\n if (!cacheRecord.accessToken) {\r\n // Must refresh due to non-existent access_token.\r\n this.serverTelemetryManager?.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN);\r\n this.logger.info(\"SilentFlowClient:acquireCachedToken - No access token found in cache for the given properties.\");\r\n throw ClientAuthError.createRefreshRequiredError();\r\n } else if (\r\n TimeUtils.wasClockTurnedBack(cacheRecord.accessToken.cachedAt) ||\r\n TimeUtils.isTokenExpired(cacheRecord.accessToken.expiresOn, this.config.systemOptions.tokenRenewalOffsetSeconds)\r\n ) {\r\n // Must refresh due to expired access_token.\r\n this.serverTelemetryManager?.setCacheOutcome(CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED);\r\n this.logger.info(`SilentFlowClient:acquireCachedToken - Cached access token is expired or will expire within ${this.config.systemOptions.tokenRenewalOffsetSeconds} seconds.`);\r\n throw ClientAuthError.createRefreshRequiredError();\r\n } else if (cacheRecord.accessToken.refreshOn && TimeUtils.isTokenExpired(cacheRecord.accessToken.refreshOn, 0)) {\r\n // Must refresh due to the refresh_in value.\r\n this.serverTelemetryManager?.setCacheOutcome(CacheOutcome.REFRESH_CACHED_ACCESS_TOKEN);\r\n this.logger.info(\"SilentFlowClient:acquireCachedToken - Cached access token's refreshOn property has been exceeded'.\");\r\n throw ClientAuthError.createRefreshRequiredError();\r\n }\r\n\r\n if (this.config.serverTelemetryManager) {\r\n this.config.serverTelemetryManager.incrementCacheHits();\r\n }\r\n\r\n return await this.generateResultFromCacheRecord(cacheRecord, request);\r\n }\r\n\r\n /**\r\n * Helper function to build response object from the CacheRecord\r\n * @param cacheRecord\r\n */\r\n private async generateResultFromCacheRecord(cacheRecord: CacheRecord, request: CommonSilentFlowRequest): Promise {\r\n let idTokenObj: AuthToken | undefined;\r\n if (cacheRecord.idToken) {\r\n idTokenObj = new AuthToken(cacheRecord.idToken.secret, this.config.cryptoInterface);\r\n }\r\n\r\n // token max_age check\r\n if (request.maxAge || (request.maxAge === 0)) {\r\n const authTime = idTokenObj?.claims.auth_time;\r\n if (!authTime) {\r\n throw ClientAuthError.createAuthTimeNotFoundError();\r\n }\r\n\r\n AuthToken.checkMaxAge(authTime, request.maxAge);\r\n }\r\n\r\n return await ResponseHandler.generateAuthenticationResult(\r\n this.cryptoUtils,\r\n this.authority,\r\n cacheRecord,\r\n true,\r\n request,\r\n idTokenObj\r\n );\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { StandardInteractionClient } from \"./StandardInteractionClient\";\r\nimport { CommonSilentFlowRequest, AuthenticationResult, SilentFlowClient, ServerTelemetryManager, AccountInfo, AzureCloudOptions, PerformanceEvents, AuthError } from \"@azure/msal-common\";\r\nimport { SilentRequest } from \"../request/SilentRequest\";\r\nimport { ApiId } from \"../utils/BrowserConstants\";\r\nimport { BrowserAuthError, BrowserAuthErrorMessage } from \"../error/BrowserAuthError\";\r\n\r\nexport class SilentCacheClient extends StandardInteractionClient {\r\n /**\r\n * Returns unexpired tokens from the cache, if available\r\n * @param silentRequest\r\n */\r\n async acquireToken(silentRequest: CommonSilentFlowRequest): Promise {\r\n const acquireTokenMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.SilentCacheClientAcquireToken, silentRequest.correlationId);\r\n // Telemetry manager only used to increment cacheHits here\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenSilent_silentFlow);\r\n\r\n const silentAuthClient = await this.createSilentFlowClient(serverTelemetryManager, silentRequest.authority, silentRequest.azureCloudOptions);\r\n this.logger.verbose(\"Silent auth client created\");\r\n\r\n try {\r\n const cachedToken = await silentAuthClient.acquireCachedToken(silentRequest);\r\n\r\n acquireTokenMeasurement.endMeasurement({\r\n success: true,\r\n fromCache: true\r\n });\r\n return cachedToken;\r\n } catch (error) {\r\n if (error instanceof BrowserAuthError && error.errorCode === BrowserAuthErrorMessage.signingKeyNotFoundInStorage.code) {\r\n this.logger.verbose(\"Signing keypair for bound access token not found. Refreshing bound access token and generating a new crypto keypair.\");\r\n }\r\n acquireTokenMeasurement.endMeasurement({\r\n errorCode: error instanceof AuthError && error.errorCode || undefined,\r\n subErrorCode: error instanceof AuthError && error.subError || undefined,\r\n success: false\r\n });\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Currently Unsupported\r\n */\r\n logout(): Promise {\r\n // Synchronous so we must reject\r\n return Promise.reject(BrowserAuthError.createSilentLogoutUnsupportedError());\r\n }\r\n\r\n /**\r\n * Creates an Silent Flow Client with the given authority, or the default authority.\r\n * @param serverTelemetryManager\r\n * @param authorityUrl\r\n */\r\n protected async createSilentFlowClient(serverTelemetryManager: ServerTelemetryManager, authorityUrl?: string, azureCloudOptions?: AzureCloudOptions): Promise {\r\n // Create auth module.\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.correlationId);\r\n const clientConfig = await this.getClientConfiguration(serverTelemetryManager, authorityUrl, azureCloudOptions);\r\n return new SilentFlowClient(clientConfig, this.performanceClient);\r\n }\r\n\r\n async initializeSilentRequest(request: SilentRequest, account: AccountInfo): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.InitializeSilentRequest, this.correlationId);\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.InitializeBaseRequest, this.correlationId);\r\n return {\r\n ...request,\r\n ...await this.initializeBaseRequest(request, account),\r\n account: account,\r\n forceRefresh: request.forceRefresh || false\r\n };\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthenticationResult, Logger, ICrypto, PromptValue, AuthToken, Constants, AccountEntity, AuthorityType, ScopeSet, TimeUtils, AuthenticationScheme, UrlString, OIDC_DEFAULT_SCOPES, PopTokenGenerator, SignedHttpRequestParameters, IPerformanceClient, PerformanceEvents, IdTokenEntity, AccessTokenEntity, ClientAuthError, AuthError, CommonSilentFlowRequest, AccountInfo, CacheRecord } from \"@azure/msal-common\";\r\nimport { BaseInteractionClient } from \"./BaseInteractionClient\";\r\nimport { BrowserConfiguration } from \"../config/Configuration\";\r\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\r\nimport { EventHandler } from \"../event/EventHandler\";\r\nimport { PopupRequest } from \"../request/PopupRequest\";\r\nimport { SilentRequest } from \"../request/SilentRequest\";\r\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest\";\r\nimport { NativeMessageHandler } from \"../broker/nativeBroker/NativeMessageHandler\";\r\nimport { NativeExtensionMethod, ApiId, TemporaryCacheKeys, NativeConstants } from \"../utils/BrowserConstants\";\r\nimport { NativeExtensionRequestBody, NativeTokenRequest } from \"../broker/nativeBroker/NativeRequest\";\r\nimport { MATS, NativeResponse } from \"../broker/nativeBroker/NativeResponse\";\r\nimport { NativeAuthError } from \"../error/NativeAuthError\";\r\nimport { RedirectRequest } from \"../request/RedirectRequest\";\r\nimport { NavigationOptions } from \"../navigation/NavigationOptions\";\r\nimport { INavigationClient } from \"../navigation/INavigationClient\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { SilentCacheClient } from \"./SilentCacheClient\";\r\n\r\nexport class NativeInteractionClient extends BaseInteractionClient {\r\n protected apiId: ApiId;\r\n protected accountId: string;\r\n protected nativeMessageHandler: NativeMessageHandler;\r\n protected silentCacheClient: SilentCacheClient;\r\n protected nativeStorageManager: BrowserCacheManager;\r\n\r\n constructor(config: BrowserConfiguration, browserStorage: BrowserCacheManager, browserCrypto: ICrypto, logger: Logger, eventHandler: EventHandler, navigationClient: INavigationClient, apiId: ApiId, performanceClient: IPerformanceClient, provider: NativeMessageHandler, accountId: string, nativeStorageImpl: BrowserCacheManager, correlationId?: string) {\r\n super(config, browserStorage, browserCrypto, logger, eventHandler, navigationClient, performanceClient, provider, correlationId);\r\n this.apiId = apiId;\r\n this.accountId = accountId;\r\n this.nativeMessageHandler = provider;\r\n this.nativeStorageManager = nativeStorageImpl;\r\n this.silentCacheClient = new SilentCacheClient(config, this.nativeStorageManager, browserCrypto, logger, eventHandler, navigationClient, performanceClient, provider, correlationId);\r\n }\r\n\r\n /**\r\n * Acquire token from native platform via browser extension\r\n * @param request\r\n */\r\n async acquireToken(request: PopupRequest|SilentRequest|SsoSilentRequest): Promise {\r\n this.logger.trace(\"NativeInteractionClient - acquireToken called.\");\r\n\r\n // start the perf measurement\r\n const nativeATMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.NativeInteractionClientAcquireToken, request.correlationId);\r\n const reqTimestamp = TimeUtils.nowSeconds();\r\n\r\n // initialize native request\r\n const nativeRequest = await this.initializeNativeRequest(request);\r\n \r\n // check if the tokens can be retrieved from internal cache\r\n try {\r\n const result = await this.acquireTokensFromCache(this.accountId, nativeRequest);\r\n nativeATMeasurement.endMeasurement({\r\n success: true,\r\n isNativeBroker: false, // Should be true only when the result is coming directly from the broker\r\n fromCache: true\r\n });\r\n return result;\r\n } catch (e) {\r\n // continue with a native call for any and all errors\r\n this.logger.info(\"MSAL internal Cache does not contain tokens, proceed to make a native call\");\r\n }\r\n\r\n // fall back to native calls\r\n const messageBody: NativeExtensionRequestBody = {\r\n method: NativeExtensionMethod.GetToken,\r\n request: nativeRequest\r\n };\r\n\r\n const response: object = await this.nativeMessageHandler.sendMessage(messageBody);\r\n const validatedResponse: NativeResponse = this.validateNativeResponse(response);\r\n\r\n return this.handleNativeResponse(validatedResponse, nativeRequest, reqTimestamp)\r\n .then((result: AuthenticationResult) => {\r\n nativeATMeasurement.endMeasurement({\r\n success: true,\r\n isNativeBroker: true,\r\n requestId: result.requestId\r\n });\r\n return result;\r\n })\r\n .catch((error: AuthError) => {\r\n nativeATMeasurement.endMeasurement({\r\n success: false,\r\n errorCode: error.errorCode,\r\n subErrorCode: error.subError,\r\n isNativeBroker: true\r\n });\r\n throw error;\r\n });\r\n }\r\n\r\n /**\r\n * Creates silent flow request\r\n * @param request\r\n * @param cachedAccount\r\n * @returns CommonSilentFlowRequest\r\n */\r\n private createSilentCacheRequest(request: NativeTokenRequest, cachedAccount: AccountInfo): CommonSilentFlowRequest {\r\n return {\r\n authority: request.authority,\r\n correlationId: this.correlationId,\r\n scopes: ScopeSet.fromString(request.scope).asArray(),\r\n account: cachedAccount,\r\n forceRefresh: false,\r\n };\r\n }\r\n\r\n /**\r\n * Fetches the tokens from the cache if un-expired\r\n * @param nativeAccountId\r\n * @param request\r\n * @returns authenticationResult\r\n */\r\n protected async acquireTokensFromCache(nativeAccountId: string, request: NativeTokenRequest): Promise {\r\n if (!nativeAccountId) {\r\n this.logger.warning(\"NativeInteractionClient:acquireTokensFromCache - No nativeAccountId provided\");\r\n throw ClientAuthError.createNoAccountFoundError();\r\n }\r\n // fetch the account from browser cache\r\n const account = this.browserStorage.getAccountInfoFilteredBy({nativeAccountId});\r\n if (!account) {\r\n throw ClientAuthError.createNoAccountFoundError();\r\n }\r\n\r\n // leverage silent flow for cached tokens retrieval\r\n try {\r\n const silentRequest = this.createSilentCacheRequest(request, account);\r\n const result = await this.silentCacheClient.acquireToken(silentRequest);\r\n return result;\r\n } catch (e) {\r\n throw e;\r\n }\r\n }\r\n\r\n /**\r\n * Acquires a token from native platform then redirects to the redirectUri instead of returning the response\r\n * @param request\r\n */\r\n async acquireTokenRedirect(request: RedirectRequest): Promise {\r\n this.logger.trace(\"NativeInteractionClient - acquireTokenRedirect called.\");\r\n const nativeRequest = await this.initializeNativeRequest(request);\r\n\r\n const messageBody: NativeExtensionRequestBody = {\r\n method: NativeExtensionMethod.GetToken,\r\n request: nativeRequest\r\n };\r\n\r\n try {\r\n const response: object = await this.nativeMessageHandler.sendMessage(messageBody);\r\n this.validateNativeResponse(response);\r\n } catch (e) {\r\n // Only throw fatal errors here to allow application to fallback to regular redirect. Otherwise proceed and the error will be thrown in handleRedirectPromise\r\n if (e instanceof NativeAuthError && e.isFatal()) {\r\n throw e;\r\n }\r\n }\r\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.NATIVE_REQUEST, JSON.stringify(nativeRequest), true);\r\n\r\n const navigationOptions: NavigationOptions = {\r\n apiId: ApiId.acquireTokenRedirect,\r\n timeout: this.config.system.redirectNavigationTimeout,\r\n noHistory: false\r\n };\r\n const redirectUri = this.config.auth.navigateToLoginRequestUrl ? window.location.href : this.getRedirectUri(request.redirectUri);\r\n await this.navigationClient.navigateExternal(redirectUri, navigationOptions); // Need to treat this as external to ensure handleRedirectPromise is run again\r\n }\r\n\r\n /**\r\n * If the previous page called native platform for a token using redirect APIs, send the same request again and return the response\r\n */\r\n async handleRedirectPromise(): Promise {\r\n this.logger.trace(\"NativeInteractionClient - handleRedirectPromise called.\");\r\n if (!this.browserStorage.isInteractionInProgress(true)) {\r\n this.logger.info(\"handleRedirectPromise called but there is no interaction in progress, returning null.\");\r\n return null;\r\n }\r\n\r\n // remove prompt from the request to prevent WAM from prompting twice\r\n const cachedRequest = this.browserStorage.getCachedNativeRequest();\r\n if (!cachedRequest) {\r\n this.logger.verbose(\"NativeInteractionClient - handleRedirectPromise called but there is no cached request, returning null.\");\r\n return null;\r\n }\r\n\r\n const { prompt, ...request} = cachedRequest;\r\n if (prompt) {\r\n this.logger.verbose(\"NativeInteractionClient - handleRedirectPromise called and prompt was included in the original request, removing prompt from cached request to prevent second interaction with native broker window.\");\r\n }\r\n\r\n this.browserStorage.removeItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.NATIVE_REQUEST));\r\n\r\n const messageBody: NativeExtensionRequestBody = {\r\n method: NativeExtensionMethod.GetToken,\r\n request: request\r\n };\r\n\r\n const reqTimestamp = TimeUtils.nowSeconds();\r\n\r\n try {\r\n this.logger.verbose(\"NativeInteractionClient - handleRedirectPromise sending message to native broker.\");\r\n const response: object = await this.nativeMessageHandler.sendMessage(messageBody);\r\n this.validateNativeResponse(response);\r\n const result = this.handleNativeResponse(response as NativeResponse, request, reqTimestamp);\r\n this.browserStorage.setInteractionInProgress(false);\r\n return result;\r\n } catch (e) {\r\n this.browserStorage.setInteractionInProgress(false);\r\n throw e;\r\n }\r\n }\r\n\r\n /**\r\n * Logout from native platform via browser extension\r\n * @param request\r\n */\r\n logout(): Promise {\r\n this.logger.trace(\"NativeInteractionClient - logout called.\");\r\n return Promise.reject(\"Logout not implemented yet\");\r\n }\r\n\r\n /**\r\n * Transform response from native platform into AuthenticationResult object which will be returned to the end user\r\n * @param response\r\n * @param request\r\n * @param reqTimestamp\r\n */\r\n protected async handleNativeResponse(response: NativeResponse, request: NativeTokenRequest, reqTimestamp: number): Promise {\r\n this.logger.trace(\"NativeInteractionClient - handleNativeResponse called.\");\r\n\r\n if (response.account.id !== request.accountId) {\r\n // User switch in native broker prompt is not supported. All users must first sign in through web flow to ensure server state is in sync\r\n throw NativeAuthError.createUserSwitchError();\r\n }\r\n\r\n // Get the preferred_cache domain for the given authority\r\n const authority = await this.getDiscoveredAuthority(request.authority);\r\n const authorityPreferredCache = authority.getPreferredCache();\r\n\r\n // generate identifiers\r\n const idTokenObj = this.createIdTokenObj(response);\r\n const homeAccountIdentifier = this.createHomeAccountIdentifier(response, idTokenObj);\r\n const accountEntity = this.createAccountEntity(response, homeAccountIdentifier, idTokenObj, authorityPreferredCache);\r\n\r\n // generate authenticationResult\r\n const result = await this.generateAuthenticationResult(response, request, idTokenObj, accountEntity, authority.canonicalAuthority, reqTimestamp);\r\n\r\n // cache accounts and tokens in the appropriate storage\r\n this.cacheAccount(accountEntity);\r\n this.cacheNativeTokens(response, request, homeAccountIdentifier, accountEntity, idTokenObj, result.accessToken, result.tenantId, reqTimestamp);\r\n \r\n return result;\r\n }\r\n\r\n /**\r\n * Create an idToken Object (not entity)\r\n * @param response \r\n * @returns \r\n */\r\n protected createIdTokenObj(response: NativeResponse): AuthToken {\r\n return new AuthToken(response.id_token || Constants.EMPTY_STRING, this.browserCrypto);\r\n }\r\n\r\n /**\r\n * creates an homeAccountIdentifier for the account\r\n * @param response \r\n * @param idTokenObj \r\n * @returns \r\n */\r\n protected createHomeAccountIdentifier(response: NativeResponse, idTokenObj: AuthToken): string {\r\n // Save account in browser storage\r\n const homeAccountIdentifier = AccountEntity.generateHomeAccountId(response.client_info || Constants.EMPTY_STRING, AuthorityType.Default, this.logger, this.browserCrypto, idTokenObj);\r\n\r\n return homeAccountIdentifier;\r\n }\r\n\r\n /**\r\n * Creates account entity\r\n * @param response \r\n * @param homeAccountIdentifier \r\n * @param idTokenObj \r\n * @param authority \r\n * @returns \r\n */\r\n protected createAccountEntity(response: NativeResponse, homeAccountIdentifier: string, idTokenObj: AuthToken, authority: string): AccountEntity {\r\n\r\n return AccountEntity.createAccount(response.client_info, homeAccountIdentifier, idTokenObj, undefined, undefined, undefined, authority, response.account.id);\r\n }\r\n\r\n /**\r\n * Helper to generate scopes\r\n * @param response \r\n * @param request \r\n * @returns \r\n */\r\n generateScopes(response: NativeResponse, request: NativeTokenRequest): ScopeSet {\r\n return response.scope ? ScopeSet.fromString(response.scope) : ScopeSet.fromString(request.scope);\r\n }\r\n\r\n /**\r\n * If PoP token is requesred, records the PoP token if returned from the WAM, else generates one in the browser\r\n * @param request \r\n * @param response \r\n */\r\n async generatePopAccessToken(response: NativeResponse, request: NativeTokenRequest): Promise {\r\n \r\n if(request.tokenType === AuthenticationScheme.POP) {\r\n /** \r\n * This code prioritizes SHR returned from the native layer. In case of error/SHR not calculated from WAM and the AT \r\n * is still received, SHR is calculated locally\r\n */\r\n \r\n // Check if native layer returned an SHR token\r\n if (response.shr) {\r\n this.logger.trace(\"handleNativeServerResponse: SHR is enabled in native layer\");\r\n return response.shr;\r\n }\r\n\r\n // Generate SHR in msal js if WAM does not compute it when POP is enabled\r\n const popTokenGenerator: PopTokenGenerator = new PopTokenGenerator(this.browserCrypto);\r\n const shrParameters: SignedHttpRequestParameters = {\r\n resourceRequestMethod: request.resourceRequestMethod,\r\n resourceRequestUri: request.resourceRequestUri,\r\n shrClaims: request.shrClaims,\r\n shrNonce: request.shrNonce\r\n };\r\n\r\n /**\r\n * KeyID must be present in the native request from when the PoP key was generated in order for\r\n * PopTokenGenerator to query the full key for signing\r\n */\r\n if (!request.keyId) {\r\n throw ClientAuthError.createKeyIdMissingError();\r\n }\r\n return await popTokenGenerator.signPopToken(response.access_token, request.keyId, shrParameters);\r\n } else {\r\n return response.access_token;\r\n }\r\n }\r\n\r\n /**\r\n * Generates authentication result\r\n * @param response \r\n * @param request \r\n * @param idTokenObj \r\n * @param accountEntity \r\n * @param authority \r\n * @param reqTimestamp \r\n * @returns \r\n */\r\n protected async generateAuthenticationResult(response: NativeResponse, request: NativeTokenRequest, idTokenObj: AuthToken, accountEntity: AccountEntity, authority: string, reqTimestamp: number): Promise {\r\n\r\n // Add Native Broker fields to Telemetry\r\n const mats = this.addTelemetryFromNativeResponse(response);\r\n\r\n // If scopes not returned in server response, use request scopes\r\n const responseScopes = response.scope ? ScopeSet.fromString(response.scope) : ScopeSet.fromString(request.scope);\r\n\r\n const accountProperties = response.account.properties || {};\r\n const uid = accountProperties[\"UID\"] || idTokenObj.claims.oid || idTokenObj.claims.sub || Constants.EMPTY_STRING;\r\n const tid = accountProperties[\"TenantId\"] || idTokenObj.claims.tid || Constants.EMPTY_STRING;\r\n\r\n // generate PoP token as needed\r\n const responseAccessToken = await this.generatePopAccessToken(response, request);\r\n const tokenType = (request.tokenType === AuthenticationScheme.POP) ? AuthenticationScheme.POP : AuthenticationScheme.BEARER;\r\n\r\n const result: AuthenticationResult = {\r\n authority: authority,\r\n uniqueId: uid,\r\n tenantId: tid,\r\n scopes: responseScopes.asArray(),\r\n account: accountEntity.getAccountInfo(),\r\n idToken: response.id_token,\r\n idTokenClaims: idTokenObj.claims,\r\n accessToken: responseAccessToken,\r\n fromCache: mats ? this.isResponseFromCache(mats) : false,\r\n expiresOn: new Date(Number(reqTimestamp + response.expires_in) * 1000),\r\n tokenType: tokenType,\r\n correlationId: this.correlationId,\r\n state: response.state,\r\n fromNativeBroker: true\r\n };\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * cache the account entity in browser storage\r\n * @param accountEntity \r\n */\r\n cacheAccount(accountEntity: AccountEntity): void{\r\n // Store the account info and hence `nativeAccountId` in browser cache\r\n this.browserStorage.setAccount(accountEntity);\r\n\r\n // Remove any existing cached tokens for this account in browser storage\r\n this.browserStorage.removeAccountContext(accountEntity).catch((e) => {\r\n this.logger.error(`Error occurred while removing account context from browser storage. ${e}`);\r\n });\r\n }\r\n\r\n /**\r\n * Stores the access_token and id_token in inmemory storage\r\n * @param response \r\n * @param request \r\n * @param homeAccountIdentifier \r\n * @param idTokenObj \r\n * @param responseAccessToken \r\n * @param tenantId \r\n * @param reqTimestamp \r\n */\r\n cacheNativeTokens(response: NativeResponse, request: NativeTokenRequest, homeAccountIdentifier: string, accountEntity: AccountEntity, idTokenObj: AuthToken, responseAccessToken: string, tenantId: string, reqTimestamp: number): void {\r\n\r\n const cachedIdToken: IdTokenEntity | null =\r\n IdTokenEntity.createIdTokenEntity(\r\n homeAccountIdentifier,\r\n request.authority,\r\n response.id_token || Constants.EMPTY_STRING,\r\n request.clientId,\r\n idTokenObj.claims.tid || Constants.EMPTY_STRING\r\n );\r\n\r\n // cache accessToken in inmemory storage\r\n const expiresIn: number = (request.tokenType === AuthenticationScheme.POP)\r\n ? Constants.SHR_NONCE_VALIDITY\r\n : (\r\n typeof response.expires_in === \"string\"\r\n ? parseInt(response.expires_in, 10)\r\n : response.expires_in\r\n ) || 0;\r\n const tokenExpirationSeconds = reqTimestamp + expiresIn;\r\n const responseScopes = this.generateScopes(response, request);\r\n const cachedAccessToken: AccessTokenEntity | null =\r\n AccessTokenEntity.createAccessTokenEntity(\r\n homeAccountIdentifier,\r\n request.authority,\r\n responseAccessToken,\r\n request.clientId,\r\n idTokenObj\r\n ? idTokenObj.claims.tid || Constants.EMPTY_STRING\r\n : tenantId,\r\n responseScopes.printScopes(),\r\n tokenExpirationSeconds,\r\n 0,\r\n this.browserCrypto\r\n );\r\n\r\n const nativeCacheRecord = new CacheRecord(\r\n accountEntity,\r\n cachedIdToken,\r\n cachedAccessToken\r\n );\r\n\r\n this.nativeStorageManager.saveCacheRecord(nativeCacheRecord);\r\n }\r\n\r\n protected addTelemetryFromNativeResponse(response: NativeResponse): MATS | null {\r\n\r\n const mats = this.getMATSFromResponse(response);\r\n\r\n if (!mats){\r\n return null;\r\n }\r\n \r\n this.performanceClient.addStaticFields({\r\n extensionId: this.nativeMessageHandler.getExtensionId(),\r\n extensionVersion: this.nativeMessageHandler.getExtensionVersion(),\r\n matsBrokerVersion: mats.broker_version,\r\n matsAccountJoinOnStart: mats.account_join_on_start,\r\n matsAccountJoinOnEnd: mats.account_join_on_end,\r\n matsDeviceJoin: mats.device_join,\r\n matsPromptBehavior: mats.prompt_behavior,\r\n matsApiErrorCode: mats.api_error_code,\r\n matsUiVisible: mats.ui_visible,\r\n matsSilentCode: mats.silent_code,\r\n matsSilentBiSubCode: mats.silent_bi_sub_code,\r\n matsSilentMessage: mats.silent_message,\r\n matsSilentStatus: mats.silent_status,\r\n matsHttpStatus: mats.http_status,\r\n matsHttpEventCount: mats.http_event_count\r\n }, this.correlationId);\r\n\r\n return mats;\r\n }\r\n\r\n /**\r\n * Validates native platform response before processing\r\n * @param response\r\n */\r\n private validateNativeResponse(response: object): NativeResponse {\r\n if (\r\n response.hasOwnProperty(\"access_token\") &&\r\n response.hasOwnProperty(\"id_token\") &&\r\n response.hasOwnProperty(\"client_info\") &&\r\n response.hasOwnProperty(\"account\") &&\r\n response.hasOwnProperty(\"scope\") &&\r\n response.hasOwnProperty(\"expires_in\")\r\n ) {\r\n return response as NativeResponse;\r\n } else {\r\n throw NativeAuthError.createUnexpectedError(\"Response missing expected properties.\");\r\n }\r\n }\r\n\r\n /**\r\n * Gets MATS telemetry from native response\r\n * @param response\r\n * @returns\r\n */\r\n private getMATSFromResponse(response: NativeResponse): MATS|null {\r\n if (response.properties.MATS) {\r\n try {\r\n return JSON.parse(response.properties.MATS);\r\n } catch (e) {\r\n this.logger.error(\"NativeInteractionClient - Error parsing MATS telemetry, returning null instead\");\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns whether or not response came from native cache\r\n * @param response\r\n * @returns\r\n */\r\n protected isResponseFromCache(mats: MATS): boolean {\r\n if (typeof mats.is_cached === \"undefined\") {\r\n this.logger.verbose(\"NativeInteractionClient - MATS telemetry does not contain field indicating if response was served from cache. Returning false.\");\r\n return false;\r\n }\r\n\r\n return !!mats.is_cached;\r\n }\r\n\r\n /**\r\n * Translates developer provided request object into NativeRequest object\r\n * @param request\r\n */\r\n protected async initializeNativeRequest(request: PopupRequest|SsoSilentRequest): Promise {\r\n this.logger.trace(\"NativeInteractionClient - initializeNativeRequest called\");\r\n\r\n const authority = request.authority || this.config.auth.authority;\r\n\r\n if (request.account) {\r\n await this.validateRequestAuthority(authority, request.account);\r\n }\r\n\r\n const canonicalAuthority = new UrlString(authority);\r\n canonicalAuthority.validateAsUri();\r\n\r\n // scopes are expected to be received by the native broker as \"scope\" and will be added to the request below. Other properties that should be dropped from the request to the native broker can be included in the object destructuring here.\r\n const { scopes, ...remainingProperties } = request; \r\n const scopeSet = new ScopeSet(scopes || []);\r\n scopeSet.appendScopes(OIDC_DEFAULT_SCOPES);\r\n\r\n const getPrompt = () => {\r\n // If request is silent, prompt is always none\r\n switch (this.apiId) {\r\n case ApiId.ssoSilent:\r\n case ApiId.acquireTokenSilent_silentFlow:\r\n this.logger.trace(\"initializeNativeRequest: silent request sets prompt to none\");\r\n return PromptValue.NONE;\r\n default:\r\n break;\r\n }\r\n\r\n // Prompt not provided, request may proceed and native broker decides if it needs to prompt\r\n if (!request.prompt) {\r\n this.logger.trace(\"initializeNativeRequest: prompt was not provided\");\r\n return undefined;\r\n }\r\n\r\n // If request is interactive, check if prompt provided is allowed to go directly to native broker\r\n switch (request.prompt) {\r\n case PromptValue.NONE:\r\n case PromptValue.CONSENT:\r\n case PromptValue.LOGIN:\r\n this.logger.trace(\"initializeNativeRequest: prompt is compatible with native flow\");\r\n return request.prompt;\r\n default:\r\n this.logger.trace(`initializeNativeRequest: prompt = ${request.prompt} is not compatible with native flow`);\r\n throw BrowserAuthError.createNativePromptParameterNotSupportedError();\r\n }\r\n };\r\n \r\n const validatedRequest: NativeTokenRequest = {\r\n ...remainingProperties,\r\n accountId: this.accountId,\r\n clientId: this.config.auth.clientId,\r\n authority: canonicalAuthority.urlString,\r\n scope: scopeSet.printScopes(),\r\n redirectUri: this.getRedirectUri(request.redirectUri),\r\n prompt: getPrompt(),\r\n correlationId: this.correlationId,\r\n tokenType: request.authenticationScheme,\r\n windowTitleSubstring: document.title,\r\n extraParameters: {\r\n ...request.extraQueryParameters,\r\n ...request.tokenQueryParameters,\r\n telemetry: NativeConstants.MATS_TELEMETRY\r\n },\r\n extendedExpiryToken: false // Make this configurable?\r\n };\r\n\r\n if (request.authenticationScheme === AuthenticationScheme.POP) {\r\n\r\n // add POP request type\r\n const shrParameters: SignedHttpRequestParameters = {\r\n resourceRequestUri: request.resourceRequestUri,\r\n resourceRequestMethod: request.resourceRequestMethod,\r\n shrClaims: request.shrClaims,\r\n shrNonce: request.shrNonce\r\n };\r\n\r\n const popTokenGenerator = new PopTokenGenerator(this.browserCrypto);\r\n const reqCnfData = await popTokenGenerator.generateCnf(shrParameters);\r\n\r\n // to reduce the URL length, it is recommended to send the short form of the req_cnf \r\n validatedRequest.reqCnf = reqCnfData.reqCnfString;\r\n validatedRequest.keyId = reqCnfData.kid;\r\n }\r\n\r\n return validatedRequest;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { NativeConstants, NativeExtensionMethod } from \"../../utils/BrowserConstants\";\r\nimport {\r\n Logger,\r\n AuthError,\r\n AuthenticationScheme,\r\n InProgressPerformanceEvent,\r\n PerformanceEvents,\r\n IPerformanceClient\r\n} from \"@azure/msal-common\";\r\nimport { NativeExtensionRequest, NativeExtensionRequestBody } from \"./NativeRequest\";\r\nimport { NativeAuthError } from \"../../error/NativeAuthError\";\r\nimport { BrowserAuthError } from \"../../error/BrowserAuthError\";\r\nimport { BrowserConfiguration } from \"../../config/Configuration\";\r\n\r\ntype ResponseResolvers = {\r\n resolve: (value:T|PromiseLike) => void;\r\n reject: (value:AuthError|Error|PromiseLike|PromiseLike) => void;\r\n};\r\n\r\nexport class NativeMessageHandler {\r\n private extensionId: string | undefined;\r\n private extensionVersion: string | undefined;\r\n private logger: Logger;\r\n private readonly handshakeTimeoutMs: number;\r\n private responseId: number;\r\n private timeoutId: number | undefined;\r\n private resolvers: Map>;\r\n private handshakeResolvers: Map>;\r\n private messageChannel: MessageChannel;\r\n private readonly windowListener: (event: MessageEvent) => void;\r\n private readonly performanceClient: IPerformanceClient;\r\n private readonly handshakeEvent: InProgressPerformanceEvent;\r\n\r\n constructor(logger: Logger, handshakeTimeoutMs: number, performanceClient: IPerformanceClient, extensionId?: string) {\r\n this.logger = logger;\r\n this.handshakeTimeoutMs = handshakeTimeoutMs;\r\n this.extensionId = extensionId;\r\n this.resolvers = new Map(); // Used for non-handshake messages\r\n this.handshakeResolvers = new Map(); // Used for handshake messages\r\n this.responseId = 0;\r\n this.messageChannel = new MessageChannel();\r\n this.windowListener = this.onWindowMessage.bind(this); // Window event callback doesn't have access to 'this' unless it's bound\r\n this.performanceClient = performanceClient;\r\n this.handshakeEvent = performanceClient.startMeasurement(PerformanceEvents.NativeMessageHandlerHandshake);\r\n }\r\n\r\n /**\r\n * Sends a given message to the extension and resolves with the extension response\r\n * @param body\r\n */\r\n async sendMessage(body: NativeExtensionRequestBody): Promise {\r\n this.logger.trace(\"NativeMessageHandler - sendMessage called.\");\r\n const req: NativeExtensionRequest = {\r\n channel: NativeConstants.CHANNEL_ID,\r\n extensionId: this.extensionId,\r\n responseId: this.responseId++,\r\n body: body\r\n };\r\n\r\n this.logger.trace(\"NativeMessageHandler - Sending request to browser extension\");\r\n this.logger.tracePii(`NativeMessageHandler - Sending request to browser extension: ${JSON.stringify(req)}`);\r\n this.messageChannel.port1.postMessage(req);\r\n\r\n return new Promise((resolve, reject) => {\r\n this.resolvers.set(req.responseId, {resolve, reject});\r\n });\r\n }\r\n\r\n /**\r\n * Returns an instance of the MessageHandler that has successfully established a connection with an extension\r\n * @param {Logger} logger\r\n * @param {number} handshakeTimeoutMs\r\n * @param {IPerformanceClient} performanceClient\r\n */\r\n static async createProvider(logger: Logger, handshakeTimeoutMs: number, performanceClient: IPerformanceClient): Promise {\r\n logger.trace(\"NativeMessageHandler - createProvider called.\");\r\n try {\r\n const preferredProvider = new NativeMessageHandler(logger, handshakeTimeoutMs, performanceClient, NativeConstants.PREFERRED_EXTENSION_ID);\r\n await preferredProvider.sendHandshakeRequest();\r\n return preferredProvider;\r\n } catch (e) {\r\n // If preferred extension fails for whatever reason, fallback to using any installed extension\r\n const backupProvider = new NativeMessageHandler(logger, handshakeTimeoutMs, performanceClient);\r\n await backupProvider.sendHandshakeRequest();\r\n return backupProvider;\r\n }\r\n }\r\n\r\n /**\r\n * Send handshake request helper.\r\n */\r\n private async sendHandshakeRequest(): Promise {\r\n this.logger.trace(\"NativeMessageHandler - sendHandshakeRequest called.\");\r\n // Register this event listener before sending handshake\r\n window.addEventListener(\"message\", this.windowListener, false); // false is important, because content script message processing should work first\r\n\r\n const req: NativeExtensionRequest = {\r\n channel: NativeConstants.CHANNEL_ID,\r\n extensionId: this.extensionId,\r\n responseId: this.responseId++,\r\n body: {\r\n method: NativeExtensionMethod.HandshakeRequest\r\n }\r\n };\r\n this.handshakeEvent.addStaticFields({\r\n extensionId: this.extensionId,\r\n extensionHandshakeTimeoutMs: this.handshakeTimeoutMs\r\n });\r\n\r\n this.messageChannel.port1.onmessage = (event) => {\r\n this.onChannelMessage(event);\r\n };\r\n\r\n window.postMessage(req, window.origin, [this.messageChannel.port2]);\r\n\r\n return new Promise((resolve, reject) => {\r\n this.handshakeResolvers.set(req.responseId, {resolve, reject});\r\n this.timeoutId = window.setTimeout(() => {\r\n /*\r\n * Throw an error if neither HandshakeResponse nor original Handshake request are received in a reasonable timeframe.\r\n * This typically suggests an event handler stopped propagation of the Handshake request but did not respond to it on the MessageChannel port\r\n */\r\n window.removeEventListener(\"message\", this.windowListener, false);\r\n this.messageChannel.port1.close();\r\n this.messageChannel.port2.close();\r\n this.handshakeEvent.endMeasurement({extensionHandshakeTimedOut: true, success: false});\r\n reject(BrowserAuthError.createNativeHandshakeTimeoutError());\r\n this.handshakeResolvers.delete(req.responseId);\r\n }, this.handshakeTimeoutMs); // Use a reasonable timeout in milliseconds here\r\n });\r\n }\r\n\r\n /**\r\n * Invoked when a message is posted to the window. If a handshake request is received it means the extension is not installed.\r\n * @param event\r\n */\r\n private onWindowMessage(event: MessageEvent): void {\r\n this.logger.trace(\"NativeMessageHandler - onWindowMessage called\");\r\n // We only accept messages from ourselves\r\n if (event.source !== window) {\r\n return;\r\n }\r\n\r\n const request = event.data;\r\n\r\n if (!request.channel || request.channel !== NativeConstants.CHANNEL_ID) {\r\n return;\r\n }\r\n\r\n if (request.extensionId && request.extensionId !== this.extensionId) {\r\n return;\r\n }\r\n\r\n if (request.body.method === NativeExtensionMethod.HandshakeRequest) {\r\n // If we receive this message back it means no extension intercepted the request, meaning no extension supporting handshake protocol is installed\r\n this.logger.verbose(request.extensionId ? `Extension with id: ${request.extensionId} not installed` : \"No extension installed\");\r\n clearTimeout(this.timeoutId);\r\n this.messageChannel.port1.close();\r\n this.messageChannel.port2.close();\r\n window.removeEventListener(\"message\", this.windowListener, false);\r\n const handshakeResolver = this.handshakeResolvers.get(request.responseId);\r\n if (handshakeResolver) {\r\n this.handshakeEvent.endMeasurement({success: false, extensionInstalled: false});\r\n handshakeResolver.reject(BrowserAuthError.createNativeExtensionNotInstalledError());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Invoked when a message is received from the extension on the MessageChannel port\r\n * @param event\r\n */\r\n private onChannelMessage(event: MessageEvent): void {\r\n this.logger.trace(\"NativeMessageHandler - onChannelMessage called.\");\r\n const request = event.data;\r\n\r\n const resolver = this.resolvers.get(request.responseId);\r\n const handshakeResolver = this.handshakeResolvers.get(request.responseId);\r\n\r\n try {\r\n const method = request.body.method;\r\n\r\n if (method === NativeExtensionMethod.Response) {\r\n if (!resolver) {\r\n return;\r\n }\r\n const response = request.body.response;\r\n this.logger.trace(\"NativeMessageHandler - Received response from browser extension\");\r\n this.logger.tracePii(`NativeMessageHandler - Received response from browser extension: ${JSON.stringify(response)}`);\r\n if (response.status !== \"Success\") {\r\n resolver.reject(NativeAuthError.createError(response.code, response.description, response.ext));\r\n } else if (response.result) {\r\n if (response.result[\"code\"] && response.result[\"description\"]) {\r\n resolver.reject(NativeAuthError.createError(response.result[\"code\"], response.result[\"description\"], response.result[\"ext\"]));\r\n } else {\r\n resolver.resolve(response.result);\r\n }\r\n } else {\r\n throw AuthError.createUnexpectedError(\"Event does not contain result.\");\r\n }\r\n this.resolvers.delete(request.responseId);\r\n } else if (method === NativeExtensionMethod.HandshakeResponse) {\r\n if (!handshakeResolver) {\r\n return;\r\n }\r\n clearTimeout(this.timeoutId); // Clear setTimeout\r\n window.removeEventListener(\"message\", this.windowListener, false); // Remove 'No extension' listener\r\n this.extensionId = request.extensionId;\r\n this.extensionVersion = request.body.version;\r\n this.logger.verbose(`NativeMessageHandler - Received HandshakeResponse from extension: ${this.extensionId}`);\r\n this.handshakeEvent.endMeasurement({extensionInstalled: true, success: true});\r\n\r\n handshakeResolver.resolve();\r\n this.handshakeResolvers.delete(request.responseId);\r\n }\r\n // Do nothing if method is not Response or HandshakeResponse\r\n } catch (err) {\r\n this.logger.error(\"Error parsing response from WAM Extension\");\r\n this.logger.errorPii(`Error parsing response from WAM Extension: ${err.toString()}`);\r\n this.logger.errorPii(`Unable to parse ${event}`);\r\n\r\n if (resolver) {\r\n resolver.reject(err as AuthError);\r\n } else if (handshakeResolver) {\r\n handshakeResolver.reject(err as AuthError);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns the Id for the browser extension this handler is communicating with\r\n * @returns\r\n */\r\n getExtensionId(): string | undefined {\r\n return this.extensionId;\r\n }\r\n\r\n /**\r\n * Returns the version for the browser extension this handler is communicating with\r\n * @returns\r\n */\r\n getExtensionVersion(): string | undefined {\r\n return this.extensionVersion;\r\n }\r\n\r\n /**\r\n * Returns boolean indicating whether or not the request should attempt to use native broker\r\n * @param logger\r\n * @param config\r\n * @param nativeExtensionProvider\r\n * @param authenticationScheme\r\n */\r\n static isNativeAvailable(config: BrowserConfiguration, logger: Logger, nativeExtensionProvider?: NativeMessageHandler, authenticationScheme?: AuthenticationScheme): boolean {\r\n logger.trace(\"isNativeAvailable called\");\r\n if (!config.system.allowNativeBroker) {\r\n logger.trace(\"isNativeAvailable: allowNativeBroker is not enabled, returning false\");\r\n // Developer disabled WAM\r\n return false;\r\n }\r\n\r\n if (!nativeExtensionProvider) {\r\n logger.trace(\"isNativeAvailable: WAM extension provider is not initialized, returning false\");\r\n // Extension is not available\r\n return false;\r\n }\r\n\r\n if (authenticationScheme) {\r\n switch(authenticationScheme) {\r\n case AuthenticationScheme.BEARER:\r\n case AuthenticationScheme.POP:\r\n logger.trace(\"isNativeAvailable: authenticationScheme is supported, returning true\");\r\n return true;\r\n default:\r\n logger.trace(\"isNativeAvailable: authenticationScheme is not supported, returning false\");\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthorizationCodePayload, StringUtils, CommonAuthorizationCodeRequest, AuthenticationResult, AuthorizationCodeClient, AuthorityFactory, Authority, INetworkModule, ClientAuthError, CcsCredential, Logger, ServerError, IPerformanceClient, PerformanceEvents } from \"@azure/msal-common\";\r\n\r\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\r\nimport { BrowserAuthError, BrowserAuthErrorMessage } from \"../error/BrowserAuthError\";\r\nimport { TemporaryCacheKeys } from \"../utils/BrowserConstants\";\r\n\r\nexport type InteractionParams = {};\r\n\r\n/**\r\n * Abstract class which defines operations for a browser interaction handling class.\r\n */\r\nexport class InteractionHandler {\r\n\r\n protected authModule: AuthorizationCodeClient;\r\n protected browserStorage: BrowserCacheManager;\r\n protected authCodeRequest: CommonAuthorizationCodeRequest;\r\n protected logger: Logger;\r\n protected performanceClient: IPerformanceClient;\r\n\r\n constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, performanceClient: IPerformanceClient) {\r\n this.authModule = authCodeModule;\r\n this.browserStorage = storageImpl;\r\n this.authCodeRequest = authCodeRequest;\r\n this.logger = logger;\r\n this.performanceClient = performanceClient;\r\n }\r\n\r\n /**\r\n * Function to handle response parameters from hash.\r\n * @param locationHash\r\n */\r\n async handleCodeResponseFromHash(locationHash: string, state: string, authority: Authority, networkModule: INetworkModule): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromHash, this.authCodeRequest.correlationId);\r\n this.logger.verbose(\"InteractionHandler.handleCodeResponse called\");\r\n // Check that location hash isn't empty.\r\n if (StringUtils.isEmpty(locationHash)) {\r\n throw BrowserAuthError.createEmptyHashError(locationHash);\r\n }\r\n\r\n // Handle code response.\r\n const stateKey = this.browserStorage.generateStateKey(state);\r\n const requestState = this.browserStorage.getTemporaryCache(stateKey);\r\n if (!requestState) {\r\n throw ClientAuthError.createStateNotFoundError(\"Cached State\");\r\n }\r\n\r\n let authCodeResponse;\r\n try {\r\n authCodeResponse = this.authModule.handleFragmentResponse(locationHash, requestState);\r\n } catch (e) {\r\n if (e instanceof ServerError && e.subError === BrowserAuthErrorMessage.userCancelledError.code) {\r\n // Translate server error caused by user closing native prompt to corresponding first class MSAL error\r\n throw BrowserAuthError.createUserCancelledError();\r\n } else {\r\n throw e;\r\n }\r\n }\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.HandleCodeResponseFromServer, this.authCodeRequest.correlationId);\r\n return this.handleCodeResponseFromServer(authCodeResponse, state, authority, networkModule);\r\n }\r\n\r\n /**\r\n * Process auth code response from AAD\r\n * @param authCodeResponse \r\n * @param state \r\n * @param authority \r\n * @param networkModule \r\n * @returns \r\n */\r\n async handleCodeResponseFromServer(authCodeResponse: AuthorizationCodePayload, state: string, authority: Authority, networkModule: INetworkModule, validateNonce: boolean = true): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromServer, this.authCodeRequest.correlationId);\r\n this.logger.trace(\"InteractionHandler.handleCodeResponseFromServer called\");\r\n\r\n // Handle code response.\r\n const stateKey = this.browserStorage.generateStateKey(state);\r\n const requestState = this.browserStorage.getTemporaryCache(stateKey);\r\n if (!requestState) {\r\n throw ClientAuthError.createStateNotFoundError(\"Cached State\");\r\n }\r\n\r\n // Get cached items\r\n const nonceKey = this.browserStorage.generateNonceKey(requestState);\r\n const cachedNonce = this.browserStorage.getTemporaryCache(nonceKey);\r\n\r\n // Assign code to request\r\n this.authCodeRequest.code = authCodeResponse.code;\r\n\r\n // Check for new cloud instance\r\n if (authCodeResponse.cloud_instance_host_name) {\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.UpdateTokenEndpointAuthority, this.authCodeRequest.correlationId);\r\n await this.updateTokenEndpointAuthority(authCodeResponse.cloud_instance_host_name, authority, networkModule);\r\n }\r\n\r\n // Nonce validation not needed when redirect not involved (e.g. hybrid spa, renewing token via rt)\r\n if (validateNonce) {\r\n authCodeResponse.nonce = cachedNonce || undefined;\r\n }\r\n\r\n authCodeResponse.state = requestState;\r\n\r\n // Add CCS parameters if available\r\n if (authCodeResponse.client_info) {\r\n this.authCodeRequest.clientInfo = authCodeResponse.client_info;\r\n } else {\r\n const cachedCcsCred = this.checkCcsCredentials();\r\n if (cachedCcsCred) {\r\n this.authCodeRequest.ccsCredential = cachedCcsCred;\r\n }\r\n }\r\n\r\n // Acquire token with retrieved code.\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.AuthClientAcquireToken, this.authCodeRequest.correlationId);\r\n const tokenResponse = await this.authModule.acquireToken(this.authCodeRequest, authCodeResponse);\r\n this.browserStorage.cleanRequestByState(state);\r\n return tokenResponse;\r\n }\r\n\r\n /**\r\n * Updates authority based on cloudInstanceHostname\r\n * @param cloudInstanceHostname \r\n * @param authority \r\n * @param networkModule \r\n */\r\n protected async updateTokenEndpointAuthority(cloudInstanceHostname: string, authority: Authority, networkModule: INetworkModule): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.UpdateTokenEndpointAuthority, this.authCodeRequest.correlationId);\r\n const cloudInstanceAuthorityUri = `https://${cloudInstanceHostname}/${authority.tenant}/`;\r\n const cloudInstanceAuthority = await AuthorityFactory.createDiscoveredInstance(cloudInstanceAuthorityUri, networkModule, this.browserStorage, authority.options, this.logger, this.performanceClient, this.authCodeRequest.correlationId);\r\n this.authModule.updateAuthority(cloudInstanceAuthority);\r\n }\r\n\r\n /**\r\n * Looks up ccs creds in the cache\r\n */\r\n protected checkCcsCredentials(): CcsCredential | null {\r\n // Look up ccs credential in temp cache\r\n const cachedCcsCred = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, true);\r\n if (cachedCcsCred) {\r\n try {\r\n return JSON.parse(cachedCcsCred) as CcsCredential;\r\n } catch (e) {\r\n this.authModule.logger.error(\"Cache credential could not be parsed\");\r\n this.authModule.logger.errorPii(`Cache credential could not be parsed: ${cachedCcsCred}`);\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthenticationResult, CommonAuthorizationCodeRequest, AuthorizationCodeClient, ThrottlingUtils, CommonEndSessionRequest, UrlString, AuthError, OIDC_DEFAULT_SCOPES, Constants, ProtocolUtils, ServerAuthorizationCodeResponse, PerformanceEvents, StringUtils, IPerformanceClient, Logger, ICrypto } from \"@azure/msal-common\";\r\nimport { StandardInteractionClient } from \"./StandardInteractionClient\";\r\nimport { EventType } from \"../event/EventType\";\r\nimport { InteractionType, ApiId, BrowserConstants } from \"../utils/BrowserConstants\";\r\nimport { EndSessionPopupRequest } from \"../request/EndSessionPopupRequest\";\r\nimport { NavigationOptions } from \"../navigation/NavigationOptions\";\r\nimport { BrowserUtils } from \"../utils/BrowserUtils\";\r\nimport { PopupRequest } from \"../request/PopupRequest\";\r\nimport { NativeInteractionClient } from \"./NativeInteractionClient\";\r\nimport { NativeMessageHandler } from \"../broker/nativeBroker/NativeMessageHandler\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { INavigationClient } from \"../navigation/INavigationClient\";\r\nimport { EventHandler } from \"../event/EventHandler\";\r\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\r\nimport { BrowserConfiguration } from \"../config/Configuration\";\r\nimport { InteractionHandler, InteractionParams } from \"../interaction_handler/InteractionHandler\";\r\nimport { PopupWindowAttributes } from \"../request/PopupWindowAttributes\";\r\n\r\nexport type PopupParams = InteractionParams & {\r\n popup?: Window|null;\r\n popupName: string;\r\n popupWindowAttributes: PopupWindowAttributes\r\n};\r\n\r\nexport class PopupClient extends StandardInteractionClient {\r\n private currentWindow: Window | undefined;\r\n protected nativeStorage: BrowserCacheManager;\r\n\r\n constructor(config: BrowserConfiguration, storageImpl: BrowserCacheManager, browserCrypto: ICrypto, logger: Logger, eventHandler: EventHandler, navigationClient: INavigationClient, performanceClient: IPerformanceClient, nativeStorageImpl: BrowserCacheManager, nativeMessageHandler?: NativeMessageHandler, correlationId?: string) {\r\n super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeMessageHandler, correlationId);\r\n // Properly sets this reference for the unload event.\r\n this.unloadWindow = this.unloadWindow.bind(this);\r\n this.nativeStorage = nativeStorageImpl;\r\n }\r\n\r\n /**\r\n * Acquires tokens by opening a popup window to the /authorize endpoint of the authority\r\n * @param request\r\n */\r\n acquireToken(request: PopupRequest): Promise {\r\n try {\r\n const popupName = this.generatePopupName(request.scopes || OIDC_DEFAULT_SCOPES, request.authority || this.config.auth.authority);\r\n const popupWindowAttributes = request.popupWindowAttributes || {};\r\n\r\n // asyncPopups flag is true. Acquires token without first opening popup. Popup will be opened later asynchronously.\r\n if (this.config.system.asyncPopups) {\r\n this.logger.verbose(\"asyncPopups set to true, acquiring token\");\r\n // Passes on popup position and dimensions if in request\r\n return this.acquireTokenPopupAsync(request, popupName, popupWindowAttributes);\r\n } else {\r\n // asyncPopups flag is set to false. Opens popup before acquiring token.\r\n this.logger.verbose(\"asyncPopup set to false, opening popup before acquiring token\");\r\n const popup = this.openSizedPopup(\"about:blank\", popupName, popupWindowAttributes);\r\n return this.acquireTokenPopupAsync(request, popupName, popupWindowAttributes, popup);\r\n }\r\n } catch (e) {\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n /**\r\n * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server\r\n * @param logoutRequest\r\n */\r\n logout(logoutRequest?: EndSessionPopupRequest): Promise {\r\n try {\r\n this.logger.verbose(\"logoutPopup called\");\r\n const validLogoutRequest = this.initializeLogoutRequest(logoutRequest);\r\n\r\n const popupName = this.generateLogoutPopupName(validLogoutRequest);\r\n const authority = logoutRequest && logoutRequest.authority;\r\n const mainWindowRedirectUri = logoutRequest && logoutRequest.mainWindowRedirectUri;\r\n const popupWindowAttributes = logoutRequest?.popupWindowAttributes || {};\r\n\r\n // asyncPopups flag is true. Acquires token without first opening popup. Popup will be opened later asynchronously.\r\n if (this.config.system.asyncPopups) {\r\n this.logger.verbose(\"asyncPopups set to true\");\r\n // Passes on popup position and dimensions if in request\r\n return this.logoutPopupAsync(validLogoutRequest, popupName, popupWindowAttributes, authority, undefined, mainWindowRedirectUri);\r\n } else {\r\n // asyncPopups flag is set to false. Opens popup before logging out.\r\n this.logger.verbose(\"asyncPopup set to false, opening popup\");\r\n const popup = this.openSizedPopup(\"about:blank\", popupName, popupWindowAttributes);\r\n return this.logoutPopupAsync(validLogoutRequest, popupName, popupWindowAttributes, authority, popup, mainWindowRedirectUri);\r\n }\r\n } catch (e) {\r\n // Since this function is synchronous we need to reject\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n /**\r\n * Helper which obtains an access_token for your API via opening a popup window in the user's browser\r\n * @param validRequest\r\n * @param popupName\r\n * @param popup\r\n * @param popupWindowAttributes\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n protected async acquireTokenPopupAsync(request: PopupRequest, popupName: string, popupWindowAttributes: PopupWindowAttributes, popup?: Window|null): Promise {\r\n this.logger.verbose(\"acquireTokenPopupAsync called\");\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenPopup);\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, request.correlationId);\r\n const validRequest = await this.initializeAuthorizationRequest(request, InteractionType.Popup);\r\n this.browserStorage.updateCacheEntries(validRequest.state, validRequest.nonce, validRequest.authority, validRequest.loginHint || Constants.EMPTY_STRING, validRequest.account || null);\r\n\r\n try {\r\n // Create auth code request and generate PKCE params\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientInitializeAuthorizationCodeRequest, request.correlationId);\r\n const authCodeRequest: CommonAuthorizationCodeRequest = await this.initializeAuthorizationCodeRequest(validRequest);\r\n\r\n // Initialize the client\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, request.correlationId);\r\n const authClient: AuthorizationCodeClient = await this.createAuthCodeClient(serverTelemetryManager, validRequest.authority, validRequest.azureCloudOptions);\r\n this.logger.verbose(\"Auth code client created\");\r\n\r\n const isNativeBroker = NativeMessageHandler.isNativeAvailable(this.config, this.logger, this.nativeMessageHandler, request.authenticationScheme);\r\n // Start measurement for server calls with native brokering enabled\r\n let fetchNativeAccountIdMeasurement;\r\n if (isNativeBroker) {\r\n fetchNativeAccountIdMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.FetchAccountIdWithNativeBroker, request.correlationId);\r\n }\r\n\r\n // Create acquire token url.\r\n const navigateUrl = await authClient.getAuthCodeUrl({\r\n ...validRequest,\r\n nativeBroker: isNativeBroker\r\n });\r\n\r\n // Create popup interaction handler.\r\n const interactionHandler = new InteractionHandler(authClient, this.browserStorage, authCodeRequest, this.logger, this.performanceClient);\r\n\r\n // Show the UI once the url has been created. Get the window handle for the popup.\r\n const popupParameters: PopupParams = {\r\n popup,\r\n popupName,\r\n popupWindowAttributes\r\n };\r\n const popupWindow: Window = this.initiateAuthRequest(navigateUrl, popupParameters);\r\n this.eventHandler.emitEvent(EventType.POPUP_OPENED, InteractionType.Popup, {popupWindow}, null);\r\n\r\n // Monitor the window for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\r\n const hash = await this.monitorPopupForHash(popupWindow);\r\n // Deserialize hash fragment response parameters.\r\n const serverParams: ServerAuthorizationCodeResponse = UrlString.getDeserializedHash(hash);\r\n const state = this.validateAndExtractStateFromHash(serverParams, InteractionType.Popup, validRequest.correlationId);\r\n // Remove throttle if it exists\r\n ThrottlingUtils.removeThrottle(this.browserStorage, this.config.auth.clientId, authCodeRequest);\r\n\r\n if (serverParams.accountId) {\r\n this.logger.verbose(\"Account id found in hash, calling WAM for token\");\r\n // end measurement for server call with native brokering enabled\r\n if (fetchNativeAccountIdMeasurement) {\r\n fetchNativeAccountIdMeasurement.endMeasurement({\r\n success: true,\r\n isNativeBroker: true\r\n });\r\n }\r\n\r\n if (!this.nativeMessageHandler) {\r\n throw BrowserAuthError.createNativeConnectionNotEstablishedError();\r\n }\r\n const nativeInteractionClient = new NativeInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.acquireTokenPopup, this.performanceClient, this.nativeMessageHandler, serverParams.accountId, this.nativeStorage, validRequest.correlationId);\r\n const { userRequestState } = ProtocolUtils.parseRequestState(this.browserCrypto, state);\r\n return nativeInteractionClient.acquireToken({\r\n ...validRequest,\r\n state: userRequestState,\r\n prompt: undefined // Server should handle the prompt, ideally native broker can do this part silently\r\n }).finally(() => {\r\n this.browserStorage.cleanRequestByState(state);\r\n });\r\n }\r\n\r\n // Handle response from hash string.\r\n const result = await interactionHandler.handleCodeResponseFromHash(hash, state, authClient.authority, this.networkClient);\r\n\r\n return result;\r\n } catch (e) {\r\n if (popup) {\r\n // Close the synchronous popup if an error is thrown before the window unload event is registered\r\n popup.close();\r\n }\r\n\r\n if (e instanceof AuthError) {\r\n (e as AuthError).setCorrelationId(this.correlationId);\r\n }\r\n\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n this.browserStorage.cleanRequestByState(validRequest.state);\r\n throw e;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param validRequest\r\n * @param popupName\r\n * @param requestAuthority\r\n * @param popup\r\n * @param mainWindowRedirectUri\r\n * @param popupWindowAttributes\r\n */\r\n protected async logoutPopupAsync(validRequest: CommonEndSessionRequest, popupName: string, popupWindowAttributes: PopupWindowAttributes, requestAuthority?: string, popup?: Window|null, mainWindowRedirectUri?: string): Promise {\r\n this.logger.verbose(\"logoutPopupAsync called\");\r\n this.eventHandler.emitEvent(EventType.LOGOUT_START, InteractionType.Popup, validRequest);\r\n\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.logoutPopup);\r\n\r\n try {\r\n // Clear cache on logout\r\n await this.clearCacheOnLogout(validRequest.account);\r\n\r\n // Initialize the client\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, validRequest.correlationId);\r\n const authClient = await this.createAuthCodeClient(serverTelemetryManager, requestAuthority);\r\n this.logger.verbose(\"Auth code client created\");\r\n\r\n // Create logout string and navigate user window to logout.\r\n const logoutUri: string = authClient.getLogoutUri(validRequest);\r\n\r\n this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Popup, validRequest);\r\n\r\n // Open the popup window to requestUrl.\r\n const popupWindow = this.openPopup(logoutUri, {popupName, popupWindowAttributes, popup});\r\n this.eventHandler.emitEvent(EventType.POPUP_OPENED, InteractionType.Popup, {popupWindow}, null);\r\n\r\n await this.waitForLogoutPopup(popupWindow);\r\n\r\n if (mainWindowRedirectUri) {\r\n const navigationOptions: NavigationOptions = {\r\n apiId: ApiId.logoutPopup,\r\n timeout: this.config.system.redirectNavigationTimeout,\r\n noHistory: false\r\n };\r\n const absoluteUrl = UrlString.getAbsoluteUrl(mainWindowRedirectUri, BrowserUtils.getCurrentUri());\r\n\r\n this.logger.verbose(\"Redirecting main window to url specified in the request\");\r\n this.logger.verbosePii(`Redirecting main window to: ${absoluteUrl}`);\r\n this.navigationClient.navigateInternal(absoluteUrl, navigationOptions);\r\n } else {\r\n this.logger.verbose(\"No main window navigation requested\");\r\n }\r\n } catch (e) {\r\n if (popup) {\r\n // Close the synchronous popup if an error is thrown before the window unload event is registered\r\n popup.close();\r\n }\r\n\r\n if (e instanceof AuthError) {\r\n (e as AuthError).setCorrelationId(this.correlationId);\r\n }\r\n\r\n this.browserStorage.setInteractionInProgress(false);\r\n this.eventHandler.emitEvent(EventType.LOGOUT_FAILURE, InteractionType.Popup, null, e);\r\n this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Popup);\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n throw e;\r\n }\r\n\r\n this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Popup);\r\n }\r\n\r\n /**\r\n * Opens a popup window with given request Url.\r\n * @param requestUrl\r\n */\r\n initiateAuthRequest(requestUrl: string, params: PopupParams): Window {\r\n // Check that request url is not empty.\r\n if (!StringUtils.isEmpty(requestUrl)) {\r\n this.logger.infoPii(`Navigate to: ${requestUrl}`);\r\n // Open the popup window to requestUrl.\r\n return this.openPopup(requestUrl, params);\r\n } else {\r\n // Throw error if request URL is empty.\r\n this.logger.error(\"Navigate url is empty\");\r\n throw BrowserAuthError.createEmptyNavigationUriError();\r\n }\r\n }\r\n\r\n /**\r\n * Monitors a window until it loads a url with the same origin.\r\n * @param popupWindow - window that is being monitored\r\n * @param timeout - timeout for processing hash once popup is redirected back to application\r\n */\r\n monitorPopupForHash(popupWindow: Window): Promise {\r\n return new Promise((resolve, reject) => {\r\n /*\r\n * Polling for popups needs to be tick-based,\r\n * since a non-trivial amount of time can be spent on interaction (which should not count against the timeout).\r\n */\r\n const maxTicks = this.config.system.windowHashTimeout / this.config.system.pollIntervalMilliseconds;\r\n let ticks = 0;\r\n\r\n this.logger.verbose(\"PopupHandler.monitorPopupForHash - polling started\");\r\n\r\n const intervalId = setInterval(() => {\r\n // Window is closed\r\n if (popupWindow.closed) {\r\n this.logger.error(\"PopupHandler.monitorPopupForHash - window closed\");\r\n this.cleanPopup();\r\n clearInterval(intervalId);\r\n reject(BrowserAuthError.createUserCancelledError());\r\n return;\r\n }\r\n\r\n let href: string = Constants.EMPTY_STRING;\r\n let hash: string = Constants.EMPTY_STRING;\r\n try {\r\n /*\r\n * Will throw if cross origin,\r\n * which should be caught and ignored\r\n * since we need the interval to keep running while on STS UI.\r\n */\r\n href = popupWindow.location.href;\r\n hash = popupWindow.location.hash;\r\n } catch (e) {}\r\n\r\n // Don't process blank pages or cross domain\r\n if (StringUtils.isEmpty(href) || href === \"about:blank\") {\r\n return;\r\n }\r\n\r\n this.logger.verbose(\"PopupHandler.monitorPopupForHash - popup window is on same origin as caller\");\r\n\r\n /*\r\n * Only run clock when we are on same domain for popups\r\n * as popup operations can take a long time.\r\n */\r\n ticks++;\r\n\r\n if (hash) {\r\n this.logger.verbose(\"PopupHandler.monitorPopupForHash - found hash in url\");\r\n clearInterval(intervalId);\r\n this.cleanPopup(popupWindow);\r\n\r\n if (UrlString.hashContainsKnownProperties(hash)) {\r\n this.logger.verbose(\"PopupHandler.monitorPopupForHash - hash contains known properties, returning.\");\r\n resolve(hash);\r\n } else {\r\n this.logger.error(\"PopupHandler.monitorPopupForHash - found hash in url but it does not contain known properties. Check that your router is not changing the hash prematurely.\");\r\n this.logger.errorPii(`PopupHandler.monitorPopupForHash - hash found: ${hash}`);\r\n reject(BrowserAuthError.createHashDoesNotContainKnownPropertiesError());\r\n }\r\n } else if (ticks > maxTicks) {\r\n this.logger.error(\"PopupHandler.monitorPopupForHash - unable to find hash in url, timing out\");\r\n clearInterval(intervalId);\r\n reject(BrowserAuthError.createMonitorPopupTimeoutError());\r\n }\r\n }, this.config.system.pollIntervalMilliseconds);\r\n });\r\n }\r\n\r\n /**\r\n * Waits for user interaction in logout popup window\r\n * @param popupWindow\r\n * @returns\r\n */\r\n waitForLogoutPopup(popupWindow: Window): Promise {\r\n return new Promise((resolve) => {\r\n this.logger.verbose(\"PopupHandler.waitForLogoutPopup - polling started\");\r\n\r\n const intervalId = setInterval(() => {\r\n // Window is closed\r\n if (popupWindow.closed) {\r\n this.logger.error(\"PopupHandler.waitForLogoutPopup - window closed\");\r\n this.cleanPopup();\r\n clearInterval(intervalId);\r\n resolve();\r\n }\r\n\r\n let href: string = Constants.EMPTY_STRING;\r\n try {\r\n /*\r\n * Will throw if cross origin,\r\n * which should be caught and ignored\r\n * since we need the interval to keep running while on STS UI.\r\n */\r\n href = popupWindow.location.href;\r\n } catch (e) {}\r\n\r\n // Don't process blank pages or cross domain\r\n if (StringUtils.isEmpty(href) || href === \"about:blank\") {\r\n return;\r\n }\r\n\r\n this.logger.verbose(\"PopupHandler.waitForLogoutPopup - popup window is on same origin as caller, closing.\");\r\n\r\n clearInterval(intervalId);\r\n this.cleanPopup(popupWindow);\r\n resolve();\r\n }, this.config.system.pollIntervalMilliseconds);\r\n });\r\n }\r\n\r\n /**\r\n * @hidden\r\n *\r\n * Configures popup window for login.\r\n *\r\n * @param urlNavigate\r\n * @param title\r\n * @param popUpWidth\r\n * @param popUpHeight\r\n * @param popupWindowAttributes\r\n * @ignore\r\n * @hidden\r\n */\r\n openPopup(urlNavigate: string, popupParams: PopupParams): Window {\r\n try {\r\n let popupWindow;\r\n // Popup window passed in, setting url to navigate to\r\n if (popupParams.popup) {\r\n popupWindow = popupParams.popup;\r\n this.logger.verbosePii(`Navigating popup window to: ${urlNavigate}`);\r\n popupWindow.location.assign(urlNavigate);\r\n } else if (typeof popupParams.popup === \"undefined\") {\r\n // Popup will be undefined if it was not passed in\r\n this.logger.verbosePii(`Opening popup window to: ${urlNavigate}`);\r\n popupWindow = this.openSizedPopup(urlNavigate, popupParams.popupName, popupParams.popupWindowAttributes);\r\n }\r\n\r\n // Popup will be null if popups are blocked\r\n if (!popupWindow) {\r\n throw BrowserAuthError.createEmptyWindowCreatedError();\r\n }\r\n if (popupWindow.focus) {\r\n popupWindow.focus();\r\n }\r\n this.currentWindow = popupWindow;\r\n window.addEventListener(\"beforeunload\", this.unloadWindow);\r\n\r\n return popupWindow;\r\n } catch (e) {\r\n this.logger.error(\"error opening popup \" + (e as AuthError).message);\r\n this.browserStorage.setInteractionInProgress(false);\r\n throw BrowserAuthError.createPopupWindowError((e as AuthError).toString());\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to set popup window dimensions and position\r\n * @param urlNavigate\r\n * @param popupName\r\n * @param popupWindowAttributes\r\n * @returns\r\n */\r\n openSizedPopup(urlNavigate: string, popupName: string, popupWindowAttributes: PopupWindowAttributes): Window|null {\r\n /**\r\n * adding winLeft and winTop to account for dual monitor\r\n * using screenLeft and screenTop for IE8 and earlier\r\n */\r\n const winLeft = window.screenLeft ? window.screenLeft : window.screenX;\r\n const winTop = window.screenTop ? window.screenTop : window.screenY;\r\n /**\r\n * window.innerWidth displays browser window\"s height and width excluding toolbars\r\n * using document.documentElement.clientWidth for IE8 and earlier\r\n */\r\n const winWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n const winHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\r\n\r\n let width = popupWindowAttributes.popupSize?.width;\r\n let height = popupWindowAttributes.popupSize?.height;\r\n let top = popupWindowAttributes.popupPosition?.top;\r\n let left = popupWindowAttributes.popupPosition?.left;\r\n\r\n if (!width || width < 0 || width > winWidth) {\r\n this.logger.verbose(\"Default popup window width used. Window width not configured or invalid.\");\r\n width = BrowserConstants.POPUP_WIDTH;\r\n }\r\n\r\n if (!height || height < 0 || height > winHeight) {\r\n this.logger.verbose(\"Default popup window height used. Window height not configured or invalid.\");\r\n height = BrowserConstants.POPUP_HEIGHT;\r\n }\r\n\r\n if (!top || top < 0 || top > winHeight) {\r\n this.logger.verbose(\"Default popup window top position used. Window top not configured or invalid.\");\r\n top = Math.max(0, ((winHeight / 2) - (BrowserConstants.POPUP_HEIGHT / 2)) + winTop);\r\n }\r\n\r\n if (!left || left < 0 || left > winWidth) {\r\n this.logger.verbose(\"Default popup window left position used. Window left not configured or invalid.\");\r\n left = Math.max(0, ((winWidth / 2) - (BrowserConstants.POPUP_WIDTH / 2)) + winLeft);\r\n }\r\n\r\n return window.open(urlNavigate, popupName, `width=${width}, height=${height}, top=${top}, left=${left}, scrollbars=yes`);\r\n }\r\n\r\n /**\r\n * Event callback to unload main window.\r\n */\r\n unloadWindow(e: Event): void {\r\n this.browserStorage.cleanRequestByInteractionType(InteractionType.Popup);\r\n if (this.currentWindow) {\r\n this.currentWindow.close();\r\n }\r\n // Guarantees browser unload will happen, so no other errors will be thrown.\r\n e.preventDefault();\r\n }\r\n\r\n /**\r\n * Closes popup, removes any state vars created during popup calls.\r\n * @param popupWindow\r\n */\r\n cleanPopup(popupWindow?: Window): void {\r\n if (popupWindow) {\r\n // Close window.\r\n popupWindow.close();\r\n }\r\n // Remove window unload function\r\n window.removeEventListener(\"beforeunload\", this.unloadWindow);\r\n\r\n // Interaction is completed - remove interaction status.\r\n this.browserStorage.setInteractionInProgress(false);\r\n }\r\n\r\n /**\r\n * Generates the name for the popup based on the client id and request\r\n * @param clientId\r\n * @param request\r\n */\r\n generatePopupName(scopes: Array, authority: string): string {\r\n return `${BrowserConstants.POPUP_NAME_PREFIX}.${this.config.auth.clientId}.${scopes.join(\"-\")}.${authority}.${this.correlationId}`;\r\n }\r\n\r\n /**\r\n * Generates the name for the popup based on the client id and request for logouts\r\n * @param clientId\r\n * @param request\r\n */\r\n generateLogoutPopupName(request: CommonEndSessionRequest): string {\r\n const homeAccountId = request.account && request.account.homeAccountId;\r\n return `${BrowserConstants.POPUP_NAME_PREFIX}.${this.config.auth.clientId}.${homeAccountId}.${this.correlationId}`;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthorizationCodeClient, StringUtils, CommonAuthorizationCodeRequest, ICrypto, AuthenticationResult, Authority, INetworkModule, ClientAuthError, Logger, ServerError, IPerformanceClient } from \"@azure/msal-common\";\r\nimport { BrowserAuthError, BrowserAuthErrorMessage } from \"../error/BrowserAuthError\";\r\nimport { ApiId, TemporaryCacheKeys } from \"../utils/BrowserConstants\";\r\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\r\nimport { InteractionHandler, InteractionParams } from \"./InteractionHandler\";\r\nimport { INavigationClient } from \"../navigation/INavigationClient\";\r\nimport { NavigationOptions } from \"../navigation/NavigationOptions\";\r\n\r\nexport type RedirectParams = InteractionParams & {\r\n navigationClient: INavigationClient;\r\n redirectTimeout: number;\r\n redirectStartPage: string;\r\n onRedirectNavigate?: (url: string) => void | boolean;\r\n};\r\n\r\nexport class RedirectHandler extends InteractionHandler {\r\n\r\n private browserCrypto: ICrypto;\r\n\r\n constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, browserCrypto: ICrypto, performanceClient: IPerformanceClient) {\r\n super(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient);\r\n this.browserCrypto = browserCrypto;\r\n }\r\n\r\n /**\r\n * Redirects window to given URL.\r\n * @param urlNavigate\r\n */\r\n async initiateAuthRequest(requestUrl: string, params: RedirectParams): Promise {\r\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest called\");\r\n // Navigate if valid URL\r\n if (!StringUtils.isEmpty(requestUrl)) {\r\n // Cache start page, returns to this page after redirectUri if navigateToLoginRequestUrl is true\r\n if (params.redirectStartPage) {\r\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: redirectStartPage set, caching start page\");\r\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, params.redirectStartPage, true);\r\n }\r\n\r\n // Set interaction status in the library.\r\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.CORRELATION_ID, this.authCodeRequest.correlationId, true);\r\n this.browserStorage.cacheCodeRequest(this.authCodeRequest, this.browserCrypto);\r\n this.logger.infoPii(`RedirectHandler.initiateAuthRequest: Navigate to: ${requestUrl}`);\r\n const navigationOptions: NavigationOptions = {\r\n apiId: ApiId.acquireTokenRedirect,\r\n timeout: params.redirectTimeout,\r\n noHistory: false\r\n };\r\n \r\n // If onRedirectNavigate is implemented, invoke it and provide requestUrl\r\n if (typeof params.onRedirectNavigate === \"function\") {\r\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: Invoking onRedirectNavigate callback\");\r\n const navigate = params.onRedirectNavigate(requestUrl);\r\n\r\n // Returning false from onRedirectNavigate will stop navigation\r\n if (navigate !== false) {\r\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: onRedirectNavigate did not return false, navigating\");\r\n await params.navigationClient.navigateExternal(requestUrl, navigationOptions);\r\n return;\r\n } else {\r\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: onRedirectNavigate returned false, stopping navigation\");\r\n return;\r\n }\r\n } else {\r\n // Navigate window to request URL\r\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: Navigating window to navigate url\");\r\n await params.navigationClient.navigateExternal(requestUrl, navigationOptions);\r\n return;\r\n }\r\n } else {\r\n // Throw error if request URL is empty.\r\n this.logger.info(\"RedirectHandler.initiateAuthRequest: Navigate url is empty\");\r\n throw BrowserAuthError.createEmptyNavigationUriError();\r\n }\r\n }\r\n\r\n /**\r\n * Handle authorization code response in the window.\r\n * @param hash\r\n */\r\n async handleCodeResponseFromHash(locationHash: string, state: string, authority: Authority, networkModule: INetworkModule): Promise {\r\n this.logger.verbose(\"RedirectHandler.handleCodeResponse called\");\r\n\r\n // Check that location hash isn't empty.\r\n if (StringUtils.isEmpty(locationHash)) {\r\n throw BrowserAuthError.createEmptyHashError(locationHash);\r\n }\r\n\r\n // Interaction is completed - remove interaction status.\r\n this.browserStorage.setInteractionInProgress(false);\r\n\r\n // Handle code response.\r\n const stateKey = this.browserStorage.generateStateKey(state);\r\n const requestState = this.browserStorage.getTemporaryCache(stateKey);\r\n if (!requestState) {\r\n throw ClientAuthError.createStateNotFoundError(\"Cached State\");\r\n }\r\n\r\n let authCodeResponse;\r\n try {\r\n authCodeResponse = this.authModule.handleFragmentResponse(locationHash, requestState);\r\n } catch (e) {\r\n if (e instanceof ServerError && e.subError === BrowserAuthErrorMessage.userCancelledError.code) {\r\n // Translate server error caused by user closing native prompt to corresponding first class MSAL error\r\n throw BrowserAuthError.createUserCancelledError();\r\n } else {\r\n throw e;\r\n }\r\n }\r\n\r\n // Get cached items\r\n const nonceKey = this.browserStorage.generateNonceKey(requestState);\r\n const cachedNonce = this.browserStorage.getTemporaryCache(nonceKey);\r\n\r\n // Assign code to request\r\n this.authCodeRequest.code = authCodeResponse.code;\r\n\r\n // Check for new cloud instance\r\n if (authCodeResponse.cloud_instance_host_name) {\r\n await this.updateTokenEndpointAuthority(authCodeResponse.cloud_instance_host_name, authority, networkModule);\r\n }\r\n\r\n authCodeResponse.nonce = cachedNonce || undefined;\r\n authCodeResponse.state = requestState;\r\n\r\n // Add CCS parameters if available\r\n if (authCodeResponse.client_info) {\r\n this.authCodeRequest.clientInfo = authCodeResponse.client_info;\r\n } else {\r\n const cachedCcsCred = this.checkCcsCredentials();\r\n if (cachedCcsCred) {\r\n this.authCodeRequest.ccsCredential = cachedCcsCred;\r\n }\r\n }\r\n\r\n // Acquire token with retrieved code.\r\n const tokenResponse = await this.authModule.acquireToken(this.authCodeRequest, authCodeResponse);\r\n\r\n this.browserStorage.cleanRequestByState(state);\r\n return tokenResponse;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthenticationResult, CommonAuthorizationCodeRequest, AuthorizationCodeClient, UrlString, AuthError, ServerTelemetryManager, Constants, ProtocolUtils, ServerAuthorizationCodeResponse, ThrottlingUtils, ICrypto, Logger, IPerformanceClient, PerformanceEvents } from \"@azure/msal-common\";\r\nimport { StandardInteractionClient } from \"./StandardInteractionClient\";\r\nimport { ApiId, InteractionType, TemporaryCacheKeys } from \"../utils/BrowserConstants\";\r\nimport { RedirectHandler } from \"../interaction_handler/RedirectHandler\";\r\nimport { BrowserUtils } from \"../utils/BrowserUtils\";\r\nimport { EndSessionRequest } from \"../request/EndSessionRequest\";\r\nimport { EventType } from \"../event/EventType\";\r\nimport { NavigationOptions } from \"../navigation/NavigationOptions\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { RedirectRequest } from \"../request/RedirectRequest\";\r\nimport { NativeInteractionClient } from \"./NativeInteractionClient\";\r\nimport { NativeMessageHandler } from \"../broker/nativeBroker/NativeMessageHandler\";\r\nimport { BrowserConfiguration } from \"../config/Configuration\";\r\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\r\nimport { EventHandler } from \"../event/EventHandler\";\r\nimport { INavigationClient } from \"../navigation/INavigationClient\";\r\n\r\nexport class RedirectClient extends StandardInteractionClient {\r\n protected nativeStorage: BrowserCacheManager;\r\n\r\n constructor(config: BrowserConfiguration, storageImpl: BrowserCacheManager, browserCrypto: ICrypto, logger: Logger, eventHandler: EventHandler, navigationClient: INavigationClient, performanceClient: IPerformanceClient, nativeStorageImpl: BrowserCacheManager, nativeMessageHandler?: NativeMessageHandler, correlationId?: string) {\r\n super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeMessageHandler, correlationId);\r\n this.nativeStorage = nativeStorageImpl;\r\n }\r\n\r\n /**\r\n * Redirects the page to the /authorize endpoint of the IDP\r\n * @param request\r\n */\r\n async acquireToken(request: RedirectRequest): Promise {\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, request.correlationId);\r\n const validRequest = await this.initializeAuthorizationRequest(request, InteractionType.Redirect);\r\n this.browserStorage.updateCacheEntries(validRequest.state, validRequest.nonce, validRequest.authority, validRequest.loginHint || Constants.EMPTY_STRING, validRequest.account || null);\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenRedirect);\r\n\r\n const handleBackButton = (event: PageTransitionEvent) => {\r\n // Clear temporary cache if the back button is clicked during the redirect flow.\r\n if (event.persisted) {\r\n this.logger.verbose(\"Page was restored from back/forward cache. Clearing temporary cache.\");\r\n this.browserStorage.cleanRequestByState(validRequest.state);\r\n this.eventHandler.emitEvent(EventType.RESTORE_FROM_BFCACHE, InteractionType.Redirect);\r\n }\r\n };\r\n\r\n try {\r\n // Create auth code request and generate PKCE params\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientInitializeAuthorizationCodeRequest, request.correlationId);\r\n const authCodeRequest: CommonAuthorizationCodeRequest = await this.initializeAuthorizationCodeRequest(validRequest);\r\n\r\n // Initialize the client\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, request.correlationId);\r\n const authClient: AuthorizationCodeClient = await this.createAuthCodeClient(serverTelemetryManager, validRequest.authority, validRequest.azureCloudOptions);\r\n this.logger.verbose(\"Auth code client created\");\r\n\r\n // Create redirect interaction handler.\r\n const interactionHandler = new RedirectHandler(authClient, this.browserStorage, authCodeRequest, this.logger, this.browserCrypto, this.performanceClient);\r\n\r\n // Create acquire token url.\r\n const navigateUrl = await authClient.getAuthCodeUrl({\r\n ...validRequest,\r\n nativeBroker: NativeMessageHandler.isNativeAvailable(this.config, this.logger, this.nativeMessageHandler, request.authenticationScheme)\r\n });\r\n\r\n const redirectStartPage = this.getRedirectStartPage(request.redirectStartPage);\r\n this.logger.verbosePii(`Redirect start page: ${redirectStartPage}`);\r\n\r\n // Clear temporary cache if the back button is clicked during the redirect flow.\r\n window.addEventListener(\"pageshow\", handleBackButton);\r\n\r\n // Show the UI once the url has been created. Response will come back in the hash, which will be handled in the handleRedirectCallback function.\r\n return await interactionHandler.initiateAuthRequest(navigateUrl, {\r\n navigationClient: this.navigationClient,\r\n redirectTimeout: this.config.system.redirectNavigationTimeout,\r\n redirectStartPage: redirectStartPage,\r\n onRedirectNavigate: request.onRedirectNavigate\r\n });\r\n } catch (e) {\r\n if (e instanceof AuthError) {\r\n e.setCorrelationId(this.correlationId);\r\n }\r\n window.removeEventListener(\"pageshow\", handleBackButton);\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n this.browserStorage.cleanRequestByState(validRequest.state);\r\n throw e;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if navigateToLoginRequestUrl is set, and:\r\n * - if true, performs logic to cache and navigate\r\n * - if false, handles hash string and parses response\r\n * @param hash\r\n */\r\n async handleRedirectPromise(hash?: string): Promise {\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.handleRedirectPromise);\r\n try {\r\n if (!this.browserStorage.isInteractionInProgress(true)) {\r\n this.logger.info(\"handleRedirectPromise called but there is no interaction in progress, returning null.\");\r\n return null;\r\n }\r\n\r\n const responseHash = this.getRedirectResponseHash(hash || window.location.hash);\r\n if (!responseHash) {\r\n // Not a recognized server response hash or hash not associated with a redirect request\r\n this.logger.info(\"handleRedirectPromise did not detect a response hash as a result of a redirect. Cleaning temporary cache.\");\r\n this.browserStorage.cleanRequestByInteractionType(InteractionType.Redirect);\r\n return null;\r\n }\r\n\r\n let state: string;\r\n try {\r\n // Deserialize hash fragment response parameters.\r\n const serverParams: ServerAuthorizationCodeResponse = UrlString.getDeserializedHash(responseHash);\r\n state = this.validateAndExtractStateFromHash(serverParams, InteractionType.Redirect);\r\n this.logger.verbose(\"State extracted from hash\");\r\n } catch (e) {\r\n this.logger.info(`handleRedirectPromise was unable to extract state due to: ${e}`);\r\n this.browserStorage.cleanRequestByInteractionType(InteractionType.Redirect);\r\n return null;\r\n }\r\n\r\n // If navigateToLoginRequestUrl is true, get the url where the redirect request was initiated\r\n const loginRequestUrl = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, true) || Constants.EMPTY_STRING;\r\n const loginRequestUrlNormalized = UrlString.removeHashFromUrl(loginRequestUrl);\r\n const currentUrlNormalized = UrlString.removeHashFromUrl(window.location.href);\r\n\r\n if (loginRequestUrlNormalized === currentUrlNormalized && this.config.auth.navigateToLoginRequestUrl) {\r\n // We are on the page we need to navigate to - handle hash\r\n this.logger.verbose(\"Current page is loginRequestUrl, handling hash\");\r\n const handleHashResult = await this.handleHash(responseHash, state, serverTelemetryManager);\r\n\r\n if (loginRequestUrl.indexOf(\"#\") > -1) {\r\n // Replace current hash with non-msal hash, if present\r\n BrowserUtils.replaceHash(loginRequestUrl);\r\n }\r\n\r\n return handleHashResult;\r\n } else if (!this.config.auth.navigateToLoginRequestUrl) {\r\n this.logger.verbose(\"NavigateToLoginRequestUrl set to false, handling hash\");\r\n return this.handleHash(responseHash, state, serverTelemetryManager);\r\n } else if (!BrowserUtils.isInIframe() || this.config.system.allowRedirectInIframe) {\r\n /*\r\n * Returned from authority using redirect - need to perform navigation before processing response\r\n * Cache the hash to be retrieved after the next redirect\r\n */\r\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.URL_HASH, responseHash, true);\r\n const navigationOptions: NavigationOptions = {\r\n apiId: ApiId.handleRedirectPromise,\r\n timeout: this.config.system.redirectNavigationTimeout,\r\n noHistory: true\r\n };\r\n\r\n /**\r\n * Default behavior is to redirect to the start page and not process the hash now.\r\n * The start page is expected to also call handleRedirectPromise which will process the hash in one of the checks above.\r\n */\r\n let processHashOnRedirect: boolean = true;\r\n if (!loginRequestUrl || loginRequestUrl === \"null\") {\r\n // Redirect to home page if login request url is null (real null or the string null)\r\n const homepage = BrowserUtils.getHomepage();\r\n // Cache the homepage under ORIGIN_URI to ensure cached hash is processed on homepage\r\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, homepage, true);\r\n this.logger.warning(\"Unable to get valid login request url from cache, redirecting to home page\");\r\n processHashOnRedirect = await this.navigationClient.navigateInternal(homepage, navigationOptions);\r\n } else {\r\n // Navigate to page that initiated the redirect request\r\n this.logger.verbose(`Navigating to loginRequestUrl: ${loginRequestUrl}`);\r\n processHashOnRedirect = await this.navigationClient.navigateInternal(loginRequestUrl, navigationOptions);\r\n }\r\n\r\n // If navigateInternal implementation returns false, handle the hash now\r\n if (!processHashOnRedirect) {\r\n return this.handleHash(responseHash, state, serverTelemetryManager);\r\n }\r\n }\r\n\r\n return null;\r\n } catch (e) {\r\n if (e instanceof AuthError) {\r\n (e as AuthError).setCorrelationId(this.correlationId);\r\n }\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n this.browserStorage.cleanRequestByInteractionType(InteractionType.Redirect);\r\n throw e;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the response hash for a redirect request\r\n * Returns null if interactionType in the state value is not \"redirect\" or the hash does not contain known properties\r\n * @param hash\r\n */\r\n protected getRedirectResponseHash(hash: string): string | null {\r\n this.logger.verbose(\"getRedirectResponseHash called\");\r\n // Get current location hash from window or cache.\r\n const isResponseHash: boolean = UrlString.hashContainsKnownProperties(hash);\r\n\r\n if (isResponseHash) {\r\n BrowserUtils.clearHash(window);\r\n this.logger.verbose(\"Hash contains known properties, returning response hash\");\r\n return hash;\r\n }\r\n\r\n const cachedHash = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.URL_HASH, true);\r\n this.browserStorage.removeItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.URL_HASH));\r\n\r\n this.logger.verbose(\"Hash does not contain known properties, returning cached hash\");\r\n return cachedHash;\r\n }\r\n\r\n /**\r\n * Checks if hash exists and handles in window.\r\n * @param hash\r\n * @param state\r\n */\r\n protected async handleHash(hash: string, state: string, serverTelemetryManager: ServerTelemetryManager): Promise {\r\n const cachedRequest = this.browserStorage.getCachedRequest(state, this.browserCrypto);\r\n this.logger.verbose(\"handleHash called, retrieved cached request\");\r\n\r\n const serverParams: ServerAuthorizationCodeResponse = UrlString.getDeserializedHash(hash);\r\n\r\n if (serverParams.accountId) {\r\n this.logger.verbose(\"Account id found in hash, calling WAM for token\");\r\n if (!this.nativeMessageHandler) {\r\n throw BrowserAuthError.createNativeConnectionNotEstablishedError();\r\n }\r\n const nativeInteractionClient = new NativeInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.acquireTokenPopup, this.performanceClient, this.nativeMessageHandler, serverParams.accountId, this.nativeStorage, cachedRequest.correlationId);\r\n const { userRequestState } = ProtocolUtils.parseRequestState(this.browserCrypto, state);\r\n return nativeInteractionClient.acquireToken({\r\n ...cachedRequest,\r\n state: userRequestState,\r\n prompt: undefined // Server should handle the prompt, ideally native broker can do this part silently\r\n }).finally(() => {\r\n this.browserStorage.cleanRequestByState(state);\r\n });\r\n }\r\n\r\n // Hash contains known properties - handle and return in callback\r\n const currentAuthority = this.browserStorage.getCachedAuthority(state);\r\n if (!currentAuthority) {\r\n throw BrowserAuthError.createNoCachedAuthorityError();\r\n }\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, cachedRequest.correlationId);\r\n const authClient = await this.createAuthCodeClient(serverTelemetryManager, currentAuthority);\r\n this.logger.verbose(\"Auth code client created\");\r\n ThrottlingUtils.removeThrottle(this.browserStorage, this.config.auth.clientId, cachedRequest);\r\n const interactionHandler = new RedirectHandler(authClient, this.browserStorage, cachedRequest, this.logger, this.browserCrypto, this.performanceClient);\r\n return await interactionHandler.handleCodeResponseFromHash(hash, state, authClient.authority, this.networkClient);\r\n }\r\n\r\n /**\r\n * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n * Default behaviour is to redirect the user to `window.location.href`.\r\n * @param logoutRequest\r\n */\r\n async logout(logoutRequest?: EndSessionRequest): Promise {\r\n this.logger.verbose(\"logoutRedirect called\");\r\n const validLogoutRequest = this.initializeLogoutRequest(logoutRequest);\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.logout);\r\n\r\n try {\r\n this.eventHandler.emitEvent(EventType.LOGOUT_START, InteractionType.Redirect, logoutRequest);\r\n\r\n // Clear cache on logout\r\n await this.clearCacheOnLogout(validLogoutRequest.account);\r\n\r\n const navigationOptions: NavigationOptions = {\r\n apiId: ApiId.logout,\r\n timeout: this.config.system.redirectNavigationTimeout,\r\n noHistory: false\r\n };\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, validLogoutRequest.correlationId);\r\n const authClient = await this.createAuthCodeClient(serverTelemetryManager, logoutRequest && logoutRequest.authority);\r\n this.logger.verbose(\"Auth code client created\");\r\n\r\n // Create logout string and navigate user window to logout.\r\n const logoutUri: string = authClient.getLogoutUri(validLogoutRequest);\r\n\r\n this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Redirect, validLogoutRequest);\r\n // Check if onRedirectNavigate is implemented, and invoke it if so\r\n if (logoutRequest && typeof logoutRequest.onRedirectNavigate === \"function\") {\r\n const navigate = logoutRequest.onRedirectNavigate(logoutUri);\r\n\r\n if (navigate !== false) {\r\n this.logger.verbose(\"Logout onRedirectNavigate did not return false, navigating\");\r\n // Ensure interaction is in progress\r\n if (!this.browserStorage.getInteractionInProgress()) {\r\n this.browserStorage.setInteractionInProgress(true);\r\n }\r\n await this.navigationClient.navigateExternal(logoutUri, navigationOptions);\r\n return;\r\n } else {\r\n // Ensure interaction is not in progress\r\n this.browserStorage.setInteractionInProgress(false);\r\n this.logger.verbose(\"Logout onRedirectNavigate returned false, stopping navigation\");\r\n }\r\n } else {\r\n // Ensure interaction is in progress\r\n if (!this.browserStorage.getInteractionInProgress()) {\r\n this.browserStorage.setInteractionInProgress(true);\r\n }\r\n await this.navigationClient.navigateExternal(logoutUri, navigationOptions);\r\n return;\r\n }\r\n } catch(e) {\r\n if (e instanceof AuthError) {\r\n (e as AuthError).setCorrelationId(this.correlationId);\r\n }\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n this.eventHandler.emitEvent(EventType.LOGOUT_FAILURE, InteractionType.Redirect, null, e);\r\n this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Redirect);\r\n throw e;\r\n }\r\n\r\n this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Redirect);\r\n }\r\n\r\n /**\r\n * Use to get the redirectStartPage either from request or use current window\r\n * @param requestStartPage\r\n */\r\n protected getRedirectStartPage(requestStartPage?: string): string {\r\n const redirectStartPage = requestStartPage || window.location.href;\r\n return UrlString.getAbsoluteUrl(redirectStartPage, BrowserUtils.getCurrentUri());\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { UrlString, StringUtils, CommonAuthorizationCodeRequest, AuthorizationCodeClient, Constants, Logger, IPerformanceClient, PerformanceEvents } from \"@azure/msal-common\";\r\nimport { InteractionHandler } from \"./InteractionHandler\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\r\nimport { BrowserSystemOptions, DEFAULT_IFRAME_TIMEOUT_MS } from \"../config/Configuration\";\r\n\r\nexport class SilentHandler extends InteractionHandler {\r\n\r\n private navigateFrameWait: number;\r\n private pollIntervalMilliseconds: number;\r\n\r\n constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, systemOptions: Required>, performanceClient: IPerformanceClient) {\r\n super(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient);\r\n this.navigateFrameWait = systemOptions.navigateFrameWait;\r\n this.pollIntervalMilliseconds = systemOptions.pollIntervalMilliseconds;\r\n }\r\n\r\n /**\r\n * Creates a hidden iframe to given URL using user-requested scopes as an id.\r\n * @param urlNavigate\r\n * @param userRequestScopes\r\n */\r\n async initiateAuthRequest(requestUrl: string): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerInitiateAuthRequest, this.authCodeRequest.correlationId);\r\n\r\n if (StringUtils.isEmpty(requestUrl)) {\r\n // Throw error if request URL is empty.\r\n this.logger.info(\"Navigate url is empty\");\r\n throw BrowserAuthError.createEmptyNavigationUriError();\r\n }\r\n\r\n if (this.navigateFrameWait) {\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.SilentHandlerLoadFrame, this.authCodeRequest.correlationId);\r\n return await this.loadFrame(requestUrl);\r\n }\r\n return this.loadFrameSync(requestUrl);\r\n }\r\n\r\n /**\r\n * Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.\r\n * @param iframe\r\n * @param timeout\r\n */\r\n monitorIframeForHash(iframe: HTMLIFrameElement, timeout: number): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerMonitorIframeForHash, this.authCodeRequest.correlationId);\r\n\r\n return new Promise((resolve, reject) => {\r\n if (timeout < DEFAULT_IFRAME_TIMEOUT_MS) {\r\n this.logger.warning(`system.loadFrameTimeout or system.iframeHashTimeout set to lower (${timeout}ms) than the default (${DEFAULT_IFRAME_TIMEOUT_MS}ms). This may result in timeouts.`);\r\n }\r\n\r\n /*\r\n * Polling for iframes can be purely timing based,\r\n * since we don't need to account for interaction.\r\n */\r\n const nowMark = window.performance.now();\r\n const timeoutMark = nowMark + timeout;\r\n\r\n const intervalId = setInterval(() => {\r\n if (window.performance.now() > timeoutMark) {\r\n this.removeHiddenIframe(iframe);\r\n clearInterval(intervalId);\r\n reject(BrowserAuthError.createMonitorIframeTimeoutError());\r\n return;\r\n }\r\n\r\n let href: string = Constants.EMPTY_STRING;\r\n const contentWindow = iframe.contentWindow;\r\n try {\r\n /*\r\n * Will throw if cross origin,\r\n * which should be caught and ignored\r\n * since we need the interval to keep running while on STS UI.\r\n */\r\n href = contentWindow ? contentWindow.location.href : Constants.EMPTY_STRING;\r\n } catch (e) {}\r\n\r\n if (StringUtils.isEmpty(href)) {\r\n return;\r\n }\r\n\r\n const contentHash = contentWindow ? contentWindow.location.hash: Constants.EMPTY_STRING;\r\n if (UrlString.hashContainsKnownProperties(contentHash)) {\r\n // Success case\r\n this.removeHiddenIframe(iframe);\r\n clearInterval(intervalId);\r\n resolve(contentHash);\r\n return;\r\n }\r\n }, this.pollIntervalMilliseconds);\r\n });\r\n }\r\n\r\n /**\r\n * @hidden\r\n * Loads iframe with authorization endpoint URL\r\n * @ignore\r\n */\r\n private loadFrame(urlNavigate: string): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerLoadFrame, this.authCodeRequest.correlationId);\r\n\r\n /*\r\n * This trick overcomes iframe navigation in IE\r\n * IE does not load the page consistently in iframe\r\n */\r\n\r\n return new Promise((resolve, reject) => {\r\n const frameHandle = this.createHiddenIframe();\r\n\r\n setTimeout(() => {\r\n if (!frameHandle) {\r\n reject(\"Unable to load iframe\");\r\n return;\r\n }\r\n\r\n frameHandle.src = urlNavigate;\r\n\r\n resolve(frameHandle);\r\n }, this.navigateFrameWait);\r\n });\r\n }\r\n\r\n /**\r\n * @hidden\r\n * Loads the iframe synchronously when the navigateTimeFrame is set to `0`\r\n * @param urlNavigate\r\n * @param frameName\r\n * @param logger\r\n */\r\n private loadFrameSync(urlNavigate: string): HTMLIFrameElement{\r\n const frameHandle = this.createHiddenIframe();\r\n\r\n frameHandle.src = urlNavigate;\r\n\r\n return frameHandle;\r\n }\r\n\r\n /**\r\n * @hidden\r\n * Creates a new hidden iframe or gets an existing one for silent token renewal.\r\n * @ignore\r\n */\r\n private createHiddenIframe(): HTMLIFrameElement {\r\n const authFrame = document.createElement(\"iframe\");\r\n\r\n authFrame.style.visibility = \"hidden\";\r\n authFrame.style.position = \"absolute\";\r\n authFrame.style.width = authFrame.style.height = \"0\";\r\n authFrame.style.border = \"0\";\r\n authFrame.setAttribute(\"sandbox\", \"allow-scripts allow-same-origin allow-forms\");\r\n document.getElementsByTagName(\"body\")[0].appendChild(authFrame);\r\n\r\n return authFrame;\r\n }\r\n\r\n /**\r\n * @hidden\r\n * Removes a hidden iframe from the page.\r\n * @ignore\r\n */\r\n private removeHiddenIframe(iframe: HTMLIFrameElement): void {\r\n if (document.body === iframe.parentNode) {\r\n document.body.removeChild(iframe);\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthenticationResult, ICrypto, Logger, StringUtils, PromptValue, CommonAuthorizationCodeRequest, AuthorizationCodeClient, AuthError, Constants, UrlString, ServerAuthorizationCodeResponse, ProtocolUtils, IPerformanceClient, PerformanceEvents } from \"@azure/msal-common\";\r\nimport { StandardInteractionClient } from \"./StandardInteractionClient\";\r\nimport { AuthorizationUrlRequest } from \"../request/AuthorizationUrlRequest\";\r\nimport { BrowserConfiguration } from \"../config/Configuration\";\r\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\r\nimport { EventHandler } from \"../event/EventHandler\";\r\nimport { INavigationClient } from \"../navigation/INavigationClient\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { InteractionType, ApiId } from \"../utils/BrowserConstants\";\r\nimport { SilentHandler } from \"../interaction_handler/SilentHandler\";\r\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest\";\r\nimport { NativeMessageHandler } from \"../broker/nativeBroker/NativeMessageHandler\";\r\nimport { NativeInteractionClient } from \"./NativeInteractionClient\";\r\n\r\nexport class SilentIframeClient extends StandardInteractionClient {\r\n protected apiId: ApiId;\r\n protected nativeStorage: BrowserCacheManager;\r\n\r\n constructor(config: BrowserConfiguration, storageImpl: BrowserCacheManager, browserCrypto: ICrypto, logger: Logger, eventHandler: EventHandler, navigationClient: INavigationClient, apiId: ApiId, performanceClient: IPerformanceClient, nativeStorageImpl: BrowserCacheManager, nativeMessageHandler?: NativeMessageHandler, correlationId?: string) {\r\n super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeMessageHandler, correlationId);\r\n this.apiId = apiId;\r\n this.nativeStorage = nativeStorageImpl;\r\n }\r\n\r\n /**\r\n * Acquires a token silently by opening a hidden iframe to the /authorize endpoint with prompt=none or prompt=no_session\r\n * @param request\r\n */\r\n async acquireToken(request: SsoSilentRequest): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentIframeClientAcquireToken, request.correlationId);\r\n this.logger.verbose(\"acquireTokenByIframe called\");\r\n const acquireTokenMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.SilentIframeClientAcquireToken, request.correlationId);\r\n // Check that we have some SSO data\r\n if (StringUtils.isEmpty(request.loginHint) && StringUtils.isEmpty(request.sid) && (!request.account || StringUtils.isEmpty(request.account.username))) {\r\n this.logger.warning(\"No user hint provided. The authorization server may need more information to complete this request.\");\r\n }\r\n\r\n // Check that prompt is set to none or no_session, throw error if it is set to anything else.\r\n if (request.prompt && (request.prompt !== PromptValue.NONE) && (request.prompt !== PromptValue.NO_SESSION)) {\r\n acquireTokenMeasurement.endMeasurement({\r\n success: false\r\n });\r\n throw BrowserAuthError.createSilentPromptValueError(request.prompt);\r\n }\r\n\r\n // Create silent request\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, request.correlationId);\r\n const silentRequest: AuthorizationUrlRequest = await this.initializeAuthorizationRequest({\r\n ...request,\r\n prompt: request.prompt || PromptValue.NONE\r\n }, InteractionType.Silent);\r\n this.browserStorage.updateCacheEntries(silentRequest.state, silentRequest.nonce, silentRequest.authority, silentRequest.loginHint || Constants.EMPTY_STRING, silentRequest.account || null);\r\n\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId);\r\n\r\n try {\r\n // Initialize the client\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, request.correlationId);\r\n const authClient: AuthorizationCodeClient = await this.createAuthCodeClient(serverTelemetryManager, silentRequest.authority, silentRequest.azureCloudOptions);\r\n this.logger.verbose(\"Auth code client created\");\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.SilentIframeClientTokenHelper, request.correlationId);\r\n return await this.silentTokenHelper(authClient, silentRequest).then((result: AuthenticationResult) => {\r\n acquireTokenMeasurement.endMeasurement({\r\n success: true,\r\n fromCache: false,\r\n requestId: result.requestId\r\n });\r\n return result;\r\n });\r\n } catch (e) {\r\n if (e instanceof AuthError) {\r\n (e as AuthError).setCorrelationId(this.correlationId);\r\n }\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n this.browserStorage.cleanRequestByState(silentRequest.state);\r\n acquireTokenMeasurement.endMeasurement({\r\n errorCode: e instanceof AuthError && e.errorCode || undefined,\r\n subErrorCode: e instanceof AuthError && e.subError || undefined,\r\n success: false\r\n });\r\n throw e;\r\n }\r\n }\r\n\r\n /**\r\n * Currently Unsupported\r\n */\r\n logout(): Promise {\r\n // Synchronous so we must reject\r\n return Promise.reject(BrowserAuthError.createSilentLogoutUnsupportedError());\r\n }\r\n\r\n /**\r\n * Helper which acquires an authorization code silently using a hidden iframe from given url\r\n * using the scopes requested as part of the id, and exchanges the code for a set of OAuth tokens.\r\n * @param navigateUrl\r\n * @param userRequestScopes\r\n */\r\n protected async silentTokenHelper(authClient: AuthorizationCodeClient, silentRequest: AuthorizationUrlRequest): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentIframeClientTokenHelper, silentRequest.correlationId);\r\n\r\n // Create auth code request and generate PKCE params\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientInitializeAuthorizationCodeRequest, silentRequest.correlationId);\r\n const authCodeRequest: CommonAuthorizationCodeRequest = await this.initializeAuthorizationCodeRequest(silentRequest);\r\n // Create authorize request url\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.GetAuthCodeUrl, silentRequest.correlationId);\r\n const navigateUrl = await authClient.getAuthCodeUrl({\r\n ...silentRequest,\r\n nativeBroker: NativeMessageHandler.isNativeAvailable(this.config, this.logger, this.nativeMessageHandler, silentRequest.authenticationScheme)\r\n });\r\n\r\n // Create silent handler\r\n const silentHandler = new SilentHandler(authClient, this.browserStorage, authCodeRequest, this.logger, this.config.system, this.performanceClient);\r\n // Get the frame handle for the silent request\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.SilentHandlerInitiateAuthRequest, silentRequest.correlationId);\r\n const msalFrame = await silentHandler.initiateAuthRequest(navigateUrl);\r\n // Monitor the window for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.SilentHandlerMonitorIframeForHash, silentRequest.correlationId);\r\n const hash = await silentHandler.monitorIframeForHash(msalFrame, this.config.system.iframeHashTimeout);\r\n // Deserialize hash fragment response parameters.\r\n const serverParams: ServerAuthorizationCodeResponse = UrlString.getDeserializedHash(hash);\r\n const state = this.validateAndExtractStateFromHash(serverParams, InteractionType.Silent, authCodeRequest.correlationId);\r\n\r\n if (serverParams.accountId) {\r\n this.logger.verbose(\"Account id found in hash, calling WAM for token\");\r\n if (!this.nativeMessageHandler) {\r\n throw BrowserAuthError.createNativeConnectionNotEstablishedError();\r\n }\r\n const nativeInteractionClient = new NativeInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.apiId, this.performanceClient, this.nativeMessageHandler, serverParams.accountId, this.browserStorage, this.correlationId);\r\n const { userRequestState } = ProtocolUtils.parseRequestState(this.browserCrypto, state);\r\n return nativeInteractionClient.acquireToken({\r\n ...silentRequest,\r\n state: userRequestState,\r\n prompt: silentRequest.prompt || PromptValue.NONE\r\n }).finally(() => {\r\n this.browserStorage.cleanRequestByState(state);\r\n });\r\n }\r\n\r\n // Handle response from hash string\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.HandleCodeResponseFromHash, silentRequest.correlationId);\r\n return silentHandler.handleCodeResponseFromHash(hash, state, authClient.authority, this.networkClient);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { StandardInteractionClient } from \"./StandardInteractionClient\";\r\nimport { CommonSilentFlowRequest, AuthenticationResult, ServerTelemetryManager, RefreshTokenClient, AuthError, AzureCloudOptions, PerformanceEvents } from \"@azure/msal-common\";\r\nimport { ApiId } from \"../utils/BrowserConstants\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\n\r\nexport class SilentRefreshClient extends StandardInteractionClient {\r\n /**\r\n * Exchanges the refresh token for new tokens\r\n * @param request\r\n */\r\n async acquireToken(request: CommonSilentFlowRequest): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentRefreshClientAcquireToken, request.correlationId);\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.InitializeBaseRequest, request.correlationId);\r\n const silentRequest: CommonSilentFlowRequest = {\r\n ...request,\r\n ...await this.initializeBaseRequest(request, request.account)\r\n };\r\n const acquireTokenMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.SilentRefreshClientAcquireToken, silentRequest.correlationId);\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenSilent_silentFlow);\r\n\r\n const refreshTokenClient = await this.createRefreshTokenClient(serverTelemetryManager, silentRequest.authority, silentRequest.azureCloudOptions);\r\n this.logger.verbose(\"Refresh token client created\");\r\n // Send request to renew token. Auth module will throw errors if token cannot be renewed.\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken, request.correlationId);\r\n return refreshTokenClient.acquireTokenByRefreshToken(silentRequest)\r\n .then((result: AuthenticationResult) => {\r\n acquireTokenMeasurement.endMeasurement({\r\n success: true,\r\n fromCache: result.fromCache,\r\n requestId: result.requestId\r\n });\r\n\r\n return result;\r\n })\r\n .catch((e: AuthError) => {\r\n if (e instanceof AuthError) {\r\n (e as AuthError).setCorrelationId(this.correlationId);\r\n }\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n acquireTokenMeasurement.endMeasurement({\r\n errorCode: e.errorCode,\r\n subErrorCode: e.subError,\r\n success: false\r\n });\r\n throw e;\r\n });\r\n }\r\n\r\n /**\r\n * Currently Unsupported\r\n */\r\n logout(): Promise {\r\n // Synchronous so we must reject\r\n return Promise.reject(BrowserAuthError.createSilentLogoutUnsupportedError());\r\n }\r\n\r\n /**\r\n * Creates a Refresh Client with the given authority, or the default authority.\r\n * @param serverTelemetryManager\r\n * @param authorityUrl\r\n */\r\n protected async createRefreshTokenClient(serverTelemetryManager: ServerTelemetryManager, authorityUrl?: string, azureCloudOptions?: AzureCloudOptions): Promise {\r\n // Create auth module.\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.correlationId);\r\n const clientConfig = await this.getClientConfiguration(serverTelemetryManager, authorityUrl, azureCloudOptions);\r\n return new RefreshTokenClient(clientConfig, this.performanceClient);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AccessTokenEntity, ICrypto, IdTokenEntity, Logger, ScopeSet, Authority, AuthorityOptions, ExternalTokenResponse, AccountEntity, AuthToken, RefreshTokenEntity , AuthorityType, CacheRecord, AuthenticationResult, Constants } from \"@azure/msal-common\";\r\nimport { BrowserConfiguration } from \"../config/Configuration\";\r\nimport { SilentRequest } from \"../request/SilentRequest\";\r\nimport { BrowserCacheManager } from \"./BrowserCacheManager\";\r\nimport { ITokenCache } from \"./ITokenCache\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\n\r\nexport type LoadTokenOptions = {\r\n clientInfo?: string,\r\n expiresOn?: number,\r\n extendedExpiresOn?: number\r\n};\r\n\r\n/**\r\n * Token cache manager\r\n */\r\nexport class TokenCache implements ITokenCache {\r\n // Flag to indicate if in browser environment\r\n public isBrowserEnvironment: boolean;\r\n // Input configuration by developer/user\r\n protected config: BrowserConfiguration;\r\n // Browser cache storage\r\n private storage: BrowserCacheManager;\r\n // Logger\r\n private logger: Logger;\r\n // Crypto class\r\n private cryptoObj: ICrypto;\r\n\r\n constructor(configuration: BrowserConfiguration, storage: BrowserCacheManager, logger: Logger, cryptoObj: ICrypto) {\r\n this.isBrowserEnvironment = typeof window !== \"undefined\";\r\n this.config = configuration;\r\n this.storage = storage;\r\n this.logger = logger;\r\n this.cryptoObj = cryptoObj;\r\n }\r\n\r\n // Move getAllAccounts here and cache utility APIs\r\n\r\n /**\r\n * API to load tokens to msal-browser cache.\r\n * @param request\r\n * @param response\r\n * @param options\r\n * @returns `AuthenticationResult` for the response that was loaded.\r\n */\r\n loadExternalTokens(request: SilentRequest, response: ExternalTokenResponse, options: LoadTokenOptions): AuthenticationResult {\r\n this.logger.info(\"TokenCache - loadExternalTokens called\");\r\n\r\n if (!response.id_token) {\r\n throw BrowserAuthError.createUnableToLoadTokenError(\"Please ensure server response includes id token.\");\r\n }\r\n\r\n const idToken = new AuthToken(response.id_token, this.cryptoObj);\r\n\r\n let cacheRecord: CacheRecord | undefined;\r\n let authority: Authority | undefined;\r\n\r\n if (request.account) {\r\n const cacheRecordAccount = this.loadAccount(idToken, request.account.environment, undefined, undefined, request.account.homeAccountId);\r\n cacheRecord = new CacheRecord(\r\n cacheRecordAccount,\r\n this.loadIdToken(idToken, cacheRecordAccount.homeAccountId, request.account.environment, request.account.tenantId),\r\n this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, request.account.environment, request.account.tenantId, options),\r\n this.loadRefreshToken(request, response, cacheRecordAccount.homeAccountId, request.account.environment)\r\n );\r\n } else if (request.authority) {\r\n\r\n const authorityUrl = Authority.generateAuthority(request.authority, request.azureCloudOptions);\r\n const authorityOptions: AuthorityOptions = {\r\n protocolMode: this.config.auth.protocolMode,\r\n knownAuthorities: this.config.auth.knownAuthorities,\r\n cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,\r\n authorityMetadata: this.config.auth.authorityMetadata,\r\n skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache,\r\n };\r\n authority = new Authority(authorityUrl, this.config.system.networkClient, this.storage, authorityOptions, this.logger);\r\n\r\n // \"clientInfo\" from options takes precedence over \"clientInfo\" in response\r\n if (options.clientInfo) {\r\n this.logger.trace(\"TokenCache - homeAccountId from options\");\r\n const cacheRecordAccount = this.loadAccount(idToken, authority.hostnameAndPort, options.clientInfo, authority.authorityType);\r\n cacheRecord = new CacheRecord(\r\n cacheRecordAccount,\r\n this.loadIdToken(idToken, cacheRecordAccount.homeAccountId, authority.hostnameAndPort, authority.tenant),\r\n this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, authority.hostnameAndPort, authority.tenant, options),\r\n this.loadRefreshToken(request, response, cacheRecordAccount.homeAccountId, authority.hostnameAndPort)\r\n );\r\n } else if (response.client_info) {\r\n this.logger.trace(\"TokenCache - homeAccountId from response\");\r\n const cacheRecordAccount = this.loadAccount(idToken, authority.hostnameAndPort, response.client_info, authority.authorityType);\r\n cacheRecord = new CacheRecord(\r\n cacheRecordAccount,\r\n this.loadIdToken(idToken, cacheRecordAccount.homeAccountId, authority.hostnameAndPort, authority.tenant),\r\n this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, authority.hostnameAndPort, authority.tenant, options),\r\n this.loadRefreshToken(request, response, cacheRecordAccount.homeAccountId, authority.hostnameAndPort)\r\n );\r\n } else {\r\n throw BrowserAuthError.createUnableToLoadTokenError(\"Please provide clientInfo in the response or options.\");\r\n }\r\n } else {\r\n throw BrowserAuthError.createUnableToLoadTokenError(\"Please provide a request with an account or a request with authority.\");\r\n }\r\n\r\n return this.generateAuthenticationResult(request, idToken, cacheRecord, authority);\r\n }\r\n\r\n /**\r\n * Helper function to load account to msal-browser cache\r\n * @param idToken\r\n * @param environment\r\n * @param clientInfo\r\n * @param authorityType\r\n * @param requestHomeAccountId\r\n * @returns `AccountEntity`\r\n */\r\n private loadAccount(idToken: AuthToken, environment: string, clientInfo?: string, authorityType?: AuthorityType, requestHomeAccountId?: string): AccountEntity {\r\n\r\n let homeAccountId;\r\n if (requestHomeAccountId) {\r\n homeAccountId = requestHomeAccountId;\r\n } else if (authorityType !== undefined && clientInfo) {\r\n homeAccountId = AccountEntity.generateHomeAccountId(clientInfo, authorityType, this.logger, this.cryptoObj, idToken);\r\n }\r\n\r\n if (!homeAccountId) {\r\n throw BrowserAuthError.createUnableToLoadTokenError(\"Unexpected missing homeAccountId\");\r\n }\r\n\r\n const accountEntity = clientInfo ?\r\n AccountEntity.createAccount(clientInfo, homeAccountId, idToken, undefined, undefined, undefined, environment) :\r\n AccountEntity.createGenericAccount(homeAccountId, idToken, undefined, undefined, undefined, environment);\r\n\r\n if (this.isBrowserEnvironment) {\r\n this.logger.verbose(\"TokenCache - loading account\");\r\n\r\n this.storage.setAccount(accountEntity);\r\n return accountEntity;\r\n } else {\r\n throw BrowserAuthError.createUnableToLoadTokenError(\"loadExternalTokens is designed to work in browser environments only.\");\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to load id tokens to msal-browser cache\r\n * @param idToken\r\n * @param homeAccountId\r\n * @param environment\r\n * @param tenantId\r\n * @returns `IdTokenEntity`\r\n */\r\n private loadIdToken(idToken: AuthToken, homeAccountId: string, environment: string, tenantId: string): IdTokenEntity {\r\n\r\n const idTokenEntity = IdTokenEntity.createIdTokenEntity(homeAccountId, environment, idToken.rawToken, this.config.auth.clientId, tenantId);\r\n\r\n if (this.isBrowserEnvironment) {\r\n this.logger.verbose(\"TokenCache - loading id token\");\r\n this.storage.setIdTokenCredential(idTokenEntity);\r\n return idTokenEntity;\r\n } else {\r\n throw BrowserAuthError.createUnableToLoadTokenError(\"loadExternalTokens is designed to work in browser environments only.\");\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to load access tokens to msal-browser cache\r\n * @param request\r\n * @param response\r\n * @param homeAccountId\r\n * @param environment\r\n * @param tenantId\r\n * @returns `AccessTokenEntity`\r\n */\r\n private loadAccessToken(request: SilentRequest, response: ExternalTokenResponse, homeAccountId: string, environment: string, tenantId: string, options: LoadTokenOptions): AccessTokenEntity | null {\r\n\r\n if (!response.access_token) {\r\n this.logger.verbose(\"TokenCache - No access token provided for caching\");\r\n return null;\r\n }\r\n\r\n if (!response.expires_in) {\r\n throw BrowserAuthError.createUnableToLoadTokenError(\"Please ensure server response includes expires_in value.\");\r\n }\r\n\r\n if (!options.extendedExpiresOn) {\r\n throw BrowserAuthError.createUnableToLoadTokenError(\"Please provide an extendedExpiresOn value in the options.\");\r\n }\r\n\r\n const scopes = new ScopeSet(request.scopes).printScopes();\r\n const expiresOn = options.expiresOn || (response.expires_in + new Date().getTime() / 1000);\r\n const extendedExpiresOn = options.extendedExpiresOn;\r\n\r\n const accessTokenEntity = AccessTokenEntity.createAccessTokenEntity(homeAccountId, environment, response.access_token, this.config.auth.clientId, tenantId, scopes, expiresOn, extendedExpiresOn, this.cryptoObj);\r\n\r\n if (this.isBrowserEnvironment) {\r\n this.logger.verbose(\"TokenCache - loading access token\");\r\n this.storage.setAccessTokenCredential(accessTokenEntity);\r\n return accessTokenEntity;\r\n } else {\r\n throw BrowserAuthError.createUnableToLoadTokenError(\"loadExternalTokens is designed to work in browser environments only.\");\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to load refresh tokens to msal-browser cache\r\n * @param request\r\n * @param response\r\n * @param homeAccountId\r\n * @param environment\r\n * @returns `RefreshTokenEntity`\r\n */\r\n private loadRefreshToken(request: SilentRequest, response: ExternalTokenResponse, homeAccountId: string, environment: string): RefreshTokenEntity | null {\r\n\r\n if (!response.refresh_token) {\r\n this.logger.verbose(\"TokenCache - No refresh token provided for caching\");\r\n return null;\r\n }\r\n\r\n const refreshTokenEntity = RefreshTokenEntity.createRefreshTokenEntity(homeAccountId, environment, response.refresh_token, this.config.auth.clientId);\r\n\r\n if (this.isBrowserEnvironment) {\r\n this.logger.verbose(\"TokenCache - loading refresh token\");\r\n this.storage.setRefreshTokenCredential(refreshTokenEntity);\r\n return refreshTokenEntity;\r\n } else {\r\n throw BrowserAuthError.createUnableToLoadTokenError(\"loadExternalTokens is designed to work in browser environments only.\");\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to generate an `AuthenticationResult` for the result.\r\n * @param request\r\n * @param idTokenObj\r\n * @param cacheRecord\r\n * @param authority\r\n * @returns `AuthenticationResult`\r\n */\r\n private generateAuthenticationResult(\r\n request: SilentRequest,\r\n idTokenObj: AuthToken,\r\n cacheRecord?: CacheRecord,\r\n authority?: Authority,\r\n ): AuthenticationResult {\r\n let accessToken: string = Constants.EMPTY_STRING;\r\n let responseScopes: Array = [];\r\n let expiresOn: Date | null = null;\r\n let extExpiresOn: Date | undefined;\r\n\r\n if (cacheRecord?.accessToken) {\r\n accessToken = cacheRecord.accessToken.secret;\r\n responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray();\r\n expiresOn = new Date(Number(cacheRecord.accessToken.expiresOn) * 1000);\r\n extExpiresOn = new Date(Number(cacheRecord.accessToken.extendedExpiresOn) * 1000);\r\n }\r\n\r\n const uid = idTokenObj?.claims.oid || idTokenObj?.claims.sub || Constants.EMPTY_STRING;\r\n const tid = idTokenObj?.claims.tid || Constants.EMPTY_STRING;\r\n\r\n return {\r\n authority: authority ? authority.canonicalAuthority : Constants.EMPTY_STRING,\r\n uniqueId: uid,\r\n tenantId: tid,\r\n scopes: responseScopes,\r\n account: cacheRecord?.account ? cacheRecord.account.getAccountInfo() : null,\r\n idToken: idTokenObj ? idTokenObj.rawToken : Constants.EMPTY_STRING,\r\n idTokenClaims: idTokenObj ? idTokenObj.claims : {},\r\n accessToken: accessToken,\r\n fromCache: true,\r\n expiresOn: expiresOn,\r\n correlationId: request.correlationId || Constants.EMPTY_STRING,\r\n requestId: Constants.EMPTY_STRING,\r\n extExpiresOn: extExpiresOn,\r\n familyId: Constants.EMPTY_STRING,\r\n tokenType: cacheRecord?.accessToken?.tokenType || Constants.EMPTY_STRING,\r\n state: Constants.EMPTY_STRING,\r\n cloudGraphHostName: cacheRecord?.account?.cloudGraphHostName || Constants.EMPTY_STRING,\r\n msGraphHost: cacheRecord?.account?.msGraphHost || Constants.EMPTY_STRING,\r\n code: undefined,\r\n fromNativeBroker: false\r\n };\r\n }\r\n}\r\n\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthorizationCodeClient, ClientConfiguration } from \"@azure/msal-common\";\r\n\r\nexport class HybridSpaAuthorizationCodeClient extends AuthorizationCodeClient {\r\n constructor(config: ClientConfiguration) {\r\n super(config);\r\n this.includeRedirectUri = false;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthenticationResult, ICrypto, Logger, CommonAuthorizationCodeRequest, AuthError, Constants, IPerformanceClient, PerformanceEvents } from \"@azure/msal-common\";\r\nimport { StandardInteractionClient } from \"./StandardInteractionClient\";\r\nimport { AuthorizationUrlRequest } from \"../request/AuthorizationUrlRequest\";\r\nimport { BrowserConfiguration } from \"../config/Configuration\";\r\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\r\nimport { EventHandler } from \"../event/EventHandler\";\r\nimport { INavigationClient } from \"../navigation/INavigationClient\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { InteractionType, ApiId } from \"../utils/BrowserConstants\";\r\nimport { SilentHandler } from \"../interaction_handler/SilentHandler\";\r\nimport { AuthorizationCodeRequest } from \"../request/AuthorizationCodeRequest\";\r\nimport { HybridSpaAuthorizationCodeClient } from \"./HybridSpaAuthorizationCodeClient\";\r\nimport { NativeMessageHandler } from \"../broker/nativeBroker/NativeMessageHandler\";\r\n\r\nexport class SilentAuthCodeClient extends StandardInteractionClient {\r\n private apiId: ApiId;\r\n\r\n constructor(config: BrowserConfiguration, storageImpl: BrowserCacheManager, browserCrypto: ICrypto, logger: Logger, eventHandler: EventHandler, navigationClient: INavigationClient, apiId: ApiId, performanceClient: IPerformanceClient, nativeMessageHandler?: NativeMessageHandler, correlationId?: string) {\r\n super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeMessageHandler, correlationId);\r\n this.apiId = apiId;\r\n }\r\n\r\n /**\r\n * Acquires a token silently by redeeming an authorization code against the /token endpoint\r\n * @param request\r\n */\r\n async acquireToken(request: AuthorizationCodeRequest): Promise {\r\n this.logger.trace(\"SilentAuthCodeClient.acquireToken called\");\r\n\r\n // Auth code payload is required\r\n if (!request.code) {\r\n throw BrowserAuthError.createAuthCodeRequiredError();\r\n\r\n }\r\n\r\n // Create silent request\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, request.correlationId);\r\n const silentRequest: AuthorizationUrlRequest = await this.initializeAuthorizationRequest(request, InteractionType.Silent);\r\n this.browserStorage.updateCacheEntries(silentRequest.state, silentRequest.nonce, silentRequest.authority, silentRequest.loginHint || Constants.EMPTY_STRING, silentRequest.account || null);\r\n\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId);\r\n\r\n try {\r\n\r\n // Create auth code request (PKCE not needed)\r\n const authCodeRequest: CommonAuthorizationCodeRequest = {\r\n ...silentRequest,\r\n code: request.code\r\n };\r\n\r\n // Initialize the client\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientGetClientConfiguration, request.correlationId);\r\n const clientConfig = await this.getClientConfiguration(serverTelemetryManager, silentRequest.authority);\r\n const authClient: HybridSpaAuthorizationCodeClient = new HybridSpaAuthorizationCodeClient(clientConfig);\r\n this.logger.verbose(\"Auth code client created\");\r\n\r\n // Create silent handler\r\n const silentHandler = new SilentHandler(authClient, this.browserStorage, authCodeRequest, this.logger, this.config.system, this.performanceClient);\r\n\r\n // Handle auth code parameters from request\r\n return silentHandler.handleCodeResponseFromServer(\r\n {\r\n code: request.code,\r\n msgraph_host: request.msGraphHost,\r\n cloud_graph_host_name: request.cloudGraphHostName,\r\n cloud_instance_host_name: request.cloudInstanceHostName\r\n },\r\n silentRequest.state,\r\n authClient.authority,\r\n this.networkClient,\r\n false\r\n );\r\n } catch (e) {\r\n if (e instanceof AuthError) {\r\n (e as AuthError).setCorrelationId(this.correlationId);\r\n }\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n this.browserStorage.cleanRequestByState(silentRequest.state);\r\n throw e;\r\n }\r\n }\r\n\r\n /**\r\n * Currently Unsupported\r\n */\r\n logout(): Promise {\r\n // Synchronous so we must reject\r\n return Promise.reject(BrowserAuthError.createSilentLogoutUnsupportedError());\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { IPerformanceMeasurement, SubMeasurement } from \"@azure/msal-common\";\r\n\r\nexport class BrowserPerformanceMeasurement implements IPerformanceMeasurement {\r\n private readonly measureName: string;\r\n private readonly correlationId: string;\r\n private readonly startMark: string;\r\n private readonly endMark: string;\r\n\r\n constructor(name: string, correlationId: string) {\r\n this.correlationId = correlationId;\r\n this.measureName = BrowserPerformanceMeasurement.makeMeasureName(name, correlationId);\r\n this.startMark = BrowserPerformanceMeasurement.makeStartMark(name, correlationId);\r\n this.endMark = BrowserPerformanceMeasurement.makeEndMark(name, correlationId);\r\n }\r\n\r\n private static makeMeasureName(name: string, correlationId: string) {\r\n return `msal.measure.${name}.${correlationId}`;\r\n }\r\n\r\n private static makeStartMark(name: string, correlationId: string) {\r\n return `msal.start.${name}.${correlationId}`;\r\n }\r\n\r\n private static makeEndMark(name: string, correlationId: string) {\r\n return `msal.end.${name}.${correlationId}`;\r\n }\r\n\r\n static supportsBrowserPerformance(): boolean {\r\n return typeof window !== \"undefined\" &&\r\n typeof window.performance !== \"undefined\" &&\r\n typeof window.performance.mark === \"function\" &&\r\n typeof window.performance.measure === \"function\" &&\r\n typeof window.performance.clearMarks === \"function\" &&\r\n typeof window.performance.clearMeasures === \"function\" &&\r\n typeof window.performance.getEntriesByName === \"function\";\r\n }\r\n\r\n /**\r\n * Flush browser marks and measurements.\r\n * @param {string} correlationId\r\n * @param {SubMeasurement} measurements\r\n */\r\n public static flushMeasurements(correlationId: string, measurements: SubMeasurement[]): void {\r\n if (BrowserPerformanceMeasurement.supportsBrowserPerformance()) {\r\n try {\r\n measurements.forEach((measurement) => {\r\n const measureName = BrowserPerformanceMeasurement.makeMeasureName(measurement.name, correlationId);\r\n const entriesForMeasurement = window.performance.getEntriesByName(measureName, \"measure\");\r\n if (entriesForMeasurement.length > 0) {\r\n window.performance.clearMeasures(measureName);\r\n window.performance.clearMarks(BrowserPerformanceMeasurement.makeStartMark(measureName, correlationId));\r\n window.performance.clearMarks(BrowserPerformanceMeasurement.makeEndMark(measureName, correlationId));\r\n }\r\n });\r\n } catch (e) {\r\n // Silently catch and return null\r\n }\r\n }\r\n }\r\n\r\n startMeasurement(): void {\r\n if (BrowserPerformanceMeasurement.supportsBrowserPerformance()) {\r\n try {\r\n window.performance.mark(this.startMark);\r\n } catch (e) {\r\n // Silently catch\r\n }\r\n }\r\n }\r\n\r\n endMeasurement():void {\r\n if (BrowserPerformanceMeasurement.supportsBrowserPerformance()) {\r\n try {\r\n window.performance.mark(this.endMark);\r\n window.performance.measure(this.measureName, this.startMark, this.endMark);\r\n } catch (e) {\r\n // Silently catch\r\n }\r\n }\r\n }\r\n\r\n flushMeasurement(): number | null {\r\n if (BrowserPerformanceMeasurement.supportsBrowserPerformance()) {\r\n try {\r\n const entriesForMeasurement = window.performance.getEntriesByName(this.measureName, \"measure\");\r\n if (entriesForMeasurement.length > 0) {\r\n const durationMs = entriesForMeasurement[0].duration;\r\n window.performance.clearMeasures(this.measureName);\r\n window.performance.clearMarks(this.startMark);\r\n window.performance.clearMarks(this.endMark);\r\n return durationMs;\r\n }\r\n } catch (e) {\r\n // Silently catch and return null\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport {\r\n Logger,\r\n PerformanceEvent,\r\n PerformanceEvents,\r\n IPerformanceClient,\r\n PerformanceClient,\r\n IPerformanceMeasurement,\r\n InProgressPerformanceEvent,\r\n ApplicationTelemetry,\r\n SubMeasurement,\r\n PreQueueEvent\r\n} from \"@azure/msal-common\";\r\nimport { CryptoOptions } from \"../config/Configuration\";\r\nimport { BrowserCrypto } from \"../crypto/BrowserCrypto\";\r\nimport { GuidGenerator } from \"../crypto/GuidGenerator\";\r\nimport { BrowserPerformanceMeasurement } from \"./BrowserPerformanceMeasurement\";\r\n\r\nexport class BrowserPerformanceClient extends PerformanceClient implements IPerformanceClient {\r\n private browserCrypto: BrowserCrypto;\r\n private guidGenerator: GuidGenerator;\r\n\r\n constructor(clientId: string, authority: string, logger: Logger, libraryName: string, libraryVersion: string, applicationTelemetry: ApplicationTelemetry, cryptoOptions: CryptoOptions) {\r\n super(clientId, authority, logger, libraryName, libraryVersion, applicationTelemetry);\r\n this.browserCrypto = new BrowserCrypto(this.logger, cryptoOptions);\r\n this.guidGenerator = new GuidGenerator(this.browserCrypto);\r\n }\r\n\r\n startPerformanceMeasuremeant(measureName: string, correlationId: string): IPerformanceMeasurement {\r\n return new BrowserPerformanceMeasurement(measureName, correlationId);\r\n }\r\n\r\n generateId() : string {\r\n return this.guidGenerator.generateGuid();\r\n }\r\n\r\n private getPageVisibility(): string | null {\r\n return document.visibilityState?.toString() || null;\r\n }\r\n\r\n private deleteIncompleteSubMeasurements(inProgressEvent: InProgressPerformanceEvent): void {\r\n const rootEvent = this.eventsByCorrelationId.get(inProgressEvent.event.correlationId);\r\n const isRootEvent = rootEvent && rootEvent.eventId === inProgressEvent.event.eventId;\r\n const incompleteMeasurements: SubMeasurement[] = [];\r\n if (isRootEvent && rootEvent?.incompleteSubMeasurements) {\r\n rootEvent.incompleteSubMeasurements.forEach((subMeasurement) => {\r\n incompleteMeasurements.push({...subMeasurement});\r\n });\r\n }\r\n // Clean up remaining marks for incomplete sub-measurements\r\n if (incompleteMeasurements.length > 0) {\r\n BrowserPerformanceMeasurement.flushMeasurements(inProgressEvent.event.correlationId, incompleteMeasurements);\r\n }\r\n }\r\n\r\n supportsBrowserPerformanceNow(): boolean {\r\n return typeof window !== \"undefined\" &&\r\n typeof window.performance !== \"undefined\" &&\r\n typeof window.performance.now === \"function\";\r\n }\r\n\r\n /**\r\n * Starts measuring performance for a given operation. Returns a function that should be used to end the measurement.\r\n * Also captures browser page visibilityState.\r\n *\r\n * @param {PerformanceEvents} measureName\r\n * @param {?string} [correlationId]\r\n * @returns {((event?: Partial) => PerformanceEvent| null)}\r\n */\r\n startMeasurement(measureName: PerformanceEvents, correlationId?: string): InProgressPerformanceEvent {\r\n // Capture page visibilityState and then invoke start/end measurement\r\n const startPageVisibility = this.getPageVisibility();\r\n\r\n const inProgressEvent = super.startMeasurement(measureName, correlationId);\r\n\r\n return {\r\n ...inProgressEvent,\r\n endMeasurement: (event?: Partial): PerformanceEvent | null => {\r\n const res = inProgressEvent.endMeasurement({\r\n startPageVisibility,\r\n endPageVisibility: this.getPageVisibility(),\r\n ...event\r\n });\r\n this.deleteIncompleteSubMeasurements(inProgressEvent);\r\n\r\n return res;\r\n },\r\n discardMeasurement: () => {\r\n inProgressEvent.discardMeasurement();\r\n this.deleteIncompleteSubMeasurements(inProgressEvent);\r\n inProgressEvent.measurement.flushMeasurement();\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds pre-queue time to preQueueTimeByCorrelationId map.\r\n * @param {PerformanceEvents} eventName\r\n * @param {?string} correlationId\r\n * @returns\r\n */\r\n setPreQueueTime(eventName: PerformanceEvents, correlationId?: string): void {\r\n if (!this.supportsBrowserPerformanceNow()) {\r\n this.logger.trace(`BrowserPerformanceClient: window performance API not available, unable to set telemetry queue time for ${eventName}`);\r\n return;\r\n }\r\n\r\n if (!correlationId) {\r\n this.logger.trace(`BrowserPerformanceClient: correlationId for ${eventName} not provided, unable to set telemetry queue time`);\r\n return;\r\n }\r\n\r\n const preQueueEvent: PreQueueEvent | undefined = this.preQueueTimeByCorrelationId.get(correlationId);\r\n /**\r\n * Manually complete queue measurement if there is an incomplete pre-queue event.\r\n * Incomplete pre-queue events are instrumentation bugs that should be fixed.\r\n */\r\n if (preQueueEvent) {\r\n this.logger.trace(`BrowserPerformanceClient: Incomplete pre-queue ${preQueueEvent.name} found`, correlationId);\r\n this.addQueueMeasurement(preQueueEvent.name, correlationId, undefined, true);\r\n }\r\n this.preQueueTimeByCorrelationId.set(correlationId, { name: eventName, time: window.performance.now() });\r\n }\r\n\r\n /**\r\n * Calculates and adds queue time measurement for given performance event.\r\n *\r\n * @param {PerformanceEvents} eventName\r\n * @param {?string} correlationId\r\n * @param {?number} queueTime\r\n * @param {?boolean} manuallyCompleted - indicator for manually completed queue measurements\r\n * @returns\r\n */\r\n addQueueMeasurement(eventName: PerformanceEvents, correlationId?: string, queueTime?: number, manuallyCompleted?: boolean): void {\r\n if (!this.supportsBrowserPerformanceNow()) {\r\n this.logger.trace(`BrowserPerformanceClient: window performance API not available, unable to add queue measurement for ${eventName}`);\r\n return;\r\n }\r\n\r\n if (!correlationId) {\r\n this.logger.trace(`BrowserPerformanceClient: correlationId for ${eventName} not provided, unable to add queue measurement`);\r\n return;\r\n }\r\n\r\n const preQueueTime = super.getPreQueueTime(eventName, correlationId);\r\n if (!preQueueTime) {\r\n return;\r\n }\r\n\r\n const currentTime = window.performance.now();\r\n const resQueueTime = queueTime || super.calculateQueuedTime(preQueueTime, currentTime);\r\n\r\n return super.addQueueMeasurement(eventName, correlationId, resQueueTime, manuallyCompleted);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { CryptoOps } from \"../crypto/CryptoOps\";\r\nimport { InteractionRequiredAuthError, AccountInfo, Constants, INetworkModule, AuthenticationResult, Logger, CommonSilentFlowRequest, ICrypto, DEFAULT_CRYPTO_IMPLEMENTATION, AuthError, PerformanceEvents, PerformanceCallbackFunction, StubPerformanceClient, IPerformanceClient, BaseAuthRequest, PromptValue, ClientAuthError, InProgressPerformanceEvent } from \"@azure/msal-common\";\r\nimport { BrowserCacheManager, DEFAULT_BROWSER_CACHE_MANAGER } from \"../cache/BrowserCacheManager\";\r\nimport { BrowserConfiguration, buildConfiguration, CacheOptions, Configuration } from \"../config/Configuration\";\r\nimport { InteractionType, ApiId, BrowserCacheLocation, WrapperSKU, TemporaryCacheKeys, CacheLookupPolicy } from \"../utils/BrowserConstants\";\r\nimport { BrowserUtils } from \"../utils/BrowserUtils\";\r\nimport { RedirectRequest } from \"../request/RedirectRequest\";\r\nimport { PopupRequest } from \"../request/PopupRequest\";\r\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest\";\r\nimport { version, name } from \"../packageMetadata\";\r\nimport { EventCallbackFunction } from \"../event/EventMessage\";\r\nimport { EventType } from \"../event/EventType\";\r\nimport { EndSessionRequest } from \"../request/EndSessionRequest\";\r\nimport { BrowserConfigurationAuthError } from \"../error/BrowserConfigurationAuthError\";\r\nimport { EndSessionPopupRequest } from \"../request/EndSessionPopupRequest\";\r\nimport { INavigationClient } from \"../navigation/INavigationClient\";\r\nimport { EventHandler } from \"../event/EventHandler\";\r\nimport { PopupClient } from \"../interaction_client/PopupClient\";\r\nimport { RedirectClient } from \"../interaction_client/RedirectClient\";\r\nimport { SilentIframeClient } from \"../interaction_client/SilentIframeClient\";\r\nimport { SilentRefreshClient } from \"../interaction_client/SilentRefreshClient\";\r\nimport { TokenCache } from \"../cache/TokenCache\";\r\nimport { ITokenCache } from \"../cache/ITokenCache\";\r\nimport { NativeInteractionClient } from \"../interaction_client/NativeInteractionClient\";\r\nimport { NativeMessageHandler } from \"../broker/nativeBroker/NativeMessageHandler\";\r\nimport { SilentRequest } from \"../request/SilentRequest\";\r\nimport { NativeAuthError } from \"../error/NativeAuthError\";\r\nimport { SilentCacheClient } from \"../interaction_client/SilentCacheClient\";\r\nimport { SilentAuthCodeClient } from \"../interaction_client/SilentAuthCodeClient\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { AuthorizationCodeRequest } from \"../request/AuthorizationCodeRequest\";\r\nimport { NativeTokenRequest } from \"../broker/nativeBroker/NativeRequest\";\r\nimport { BrowserPerformanceClient } from \"../telemetry/BrowserPerformanceClient\";\r\n\r\nexport abstract class ClientApplication {\r\n\r\n // Crypto interface implementation\r\n protected readonly browserCrypto: ICrypto;\r\n\r\n // Storage interface implementation\r\n protected readonly browserStorage: BrowserCacheManager;\r\n\r\n // Native Cache in memory storage implementation\r\n protected readonly nativeInternalStorage: BrowserCacheManager;\r\n\r\n // Network interface implementation\r\n protected readonly networkClient: INetworkModule;\r\n\r\n // Navigation interface implementation\r\n protected navigationClient: INavigationClient;\r\n\r\n // Input configuration by developer/user\r\n protected config: BrowserConfiguration;\r\n\r\n // Token cache implementation\r\n private tokenCache: TokenCache;\r\n\r\n // Logger\r\n protected logger: Logger;\r\n\r\n // Flag to indicate if in browser environment\r\n protected isBrowserEnvironment: boolean;\r\n\r\n protected eventHandler: EventHandler;\r\n\r\n // Redirect Response Object\r\n protected redirectResponse: Map>;\r\n\r\n // Native Extension Provider\r\n protected nativeExtensionProvider: NativeMessageHandler | undefined;\r\n\r\n // Hybrid auth code responses\r\n private hybridAuthCodeResponses: Map>;\r\n\r\n // Performance telemetry client\r\n protected performanceClient: IPerformanceClient;\r\n\r\n // Flag representing whether or not the initialize API has been called and completed\r\n protected initialized: boolean;\r\n\r\n private ssoSilentMeasurement?: InProgressPerformanceEvent;\r\n private acquireTokenByCodeAsyncMeasurement?: InProgressPerformanceEvent;\r\n /**\r\n * @constructor\r\n * Constructor for the PublicClientApplication used to instantiate the PublicClientApplication object\r\n *\r\n * Important attributes in the Configuration object for auth are:\r\n * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview\r\n * - authority: the authority URL for your application.\r\n * - redirect_uri: the uri of your application registered in the portal.\r\n *\r\n * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens.\r\n * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here}\r\n * If your application supports Accounts in one organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com).\r\n * If your application supports Accounts in any organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with organizations.\r\n * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace \"Enter_the_Tenant_Info_Here\" value with common.\r\n * To restrict support to Personal Microsoft accounts only, replace \"Enter_the_Tenant_Info_Here\" value with consumers.\r\n *\r\n * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/\r\n * Full B2C functionality will be available in this library in future versions.\r\n *\r\n * @param configuration Object for the MSAL PublicClientApplication instance\r\n */\r\n constructor(configuration: Configuration) {\r\n /*\r\n * If loaded in an environment where window is not available,\r\n * set internal flag to false so that further requests fail.\r\n * This is to support server-side rendering environments.\r\n */\r\n this.isBrowserEnvironment = typeof window !== \"undefined\";\r\n // Set the configuration.\r\n this.config = buildConfiguration(configuration, this.isBrowserEnvironment);\r\n this.initialized = false;\r\n\r\n // Initialize logger\r\n this.logger = new Logger(this.config.system.loggerOptions, name, version);\r\n\r\n // Initialize the network module class.\r\n this.networkClient = this.config.system.networkClient;\r\n\r\n // Initialize the navigation client class.\r\n this.navigationClient = this.config.system.navigationClient;\r\n\r\n // Initialize redirectResponse Map\r\n this.redirectResponse = new Map();\r\n\r\n // Initial hybrid spa map\r\n this.hybridAuthCodeResponses = new Map();\r\n\r\n // Initialize performance client\r\n this.performanceClient = this.isBrowserEnvironment ?\r\n new BrowserPerformanceClient(this.config.auth.clientId, this.config.auth.authority, this.logger, name, version, this.config.telemetry.application, this.config.system.cryptoOptions) :\r\n new StubPerformanceClient(this.config.auth.clientId, this.config.auth.authority, this.logger, name, version, this.config.telemetry.application);\r\n\r\n // Initialize the crypto class.\r\n this.browserCrypto = this.isBrowserEnvironment ? new CryptoOps(this.logger, this.performanceClient, this.config.system.cryptoOptions) : DEFAULT_CRYPTO_IMPLEMENTATION;\r\n\r\n this.eventHandler = new EventHandler(this.logger, this.browserCrypto);\r\n\r\n // Initialize the browser storage class.\r\n this.browserStorage = this.isBrowserEnvironment ?\r\n new BrowserCacheManager(this.config.auth.clientId, this.config.cache, this.browserCrypto, this.logger) :\r\n DEFAULT_BROWSER_CACHE_MANAGER(this.config.auth.clientId, this.logger);\r\n\r\n // initialize in memory storage for native flows\r\n const nativeCacheOptions: Required = {\r\n cacheLocation: BrowserCacheLocation.MemoryStorage,\r\n temporaryCacheLocation: BrowserCacheLocation.MemoryStorage,\r\n storeAuthStateInCookie: false,\r\n secureCookies: false,\r\n cacheMigrationEnabled: false,\r\n claimsBasedCachingEnabled: true\r\n };\r\n this.nativeInternalStorage = new BrowserCacheManager(this.config.auth.clientId, nativeCacheOptions, this.browserCrypto, this.logger);\r\n\r\n // Initialize the token cache\r\n this.tokenCache = new TokenCache(this.config, this.browserStorage, this.logger, this.browserCrypto);\r\n // Register listener functions\r\n this.trackPageVisibilityWithMeasurement = this.trackPageVisibilityWithMeasurement.bind(this);\r\n }\r\n\r\n /**\r\n * Initializer function to perform async startup tasks such as connecting to WAM extension\r\n */\r\n async initialize(): Promise {\r\n this.logger.trace(\"initialize called\");\r\n if (this.initialized) {\r\n this.logger.info(\"initialize has already been called, exiting early.\");\r\n return;\r\n }\r\n\r\n const allowNativeBroker = this.config.system.allowNativeBroker;\r\n const initMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.InitializeClientApplication);\r\n this.eventHandler.emitEvent(EventType.INITIALIZE_START);\r\n\r\n if (allowNativeBroker) {\r\n try {\r\n this.nativeExtensionProvider = await NativeMessageHandler.createProvider(this.logger, this.config.system.nativeBrokerHandshakeTimeout, this.performanceClient);\r\n } catch (e) {\r\n this.logger.verbose(e);\r\n }\r\n }\r\n this.initialized = true;\r\n this.eventHandler.emitEvent(EventType.INITIALIZE_END);\r\n\r\n initMeasurement.endMeasurement({allowNativeBroker, success: true});\r\n }\r\n\r\n // #region Redirect Flow\r\n\r\n /**\r\n * Event handler function which allows users to fire events after the PublicClientApplication object\r\n * has loaded during redirect flows. This should be invoked on all page loads involved in redirect\r\n * auth flows.\r\n * @param hash Hash to process. Defaults to the current value of window.location.hash. Only needs to be provided explicitly if the response to be handled is not contained in the current value.\r\n * @returns Token response or null. If the return value is null, then no auth redirect was detected.\r\n */\r\n async handleRedirectPromise(hash?: string): Promise {\r\n this.logger.verbose(\"handleRedirectPromise called\");\r\n // Block token acquisition before initialize has been called if native brokering is enabled\r\n BrowserUtils.blockNativeBrokerCalledBeforeInitialized(this.config.system.allowNativeBroker, this.initialized);\r\n\r\n const loggedInAccounts = this.getAllAccounts();\r\n if (this.isBrowserEnvironment) {\r\n /**\r\n * Store the promise on the PublicClientApplication instance if this is the first invocation of handleRedirectPromise,\r\n * otherwise return the promise from the first invocation. Prevents race conditions when handleRedirectPromise is called\r\n * several times concurrently.\r\n */\r\n const redirectResponseKey = hash || Constants.EMPTY_STRING;\r\n let response = this.redirectResponse.get(redirectResponseKey);\r\n if (typeof response === \"undefined\") {\r\n this.eventHandler.emitEvent(EventType.HANDLE_REDIRECT_START, InteractionType.Redirect);\r\n this.logger.verbose(\"handleRedirectPromise has been called for the first time, storing the promise\");\r\n\r\n const request: NativeTokenRequest | null = this.browserStorage.getCachedNativeRequest();\r\n let redirectResponse: Promise;\r\n if (request && NativeMessageHandler.isNativeAvailable(this.config, this.logger, this.nativeExtensionProvider) && this.nativeExtensionProvider && !hash) {\r\n this.logger.trace(\"handleRedirectPromise - acquiring token from native platform\");\r\n const nativeClient = new NativeInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.handleRedirectPromise, this.performanceClient, this.nativeExtensionProvider, request.accountId, this.nativeInternalStorage, request.correlationId);\r\n redirectResponse = nativeClient.handleRedirectPromise();\r\n } else {\r\n this.logger.trace(\"handleRedirectPromise - acquiring token from web flow\");\r\n const correlationId = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.CORRELATION_ID, true) || Constants.EMPTY_STRING;\r\n const redirectClient = this.createRedirectClient(correlationId);\r\n redirectResponse = redirectClient.handleRedirectPromise(hash);\r\n }\r\n\r\n response = redirectResponse.then((result: AuthenticationResult | null) => {\r\n if (result) {\r\n // Emit login event if number of accounts change\r\n\r\n const isLoggingIn = loggedInAccounts.length < this.getAllAccounts().length;\r\n if (isLoggingIn) {\r\n this.eventHandler.emitEvent(EventType.LOGIN_SUCCESS, InteractionType.Redirect, result);\r\n this.logger.verbose(\"handleRedirectResponse returned result, login success\");\r\n } else {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Redirect, result);\r\n this.logger.verbose(\"handleRedirectResponse returned result, acquire token success\");\r\n }\r\n }\r\n this.eventHandler.emitEvent(EventType.HANDLE_REDIRECT_END, InteractionType.Redirect);\r\n\r\n return result;\r\n }).catch((e) => {\r\n // Emit login event if there is an account\r\n if (loggedInAccounts.length > 0) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Redirect, null, e);\r\n } else {\r\n this.eventHandler.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Redirect, null, e);\r\n }\r\n this.eventHandler.emitEvent(EventType.HANDLE_REDIRECT_END, InteractionType.Redirect);\r\n\r\n throw e;\r\n });\r\n this.redirectResponse.set(redirectResponseKey, response);\r\n } else {\r\n this.logger.verbose(\"handleRedirectPromise has been called previously, returning the result from the first call\");\r\n }\r\n\r\n return response;\r\n }\r\n this.logger.verbose(\"handleRedirectPromise returns null, not browser environment\");\r\n return null;\r\n }\r\n\r\n /**\r\n * Use when you want to obtain an access_token for your API by redirecting the user's browser window to the authorization endpoint. This function redirects\r\n * the page, so any code that follows this function will not execute.\r\n *\r\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n *\r\n * @param request\r\n */\r\n async acquireTokenRedirect(request: RedirectRequest): Promise {\r\n // Preflight request\r\n const correlationId = this.getRequestCorrelationId(request);\r\n this.logger.verbose(\"acquireTokenRedirect called\", correlationId);\r\n this.preflightBrowserEnvironmentCheck(InteractionType.Redirect);\r\n\r\n // If logged in, emit acquire token events\r\n const isLoggedIn = this.getAllAccounts().length > 0;\r\n if (isLoggedIn) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Redirect, request);\r\n } else {\r\n this.eventHandler.emitEvent(EventType.LOGIN_START, InteractionType.Redirect, request);\r\n }\r\n\r\n let result: Promise;\r\n\r\n if (this.nativeExtensionProvider && this.canUseNative(request)) {\r\n const nativeClient = new NativeInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.acquireTokenRedirect, this.performanceClient, this.nativeExtensionProvider, this.getNativeAccountId(request), this.nativeInternalStorage, request.correlationId);\r\n result = nativeClient.acquireTokenRedirect(request).catch((e: AuthError) => {\r\n if (e instanceof NativeAuthError && e.isFatal()) {\r\n this.nativeExtensionProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\r\n const redirectClient = this.createRedirectClient(request.correlationId);\r\n return redirectClient.acquireToken(request);\r\n } else if (e instanceof InteractionRequiredAuthError) {\r\n this.logger.verbose(\"acquireTokenRedirect - Resolving interaction required error thrown by native broker by falling back to web flow\");\r\n const redirectClient = this.createRedirectClient(request.correlationId);\r\n return redirectClient.acquireToken(request);\r\n }\r\n this.browserStorage.setInteractionInProgress(false);\r\n throw e;\r\n });\r\n } else {\r\n const redirectClient = this.createRedirectClient(request.correlationId);\r\n result = redirectClient.acquireToken(request);\r\n }\r\n\r\n return result.catch((e) => {\r\n // If logged in, emit acquire token events\r\n if (isLoggedIn) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Redirect, null, e);\r\n } else {\r\n this.eventHandler.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Redirect, null, e);\r\n }\r\n throw e;\r\n });\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Popup Flow\r\n\r\n /**\r\n * Use when you want to obtain an access_token for your API via opening a popup window in the user's browser\r\n *\r\n * @param request\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n acquireTokenPopup(request: PopupRequest): Promise {\r\n const correlationId = this.getRequestCorrelationId(request);\r\n const atPopupMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenPopup, correlationId);\r\n\r\n try {\r\n this.logger.verbose(\"acquireTokenPopup called\", correlationId);\r\n this.preflightBrowserEnvironmentCheck(InteractionType.Popup);\r\n } catch (e) {\r\n // Since this function is syncronous we need to reject\r\n return Promise.reject(e);\r\n }\r\n\r\n // If logged in, emit acquire token events\r\n const loggedInAccounts = this.getAllAccounts();\r\n if (loggedInAccounts.length > 0) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Popup, request);\r\n } else {\r\n this.eventHandler.emitEvent(EventType.LOGIN_START, InteractionType.Popup, request);\r\n }\r\n\r\n let result: Promise;\r\n\r\n if (this.canUseNative(request)) {\r\n result = this.acquireTokenNative(request, ApiId.acquireTokenPopup).then((response) => {\r\n this.browserStorage.setInteractionInProgress(false);\r\n atPopupMeasurement.endMeasurement({\r\n success: true,\r\n isNativeBroker: true,\r\n requestId: response.requestId\r\n });\r\n return response;\r\n }).catch((e: AuthError) => {\r\n if (e instanceof NativeAuthError && e.isFatal()) {\r\n this.nativeExtensionProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\r\n const popupClient = this.createPopupClient(request.correlationId);\r\n return popupClient.acquireToken(request);\r\n } else if (e instanceof InteractionRequiredAuthError) {\r\n this.logger.verbose(\"acquireTokenPopup - Resolving interaction required error thrown by native broker by falling back to web flow\");\r\n const popupClient = this.createPopupClient(request.correlationId);\r\n return popupClient.acquireToken(request);\r\n }\r\n this.browserStorage.setInteractionInProgress(false);\r\n throw e;\r\n });\r\n } else {\r\n const popupClient = this.createPopupClient(request.correlationId);\r\n result = popupClient.acquireToken(request);\r\n }\r\n\r\n return result.then((result) => {\r\n\r\n /*\r\n * If logged in, emit acquire token events\r\n */\r\n const isLoggingIn = loggedInAccounts.length < this.getAllAccounts().length;\r\n if (isLoggingIn) {\r\n this.eventHandler.emitEvent(EventType.LOGIN_SUCCESS, InteractionType.Popup, result);\r\n } else {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Popup, result);\r\n }\r\n\r\n atPopupMeasurement.addStaticFields({\r\n accessTokenSize: result.accessToken.length,\r\n idTokenSize: result.idToken.length\r\n });\r\n atPopupMeasurement.endMeasurement({\r\n success: true,\r\n requestId: result.requestId\r\n });\r\n return result;\r\n }).catch((e: AuthError) => {\r\n if (loggedInAccounts.length > 0) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Popup, null, e);\r\n } else {\r\n this.eventHandler.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Popup, null, e);\r\n }\r\n\r\n atPopupMeasurement.endMeasurement({\r\n errorCode: e.errorCode,\r\n subErrorCode: e.subError,\r\n success: false\r\n });\r\n // Since this function is syncronous we need to reject\r\n return Promise.reject(e);\r\n });\r\n }\r\n\r\n private trackPageVisibilityWithMeasurement():void {\r\n const measurement = this.ssoSilentMeasurement || this.acquireTokenByCodeAsyncMeasurement;\r\n if(!measurement) {\r\n return;\r\n }\r\n\r\n this.logger.info(\"Perf: Visibility change detected in \", measurement.event.name);\r\n measurement.increment({\r\n visibilityChangeCount: 1,\r\n });\r\n }\r\n // #endregion\r\n\r\n // #region Silent Flow\r\n\r\n /**\r\n * This function uses a hidden iframe to fetch an authorization code from the eSTS. There are cases where this may not work:\r\n * - Any browser using a form of Intelligent Tracking Prevention\r\n * - If there is not an established session with the service\r\n *\r\n * In these cases, the request must be done inside a popup or full frame redirect.\r\n *\r\n * For the cases where interaction is required, you cannot send a request with prompt=none.\r\n *\r\n * If your refresh token has expired, you can use this function to fetch a new set of tokens silently as long as\r\n * you session on the server still exists.\r\n * @param request {@link SsoSilentRequest}\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n async ssoSilent(request: SsoSilentRequest): Promise {\r\n const correlationId = this.getRequestCorrelationId(request);\r\n const validRequest = {\r\n ...request,\r\n // will be PromptValue.NONE or PromptValue.NO_SESSION\r\n prompt: request.prompt,\r\n correlationId: correlationId\r\n };\r\n this.preflightBrowserEnvironmentCheck(InteractionType.Silent);\r\n this.ssoSilentMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.SsoSilent, correlationId);\r\n this.ssoSilentMeasurement?.increment({\r\n visibilityChangeCount: 0\r\n });\r\n document.addEventListener(\"visibilitychange\",this.trackPageVisibilityWithMeasurement);\r\n this.logger.verbose(\"ssoSilent called\", correlationId);\r\n this.eventHandler.emitEvent(EventType.SSO_SILENT_START, InteractionType.Silent, validRequest);\r\n\r\n let result: Promise;\r\n\r\n if (this.canUseNative(validRequest)) {\r\n result = this.acquireTokenNative(validRequest, ApiId.ssoSilent).catch((e: AuthError) => {\r\n // If native token acquisition fails for availability reasons fallback to standard flow\r\n if (e instanceof NativeAuthError && e.isFatal()) {\r\n this.nativeExtensionProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\r\n const silentIframeClient = this.createSilentIframeClient(validRequest.correlationId);\r\n return silentIframeClient.acquireToken(validRequest);\r\n }\r\n throw e;\r\n });\r\n } else {\r\n const silentIframeClient = this.createSilentIframeClient(validRequest.correlationId);\r\n result = silentIframeClient.acquireToken(validRequest);\r\n }\r\n\r\n return result.then((response) => {\r\n this.eventHandler.emitEvent(EventType.SSO_SILENT_SUCCESS, InteractionType.Silent, response);\r\n this.ssoSilentMeasurement?.addStaticFields({\r\n accessTokenSize: response.accessToken.length,\r\n idTokenSize: response.idToken.length\r\n });\r\n this.ssoSilentMeasurement?.endMeasurement({\r\n success: true,\r\n isNativeBroker: response.fromNativeBroker,\r\n requestId: response.requestId\r\n });\r\n return response;\r\n }).catch((e: AuthError) => {\r\n this.eventHandler.emitEvent(EventType.SSO_SILENT_FAILURE, InteractionType.Silent, null, e);\r\n this.ssoSilentMeasurement?.endMeasurement({\r\n errorCode: e.errorCode,\r\n subErrorCode: e.subError,\r\n success: false\r\n });\r\n throw e;\r\n }).finally(() => {\r\n document.removeEventListener(\"visibilitychange\",this.trackPageVisibilityWithMeasurement);\r\n });\r\n\r\n }\r\n\r\n /**\r\n * This function redeems an authorization code (passed as code) from the eSTS token endpoint.\r\n * This authorization code should be acquired server-side using a confidential client to acquire a spa_code.\r\n * This API is not indended for normal authorization code acquisition and redemption.\r\n *\r\n * Redemption of this authorization code will not require PKCE, as it was acquired by a confidential client.\r\n *\r\n * @param request {@link AuthorizationCodeRequest}\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n async acquireTokenByCode(request: AuthorizationCodeRequest): Promise {\r\n const correlationId = this.getRequestCorrelationId(request);\r\n this.preflightBrowserEnvironmentCheck(InteractionType.Silent);\r\n this.logger.trace(\"acquireTokenByCode called\", correlationId);\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_START, InteractionType.Silent, request);\r\n const atbcMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenByCode, request.correlationId);\r\n\r\n try {\r\n if (request.code && request.nativeAccountId) {\r\n // Throw error in case server returns both spa_code and spa_accountid in exchange for auth code.\r\n throw BrowserAuthError.createSpaCodeAndNativeAccountIdPresentError();\r\n }\r\n else if (request.code) {\r\n const hybridAuthCode = request.code;\r\n let response = this.hybridAuthCodeResponses.get(hybridAuthCode);\r\n if (!response) {\r\n this.logger.verbose(\"Initiating new acquireTokenByCode request\", correlationId);\r\n response = this.acquireTokenByCodeAsync({\r\n ...request,\r\n correlationId\r\n })\r\n .then((result: AuthenticationResult) => {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_SUCCESS, InteractionType.Silent, result);\r\n this.hybridAuthCodeResponses.delete(hybridAuthCode);\r\n atbcMeasurement.addStaticFields({\r\n accessTokenSize: result.accessToken.length,\r\n idTokenSize: result.idToken.length\r\n });\r\n atbcMeasurement.endMeasurement({\r\n success: true,\r\n isNativeBroker: result.fromNativeBroker,\r\n requestId: result.requestId\r\n });\r\n return result;\r\n })\r\n .catch((error: AuthError) => {\r\n this.hybridAuthCodeResponses.delete(hybridAuthCode);\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_FAILURE, InteractionType.Silent, null, error);\r\n atbcMeasurement.endMeasurement({\r\n errorCode: error.errorCode,\r\n subErrorCode: error.subError,\r\n success: false\r\n });\r\n throw error;\r\n });\r\n this.hybridAuthCodeResponses.set(hybridAuthCode, response);\r\n } else {\r\n this.logger.verbose(\"Existing acquireTokenByCode request found\", request.correlationId);\r\n atbcMeasurement.discardMeasurement();\r\n }\r\n return response;\r\n } else if (request.nativeAccountId) {\r\n if (this.canUseNative(request, request.nativeAccountId)) {\r\n return this.acquireTokenNative(request, ApiId.acquireTokenByCode, request.nativeAccountId).catch((e: AuthError) => {\r\n // If native token acquisition fails for availability reasons fallback to standard flow\r\n if (e instanceof NativeAuthError && e.isFatal()) {\r\n this.nativeExtensionProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\r\n }\r\n throw e;\r\n });\r\n } else {\r\n throw BrowserAuthError.createUnableToAcquireTokenFromNativePlatformError();\r\n }\r\n } else {\r\n throw BrowserAuthError.createAuthCodeOrNativeAccountIdRequiredError();\r\n }\r\n\r\n } catch (e) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_FAILURE, InteractionType.Silent, null, e);\r\n atbcMeasurement.endMeasurement({\r\n errorCode: e instanceof AuthError && e.errorCode || undefined,\r\n subErrorCode: e instanceof AuthError && e.subError || undefined,\r\n success: false\r\n });\r\n throw e;\r\n }\r\n }\r\n\r\n /**\r\n * Creates a SilentAuthCodeClient to redeem an authorization code.\r\n * @param request\r\n * @returns Result of the operation to redeem the authorization code\r\n */\r\n private async acquireTokenByCodeAsync(request: AuthorizationCodeRequest): Promise {\r\n this.logger.trace(\"acquireTokenByCodeAsync called\", request.correlationId);\r\n this.acquireTokenByCodeAsyncMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenByCodeAsync, request.correlationId);\r\n this.acquireTokenByCodeAsyncMeasurement?.increment({\r\n visibilityChangeCount: 0\r\n });\r\n document.addEventListener(\"visibilitychange\",this.trackPageVisibilityWithMeasurement);\r\n const silentAuthCodeClient = this.createSilentAuthCodeClient(request.correlationId);\r\n const silentTokenResult = await silentAuthCodeClient.acquireToken(request).then((response) => {\r\n this.acquireTokenByCodeAsyncMeasurement?.endMeasurement({\r\n success: true,\r\n fromCache: response.fromCache,\r\n isNativeBroker: response.fromNativeBroker,\r\n requestId: response.requestId\r\n });\r\n return response;\r\n }).catch((tokenRenewalError: AuthError) => {\r\n this.acquireTokenByCodeAsyncMeasurement?.endMeasurement({\r\n errorCode: tokenRenewalError.errorCode,\r\n subErrorCode: tokenRenewalError.subError,\r\n success: false\r\n });\r\n throw tokenRenewalError;\r\n }).finally(() => {\r\n document.removeEventListener(\"visibilitychange\",this.trackPageVisibilityWithMeasurement);\r\n });\r\n return silentTokenResult;\r\n }\r\n\r\n /**\r\n * Attempt to acquire an access token from the cache\r\n * @param silentCacheClient SilentCacheClient\r\n * @param commonRequest CommonSilentFlowRequest\r\n * @param silentRequest SilentRequest\r\n * @returns A promise that, when resolved, returns the access token\r\n */\r\n protected async acquireTokenFromCache(\r\n silentCacheClient: SilentCacheClient,\r\n commonRequest: CommonSilentFlowRequest,\r\n silentRequest: SilentRequest\r\n ): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenFromCache, commonRequest.correlationId);\r\n switch(silentRequest.cacheLookupPolicy) {\r\n case CacheLookupPolicy.Default:\r\n case CacheLookupPolicy.AccessToken:\r\n case CacheLookupPolicy.AccessTokenAndRefreshToken:\r\n return silentCacheClient.acquireToken(commonRequest);\r\n default:\r\n throw ClientAuthError.createRefreshRequiredError();\r\n }\r\n }\r\n\r\n /**\r\n * Attempt to acquire an access token via a refresh token\r\n * @param commonRequest CommonSilentFlowRequest\r\n * @param silentRequest SilentRequest\r\n * @returns A promise that, when resolved, returns the access token\r\n */\r\n protected async acquireTokenByRefreshToken(\r\n commonRequest: CommonSilentFlowRequest,\r\n silentRequest: SilentRequest\r\n ): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenByRefreshToken, commonRequest.correlationId);\r\n switch(silentRequest.cacheLookupPolicy) {\r\n case CacheLookupPolicy.Default:\r\n case CacheLookupPolicy.AccessTokenAndRefreshToken:\r\n case CacheLookupPolicy.RefreshToken:\r\n case CacheLookupPolicy.RefreshTokenAndNetwork:\r\n const silentRefreshClient = this.createSilentRefreshClient(commonRequest.correlationId);\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.SilentRefreshClientAcquireToken, commonRequest.correlationId);\r\n return silentRefreshClient.acquireToken(commonRequest);\r\n default:\r\n throw ClientAuthError.createRefreshRequiredError();\r\n }\r\n }\r\n\r\n /**\r\n * Attempt to acquire an access token via an iframe\r\n * @param request CommonSilentFlowRequest\r\n * @returns A promise that, when resolved, returns the access token\r\n */\r\n protected async acquireTokenBySilentIframe(\r\n request: CommonSilentFlowRequest\r\n ): Promise {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenBySilentIframe, request.correlationId);\r\n\r\n const silentIframeClient = this.createSilentIframeClient(request.correlationId);\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.SilentIframeClientAcquireToken, request.correlationId);\r\n return silentIframeClient.acquireToken(request);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Logout\r\n\r\n /**\r\n * Deprecated logout function. Use logoutRedirect or logoutPopup instead\r\n * @param logoutRequest\r\n * @deprecated\r\n */\r\n async logout(logoutRequest?: EndSessionRequest): Promise {\r\n const correlationId = this.getRequestCorrelationId(logoutRequest);\r\n this.logger.warning(\"logout API is deprecated and will be removed in msal-browser v3.0.0. Use logoutRedirect instead.\", correlationId);\r\n return this.logoutRedirect({\r\n correlationId,\r\n ...logoutRequest\r\n });\r\n }\r\n\r\n /**\r\n * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n * Default behaviour is to redirect the user to `window.location.href`.\r\n * @param logoutRequest\r\n */\r\n async logoutRedirect(logoutRequest?: EndSessionRequest): Promise {\r\n const correlationId = this.getRequestCorrelationId(logoutRequest);\r\n this.preflightBrowserEnvironmentCheck(InteractionType.Redirect);\r\n\r\n const redirectClient = this.createRedirectClient(correlationId);\r\n return redirectClient.logout(logoutRequest);\r\n }\r\n\r\n /**\r\n * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server\r\n * @param logoutRequest\r\n */\r\n logoutPopup(logoutRequest?: EndSessionPopupRequest): Promise {\r\n try {\r\n const correlationId = this.getRequestCorrelationId(logoutRequest);\r\n this.preflightBrowserEnvironmentCheck(InteractionType.Popup);\r\n const popupClient = this.createPopupClient(correlationId);\r\n return popupClient.logout(logoutRequest);\r\n } catch (e) {\r\n // Since this function is syncronous we need to reject\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Account APIs\r\n\r\n /**\r\n * Returns all accounts that MSAL currently has data for.\r\n * (the account object is created at the time of successful login)\r\n * or empty array when no accounts are found\r\n * @returns Array of account objects in cache\r\n */\r\n getAllAccounts(): AccountInfo[] {\r\n this.logger.verbose(\"getAllAccounts called\");\r\n return this.isBrowserEnvironment ? this.browserStorage.getAllAccounts() : [];\r\n }\r\n\r\n /**\r\n * Returns the signed in account matching username.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found.\r\n * This API is provided for convenience but getAccountById should be used for best reliability\r\n * @param username\r\n * @returns The account object stored in MSAL\r\n */\r\n getAccountByUsername(username: string): AccountInfo | null {\r\n this.logger.trace(\"getAccountByUsername called\");\r\n if (!username) {\r\n this.logger.warning(\"getAccountByUsername: No username provided\");\r\n return null;\r\n }\r\n\r\n const account = this.browserStorage.getAccountInfoFilteredBy({username});\r\n if (account) {\r\n this.logger.verbose(\"getAccountByUsername: Account matching username found, returning\");\r\n this.logger.verbosePii(`getAccountByUsername: Returning signed-in accounts matching username: ${username}`);\r\n return account;\r\n } else {\r\n this.logger.verbose(\"getAccountByUsername: No matching account found, returning null\");\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the signed in account matching homeAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param homeAccountId\r\n * @returns The account object stored in MSAL\r\n */\r\n getAccountByHomeId(homeAccountId: string): AccountInfo | null {\r\n this.logger.trace(\"getAccountByHomeId called\");\r\n if (!homeAccountId) {\r\n this.logger.warning(\"getAccountByHomeId: No homeAccountId provided\");\r\n return null;\r\n }\r\n\r\n const account = this.browserStorage.getAccountInfoFilteredBy({homeAccountId});\r\n if (account) {\r\n this.logger.verbose(\"getAccountByHomeId: Account matching homeAccountId found, returning\");\r\n this.logger.verbosePii(`getAccountByHomeId: Returning signed-in accounts matching homeAccountId: ${homeAccountId}`);\r\n return account;\r\n } else {\r\n this.logger.verbose(\"getAccountByHomeId: No matching account found, returning null\");\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the signed in account matching localAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param localAccountId\r\n * @returns The account object stored in MSAL\r\n */\r\n getAccountByLocalId(localAccountId: string): AccountInfo | null {\r\n this.logger.trace(\"getAccountByLocalId called\");\r\n if (!localAccountId) {\r\n this.logger.warning(\"getAccountByLocalId: No localAccountId provided\");\r\n return null;\r\n }\r\n\r\n const account = this.browserStorage.getAccountInfoFilteredBy({localAccountId});\r\n if (account) {\r\n this.logger.verbose(\"getAccountByLocalId: Account matching localAccountId found, returning\");\r\n this.logger.verbosePii(`getAccountByLocalId: Returning signed-in accounts matching localAccountId: ${localAccountId}`);\r\n return account;\r\n } else {\r\n this.logger.verbose(\"getAccountByLocalId: No matching account found, returning null\");\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\r\n * @param account\r\n */\r\n setActiveAccount(account: AccountInfo | null): void {\r\n this.browserStorage.setActiveAccount(account);\r\n }\r\n\r\n /**\r\n * Gets the currently active account\r\n */\r\n getActiveAccount(): AccountInfo | null {\r\n return this.browserStorage.getActiveAccount();\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Helpers\r\n\r\n /**\r\n * Helper to validate app environment before making an auth request\r\n *\r\n * @protected\r\n * @param {InteractionType} interactionType What kind of interaction is being used\r\n * @param {boolean} [setInteractionInProgress=true] Whether to set interaction in progress temp cache flag\r\n */\r\n protected preflightBrowserEnvironmentCheck(interactionType: InteractionType, setInteractionInProgress: boolean = true): void {\r\n this.logger.verbose(\"preflightBrowserEnvironmentCheck started\");\r\n // Block request if not in browser environment\r\n BrowserUtils.blockNonBrowserEnvironment(this.isBrowserEnvironment);\r\n\r\n // Block redirects if in an iframe\r\n BrowserUtils.blockRedirectInIframe(interactionType, this.config.system.allowRedirectInIframe);\r\n\r\n // Block auth requests inside a hidden iframe\r\n BrowserUtils.blockReloadInHiddenIframes();\r\n\r\n // Block redirectUri opened in a popup from calling MSAL APIs\r\n BrowserUtils.blockAcquireTokenInPopups();\r\n\r\n // Block token acquisition before initialize has been called if native brokering is enabled\r\n BrowserUtils.blockNativeBrokerCalledBeforeInitialized(this.config.system.allowNativeBroker, this.initialized);\r\n\r\n // Block redirects if memory storage is enabled but storeAuthStateInCookie is not\r\n if (interactionType === InteractionType.Redirect &&\r\n this.config.cache.cacheLocation === BrowserCacheLocation.MemoryStorage &&\r\n !this.config.cache.storeAuthStateInCookie) {\r\n throw BrowserConfigurationAuthError.createInMemoryRedirectUnavailableError();\r\n }\r\n\r\n if (interactionType === InteractionType.Redirect || interactionType === InteractionType.Popup) {\r\n this.preflightInteractiveRequest(setInteractionInProgress);\r\n }\r\n }\r\n\r\n /**\r\n * Preflight check for interactive requests\r\n *\r\n * @protected\r\n * @param {boolean} setInteractionInProgress Whether to set interaction in progress temp cache flag\r\n */\r\n protected preflightInteractiveRequest(setInteractionInProgress: boolean): void {\r\n this.logger.verbose(\"preflightInteractiveRequest called, validating app environment\");\r\n // block the reload if it occurred inside a hidden iframe\r\n BrowserUtils.blockReloadInHiddenIframes();\r\n\r\n // Set interaction in progress temporary cache or throw if alread set.\r\n if (setInteractionInProgress) {\r\n this.browserStorage.setInteractionInProgress(true);\r\n }\r\n }\r\n\r\n /**\r\n * Acquire a token from native device (e.g. WAM)\r\n * @param request\r\n */\r\n protected async acquireTokenNative(request: PopupRequest | SilentRequest | SsoSilentRequest, apiId: ApiId, accountId?: string): Promise {\r\n this.logger.trace(\"acquireTokenNative called\");\r\n if (!this.nativeExtensionProvider) {\r\n throw BrowserAuthError.createNativeConnectionNotEstablishedError();\r\n }\r\n\r\n const nativeClient = new NativeInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, apiId, this.performanceClient, this.nativeExtensionProvider, accountId || this.getNativeAccountId(request), this.nativeInternalStorage, request.correlationId);\r\n\r\n return nativeClient.acquireToken(request);\r\n }\r\n\r\n /**\r\n * Returns boolean indicating if this request can use the native broker\r\n * @param request\r\n */\r\n protected canUseNative(request: RedirectRequest | PopupRequest | SsoSilentRequest, accountId?: string): boolean {\r\n this.logger.trace(\"canUseNative called\");\r\n if (!NativeMessageHandler.isNativeAvailable(this.config, this.logger, this.nativeExtensionProvider, request.authenticationScheme)) {\r\n this.logger.trace(\"canUseNative: isNativeAvailable returned false, returning false\");\r\n return false;\r\n }\r\n\r\n if (request.prompt) {\r\n switch (request.prompt) {\r\n case PromptValue.NONE:\r\n case PromptValue.CONSENT:\r\n case PromptValue.LOGIN:\r\n this.logger.trace(\"canUseNative: prompt is compatible with native flow\");\r\n break;\r\n default:\r\n this.logger.trace(`canUseNative: prompt = ${request.prompt} is not compatible with native flow, returning false`);\r\n return false;\r\n }\r\n }\r\n\r\n if (!accountId && !this.getNativeAccountId(request)) {\r\n this.logger.trace(\"canUseNative: nativeAccountId is not available, returning false\");\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Get the native accountId from the account\r\n * @param request\r\n * @returns\r\n */\r\n protected getNativeAccountId(request: RedirectRequest | PopupRequest | SsoSilentRequest): string {\r\n const account = request.account || this.browserStorage.getAccountInfoByHints(request.loginHint, request.sid) || this.getActiveAccount();\r\n\r\n return account && account.nativeAccountId || \"\";\r\n }\r\n\r\n /**\r\n * Returns new instance of the Popup Interaction Client\r\n * @param correlationId\r\n */\r\n protected createPopupClient(correlationId?: string): PopupClient {\r\n return new PopupClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.nativeInternalStorage, this.nativeExtensionProvider, correlationId);\r\n }\r\n\r\n /**\r\n * Returns new instance of the Redirect Interaction Client\r\n * @param correlationId\r\n */\r\n protected createRedirectClient(correlationId?: string): RedirectClient {\r\n return new RedirectClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.nativeInternalStorage, this.nativeExtensionProvider, correlationId);\r\n }\r\n\r\n /**\r\n * Returns new instance of the Silent Iframe Interaction Client\r\n * @param correlationId\r\n */\r\n protected createSilentIframeClient(correlationId?: string): SilentIframeClient {\r\n return new SilentIframeClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.ssoSilent, this.performanceClient, this.nativeInternalStorage, this.nativeExtensionProvider, correlationId);\r\n }\r\n\r\n /**\r\n * Returns new instance of the Silent Cache Interaction Client\r\n */\r\n protected createSilentCacheClient(correlationId?: string): SilentCacheClient {\r\n return new SilentCacheClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.nativeExtensionProvider, correlationId);\r\n }\r\n\r\n /**\r\n * Returns new instance of the Silent Refresh Interaction Client\r\n */\r\n protected createSilentRefreshClient(correlationId?: string): SilentRefreshClient {\r\n return new SilentRefreshClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.nativeExtensionProvider, correlationId);\r\n }\r\n\r\n /**\r\n * Returns new instance of the Silent AuthCode Interaction Client\r\n */\r\n protected createSilentAuthCodeClient(correlationId?: string): SilentAuthCodeClient {\r\n return new SilentAuthCodeClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.acquireTokenByCode, this.performanceClient, this.nativeExtensionProvider, correlationId);\r\n }\r\n\r\n /**\r\n * Adds event callbacks to array\r\n * @param callback\r\n */\r\n addEventCallback(callback: EventCallbackFunction): string | null {\r\n return this.eventHandler.addEventCallback(callback);\r\n }\r\n\r\n /**\r\n * Removes callback with provided id from callback array\r\n * @param callbackId\r\n */\r\n removeEventCallback(callbackId: string): void {\r\n this.eventHandler.removeEventCallback(callbackId);\r\n }\r\n\r\n /**\r\n * Registers a callback to receive performance events.\r\n *\r\n * @param {PerformanceCallbackFunction} callback\r\n * @returns {string}\r\n */\r\n addPerformanceCallback(callback: PerformanceCallbackFunction): string {\r\n return this.performanceClient.addPerformanceCallback(callback);\r\n }\r\n\r\n /**\r\n * Removes a callback registered with addPerformanceCallback.\r\n *\r\n * @param {string} callbackId\r\n * @returns {boolean}\r\n */\r\n removePerformanceCallback(callbackId: string): boolean {\r\n return this.performanceClient.removePerformanceCallback(callbackId);\r\n }\r\n\r\n /**\r\n * Adds event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n */\r\n enableAccountStorageEvents(): void {\r\n this.eventHandler.enableAccountStorageEvents();\r\n }\r\n\r\n /**\r\n * Removes event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n */\r\n disableAccountStorageEvents(): void {\r\n this.eventHandler.disableAccountStorageEvents();\r\n }\r\n\r\n /**\r\n * Gets the token cache for the application.\r\n */\r\n getTokenCache(): ITokenCache {\r\n return this.tokenCache;\r\n }\r\n\r\n /**\r\n * Returns the logger instance\r\n */\r\n getLogger(): Logger {\r\n return this.logger;\r\n }\r\n\r\n /**\r\n * Replaces the default logger set in configurations with new Logger with new configurations\r\n * @param logger Logger instance\r\n */\r\n setLogger(logger: Logger): void {\r\n this.logger = logger;\r\n }\r\n\r\n /**\r\n * Called by wrapper libraries (Angular & React) to set SKU and Version passed down to telemetry, logger, etc.\r\n * @param sku\r\n * @param version\r\n */\r\n initializeWrapperLibrary(sku: WrapperSKU, version: string): void {\r\n // Validate the SKU passed in is one we expect\r\n this.browserStorage.setWrapperMetadata(sku, version);\r\n }\r\n\r\n /**\r\n * Sets navigation client\r\n * @param navigationClient\r\n */\r\n setNavigationClient(navigationClient: INavigationClient): void {\r\n this.navigationClient = navigationClient;\r\n }\r\n\r\n /**\r\n * Returns the configuration object\r\n */\r\n getConfiguration(): BrowserConfiguration {\r\n return this.config;\r\n }\r\n\r\n /**\r\n * Generates a correlation id for a request if none is provided.\r\n *\r\n * @protected\r\n * @param {?Partial} [request]\r\n * @returns {string}\r\n */\r\n protected getRequestCorrelationId(request?: Partial): string {\r\n if (request?.correlationId) {\r\n return request.correlationId;\r\n }\r\n\r\n if (this.isBrowserEnvironment) {\r\n return this.browserCrypto.createNewGuid();\r\n }\r\n\r\n /*\r\n * Included for fallback for non-browser environments,\r\n * and to ensure this method always returns a string.\r\n */\r\n return Constants.EMPTY_STRING;\r\n }\r\n\r\n // #endregion\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AccountInfo, AuthenticationResult, Constants, RequestThumbprint, AuthError, PerformanceEvents, ServerError, InteractionRequiredAuthError, InProgressPerformanceEvent, InteractionRequiredAuthErrorMessage } from \"@azure/msal-common\";\r\nimport { Configuration } from \"../config/Configuration\";\r\nimport { DEFAULT_REQUEST, InteractionType, ApiId, CacheLookupPolicy, BrowserConstants } from \"../utils/BrowserConstants\";\r\nimport { IPublicClientApplication } from \"./IPublicClientApplication\";\r\nimport { RedirectRequest } from \"../request/RedirectRequest\";\r\nimport { PopupRequest } from \"../request/PopupRequest\";\r\nimport { ClientApplication } from \"./ClientApplication\";\r\nimport { SilentRequest } from \"../request/SilentRequest\";\r\nimport { EventType } from \"../event/EventType\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { NativeAuthError } from \"../error/NativeAuthError\";\r\nimport { NativeMessageHandler } from \"../broker/nativeBroker/NativeMessageHandler\";\r\nimport { BrowserUtils } from \"../utils/BrowserUtils\";\r\n\r\n/**\r\n * The PublicClientApplication class is the object exposed by the library to perform authentication and authorization functions in Single Page Applications\r\n * to obtain JWT tokens as described in the OAuth 2.0 Authorization Code Flow with PKCE specification.\r\n */\r\nexport class PublicClientApplication extends ClientApplication implements IPublicClientApplication {\r\n\r\n // Active requests\r\n private activeSilentTokenRequests: Map>;\r\n private astsAsyncMeasurement?: InProgressPerformanceEvent = undefined;\r\n\r\n /**\r\n * @constructor\r\n * Constructor for the PublicClientApplication used to instantiate the PublicClientApplication object\r\n *\r\n * Important attributes in the Configuration object for auth are:\r\n * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview\r\n * - authority: the authority URL for your application.\r\n * - redirect_uri: the uri of your application registered in the portal.\r\n *\r\n * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens.\r\n * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here}\r\n * If your application supports Accounts in one organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com).\r\n * If your application supports Accounts in any organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with organizations.\r\n * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace \"Enter_the_Tenant_Info_Here\" value with common.\r\n * To restrict support to Personal Microsoft accounts only, replace \"Enter_the_Tenant_Info_Here\" value with consumers.\r\n *\r\n * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/\r\n * Full B2C functionality will be available in this library in future versions.\r\n *\r\n * @param configuration object for the MSAL PublicClientApplication instance\r\n */\r\n constructor(configuration: Configuration) {\r\n super(configuration);\r\n\r\n this.activeSilentTokenRequests = new Map();\r\n // Register listener functions\r\n this.trackPageVisibility = this.trackPageVisibility.bind(this);\r\n }\r\n\r\n /**\r\n * Use when initiating the login process by redirecting the user's browser to the authorization endpoint. This function redirects the page, so\r\n * any code that follows this function will not execute.\r\n *\r\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n *\r\n * @param request\r\n */\r\n async loginRedirect(request?: RedirectRequest): Promise {\r\n const correlationId: string = this.getRequestCorrelationId(request);\r\n this.logger.verbose(\"loginRedirect called\", correlationId);\r\n return this.acquireTokenRedirect({\r\n correlationId,\r\n ...(request || DEFAULT_REQUEST)\r\n });\r\n }\r\n\r\n /**\r\n * Use when initiating the login process via opening a popup window in the user's browser\r\n *\r\n * @param request\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n loginPopup(request?: PopupRequest): Promise {\r\n const correlationId: string = this.getRequestCorrelationId(request);\r\n this.logger.verbose(\"loginPopup called\", correlationId);\r\n return this.acquireTokenPopup({\r\n correlationId,\r\n ...(request || DEFAULT_REQUEST)\r\n });\r\n }\r\n\r\n /**\r\n * Silently acquire an access token for a given set of scopes. Returns currently processing promise if parallel requests are made.\r\n *\r\n * @param {@link (SilentRequest:type)}\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object\r\n */\r\n async acquireTokenSilent(request: SilentRequest): Promise {\r\n const correlationId = this.getRequestCorrelationId(request);\r\n const atsMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenSilent, correlationId);\r\n atsMeasurement.addStaticFields({\r\n cacheLookupPolicy: request.cacheLookupPolicy\r\n });\r\n\r\n this.preflightBrowserEnvironmentCheck(InteractionType.Silent);\r\n this.logger.verbose(\"acquireTokenSilent called\", correlationId);\r\n\r\n const account = request.account || this.getActiveAccount();\r\n if (!account) {\r\n throw BrowserAuthError.createNoAccountError();\r\n }\r\n\r\n const thumbprint: RequestThumbprint = {\r\n clientId: this.config.auth.clientId,\r\n authority: request.authority || Constants.EMPTY_STRING,\r\n scopes: request.scopes,\r\n homeAccountIdentifier: account.homeAccountId,\r\n claims: request.claims,\r\n authenticationScheme: request.authenticationScheme,\r\n resourceRequestMethod: request.resourceRequestMethod,\r\n resourceRequestUri: request.resourceRequestUri,\r\n shrClaims: request.shrClaims,\r\n sshKid: request.sshKid\r\n };\r\n const silentRequestKey = JSON.stringify(thumbprint);\r\n\r\n const cachedResponse = this.activeSilentTokenRequests.get(silentRequestKey);\r\n if (typeof cachedResponse === \"undefined\") {\r\n this.logger.verbose(\"acquireTokenSilent called for the first time, storing active request\", correlationId);\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.AcquireTokenSilentAsync, correlationId);\r\n const response = this.acquireTokenSilentAsync({\r\n ...request,\r\n correlationId\r\n }, account)\r\n .then((result) => {\r\n this.activeSilentTokenRequests.delete(silentRequestKey);\r\n atsMeasurement.addStaticFields({\r\n accessTokenSize: result.accessToken.length,\r\n idTokenSize: result.idToken.length\r\n });\r\n atsMeasurement.endMeasurement({\r\n success: true,\r\n fromCache: result.fromCache,\r\n isNativeBroker: result.fromNativeBroker,\r\n cacheLookupPolicy: request.cacheLookupPolicy,\r\n requestId: result.requestId,\r\n });\r\n return result;\r\n })\r\n .catch((error: AuthError) => {\r\n this.activeSilentTokenRequests.delete(silentRequestKey);\r\n atsMeasurement.endMeasurement({\r\n errorCode: error.errorCode,\r\n subErrorCode: error.subError,\r\n success: false\r\n });\r\n throw error;\r\n });\r\n this.activeSilentTokenRequests.set(silentRequestKey, response);\r\n return response;\r\n } else {\r\n this.logger.verbose(\"acquireTokenSilent has been called previously, returning the result from the first call\", correlationId);\r\n // Discard measurements for memoized calls, as they are usually only a couple of ms and will artificially deflate metrics\r\n atsMeasurement.discardMeasurement();\r\n return cachedResponse;\r\n }\r\n }\r\n\r\n private trackPageVisibility():void {\r\n if (!this.astsAsyncMeasurement) {\r\n return;\r\n }\r\n this.logger.info(\"Perf: Visibility change detected\");\r\n this.astsAsyncMeasurement.increment({\r\n visibilityChangeCount: 1,\r\n });\r\n }\r\n\r\n /**\r\n * Silently acquire an access token for a given set of scopes. Will use cached token if available, otherwise will attempt to acquire a new token from the network via refresh token.\r\n * @param {@link (SilentRequest:type)}\r\n * @param {@link (AccountInfo:type)}\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse}\r\n */\r\n protected async acquireTokenSilentAsync(request: SilentRequest, account: AccountInfo): Promise{\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenSilentAsync, request.correlationId);\r\n\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Silent, request);\r\n this.astsAsyncMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenSilentAsync, request.correlationId);\r\n this.astsAsyncMeasurement?.increment({\r\n visibilityChangeCount: 0\r\n });\r\n document.addEventListener(\"visibilitychange\",this.trackPageVisibility);\r\n let result: Promise;\r\n if (NativeMessageHandler.isNativeAvailable(this.config, this.logger, this.nativeExtensionProvider, request.authenticationScheme) && account.nativeAccountId) {\r\n this.logger.verbose(\"acquireTokenSilent - attempting to acquire token from native platform\");\r\n const silentRequest: SilentRequest = {\r\n ...request,\r\n account\r\n };\r\n result = this.acquireTokenNative(silentRequest, ApiId.acquireTokenSilent_silentFlow).catch(async (e: AuthError) => {\r\n // If native token acquisition fails for availability reasons fallback to web flow\r\n if (e instanceof NativeAuthError && e.isFatal()) {\r\n this.logger.verbose(\"acquireTokenSilent - native platform unavailable, falling back to web flow\");\r\n this.nativeExtensionProvider = undefined; // Prevent future requests from continuing to attempt\r\n\r\n // Cache will not contain tokens, given that previous WAM requests succeeded. Skip cache and RT renewal and go straight to iframe renewal\r\n const silentIframeClient = this.createSilentIframeClient(request.correlationId);\r\n return silentIframeClient.acquireToken(request);\r\n }\r\n throw e;\r\n });\r\n } else {\r\n this.logger.verbose(\"acquireTokenSilent - attempting to acquire token from web flow\");\r\n\r\n const silentCacheClient = this.createSilentCacheClient(request.correlationId);\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.InitializeSilentRequest, request.correlationId);\r\n const silentRequest = await silentCacheClient.initializeSilentRequest(request, account);\r\n\r\n const requestWithCLP = {\r\n ...request,\r\n // set the request's CacheLookupPolicy to Default if it was not optionally passed in\r\n cacheLookupPolicy: request.cacheLookupPolicy || CacheLookupPolicy.Default\r\n };\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.AcquireTokenFromCache, silentRequest.correlationId);\r\n result = this.acquireTokenFromCache(silentCacheClient, silentRequest, requestWithCLP).catch((cacheError: AuthError) => {\r\n if (requestWithCLP.cacheLookupPolicy === CacheLookupPolicy.AccessToken) {\r\n throw cacheError;\r\n }\r\n\r\n // block the reload if it occurred inside a hidden iframe\r\n BrowserUtils.blockReloadInHiddenIframes();\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_NETWORK_START, InteractionType.Silent, silentRequest);\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.AcquireTokenByRefreshToken, silentRequest.correlationId);\r\n return this.acquireTokenByRefreshToken(silentRequest, requestWithCLP).catch((refreshTokenError: AuthError) => {\r\n const isServerError = refreshTokenError instanceof ServerError;\r\n const isInteractionRequiredError = refreshTokenError instanceof InteractionRequiredAuthError;\r\n const rtNotFound = (refreshTokenError.errorCode === InteractionRequiredAuthErrorMessage.noTokensFoundError.code);\r\n const isInvalidGrantError = (refreshTokenError.errorCode === BrowserConstants.INVALID_GRANT_ERROR);\r\n\r\n if ((!isServerError ||\r\n !isInvalidGrantError ||\r\n isInteractionRequiredError ||\r\n requestWithCLP.cacheLookupPolicy === CacheLookupPolicy.AccessTokenAndRefreshToken ||\r\n requestWithCLP.cacheLookupPolicy === CacheLookupPolicy.RefreshToken)\r\n && (requestWithCLP.cacheLookupPolicy !== CacheLookupPolicy.Skip)\r\n && !rtNotFound\r\n ) {\r\n throw refreshTokenError;\r\n }\r\n\r\n this.logger.verbose(\"Refresh token expired/invalid or CacheLookupPolicy is set to Skip, attempting acquire token by iframe.\", request.correlationId);\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.AcquireTokenBySilentIframe, silentRequest.correlationId);\r\n return this.acquireTokenBySilentIframe(silentRequest);\r\n });\r\n });\r\n }\r\n\r\n return result.then((response) => {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Silent, response);\r\n this.astsAsyncMeasurement?.endMeasurement({\r\n success: true,\r\n fromCache: response.fromCache,\r\n isNativeBroker: response.fromNativeBroker,\r\n requestId: response.requestId\r\n });\r\n return response;\r\n }).catch((tokenRenewalError: AuthError) => {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Silent, null, tokenRenewalError);\r\n this.astsAsyncMeasurement?.endMeasurement({\r\n errorCode: tokenRenewalError.errorCode,\r\n subErrorCode: tokenRenewalError.subError,\r\n success: false\r\n });\r\n throw tokenRenewalError;\r\n }).finally(() => {\r\n document.removeEventListener(\"visibilitychange\",this.trackPageVisibility);\r\n });\r\n }\r\n}\r\n","// import { adalConfig, authContext, getToken } from \"../../../utils/adalConfig\";\r\nimport {\r\n CLIENTID,\r\n GET_LAST_LOGIN_TIME_API_URL,\r\n LOGIN_API_URL,\r\n PRE_LOGIN_API_URL,\r\n PASSWORD_RESET_API_URL,\r\n LOGOUT_API_URL,\r\n AAD_ADMIN_CONSENT_API_URL,\r\n SHOTCLASS_API_URL,\r\n LOGIN_RESOURCE,\r\n} from \"../../../utils/devApiContants\";\r\nimport { errorTypes } from \"../../../utils/errorTypes\";\r\nimport * as loginActionCreator from \"../actionCreators/loginActionCreator\";\r\nimport { setInitialPrivacyPolicyStateAction } from \"../actionCreators/privacyPolicyCreator\";\r\nimport * as userActionCreator from \"../actionCreators/userActionCreator\";\r\nimport { FormattedMessage } from \"react-intl\";\r\nimport {\r\n setErrorHandler,\r\n setLoadingHandler,\r\n unSetLoadingHandler,\r\n} from \"./errorActionHandler\";\r\nimport {\r\n getUserProfileHandler,\r\n isMailSentForForgotPasswordHandler,\r\n isPasswordResetRequiredHandler,\r\n isUserActiveHandler,\r\n isUserExistsHandler,\r\n} from \"./userActionHandler\";\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\nimport { msalConfig } from \"../../../utils/msalConfig\";\r\nimport * as msal from \"@azure/msal-browser\";\r\nimport { decodeToken } from \"../../../utils/decodeToken\";\r\nimport { setThemeStylesHandler } from \"./homeActionHandler\";\r\n\r\nconst { FAIL, WARN, SUCCESS } = errorTypes;\r\n//settingUpHeaders\r\nconst myHeaders = {\r\n \"Content-Type\": \"application/json\",\r\n TenantSlugName: localStorage.getItem(\"tenantSlugName\"),\r\n};\r\n\r\n//logout - navbar\r\nexport const logoutHandler =\r\n (navigate, validLogout) => async (dispatch, getState) => {\r\n // if (getState().errorReducer?.isError === false) {\r\n // console.log(getState().errorReducer?.isError);\r\n // await dispatch(setErrorHandler(WARN, `Logged out`));\r\n // }\r\n if (validLogout) {\r\n // dispatch(loginActionCreator.setIsLoggingOutAction(true));\r\n dispatch(loginActionCreator.setIsLoggingOutAction(true));\r\n const tenantData = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n let securityProvider = localStorage.getItem(\"securityProviderName\");\r\n if (securityProvider === \"SAML2\") {\r\n if (tenantData?.SAML2AuthServiceUrl !== null) {\r\n let logoutUrl = tenantData?.SAML2AuthServiceUrl + \"/Login/Logout\";\r\n window.location.href = logoutUrl;\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n dispatch(loginActionCreator.logOutAction());\r\n navigate(\"/\");\r\n } else {\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n dispatch(loginActionCreator.logOutAction());\r\n navigate(\"/\");\r\n }\r\n } else if (securityProvider === \"custom\") {\r\n await fetch(\r\n LOGOUT_API_URL + localStorage.getItem(\"userName\") + \"/token\",\r\n {\r\n method: \"DELETE\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n }\r\n )\r\n .then((response) => {\r\n if (response.status === 204) {\r\n // localStorage.clear();\r\n // sessionStorage.clear();\r\n // dispatch(loginActionCreator.logOutAction());\r\n // navigate(\"/\");\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n });\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n dispatch(loginActionCreator.logOutAction());\r\n navigate(\"/\");\r\n } else {\r\n // navigate(\"/\");\r\n // authContext.logOut();\r\n const msalInstance = new msal.PublicClientApplication(msalConfig);\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n dispatch(loginActionCreator.logOutAction());\r\n msalInstance.logoutRedirect();\r\n }\r\n } else {\r\n // if (\r\n // (window.location.href.includes(\"lighthouse.ltimindtree.com\") ||\r\n // // window.location.href.includes(\"dev1learner.shotclasses.com\")) &&\r\n // window.location.href.includes(\"localhost:3000\"))\r\n // ) {\r\n // const msalInstance = new msal.PublicClientApplication(msalConfig);\r\n // localStorage.clear();\r\n // sessionStorage.clear();\r\n // dispatch(loginActionCreator.logOutAction());\r\n // msalInstance.logoutRedirect();\r\n // }\r\n // else {\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n dispatch(loginActionCreator.logOutAction());\r\n navigate(\"/\");\r\n // }\r\n }\r\n };\r\n\r\nexport const getToken = async (loginRequest) => {\r\n const msalInstance = new msal.PublicClientApplication(msalConfig);\r\n return await msalInstance\r\n .acquireTokenSilent(loginRequest)\r\n .then((response) => {\r\n console.log(response);\r\n let headers = {\r\n \"Content-Type\": \"application/json\",\r\n TenantSlugName: localStorage.getItem(\"tenantSlugName\"),\r\n Authorization: \"bearer \" + response.accessToken,\r\n };\r\n localStorage.setItem(\"headers\", JSON.stringify(headers));\r\n localStorage.setItem(\"token\", response.accessToken);\r\n return response.accessToken;\r\n })\r\n .catch((error) => {\r\n if (error instanceof msal.InteractionRequiredAuthError) {\r\n msalInstance.acquireTokenPopup(loginRequest).then((response) => {\r\n console.log(response);\r\n let headers = {\r\n \"Content-Type\": \"application/json\",\r\n TenantSlugName: localStorage.getItem(\"tenantSlugName\"),\r\n Authorization: \"bearer \" + response.accessToken,\r\n };\r\n localStorage.setItem(\"headers\", JSON.stringify(headers));\r\n localStorage.setItem(\"token\", response.accessToken);\r\n return response.accessToken;\r\n });\r\n }\r\n console.log(error);\r\n });\r\n};\r\n\r\n// export const getGraphUserInfo = async () => {\r\n// const msalInstance = new msal.PublicClientApplication(msalConfig);\r\n// if (\r\n// (window.parent === window.self && window.nativeInterface) ||\r\n// window.name === \"embedded-page-container\" ||\r\n// window.name === \"extension-tab-frame\"\r\n// ) {\r\n// await msalInstance.acquireTokenByCode({\r\n// authority: `https://login.microsoftonline.com/${tid}`,\r\n// oboAssertion: token,\r\n// scopes: scopes,\r\n// skipCache: true,\r\n// }).then(result => {\r\n// console.log(\"Token is: \" + result.accessToken);\r\n// }).catch(error => {\r\n// reject({ \"error\": error.errorCode });\r\n// });\r\n\r\n// }else{\r\n\r\n// }\r\n// const graphToken = await msalInstance.acquireTokenSilent({\r\n// scopes: [\"User.Read\"],\r\n// });\r\n// const headers = new Headers();\r\n// const bearer = `Bearer ${graphToken.accessToken}`;\r\n// headers.append(\"Authorization\", bearer);\r\n// const options = {\r\n// method: \"GET\",\r\n// headers: headers,\r\n// };\r\n\r\n// return await fetch(GRAPH_ENDPOINT_API_URL, options)\r\n// .then((response) => response.json())\r\n// .catch((error) => console.log(error));\r\n// };\r\nexport const checkAADToken = (navigate) => async (dispatch, getState) => {\r\n // debugger;\r\n const tenantData = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n const msalInstance = new msal.PublicClientApplication(msalConfig);\r\n let user =\r\n msalInstance.getActiveAccount() || msalInstance.getAllAccounts()[0];\r\n const loginRequest = {\r\n scopes: [`${LOGIN_RESOURCE}/user_impersonation`],\r\n account: user,\r\n };\r\n\r\n if (\r\n window.location.href.includes(\"lighthouse.ltimindtree.com\") ||\r\n window.location.href.includes(\"ltim-sclearner-staging.azurewebsites.net\")\r\n // window.location.href.includes(\"dev1learner.shotclasses.com\")\r\n // || window.location.href.includes(\"localhost:3000\")\r\n ) {\r\n if (\r\n !localStorage.getItem(\"tenantSlugName\") &&\r\n !tenantData?.AADConfig?.IsAdminConsentGiven\r\n ) {\r\n navigate(\"/\");\r\n } else {\r\n // debugger;\r\n dispatch(PostProfile()).then((data) => {\r\n // debugger;\r\n console.log(data);\r\n if (!data || data?.status !== 200) {\r\n console.log(data);\r\n const errorMessage = data?.data?.toLowerCase();\r\n if (errorMessage === \"user is not active\") {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"You are not authorized. Please contact your Admin\"\r\n )\r\n );\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n dispatch(loginActionCreator.logOutAction());\r\n navigate(\"/\");\r\n } else if (errorMessage === \"invalid user\") {\r\n console.log(errorMessage);\r\n if (\r\n localStorage.getItem(\"CalledFromlighthouse\") ===\r\n \"withOutTenantName\"\r\n ) {\r\n dispatch(setErrorHandler(FAIL, \"Invalid User\"));\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n dispatch(loginActionCreator.logOutAction());\r\n getToken(loginRequest).then(() => {\r\n dispatch(checkAADToken(navigate));\r\n });\r\n } else {\r\n // debugger;\r\n dispatch(setErrorHandler(FAIL, \"Invalid User\"));\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n dispatch(loginActionCreator.logOutAction());\r\n navigate(\"/\");\r\n }\r\n } else {\r\n setTimeout(() => {\r\n getToken(loginRequest).then(() => {\r\n dispatch(checkAADToken(navigate));\r\n });\r\n }, 1000);\r\n }\r\n } else {\r\n dispatch(getUserProfileHandler()).then((result) => {\r\n if (result?.data !== undefined) {\r\n if (result.status === 401) {\r\n const errorMessage = result?.data?.toLowerCase();\r\n if (errorMessage === \"user is not active\") {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"You are not authorized. Please contact your Admin\"\r\n )\r\n );\r\n } else if (errorMessage === \"invalid bearer token\") {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Invalid Token, try logging in again.\"\r\n )\r\n );\r\n // getToken(loginRequest).then(() => {\r\n // dispatch(checkAADToken(navigate));\r\n // });\r\n } else if (errorMessage === \"invalid user\") {\r\n dispatch(setErrorHandler(FAIL, \"Invalid User\"));\r\n }\r\n } else {\r\n console.log(result);\r\n localStorage.setItem(\"userName\", result?.data?.LoginId);\r\n if (tenantData?.AADConfig?.IsAdminConsentGiven === true) {\r\n dispatch(setErrorHandler(SUCCESS, `Login Successful`));\r\n navigate(\"/home\");\r\n }\r\n return true;\r\n }\r\n } else {\r\n getToken(loginRequest).then(() => {\r\n dispatch(checkAADToken(navigate));\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n } else\r\n dispatch(PostProfile()).then((data) => {\r\n console.log(data);\r\n if (!data || data?.status !== 200) {\r\n console.log(data);\r\n const errorMessage = data?.data?.toLowerCase();\r\n if (errorMessage === \"user is not active\") {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"You are not authorized. Please contact your Admin\"\r\n )\r\n );\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n dispatch(loginActionCreator.logOutAction());\r\n navigate(\"/\");\r\n } else if (errorMessage === \"invalid user\") {\r\n console.log(errorMessage);\r\n dispatch(setErrorHandler(FAIL, \"Invalid User\"));\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n dispatch(loginActionCreator.logOutAction());\r\n navigate(\"/\");\r\n } else {\r\n setTimeout(() => {\r\n getToken(loginRequest).then(() => {\r\n dispatch(checkAADToken(navigate));\r\n });\r\n }, 1000);\r\n }\r\n } else {\r\n dispatch(getUserProfileHandler()).then((result) => {\r\n if (result?.data !== undefined) {\r\n if (result.status === 401) {\r\n const errorMessage = result?.data?.toLowerCase();\r\n if (errorMessage === \"user is not active\") {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"You are not authorized. Please contact your Admin\"\r\n )\r\n );\r\n } else if (errorMessage === \"invalid bearer token\") {\r\n dispatch(\r\n setErrorHandler(FAIL, \"Invalid Token, try logging in again.\")\r\n );\r\n // getToken(loginRequest).then(() => {\r\n // dispatch(checkAADToken(navigate));\r\n // });\r\n } else if (errorMessage === \"invalid user\") {\r\n dispatch(setErrorHandler(FAIL, \"Invalid User\"));\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n dispatch(loginActionCreator.logOutAction());\r\n navigate(\"/\");\r\n }\r\n } else {\r\n console.log(result);\r\n localStorage.setItem(\"userName\", result?.data?.LoginId);\r\n dispatch(setErrorHandler(SUCCESS, `Login Successful`));\r\n navigate(\"/home\");\r\n return true;\r\n }\r\n } else {\r\n getToken(loginRequest).then(() => {\r\n dispatch(checkAADToken(navigate));\r\n });\r\n }\r\n });\r\n }\r\n });\r\n};\r\n\r\nexport const authenticateAADUser = (navigate) => async (dispatch) => {\r\n const tenantData = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n const userName = localStorage.getItem(\"userName\");\r\n let loginRequest = {\r\n scopes: [`${LOGIN_RESOURCE}/user_impersonation`],\r\n };\r\n if (!tenantData?.ID) {\r\n dispatch(setErrorHandler(FAIL, `Data not found, please login again!`));\r\n navigate(\"/\");\r\n } else {\r\n const msalInstance = new msal.PublicClientApplication(msalConfig);\r\n const user =\r\n msalInstance.getActiveAccount() || msalInstance.getAllAccounts()[0];\r\n if (user) {\r\n loginRequest = {\r\n ...loginRequest,\r\n account: user,\r\n };\r\n }\r\n if (\r\n (window.parent === window.self && window.nativeInterface) ||\r\n window.name === \"embedded-page-container\" ||\r\n window.name === \"extension-tab-frame\"\r\n ) {\r\n console.log(\"window.parent \", window.parent);\r\n console.log(\"window.self \", window.self);\r\n console.log(\"window.name \", window.name);\r\n console.log(\"window.nativeInterface \", window.nativeInterface);\r\n microsoftTeams.initialize();\r\n // let userInfoRequest = {\r\n // successCallback: (result) => {\r\n // debugger;\r\n // console.log(\"Success: \" + result);\r\n // },\r\n // failureCallback: (error) => {\r\n // console.log(\"Error getting token: \" + error);\r\n // },\r\n // };\r\n let authTokenRequest = {\r\n successCallback: (result) => {\r\n console.log(\"Success: \" + result);\r\n localStorage.setItem(\"token\", result);\r\n let headers = {\r\n \"Content-Type\": \"application/json\",\r\n TenantSlugName: tenantData?.TenantSlugName,\r\n Authorization: \"Bearer \" + result,\r\n };\r\n localStorage.setItem(\"headers\", JSON.stringify(headers));\r\n // debugger;\r\n // microsoftTeams.authentication.getUser(userInfoRequest);\r\n // microsoftTeams.getContext((data) => {\r\n // console.log(data);\r\n // return data;\r\n // });\r\n // microsoftTeams.authentication.notifySuccess();\r\n dispatch(checkAADToken(navigate));\r\n // navigate(\"/aadlogin\");\r\n },\r\n failureCallback: (error) => {\r\n // microsoftTeams.authentication.notifyFailure();\r\n console.log(\"Error getting token: \" + error);\r\n },\r\n };\r\n microsoftTeams.authentication.getAuthToken(authTokenRequest);\r\n } else {\r\n if (userName && tenantData?.AADConfig?.IsAdminConsentGiven === false) {\r\n loginRequest = {\r\n ...loginRequest,\r\n prompt: \"consent\",\r\n };\r\n await dispatch(\r\n postAADAdminConsentActionHandler(\r\n tenantData?.ID,\r\n msalConfig.auth.clientId,\r\n tenantData?.TenantSlugName\r\n )\r\n );\r\n } else {\r\n loginRequest = {\r\n ...loginRequest,\r\n // prompt: \"login\",\r\n };\r\n }\r\n if (!user) {\r\n if (userName) {\r\n loginRequest = {\r\n ...loginRequest,\r\n extraQueryParameters: { login_hint: userName },\r\n };\r\n }\r\n const handleResponse = (response) => {\r\n if (response !== null) {\r\n msalInstance.setActiveAccount(response.account);\r\n console.log(response);\r\n let headers = {\r\n \"Content-Type\": \"application/json\",\r\n TenantSlugName: tenantData?.TenantSlugName,\r\n Authorization: \"bearer \" + response.accessToken,\r\n };\r\n localStorage.setItem(\"headers\", JSON.stringify(headers));\r\n localStorage.setItem(\"token\", response.accessToken);\r\n // navigate(\"/aadlogin\");\r\n dispatch(checkAADToken(navigate));\r\n } else {\r\n const currentAccounts = msalInstance.getAllAccounts();\r\n if (currentAccounts.length === 0) {\r\n msalInstance\r\n .loginRedirect(loginRequest)\r\n .catch((e) => console.log(e));\r\n } else if (currentAccounts.length > 1) {\r\n msalInstance.setActiveAccount(currentAccounts[0]);\r\n console.log(response);\r\n let headers = {\r\n \"Content-Type\": \"application/json\",\r\n TenantSlugName: tenantData?.TenantSlugName,\r\n Authorization: \"bearer \" + response.accessToken,\r\n };\r\n localStorage.setItem(\"headers\", JSON.stringify(headers));\r\n localStorage.setItem(\"token\", response.accessToken);\r\n // navigate(\"/aadlogin\");\r\n dispatch(checkAADToken(navigate));\r\n }\r\n }\r\n };\r\n msalInstance.handleRedirectPromise().then(handleResponse);\r\n } else {\r\n getToken(loginRequest).then(() => {\r\n // navigate(\"/aadlogin\");\r\n dispatch(checkAADToken(navigate));\r\n });\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const authenticateAADUserForLighthouse =\r\n (navigate) => async (dispatch) => {\r\n // debugger;\r\n const tenantData = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n const userData = decodeToken(localStorage.getItem(\"token\"));\r\n const usernameForLighhouse = userData?.unique_name;\r\n const userName = localStorage.getItem(\"userName\") || usernameForLighhouse;\r\n let loginRequest = {\r\n scopes: [`${LOGIN_RESOURCE}/user_impersonation`],\r\n };\r\n\r\n const msalInstance = new msal.PublicClientApplication(msalConfig);\r\n const user =\r\n msalInstance.getActiveAccount() || msalInstance.getAllAccounts()[0];\r\n if (user) {\r\n loginRequest = {\r\n ...loginRequest,\r\n account: user,\r\n };\r\n }\r\n if (\r\n (window.parent === window.self && window.nativeInterface) ||\r\n window.name === \"embedded-page-container\" ||\r\n window.name === \"extension-tab-frame\"\r\n ) {\r\n console.log(\"window.parent \", window.parent);\r\n console.log(\"window.self \", window.self);\r\n console.log(\"window.name \", window.name);\r\n console.log(\"window.nativeInterface \", window.nativeInterface);\r\n microsoftTeams.initialize();\r\n // let userInfoRequest = {\r\n // successCallback: (result) => {\r\n // debugger;\r\n // console.log(\"Success: \" + result);\r\n // },\r\n // failureCallback: (error) => {\r\n // console.log(\"Error getting token: \" + error);\r\n // },\r\n // };\r\n let authTokenRequest = {\r\n successCallback: (result) => {\r\n console.log(\"Success: \" + result);\r\n localStorage.setItem(\"token\", result);\r\n let headers = {\r\n \"Content-Type\": \"application/json\",\r\n TenantSlugName: tenantData?.TenantSlugName,\r\n Authorization: \"Bearer \" + result,\r\n };\r\n localStorage.setItem(\"headers\", JSON.stringify(headers));\r\n // debugger;\r\n // microsoftTeams.authentication.getUser(userInfoRequest);\r\n // microsoftTeams.getContext((data) => {\r\n // console.log(data);\r\n // return data;\r\n // });\r\n // microsoftTeams.authentication.notifySuccess();\r\n dispatch(checkAADToken(navigate));\r\n // navigate(\"/aadlogin\");\r\n },\r\n failureCallback: (error) => {\r\n // microsoftTeams.authentication.notifyFailure();\r\n console.log(\"Error getting token: \" + error);\r\n },\r\n };\r\n microsoftTeams.authentication.getAuthToken(authTokenRequest);\r\n } else {\r\n if (tenantData?.AADConfig?.IsAdminConsentGiven === false) {\r\n // debugger;\r\n loginRequest = {\r\n ...loginRequest,\r\n prompt: \"consent\",\r\n };\r\n await dispatch(\r\n postAADAdminConsentActionHandler(\r\n tenantData?.ID,\r\n msalConfig.auth.clientId,\r\n tenantData?.TenantSlugName\r\n )\r\n );\r\n msalInstance.loginRedirect(loginRequest);\r\n } else {\r\n loginRequest = {\r\n ...loginRequest,\r\n // prompt: \"login\",\r\n };\r\n }\r\n if (!user) {\r\n if (userName) {\r\n loginRequest = {\r\n ...loginRequest,\r\n extraQueryParameters: { login_hint: userName },\r\n };\r\n }\r\n const handleResponse = (response) => {\r\n if (response !== null) {\r\n if (tenantData) {\r\n tenantData.AADConfig.IsAdminConsentGiven = true;\r\n localStorage.setItem(\"tenantData\", JSON.stringify(tenantData));\r\n }\r\n msalInstance.setActiveAccount(response.account);\r\n console.log(response);\r\n let headers = {\r\n \"Content-Type\": \"application/json\",\r\n TenantSlugName: tenantData?.TenantSlugName,\r\n Authorization: \"bearer \" + response.accessToken,\r\n };\r\n localStorage.setItem(\"headers\", JSON.stringify(headers));\r\n localStorage.setItem(\"token\", response.accessToken);\r\n // navigate(\"/aadlogin\");\r\n dispatch(checkAADToken(navigate));\r\n } else {\r\n const currentAccounts = msalInstance.getAllAccounts();\r\n if (currentAccounts.length === 0) {\r\n msalInstance\r\n .loginRedirect(loginRequest)\r\n .catch((e) => console.log(e));\r\n } else if (currentAccounts.length > 1) {\r\n msalInstance.setActiveAccount(currentAccounts[0]);\r\n console.log(response);\r\n let headers = {\r\n \"Content-Type\": \"application/json\",\r\n TenantSlugName: tenantData?.TenantSlugName,\r\n Authorization: \"bearer \" + response.accessToken,\r\n };\r\n localStorage.setItem(\"headers\", JSON.stringify(headers));\r\n localStorage.setItem(\"token\", response.accessToken);\r\n // navigate(\"/aadlogin\");\r\n dispatch(checkAADToken(navigate));\r\n }\r\n }\r\n };\r\n msalInstance.handleRedirectPromise().then(handleResponse);\r\n } else {\r\n getToken(loginRequest).then(() => {\r\n // navigate(\"/aadlogin\");\r\n dispatch(checkAADToken(navigate));\r\n });\r\n }\r\n }\r\n };\r\n\r\n//getTenantDetails\r\nexport const getTenantDetailsHandler =\r\n (tenantName, navigate) => async (dispatch) => {\r\n localStorage.setItem(\"CalledFromlighthouse\", \"withTenantName\");\r\n dispatch(setLoadingHandler());\r\n // await fetch(PRE_LOGIN_API_URL + tenantName)\r\n await fetch(PRE_LOGIN_API_URL + tenantName + \"&clientId=\" + CLIENTID)\r\n .then((response) => response.json())\r\n .then((result) => {\r\n // debugger;\r\n if (result === undefined || result === null) {\r\n navigate(\"/nopagefound\");\r\n } else if (result !== undefined) {\r\n console.log(result);\r\n if (result?.Status !== \"Active\") {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Your current subscription has expired.Please contact your administrator\"\r\n )\r\n );\r\n navigate(\"/\");\r\n return;\r\n } else {\r\n // localStorage.setItem(\"userName\", userName);\r\n localStorage.setItem(\"tenantSlugName\", result?.TenantSlugName);\r\n localStorage.setItem(\r\n \"themeData\",\r\n JSON.stringify(result?.ThemeData)\r\n );\r\n localStorage.setItem(\"tenantData\", JSON.stringify(result));\r\n localStorage.setItem(\"tenantId\", result?.ID);\r\n localStorage.setItem(\r\n \"securityProviderName\",\r\n result?.SecurityProviderName\r\n );\r\n dispatch(loginActionCreator.getTenantDetailsAction(result));\r\n\r\n if (result?.SecurityProviderName === \"custom\") {\r\n navigate(\"/login\");\r\n } else if (result?.SecurityProviderName === \"aad\") {\r\n // dispatch(authenticateAADUser(navigate));\r\n navigate(\"/aadlogin\");\r\n } else if (result?.SecurityProviderName === \"SAML2\") {\r\n // localStorage.setItem(\"IsCustomTenant\", false);\r\n // localStorage.setItem(\"IsSAMLTenant\", true);\r\n // localStorage.setItem(\"selectedTab\", \"Assigned\");\r\n localStorage.setItem(\r\n \"SAMLconfig\",\r\n JSON.stringify(result?.SAMLConfig)\r\n );\r\n localStorage.setItem(\r\n \"SAML2AuthServiceUrl\",\r\n result?.SAML2AuthServiceUrl\r\n );\r\n var samlurl = result?.SAML2AuthServiceUrl;\r\n console.log(\"saml url\", samlurl);\r\n samlurl =\r\n samlurl +\r\n localStorage.getItem(\"tenantSlugName\") +\r\n \"?web=\" +\r\n document.location.href;\r\n window.location.href = samlurl;\r\n }\r\n }\r\n }\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((err) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"Fetch Error\", err);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\n\r\n//getTenantDetails\r\nexport const getTenantDetailsForLighthouseHandler =\r\n (tenantName, navigate) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n // await fetch(PRE_LOGIN_API_URL + tenantName)\r\n await fetch(PRE_LOGIN_API_URL + tenantName + \"&clientId=\" + CLIENTID)\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (result === undefined || result === null) {\r\n navigate(\"/nopagefound\");\r\n } else if (result !== undefined) {\r\n console.log(result);\r\n if (result?.Status !== \"Active\") {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Your current subscription has expired.Please contact your administrator\"\r\n )\r\n );\r\n return;\r\n } else {\r\n localStorage.setItem(\"tenantSlugName\", result?.TenantSlugName);\r\n localStorage.setItem(\r\n \"themeData\",\r\n JSON.stringify(result?.ThemeData)\r\n );\r\n localStorage.setItem(\"tenantData\", JSON.stringify(result));\r\n localStorage.setItem(\"tenantId\", result?.ID);\r\n localStorage.setItem(\r\n \"securityProviderName\",\r\n result?.SecurityProviderName\r\n );\r\n dispatch(loginActionCreator.getTenantDetailsAction(result));\r\n\r\n if (result?.SecurityProviderName === \"aad\") {\r\n navigate(\"/home\");\r\n }\r\n }\r\n }\r\n })\r\n .catch((err) => {\r\n console.log(\"Fetch Error\", err);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\n\r\n//preLoginPage - preLogin\r\nexport const preLoginHandler =\r\n //organization ID = tenant name\r\n (organizationId, userName, navigate) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n localStorage.setItem(\"CalledFromlighthouse\", \"withOutTenantName\");\r\n await fetch(\r\n PRE_LOGIN_API_URL +\r\n organizationId +\r\n \"&UserName=\" +\r\n userName +\r\n \"&IsConsentRequired=\" +\r\n CLIENTID\r\n )\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n dispatch(\r\n setErrorHandler(FAIL, \"Invalid Organization ID or User name\")\r\n );\r\n }\r\n return response.json();\r\n })\r\n .then((result) => {\r\n if (result === undefined) {\r\n return;\r\n }\r\n if (result?.Status !== \"Active\") {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Your current subscription has expired. Please contact your administrator\"\r\n )\r\n );\r\n // navigate(\"/\");\r\n // return;\r\n } else {\r\n dispatch(setErrorHandler(SUCCESS, \"PreLogin Successful\"));\r\n dispatch(loginActionCreator.preLoginAction(result));\r\n\r\n localStorage.setItem(\"userName\", userName);\r\n localStorage.setItem(\"tenantSlugName\", result?.TenantSlugName);\r\n localStorage.setItem(\"themeData\", JSON.stringify(result?.ThemeData));\r\n localStorage.setItem(\"tenantData\", JSON.stringify(result));\r\n localStorage.setItem(\"tenantId\", result?.ID);\r\n localStorage.setItem(\r\n \"securityProviderName\",\r\n result?.SecurityProviderName\r\n );\r\n\r\n if (result.SecurityProviderName === \"custom\") {\r\n navigate(\"/login\");\r\n } else if (result.SecurityProviderName === \"SAML2\") {\r\n localStorage.setItem(\r\n \"SAMLconfig\",\r\n JSON.stringify(result?.SAMLConfig)\r\n );\r\n localStorage.setItem(\r\n \"SAML2AuthServiceUrl\",\r\n result?.SAML2AuthServiceUrl\r\n );\r\n GoToSAMLloginPage(result?.SAML2AuthServiceUrl);\r\n return;\r\n } else if (result.SecurityProviderName === \"aad\") {\r\n if (\r\n window.location.href.includes(\"lighthouse.ltimindtree.com\") ||\r\n window.location.href.includes(\r\n \"ltim-sclearner-staging.azurewebsites.net\"\r\n )\r\n // window.location.href.includes(\"dev1learner.shotclasses.com\")\r\n // || window.location.href.includes(\"localhost:3000\")\r\n ) {\r\n // dispatch(authenticateAADUser(navigate));\r\n const themeData = JSON.parse(localStorage.getItem(\"themeData\"));\r\n if (themeData) {\r\n dispatch(setThemeStylesHandler(themeData));\r\n }\r\n }\r\n navigate(\"/aadlogin\");\r\n\r\n // console.log(\"AAD User Log in\");\r\n // const microsoftTeamsLib = microsoftTeams;\r\n // || window[\"microsoftTeams\"];\r\n\r\n // if (!microsoftTeamsLib) {\r\n // console.log(\"Library not loaded\");\r\n // // return false; // the Microsoft Teams library is for some reason not loaded\r\n // }\r\n // console.log(\"Library loaded\");\r\n // if (\r\n // (window.parent === window.self && window.nativeInterface) ||\r\n // window.name === \"embedded-page-container\" ||\r\n // window.name === \"extension-tab-frame\"\r\n // ) {\r\n // console.log(\"We are in teams\");\r\n // console.log(\"window.parent \", window.parent);\r\n // console.log(\"window.self \", window.self);\r\n // console.log(\"window.name \", window.name);\r\n // console.log(\"window.nativeInterface \", window.nativeInterface);\r\n // console.log(\"We are in teams\");\r\n // localStorage.setItem(\"isTeams\", true);\r\n // navigate(\"/aadlogin\");\r\n // return true;\r\n // } else {\r\n // localStorage.setItem(\"isTeams\", false);\r\n // console.log(\"We are not in teams\");\r\n // }\r\n }\r\n }\r\n })\r\n .catch((err) => {\r\n console.log(\"Fetch Error\", err);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\n\r\n//loginPage - login\r\nexport const loginHandler =\r\n (userName, password, tenantName, navigate) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n\r\n let data = {\r\n LoginId: userName,\r\n Password: password,\r\n TenantName: tenantName,\r\n UDID: 10,\r\n PostLoginActions: true,\r\n };\r\n await fetch(LOGIN_API_URL, {\r\n method: \"POST\",\r\n body: JSON.stringify(data),\r\n headers: myHeaders,\r\n })\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n if (response.status === 412) {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Your current password has expired. Use 'Request New Password' to generate temporary password.\"\r\n )\r\n );\r\n } else if (response.status === 401) {\r\n response.text().then((data) => {\r\n if (data === \"USERID_INACTIVE\") {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"You are not authorized. Please contact your Admin\"\r\n )\r\n );\r\n }\r\n let lockType = data.split(\"|\")[1];\r\n if (lockType === \"TL\") {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Please contact your administrator or try again after 30 minutes\"\r\n )\r\n );\r\n } else if (lockType === \"DL\") {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Please contact your administrator to get the account unlocked\"\r\n )\r\n );\r\n }\r\n });\r\n } else if (response.status === 400) {\r\n response.text().then((data) => {\r\n let remainingAttempts = data.split(\"|\")[1];\r\n if (remainingAttempts === \"TL\") {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Please contact your administrator or try again after 30 minutes\"\r\n )\r\n );\r\n } else if (remainingAttempts === \"DL\") {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Please contact your administrator to get the account unlocked\"\r\n )\r\n );\r\n } else {\r\n dispatch(\r\n setErrorHandler(\r\n WARN,\r\n `You are left with ${remainingAttempts} more attempts before the account locks`\r\n )\r\n );\r\n }\r\n });\r\n }\r\n // dispatch(unSetLoadingHandler());\r\n } else if (response.status === 200) {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n if (result === undefined) {\r\n return;\r\n }\r\n const headers = {\r\n AuthenticationToken: result?.TokenValue,\r\n \"Content-Type\": \"application/json\",\r\n TenantSlugName: tenantName,\r\n };\r\n\r\n if (result !== null) {\r\n localStorage.setItem(\"userPassword\", password);\r\n }\r\n //if (result !== null && result.IsResetRequired === true) {\r\n // debugger;\r\n // localStorage.setItem(\"IsPrivacyPolicy\", result.IsPrivacyPolicy);\r\n // }\r\n localStorage.setItem(\"token\", result?.TokenValue);\r\n localStorage.setItem(\"userName\", userName);\r\n localStorage.setItem(\"headers\", JSON.stringify(headers));\r\n\r\n if (result.IsResetRequired === true) {\r\n navigate(\"/resetPassword\");\r\n }\r\n // else if (\r\n // result.IsResetRequired === false &&\r\n // result.PrivacyPolicyInfo.IsPrivacyPolicy === true &&\r\n // result.PrivacyPolicyInfo.IsProductPrivacyEnable === true\r\n // ) {\r\n // navigate(\"/privacyPolicy\");\r\n // }\r\n else {\r\n dispatch(loginActionCreator.loginAction(result));\r\n // dispatch(getUserPrivacyPolicy(navigate));\r\n\r\n dispatch(setErrorHandler(SUCCESS, `Login Successful`));\r\n dispatch(setInitialPrivacyPolicyStateAction());\r\n\r\n // if (\r\n // result.PrivacyPolicyInfo.IsPrivacyPolicy === true\r\n // // ||result.PrivacyPolicyInfo.IsProductPrivacyEnable === true\r\n // ) {\r\n // setIsPrivacyModal(true);\r\n // } else {\r\n navigate(\"/home\");\r\n }\r\n // }\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((err) => {\r\n console.log(\"Fetch Error\", err);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\n\r\n//loginPage - changePassword\r\nexport const changePasswordHandler =\r\n (tenantName, userName) => async (dispatch, getState) => {\r\n await dispatch(isUserExistsHandler(tenantName, userName));\r\n // console.log(\"after 1st\", getState().userReducer.isUserExists);\r\n if (!!getState().userReducer.isUserExists) {\r\n await dispatch(isUserActiveHandler(tenantName, userName));\r\n // console.log(\"after 2nd\", getState().userReducer.isUserActive);\r\n if (!!getState().userReducer.isUserActive) {\r\n await dispatch(isPasswordResetRequiredHandler(tenantName, userName));\r\n // console.log(\r\n // \"after 3rd\",\r\n // getState().userReducer.isPasswordResetRequired\r\n // );\r\n if (!!getState().userReducer.isPasswordResetRequired) {\r\n await dispatch(\r\n isMailSentForForgotPasswordHandler(tenantName, userName)\r\n );\r\n // console.log(\r\n // \"after 4th\",\r\n // getState().userReducer.isMailSentForForgotPassword\r\n // );\r\n if (!!getState().userReducer.isMailSentForForgotPassword) {\r\n dispatch(loginActionCreator.changePasswordAction());\r\n dispatch(\r\n setErrorHandler(\r\n SUCCESS,\r\n `Your new password has been sent to your registered email id`\r\n )\r\n );\r\n // console.log(\"last one after 4th\");\r\n // console.log(getState());\r\n }\r\n } else {\r\n setErrorHandler(FAIL, `Wait and try after sometime`);\r\n }\r\n } else {\r\n dispatch(\r\n setErrorHandler(FAIL, `Account not active, try contacting admin`)\r\n );\r\n }\r\n } else {\r\n dispatch(setErrorHandler(FAIL, `User Not Exists`));\r\n }\r\n };\r\n\r\nexport const getLastLoginTimeHandler = (navigate, isLoad) => (dispatch) => {\r\n if (isLoad) {\r\n dispatch(setLoadingHandler());\r\n }\r\n\r\n fetch(GET_LAST_LOGIN_TIME_API_URL, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => {\r\n if (response.status === 200) {\r\n return response.json();\r\n } else if (response.status === 401) {\r\n console.log(\"getLastLoginTime CLOSE\");\r\n // localStorage.clear();\r\n // sessionStorage.clear();\r\n // window.location.href = \"/\";\r\n dispatch(logoutHandler(navigate));\r\n }\r\n })\r\n .then((result) => {\r\n dispatch(loginActionCreator.getLastLoginTimeAction(result));\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n })\r\n .finally(() => {\r\n if (isLoad) {\r\n dispatch(unSetLoadingHandler());\r\n }\r\n });\r\n};\r\n\r\nexport const postAADAdminConsentActionHandler =\r\n (tenantId, clientId, tenantName) => async (dispatch) => {\r\n const tenantData = JSON.parse(localStorage.getItem(\"tenantData\"));\r\n let data = {\r\n TenantId: tenantId,\r\n ClientId: clientId,\r\n TenantName: tenantName,\r\n };\r\n await fetch(AAD_ADMIN_CONSENT_API_URL, {\r\n method: \"POST\",\r\n body: JSON.stringify(data),\r\n headers: myHeaders,\r\n })\r\n .then((response) => {\r\n return response;\r\n })\r\n .then((result) => {\r\n if (result !== undefined) {\r\n // debugger;\r\n console.log(result);\r\n // dispatch(POSTAADAdminConsentAcceptedDone(json));\r\n const updatedTenantData = {\r\n ...tenantData,\r\n AADConfig: {\r\n ...tenantData.AADConfig,\r\n IsAdminConsentGiven: true,\r\n },\r\n };\r\n localStorage.setItem(\"tenantData\", JSON.stringify(updatedTenantData));\r\n }\r\n })\r\n .catch((err) => {\r\n console.log(\"Fetch Error\", err);\r\n });\r\n };\r\nconst GoToSAMLloginPage = (samlurl) => {\r\n let newsamlurl =\r\n samlurl +\r\n localStorage.getItem(\"tenantSlugName\") +\r\n \"?username=\" +\r\n localStorage.getItem(\"userName\") +\r\n \"&web=\" +\r\n document.location.href;\r\n\r\n window.location.href = newsamlurl;\r\n};\r\nexport const resetpasswordHandler =\r\n (currentPassword, confirmpassword, checkCurrentPassword) =>\r\n async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n\r\n let data = {\r\n OldPassword: localStorage.getItem(\"userPassword\"),\r\n NewPassword: confirmpassword,\r\n };\r\n if (checkCurrentPassword) {\r\n if (currentPassword != data.OldPassword) {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \r\n )\r\n );\r\n dispatch(unSetLoadingHandler());\r\n return;\r\n }\r\n }\r\n return await fetch(PASSWORD_RESET_API_URL, {\r\n method: \"PUT\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n body: JSON.stringify(data),\r\n })\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Use 8 or more characters with a mix of letters (upper and lower), numbers & symbols\"\r\n )\r\n );\r\n return;\r\n } else if (response.status === 200) {\r\n console.log(\"Password reset successfully\");\r\n }\r\n return response.json();\r\n })\r\n .then((result) => {\r\n if (result !== null) {\r\n switch (result.Code) {\r\n case 1001:\r\n dispatch(setErrorHandler(FAIL, result.Description));\r\n break;\r\n case 1002:\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n\r\n \r\n )\r\n );\r\n break;\r\n case 1006:\r\n dispatch(userActionCreator.setIsPasswordResetDone(true));\r\n dispatch(\r\n setErrorHandler(\r\n SUCCESS,\r\n \r\n )\r\n );\r\n localStorage.setItem(\"userPassword\", confirmpassword);\r\n return true;\r\n case 1010:\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \r\n )\r\n );\r\n break;\r\n default:\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \r\n )\r\n );\r\n break;\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\n\r\nexport const PostProfile = () => async (dispatch, getState) => {\r\n // var user = authContext.getCachedUser();\r\n // const msalInstance = new msal.PublicClientApplication(msalConfig);\r\n // const graphUserInfo = await getGraphUserInfo();\r\n // const user =\r\n // msalInstance.getActiveAccount() || msalInstance.getAllAccounts()[0];\r\n const token = localStorage.getItem(\"token\");\r\n const userData = decodeToken(token);\r\n if (userData) {\r\n // const userFirstLastNameSplit = user.name.split(\" \");\r\n const firstname = userData?.given_name;\r\n // || userFirstLastNameSplit[0];\r\n const lastName = userData?.family_name;\r\n // || userFirstLastNameSplit[1];\r\n const email = userData?.upn;\r\n // || user.username;\r\n const username = userData?.unique_name;\r\n // || user.username;\r\n\r\n const data = {\r\n AssociatedRoles: [],\r\n Category: [],\r\n City: \"\",\r\n EmailId: email,\r\n FirstName: firstname,\r\n Gender: \"Male\",\r\n LastName: lastName,\r\n LoginId: username,\r\n MiddleName: \"\",\r\n PhoneNo: \"\",\r\n ProfileImageUrl: \"\",\r\n Store: [],\r\n };\r\n return await fetch(SHOTCLASS_API_URL + \"/Users?iscustomlogin=\" + false, {\r\n method: \"POST\",\r\n body: JSON.stringify(data),\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then(async (response) => {\r\n // debugger;\r\n const responseData = await (response.status === 401\r\n ? response.text()\r\n : response.json());\r\n return { data: responseData, status: response.status };\r\n })\r\n .then((data) => {\r\n console.log(data);\r\n return data;\r\n })\r\n .catch((err) => {\r\n // debugger;\r\n console.log(\"Fetch Error\", err);\r\n });\r\n } else {\r\n return null;\r\n }\r\n};\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { IRetryPolicy, RetryContext } from \"./IRetryPolicy\";\r\n\r\n// 0, 2, 10, 30 second delays before reconnect attempts.\r\nconst DEFAULT_RETRY_DELAYS_IN_MILLISECONDS = [0, 2000, 10000, 30000, null];\r\n\r\n/** @private */\r\nexport class DefaultReconnectPolicy implements IRetryPolicy {\r\n private readonly _retryDelays: (number | null)[];\r\n\r\n constructor(retryDelays?: number[]) {\r\n this._retryDelays = retryDelays !== undefined ? [...retryDelays, null] : DEFAULT_RETRY_DELAYS_IN_MILLISECONDS;\r\n }\r\n\r\n public nextRetryDelayInMilliseconds(retryContext: RetryContext): number | null {\r\n return this._retryDelays[retryContext.previousRetryCount];\r\n }\r\n}\r\n","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HttpTransportType } from \"./ITransport\";\r\n\r\n/** Error thrown when an HTTP request fails. */\r\nexport class HttpError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The HTTP status code represented by this error. */\r\n public statusCode: number;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n * @param {number} statusCode The HTTP status code represented by this error.\r\n */\r\n constructor(errorMessage: string, statusCode: number) {\r\n const trueProto = new.target.prototype;\r\n super(`${errorMessage}: Status code '${statusCode}'`);\r\n this.statusCode = statusCode;\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when a timeout elapses. */\r\nexport class TimeoutError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.TimeoutError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage: string = \"A timeout occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when an action is aborted. */\r\nexport class AbortError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** Constructs a new instance of {@link AbortError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage: string = \"An abort occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the selected transport is unsupported by the browser. */\r\n/** @private */\r\nexport class UnsupportedTransportError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The {@link @microsoft/signalr.HttpTransportType} this error occured on. */\r\n public transport: HttpTransportType;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.UnsupportedTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occured on.\r\n */\r\n constructor(message: string, transport: HttpTransportType) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'UnsupportedTransportError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the selected transport is disabled by the browser. */\r\n/** @private */\r\nexport class DisabledTransportError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The {@link @microsoft/signalr.HttpTransportType} this error occured on. */\r\n public transport: HttpTransportType;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.DisabledTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occured on.\r\n */\r\n constructor(message: string, transport: HttpTransportType) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'DisabledTransportError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the selected transport cannot be started. */\r\n/** @private */\r\nexport class FailedToStartTransportError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The {@link @microsoft/signalr.HttpTransportType} this error occured on. */\r\n public transport: HttpTransportType;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToStartTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occured on.\r\n */\r\n constructor(message: string, transport: HttpTransportType) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'FailedToStartTransportError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the negotiation with the server failed to complete. */\r\n/** @private */\r\nexport class FailedToNegotiateWithServerError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToNegotiateWithServerError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n */\r\n constructor(message: string) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.errorType = 'FailedToNegotiateWithServerError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when multiple errors have occured. */\r\n/** @private */\r\nexport class AggregateErrors extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The collection of errors this error is aggregating. */\r\n public innerErrors: Error[];\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.AggregateErrors}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {Error[]} innerErrors The collection of errors this error is aggregating.\r\n */\r\n constructor(message: string, innerErrors: Error[]) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n\r\n this.innerErrors = innerErrors;\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortSignal } from \"./AbortController\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\n\r\n/** Represents an HTTP request. */\r\nexport interface HttpRequest {\r\n /** The HTTP method to use for the request. */\r\n method?: string;\r\n\r\n /** The URL for the request. */\r\n url?: string;\r\n\r\n /** The body content for the request. May be a string or an ArrayBuffer (for binary data). */\r\n content?: string | ArrayBuffer;\r\n\r\n /** An object describing headers to apply to the request. */\r\n headers?: MessageHeaders;\r\n\r\n /** The XMLHttpRequestResponseType to apply to the request. */\r\n responseType?: XMLHttpRequestResponseType;\r\n\r\n /** An AbortSignal that can be monitored for cancellation. */\r\n abortSignal?: AbortSignal;\r\n\r\n /** The time to wait for the request to complete before throwing a TimeoutError. Measured in milliseconds. */\r\n timeout?: number;\r\n\r\n /** This controls whether credentials such as cookies are sent in cross-site requests. */\r\n withCredentials?: boolean;\r\n}\r\n\r\n/** Represents an HTTP response. */\r\nexport class HttpResponse {\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n */\r\n constructor(statusCode: number);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code and message.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n */\r\n constructor(statusCode: number, statusText: string);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and string content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {string} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: string);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and binary content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {ArrayBuffer} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: ArrayBuffer);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and binary content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {string | ArrayBuffer} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: string | ArrayBuffer);\r\n constructor(\r\n public readonly statusCode: number,\r\n public readonly statusText?: string,\r\n public readonly content?: string | ArrayBuffer) {\r\n }\r\n}\r\n\r\n/** Abstraction over an HTTP client.\r\n *\r\n * This class provides an abstraction over an HTTP client so that a different implementation can be provided on different platforms.\r\n */\r\nexport abstract class HttpClient {\r\n /** Issues an HTTP GET request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public get(url: string): Promise;\r\n\r\n /** Issues an HTTP GET request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public get(url: string, options: HttpRequest): Promise;\r\n public get(url: string, options?: HttpRequest): Promise {\r\n return this.send({\r\n ...options,\r\n method: \"GET\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP POST request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public post(url: string): Promise;\r\n\r\n /** Issues an HTTP POST request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public post(url: string, options: HttpRequest): Promise;\r\n public post(url: string, options?: HttpRequest): Promise {\r\n return this.send({\r\n ...options,\r\n method: \"POST\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP DELETE request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public delete(url: string): Promise;\r\n\r\n /** Issues an HTTP DELETE request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public delete(url: string, options: HttpRequest): Promise;\r\n public delete(url: string, options?: HttpRequest): Promise {\r\n return this.send({\r\n ...options,\r\n method: \"DELETE\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP request to the specified URL, returning a {@link Promise} that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {HttpRequest} request An {@link @microsoft/signalr.HttpRequest} describing the request to send.\r\n * @returns {Promise} A Promise that resolves with an HttpResponse describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public abstract send(request: HttpRequest): Promise;\r\n\r\n /** Gets all cookies that apply to the specified URL.\r\n *\r\n * @param url The URL that the cookies are valid for.\r\n * @returns {string} A string containing all the key-value cookie pairs for the specified URL.\r\n */\r\n // @ts-ignore\r\n public getCookieString(url: string): string {\r\n return \"\";\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// @ts-ignore: This will be removed from built files and is here to make the types available during dev work\r\nimport { CookieJar } from \"@types/tough-cookie\";\r\n\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { Platform, getGlobalThis } from \"./Utils\";\r\n\r\nexport class FetchHttpClient extends HttpClient {\r\n private readonly _abortControllerType: { prototype: AbortController, new(): AbortController };\r\n private readonly _fetchType: (input: RequestInfo, init?: RequestInit) => Promise;\r\n private readonly _jar?: CookieJar;\r\n\r\n private readonly _logger: ILogger;\r\n\r\n public constructor(logger: ILogger) {\r\n super();\r\n this._logger = logger;\r\n\r\n if (typeof fetch === \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n\r\n // Cookies aren't automatically handled in Node so we need to add a CookieJar to preserve cookies across requests\r\n this._jar = new (requireFunc(\"tough-cookie\")).CookieJar();\r\n this._fetchType = requireFunc(\"node-fetch\");\r\n\r\n // node-fetch doesn't have a nice API for getting and setting cookies\r\n // fetch-cookie will wrap a fetch implementation with a default CookieJar or a provided one\r\n this._fetchType = requireFunc(\"fetch-cookie\")(this._fetchType, this._jar);\r\n } else {\r\n this._fetchType = fetch.bind(getGlobalThis());\r\n }\r\n if (typeof AbortController === \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n\r\n // Node needs EventListener methods on AbortController which our custom polyfill doesn't provide\r\n this._abortControllerType = requireFunc(\"abort-controller\");\r\n } else {\r\n this._abortControllerType = AbortController;\r\n }\r\n }\r\n\r\n /** @inheritDoc */\r\n public async send(request: HttpRequest): Promise {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n throw new AbortError();\r\n }\r\n\r\n if (!request.method) {\r\n throw new Error(\"No method defined.\");\r\n }\r\n if (!request.url) {\r\n throw new Error(\"No url defined.\");\r\n }\r\n\r\n const abortController = new this._abortControllerType();\r\n\r\n let error: any;\r\n // Hook our abortSignal into the abort controller\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n abortController.abort();\r\n error = new AbortError();\r\n };\r\n }\r\n\r\n // If a timeout has been passed in, setup a timeout to call abort\r\n // Type needs to be any to fit window.setTimeout and NodeJS.setTimeout\r\n let timeoutId: any = null;\r\n if (request.timeout) {\r\n const msTimeout = request.timeout!;\r\n timeoutId = setTimeout(() => {\r\n abortController.abort();\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n error = new TimeoutError();\r\n }, msTimeout);\r\n }\r\n\r\n let response: Response;\r\n try {\r\n response = await this._fetchType(request.url!, {\r\n body: request.content!,\r\n cache: \"no-cache\",\r\n credentials: request.withCredentials === true ? \"include\" : \"same-origin\",\r\n headers: {\r\n \"Content-Type\": \"text/plain;charset=UTF-8\",\r\n \"X-Requested-With\": \"XMLHttpRequest\",\r\n ...request.headers,\r\n },\r\n method: request.method!,\r\n mode: \"cors\",\r\n redirect: \"follow\",\r\n signal: abortController.signal,\r\n });\r\n } catch (e) {\r\n if (error) {\r\n throw error;\r\n }\r\n this._logger.log(\r\n LogLevel.Warning,\r\n `Error from HTTP request. ${e}.`,\r\n );\r\n throw e;\r\n } finally {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n }\r\n\r\n if (!response.ok) {\r\n const errorMessage = await deserializeContent(response, \"text\") as string;\r\n throw new HttpError(errorMessage || response.statusText, response.status);\r\n }\r\n\r\n const content = deserializeContent(response, request.responseType);\r\n const payload = await content;\r\n\r\n return new HttpResponse(\r\n response.status,\r\n response.statusText,\r\n payload,\r\n );\r\n }\r\n\r\n public getCookieString(url: string): string {\r\n let cookies: string = \"\";\r\n if (Platform.isNode && this._jar) {\r\n // @ts-ignore: unused variable\r\n this._jar.getCookies(url, (e, c) => cookies = c.join(\"; \"));\r\n }\r\n return cookies;\r\n }\r\n}\r\n\r\nfunction deserializeContent(response: Response, responseType?: XMLHttpRequestResponseType): Promise {\r\n let content;\r\n switch (responseType) {\r\n case \"arraybuffer\":\r\n content = response.arrayBuffer();\r\n break;\r\n case \"text\":\r\n content = response.text();\r\n break;\r\n case \"blob\":\r\n case \"document\":\r\n case \"json\":\r\n throw new Error(`${responseType} is not supported.`);\r\n default:\r\n content = response.text();\r\n break;\r\n }\r\n\r\n return content;\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\n\r\nexport class XhrHttpClient extends HttpClient {\r\n private readonly _logger: ILogger;\r\n\r\n public constructor(logger: ILogger) {\r\n super();\r\n this._logger = logger;\r\n }\r\n\r\n /** @inheritDoc */\r\n public send(request: HttpRequest): Promise {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n\r\n xhr.open(request.method!, request.url!, true);\r\n xhr.withCredentials = request.withCredentials === undefined ? true : request.withCredentials;\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n // Explicitly setting the Content-Type header for React Native on Android platform.\r\n xhr.setRequestHeader(\"Content-Type\", \"text/plain;charset=UTF-8\");\r\n\r\n const headers = request.headers;\r\n if (headers) {\r\n Object.keys(headers)\r\n .forEach((header) => {\r\n xhr.setRequestHeader(header, headers[header]);\r\n });\r\n }\r\n\r\n if (request.responseType) {\r\n xhr.responseType = request.responseType;\r\n }\r\n\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n xhr.abort();\r\n reject(new AbortError());\r\n };\r\n }\r\n\r\n if (request.timeout) {\r\n xhr.timeout = request.timeout;\r\n }\r\n\r\n xhr.onload = () => {\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(new HttpResponse(xhr.status, xhr.statusText, xhr.response || xhr.responseText));\r\n } else {\r\n reject(new HttpError(xhr.response || xhr.responseText || xhr.statusText, xhr.status));\r\n }\r\n };\r\n\r\n xhr.onerror = () => {\r\n this._logger.log(LogLevel.Warning, `Error from HTTP request. ${xhr.status}: ${xhr.statusText}.`);\r\n reject(new HttpError(xhr.statusText, xhr.status));\r\n };\r\n\r\n xhr.ontimeout = () => {\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n reject(new TimeoutError());\r\n };\r\n\r\n xhr.send(request.content || \"\");\r\n });\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// This will be treated as a bit flag in the future, so we keep it using power-of-two values.\r\n/** Specifies a specific HTTP transport type. */\r\nexport enum HttpTransportType {\r\n /** Specifies no transport preference. */\r\n None = 0,\r\n /** Specifies the WebSockets transport. */\r\n WebSockets = 1,\r\n /** Specifies the Server-Sent Events transport. */\r\n ServerSentEvents = 2,\r\n /** Specifies the Long Polling transport. */\r\n LongPolling = 4,\r\n}\r\n\r\n/** Specifies the transfer format for a connection. */\r\nexport enum TransferFormat {\r\n /** Specifies that only text data will be transmitted over the connection. */\r\n Text = 1,\r\n /** Specifies that binary data will be transmitted over the connection. */\r\n Binary = 2,\r\n}\r\n\r\n/** An abstraction over the behavior of transports. This is designed to support the framework and not intended for use by applications. */\r\nexport interface ITransport {\r\n connect(url: string, transferFormat: TransferFormat): Promise;\r\n send(data: any): Promise;\r\n stop(): Promise;\r\n onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n onclose: ((error?: Error) => void) | null;\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortError } from \"./Errors\";\r\nimport { FetchHttpClient } from \"./FetchHttpClient\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger } from \"./ILogger\";\r\nimport { Platform } from \"./Utils\";\r\nimport { XhrHttpClient } from \"./XhrHttpClient\";\r\n\r\n/** Default implementation of {@link @microsoft/signalr.HttpClient}. */\r\nexport class DefaultHttpClient extends HttpClient {\r\n private readonly _httpClient: HttpClient;\r\n\r\n /** Creates a new instance of the {@link @microsoft/signalr.DefaultHttpClient}, using the provided {@link @microsoft/signalr.ILogger} to log messages. */\r\n public constructor(logger: ILogger) {\r\n super();\r\n\r\n if (typeof fetch !== \"undefined\" || Platform.isNode) {\r\n this._httpClient = new FetchHttpClient(logger);\r\n } else if (typeof XMLHttpRequest !== \"undefined\") {\r\n this._httpClient = new XhrHttpClient(logger);\r\n } else {\r\n throw new Error(\"No usable HttpClient found.\");\r\n }\r\n }\r\n\r\n /** @inheritDoc */\r\n public send(request: HttpRequest): Promise {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n\r\n return this._httpClient.send(request);\r\n }\r\n\r\n public getCookieString(url: string): string {\r\n return this._httpClient.getCookieString(url);\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nexport abstract class HeaderNames {\r\n static readonly Authorization = \"Authorization\";\r\n static readonly Cookie = \"Cookie\";\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// Rough polyfill of https://developer.mozilla.org/en-US/docs/Web/API/AbortController\r\n// We don't actually ever use the API being polyfilled, we always use the polyfill because\r\n// it's a very new API right now.\r\n\r\n// Not exported from index.\r\n/** @private */\r\nexport class AbortController implements AbortSignal {\r\n private _isAborted: boolean = false;\r\n public onabort: (() => void) | null = null;\r\n\r\n public abort(): void {\r\n if (!this._isAborted) {\r\n this._isAborted = true;\r\n if (this.onabort) {\r\n this.onabort();\r\n }\r\n }\r\n }\r\n\r\n get signal(): AbortSignal {\r\n return this;\r\n }\r\n\r\n get aborted(): boolean {\r\n return this._isAborted;\r\n }\r\n}\r\n\r\n/** Represents a signal that can be monitored to determine if a request has been aborted. */\r\nexport interface AbortSignal {\r\n /** Indicates if the request has been aborted. */\r\n aborted: boolean;\r\n /** Set this to a handler that will be invoked when the request is aborted. */\r\n onabort: (() => void) | null;\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortController } from \"./AbortController\";\r\nimport { HttpError, TimeoutError } from \"./Errors\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { HttpClient, HttpRequest } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, sendMessage } from \"./Utils\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\n\r\n// Not exported from 'index', this type is internal.\r\n/** @private */\r\nexport class LongPollingTransport implements ITransport {\r\n private readonly _httpClient: HttpClient;\r\n private readonly _accessTokenFactory: (() => string | Promise) | undefined;\r\n private readonly _logger: ILogger;\r\n private readonly _options: IHttpConnectionOptions;\r\n private readonly _pollAbort: AbortController;\r\n\r\n private _url?: string;\r\n private _running: boolean;\r\n private _receiving?: Promise;\r\n private _closeError?: Error;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error) => void) | null;\r\n\r\n // This is an internal type, not exported from 'index' so this is really just internal.\r\n public get pollAborted(): boolean {\r\n return this._pollAbort.aborted;\r\n }\r\n\r\n constructor(httpClient: HttpClient, accessTokenFactory: (() => string | Promise) | undefined, logger: ILogger, options: IHttpConnectionOptions) {\r\n this._httpClient = httpClient;\r\n this._accessTokenFactory = accessTokenFactory;\r\n this._logger = logger;\r\n this._pollAbort = new AbortController();\r\n this._options = options;\r\n\r\n this._running = false;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this._url = url;\r\n\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Connecting.\");\r\n\r\n // Allow binary format on Node and Browsers that support binary content (indicated by the presence of responseType property)\r\n if (transferFormat === TransferFormat.Binary &&\r\n (typeof XMLHttpRequest !== \"undefined\" && typeof new XMLHttpRequest().responseType !== \"string\")) {\r\n throw new Error(\"Binary protocols over XmlHttpRequest not implementing advanced features are not supported.\");\r\n }\r\n\r\n const [name, value] = getUserAgentHeader();\r\n const headers = { [name]: value, ...this._options.headers };\r\n\r\n const pollOptions: HttpRequest = {\r\n abortSignal: this._pollAbort.signal,\r\n headers,\r\n timeout: 100000,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n\r\n if (transferFormat === TransferFormat.Binary) {\r\n pollOptions.responseType = \"arraybuffer\";\r\n }\r\n\r\n const token = await this._getAccessToken();\r\n this._updateHeaderToken(pollOptions, token);\r\n\r\n // Make initial long polling request\r\n // Server uses first long polling request to finish initializing connection and it returns without data\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n\r\n // Mark running as false so that the poll immediately ends and runs the close logic\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n } else {\r\n this._running = true;\r\n }\r\n\r\n this._receiving = this._poll(this._url, pollOptions);\r\n }\r\n\r\n private async _getAccessToken(): Promise {\r\n if (this._accessTokenFactory) {\r\n return await this._accessTokenFactory();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _updateHeaderToken(request: HttpRequest, token: string | null) {\r\n if (!request.headers) {\r\n request.headers = {};\r\n }\r\n if (token) {\r\n request.headers[HeaderNames.Authorization] = `Bearer ${token}`;\r\n return;\r\n }\r\n if (request.headers[HeaderNames.Authorization]) {\r\n delete request.headers[HeaderNames.Authorization];\r\n }\r\n }\r\n\r\n private async _poll(url: string, pollOptions: HttpRequest): Promise {\r\n try {\r\n while (this._running) {\r\n // We have to get the access token on each poll, in case it changes\r\n const token = await this._getAccessToken();\r\n this._updateHeaderToken(pollOptions, token);\r\n\r\n try {\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n\r\n if (response.statusCode === 204) {\r\n this._logger.log(LogLevel.Information, \"(LongPolling transport) Poll terminated by server.\");\r\n\r\n this._running = false;\r\n } else if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n\r\n // Unexpected status code\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n } else {\r\n // Process the response\r\n if (response.content) {\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) data received. ${getDataDetail(response.content, this._options.logMessageContent!)}.`);\r\n if (this.onreceive) {\r\n this.onreceive(response.content);\r\n }\r\n } else {\r\n // This is another way timeout manifest.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n }\r\n } catch (e) {\r\n if (!this._running) {\r\n // Log but disregard errors that occur after stopping\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) Poll errored after shutdown: ${e.message}`);\r\n } else {\r\n if (e instanceof TimeoutError) {\r\n // Ignore timeouts and reissue the poll.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n } else {\r\n // Close the connection with the error as the result.\r\n this._closeError = e;\r\n this._running = false;\r\n }\r\n }\r\n }\r\n }\r\n } finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Polling complete.\");\r\n\r\n // We will reach here with pollAborted==false when the server returned a response causing the transport to stop.\r\n // If pollAborted==true then client initiated the stop and the stop method will raise the close event after DELETE is sent.\r\n if (!this.pollAborted) {\r\n this._raiseOnClose();\r\n }\r\n }\r\n }\r\n\r\n public async send(data: any): Promise {\r\n if (!this._running) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"LongPolling\", this._httpClient, this._url!, this._accessTokenFactory, data, this._options);\r\n }\r\n\r\n public async stop(): Promise {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stopping polling.\");\r\n\r\n // Tell receiving loop to stop, abort any current request, and then wait for it to finish\r\n this._running = false;\r\n this._pollAbort.abort();\r\n\r\n try {\r\n await this._receiving;\r\n\r\n // Send DELETE to clean up long polling on the server\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) sending DELETE request to ${this._url}.`);\r\n\r\n const headers: {[k: string]: string} = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n const deleteOptions: HttpRequest = {\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n const token = await this._getAccessToken();\r\n this._updateHeaderToken(deleteOptions, token);\r\n await this._httpClient.delete(this._url!, deleteOptions);\r\n\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) DELETE request sent.\");\r\n } finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stop finished.\");\r\n\r\n // Raise close event here instead of in polling\r\n // It needs to happen after the DELETE request is sent\r\n this._raiseOnClose();\r\n }\r\n }\r\n\r\n private _raiseOnClose() {\r\n if (this.onclose) {\r\n let logMessage = \"(LongPolling transport) Firing onclose event.\";\r\n if (this._closeError) {\r\n logMessage += \" Error: \" + this._closeError;\r\n }\r\n this._logger.log(LogLevel.Trace, logMessage);\r\n this.onclose(this._closeError);\r\n }\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform, sendMessage } from \"./Utils\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\n\r\n/** @private */\r\nexport class ServerSentEventsTransport implements ITransport {\r\n private readonly _httpClient: HttpClient;\r\n private readonly _accessTokenFactory: (() => string | Promise) | undefined;\r\n private readonly _logger: ILogger;\r\n private readonly _options: IHttpConnectionOptions;\r\n private _eventSource?: EventSource;\r\n private _url?: string;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error) => void) | null;\r\n\r\n constructor(httpClient: HttpClient, accessTokenFactory: (() => string | Promise) | undefined, logger: ILogger,\r\n options: IHttpConnectionOptions) {\r\n this._httpClient = httpClient;\r\n this._accessTokenFactory = accessTokenFactory;\r\n this._logger = logger;\r\n this._options = options;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this._logger.log(LogLevel.Trace, \"(SSE transport) Connecting.\");\r\n\r\n // set url before accessTokenFactory because this.url is only for send and we set the auth header instead of the query string for send\r\n this._url = url;\r\n\r\n if (this._accessTokenFactory) {\r\n const token = await this._accessTokenFactory();\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(token)}`;\r\n }\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n let opened = false;\r\n if (transferFormat !== TransferFormat.Text) {\r\n reject(new Error(\"The Server-Sent Events transport only supports the 'Text' transfer format\"));\r\n return;\r\n }\r\n\r\n let eventSource: EventSource;\r\n if (Platform.isBrowser || Platform.isWebWorker) {\r\n eventSource = new this._options.EventSource!(url, { withCredentials: this._options.withCredentials });\r\n } else {\r\n // Non-browser passes cookies via the dictionary\r\n const cookies = this._httpClient.getCookieString(url);\r\n const headers: MessageHeaders = {};\r\n headers.Cookie = cookies;\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n eventSource = new this._options.EventSource!(url, { withCredentials: this._options.withCredentials, headers: { ...headers, ...this._options.headers} } as EventSourceInit);\r\n }\r\n\r\n try {\r\n eventSource.onmessage = (e: MessageEvent) => {\r\n if (this.onreceive) {\r\n try {\r\n this._logger.log(LogLevel.Trace, `(SSE transport) data received. ${getDataDetail(e.data, this._options.logMessageContent!)}.`);\r\n this.onreceive(e.data);\r\n } catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n // @ts-ignore: not using event on purpose\r\n eventSource.onerror = (e: Event) => {\r\n // EventSource doesn't give any useful information about server side closes.\r\n if (opened) {\r\n this._close();\r\n } else {\r\n reject(new Error(\"EventSource failed to connect. The connection could not be found on the server,\"\r\n + \" either the connection ID is not present on the server, or a proxy is refusing/buffering the connection.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\"));\r\n }\r\n };\r\n\r\n eventSource.onopen = () => {\r\n this._logger.log(LogLevel.Information, `SSE connected to ${this._url}`);\r\n this._eventSource = eventSource;\r\n opened = true;\r\n resolve();\r\n };\r\n } catch (e) {\r\n reject(e);\r\n return;\r\n }\r\n });\r\n }\r\n\r\n public async send(data: any): Promise {\r\n if (!this._eventSource) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"SSE\", this._httpClient, this._url!, this._accessTokenFactory, data, this._options);\r\n }\r\n\r\n public stop(): Promise {\r\n this._close();\r\n return Promise.resolve();\r\n }\r\n\r\n private _close(e?: Error) {\r\n if (this._eventSource) {\r\n this._eventSource.close();\r\n this._eventSource = undefined;\r\n\r\n if (this.onclose) {\r\n this.onclose(e);\r\n }\r\n }\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { WebSocketConstructor } from \"./Polyfills\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform } from \"./Utils\";\r\n\r\n/** @private */\r\nexport class WebSocketTransport implements ITransport {\r\n private readonly _logger: ILogger;\r\n private readonly _accessTokenFactory: (() => string | Promise) | undefined;\r\n private readonly _logMessageContent: boolean;\r\n private readonly _webSocketConstructor: WebSocketConstructor;\r\n private readonly _httpClient: HttpClient;\r\n private _webSocket?: WebSocket;\r\n private _headers: MessageHeaders;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error) => void) | null;\r\n\r\n constructor(httpClient: HttpClient, accessTokenFactory: (() => string | Promise) | undefined, logger: ILogger,\r\n logMessageContent: boolean, webSocketConstructor: WebSocketConstructor, headers: MessageHeaders) {\r\n this._logger = logger;\r\n this._accessTokenFactory = accessTokenFactory;\r\n this._logMessageContent = logMessageContent;\r\n this._webSocketConstructor = webSocketConstructor;\r\n this._httpClient = httpClient;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n this._headers = headers;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) Connecting.\");\r\n\r\n if (this._accessTokenFactory) {\r\n const token = await this._accessTokenFactory();\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(token)}`;\r\n }\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n url = url.replace(/^http/, \"ws\");\r\n let webSocket: WebSocket | undefined;\r\n const cookies = this._httpClient.getCookieString(url);\r\n let opened = false;\r\n\r\n if (Platform.isNode) {\r\n const headers: {[k: string]: string} = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n if (cookies) {\r\n headers[HeaderNames.Cookie] = `${cookies}`;\r\n }\r\n\r\n // Only pass headers when in non-browser environments\r\n webSocket = new this._webSocketConstructor(url, undefined, {\r\n headers: { ...headers, ...this._headers },\r\n });\r\n }\r\n\r\n if (!webSocket) {\r\n // Chrome is not happy with passing 'undefined' as protocol\r\n webSocket = new this._webSocketConstructor(url);\r\n }\r\n\r\n if (transferFormat === TransferFormat.Binary) {\r\n webSocket.binaryType = \"arraybuffer\";\r\n }\r\n\r\n webSocket.onopen = (_event: Event) => {\r\n this._logger.log(LogLevel.Information, `WebSocket connected to ${url}.`);\r\n this._webSocket = webSocket;\r\n opened = true;\r\n resolve();\r\n };\r\n\r\n webSocket.onerror = (event: Event) => {\r\n let error: any = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n } else {\r\n error = \"There was an error with the transport\";\r\n }\r\n\r\n this._logger.log(LogLevel.Information, `(WebSockets transport) ${error}.`);\r\n };\r\n\r\n webSocket.onmessage = (message: MessageEvent) => {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) data received. ${getDataDetail(message.data, this._logMessageContent)}.`);\r\n if (this.onreceive) {\r\n try {\r\n this.onreceive(message.data);\r\n } catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n webSocket.onclose = (event: CloseEvent) => {\r\n // Don't call close handler if connection was never established\r\n // We'll reject the connect call instead\r\n if (opened) {\r\n this._close(event);\r\n } else {\r\n let error: any = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n } else {\r\n error = \"WebSocket failed to connect. The connection could not be found on the server,\"\r\n + \" either the endpoint may not be a SignalR endpoint,\"\r\n + \" the connection ID is not present on the server, or there is a proxy blocking WebSockets.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\";\r\n }\r\n\r\n reject(new Error(error));\r\n }\r\n };\r\n });\r\n }\r\n\r\n public send(data: any): Promise {\r\n if (this._webSocket && this._webSocket.readyState === this._webSocketConstructor.OPEN) {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) sending data. ${getDataDetail(data, this._logMessageContent)}.`);\r\n this._webSocket.send(data);\r\n return Promise.resolve();\r\n }\r\n\r\n return Promise.reject(\"WebSocket is not in the OPEN state\");\r\n }\r\n\r\n public stop(): Promise {\r\n if (this._webSocket) {\r\n // Manually invoke onclose callback inline so we know the HttpConnection was closed properly before returning\r\n // This also solves an issue where websocket.onclose could take 18+ seconds to trigger during network disconnects\r\n this._close(undefined);\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n private _close(event?: CloseEvent | Error): void {\r\n // webSocket will be null if the transport did not start successfully\r\n if (this._webSocket) {\r\n // Clear websocket handlers because we are considering the socket closed now\r\n this._webSocket.onclose = () => {};\r\n this._webSocket.onmessage = () => {};\r\n this._webSocket.onerror = () => {};\r\n this._webSocket.close();\r\n this._webSocket = undefined;\r\n }\r\n\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) socket closed.\");\r\n if (this.onclose) {\r\n if (this._isCloseEvent(event) && (event.wasClean === false || event.code !== 1000)) {\r\n this.onclose(new Error(`WebSocket closed with status code: ${event.code} (${event.reason || \"no reason given\"}).`));\r\n } else if (event instanceof Error) {\r\n this.onclose(event);\r\n } else {\r\n this.onclose();\r\n }\r\n }\r\n }\r\n\r\n private _isCloseEvent(event?: any): event is CloseEvent {\r\n return event && typeof event.wasClean === \"boolean\" && typeof event.code === \"number\";\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { DefaultHttpClient } from \"./DefaultHttpClient\";\r\nimport { AggregateErrors, DisabledTransportError, FailedToNegotiateWithServerError, FailedToStartTransportError, HttpError, UnsupportedTransportError } from \"./Errors\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { IConnection } from \"./IConnection\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { HttpTransportType, ITransport, TransferFormat } from \"./ITransport\";\r\nimport { LongPollingTransport } from \"./LongPollingTransport\";\r\nimport { ServerSentEventsTransport } from \"./ServerSentEventsTransport\";\r\nimport { Arg, createLogger, getUserAgentHeader, Platform } from \"./Utils\";\r\nimport { WebSocketTransport } from \"./WebSocketTransport\";\r\n\r\n/** @private */\r\nconst enum ConnectionState {\r\n Connecting = \"Connecting\",\r\n Connected = \"Connected\",\r\n Disconnected = \"Disconnected\",\r\n Disconnecting = \"Disconnecting\",\r\n}\r\n\r\n/** @private */\r\nexport interface INegotiateResponse {\r\n connectionId?: string;\r\n connectionToken?: string;\r\n negotiateVersion?: number;\r\n availableTransports?: IAvailableTransport[];\r\n url?: string;\r\n accessToken?: string;\r\n error?: string;\r\n}\r\n\r\n/** @private */\r\nexport interface IAvailableTransport {\r\n transport: keyof typeof HttpTransportType;\r\n transferFormats: (keyof typeof TransferFormat)[];\r\n}\r\n\r\nconst MAX_REDIRECTS = 100;\r\n\r\n/** @private */\r\nexport class HttpConnection implements IConnection {\r\n private _connectionState: ConnectionState;\r\n // connectionStarted is tracked independently from connectionState, so we can check if the\r\n // connection ever did successfully transition from connecting to connected before disconnecting.\r\n private _connectionStarted: boolean;\r\n private readonly _httpClient: HttpClient;\r\n private readonly _logger: ILogger;\r\n private readonly _options: IHttpConnectionOptions;\r\n // Needs to not start with _ to be available for tests\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private transport?: ITransport;\r\n private _startInternalPromise?: Promise;\r\n private _stopPromise?: Promise;\r\n private _stopPromiseResolver: (value?: PromiseLike) => void = () => {};\r\n private _stopError?: Error;\r\n private _accessTokenFactory?: () => string | Promise;\r\n private _sendQueue?: TransportSendQueue;\r\n\r\n public readonly features: any = {};\r\n public baseUrl: string;\r\n public connectionId?: string;\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((e?: Error) => void) | null;\r\n\r\n private readonly _negotiateVersion: number = 1;\r\n\r\n constructor(url: string, options: IHttpConnectionOptions = {}) {\r\n Arg.isRequired(url, \"url\");\r\n\r\n this._logger = createLogger(options.logger);\r\n this.baseUrl = this._resolveUrl(url);\r\n\r\n options = options || {};\r\n options.logMessageContent = options.logMessageContent === undefined ? false : options.logMessageContent;\r\n if (typeof options.withCredentials === \"boolean\" || options.withCredentials === undefined) {\r\n options.withCredentials = options.withCredentials === undefined ? true : options.withCredentials;\r\n } else {\r\n throw new Error(\"withCredentials option was not a 'boolean' or 'undefined' value\");\r\n }\r\n options.timeout = options.timeout === undefined ? 100 * 1000 : options.timeout;\r\n\r\n let webSocketModule: any = null;\r\n let eventSourceModule: any = null;\r\n\r\n if (Platform.isNode && typeof require !== \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n webSocketModule = requireFunc(\"ws\");\r\n eventSourceModule = requireFunc(\"eventsource\");\r\n }\r\n\r\n if (!Platform.isNode && typeof WebSocket !== \"undefined\" && !options.WebSocket) {\r\n options.WebSocket = WebSocket;\r\n } else if (Platform.isNode && !options.WebSocket) {\r\n if (webSocketModule) {\r\n options.WebSocket = webSocketModule;\r\n }\r\n }\r\n\r\n if (!Platform.isNode && typeof EventSource !== \"undefined\" && !options.EventSource) {\r\n options.EventSource = EventSource;\r\n } else if (Platform.isNode && !options.EventSource) {\r\n if (typeof eventSourceModule !== \"undefined\") {\r\n options.EventSource = eventSourceModule;\r\n }\r\n }\r\n\r\n this._httpClient = options.httpClient || new DefaultHttpClient(this._logger);\r\n this._connectionState = ConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n this._options = options;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public start(): Promise;\r\n public start(transferFormat: TransferFormat): Promise;\r\n public async start(transferFormat?: TransferFormat): Promise {\r\n transferFormat = transferFormat || TransferFormat.Binary;\r\n\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this._logger.log(LogLevel.Debug, `Starting connection with transfer format '${TransferFormat[transferFormat]}'.`);\r\n\r\n if (this._connectionState !== ConnectionState.Disconnected) {\r\n return Promise.reject(new Error(\"Cannot start an HttpConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n\r\n this._connectionState = ConnectionState.Connecting;\r\n\r\n this._startInternalPromise = this._startInternal(transferFormat);\r\n await this._startInternalPromise;\r\n\r\n // The TypeScript compiler thinks that connectionState must be Connecting here. The TypeScript compiler is wrong.\r\n if (this._connectionState as any === ConnectionState.Disconnecting) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"Failed to start the HttpConnection before stop() was called.\";\r\n this._logger.log(LogLevel.Error, message);\r\n\r\n // We cannot await stopPromise inside startInternal since stopInternal awaits the startInternalPromise.\r\n await this._stopPromise;\r\n\r\n return Promise.reject(new Error(message));\r\n } else if (this._connectionState as any !== ConnectionState.Connected) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!\";\r\n this._logger.log(LogLevel.Error, message);\r\n return Promise.reject(new Error(message));\r\n }\r\n\r\n this._connectionStarted = true;\r\n }\r\n\r\n public send(data: string | ArrayBuffer): Promise {\r\n if (this._connectionState !== ConnectionState.Connected) {\r\n return Promise.reject(new Error(\"Cannot send data if the connection is not in the 'Connected' State.\"));\r\n }\r\n\r\n if (!this._sendQueue) {\r\n this._sendQueue = new TransportSendQueue(this.transport!);\r\n }\r\n\r\n // Transport will not be null if state is connected\r\n return this._sendQueue.send(data);\r\n }\r\n\r\n public async stop(error?: Error): Promise {\r\n if (this._connectionState === ConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Disconnecting) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise;\r\n }\r\n\r\n this._connectionState = ConnectionState.Disconnecting;\r\n\r\n this._stopPromise = new Promise((resolve) => {\r\n // Don't complete stop() until stopConnection() completes.\r\n this._stopPromiseResolver = resolve;\r\n });\r\n\r\n // stopInternal should never throw so just observe it.\r\n await this._stopInternal(error);\r\n await this._stopPromise;\r\n }\r\n\r\n private async _stopInternal(error?: Error): Promise {\r\n // Set error as soon as possible otherwise there is a race between\r\n // the transport closing and providing an error and the error from a close message\r\n // We would prefer the close message error.\r\n this._stopError = error;\r\n\r\n try {\r\n await this._startInternalPromise;\r\n } catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n\r\n // The transport's onclose will trigger stopConnection which will run our onclose event.\r\n // The transport should always be set if currently connected. If it wasn't set, it's likely because\r\n // stop was called during start() and start() failed.\r\n if (this.transport) {\r\n try {\r\n await this.transport.stop();\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.transport.stop() threw error '${e}'.`);\r\n this._stopConnection();\r\n }\r\n\r\n this.transport = undefined;\r\n } else {\r\n this._logger.log(LogLevel.Debug, \"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.\");\r\n }\r\n }\r\n\r\n private async _startInternal(transferFormat: TransferFormat): Promise {\r\n // Store the original base url and the access token factory since they may change\r\n // as part of negotiating\r\n let url = this.baseUrl;\r\n this._accessTokenFactory = this._options.accessTokenFactory;\r\n\r\n try {\r\n if (this._options.skipNegotiation) {\r\n if (this._options.transport === HttpTransportType.WebSockets) {\r\n // No need to add a connection ID in this case\r\n this.transport = this._constructTransport(HttpTransportType.WebSockets);\r\n // We should just call connect directly in this case.\r\n // No fallback or negotiate in this case.\r\n await this._startTransport(url, transferFormat);\r\n } else {\r\n throw new Error(\"Negotiation can only be skipped when using the WebSocket transport directly.\");\r\n }\r\n } else {\r\n let negotiateResponse: INegotiateResponse | null = null;\r\n let redirects = 0;\r\n\r\n do {\r\n negotiateResponse = await this._getNegotiationResponse(url);\r\n // the user tries to stop the connection when it is being started\r\n if (this._connectionState === ConnectionState.Disconnecting || this._connectionState === ConnectionState.Disconnected) {\r\n throw new Error(\"The connection was stopped during negotiation.\");\r\n }\r\n\r\n if (negotiateResponse.error) {\r\n throw new Error(negotiateResponse.error);\r\n }\r\n\r\n if ((negotiateResponse as any).ProtocolVersion) {\r\n throw new Error(\"Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.\");\r\n }\r\n\r\n if (negotiateResponse.url) {\r\n url = negotiateResponse.url;\r\n }\r\n\r\n if (negotiateResponse.accessToken) {\r\n // Replace the current access token factory with one that uses\r\n // the returned access token\r\n const accessToken = negotiateResponse.accessToken;\r\n this._accessTokenFactory = () => accessToken;\r\n }\r\n\r\n redirects++;\r\n }\r\n while (negotiateResponse.url && redirects < MAX_REDIRECTS);\r\n\r\n if (redirects === MAX_REDIRECTS && negotiateResponse.url) {\r\n throw new Error(\"Negotiate redirection limit exceeded.\");\r\n }\r\n\r\n await this._createTransport(url, this._options.transport, negotiateResponse, transferFormat);\r\n }\r\n\r\n if (this.transport instanceof LongPollingTransport) {\r\n this.features.inherentKeepAlive = true;\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Connecting) {\r\n // Ensure the connection transitions to the connected state prior to completing this.startInternalPromise.\r\n // start() will handle the case when stop was called and startInternal exits still in the disconnecting state.\r\n this._logger.log(LogLevel.Debug, \"The HttpConnection connected successfully.\");\r\n this._connectionState = ConnectionState.Connected;\r\n }\r\n\r\n // stop() is waiting on us via this.startInternalPromise so keep this.transport around so it can clean up.\r\n // This is the only case startInternal can exit in neither the connected nor disconnected state because stopConnection()\r\n // will transition to the disconnected state. start() will wait for the transition using the stopPromise.\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, \"Failed to start the connection: \" + e);\r\n this._connectionState = ConnectionState.Disconnected;\r\n this.transport = undefined;\r\n\r\n // if start fails, any active calls to stop assume that start will complete the stop promise\r\n this._stopPromiseResolver();\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n private async _getNegotiationResponse(url: string): Promise {\r\n const headers: {[k: string]: string} = {};\r\n if (this._accessTokenFactory) {\r\n const token = await this._accessTokenFactory();\r\n if (token) {\r\n headers[HeaderNames.Authorization] = `Bearer ${token}`;\r\n }\r\n }\r\n\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n const negotiateUrl = this._resolveNegotiateUrl(url);\r\n this._logger.log(LogLevel.Debug, `Sending negotiation request: ${negotiateUrl}.`);\r\n try {\r\n const response = await this._httpClient.post(negotiateUrl, {\r\n content: \"\",\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n });\r\n\r\n if (response.statusCode !== 200) {\r\n return Promise.reject(new Error(`Unexpected status code returned from negotiate '${response.statusCode}'`));\r\n }\r\n\r\n const negotiateResponse = JSON.parse(response.content as string) as INegotiateResponse;\r\n if (!negotiateResponse.negotiateVersion || negotiateResponse.negotiateVersion < 1) {\r\n // Negotiate version 0 doesn't use connectionToken\r\n // So we set it equal to connectionId so all our logic can use connectionToken without being aware of the negotiate version\r\n negotiateResponse.connectionToken = negotiateResponse.connectionId;\r\n }\r\n return negotiateResponse;\r\n } catch (e) {\r\n let errorMessage = \"Failed to complete negotiation with the server: \" + e;\r\n if (e instanceof HttpError) {\r\n if (e.statusCode === 404) {\r\n errorMessage = errorMessage + \" Either this is not a SignalR endpoint or there is a proxy blocking the connection.\";\r\n }\r\n }\r\n this._logger.log(LogLevel.Error, errorMessage);\r\n\r\n return Promise.reject(new FailedToNegotiateWithServerError(errorMessage));\r\n }\r\n }\r\n\r\n private _createConnectUrl(url: string, connectionToken: string | null | undefined) {\r\n if (!connectionToken) {\r\n return url;\r\n }\r\n\r\n return url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + `id=${connectionToken}`;\r\n }\r\n\r\n private async _createTransport(url: string, requestedTransport: HttpTransportType | ITransport | undefined, negotiateResponse: INegotiateResponse, requestedTransferFormat: TransferFormat): Promise {\r\n let connectUrl = this._createConnectUrl(url, negotiateResponse.connectionToken);\r\n if (this._isITransport(requestedTransport)) {\r\n this._logger.log(LogLevel.Debug, \"Connection was provided an instance of ITransport, using that directly.\");\r\n this.transport = requestedTransport;\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n\r\n this.connectionId = negotiateResponse.connectionId;\r\n return;\r\n }\r\n\r\n const transportExceptions: any[] = [];\r\n const transports = negotiateResponse.availableTransports || [];\r\n let negotiate: INegotiateResponse | undefined = negotiateResponse;\r\n for (const endpoint of transports) {\r\n const transportOrError = this._resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat);\r\n if (transportOrError instanceof Error) {\r\n // Store the error and continue, we don't want to cause a re-negotiate in these cases\r\n transportExceptions.push(`${endpoint.transport} failed:`);\r\n transportExceptions.push(transportOrError);\r\n } else if (this._isITransport(transportOrError)) {\r\n this.transport = transportOrError;\r\n if (!negotiate) {\r\n try {\r\n negotiate = await this._getNegotiationResponse(url);\r\n } catch (ex) {\r\n return Promise.reject(ex);\r\n }\r\n connectUrl = this._createConnectUrl(url, negotiate.connectionToken);\r\n }\r\n try {\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n this.connectionId = negotiate.connectionId;\r\n return;\r\n } catch (ex) {\r\n this._logger.log(LogLevel.Error, `Failed to start the transport '${endpoint.transport}': ${ex}`);\r\n negotiate = undefined;\r\n transportExceptions.push(new FailedToStartTransportError(`${endpoint.transport} failed: ${ex}`, HttpTransportType[endpoint.transport]));\r\n\r\n if (this._connectionState !== ConnectionState.Connecting) {\r\n const message = \"Failed to select transport before stop() was called.\";\r\n this._logger.log(LogLevel.Debug, message);\r\n return Promise.reject(new Error(message));\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (transportExceptions.length > 0) {\r\n return Promise.reject(new AggregateErrors(`Unable to connect to the server with any of the available transports. ${transportExceptions.join(\" \")}`, transportExceptions));\r\n }\r\n return Promise.reject(new Error(\"None of the transports supported by the client are supported by the server.\"));\r\n }\r\n\r\n private _constructTransport(transport: HttpTransportType): ITransport {\r\n switch (transport) {\r\n case HttpTransportType.WebSockets:\r\n if (!this._options.WebSocket) {\r\n throw new Error(\"'WebSocket' is not supported in your environment.\");\r\n }\r\n return new WebSocketTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options.logMessageContent!, this._options.WebSocket, this._options.headers || {});\r\n case HttpTransportType.ServerSentEvents:\r\n if (!this._options.EventSource) {\r\n throw new Error(\"'EventSource' is not supported in your environment.\");\r\n }\r\n return new ServerSentEventsTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options);\r\n case HttpTransportType.LongPolling:\r\n return new LongPollingTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options);\r\n default:\r\n throw new Error(`Unknown transport: ${transport}.`);\r\n }\r\n }\r\n\r\n private _startTransport(url: string, transferFormat: TransferFormat): Promise {\r\n this.transport!.onreceive = this.onreceive;\r\n this.transport!.onclose = (e) => this._stopConnection(e);\r\n return this.transport!.connect(url, transferFormat);\r\n }\r\n\r\n private _resolveTransportOrError(endpoint: IAvailableTransport, requestedTransport: HttpTransportType | undefined, requestedTransferFormat: TransferFormat): ITransport | Error {\r\n const transport = HttpTransportType[endpoint.transport];\r\n if (transport === null || transport === undefined) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n return new Error(`Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n } else {\r\n if (transportMatches(requestedTransport, transport)) {\r\n const transferFormats = endpoint.transferFormats.map((s) => TransferFormat[s]);\r\n if (transferFormats.indexOf(requestedTransferFormat) >= 0) {\r\n if ((transport === HttpTransportType.WebSockets && !this._options.WebSocket) ||\r\n (transport === HttpTransportType.ServerSentEvents && !this._options.EventSource)) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it is not supported in your environment.'`);\r\n return new UnsupportedTransportError(`'${HttpTransportType[transport]}' is not supported in your environment.`, transport);\r\n } else {\r\n this._logger.log(LogLevel.Debug, `Selecting transport '${HttpTransportType[transport]}'.`);\r\n try {\r\n return this._constructTransport(transport);\r\n } catch (ex) {\r\n return ex;\r\n }\r\n }\r\n } else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it does not support the requested transfer format '${TransferFormat[requestedTransferFormat]}'.`);\r\n return new Error(`'${HttpTransportType[transport]}' does not support ${TransferFormat[requestedTransferFormat]}.`);\r\n }\r\n } else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it was disabled by the client.`);\r\n return new DisabledTransportError(`'${HttpTransportType[transport]}' is disabled by the client.`, transport);\r\n }\r\n }\r\n }\r\n\r\n private _isITransport(transport: any): transport is ITransport {\r\n return transport && typeof (transport) === \"object\" && \"connect\" in transport;\r\n }\r\n\r\n private _stopConnection(error?: Error): void {\r\n this._logger.log(LogLevel.Debug, `HttpConnection.stopConnection(${error}) called while in state ${this._connectionState}.`);\r\n\r\n this.transport = undefined;\r\n\r\n // If we have a stopError, it takes precedence over the error from the transport\r\n error = this._stopError || error;\r\n this._stopError = undefined;\r\n\r\n if (this._connectionState === ConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is already in the disconnected state.`);\r\n return;\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Connecting) {\r\n this._logger.log(LogLevel.Warning, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is still in the connecting state.`);\r\n throw new Error(`HttpConnection.stopConnection(${error}) was called while the connection is still in the connecting state.`);\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Disconnecting) {\r\n // A call to stop() induced this call to stopConnection and needs to be completed.\r\n // Any stop() awaiters will be scheduled to continue after the onclose callback fires.\r\n this._stopPromiseResolver();\r\n }\r\n\r\n if (error) {\r\n this._logger.log(LogLevel.Error, `Connection disconnected with error '${error}'.`);\r\n } else {\r\n this._logger.log(LogLevel.Information, \"Connection disconnected.\");\r\n }\r\n\r\n if (this._sendQueue) {\r\n this._sendQueue.stop().catch((e) => {\r\n this._logger.log(LogLevel.Error, `TransportSendQueue.stop() threw error '${e}'.`);\r\n });\r\n this._sendQueue = undefined;\r\n }\r\n\r\n this.connectionId = undefined;\r\n this._connectionState = ConnectionState.Disconnected;\r\n\r\n if (this._connectionStarted) {\r\n this._connectionStarted = false;\r\n try {\r\n if (this.onclose) {\r\n this.onclose(error);\r\n }\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.onclose(${error}) threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n\r\n private _resolveUrl(url: string): string {\r\n // startsWith is not supported in IE\r\n if (url.lastIndexOf(\"https://\", 0) === 0 || url.lastIndexOf(\"http://\", 0) === 0) {\r\n return url;\r\n }\r\n\r\n if (!Platform.isBrowser) {\r\n throw new Error(`Cannot resolve '${url}'.`);\r\n }\r\n\r\n // Setting the url to the href propery of an anchor tag handles normalization\r\n // for us. There are 3 main cases.\r\n // 1. Relative path normalization e.g \"b\" -> \"http://localhost:5000/a/b\"\r\n // 2. Absolute path normalization e.g \"/a/b\" -> \"http://localhost:5000/a/b\"\r\n // 3. Networkpath reference normalization e.g \"//localhost:5000/a/b\" -> \"http://localhost:5000/a/b\"\r\n const aTag = window.document.createElement(\"a\");\r\n aTag.href = url;\r\n\r\n this._logger.log(LogLevel.Information, `Normalizing '${url}' to '${aTag.href}'.`);\r\n return aTag.href;\r\n }\r\n\r\n private _resolveNegotiateUrl(url: string): string {\r\n const index = url.indexOf(\"?\");\r\n let negotiateUrl = url.substring(0, index === -1 ? url.length : index);\r\n if (negotiateUrl[negotiateUrl.length - 1] !== \"/\") {\r\n negotiateUrl += \"/\";\r\n }\r\n negotiateUrl += \"negotiate\";\r\n negotiateUrl += index === -1 ? \"\" : url.substring(index);\r\n\r\n if (negotiateUrl.indexOf(\"negotiateVersion\") === -1) {\r\n negotiateUrl += index === -1 ? \"?\" : \"&\";\r\n negotiateUrl += \"negotiateVersion=\" + this._negotiateVersion;\r\n }\r\n return negotiateUrl;\r\n }\r\n}\r\n\r\nfunction transportMatches(requestedTransport: HttpTransportType | undefined, actualTransport: HttpTransportType) {\r\n return !requestedTransport || ((actualTransport & requestedTransport) !== 0);\r\n}\r\n\r\n/** @private */\r\nexport class TransportSendQueue {\r\n private _buffer: any[] = [];\r\n private _sendBufferedData: PromiseSource;\r\n private _executing: boolean = true;\r\n private _transportResult?: PromiseSource;\r\n private _sendLoopPromise: Promise;\r\n\r\n constructor(private readonly _transport: ITransport) {\r\n this._sendBufferedData = new PromiseSource();\r\n this._transportResult = new PromiseSource();\r\n\r\n this._sendLoopPromise = this._sendLoop();\r\n }\r\n\r\n public send(data: string | ArrayBuffer): Promise {\r\n this._bufferData(data);\r\n if (!this._transportResult) {\r\n this._transportResult = new PromiseSource();\r\n }\r\n return this._transportResult.promise;\r\n }\r\n\r\n public stop(): Promise {\r\n this._executing = false;\r\n this._sendBufferedData.resolve();\r\n return this._sendLoopPromise;\r\n }\r\n\r\n private _bufferData(data: string | ArrayBuffer): void {\r\n if (this._buffer.length && typeof(this._buffer[0]) !== typeof(data)) {\r\n throw new Error(`Expected data to be of type ${typeof(this._buffer)} but was of type ${typeof(data)}`);\r\n }\r\n\r\n this._buffer.push(data);\r\n this._sendBufferedData.resolve();\r\n }\r\n\r\n private async _sendLoop(): Promise {\r\n while (true) {\r\n await this._sendBufferedData.promise;\r\n\r\n if (!this._executing) {\r\n if (this._transportResult) {\r\n this._transportResult.reject(\"Connection stopped.\");\r\n }\r\n\r\n break;\r\n }\r\n\r\n this._sendBufferedData = new PromiseSource();\r\n\r\n const transportResult = this._transportResult!;\r\n this._transportResult = undefined;\r\n\r\n const data = typeof(this._buffer[0]) === \"string\" ?\r\n this._buffer.join(\"\") :\r\n TransportSendQueue._concatBuffers(this._buffer);\r\n\r\n this._buffer.length = 0;\r\n\r\n try {\r\n await this._transport.send(data);\r\n transportResult.resolve();\r\n } catch (error) {\r\n transportResult.reject(error);\r\n }\r\n }\r\n }\r\n\r\n private static _concatBuffers(arrayBuffers: ArrayBuffer[]): ArrayBuffer {\r\n const totalLength = arrayBuffers.map((b) => b.byteLength).reduce((a, b) => a + b);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const item of arrayBuffers) {\r\n result.set(new Uint8Array(item), offset);\r\n offset += item.byteLength;\r\n }\r\n\r\n return result.buffer;\r\n }\r\n}\r\n\r\nclass PromiseSource {\r\n private _resolver?: () => void;\r\n private _rejecter!: (reason?: any) => void;\r\n public promise: Promise;\r\n\r\n constructor() {\r\n this.promise = new Promise((resolve, reject) => [this._resolver, this._rejecter] = [resolve, reject]);\r\n }\r\n\r\n public resolve(): void {\r\n this._resolver!();\r\n }\r\n\r\n public reject(reason?: any): void {\r\n this._rejecter!(reason);\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { CompletionMessage, HubMessage, IHubProtocol, InvocationMessage, MessageType, StreamItemMessage } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\n\r\nconst JSON_HUB_PROTOCOL_NAME: string = \"json\";\r\n\r\n/** Implements the JSON Hub Protocol. */\r\nexport class JsonHubProtocol implements IHubProtocol {\r\n\r\n /** @inheritDoc */\r\n public readonly name: string = JSON_HUB_PROTOCOL_NAME;\r\n /** @inheritDoc */\r\n public readonly version: number = 1;\r\n\r\n /** @inheritDoc */\r\n public readonly transferFormat: TransferFormat = TransferFormat.Text;\r\n\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * @param {string} input A string containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n public parseMessages(input: string, logger: ILogger): HubMessage[] {\r\n // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\r\n if (typeof input !== \"string\") {\r\n throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\r\n }\r\n\r\n if (!input) {\r\n return [];\r\n }\r\n\r\n if (logger === null) {\r\n logger = NullLogger.instance;\r\n }\r\n\r\n // Parse the messages\r\n const messages = TextMessageFormat.parse(input);\r\n\r\n const hubMessages = [];\r\n for (const message of messages) {\r\n const parsedMessage = JSON.parse(message) as HubMessage;\r\n if (typeof parsedMessage.type !== \"number\") {\r\n throw new Error(\"Invalid payload.\");\r\n }\r\n switch (parsedMessage.type) {\r\n case MessageType.Invocation:\r\n this._isInvocationMessage(parsedMessage);\r\n break;\r\n case MessageType.StreamItem:\r\n this._isStreamItemMessage(parsedMessage);\r\n break;\r\n case MessageType.Completion:\r\n this._isCompletionMessage(parsedMessage);\r\n break;\r\n case MessageType.Ping:\r\n // Single value, no need to validate\r\n break;\r\n case MessageType.Close:\r\n // All optional values, no need to validate\r\n break;\r\n default:\r\n // Future protocol changes can add message types, old clients can ignore them\r\n logger.log(LogLevel.Information, \"Unknown message type '\" + parsedMessage.type + \"' ignored.\");\r\n continue;\r\n }\r\n hubMessages.push(parsedMessage);\r\n }\r\n\r\n return hubMessages;\r\n }\r\n\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string and returns it.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string} A string containing the serialized representation of the message.\r\n */\r\n public writeMessage(message: HubMessage): string {\r\n return TextMessageFormat.write(JSON.stringify(message));\r\n }\r\n\r\n private _isInvocationMessage(message: InvocationMessage): void {\r\n this._assertNotEmptyString(message.target, \"Invalid payload for Invocation message.\");\r\n\r\n if (message.invocationId !== undefined) {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Invocation message.\");\r\n }\r\n }\r\n\r\n private _isStreamItemMessage(message: StreamItemMessage): void {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for StreamItem message.\");\r\n\r\n if (message.item === undefined) {\r\n throw new Error(\"Invalid payload for StreamItem message.\");\r\n }\r\n }\r\n\r\n private _isCompletionMessage(message: CompletionMessage): void {\r\n if (message.result && message.error) {\r\n throw new Error(\"Invalid payload for Completion message.\");\r\n }\r\n\r\n if (!message.result && message.error) {\r\n this._assertNotEmptyString(message.error, \"Invalid payload for Completion message.\");\r\n }\r\n\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Completion message.\");\r\n }\r\n\r\n private _assertNotEmptyString(value: any, errorMessage: string): void {\r\n if (typeof value !== \"string\" || value === \"\") {\r\n throw new Error(errorMessage);\r\n }\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { DefaultReconnectPolicy } from \"./DefaultReconnectPolicy\";\r\nimport { HttpConnection } from \"./HttpConnection\";\r\nimport { HubConnection } from \"./HubConnection\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nimport { IHubProtocol } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { IRetryPolicy } from \"./IRetryPolicy\";\r\nimport { HttpTransportType } from \"./ITransport\";\r\nimport { JsonHubProtocol } from \"./JsonHubProtocol\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { Arg, ConsoleLogger } from \"./Utils\";\r\n\r\nconst LogLevelNameMapping: {[k: string]: LogLevel} = {\r\n trace: LogLevel.Trace,\r\n debug: LogLevel.Debug,\r\n info: LogLevel.Information,\r\n information: LogLevel.Information,\r\n warn: LogLevel.Warning,\r\n warning: LogLevel.Warning,\r\n error: LogLevel.Error,\r\n critical: LogLevel.Critical,\r\n none: LogLevel.None,\r\n};\r\n\r\nfunction parseLogLevel(name: string): LogLevel {\r\n // Case-insensitive matching via lower-casing\r\n // Yes, I know case-folding is a complicated problem in Unicode, but we only support\r\n // the ASCII strings defined in LogLevelNameMapping anyway, so it's fine -anurse.\r\n const mapping = LogLevelNameMapping[name.toLowerCase()];\r\n if (typeof mapping !== \"undefined\") {\r\n return mapping;\r\n } else {\r\n throw new Error(`Unknown log level: ${name}`);\r\n }\r\n}\r\n\r\n/** A builder for configuring {@link @microsoft/signalr.HubConnection} instances. */\r\nexport class HubConnectionBuilder {\r\n /** @internal */\r\n public protocol?: IHubProtocol;\r\n /** @internal */\r\n public httpConnectionOptions?: IHttpConnectionOptions;\r\n /** @internal */\r\n public url?: string;\r\n /** @internal */\r\n public logger?: ILogger;\r\n\r\n /** If defined, this indicates the client should automatically attempt to reconnect if the connection is lost. */\r\n /** @internal */\r\n public reconnectPolicy?: IRetryPolicy;\r\n\r\n /** Configures console logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {LogLevel} logLevel The minimum level of messages to log. Anything at this level, or a more severe level, will be logged.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logLevel: LogLevel): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {ILogger} logger An object implementing the {@link @microsoft/signalr.ILogger} interface, which will be used to write all log messages.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logger: ILogger): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {string} logLevel A string representing a LogLevel setting a minimum level of messages to log.\r\n * See {@link https://docs.microsoft.com/aspnet/core/signalr/configuration#configure-logging|the documentation for client logging configuration} for more details.\r\n */\r\n public configureLogging(logLevel: string): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {LogLevel | string | ILogger} logging A {@link @microsoft/signalr.LogLevel}, a string representing a LogLevel, or an object implementing the {@link @microsoft/signalr.ILogger} interface.\r\n * See {@link https://docs.microsoft.com/aspnet/core/signalr/configuration#configure-logging|the documentation for client logging configuration} for more details.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logging: LogLevel | string | ILogger): HubConnectionBuilder;\r\n public configureLogging(logging: LogLevel | string | ILogger): HubConnectionBuilder {\r\n Arg.isRequired(logging, \"logging\");\r\n\r\n if (isLogger(logging)) {\r\n this.logger = logging;\r\n } else if (typeof logging === \"string\") {\r\n const logLevel = parseLogLevel(logging);\r\n this.logger = new ConsoleLogger(logLevel);\r\n } else {\r\n this.logger = new ConsoleLogger(logging);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use HTTP-based transports to connect to the specified URL.\r\n *\r\n * The transport will be selected automatically based on what the server and client support.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified HTTP-based transport to connect to the specified URL.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @param {HttpTransportType} transportType The specific transport to use.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string, transportType: HttpTransportType): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use HTTP-based transports to connect to the specified URL.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @param {IHttpConnectionOptions} options An options object used to configure the connection.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string, options: IHttpConnectionOptions): HubConnectionBuilder;\r\n public withUrl(url: string, transportTypeOrOptions?: IHttpConnectionOptions | HttpTransportType): HubConnectionBuilder {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isNotEmpty(url, \"url\");\r\n\r\n this.url = url;\r\n\r\n // Flow-typing knows where it's at. Since HttpTransportType is a number and IHttpConnectionOptions is guaranteed\r\n // to be an object, we know (as does TypeScript) this comparison is all we need to figure out which overload was called.\r\n if (typeof transportTypeOrOptions === \"object\") {\r\n this.httpConnectionOptions = { ...this.httpConnectionOptions, ...transportTypeOrOptions };\r\n } else {\r\n this.httpConnectionOptions = {\r\n ...this.httpConnectionOptions,\r\n transport: transportTypeOrOptions,\r\n };\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified Hub Protocol.\r\n *\r\n * @param {IHubProtocol} protocol The {@link @microsoft/signalr.IHubProtocol} implementation to use.\r\n */\r\n public withHubProtocol(protocol: IHubProtocol): HubConnectionBuilder {\r\n Arg.isRequired(protocol, \"protocol\");\r\n\r\n this.protocol = protocol;\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n * By default, the client will wait 0, 2, 10 and 30 seconds respectively before trying up to 4 reconnect attempts.\r\n */\r\n public withAutomaticReconnect(): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n *\r\n * @param {number[]} retryDelays An array containing the delays in milliseconds before trying each reconnect attempt.\r\n * The length of the array represents how many failed reconnect attempts it takes before the client will stop attempting to reconnect.\r\n */\r\n public withAutomaticReconnect(retryDelays: number[]): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n *\r\n * @param {IRetryPolicy} reconnectPolicy An {@link @microsoft/signalR.IRetryPolicy} that controls the timing and number of reconnect attempts.\r\n */\r\n public withAutomaticReconnect(reconnectPolicy: IRetryPolicy): HubConnectionBuilder;\r\n public withAutomaticReconnect(retryDelaysOrReconnectPolicy?: number[] | IRetryPolicy): HubConnectionBuilder {\r\n if (this.reconnectPolicy) {\r\n throw new Error(\"A reconnectPolicy has already been set.\");\r\n }\r\n\r\n if (!retryDelaysOrReconnectPolicy) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy();\r\n } else if (Array.isArray(retryDelaysOrReconnectPolicy)) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy(retryDelaysOrReconnectPolicy);\r\n } else {\r\n this.reconnectPolicy = retryDelaysOrReconnectPolicy;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Creates a {@link @microsoft/signalr.HubConnection} from the configuration options specified in this builder.\r\n *\r\n * @returns {HubConnection} The configured {@link @microsoft/signalr.HubConnection}.\r\n */\r\n public build(): HubConnection {\r\n // If httpConnectionOptions has a logger, use it. Otherwise, override it with the one\r\n // provided to configureLogger\r\n const httpConnectionOptions = this.httpConnectionOptions || {};\r\n\r\n // If it's 'null', the user **explicitly** asked for null, don't mess with it.\r\n if (httpConnectionOptions.logger === undefined) {\r\n // If our logger is undefined or null, that's OK, the HttpConnection constructor will handle it.\r\n httpConnectionOptions.logger = this.logger;\r\n }\r\n\r\n // Now create the connection\r\n if (!this.url) {\r\n throw new Error(\"The 'HubConnectionBuilder.withUrl' method must be called before building the connection.\");\r\n }\r\n const connection = new HttpConnection(this.url, httpConnectionOptions);\r\n\r\n return HubConnection.create(\r\n connection,\r\n this.logger || NullLogger.instance,\r\n this.protocol || new JsonHubProtocol(),\r\n this.reconnectPolicy);\r\n }\r\n}\r\n\r\nfunction isLogger(logger: any): logger is ILogger {\r\n return logger.log !== undefined;\r\n}\r\n","import {\r\n ENV_Name,\r\n FETCH_VIRTUAL_QUIZ_API_URL,\r\n GET_LIVE_QUIZ_BEGIN_END_LIVE_QUIZ_QUESTION,\r\n GET_LIVE_QUIZ_USER_CHOICE_COUNT,\r\n GET_LIVE_QUIZ_USER_LEADER_BOARD,\r\n GET_VIRTUAL_QUIZ_CORRECT_ANSWER_REPORT,\r\n GET_VIRTUAL_QUIZ_LEADERBOARD,\r\n GET_VIRTUAL_QUIZ_QNA,\r\n POST_ASSESSMENT_SCORE_API_URL,\r\n POST_LIVE_QUIZ_ASSESSMENT_SCORE_API_URL,\r\n SIGNALR_NEGOTIATE_API_URL,\r\n VALIDATE_PASSCODE_API_URL,\r\n} from \"../../../utils/devApiContants\";\r\nimport {\r\n setErrorHandler,\r\n setLoadingHandler,\r\n unSetLoadingHandler,\r\n} from \"./errorActionHandler\";\r\nimport * as quizActionCreator from \"../actionCreators/quizActionCreator\";\r\nimport { errorTypes } from \"../../../utils/errorTypes\";\r\nimport { HubConnectionBuilder, LogLevel } from \"@microsoft/signalr\";\r\nimport actionTypes from \"../actionTypes\";\r\nconst { FAIL } = errorTypes;\r\n\r\nexport const ValidateLiveEventPasscode =\r\n (passCode, navigate) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n const data = {\r\n Passcode: passCode,\r\n };\r\n const header = JSON.parse(localStorage.getItem(\"headers\"));\r\n const body = JSON.stringify(data);\r\n await fetch(VALIDATE_PASSCODE_API_URL, {\r\n method: \"POST\",\r\n headers: header,\r\n body: body,\r\n })\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n dispatch(setErrorHandler(FAIL, \"Error while validating quiz\"));\r\n } else if (response.status === 200) {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n if (result !== null && result.ErrorMessage === \"\") {\r\n dispatch(quizActionCreator.validateLiveEventPasscode(result));\r\n if (result.TrainingMode === \"virtual\") {\r\n navigate(\"/quiz/virtualquiz\");\r\n } else {\r\n navigate(\"/quiz/livequiz\");\r\n }\r\n } else {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Invalid passcode. Please try again with valid Passcode\"\r\n )\r\n );\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\n\r\nexport const onStartQuizCLick =\r\n (id, VirtualOrLiveQuizEventId) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n const url =\r\n FETCH_VIRTUAL_QUIZ_API_URL +\r\n \"?id=\" +\r\n id +\r\n \"&VirtualOrLiveQuizEventId=\" +\r\n VirtualOrLiveQuizEventId;\r\n const header = JSON.parse(localStorage.getItem(\"headers\"));\r\n\r\n await fetch(url, {\r\n method: \"GET\",\r\n headers: header,\r\n })\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n dispatch(setErrorHandler(FAIL, \"Error While Fetching quiz Data\"));\r\n } else if (response.status === 200) {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n if (result !== null) {\r\n dispatch(quizActionCreator.fetchQuizDetails(result));\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\nexport const setSelectedVirtualQuizOptionActionHandler =\r\n (questionId, answerId) => (dispatch, getState) => {\r\n const virtualQuizDetails = getState().quizReducer?.virtualQuizData;\r\n console.log(virtualQuizDetails);\r\n const updatedvirtualQuizDetails =\r\n virtualQuizDetails?.AssessmentSet?.QuestionList.map((question) => {\r\n if (question.ID !== questionId) {\r\n return { ...question };\r\n } else if (question.ID === questionId) {\r\n question.isAnswered = true;\r\n question.ChoiceList.map((answer) => {\r\n if (answer.ID !== answerId) {\r\n answer.Isselected = false;\r\n answer.IsselectedByUserInResonse = false;\r\n } else if (answer.ID === answerId) {\r\n answer.Isselected = true;\r\n if (answer.Isselected === true && answer.IsAnswer === true) {\r\n question.correctlyAnswered = true;\r\n } else {\r\n question.correctlyAnswered = false;\r\n }\r\n }\r\n return { ...answer };\r\n });\r\n }\r\n return { ...question };\r\n });\r\n console.log(updatedvirtualQuizDetails);\r\n let dataAfterUpdate = {\r\n ...virtualQuizDetails,\r\n AssessmentSet: {\r\n ...virtualQuizDetails.AssessmentSet,\r\n QuestionList: updatedvirtualQuizDetails,\r\n },\r\n };\r\n dispatch(quizActionCreator.fetchQuizDetails(dataAfterUpdate));\r\n };\r\nexport const setIsAnsweredtrueIfIsselectedByUserInResonseTrue =\r\n () => (dispatch, getState) => {\r\n const virtualQuizDetails = getState().quizReducer?.virtualQuizData;\r\n const updatedvirtualQuizDetails =\r\n virtualQuizDetails?.AssessmentSet?.QuestionList.map((question) => {\r\n question?.ChoiceList.map((answer) => {\r\n if (answer?.IsselectedByUserInResonse === true) {\r\n question.isAnswered = true;\r\n if (answer.IsAnswer === true) {\r\n question.correctlyAnswered = true;\r\n } else {\r\n question.correctlyAnswered = false;\r\n }\r\n }\r\n return { ...answer };\r\n });\r\n return { ...question };\r\n });\r\n console.log(updatedvirtualQuizDetails);\r\n for (let i = 0; i < updatedvirtualQuizDetails.length; i++) {\r\n if (!updatedvirtualQuizDetails[i].isAnswered === true) {\r\n dispatch({\r\n type: actionTypes.quizTypes.virtualQuiz.UNATTEMPTED_QUESTION_NUMBER,\r\n payload: i + 1,\r\n });\r\n break;\r\n }\r\n if (i + 1 === updatedvirtualQuizDetails.length) {\r\n dispatch({\r\n type: actionTypes.quizTypes.virtualQuiz.UNATTEMPTED_QUESTION_NUMBER,\r\n payload: i + 1,\r\n });\r\n }\r\n }\r\n let dataAfterUpdate = {\r\n ...virtualQuizDetails,\r\n AssessmentSet: {\r\n ...virtualQuizDetails.AssessmentSet,\r\n QuestionList: updatedvirtualQuizDetails,\r\n },\r\n };\r\n dispatch(quizActionCreator.fetchQuizDetails(dataAfterUpdate));\r\n };\r\nexport const postVQAssessScore =\r\n (obj, classID) => async (dispatch, getState) => {\r\n const vQuizStarted = getState().quizReducer?.vQuizStarted;\r\n dispatch(setLoadingHandler());\r\n const header = JSON.parse(localStorage.getItem(\"headers\"));\r\n const body = JSON.stringify(obj);\r\n const url = POST_ASSESSMENT_SCORE_API_URL + classID + \"/assessScores\";\r\n\r\n await fetch(url, {\r\n method: \"POST\",\r\n headers: header,\r\n body: body,\r\n })\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n dispatch(setErrorHandler(FAIL, \"Error while submitting quiz data\"));\r\n } else if (response.status === 200) {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n if (result !== null && vQuizStarted) {\r\n dispatch(quizActionCreator.postVQAssesScoreDone(result));\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\nexport const getVQLeaderboard = (passCode) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n const header = JSON.parse(localStorage.getItem(\"headers\"));\r\n const url = GET_VIRTUAL_QUIZ_LEADERBOARD + \"?passCode=\" + passCode;\r\n\r\n await fetch(url, {\r\n method: \"GET\",\r\n headers: header,\r\n })\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n dispatch(\r\n setErrorHandler(FAIL, \"ErrorF while fetching leaderboard details\")\r\n );\r\n } else if (response.status === 200) {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n if (result !== null) {\r\n dispatch(quizActionCreator.getVQLeaderboardDetails(result));\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\nexport const getVQQNA = (id, VirtualOrLiveQuizEventId) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n const header = JSON.parse(localStorage.getItem(\"headers\"));\r\n const url =\r\n GET_VIRTUAL_QUIZ_QNA +\r\n \"?id=\" +\r\n id +\r\n \"&VirtualOrLiveQuizEventId=\" +\r\n VirtualOrLiveQuizEventId;\r\n await fetch(url, {\r\n method: \"GET\",\r\n headers: header,\r\n })\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n dispatch(\r\n setErrorHandler(FAIL, \"Error while fetching virtual quiz QNA details\")\r\n );\r\n } else if (response.status === 200) {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n if (result !== null) {\r\n dispatch(quizActionCreator.getVQQNADetails(result));\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\nexport const getVQCorrectAnswerReport = (passCode) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n const url = GET_VIRTUAL_QUIZ_CORRECT_ANSWER_REPORT + \"?passCode=\" + passCode;\r\n const header = JSON.parse(localStorage.getItem(\"headers\"));\r\n await fetch(url, {\r\n method: \"GET\",\r\n headers: header,\r\n })\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n // dispatch(\r\n // setErrorHandler(\r\n // FAIL,\r\n // \"Error while Fetching Virtual quiz correct answer report\"\r\n // )\r\n // );\r\n console.log(\"Error while Fetching Virtual quiz correct answer report\");\r\n } else if (response.status === 200) {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n if (result !== null) {\r\n dispatch(quizActionCreator.getVQCorrectAnswerReport(result));\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const setSignalRNegotiateActionHandler = () => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n const signalRNegotiateUrl =\r\n (JSON.parse(localStorage.getItem(\"tenantData\"))?.SignalRNegotiateUrl ||\r\n SIGNALR_NEGOTIATE_API_URL) + \"/api/negotiate\";\r\n console.log(signalRNegotiateUrl);\r\n const header = {\r\n \"x-ms-signalr-userid\":\r\n ENV_Name.toUpperCase() +\r\n \"+\" +\r\n localStorage.getItem(\"tenantSlugName\").toUpperCase() +\r\n \"+\" +\r\n localStorage.getItem(\"userId\"),\r\n AuthenticationToken: localStorage.getItem(\"token\"),\r\n };\r\n\r\n await fetch(signalRNegotiateUrl, {\r\n method: \"POST\",\r\n headers: header,\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n const options = {\r\n accessTokenFactory: () => result.accessToken,\r\n };\r\n\r\n let connection = new HubConnectionBuilder()\r\n .withUrl(result.url, options)\r\n .withAutomaticReconnect()\r\n .configureLogging(LogLevel.Information)\r\n .configureLogging(LogLevel.Error)\r\n .configureLogging(LogLevel.Debug)\r\n .build();\r\n\r\n connection.onclose(() => console.log(\"disconnected signalr\"));\r\n console.log(\"connecting...\");\r\n connection\r\n .start()\r\n .then(() => {\r\n console.log(\"start called\");\r\n console.log(JSON.stringify(connection));\r\n dispatch(quizActionCreator.setSignalRNegotiateAction(connection));\r\n })\r\n .catch(() => {\r\n console.log(\"cant connect to signalr\");\r\n });\r\n dispatch(quizActionCreator.setSignalRNegotiateAction(connection));\r\n })\r\n\r\n .catch((error) => {\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n\r\nexport const getBeginEndLiveQuizQuestion =\r\n (payload, currentView) => async (dispatch) => {\r\n // dispatch(setLoadingHandler());\r\n const url = GET_LIVE_QUIZ_BEGIN_END_LIVE_QUIZ_QUESTION;\r\n const header = JSON.parse(localStorage.getItem(\"headers\"));\r\n const body = JSON.stringify(payload);\r\n await fetch(url, {\r\n method: \"POST\",\r\n headers: header,\r\n body: body,\r\n })\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Error While checking begin or end Live Quiz Question\"\r\n )\r\n );\r\n } else if (response.status === 200) {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n if (result !== null) {\r\n dispatch(quizActionCreator.getBeginEndLiveQuizQuestion(result));\r\n if (currentView.toString()) {\r\n dispatch({\r\n type: actionTypes.quizTypes.liveQuiz.SET_LIVE_QUIZ_SCREEN_VIEW,\r\n payload: currentView,\r\n });\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n // dispatch(unSetLoadingHandler());\r\n });\r\n };\r\n\r\nexport const getUserChoiceCountLiveQuiz =\r\n (passCode, questionId) => async (dispatch) => {\r\n //dispatch(setLoadingHandler());\r\n const url =\r\n GET_LIVE_QUIZ_USER_CHOICE_COUNT +\r\n \"?passCode=\" +\r\n passCode +\r\n \"&questionId=\" +\r\n questionId;\r\n const header = JSON.parse(localStorage.getItem(\"headers\"));\r\n\r\n await fetch(url, {\r\n method: \"GET\",\r\n headers: header,\r\n })\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Error While fetching live quiz user choice count\"\r\n )\r\n );\r\n } else if (response.status === 200) {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n if (result !== null) {\r\n dispatch(quizActionCreator.getUserChoiceCountLiveQuiz(result));\r\n dispatch({\r\n type: actionTypes.quizTypes.liveQuiz.SET_LIVE_QUIZ_SCREEN_VIEW,\r\n payload: 2,\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n //dispatch(unSetLoadingHandler());\r\n });\r\n };\r\n\r\nexport const postLiveQuizAssessmentScoreActionHandler =\r\n (quizData, questionId, isRightAnswer, choiceId, timeSpentMilli) =>\r\n async (dispatch) => {\r\n await fetch(POST_LIVE_QUIZ_ASSESSMENT_SCORE_API_URL, {\r\n method: \"POST\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n body: JSON.stringify({\r\n classId: quizData.ShotClassId,\r\n questionId: questionId,\r\n choiceId: choiceId,\r\n isRightAnswer: isRightAnswer,\r\n courseCompletionDuration: timeSpentMilli * 10,\r\n isQuizSubmitForLiveOrVirtualEvent: false,\r\n virtualOrLiveQuizEventId: quizData.VirtualOrLiveQuizEventId,\r\n }),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n console.log(result);\r\n dispatch(quizActionCreator.postLiveQuizAssessmentScoreAction(true));\r\n })\r\n .catch((error) => {\r\n console.log(\"Fetch error \" + error);\r\n });\r\n };\r\nexport const getLiveQuizUserLeaderBoardActionHandler =\r\n (passcode) => async (dispatch) => {\r\n await fetch(GET_LIVE_QUIZ_USER_LEADER_BOARD + passcode, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then((response) => {\r\n return response.json();\r\n })\r\n .then((result) => {\r\n dispatch(quizActionCreator.getLiveQuizUserLeaderBoardAction(result));\r\n })\r\n .catch((error) => {\r\n console.log(\"Fetch error \" + error);\r\n });\r\n };\r\n","import {\r\n GET_USER_PROFILE_API_URL,\r\n ISPASSWORD_RESET_REQUIRED_API_URL,\r\n ISUSER_ACTIVE_API_URL,\r\n ISUSER_EXISTS_API_URL,\r\n PUT_EDIT_PROFILE,\r\n SENTMAIL_FORGOTPASSWORD_API_URL,\r\n} from \"../../../utils/devApiContants\";\r\nimport { errorTypes } from \"../../../utils/errorTypes\";\r\nimport * as userActionCreator from \"../actionCreators/userActionCreator\";\r\nimport {\r\n setErrorHandler,\r\n setLoadingHandler,\r\n unSetLoadingHandler,\r\n} from \"./errorActionHandler\";\r\nimport { logoutHandler } from \"./loginActionHandler\";\r\n\r\nconst { FAIL } = errorTypes;\r\n\r\n//settingUpHeaders\r\nconst myHeaders = {\r\n \"Content-Type\": \"application/json\",\r\n TenantSlugName: localStorage.getItem(\"tenantSlugName\"),\r\n};\r\n\r\nexport const isUserExistsHandler =\r\n (tenantName, userName) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n await fetch(\r\n ISUSER_EXISTS_API_URL +\r\n \"?tenantName=\" +\r\n tenantName +\r\n \"&loginId=\" +\r\n userName,\r\n {\r\n method: \"GET\",\r\n headers: myHeaders,\r\n }\r\n )\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n dispatch(\r\n setErrorHandler(FAIL, \"Error while checking user existence\")\r\n );\r\n return;\r\n } else if (response.status === 200) {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n console.log(result);\r\n if (result === false) {\r\n dispatch(userActionCreator.isUserExistsAction(false));\r\n } else {\r\n dispatch(userActionCreator.isUserExistsAction(true));\r\n }\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\nexport const isUserActiveHandler =\r\n (tenantName, userName) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n\r\n await fetch(\r\n ISUSER_ACTIVE_API_URL +\r\n \"?tenantName=\" +\r\n tenantName +\r\n \"&loginId=\" +\r\n userName,\r\n {\r\n method: \"GET\",\r\n headers: myHeaders,\r\n }\r\n )\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Error while checking whether user active is not\"\r\n )\r\n );\r\n return;\r\n } else if (response.status === 200) {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n if (result === false) {\r\n dispatch(userActionCreator.isUserActiveAction(false));\r\n } else {\r\n dispatch(userActionCreator.isUserActiveAction(true));\r\n }\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\nexport const isMailSentForForgotPasswordHandler =\r\n (tenantName, userName) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n\r\n let data = {\r\n loginId: userName,\r\n tenantName: tenantName,\r\n };\r\n await fetch(SENTMAIL_FORGOTPASSWORD_API_URL, {\r\n method: \"POST\",\r\n body: JSON.stringify(data),\r\n headers: myHeaders,\r\n })\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n dispatch(setErrorHandler(FAIL, \"Error while sending mail\"));\r\n return;\r\n } else if (response.status === 200) {\r\n return response;\r\n }\r\n })\r\n .then((result) => {\r\n console.log(result);\r\n if (result !== undefined) {\r\n dispatch(userActionCreator.isMailSentForForgotPasswordAction(true));\r\n } else {\r\n dispatch(userActionCreator.isMailSentForForgotPasswordAction(false));\r\n }\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\nexport const isPasswordResetRequiredHandler =\r\n (tenantName, userName) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n\r\n let data = {\r\n loginId: userName,\r\n tenantName: tenantName,\r\n isResetRequired: true,\r\n };\r\n await fetch(ISPASSWORD_RESET_REQUIRED_API_URL, {\r\n method: \"POST\",\r\n body: JSON.stringify(data),\r\n headers: myHeaders,\r\n })\r\n .then((response) => {\r\n if (response.status !== 200) {\r\n dispatch(\r\n setErrorHandler(\r\n FAIL,\r\n \"Error while checking whether user required reset password is not\"\r\n )\r\n );\r\n return;\r\n } else if (response.status === 200) {\r\n return response.json();\r\n }\r\n })\r\n .then((result) => {\r\n console.log(result);\r\n\r\n if (result !== undefined) {\r\n dispatch(userActionCreator.isPasswordResetRequiredAction(result));\r\n } else {\r\n dispatch(userActionCreator.isPasswordResetRequiredAction(result));\r\n }\r\n // dispatch(unSetLoadingHandler());\r\n })\r\n .catch((error) => {\r\n // dispatch(unSetLoadingHandler());\r\n console.log(\"Fetch error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n };\r\n\r\nexport const getUserProfileHandler = () => async (dispatch) => {\r\n return await fetch(GET_USER_PROFILE_API_URL, {\r\n method: \"GET\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n })\r\n .then(async (response) => {\r\n const responseData = await (response.status === 401\r\n ? response.text()\r\n : response.json());\r\n return { data: responseData, status: response.status };\r\n })\r\n .then((result) => {\r\n localStorage.setItem(\"userId\", result?.data?.ID);\r\n dispatch(userActionCreator.getUserProfileAction(result?.data));\r\n return result;\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n });\r\n};\r\n\r\nexport const editProfile = (userProfile, navigate) => async (dispatch) => {\r\n dispatch(setLoadingHandler());\r\n await fetch(PUT_EDIT_PROFILE, {\r\n method: \"PUT\",\r\n headers: JSON.parse(localStorage.getItem(\"headers\")),\r\n body: JSON.stringify(userProfile),\r\n })\r\n .then((response) => {\r\n if (response.status === 415) {\r\n dispatch(setErrorHandler(FAIL, \"Unsupported Media Type\"));\r\n } else if (response.status === 401) {\r\n dispatch(logoutHandler(navigate));\r\n } else {\r\n dispatch(getUserProfileHandler());\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(\"error \" + error);\r\n })\r\n .finally(() => {\r\n dispatch(unSetLoadingHandler());\r\n });\r\n};\r\n","const actionTypes = {\r\n API_REQ_STARTED: \"API_REQ_STARTED\",\r\n loginTypes: {\r\n PRE_LOGIN: \"PRE_LOGIN\",\r\n GET_TENANT_DETAILS: \"GET_TENANT_DETAILS\",\r\n LOGIN: \"LOGIN\",\r\n LAST_LOGIN_TIME: \"LAST_LOGIN_TIME\",\r\n LOGOUT: \"LOGOUT\",\r\n CHANGE_PASSWORD: \"CHANGE_PASSWORD\",\r\n IS_LOGGING_OUT: \"IS_LOGGING_OUT\",\r\n },\r\n userTypes: {\r\n IS_USER_EXISTS: \"IS_USER_EXISTS\",\r\n IS_USER_ACTIVE: \"IS_USER_ACTIVE\",\r\n IS_MAIL_SENT_FORGOT_PASSWORD: \"IS_MAIL_SENT_FORGOT_PASSWORD\",\r\n IS_PASSWORD_RESET_REQUIRED: \"IS_PASSWORD_RESET_REQUIRED\",\r\n GET_USER_PROFILE: \"GET_USER_PROFILE\",\r\n GET_USER_PRIVACY_POLICY: \"GET_USER_PRIVACY_POLICY\",\r\n POST_USER_PRIVACY_POLICY: \"POST_USER_PRIVACY_POLICY\",\r\n SET_INITIAL_PRIVACY_POLICY_STATE: \"SET_INITIAL_PRIVACY_POLICY_STATE\",\r\n IS_PASSWORD_RESET_DONE: \"IS_PASSWORD_RESET_DONE\",\r\n PUT_EDIT_PROFILE: \"PUT_EDIT_PROFILE\",\r\n },\r\n errorTypes: {\r\n SET_ERROR: \"SET_ERROR\",\r\n UNSET_ERROR: \"UNSET_ERROR\",\r\n API_ERROR: \"API_ERROR\",\r\n SET_LOADING: \"SET_LOADING\",\r\n UNSET_LOADING: \"UNSET_LOADING\",\r\n },\r\n homeTypes: {\r\n GET_ALL_LANGUAGES: \"GET_ALL_LANGUAGES\",\r\n SET_LANGUAGE: \"SET_LANGUAGE\",\r\n GET_NOTIFICATIONS: \"GET_NOTIFICATIONS\",\r\n SET_THEME_STYLES: \"SET_THEME_STYLES\",\r\n SET_HOME_BANNER_ITERATION: \"SET_HOME_BANNER_ITERATION\",\r\n RESET_TIMER: \"RESET_TIMER\",\r\n IS_REDIRECTED_TO_TOPICS: \"IS_REDIRECTED_TO_TOPICS\",\r\n\r\n GET_LEADERBOARD: \"GET_LEADERBOARD\",\r\n\r\n GET_ASSIGNED_CLASSES: \"GET_ASSIGNED_CLASSES\",\r\n SET_LOADING_ASSIGNED_CLASSES: \"SET_LOADING_ASSIGNED_CLASSES\",\r\n GET_ASSIGNED_CLASSES_COUNT: \"GET_ASSIGNED_CLASSES_COUNT\",\r\n\r\n GET_COMPLETED_CLASSES: \"GET_COMPLETED_CLASSES\",\r\n SET_LOADING_COMPLETED_CLASSES: \"SET_LOADING_COMPLETED_CLASSES\",\r\n GET_COMPLETED_CLASSES_COUNT: \"GET_COMPLETED_CLASSES_COUNT\",\r\n\r\n GET_TRENDING_CLASSES: \"GET_TRENDING_CLASSES\",\r\n SET_LOADING_TRENDING_CLASSES: \"SET_LOADING_TRENDING_CLASSES\",\r\n GET_TRENDING_CLASSES_COUNT: \"GET_TRENDING_CLASSES_COUNT\",\r\n\r\n GET_INPROGRESS_CLASSES: \"GET_INPROGRESS_CLASSES\",\r\n SET_LOADING_INPROGRESS_CLASSES: \"SET_LOADING_INPROGRESS_CLASSES\",\r\n GET_INPROGRESS_CLASSES_COUNT: \"GET_INPROGRESS_CLASSES_COUNT\",\r\n\r\n GET_NOTINPROGRESS_CLASSES: \"GET_NOTINPROGRESS_CLASSES\",\r\n SET_LOADING_NOTINPROGRESS_CLASSES: \"SET_LOADING_NOTINPROGRESS_CLASSES\",\r\n GET_NOTINPROGRESS_CLASSES_COUNT: \"GET_NOTINPROGRESS_CLASSES_COUNT\",\r\n\r\n GET_ASSIGNED_SERIES: \"GET_ASSIGNED_SERIES\",\r\n SET_LOADING_ASSIGNED_SERIES: \"SET_LOADING_ASSIGNED_SERIES\",\r\n GET_ASSIGNED_SERIES_COUNT: \"GET_ASSIGNED_SERIES_COUNT\",\r\n\r\n GET_COMPLETED_SERIES: \"GET_COMPLETED_SERIES\",\r\n SET_LOADING_COMPLETED_SERIES: \"SET_LOADING_COMPLETED_SERIES\",\r\n GET_COMPLETED_SERIES_COUNT: \"GET_COMPLETED_SERIES_COUNT\",\r\n\r\n GET_TRENDING_SERIES: \"GET_TRENDING_SERIES\",\r\n SET_LOADING_TRENDING_SERIES: \"SET_LOADING_TRENDING_SERIES\",\r\n GET_TRENDING_SERIES_COUNT: \"GET_TRENDING_SERIES_COUNT\",\r\n\r\n GET_INPROGRESS_SERIES: \"GET_INPROGRESS_SERIES\",\r\n SET_LOADING_INPROGRESS_SERIES: \"SET_LOADING_INPROGRESS_SERIES\",\r\n GET_INPROGRESS_SERIES_COUNT: \"GET_INPROGRESS_SERIES_COUNT\",\r\n\r\n GET_NOTINPROGRESS_SERIES: \"GET_NOTINPROGRESS_SERIES\",\r\n SET_LOADING_NOTINPROGRESS_SERIES: \"SET_LOADING_NOTINPROGRESS_SERIES\",\r\n GET_NOTINPROGRESS_SERIES_COUNT: \"GET_NOTINPROGRESS_SERIES_COUNT\",\r\n\r\n HOME_GET_TRAININGTYPE: \"HOME_GET_TRAININGTYPE\",\r\n\r\n SET_HOME_FILTER: \"SET_HOME_FILTER\",\r\n SET_HOME_FILTER_SELECTED: \"SET_HOME_FILTER_SELECTED\",\r\n\r\n SET_INITIAL_CLASSES_SERIES_STATE: \"SET_INITIAL_CLASSES_SERIES_STATE\",\r\n },\r\n favoriteTypes: {\r\n IS_FAV_AVAILABLE: \"IS_FAV_AVAILABLE\",\r\n\r\n GET_OTHER_FAV_CLASSES: \"GET_OTHER_FAV_CLASSES\",\r\n SET_LOADING_OTHER_FAV_CLASSES: \"SET_LOADING_OTHER_FAV_CLASSES\",\r\n GET_OTHER_FAV_CLASSES_COUNT: \"GET_OTHER_FAV_CLASSES_COUNT\",\r\n\r\n GET_OTHER_FAV_SERIES: \"GET_OTHER_FAV_SERIES\",\r\n SET_LOADING_OTHER_FAV_SERIES: \"SET_LOADING_OTHER_FAV_SERIES\",\r\n GET_OTHER_FAV_SERIES_COUNT: \"GET_OTHER_FAV_SERIES_COUNT\",\r\n\r\n SET_INITIAL_FAVORITE_CLASSES_SERIES_STATE:\r\n \"SET_INITIAL_FAVORITE_CLASSES_SERIES_STATE\",\r\n },\r\n classTypes: {\r\n GET_CLASS_DETAILS: \"GET_CLASS_DETAILS\",\r\n SET_CURRENT_CLASS_VIEW: \"SET_CURRENT_CLASS_VIEW\",\r\n GET_CLASS_TAB: \"GET_CLASS_TAB\",\r\n GET_CLASS_ASSET_ID: \"GET_CLASS_ASSET_ID\",\r\n GET_CLASS_QUERIES: \"GET_CLASS_QUERIES\",\r\n GET_SCORM_VERSION: \"GET_SCORM_VERSION\",\r\n GET_SCORM_BOOKMARK: \"GET_SCORM_BOOKMARK\",\r\n ADD_REMOVE_FAVORITE_CLASS: \"ADD_REMOVE_FAVORITE_CLASS\",\r\n UPDATE_VIDEO_DURATION_FOR_LOGOUT: \"UPDATE_VIDEO_DURATION_FOR_LOGOUT\",\r\n POST_ASSESSMENT_SCORE: \"POST_ASSESSMENT_SCORE\",\r\n GET_NEXT_CLASS: \"GET_NEXT_CLASS\",\r\n GET_NEXT_CLASS_IN_SERIES: \"GET_NEXT_CLASS_IN_SERIES\",\r\n GET_RELATED_CLASSES: \"GET_RELATED_CLASSES\",\r\n POST_SURVEY: \"POST_SURVEY\",\r\n },\r\n seriesTypes: {\r\n GET_CLASSES_BY_SERIESID: \"GET_CLASSES_BY_SERIESID\",\r\n ADD_REMOVE_FAVORITE_SERIES: \"ADD_REMOVE_FAVORITE_SERIES\",\r\n },\r\n topicsTypes: {\r\n GET_ALL_PUBLISHED_TOPICS: \"GET_ALL_PUBLISHED_TOPICS\",\r\n SET_LOADING_PUBLISHED_TOPICS: \"SET_LOADING_PUBLISHED_TOPICS\",\r\n GET_ALL_PUBLISHED_TOPICS_COUNT: \"GET_ALL_PUBLISHED_TOPICS_COUNT\",\r\n\r\n GET_SUB_TOPICS: \"GET_SUB_TOPICS\",\r\n GET_TOPIC_DETAILS: \"GET_TOPIC_DETAILS\",\r\n SET_LOADING_TOPICS_DETAILS: \"SET_LOADING_TOPICS_DETAILS\",\r\n\r\n SET_INITIAL_TOPICS_STATE: \"SET_INITIAL_TOPICS_STATE\",\r\n },\r\n connectTypes: {\r\n GET_GENERAL_QUERIES: \"GET_GENERAL_QUERIES\",\r\n CONNECT_FORUM_TOPICS: \"CONNECT_FORUM_TOPICS\",\r\n CONNECT_FORUM_TOPICSFOLLOWUNFOLLOW: \"CONNECT_FORUM_TOPICSFOLLOWUNFOLLOW\",\r\n CONNECT_FORUM_TOPICSDETAILS: \"CONNECT_FORUM_TOPICSDETAILS\",\r\n CONNECT_FORUM_ADDTHREADS: \"CONNECT_FORUM_ADDTHREADS\",\r\n CONNECT_FORUM_ADDTHREADSCOMMENTS: \"CONNECT_FORUM_ADDTHREADSCOMMENTS\",\r\n CONNECT_FORUM_DELETETHREAD: \"CONNECT_FORUM_DELETETHREAD\",\r\n CONNECT_POLL_GETPOLLS: \"CONNECT_POLL_GETPOLLS\",\r\n CONNECT_POLL_GETRESPONSE: \"CONNECT_POLL_GETRESPONSE\",\r\n CONNECT_POLL_POSTUSERPOLLRESPONSE: \"CONNECT_POLL_POSTUSERPOLLRESPONSE\",\r\n CONNECT_POLL_ISPOLLAVAILABLE: \"CONNECT_POLL_ISPOLLAVAILABLE\",\r\n CONNECT_POLL_GETPOLLHISTORY: \"CONNECT_POLL_GETPOLLHISTORY\",\r\n },\r\n commonTypes: {\r\n GET_RELATED_RESULT: \"GET_RELATED_RESULT\",\r\n TOGGLE_ADVANCE_SEARCH: \"TOGGLE_ADVANCE_SEARCH\",\r\n TOGGLE_ADVANCE_SEARCH_LOADING: \"TOGGLE_ADVANCE_SEARCH_LOADING\",\r\n GLOBAL_SEARCH_TEXT: \"GLOBAL_SEARCH_TEXT\",\r\n TOGGLE_SEARCHBAR: \"TOGGLE_SEARCHBAR\",\r\n DROPDOWN_TEXT_BOOLEAN: \"DROPDOWN_TEXT_BOOLEAN\",\r\n UPDATE_GLOBAL_CHECKBOX: \"UPDATE_GLOBAL_CHECKBOX\",\r\n UPDATE_RESULT_LANGUAGE: \"UPDATE_RESULT_LANGUAGE\",\r\n },\r\n globalSearchTypes: {\r\n GLOBAL_SEARCH: \"GLOBAL_SEARCH\",\r\n REMOVE_GLOBAL_RESULT: \"REMOVE_GLOBAL_RESULT\",\r\n UPDATE_DID_YOU_MEAN_SUGGESTIONS: \"UPDATE_DID_YOU_MEAN_SUGGESTIONS\",\r\n UPDATE_SEARCH_TEXT: \"UPDATE_SEARCH_TEXT\",\r\n },\r\n contributeTypes: {\r\n POST_CONTRIBUTE_CLASSES: \"POST_CONTRIBUTE_CLASSES\",\r\n POST_CONTRIBUTE_FILE_CLASSES: \"POST_CONTRIBUTE_FILE_CLASSES\",\r\n GET_CONTRIBUTE_CLASSES_SUBMITTED: \"GET_CONTRIBUTE_CLASSES_SUBMITTED\",\r\n GET_CONTRIBUTE_CLASSES_COUNT: \"GET_CONTRIBUTE_CLASSES_COUNT\",\r\n GET_CONTRIBUTE_YOUTUBE_SEARCH: \"GET_CONTRIBUTE_YOUTUBE_SEARCH\",\r\n GET_CONTRIBUTE_YOUTUBE_COUNT: \"GET_CONTRIBUTE_YOUTUBE_COUNT\",\r\n GET_CONTRIBUTE_CLASS_DETAILS: \"GET_CONTRIBUTE_CLASS_DETAILS\",\r\n GET_CONTRIBUTE_ASSET_ID: \"GET_CONTRIBUTE_ASSET_ID\",\r\n UPLOAD_CHUNK: \"UPLOAD_CHUNK\",\r\n },\r\n quizTypes: {\r\n VALIDATE_PASSCODE: \"VALIDATE_PASSCODE\",\r\n RESET_QUIZ_TO_PASSCODE_ACCESS_PAGE: \"RESET_QUIZ_TO_PASSCODE_ACCESS_PAGE\",\r\n virtualQuiz: {\r\n FETCH_QUIZ_DETAILS: \"FETCH_QUIZ_DETAILS\",\r\n POSTVQASSESSCORE: \"POSTVQASSESSCORE\",\r\n FETCH_QUIZ_LEADERBOARD: \"FETCH_QUIZ_LEADERBOARD\",\r\n FETCH_QUIZ_QNA: \"FETCH_QUIZ_QNA\",\r\n FETCH_QUIZ_CORRECT_ANSWER_REPORT: \"FETCH_QUIZ_CORRECT_ANSWER_REPORT\",\r\n UNATTEMPTED_QUESTION_NUMBER: \"UNATTEMPTED_QUESTION_NUMBER\",\r\n timer: {\r\n VQUIZ_TIMER_STARTED: \"VQUIZ_TIMER_STARTED\",\r\n VQUIZ_TIMER_ENDED: \"VQUIZ_TIMER_ENDED\",\r\n VQUIZ_TIMER_ENDEDCOUNT: \"VQUIZ_TIMER_ENDEDCOUNT\",\r\n VQUIZ_TIMER_STARTEDCOUNT: \"VQUIZ_TIMER_STARTEDCOUNT\",\r\n SET_TIMER_DIALOG: \"SET_TIMER_DIALOG\",\r\n SET_SESSION_DIALOG: \"SET_SESSION_DIALOG\",\r\n },\r\n },\r\n liveQuiz: {\r\n SET_SIGNALR_NAGOTIATE: \"SET_SIGNALR_NAGOTIATE\",\r\n FETCH_BEGIN_END_LIVE_QUIZ_QUESTION: \"FETCH_BEGIN_END_LIVE_QUIZ_QUESTION\",\r\n FETCH_USER_CHOICE_COUNT_LIVE_QUIZ: \"FETCH_USER_CHOICE_COUNT_LIVE_QUIZ\",\r\n SET_LIVE_QUIZ_SCREEN_VIEW: \"SET_LIVE_QUIZ_SCREEN_VIEW\",\r\n GET_LIVE_QUIZ_USER_LEADERBOARD: \"GET_LIVE_QUIZ_USER_LEADERBOARD\",\r\n POST_LIVE_QUIZ_ASSESSMENT_SCORE: \"POST_LIVE_QUIZ_ASSESSMENT_SCORE\",\r\n SET_LIVE_QUIZ_NORMAL_EXIT: \"SET_LIVE_QUIZ_NORMAL_EXIT\",\r\n },\r\n },\r\n creditTypes: {\r\n GET_CREDIT_DETAILS: \"GET_CREDIT_DETAILS\",\r\n SET_CREDIT_STATE_TYPE: \"SET_CREDIT_STATE_TYPE\",\r\n SET_CREDIT_FILTER_TYPE: \"SET_CREDIT_FILTER_TYPE\",\r\n },\r\n notificationTypes: {\r\n GET_BELL_NOTIFICATIONS: \"GET_BELL_NOTIFICATIONS\",\r\n GET_ALL_BELL_NOTIFICATIONS: \"GET_ALL_BELL_NOTIFICATIONS\",\r\n GET_NOTIFICATION_SETTINGS: \"GET_NOTIFICATION_SETTINGS\",\r\n POST_NOTIFICATION_SETTINGS: \"POST_NOTIFICATION_SETTINGS\",\r\n },\r\n contactUsTypes: {\r\n POST_CONTACT_US: \"POST_CONTACT_US\",\r\n GET_CONTACT_US: \"GET_CONTACT_US\",\r\n },\r\n reports: {\r\n REPORT_GET_CONSOLIDATEDREPORT: \"REPORT_GET_CONSOLIDATEDREPORT\",\r\n REPORT_GET_SKILLEDCLASSES: \"REPORT_GET_SKILLEDCLASSES\",\r\n REPORT_GET_MYSKILLS: \"REPORT_GET_MYSKILLS\",\r\n REPORT_GET_MYCERTIFICATES: \"REPORT_GET_MYCERTIFICATES\",\r\n REPORT_GET_USERBADGES: \"REPORT_GET_USERBADGES\",\r\n },\r\n};\r\nexport default actionTypes;\r\n","export const convertToMillisec = () => {\r\n let tolDurmininms = localStorage.getItem(\"currentTimeMin\");\r\n let tolDurhrinms = localStorage.getItem(\"currentTimeHr\");\r\n let tolDursecinsec = localStorage.getItem(\"currentTimeSec\");\r\n let totalDurationinms = localStorage.getItem(\"currentTimeMs\");\r\n let totalQuizDurationinms = 0;\r\n tolDurmininms = tolDurmininms * 60 * 1000;\r\n tolDurhrinms = tolDurhrinms * 60 * 60 * 1000;\r\n tolDursecinsec = tolDursecinsec * 1000;\r\n totalQuizDurationinms =\r\n Number(tolDurmininms) +\r\n Number(tolDurhrinms) +\r\n Number(tolDursecinsec) +\r\n Number(totalDurationinms);\r\n const replacedTotalQDuration = totalQuizDurationinms\r\n .toString()\r\n .replaceAll(/&/g, \"&\")\r\n .replaceAll(//g, \">\")\r\n .replaceAll(/\"/g, '\"')\r\n .replaceAll(/'/g, \"'\");\r\n localStorage.setItem(\"totalQDuration\", replacedTotalQDuration);\r\n return totalQuizDurationinms;\r\n};\r\n\r\nexport const convertMillisecToOther = (totalDurationinms) => {\r\n let secs = parseInt(totalDurationinms / 1000);\r\n let mins = secs / 60;\r\n secs = secs % 60;\r\n let milliseconds = parseInt(totalDurationinms % 1000);\r\n let hours = mins / 60;\r\n mins %= 60;\r\n localStorage.setItem(\"resumeTimeMin\", parseInt(mins));\r\n localStorage.setItem(\"resumeTimeHr\", parseInt(hours));\r\n localStorage.setItem(\"resumeTimeSec\", parseInt(secs));\r\n localStorage.setItem(\"resumeTimeMs\", parseInt(milliseconds));\r\n};\r\n\r\nexport const userScoreObjCreation = (\r\n IsSubmitted,\r\n IsUserAssessmentSuccess,\r\n quizData,\r\n virtualQuizData\r\n) => {\r\n const totalQDuration = convertToMillisec();\r\n const { ShotClassId, VirtualOrLiveQuizEventId } = quizData;\r\n let UserQuestionResponse = [];\r\n virtualQuizData.AssessmentSet.QuestionList.forEach((ques) => {\r\n let optionId, IsRightAnswer;\r\n if (ques.correctlyAnswered === true) {\r\n IsRightAnswer = true;\r\n } else {\r\n IsRightAnswer = false;\r\n }\r\n ques.ChoiceList.forEach((option) => {\r\n if (option.Isselected === true) optionId = option.ID;\r\n });\r\n UserQuestionResponse.push({\r\n QuestionId: ques.ID,\r\n ChoiceId: optionId,\r\n IsRightAnswer: IsRightAnswer,\r\n });\r\n });\r\n return {\r\n ClassId: parseInt(ShotClassId),\r\n ClassName: virtualQuizData.Name,\r\n CourseCompletionDuration: totalQDuration,\r\n IsQuizSubmitForLiveOrVirtualEvent: IsSubmitted,\r\n IsUserAssessmentSuccess: IsUserAssessmentSuccess,\r\n Score: 0,\r\n TotalCACount: 0,\r\n UserQuestionResponse: UserQuestionResponse,\r\n VirtualOrLiveQuizEventId: VirtualOrLiveQuizEventId,\r\n };\r\n};\r\n\r\nexport const createPayloadForBeginEndLiveQuiz = (\r\n endQuestionId,\r\n instructorId,\r\n passCode,\r\n shotClassId,\r\n tenantId\r\n) => {\r\n return {\r\n endQuestionId: endQuestionId,\r\n instructorId: instructorId,\r\n passCode: passCode,\r\n shotClassId: shotClassId,\r\n tenantId: tenantId,\r\n };\r\n};\r\n","export const decodeToken = (token) => {\r\n if (!token) {\r\n return null;\r\n }\r\n const base64URL = token.split(\".\")[1];\r\n if (!base64URL) {\r\n return null;\r\n }\r\n\r\n // Replace URL-safe characters with standard Base64 characters\r\n let base64 = base64URL.replace(/-/g, \"+\").replace(/_/g, \"/\");\r\n\r\n // Add padding if necessary\r\n while (base64.length % 4) {\r\n base64 += \"=\";\r\n }\r\n\r\n try {\r\n const decodedString = window.atob(base64);\r\n const decodedToken = JSON.parse(decodedString);\r\n return decodedToken;\r\n } catch (e) {\r\n console.error(\"Failed to decode Base64 string:\", e);\r\n return null;\r\n }\r\n};\r\n"," //---------------------------------Base URL-----------------------------------\r\n//DEV\r\n// export const SHOTCLASS_ROOT_API_URL = \"https://dev1services.shotclasses.com\";\r\n//QA\r\n// export const SHOTCLASS_ROOT_API_URL = \"https://qa1services.shotclasses.com\";\r\n//Prod-EU\r\n// export const SHOTCLASS_ROOT_API_URL = \"https://services1.shotclasses.com\";\r\n//NEW - Prod-EU\r\n// export const SHOTCLASS_ROOT_API_URL = \"https://prod-apis.azurewebsites.net\";\r\n//Prod-US\r\n//export const SHOTCLASS_ROOT_API_URL = \"https://services2.shotclasses.com\";\r\n//LTIM-Prod\r\nexport const SHOTCLASS_ROOT_API_URL = \"https://lighthouseservices.ltimindtree.com\";\r\n// NEW-QA\r\n//export const SHOTCLASS_ROOT_API_URL = \"https://qa-apis.azurewebsites.net\";\r\n//Local\r\n//export const SHOTCLASS_ROOT_API_URL = \"http://localhost:65422\";\r\n// NEW-QA\r\n//export const SHOTCLASS_ROOT_API_URL = \"https://qa-apis.azurewebsites.net\";\r\n\r\n\r\nexport const SHOTCLASS_API_URL = SHOTCLASS_ROOT_API_URL + \"/api/v3\";\r\n//---------------------------------End Base URL-----------------------------------\r\n\r\n//------------------------Adal Config region------------------------------------\r\nexport const O365_RESOURCE = \"https://sceur.sharepoint.com\";\r\n\r\n//Dev\r\n// export const CLIENTID = \"1096bef4-73bf-4f96-ae41-e9b9017ea3bc\";\r\n// export const LOGIN_RESOURCE = \"http://shotclassesdev.onmicrosoft.com/services\";\r\n\r\n//QA\r\n// export const CLIENTID = \"a521d18b-9da3-4332-9b66-43e2705efef1\";\r\n// export const LOGIN_RESOURCE = \"http://shotclassesdev.onmicrosoft.com/services\";\r\n\r\n//Europe Prod\r\n// export const CLIENTID = \"d0b98fe4-5791-4ce3-83e1-b336f77af83a\";\r\n// export const LOGIN_RESOURCE = \"https://prod1ad.onmicrosoft.com/api\";\r\n\r\n\r\n//NEW Europe Prod\r\n// export const CLIENTID = \"d0b98fe4-5791-4ce3-83e1-b336f77af83a\";\r\n// export const LOGIN_RESOURCE = \"https://prod1ad.onmicrosoft.com/api\";\r\n\r\n//US Prod\r\n// export const CLIENTID = \"a5b00bb2-e6f8-4736-b76a-216f93f83ebf\";\r\n// export const LOGIN_RESOURCE = \"https://prod1usad.onmicrosoft.com/api\";\r\n\r\n//LTIM-Prod\r\nexport const CLIENTID = \"95d25ba7-81b1-40cb-9b1f-fd97b3ddb8b6\";\r\nexport const LOGIN_RESOURCE = \"api://ltimindtree.com/746b76d5-c030-4ce1-b06a-7624e8f138d1\";\r\n\r\n//QA-New\r\n// export const CLIENTID = \"0a9e58ac-81c2-402a-a743-a5038ba2d1b2\";\r\n// export const LOGIN_RESOURCE = \"api://shotclassesentraid.onmicrosoft.com/1847b815-1ad2-407c-b7f6-a3a71fa5a027\";\r\n\r\n// export const SASToken=\"?ajvrffoif\";\r\n//-------------------------End adal Config region----------------------------\r\n\r\n//-------------------------Environment name----------------------------------\r\n//Dev Service\r\n// export const ENV_Name = \"DEV\";\r\n//QA Service\r\n//export const ENV_Name = \"QA\";\r\n//PROD Service\r\n// export const ENV_Name = \"PROD\";\r\nexport const ENV_Name = \"LTIM\"\r\n//-------------------------End Environment name-------------------------------\r\n\r\n//-------------------------Mediakind License Keys-----------------------------\r\nexport const MKPLAYER_LICENSE_KEY = \"d0167b1c-9767-4287-9ddc-e0fa09d31e02\";\r\n//-------------------------End Mediakind License Keys-------------------------\r\n\r\n//get user details using Graph API\r\nexport const SIGNALR_NEGOTIATE_API_URL =\r\n \"https://devshortclassfuntionapp.azurewebsites.net\";\r\nexport const GRAPH_ENDPOINT_API_URL = \"https://graph.microsoft.com/v1.0/me\";\r\n\r\n//get tenant details\r\nexport const PRE_LOGIN_API_URL =\r\n SHOTCLASS_API_URL + \"/Tenants/details?TenantName=\";\r\n\r\n//login\r\nexport const LOGIN_API_URL = SHOTCLASS_API_URL + \"/Logins/Token\";\r\n//aad login admin consent\r\nexport const AAD_ADMIN_CONSENT_API_URL =\r\n SHOTCLASS_ROOT_API_URL + \"/api/v1/AAD/PostAADAdminConsent\";\r\n//logout\r\nexport const LOGOUT_API_URL = SHOTCLASS_API_URL + \"/Users/\";\r\n\r\n//check if user exists/active or not\r\nexport const ISUSER_EXISTS_API_URL = SHOTCLASS_API_URL + \"/Login/IsUserIdExist\";\r\nexport const ISUSER_ACTIVE_API_URL = SHOTCLASS_API_URL + \"/Login/IsUserActive\";\r\n//forgot password -setnt mail\r\nexport const SENTMAIL_FORGOTPASSWORD_API_URL =\r\n SHOTCLASS_API_URL + \"/Login/ForgotPassword\";\r\n//check if password reset is required or not\r\nexport const ISPASSWORD_RESET_REQUIRED_API_URL =\r\n SHOTCLASS_API_URL + \"/Login/PasswordResetRequired\";\r\n\r\n//home apis\r\n\r\n//get all languages\r\nexport const GET_ALL_LANGUAGES_API_URL =\r\n SHOTCLASS_API_URL + \"/MasterLanguage/GetAllVariantLanguages\";\r\n//get notifications\r\nexport const GET_NOTIFICATIONS_API_URL =\r\n SHOTCLASS_API_URL + \"/Notifications/NotificationsHistory\";\r\n\r\n//get leaderboard points of user\r\nexport const GET_LEADERBOARDDATA_API_URL =\r\n SHOTCLASS_API_URL + \"/me/games/userLeaderboard\";\r\n\r\n//get leaderboard details\r\nexport const GET_LEADERBOARD_DETAILS =\r\n SHOTCLASS_API_URL + \"/me/games/userLeaderboard?gameCode=\";\r\n\r\n//get last login time\r\nexport const GET_LAST_LOGIN_TIME_API_URL =\r\n SHOTCLASS_API_URL + \"/me/lastLoginTime\";\r\n//get user profile\r\nexport const GET_USER_PROFILE_API_URL = SHOTCLASS_API_URL + \"/me/profile\";\r\n\r\n//home classes and series apis\r\nexport const GET_ASSIGNED_CLASSES_API_URL =\r\n SHOTCLASS_API_URL + \"/me/ShotClasses/assigned/none?pageNum=\";\r\n\r\nexport const GET_COMPLETED_CLASSES_API_URL =\r\n SHOTCLASS_API_URL + \"/me/ShotClasses/complete/none?pageNum=\";\r\n\r\nexport const GET_TRENDING_CLASSES_API_URL =\r\n SHOTCLASS_API_URL + \"/ShotClasses/trending/none?Locale=\";\r\n\r\nexport const GET_ASSIGNED_SERIES_API_URL =\r\n SHOTCLASS_API_URL + \"/me/programs/assigned?pageNum=\";\r\n\r\nexport const GET_COMPLETED_SERIES_API_URL =\r\n SHOTCLASS_API_URL + \"/me/programs/completed?pageNum=\";\r\n\r\nexport const GET_TRENDING_SERIES_API_URL =\r\n SHOTCLASS_API_URL + \"/me/programs/trending\";\r\n//get privacy policy for a user\r\nexport const GET_USER_PRIVACY_POLICY_URL =\r\n SHOTCLASS_API_URL + \"/PrivacyPolicies/info\";\r\n//post privacy policy for a user\r\nexport const POST_USER_PRIVACY_POLICY_URL =\r\n SHOTCLASS_API_URL + \"/PrivacyPolicies\";\r\n\r\n//get class details by classID\r\nexport const GET_CLASS_DETAILS_API_URL = SHOTCLASS_API_URL + \"/ShotClasses/\";\r\n//get user class access by classID\r\nexport const GET_USER_CLASS_ACCESS_API_URL =\r\n SHOTCLASS_API_URL + \"/ShotClasses/IsUserHaveAccessToClass?shotClassId=\";\r\n//get queries for class\r\nexport const GET_QUERIES_CLASS_API_URL =\r\n SHOTCLASS_API_URL + \"/me/LearnerQueries\";\r\n//post query comment\r\nexport const POST_QUERY_COMMENT_API_URL = SHOTCLASS_API_URL + \"/LearnerQueries\";\r\n//Post query class\r\nexport const POST_QUERY_CLASS_API_URL = SHOTCLASS_API_URL + \"/LearnerQueries\";\r\n//get class asset id\r\nexport const GET_CLASS_ASSET_ID_API_URL =\r\n SHOTCLASS_API_URL + \"/mediaservices/shotclass/tokens?assetId=\";\r\n//post class status/progress in class\r\nexport const UPDATE_CLASS_PROGRESS_STATUS_API_URL =\r\n SHOTCLASS_ROOT_API_URL + \"/api/v3/me/shotclasses/status?classId=\";\r\n//post video played duration in class\r\nexport const UPDATE_VIDEO_PLAYED_DURATION_API_URL =\r\n SHOTCLASS_ROOT_API_URL +\r\n \"/api/v1/ShotClass/UpdateVideoPlayedDuration?classId=\";\r\n//post assessment score\r\nexport const POST_ASSESSMENT_SCORE_API_URL =\r\n SHOTCLASS_API_URL + \"/ShotClasses/\";\r\n//get next class\r\nexport const GET_NEXT_CLASS_API_URL =\r\n SHOTCLASS_API_URL + \"/me/shotclasses/next/none\";\r\n//get next class in series\r\nexport const GET_NEXT_CLASS_IN_SERIES_API_URL =\r\n SHOTCLASS_API_URL + \"/me/shotclasses/nextClassInSeriesV4?programID=\";\r\n//get related classes\r\nexport const GET_RELATED_CLASSES_API_URL =\r\n SHOTCLASS_API_URL + \"/shotclasses/related?locale=\";\r\n//post ratings for class\r\nexport const POST_RATING_CLASS_API_URL = SHOTCLASS_API_URL + \"/me/shotclasses/\";\r\n//post survey\r\nexport const POST_SURVEY_API_URL =\r\n SHOTCLASS_API_URL + \"/ShotClasses/postUserSurvey\";\r\n\r\n//get scrom version\r\nexport const GET_SCORM_VERSION_API_URL = SHOTCLASS_API_URL + \"/scorms/version/\";\r\n//get scrom bookmark\r\nexport const GET_SCORM_BOOKMARK_API_URL =\r\n SHOTCLASS_API_URL + \"/scorms/bookmark/\";\r\n//update scrom bookmark\r\nexport const UPDATE_SCORM_BOOKMARK_API_URL =\r\n SHOTCLASS_API_URL + \"/scorms/updatebookmark\";\r\n\r\n//get classes details by seriesID\r\nexport const GET_CLASSES_BY_SERIESID_API_URL =\r\n SHOTCLASS_API_URL + \"/me/ShotClasses/getClassesByProgramID?ProgramID=\";\r\n\r\n// add/remove favourite class\r\nexport const ADD_REMOVE_FAVORITE_CLASS_API_URL =\r\n SHOTCLASS_API_URL + \"/shotclasses/\";\r\n// add/remove favourite series\r\nexport const ADD_REMOVE_FAVORITE_SERIES_API_URL =\r\n SHOTCLASS_API_URL + \"/programs/\";\r\n\r\n//get favorites classes and series\r\nexport const GET_FAVORITE_CLASSES_SERIES_API_URL =\r\n SHOTCLASS_API_URL + \"/me/courses/favourite\";\r\n\r\n//get published topics\r\nexport const GET_ALL_PUBLISHED_TOPICS_API_URL =\r\n SHOTCLASS_API_URL + \"/topics/grouptopics/published?pageNo=\";\r\n//get published topics\r\nexport const GET_TOPIC_DETAILS_API_URL = SHOTCLASS_API_URL + \"/topics/\";\r\n\r\n//get Learner queries\r\nexport const GET_GENERAL_QUERIES_API_URL =\r\n SHOTCLASS_API_URL + \"/me/LearnerQueries\";\r\n//Put Learner queries\r\nexport const PUT_GENERAL_QUERIES_API_URL =\r\n SHOTCLASS_API_URL + \"/LearnerQueries\";\r\n//Post Learner queries\r\nexport const POST_GENERAL_QUERIES_API_URL =\r\n SHOTCLASS_API_URL + \"/LearnerQueries\";\r\n\r\n//get Learner Forum Topics\r\nexport const GET_FORUM_TOPICS_API_URL = SHOTCLASS_API_URL + \"/me/forumtopics\";\r\n\r\n//get contribute count for a user\r\nexport const GET_CONTRIBUTE_CLASSES_SUBMITTED =\r\n SHOTCLASS_API_URL + \"/ShotClassSourcings/submitted\";\r\n//post contribute for a user\r\nexport const POST_CONTRIBUTE_CLASSES =\r\n SHOTCLASS_API_URL + \"/ShotClassSourcings\";\r\n// Get Contribute through youtube search\r\nexport const GET_CONTRIBUTE_YOUTUBE_SEARCH =\r\n SHOTCLASS_API_URL + \"/Videos/youtubevideos?searchTerm=\";\r\n// Get Contribute through youtube search count\r\nexport const GET_CONTRIBUTE_YOUTUBE_COUNT =\r\n SHOTCLASS_API_URL + \"/Videos/youtubevideoscount?searchTerm=\";\r\n//validate quiz passcode\r\nexport const VALIDATE_PASSCODE_API_URL =\r\n SHOTCLASS_API_URL + \"/LiveQuizEvents/ValidateLiveEventPasscode\";\r\n//https://dev1services.shotclasses.com/api/v3/LiveQuizEvents/GetLiveQuizUserLeaderBoard?passCode=romeo\r\nexport const GET_LIVE_QUIZ_USER_LEADER_BOARD =\r\n SHOTCLASS_API_URL + \"/LiveQuizEvents/GetLiveQuizUserLeaderBoard?passCode=\";\r\nexport const PASSWORD_RESET_API_URL = SHOTCLASS_API_URL + \"/Users/Password\";\r\n// get notification api\r\nexport const GET_BELL_NOTIFICATIONS_API_URL =\r\n SHOTCLASS_API_URL + \"/Notifications/NotificationsHistory\";\r\nexport const FETCH_VIRTUAL_QUIZ_API_URL =\r\n SHOTCLASS_API_URL + \"/ShotClasses/GetClassDetailsForVirtualOrLiveEvent\";\r\nexport const PUT_EDIT_PROFILE = SHOTCLASS_API_URL + \"/Users/userID\";\r\nexport const GET_VIRTUAL_QUIZ_LEADERBOARD =\r\n SHOTCLASS_API_URL + \"/LiveQuizEvents/GetLiveQuizLeaderBoard\";\r\nexport const GET_VIRTUAL_QUIZ_QNA =\r\n SHOTCLASS_API_URL + \"/ShotClasses/GetClassDetailsForVirtualOrLiveEvent\";\r\nexport const GET_VIRTUAL_QUIZ_CORRECT_ANSWER_REPORT =\r\n SHOTCLASS_API_URL + \"/LiveQuizEvents/GetCorrectAnswerReport\";\r\nexport const GET_LIVE_QUIZ_BEGIN_END_LIVE_QUIZ_QUESTION =\r\n SHOTCLASS_API_URL + \"/LiveQuizEvents/BeginEndLiveQuizQuestion\";\r\nexport const GET_LIVE_QUIZ_USER_CHOICE_COUNT =\r\n SHOTCLASS_API_URL + \"/LiveQuizEvents/GetUserChoiceCountLiveQuiz\";\r\nexport const POST_LIVE_QUIZ_ASSESSMENT_SCORE_API_URL =\r\n SHOTCLASS_API_URL + \"/LiveQuizEvents/PostAssesScoreForLiveQuizForShotclasses\";\r\n\r\n//notification enabled settings\r\nexport const GET_NOTIFICATION_SETTINGS_API_URL =\r\n SHOTCLASS_API_URL + \"/me/notification/Enabled\";\r\n\r\n//notification off/disable settings\r\nexport const POST_NOTIFICATION_SETTINGS_API_URL = SHOTCLASS_API_URL + \"/me/\";\r\n\r\n//contact us\r\nexport const POST_CONTACT_US_API_URL =\r\n SHOTCLASS_API_URL + \"/Notifications/postComplaintWeb\";\r\n\r\n//cotactus history\r\nexport const GET_CONTACT_US_API_URL =\r\n SHOTCLASS_API_URL + \"/Notifications/ContactUsHistory\";\r\n\r\n//reports\r\nexport const REPORT_GET_CONSOLIDATEDREPORT =\r\n SHOTCLASS_API_URL + \"/me/reports/learner/consolidated\";\r\nexport const REPORT_GET_SKILLEDCLASSES =\r\n SHOTCLASS_API_URL + \"/me/reports/learner/skills/\";\r\nexport const REPORT_GET_MYSKILLS =\r\n SHOTCLASS_API_URL + \"/me/reports/learner/skills\";\r\nexport const REPORT_GET_MYCERTIFICATES =\r\n SHOTCLASS_API_URL + \"/me/reports/learner/certificates\";\r\nexport const REPORT_GET_USERBADGES =\r\n SHOTCLASS_API_URL + \"/me/reports/learner/badges\";\r\n","export const errorTypes = {\r\n SUCCESS: \"SUCCESS\",\r\n FAIL: \"FAIL\",\r\n WARN: \"WARN\",\r\n};\r\n","import * as msal from \"@azure/msal-browser\";\r\nimport * as constants from \"./devApiContants\";\r\n\r\n// MSAL configuration\r\nexport const msalConfig = {\r\n auth: {\r\n clientId: constants.CLIENTID,\r\n authority: \"https://login.microsoftonline.com/common\",\r\n // redirectUri: \"/aadlogin\",\r\n postLogoutRedirectUri: \"/\",\r\n navigateToLoginRequestUrl: true,\r\n },\r\n cache: {\r\n cacheLocation: \"localStorage\",\r\n },\r\n system: {\r\n loggerOptions: {\r\n loggerCallback(loglevel, message, containsPii) {\r\n console.log(message);\r\n },\r\n piiLoggingEnabled: false,\r\n logLevel: msal.LogLevel.Verbose,\r\n },\r\n },\r\n};\r\n\r\n// instantiate MSAL client object\r\n// export const msalInstance = new msal.PublicClientApplication(msalConfig);\r\n\r\n// msalInstance\r\n// .handleRedirectPromise()\r\n// .then((response) => {\r\n// if (response) {\r\n// msalInstance.setActiveAccount(response.account);\r\n// }\r\n// })\r\n// .catch((error) => {\r\n// console.log(error);\r\n// });\r\n","// extracted by mini-css-extract-plugin\nexport default {\"pollResult\":\"PollResults_pollResult__gmRLS\",\"chatBotRow\":\"PollResults_chatBotRow__ECKlH\",\"chatLeftListArea\":\"PollResults_chatLeftListArea__9jbrZ\",\"listActionHeader\":\"PollResults_listActionHeader__vPKfI\",\"heading\":\"PollResults_heading__jEDoL\",\"tabList_box\":\"PollResults_tabList_box__Uy+jG\",\"tabList\":\"PollResults_tabList__DCpjd\",\"tab_active\":\"PollResults_tab_active__DBhx8\",\"action_box\":\"PollResults_action_box__ahaMJ\",\"btn_delete\":\"PollResults_btn_delete__3oTNC\",\"text_label\":\"PollResults_text_label__YLJ+b\",\"active\":\"PollResults_active__slJUg\",\"chatListArea\":\"PollResults_chatListArea__4ULox\",\"chatList\":\"PollResults_chatList__aMlXd\",\"noThread\":\"PollResults_noThread__UH8Aa\",\"noResultImg\":\"PollResults_noResultImg__qcyGC\",\"noResult\":\"PollResults_noResult__+2cXh\",\"chatListItemContainer\":\"PollResults_chatListItemContainer__Q9rP+\",\"chatListItem\":\"PollResults_chatListItem__+WmAC\",\"missed_icon\":\"PollResults_missed_icon__mDW2u\",\"item_avatar\":\"PollResults_item_avatar__Q+LA2\",\"item_avatarImage\":\"PollResults_item_avatarImage__PrM-m\",\"chatContent\":\"PollResults_chatContent__iJsAk\",\"chatItemTitle\":\"PollResults_chatItemTitle__7XW3N\",\"chatItemFooter\":\"PollResults_chatItemFooter__7m1L5\",\"author\":\"PollResults_author__iCJ9c\",\"time\":\"PollResults_time__K8zIt\",\"chatLeftFooter\":\"PollResults_chatLeftFooter__sDDZT\",\"polltooltiptext\":\"PollResults_polltooltiptext__9HMmU\",\"youVoted\":\"PollResults_youVoted__snOOX\",\"polltooltiptextNew\":\"PollResults_polltooltiptextNew__cXEzo\",\"chatRightTypeAreaMobile\":\"PollResults_chatRightTypeAreaMobile__J931G\",\"chatBotHeader\":\"PollResults_chatBotHeader__QkTNB\",\"pollResultDetail\":\"PollResults_pollResultDetail__NZZac\",\"pollResultInner\":\"PollResults_pollResultInner__oN0PT\",\"fade-in2\":\"PollResults_fade-in2__y33YN\",\"title_row\":\"PollResults_title_row__sRESf\",\"chart_detail_row\":\"PollResults_chart_detail_row__M8Rce\",\"chart_wrapper\":\"PollResults_chart_wrapper__2SYQ7\",\"chart_box\":\"PollResults_chart_box__UoEVr\",\"vote_count\":\"PollResults_vote_count__DdWif\",\"count\":\"PollResults_count__8QOK+\",\"result_info\":\"PollResults_result_info__c54og\",\"legend_list\":\"PollResults_legend_list__sb37Y\",\"legend_item\":\"PollResults_legend_item__RvWdX\",\"legend_color\":\"PollResults_legend_color__hhKwy\",\"legend_txt\":\"PollResults_legend_txt__RkcwQ\",\"chatRightTypeArea\":\"PollResults_chatRightTypeArea__VbUW9\",\"tooltip\":\"PollResults_tooltip__JVVl9\",\"tooltiptext\":\"PollResults_tooltiptext__yL6vh\"};","import React, { useEffect, useState } from \"react\";\r\nimport classes from \"./PollResults.module.scss\";\r\nimport HomeHeaderContainer from \"../../../../containers/HomeContainers/HomeHeaderContainer/HomeHeaderContainer\";\r\nimport { getPollHistory } from \"../../../../store/actions/actionHandlers/connectActionHandler\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport noImageFound from \"../../../../assets/images/noimage-found.jpg\";\r\nimport MissedVoteIcon from \"../../../../components/CustomSvgIcons/MissedVoteIcon\";\r\nimport NoConversationFound from \"../../../../components/CommonComponents/NoConversationFound/NoConversationFound\";\r\nimport { Chart as ChartJS, ArcElement, Tooltip, Legend } from \"chart.js\";\r\nimport noConversationFound from \"../../../../assets/images/undraw_personal_opinions_re_qw29.gif\";\r\nimport { Doughnut } from \"react-chartjs-2\";\r\nimport { FormattedMessage } from \"react-intl\";\r\n// import TooltipMui from \"@mui/material/Tooltip\";\r\nimport ReportProgressContainer from \"../../../../containers/MyAccountContainers/ReportProgressContainer/ReportProgressContainer\";\r\nimport {\r\n setLoadingHandler,\r\n unSetLoadingHandler,\r\n} from \"../../../../store/actions/actionHandlers/errorActionHandler\";\r\nimport { useLocation } from \"react-router\";\r\nimport MissedVoteTooltip from \"../../../../components/VirtualOrLiveQuizComponents/Tooltip/Tooltip\";\r\n//import PollToolTip from \"../PollToolTip/PollToolTip\";\r\nChartJS.register(ArcElement, Tooltip, Legend);\r\n\r\nconst PollResults = (props) => {\r\n const dispatch = useDispatch();\r\n const location = useLocation();\r\n const query = new URLSearchParams(location.search);\r\n const pollIdFromNotification = query.get(\"pollId\");\r\n console.log(\"pollIdFromNotification\", pollIdFromNotification);\r\n const connectState = useSelector((state) => state.connectReducer);\r\n const [selectedQueryId, setSelectedQueryId] = useState();\r\n const [selectedQueryText, setSelectedQueryText] = useState();\r\n const [selectedResult, setSelectedResult] = useState();\r\n const { pollhistory } = connectState;\r\n const [donutData, setdonutData] = useState([]);\r\n const chartDimmension = {\r\n width: \"350\",\r\n height: \"400\",\r\n margin: \"45\",\r\n donutInnerArc: \"0.65\",\r\n donutOuterArc: \"0.8\",\r\n outerArcInner: \"0.9\",\r\n outerArcOuter: \"0.9\",\r\n polylinesPosition: \"0.95\",\r\n labelPosition: \"0.99\",\r\n };\r\n const chartColors = [\"#B759F5\", \"#E59456\", \"#6DC5F3\", \"#EBC157\"];\r\n\r\n // useEffect(() => {\r\n // dispatch(getPollHistory(true));\r\n // }, [dispatch]);\r\n let countOfThreads = pollhistory?.Count;\r\n const onClickConversations = (queryId, queryText, selectedPollItem) => {\r\n setSelectedQueryId(queryId);\r\n setSelectedQueryText(queryText);\r\n setSelectedResult(selectedPollItem);\r\n };\r\n // let chartColors = [\"#1490BE\", \"#A6CEE3\", \"#DAA520\", \"#D55C00\", \"#000000\"];\r\n useEffect(() => {\r\n if (pollhistory?.Data?.length > 0) {\r\n onClickConversations(\r\n pollhistory.Data[0].DistributionId,\r\n pollhistory.Data[0].Question,\r\n pollhistory.Data[0]\r\n );\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n setdonutData([]);\r\n pollhistory?.Data?.forEach((poll) => {\r\n if (poll?.DistributionId === selectedQueryId) {\r\n poll.Options.forEach((data, index) => {\r\n if (data.Percentage > 0) {\r\n setdonutData((previousState) => [\r\n ...previousState,\r\n {\r\n name: data.Name,\r\n value: Math.round(data.Percentage),\r\n color: chartColors[index],\r\n },\r\n ]);\r\n }\r\n });\r\n }\r\n });\r\n }, [selectedQueryId, pollhistory?.Data, dispatch]);\r\n\r\n useEffect(() => {\r\n console.log(\"donutData\", donutData);\r\n }, [donutData]);\r\n\r\n useEffect(() => {\r\n if (pollIdFromNotification) {\r\n const poll = pollhistory?.Data?.filter((item) => {\r\n return parseInt(item.PollId) === parseInt(pollIdFromNotification);\r\n });\r\n console.log(\"pollUmesh\", poll, pollIdFromNotification);\r\n if (poll?.length > 0) {\r\n onClickConversations(poll[0].DistributionId, poll[0].Question, poll[0]);\r\n const element = document.getElementById(\r\n `poll_${pollIdFromNotification}`\r\n );\r\n console.log(\"eleemnt\", element);\r\n if (element)\r\n element.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\r\n }\r\n }\r\n }, [pollIdFromNotification, pollhistory]);\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    \r\n \r\n

    \r\n {!pollIdFromNotification && (\r\n
    \r\n
      \r\n props.setActiveTab(\"Active_Polls\")}\r\n >\r\n \r\n \r\n props.setActiveTab(\"Results\")}\r\n >\r\n \r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n
    \r\n
    \r\n {countOfThreads ? (\r\n pollhistory.Data.sort(\r\n (a, b) => new Date(b.EndedOn) - new Date(a.EndedOn)\r\n ).map((el) => {\r\n return (\r\n
    \r\n \r\n onClickConversations(\r\n el.DistributionId,\r\n el.Question,\r\n el\r\n )\r\n }\r\n >\r\n {el.PollImageUrl && (\r\n
    \r\n {\r\n e.target.onerror = null;\r\n e.target.src = noImageFound;\r\n }}\r\n />\r\n
    \r\n )}\r\n
    \r\n \r\n {el.Question}\r\n
    \r\n
    \r\n \r\n :\r\n {el.PaticipatedUsers} \r\n \r\n \r\n
    \r\n
    \r\n {el.IsMissed && (\r\n // }\r\n // arrow\r\n // placement=\"right\"\r\n // >\r\n // \r\n // }\r\n // direction=\"left\"\r\n // >\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n // \r\n // \r\n )}\r\n
    \r\n\r\n {selectedQueryId === el.DistributionId && (\r\n
    \r\n
    \r\n
    \r\n {!pollIdFromNotification && (\r\n
    \r\n
      \r\n \r\n props.setActiveTab(\"Active_Polls\")\r\n }\r\n >\r\n \r\n \r\n \r\n props.setActiveTab(\"Results\")\r\n }\r\n >\r\n \r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n {countOfThreads ? (\r\n
    \r\n
    \r\n {selectedQueryId && (\r\n <>\r\n
    \r\n

    {selectedResult.Question}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {/* el.Name\r\n ),\r\n datasets:\r\n selectedResult.PaticipatedUsers >\r\n 0\r\n ? [\r\n {\r\n label: \"# of Votes\",\r\n data: selectedResult.Options.map(\r\n (el) => el.Count\r\n ),\r\n backgroundColor:\r\n chartColors,\r\n },\r\n ]\r\n : [\r\n {\r\n label: \"# of Votes\",\r\n data: [100],\r\n backgroundColor: [\r\n \"#bbbbbb\",\r\n ],\r\n },\r\n ],\r\n }}\r\n options={{\r\n elements: {\r\n arc: {\r\n borderWidth: 0,\r\n },\r\n },\r\n cutout: \"80%\",\r\n plugins: {\r\n legend: { display: false },\r\n tooltip: {\r\n enabled:\r\n selectedResult.PaticipatedUsers >\r\n 0\r\n ? true\r\n : false,\r\n },\r\n },\r\n }}\r\n /> */}\r\n {donutData.length > 0 && (\r\n \r\n )}\r\n
    \r\n \r\n {selectedResult.PaticipatedUsers >\r\n 0 &&\r\n selectedResult.PaticipatedUsers <\r\n 10\r\n ? \"0\" +\r\n selectedResult.PaticipatedUsers\r\n : selectedResult.PaticipatedUsers}\r\n {\" \"}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    \r\n {selectedResult.PaticipatedUsers}{\" \"}\r\n \r\n {selectedResult.IsMissed && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n

    \r\n
    \r\n {selectedResult.Options.map(\r\n (el, index) => {\r\n return (\r\n \r\n \r\n {el.IsAnswer && (\r\n \r\n \r\n \r\n )}\r\n \r\n
    \r\n {el.IsAnswer ? (\r\n \r\n {el.Name}\r\n \r\n \r\n \r\n
    \r\n ) : (\r\n \r\n {el.Name}\r\n \r\n )}\r\n
    \r\n );\r\n }\r\n )}\r\n
    \r\n

    \r\n {\" \"}\r\n {selectedResult.EndedOn}\r\n

    \r\n
    \r\n
    \r\n \r\n )}\r\n {!selectedQueryId && (\r\n \r\n )}\r\n
    \r\n
    \r\n ) : (\r\n
    \r\n
    \r\n \r\n }\r\n imageUrl={noConversationFound}\r\n />\r\n
    \r\n
    \r\n )}\r\n
    \r\n )}\r\n
    \r\n );\r\n })\r\n ) : (\r\n
    \r\n
    \r\n
    \r\n }\r\n imageUrl={noConversationFound}\r\n />\r\n
    \r\n
    \r\n )}\r\n \r\n \r\n
    \r\n {/*
    \r\n :{\" \"}\r\n 12/08/2021\r\n
    */}\r\n
    \r\n :{\" \"}\r\n {countOfThreads}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {!pollIdFromNotification && (\r\n
    \r\n
      \r\n props.setActiveTab(\"Active_Polls\")}\r\n >\r\n \r\n \r\n props.setActiveTab(\"Results\")}\r\n >\r\n \r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n {countOfThreads ? (\r\n
    \r\n
    \r\n {selectedQueryId && (\r\n <>\r\n
    \r\n

    {selectedResult.Question}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {/* el.Name\r\n ),\r\n datasets:\r\n selectedResult.PaticipatedUsers > 0\r\n ? [\r\n {\r\n label: \"# of Votes\",\r\n data: selectedResult.Options.map(\r\n (el) => el.Count\r\n ),\r\n backgroundColor: chartColors,\r\n },\r\n ]\r\n : [\r\n {\r\n label: \"# of Votes\",\r\n data: [100],\r\n backgroundColor: [\"#bbbbbb\"],\r\n },\r\n ],\r\n }}\r\n options={{\r\n elements: {\r\n arc: {\r\n borderWidth: 0,\r\n },\r\n },\r\n cutout: \"80%\",\r\n plugins: {\r\n legend: { display: false },\r\n tooltip: {\r\n enabled:\r\n selectedResult.PaticipatedUsers > 0\r\n ? true\r\n : false,\r\n },\r\n },\r\n }}\r\n /> */}\r\n {donutData.length > 0 && (\r\n \r\n )}\r\n
    \r\n \r\n {selectedResult.PaticipatedUsers > 0 &&\r\n selectedResult.PaticipatedUsers < 10\r\n ? \"0\" + selectedResult.PaticipatedUsers\r\n : selectedResult.PaticipatedUsers}\r\n {\" \"}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    \r\n {selectedResult.PaticipatedUsers}{\" \"}\r\n \r\n {selectedResult.IsMissed && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n

    \r\n
    \r\n {selectedResult.Options.map((el, index) => {\r\n return (\r\n \r\n
    \r\n {el.IsAnswer && (\r\n \r\n \r\n \r\n )}\r\n \r\n
    \r\n {el.IsAnswer ? (\r\n
    \r\n {el.Name}\r\n \r\n \r\n \r\n
    \r\n ) : (\r\n \r\n {el.Name}\r\n \r\n )}\r\n
    \r\n );\r\n })}\r\n
    \r\n

    \r\n {\" \"}\r\n {selectedResult.EndedOn}\r\n

    \r\n
    \r\n
    \r\n \r\n )}\r\n {!selectedQueryId && (\r\n \r\n )}\r\n
    \r\n
    \r\n ) : (\r\n
    \r\n
    \r\n }\r\n imageUrl={noConversationFound}\r\n />\r\n
    \r\n
    \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default PollResults;\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants } from \"../utils/Constants\";\r\n\r\n/**\r\n * AuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nexport const AuthErrorMessage = {\r\n unexpectedError: {\r\n code: \"unexpected_error\",\r\n desc: \"Unexpected error in authentication.\"\r\n },\r\n postRequestFailed: {\r\n code: \"post_request_failed\",\r\n desc: \"Post request failed from the network, could be a 4xx/5xx or a network unavailability. Please check the exact error code for details.\"\r\n }\r\n};\r\n\r\n/**\r\n * General error class thrown by the MSAL.js library.\r\n */\r\nexport class AuthError extends Error {\r\n\r\n /**\r\n * Short string denoting error\r\n */\r\n errorCode: string;\r\n\r\n /**\r\n * Detailed description of error\r\n */\r\n errorMessage: string;\r\n\r\n /**\r\n * Describes the subclass of an error\r\n */\r\n subError: string;\r\n\r\n /**\r\n * CorrelationId associated with the error\r\n */\r\n correlationId: string;\r\n\r\n constructor(errorCode?: string, errorMessage?: string, suberror?: string) {\r\n const errorString = errorMessage ? `${errorCode}: ${errorMessage}` : errorCode;\r\n super(errorString);\r\n Object.setPrototypeOf(this, AuthError.prototype);\r\n\r\n this.errorCode = errorCode || Constants.EMPTY_STRING;\r\n this.errorMessage = errorMessage || Constants.EMPTY_STRING;\r\n this.subError = suberror || Constants.EMPTY_STRING;\r\n this.name = \"AuthError\";\r\n }\r\n\r\n setCorrelationId(correlationId: string): void {\r\n this.correlationId = correlationId;\r\n }\r\n\r\n /**\r\n * Creates an error that is thrown when something unexpected happens in the library.\r\n * @param errDesc\r\n */\r\n static createUnexpectedError(errDesc: string): AuthError {\r\n return new AuthError(AuthErrorMessage.unexpectedError.code, `${AuthErrorMessage.unexpectedError.desc}: ${errDesc}`);\r\n }\r\n\r\n /**\r\n * Creates an error for post request failures.\r\n * @param errDesc \r\n * @returns \r\n */\r\n static createPostRequestFailed(errDesc: string): AuthError {\r\n return new AuthError(AuthErrorMessage.postRequestFailed.code, `${AuthErrorMessage.postRequestFailed.desc}: ${errDesc}`);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError } from \"./AuthError\";\r\n\r\n/**\r\n * ClientAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nexport const ClientAuthErrorMessage = {\r\n clientInfoDecodingError: {\r\n code: \"client_info_decoding_error\",\r\n desc: \"The client info could not be parsed/decoded correctly. Please review the trace to determine the root cause.\"\r\n },\r\n clientInfoEmptyError: {\r\n code: \"client_info_empty_error\",\r\n desc: \"The client info was empty. Please review the trace to determine the root cause.\"\r\n },\r\n tokenParsingError: {\r\n code: \"token_parsing_error\",\r\n desc: \"Token cannot be parsed. Please review stack trace to determine root cause.\"\r\n },\r\n nullOrEmptyToken: {\r\n code: \"null_or_empty_token\",\r\n desc: \"The token is null or empty. Please review the trace to determine the root cause.\"\r\n },\r\n endpointResolutionError: {\r\n code: \"endpoints_resolution_error\",\r\n desc: \"Error: could not resolve endpoints. Please check network and try again.\"\r\n },\r\n networkError: {\r\n code: \"network_error\",\r\n desc: \"Network request failed. Please check network trace to determine root cause.\"\r\n },\r\n unableToGetOpenidConfigError: {\r\n code: \"openid_config_error\",\r\n desc: \"Could not retrieve endpoints. Check your authority and verify the .well-known/openid-configuration endpoint returns the required endpoints.\"\r\n },\r\n hashNotDeserialized: {\r\n code: \"hash_not_deserialized\",\r\n desc: \"The hash parameters could not be deserialized. Please review the trace to determine the root cause.\"\r\n },\r\n blankGuidGenerated: {\r\n code: \"blank_guid_generated\",\r\n desc: \"The guid generated was blank. Please review the trace to determine the root cause.\"\r\n },\r\n invalidStateError: {\r\n code: \"invalid_state\",\r\n desc: \"State was not the expected format. Please check the logs to determine whether the request was sent using ProtocolUtils.setRequestState().\"\r\n },\r\n stateMismatchError: {\r\n code: \"state_mismatch\",\r\n desc: \"State mismatch error. Please check your network. Continued requests may cause cache overflow.\"\r\n },\r\n stateNotFoundError: {\r\n code: \"state_not_found\",\r\n desc: \"State not found\"\r\n },\r\n nonceMismatchError: {\r\n code: \"nonce_mismatch\",\r\n desc: \"Nonce mismatch error. This may be caused by a race condition in concurrent requests.\"\r\n },\r\n nonceNotFoundError: {\r\n code: \"nonce_not_found\",\r\n desc: \"nonce not found\"\r\n },\r\n authTimeNotFoundError: {\r\n code: \"auth_time_not_found\",\r\n desc: \"Max Age was requested and the ID token is missing the auth_time variable.\" +\r\n \" auth_time is an optional claim and is not enabled by default - it must be enabled.\" +\r\n \" See https://aka.ms/msaljs/optional-claims for more information.\"\r\n },\r\n maxAgeTranspiredError: {\r\n code: \"max_age_transpired\",\r\n desc: \"Max Age is set to 0, or too much time has elapsed since the last end-user authentication.\"\r\n },\r\n noTokensFoundError: {\r\n code: \"no_tokens_found\",\r\n desc: \"No tokens were found for the given scopes, and no authorization code was passed to acquireToken. You must retrieve an authorization code before making a call to acquireToken().\"\r\n },\r\n multipleMatchingTokens: {\r\n code: \"multiple_matching_tokens\",\r\n desc: \"The cache contains multiple tokens satisfying the requirements. \" +\r\n \"Call AcquireToken again providing more requirements such as authority or account.\"\r\n },\r\n multipleMatchingAccounts: {\r\n code: \"multiple_matching_accounts\",\r\n desc: \"The cache contains multiple accounts satisfying the given parameters. Please pass more info to obtain the correct account\"\r\n },\r\n multipleMatchingAppMetadata: {\r\n code: \"multiple_matching_appMetadata\",\r\n desc: \"The cache contains multiple appMetadata satisfying the given parameters. Please pass more info to obtain the correct appMetadata\"\r\n },\r\n tokenRequestCannotBeMade: {\r\n code: \"request_cannot_be_made\",\r\n desc: \"Token request cannot be made without authorization code or refresh token.\"\r\n },\r\n appendEmptyScopeError: {\r\n code: \"cannot_append_empty_scope\",\r\n desc: \"Cannot append null or empty scope to ScopeSet. Please check the stack trace for more info.\"\r\n },\r\n removeEmptyScopeError: {\r\n code: \"cannot_remove_empty_scope\",\r\n desc: \"Cannot remove null or empty scope from ScopeSet. Please check the stack trace for more info.\"\r\n },\r\n appendScopeSetError: {\r\n code: \"cannot_append_scopeset\",\r\n desc: \"Cannot append ScopeSet due to error.\"\r\n },\r\n emptyInputScopeSetError: {\r\n code: \"empty_input_scopeset\",\r\n desc: \"Empty input ScopeSet cannot be processed.\"\r\n },\r\n DeviceCodePollingCancelled: {\r\n code: \"device_code_polling_cancelled\",\r\n desc: \"Caller has cancelled token endpoint polling during device code flow by setting DeviceCodeRequest.cancel = true.\"\r\n },\r\n DeviceCodeExpired: {\r\n code: \"device_code_expired\",\r\n desc: \"Device code is expired.\"\r\n },\r\n DeviceCodeUnknownError: {\r\n code: \"device_code_unknown_error\",\r\n desc: \"Device code stopped polling for unknown reasons.\"\r\n },\r\n NoAccountInSilentRequest: {\r\n code: \"no_account_in_silent_request\",\r\n desc: \"Please pass an account object, silent flow is not supported without account information\"\r\n },\r\n invalidCacheRecord: {\r\n code: \"invalid_cache_record\",\r\n desc: \"Cache record object was null or undefined.\"\r\n },\r\n invalidCacheEnvironment: {\r\n code: \"invalid_cache_environment\",\r\n desc: \"Invalid environment when attempting to create cache entry\"\r\n },\r\n noAccountFound: {\r\n code: \"no_account_found\",\r\n desc: \"No account found in cache for given key.\"\r\n },\r\n CachePluginError: {\r\n code: \"no cache plugin set on CacheManager\",\r\n desc: \"ICachePlugin needs to be set before using readFromStorage or writeFromStorage\"\r\n },\r\n noCryptoObj: {\r\n code: \"no_crypto_object\",\r\n desc: \"No crypto object detected. This is required for the following operation: \"\r\n },\r\n invalidCacheType: {\r\n code: \"invalid_cache_type\",\r\n desc: \"Invalid cache type\"\r\n },\r\n unexpectedAccountType: {\r\n code: \"unexpected_account_type\",\r\n desc: \"Unexpected account type.\"\r\n },\r\n unexpectedCredentialType: {\r\n code: \"unexpected_credential_type\",\r\n desc: \"Unexpected credential type.\"\r\n },\r\n invalidAssertion: {\r\n code: \"invalid_assertion\",\r\n desc: \"Client assertion must meet requirements described in https://tools.ietf.org/html/rfc7515\"\r\n },\r\n invalidClientCredential: {\r\n code: \"invalid_client_credential\",\r\n desc: \"Client credential (secret, certificate, or assertion) must not be empty when creating a confidential client. An application should at most have one credential\"\r\n },\r\n tokenRefreshRequired: {\r\n code: \"token_refresh_required\",\r\n desc: \"Cannot return token from cache because it must be refreshed. This may be due to one of the following reasons: forceRefresh parameter is set to true, claims have been requested, there is no cached access token or it is expired.\"\r\n },\r\n userTimeoutReached: {\r\n code: \"user_timeout_reached\",\r\n desc: \"User defined timeout for device code polling reached\",\r\n },\r\n tokenClaimsRequired: {\r\n code: \"token_claims_cnf_required_for_signedjwt\",\r\n desc: \"Cannot generate a POP jwt if the token_claims are not populated\"\r\n },\r\n noAuthorizationCodeFromServer: {\r\n code: \"authorization_code_missing_from_server_response\",\r\n desc: \"Server response does not contain an authorization code to proceed\"\r\n },\r\n noAzureRegionDetected: {\r\n code: \"no_azure_region_detected\",\r\n desc: \"No azure region was detected and no fallback was made available\"\r\n },\r\n accessTokenEntityNullError: {\r\n code: \"access_token_entity_null\",\r\n desc: \"Access token entity is null, please check logs and cache to ensure a valid access token is present.\"\r\n },\r\n bindingKeyNotRemovedError: {\r\n code: \"binding_key_not_removed\",\r\n desc: \"Could not remove the credential's binding key from storage.\"\r\n },\r\n logoutNotSupported: {\r\n code: \"end_session_endpoint_not_supported\",\r\n desc: \"Provided authority does not support logout.\"\r\n },\r\n keyIdMissing: {\r\n code: \"key_id_missing\",\r\n desc: \"A keyId value is missing from the requested bound token's cache record and is required to match the token to it's stored binding key.\"\r\n },\r\n noNetworkConnectivity: {\r\n code: \"no_network_connectivity\",\r\n desc: \"No network connectivity. Check your internet connection.\"\r\n },\r\n userCanceledError: {\r\n code: \"user_canceled\",\r\n desc: \"User canceled the flow.\"\r\n }\r\n};\r\n\r\n/**\r\n * Error thrown when there is an error in the client code running on the browser.\r\n */\r\nexport class ClientAuthError extends AuthError {\r\n\r\n constructor(errorCode: string, errorMessage?: string) {\r\n super(errorCode, errorMessage);\r\n this.name = \"ClientAuthError\";\r\n\r\n Object.setPrototypeOf(this, ClientAuthError.prototype);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when client info object doesn't decode correctly.\r\n * @param caughtError\r\n */\r\n static createClientInfoDecodingError(caughtError: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.clientInfoDecodingError.code,\r\n `${ClientAuthErrorMessage.clientInfoDecodingError.desc} Failed with error: ${caughtError}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown if the client info is empty.\r\n * @param rawClientInfo\r\n */\r\n static createClientInfoEmptyError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.clientInfoEmptyError.code,\r\n `${ClientAuthErrorMessage.clientInfoEmptyError.desc}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the id token extraction errors out.\r\n * @param err\r\n */\r\n static createTokenParsingError(caughtExtractionError: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.tokenParsingError.code,\r\n `${ClientAuthErrorMessage.tokenParsingError.desc} Failed with error: ${caughtExtractionError}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the id token string is null or empty.\r\n * @param invalidRawTokenString\r\n */\r\n static createTokenNullOrEmptyError(invalidRawTokenString: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.nullOrEmptyToken.code,\r\n `${ClientAuthErrorMessage.nullOrEmptyToken.desc} Raw Token Value: ${invalidRawTokenString}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the endpoint discovery doesn't complete correctly.\r\n */\r\n static createEndpointDiscoveryIncompleteError(errDetail: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.endpointResolutionError.code,\r\n `${ClientAuthErrorMessage.endpointResolutionError.desc} Detail: ${errDetail}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the fetch client throws\r\n */\r\n static createNetworkError(endpoint: string, errDetail: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.networkError.code,\r\n `${ClientAuthErrorMessage.networkError.desc} | Fetch client threw: ${errDetail} | Attempted to reach: ${endpoint.split(\"?\")[0]}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the openid-configuration endpoint cannot be reached or does not contain the required data\r\n */\r\n static createUnableToGetOpenidConfigError(errDetail: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.unableToGetOpenidConfigError.code,\r\n `${ClientAuthErrorMessage.unableToGetOpenidConfigError.desc} Attempted to retrieve endpoints from: ${errDetail}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the hash cannot be deserialized.\r\n * @param hashParamObj\r\n */\r\n static createHashNotDeserializedError(hashParamObj: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.hashNotDeserialized.code,\r\n `${ClientAuthErrorMessage.hashNotDeserialized.desc} Given Object: ${hashParamObj}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the state cannot be parsed.\r\n * @param invalidState\r\n */\r\n static createInvalidStateError(invalidState: string, errorString?: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidStateError.code,\r\n `${ClientAuthErrorMessage.invalidStateError.desc} Invalid State: ${invalidState}, Root Err: ${errorString}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when two states do not match.\r\n */\r\n static createStateMismatchError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.stateMismatchError.code,\r\n ClientAuthErrorMessage.stateMismatchError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the state is not present\r\n * @param missingState\r\n */\r\n static createStateNotFoundError(missingState: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.stateNotFoundError.code,\r\n `${ClientAuthErrorMessage.stateNotFoundError.desc}: ${missingState}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the nonce does not match.\r\n */\r\n static createNonceMismatchError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.nonceMismatchError.code,\r\n ClientAuthErrorMessage.nonceMismatchError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when max_age was provided in the request, but auth_time is not in the token claims\r\n * @param missingNonce\r\n */\r\n static createAuthTimeNotFoundError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.authTimeNotFoundError.code,\r\n ClientAuthErrorMessage.authTimeNotFoundError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when too much time has elapsed since the last end-user authentication\r\n */\r\n static createMaxAgeTranspiredError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.maxAgeTranspiredError.code,\r\n ClientAuthErrorMessage.maxAgeTranspiredError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the mnonce is not present\r\n * @param missingNonce\r\n */\r\n static createNonceNotFoundError(missingNonce: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.nonceNotFoundError.code,\r\n `${ClientAuthErrorMessage.nonceNotFoundError.desc}: ${missingNonce}`);\r\n }\r\n\r\n /**\r\n * Throws error when multiple tokens are in cache.\r\n */\r\n static createMultipleMatchingTokensInCacheError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.multipleMatchingTokens.code,\r\n `${ClientAuthErrorMessage.multipleMatchingTokens.desc}.`);\r\n }\r\n\r\n /**\r\n * Throws error when multiple accounts are in cache for the given params\r\n */\r\n static createMultipleMatchingAccountsInCacheError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.multipleMatchingAccounts.code,\r\n ClientAuthErrorMessage.multipleMatchingAccounts.desc);\r\n }\r\n\r\n /**\r\n * Throws error when multiple appMetada are in cache for the given clientId.\r\n */\r\n static createMultipleMatchingAppMetadataInCacheError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.multipleMatchingAppMetadata.code,\r\n ClientAuthErrorMessage.multipleMatchingAppMetadata.desc);\r\n }\r\n\r\n /**\r\n * Throws error when no auth code or refresh token is given to ServerTokenRequestParameters.\r\n */\r\n static createTokenRequestCannotBeMadeError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.tokenRequestCannotBeMade.code, ClientAuthErrorMessage.tokenRequestCannotBeMade.desc);\r\n }\r\n\r\n /**\r\n * Throws error when attempting to append a null, undefined or empty scope to a set\r\n * @param givenScope\r\n */\r\n static createAppendEmptyScopeToSetError(givenScope: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.appendEmptyScopeError.code, `${ClientAuthErrorMessage.appendEmptyScopeError.desc} Given Scope: ${givenScope}`);\r\n }\r\n\r\n /**\r\n * Throws error when attempting to append a null, undefined or empty scope to a set\r\n * @param givenScope\r\n */\r\n static createRemoveEmptyScopeFromSetError(givenScope: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.removeEmptyScopeError.code, `${ClientAuthErrorMessage.removeEmptyScopeError.desc} Given Scope: ${givenScope}`);\r\n }\r\n\r\n /**\r\n * Throws error when attempting to append null or empty ScopeSet.\r\n * @param appendError\r\n */\r\n static createAppendScopeSetError(appendError: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.appendScopeSetError.code, `${ClientAuthErrorMessage.appendScopeSetError.desc} Detail Error: ${appendError}`);\r\n }\r\n\r\n /**\r\n * Throws error if ScopeSet is null or undefined.\r\n * @param givenScopeSet\r\n */\r\n static createEmptyInputScopeSetError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.emptyInputScopeSetError.code, `${ClientAuthErrorMessage.emptyInputScopeSetError.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if user sets CancellationToken.cancel = true during polling of token endpoint during device code flow\r\n */\r\n static createDeviceCodeCancelledError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.DeviceCodePollingCancelled.code, `${ClientAuthErrorMessage.DeviceCodePollingCancelled.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if device code is expired\r\n */\r\n static createDeviceCodeExpiredError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.DeviceCodeExpired.code, `${ClientAuthErrorMessage.DeviceCodeExpired.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if device code is expired\r\n */\r\n static createDeviceCodeUnknownError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.DeviceCodeUnknownError.code, `${ClientAuthErrorMessage.DeviceCodeUnknownError.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error when silent requests are made without an account object\r\n */\r\n static createNoAccountInSilentRequestError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.NoAccountInSilentRequest.code, `${ClientAuthErrorMessage.NoAccountInSilentRequest.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error when cache record is null or undefined.\r\n */\r\n static createNullOrUndefinedCacheRecord(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidCacheRecord.code, ClientAuthErrorMessage.invalidCacheRecord.desc);\r\n }\r\n\r\n /**\r\n * Throws error when provided environment is not part of the CloudDiscoveryMetadata object\r\n */\r\n static createInvalidCacheEnvironmentError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidCacheEnvironment.code, ClientAuthErrorMessage.invalidCacheEnvironment.desc);\r\n }\r\n\r\n /**\r\n * Throws error when account is not found in cache.\r\n */\r\n static createNoAccountFoundError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.noAccountFound.code, ClientAuthErrorMessage.noAccountFound.desc);\r\n }\r\n\r\n /**\r\n * Throws error if ICachePlugin not set on CacheManager.\r\n */\r\n static createCachePluginError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.CachePluginError.code, `${ClientAuthErrorMessage.CachePluginError.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if crypto object not found.\r\n * @param operationName\r\n */\r\n static createNoCryptoObjectError(operationName: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.noCryptoObj.code, `${ClientAuthErrorMessage.noCryptoObj.desc}${operationName}`);\r\n }\r\n\r\n /**\r\n * Throws error if cache type is invalid.\r\n */\r\n static createInvalidCacheTypeError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidCacheType.code, `${ClientAuthErrorMessage.invalidCacheType.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if unexpected account type.\r\n */\r\n static createUnexpectedAccountTypeError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.unexpectedAccountType.code, `${ClientAuthErrorMessage.unexpectedAccountType.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if unexpected credential type.\r\n */\r\n static createUnexpectedCredentialTypeError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.unexpectedCredentialType.code, `${ClientAuthErrorMessage.unexpectedCredentialType.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if client assertion is not valid.\r\n */\r\n static createInvalidAssertionError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidAssertion.code, `${ClientAuthErrorMessage.invalidAssertion.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if client assertion is not valid.\r\n */\r\n static createInvalidCredentialError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidClientCredential.code, `${ClientAuthErrorMessage.invalidClientCredential.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if token cannot be retrieved from cache due to refresh being required.\r\n */\r\n static createRefreshRequiredError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.tokenRefreshRequired.code, ClientAuthErrorMessage.tokenRefreshRequired.desc);\r\n }\r\n\r\n /**\r\n * Throws error if the user defined timeout is reached.\r\n */\r\n static createUserTimeoutReachedError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.userTimeoutReached.code, ClientAuthErrorMessage.userTimeoutReached.desc);\r\n }\r\n\r\n /*\r\n * Throws error if token claims are not populated for a signed jwt generation\r\n */\r\n static createTokenClaimsRequiredError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.tokenClaimsRequired.code, ClientAuthErrorMessage.tokenClaimsRequired.desc);\r\n }\r\n\r\n /**\r\n * Throws error when the authorization code is missing from the server response\r\n */\r\n static createNoAuthCodeInServerResponseError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.noAuthorizationCodeFromServer.code, ClientAuthErrorMessage.noAuthorizationCodeFromServer.desc);\r\n }\r\n\r\n static createBindingKeyNotRemovedError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.bindingKeyNotRemovedError.code, ClientAuthErrorMessage.bindingKeyNotRemovedError.desc);\r\n }\r\n\r\n /**\r\n * Thrown when logout is attempted for an authority that doesnt have an end_session_endpoint\r\n */\r\n static createLogoutNotSupportedError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.logoutNotSupported.code, ClientAuthErrorMessage.logoutNotSupported.desc);\r\n }\r\n\r\n /**\r\n * Create an error when kid attribute is missing from a PoP token's cache record\r\n */\r\n static createKeyIdMissingError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.keyIdMissing.code, ClientAuthErrorMessage.keyIdMissing.desc);\r\n }\r\n\r\n /**\r\n * Create an error when the client does not have network connectivity\r\n */\r\n static createNoNetworkConnectivityError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.noNetworkConnectivity.code, ClientAuthErrorMessage.noNetworkConnectivity.desc);\r\n }\r\n\r\n /**\r\n * Create an error when the user cancels the flow\r\n */\r\n static createUserCanceledError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.userCanceledError.code, ClientAuthErrorMessage.userCanceledError.desc);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { LoggerOptions } from \"../config/ClientConfiguration\";\r\nimport { Constants } from \"../utils/Constants\";\r\n\r\n/**\r\n * Options for logger messages.\r\n */\r\nexport type LoggerMessageOptions = {\r\n logLevel: LogLevel,\r\n containsPii?: boolean,\r\n context?: string,\r\n correlationId?: string\r\n};\r\n\r\n/**\r\n * Log message level.\r\n */\r\nexport enum LogLevel {\r\n Error,\r\n Warning,\r\n Info,\r\n Verbose,\r\n Trace\r\n}\r\n\r\n/**\r\n * Callback to send the messages to.\r\n */\r\nexport interface ILoggerCallback {\r\n (level: LogLevel, message: string, containsPii: boolean): void;\r\n}\r\n\r\n/**\r\n * Class which facilitates logging of messages to a specific place.\r\n */\r\nexport class Logger {\r\n\r\n // Correlation ID for request, usually set by user.\r\n private correlationId: string;\r\n\r\n // Current log level, defaults to info.\r\n private level: LogLevel = LogLevel.Info;\r\n\r\n // Boolean describing whether PII logging is allowed.\r\n private piiLoggingEnabled: boolean;\r\n\r\n // Callback to send messages to.\r\n private localCallback: ILoggerCallback;\r\n\r\n // Package name implementing this logger\r\n private packageName: string;\r\n\r\n // Package version implementing this logger\r\n private packageVersion: string;\r\n\r\n constructor(loggerOptions: LoggerOptions, packageName?: string, packageVersion?: string) {\r\n const defaultLoggerCallback = () => {\r\n return;\r\n };\r\n const setLoggerOptions = loggerOptions || Logger.createDefaultLoggerOptions();\r\n this.localCallback = setLoggerOptions.loggerCallback || defaultLoggerCallback;\r\n this.piiLoggingEnabled = setLoggerOptions.piiLoggingEnabled || false;\r\n this.level = typeof(setLoggerOptions.logLevel) === \"number\" ? setLoggerOptions.logLevel : LogLevel.Info;\r\n this.correlationId = setLoggerOptions.correlationId || Constants.EMPTY_STRING;\r\n this.packageName = packageName || Constants.EMPTY_STRING;\r\n this.packageVersion = packageVersion || Constants.EMPTY_STRING;\r\n }\r\n \r\n private static createDefaultLoggerOptions(): LoggerOptions {\r\n return {\r\n loggerCallback: () => {\r\n // allow users to not set loggerCallback\r\n },\r\n piiLoggingEnabled: false,\r\n logLevel: LogLevel.Info\r\n };\r\n }\r\n\r\n /**\r\n * Create new Logger with existing configurations.\r\n */\r\n public clone(packageName: string, packageVersion: string, correlationId?: string): Logger {\r\n return new Logger({loggerCallback: this.localCallback, piiLoggingEnabled: this.piiLoggingEnabled, logLevel: this.level, correlationId: correlationId || this.correlationId}, packageName, packageVersion);\r\n }\r\n\r\n /**\r\n * Log message with required options.\r\n */\r\n private logMessage(logMessage: string, options: LoggerMessageOptions): void {\r\n if ((options.logLevel > this.level) || (!this.piiLoggingEnabled && options.containsPii)) {\r\n return;\r\n }\r\n const timestamp = new Date().toUTCString();\r\n\r\n // Add correlationId to logs if set, correlationId provided on log messages take precedence\r\n let logHeader: string;\r\n if (!StringUtils.isEmpty(options.correlationId)) {\r\n logHeader = `[${timestamp}] : [${options.correlationId}]`;\r\n } else if (!StringUtils.isEmpty(this.correlationId)) {\r\n logHeader = `[${timestamp}] : [${this.correlationId}]`;\r\n } else {\r\n logHeader = `[${timestamp}]`;\r\n }\r\n\r\n const log = `${logHeader} : ${this.packageName}@${this.packageVersion} : ${LogLevel[options.logLevel]} - ${logMessage}`;\r\n // debug(`msal:${LogLevel[options.logLevel]}${options.containsPii ? \"-Pii\": Constants.EMPTY_STRING}${options.context ? `:${options.context}` : Constants.EMPTY_STRING}`)(logMessage);\r\n this.executeCallback(options.logLevel, log, options.containsPii || false);\r\n }\r\n\r\n /**\r\n * Execute callback with message.\r\n */\r\n executeCallback(level: LogLevel, message: string, containsPii: boolean): void {\r\n if (this.localCallback) {\r\n this.localCallback(level, message, containsPii);\r\n }\r\n }\r\n\r\n /**\r\n * Logs error messages.\r\n */\r\n error(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Error,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs error messages with PII.\r\n */\r\n errorPii(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Error,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs warning messages.\r\n */\r\n warning(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Warning,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs warning messages with PII.\r\n */\r\n warningPii(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Warning,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs info messages.\r\n */\r\n info(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Info,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs info messages with PII.\r\n */\r\n infoPii(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Info,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs verbose messages.\r\n */\r\n verbose(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Verbose,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs verbose messages with PII.\r\n */\r\n verbosePii(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Verbose,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs trace messages.\r\n */\r\n trace(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Trace,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs trace messages with PII.\r\n */\r\n tracePii(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Trace,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether PII Logging is enabled or not.\r\n */\r\n isPiiLoggingEnabled(): boolean {\r\n return this.piiLoggingEnabled || false;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nexport const Constants = {\r\n LIBRARY_NAME: \"MSAL.JS\",\r\n SKU: \"msal.js.common\",\r\n // Prefix for all library cache entries\r\n CACHE_PREFIX: \"msal\",\r\n // default authority\r\n DEFAULT_AUTHORITY: \"https://login.microsoftonline.com/common/\",\r\n DEFAULT_AUTHORITY_HOST: \"login.microsoftonline.com\",\r\n DEFAULT_COMMON_TENANT: \"common\",\r\n // ADFS String\r\n ADFS: \"adfs\",\r\n DSTS: \"dstsv2\",\r\n // Default AAD Instance Discovery Endpoint\r\n AAD_INSTANCE_DISCOVERY_ENDPT: \"https://login.microsoftonline.com/common/discovery/instance?api-version=1.1&authorization_endpoint=\",\r\n // CIAM URL\r\n CIAM_AUTH_URL: \".ciamlogin.com\",\r\n AAD_TENANT_DOMAIN_SUFFIX: \".onmicrosoft.com\",\r\n // Resource delimiter - used for certain cache entries\r\n RESOURCE_DELIM: \"|\",\r\n // Placeholder for non-existent account ids/objects\r\n NO_ACCOUNT: \"NO_ACCOUNT\",\r\n // Claims\r\n CLAIMS: \"claims\",\r\n // Consumer UTID\r\n CONSUMER_UTID: \"9188040d-6c67-4c5b-b112-36a304b66dad\",\r\n // Default scopes\r\n OPENID_SCOPE: \"openid\",\r\n PROFILE_SCOPE: \"profile\",\r\n OFFLINE_ACCESS_SCOPE: \"offline_access\",\r\n EMAIL_SCOPE: \"email\",\r\n // Default response type for authorization code flow\r\n CODE_RESPONSE_TYPE: \"code\",\r\n CODE_GRANT_TYPE: \"authorization_code\",\r\n RT_GRANT_TYPE: \"refresh_token\",\r\n FRAGMENT_RESPONSE_MODE: \"fragment\",\r\n S256_CODE_CHALLENGE_METHOD: \"S256\",\r\n URL_FORM_CONTENT_TYPE: \"application/x-www-form-urlencoded;charset=utf-8\",\r\n AUTHORIZATION_PENDING: \"authorization_pending\",\r\n NOT_DEFINED: \"not_defined\",\r\n EMPTY_STRING: \"\",\r\n NOT_APPLICABLE: \"N/A\",\r\n FORWARD_SLASH: \"/\",\r\n IMDS_ENDPOINT: \"http://169.254.169.254/metadata/instance/compute/location\",\r\n IMDS_VERSION: \"2020-06-01\",\r\n IMDS_TIMEOUT: 2000,\r\n AZURE_REGION_AUTO_DISCOVER_FLAG: \"TryAutoDetect\",\r\n REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX: \"login.microsoft.com\",\r\n REGIONAL_AUTH_NON_MSI_QUERY_STRING: \"allowestsrnonmsi=true\",\r\n KNOWN_PUBLIC_CLOUDS: [\"login.microsoftonline.com\", \"login.windows.net\", \"login.microsoft.com\", \"sts.windows.net\"],\r\n TOKEN_RESPONSE_TYPE: \"token\",\r\n ID_TOKEN_RESPONSE_TYPE: \"id_token\",\r\n SHR_NONCE_VALIDITY: 240,\r\n INVALID_INSTANCE: \"invalid_instance\",\r\n};\r\n\r\nexport const OIDC_DEFAULT_SCOPES = [\r\n Constants.OPENID_SCOPE,\r\n Constants.PROFILE_SCOPE,\r\n Constants.OFFLINE_ACCESS_SCOPE\r\n];\r\n\r\nexport const OIDC_SCOPES = [\r\n ...OIDC_DEFAULT_SCOPES,\r\n Constants.EMAIL_SCOPE\r\n];\r\n\r\n/**\r\n * Request header names\r\n */\r\nexport enum HeaderNames {\r\n CONTENT_TYPE = \"Content-Type\",\r\n RETRY_AFTER = \"Retry-After\",\r\n CCS_HEADER = \"X-AnchorMailbox\",\r\n WWWAuthenticate = \"WWW-Authenticate\",\r\n AuthenticationInfo = \"Authentication-Info\",\r\n X_MS_REQUEST_ID = \"x-ms-request-id\",\r\n X_MS_HTTP_VERSION= \"x-ms-httpver\"\r\n}\r\n\r\n/**\r\n * Persistent cache keys MSAL which stay while user is logged in.\r\n */\r\nexport enum PersistentCacheKeys {\r\n ID_TOKEN = \"idtoken\",\r\n CLIENT_INFO = \"client.info\",\r\n ADAL_ID_TOKEN = \"adal.idtoken\",\r\n ERROR = \"error\",\r\n ERROR_DESC = \"error.description\",\r\n ACTIVE_ACCOUNT = \"active-account\", // Legacy active-account cache key, use new key instead\r\n ACTIVE_ACCOUNT_FILTERS = \"active-account-filters\" // new cache entry for active_account for a more robust version for browser\r\n}\r\n\r\n/**\r\n * String constants related to AAD Authority\r\n */\r\nexport enum AADAuthorityConstants {\r\n COMMON = \"common\",\r\n ORGANIZATIONS = \"organizations\",\r\n CONSUMERS = \"consumers\"\r\n}\r\n\r\n/**\r\n * Keys in the hashParams sent by AAD Server\r\n */\r\nexport enum AADServerParamKeys {\r\n CLIENT_ID = \"client_id\",\r\n REDIRECT_URI = \"redirect_uri\",\r\n RESPONSE_TYPE = \"response_type\",\r\n RESPONSE_MODE = \"response_mode\",\r\n GRANT_TYPE = \"grant_type\",\r\n CLAIMS = \"claims\",\r\n SCOPE = \"scope\",\r\n ERROR = \"error\",\r\n ERROR_DESCRIPTION = \"error_description\",\r\n ACCESS_TOKEN = \"access_token\",\r\n ID_TOKEN = \"id_token\",\r\n REFRESH_TOKEN = \"refresh_token\",\r\n EXPIRES_IN = \"expires_in\",\r\n STATE = \"state\",\r\n NONCE = \"nonce\",\r\n PROMPT = \"prompt\",\r\n SESSION_STATE = \"session_state\",\r\n CLIENT_INFO = \"client_info\",\r\n CODE = \"code\",\r\n CODE_CHALLENGE = \"code_challenge\",\r\n CODE_CHALLENGE_METHOD = \"code_challenge_method\",\r\n CODE_VERIFIER = \"code_verifier\",\r\n CLIENT_REQUEST_ID = \"client-request-id\",\r\n X_CLIENT_SKU = \"x-client-SKU\",\r\n X_CLIENT_VER = \"x-client-VER\",\r\n X_CLIENT_OS = \"x-client-OS\",\r\n X_CLIENT_CPU = \"x-client-CPU\",\r\n X_CLIENT_CURR_TELEM = \"x-client-current-telemetry\",\r\n X_CLIENT_LAST_TELEM = \"x-client-last-telemetry\",\r\n X_MS_LIB_CAPABILITY = \"x-ms-lib-capability\",\r\n X_APP_NAME = \"x-app-name\",\r\n X_APP_VER = \"x-app-ver\",\r\n POST_LOGOUT_URI = \"post_logout_redirect_uri\",\r\n ID_TOKEN_HINT = \"id_token_hint\",\r\n DEVICE_CODE = \"device_code\",\r\n CLIENT_SECRET = \"client_secret\",\r\n CLIENT_ASSERTION = \"client_assertion\",\r\n CLIENT_ASSERTION_TYPE = \"client_assertion_type\",\r\n TOKEN_TYPE = \"token_type\",\r\n REQ_CNF = \"req_cnf\",\r\n OBO_ASSERTION = \"assertion\",\r\n REQUESTED_TOKEN_USE = \"requested_token_use\",\r\n ON_BEHALF_OF = \"on_behalf_of\",\r\n FOCI = \"foci\",\r\n CCS_HEADER = \"X-AnchorMailbox\",\r\n RETURN_SPA_CODE = \"return_spa_code\",\r\n NATIVE_BROKER = \"nativebroker\",\r\n LOGOUT_HINT = \"logout_hint\"\r\n}\r\n\r\n/**\r\n * Claims request keys\r\n */\r\nexport enum ClaimsRequestKeys {\r\n ACCESS_TOKEN = \"access_token\",\r\n XMS_CC = \"xms_cc\"\r\n}\r\n\r\n/**\r\n * we considered making this \"enum\" in the request instead of string, however it looks like the allowed list of\r\n * prompt values kept changing over past couple of years. There are some undocumented prompt values for some\r\n * internal partners too, hence the choice of generic \"string\" type instead of the \"enum\"\r\n */\r\nexport const PromptValue = {\r\n LOGIN: \"login\",\r\n SELECT_ACCOUNT: \"select_account\",\r\n CONSENT: \"consent\",\r\n NONE: \"none\",\r\n CREATE: \"create\",\r\n NO_SESSION: \"no_session\"\r\n};\r\n\r\n/**\r\n * SSO Types - generated to populate hints\r\n */\r\nexport enum SSOTypes {\r\n ACCOUNT = \"account\",\r\n SID = \"sid\",\r\n LOGIN_HINT = \"login_hint\",\r\n ID_TOKEN = \"id_token\",\r\n DOMAIN_HINT = \"domain_hint\",\r\n ORGANIZATIONS = \"organizations\",\r\n CONSUMERS = \"consumers\",\r\n ACCOUNT_ID = \"accountIdentifier\",\r\n HOMEACCOUNT_ID = \"homeAccountIdentifier\"\r\n}\r\n\r\n/**\r\n * allowed values for codeVerifier\r\n */\r\nexport const CodeChallengeMethodValues = {\r\n PLAIN: \"plain\",\r\n S256: \"S256\"\r\n};\r\n\r\n/**\r\n * The method used to encode the code verifier for the code challenge parameter. can be one\r\n * of plain or s256. if excluded, code challenge is assumed to be plaintext. for more\r\n * information, see the pkce rcf: https://tools.ietf.org/html/rfc7636\r\n */\r\nexport const CodeChallengeMethodValuesArray: string[] = [\r\n CodeChallengeMethodValues.PLAIN,\r\n CodeChallengeMethodValues.S256\r\n];\r\n\r\n/**\r\n * allowed values for response_mode\r\n */\r\nexport enum ResponseMode {\r\n QUERY = \"query\",\r\n FRAGMENT = \"fragment\",\r\n FORM_POST = \"form_post\"\r\n}\r\n\r\n/**\r\n * allowed grant_type\r\n */\r\nexport enum GrantType {\r\n IMPLICIT_GRANT = \"implicit\",\r\n AUTHORIZATION_CODE_GRANT = \"authorization_code\",\r\n CLIENT_CREDENTIALS_GRANT = \"client_credentials\",\r\n RESOURCE_OWNER_PASSWORD_GRANT = \"password\",\r\n REFRESH_TOKEN_GRANT = \"refresh_token\",\r\n DEVICE_CODE_GRANT = \"device_code\",\r\n JWT_BEARER = \"urn:ietf:params:oauth:grant-type:jwt-bearer\"\r\n}\r\n\r\n/**\r\n * Account types in Cache\r\n */\r\nexport enum CacheAccountType {\r\n MSSTS_ACCOUNT_TYPE = \"MSSTS\",\r\n ADFS_ACCOUNT_TYPE = \"ADFS\",\r\n MSAV1_ACCOUNT_TYPE = \"MSA\",\r\n GENERIC_ACCOUNT_TYPE = \"Generic\" // NTLM, Kerberos, FBA, Basic etc\r\n}\r\n\r\n/**\r\n * Separators used in cache\r\n */\r\nexport enum Separators {\r\n CACHE_KEY_SEPARATOR = \"-\",\r\n CLIENT_INFO_SEPARATOR = \".\"\r\n}\r\n\r\n/**\r\n * Credential Type stored in the cache\r\n */\r\nexport enum CredentialType {\r\n ID_TOKEN = \"IdToken\",\r\n ACCESS_TOKEN = \"AccessToken\",\r\n ACCESS_TOKEN_WITH_AUTH_SCHEME = \"AccessToken_With_AuthScheme\",\r\n REFRESH_TOKEN = \"RefreshToken\",\r\n}\r\n\r\n/**\r\n * Combine all cache types\r\n */\r\nexport enum CacheType {\r\n ADFS = 1001,\r\n MSA = 1002,\r\n MSSTS = 1003,\r\n GENERIC = 1004,\r\n ACCESS_TOKEN = 2001,\r\n REFRESH_TOKEN = 2002,\r\n ID_TOKEN = 2003,\r\n APP_METADATA = 3001,\r\n UNDEFINED = 9999\r\n}\r\n\r\n/**\r\n * More Cache related constants\r\n */\r\nexport const APP_METADATA = \"appmetadata\";\r\nexport const CLIENT_INFO = \"client_info\";\r\nexport const THE_FAMILY_ID = \"1\";\r\n\r\nexport const AUTHORITY_METADATA_CONSTANTS = {\r\n CACHE_KEY: \"authority-metadata\",\r\n REFRESH_TIME_SECONDS: 3600 * 24 // 24 Hours\r\n};\r\n\r\nexport enum AuthorityMetadataSource {\r\n CONFIG = \"config\",\r\n CACHE = \"cache\",\r\n NETWORK = \"network\",\r\n HARDCODED_VALUES= \"hardcoded_values\",\r\n}\r\n\r\nexport const SERVER_TELEM_CONSTANTS = {\r\n SCHEMA_VERSION: 5,\r\n MAX_CUR_HEADER_BYTES: 80, // ESTS limit is 100B, set to 80 to provide a 20B buffer\r\n MAX_LAST_HEADER_BYTES: 330, // ESTS limit is 350B, set to 330 to provide a 20B buffer,\r\n MAX_CACHED_ERRORS: 50, // Limit the number of errors that can be stored to prevent uncontrolled size gains\r\n CACHE_KEY: \"server-telemetry\",\r\n CATEGORY_SEPARATOR: \"|\",\r\n VALUE_SEPARATOR: \",\",\r\n OVERFLOW_TRUE: \"1\",\r\n OVERFLOW_FALSE: \"0\",\r\n UNKNOWN_ERROR: \"unknown_error\"\r\n};\r\n\r\n/**\r\n * Type of the authentication request\r\n */\r\nexport enum AuthenticationScheme {\r\n BEARER = \"Bearer\",\r\n POP = \"pop\",\r\n SSH = \"ssh-cert\"\r\n}\r\n\r\n/**\r\n * Constants related to throttling\r\n */\r\nexport const ThrottlingConstants = {\r\n // Default time to throttle RequestThumbprint in seconds\r\n DEFAULT_THROTTLE_TIME_SECONDS: 60,\r\n // Default maximum time to throttle in seconds, overrides what the server sends back\r\n DEFAULT_MAX_THROTTLE_TIME_SECONDS: 3600,\r\n // Prefix for storing throttling entries\r\n THROTTLING_PREFIX: \"throttling\",\r\n // Value assigned to the x-ms-lib-capability header to indicate to the server the library supports throttling\r\n X_MS_LIB_CAPABILITY_VALUE: \"retry-after, h429\"\r\n};\r\n\r\nexport const Errors = {\r\n INVALID_GRANT_ERROR: \"invalid_grant\",\r\n CLIENT_MISMATCH_ERROR: \"client_mismatch\",\r\n};\r\n\r\n/**\r\n * Password grant parameters\r\n */\r\nexport enum PasswordGrantConstants {\r\n username = \"username\",\r\n password = \"password\"\r\n}\r\n\r\n/**\r\n * Response codes\r\n */\r\nexport enum ResponseCodes {\r\n httpSuccess = 200,\r\n httpBadRequest = 400\r\n}\r\n\r\n/**\r\n * Region Discovery Sources\r\n */\r\nexport enum RegionDiscoverySources {\r\n FAILED_AUTO_DETECTION = \"1\",\r\n INTERNAL_CACHE = \"2\",\r\n ENVIRONMENT_VARIABLE = \"3\",\r\n IMDS = \"4\",\r\n}\r\n\r\n/**\r\n * Region Discovery Outcomes\r\n */\r\nexport enum RegionDiscoveryOutcomes {\r\n CONFIGURED_MATCHES_DETECTED = \"1\",\r\n CONFIGURED_NO_AUTO_DETECTION = \"2\",\r\n CONFIGURED_NOT_DETECTED = \"3\",\r\n AUTO_DETECTION_REQUESTED_SUCCESSFUL = \"4\",\r\n AUTO_DETECTION_REQUESTED_FAILED = \"5\"\r\n}\r\n\r\nexport enum CacheOutcome {\r\n NO_CACHE_HIT = \"0\",\r\n FORCE_REFRESH = \"1\",\r\n NO_CACHED_ACCESS_TOKEN = \"2\",\r\n CACHED_ACCESS_TOKEN_EXPIRED = \"3\",\r\n REFRESH_CACHED_ACCESS_TOKEN = \"4\",\r\n CLAIMS_REQUESTED_CACHE_SKIPPED = \"5\"\r\n}\r\n\r\nexport enum JsonTypes {\r\n Jwt = \"JWT\",\r\n Jwk = \"JWK\",\r\n Pop = \"pop\"\r\n}\r\n\r\nexport const ONE_DAY_IN_MS = 86400000;\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { DecodedAuthToken } from \"../account/DecodedAuthToken\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class StringUtils {\r\n\r\n /**\r\n * decode a JWT\r\n *\r\n * @param authToken\r\n */\r\n static decodeAuthToken(authToken: string): DecodedAuthToken {\r\n if (StringUtils.isEmpty(authToken)) {\r\n throw ClientAuthError.createTokenNullOrEmptyError(authToken);\r\n }\r\n const tokenPartsRegex = /^([^\\.\\s]*)\\.([^\\.\\s]+)\\.([^\\.\\s]*)$/;\r\n const matches = tokenPartsRegex.exec(authToken);\r\n if (!matches || matches.length < 4) {\r\n throw ClientAuthError.createTokenParsingError(`Given token is malformed: ${JSON.stringify(authToken)}`);\r\n }\r\n const crackedToken: DecodedAuthToken = {\r\n header: matches[1],\r\n JWSPayload: matches[2],\r\n JWSSig: matches[3]\r\n };\r\n return crackedToken;\r\n }\r\n\r\n /**\r\n * Check if a string is empty.\r\n *\r\n * @param str\r\n */\r\n static isEmpty(str?: string): boolean {\r\n return (typeof str === \"undefined\" || !str || 0 === str.length);\r\n }\r\n\r\n /**\r\n * Check if stringified object is empty\r\n * @param strObj \r\n */\r\n static isEmptyObj(strObj?: string): boolean {\r\n if (strObj && !StringUtils.isEmpty(strObj)) {\r\n try {\r\n const obj = JSON.parse(strObj);\r\n return Object.keys(obj).length === 0;\r\n } catch (e) {}\r\n }\r\n return true;\r\n }\r\n\r\n static startsWith(str: string, search: string): boolean {\r\n return str.indexOf(search) === 0;\r\n }\r\n\r\n static endsWith(str: string, search: string): boolean {\r\n return (str.length >= search.length) && (str.lastIndexOf(search) === (str.length - search.length));\r\n }\r\n\r\n /**\r\n * Parses string into an object.\r\n *\r\n * @param query\r\n */\r\n static queryStringToObject(query: string): T {\r\n const obj: {} = {};\r\n const params = query.split(\"&\");\r\n const decode = (s: string) => decodeURIComponent(s.replace(/\\+/g, \" \"));\r\n params.forEach((pair) => {\r\n if (pair.trim()) {\r\n const [key, value] = pair.split(/=(.+)/g, 2); // Split on the first occurence of the '=' character\r\n if (key && value) {\r\n obj[decode(key)] = decode(value);\r\n }\r\n }\r\n });\r\n return obj as T;\r\n }\r\n\r\n /**\r\n * Trims entries in an array.\r\n *\r\n * @param arr\r\n */\r\n static trimArrayEntries(arr: Array): Array {\r\n return arr.map(entry => entry.trim());\r\n }\r\n\r\n /**\r\n * Removes empty strings from array\r\n * @param arr\r\n */\r\n static removeEmptyStringsFromArray(arr: Array): Array {\r\n return arr.filter(entry => {\r\n return !StringUtils.isEmpty(entry);\r\n });\r\n }\r\n\r\n /**\r\n * Attempts to parse a string into JSON\r\n * @param str\r\n */\r\n static jsonParseHelper(str: string): T | null {\r\n try {\r\n return JSON.parse(str) as T;\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Tests if a given string matches a given pattern, with support for wildcards and queries.\r\n * @param pattern Wildcard pattern to string match. Supports \"*\" for wildcards and \"?\" for queries\r\n * @param input String to match against\r\n */\r\n static matchPattern(pattern: string, input: string): boolean {\r\n /**\r\n * Wildcard support: https://stackoverflow.com/a/3117248/4888559\r\n * Queries: replaces \"?\" in string with escaped \"\\?\" for regex test\r\n */\r\n const regex: RegExp = new RegExp(pattern.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\*/g, \"[^ ]*\").replace(/\\?/g, \"\\\\\\?\")); // eslint-disable-line security/detect-non-literal-regexp\r\n\r\n return regex.test(input);\r\n }\r\n}\r\n","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3)\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\n","import {IMPORT, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {string}\n */\nexport function prefix (value, length) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// flex, flex-direction\n\t\tcase 6828: case 4268:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// (s)ticky?\n\t\t\tif (charat(value, length + 1) !== 115)\n\t\t\t\tbreak\n\t\t// display: (flex|inline-flex)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n\t\t\t\t// stic(k)y\n\t\t\t\tcase 107:\n\t\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\t\t// (inline-)?fl(e)x\n\t\t\t\tcase 101:\n\t\t\t\t\treturn replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t}\n\t\t\tbreak\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t}\n\n\t\t\treturn WEBKIT + value + MS + value + value\n\t}\n\n\treturn value\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && characters.charCodeAt(length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset:\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// d m s\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, stringify, COMMENT, rulesheet, middleware, prefixer, serialize, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar last = function last(arr) {\n return arr.length ? arr[arr.length - 1] : null;\n}; // based on https://github.com/thysultan/stylis.js/blob/e6843c373ebcbbfade25ebcc23f540ed8508da0a/src/Tokenizer.js#L239-L244\n\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return !!element && element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule') return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses && cache.compat !== true) {\n var prevElement = index > 0 ? children[index - 1] : null;\n\n if (prevElement && isIgnoringComment(last(prevElement.children))) {\n return;\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if ( key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {}; // $FlowFixMe\n\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport default createCache;\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length)\n\t\t\t\t\tbreak\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(var|attr|counters?|url|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/;\n var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n var processed = oldProcessStyleValue(key, value);\n\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n\n return processed;\n };\n}\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error('Component selectors can only be used in conjunction with @emotion/babel-plugin.');\n }\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n break;\n }\n\n case 'string':\n if (process.env.NODE_ENV !== 'production') {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error('Component selectors can only be used in conjunction with @emotion/babel-plugin.');\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (process.env.NODE_ENV !== 'production') {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\nexport { serializeStyles };\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default isPropValid;\n","import * as React from 'react';\nimport { createContext, useContext, forwardRef, createElement, Fragment } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar EmotionCacheContext = /* #__PURE__ */createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nif (process.env.NODE_ENV !== 'production') {\n EmotionCacheContext.displayName = 'EmotionCacheContext';\n}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n ThemeContext.displayName = 'EmotionThemeContext';\n}\n\nvar useTheme = function useTheme() {\n return useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = useContext(ThemeContext);\n return /*#__PURE__*/createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar getLastPart = function getLastPart(functionName) {\n // The match may be something like 'Object.createEmotionProps' or\n // 'Loader.prototype.render'\n var parts = functionName.split('.');\n return parts[parts.length - 1];\n};\n\nvar getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {\n // V8\n var match = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(line);\n if (match) return getLastPart(match[1]); // Safari / Firefox\n\n match = /^([A-Za-z0-9$.]+)@/.exec(line);\n if (match) return getLastPart(match[1]);\n return undefined;\n};\n\nvar internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS\n// identifiers, thus we only need to replace what is a valid character for JS,\n// but not for CSS.\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {\n if (!stackTrace) return undefined;\n var lines = stackTrace.split('\\n');\n\n for (var i = 0; i < lines.length; i++) {\n var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just \"Error\"\n\n if (!functionName) continue; // If we reach one of these, we have gone too far and should quit\n\n if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an\n // uppercase letter\n\n if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);\n }\n\n return undefined;\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : function useInsertionEffect(create) {\n create();\n};\nfunction useInsertionEffectMaybe(create) {\n\n useInsertionEffect(create);\n}\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when\n // the label hasn't already been computed\n\n if (process.env.NODE_ENV !== 'production' && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) {\n var label = getLabelFromStackTrace(new Error().stack);\n if (label) newProps[labelPropName] = label;\n }\n\n return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n var rules = useInsertionEffectMaybe(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var WrappedComponent = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, useContext(ThemeContext));\n\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof WrappedComponent === 'string'\n }), /*#__PURE__*/createElement(WrappedComponent, newProps));\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, __unsafe_useEmotionCache as _, useTheme as a, ThemeProvider as b, createEmotionProps as c, withTheme as d, hasOwnProperty as h, useInsertionEffectMaybe as u, withEmotionCache as w };\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n var maybeStyles = cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useContext, createElement, Fragment } from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === 'string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== 'function' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : function useInsertionEffect(create) {\n create();\n};\nfunction useInsertionEffectMaybe(create) {\n\n useInsertionEffect(create);\n}\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n var rules = useInsertionEffectMaybe(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n if (process.env.NODE_ENV !== 'production') {\n if (tag === undefined) {\n throw new Error('You are trying to create a styled element with an undefined component.\\nYou may have forgotten to import it.');\n }\n }\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp('as');\n return function () {\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n styles.push.apply(styles, args);\n } else {\n if (process.env.NODE_ENV !== 'production' && args[0][0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[0][0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n if (process.env.NODE_ENV !== 'production' && args[0][i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[i], args[0][i]);\n }\n } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class\n\n\n var Styled = withEmotionCache(function (props, cache, ref) {\n var FinalTag = shouldUseAs && props.as || baseTag;\n var className = '';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = useContext(ThemeContext);\n }\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n className += cache.key + \"-\" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += \" \" + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === 'as') continue;\n\n if ( // $FlowFixMe\n finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n newProps.ref = ref;\n return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof FinalTag === 'string'\n }), /*#__PURE__*/createElement(FinalTag, newProps));\n });\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (targetClassName === undefined && process.env.NODE_ENV !== 'production') {\n return 'NO_COMPONENT_SELECTOR';\n } // $FlowFixMe: coerce undefined to string\n\n\n return \".\" + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n return createStyled(nextTag, _extends({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n })).apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\nexport default createStyled;\n","import '@babel/runtime/helpers/extends';\nimport 'react';\nimport '@emotion/is-prop-valid';\nimport createStyled from '../base/dist/emotion-styled-base.browser.esm.js';\nimport '@emotion/react';\nimport '@emotion/utils';\nimport '@emotion/serialize';\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\nvar newStyled = createStyled.bind();\ntags.forEach(function (tagName) {\n // $FlowFixMe: we can ignore this because its exposed type is defined by the CreateStyled type\n newStyled[tagName] = newStyled(tagName);\n});\n\nexport default newStyled;\n","/**\n * Cannot do Math.log(x) / Math.log(10) bc if IEEE floating point issue\n * @param x number\n */\nexport function getMagnitude(x) {\n // Cannot count string length via Number.toString because it may use scientific notation\n // for very small or very large numbers.\n return Math.floor(Math.log(x) * Math.LOG10E);\n}\nexport function repeat(s, times) {\n if (typeof s.repeat === 'function') {\n return s.repeat(times);\n }\n var arr = new Array(times);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = s;\n }\n return arr.join('');\n}\nexport function setInternalSlot(map, pl, field, value) {\n if (!map.get(pl)) {\n map.set(pl, Object.create(null));\n }\n var slots = map.get(pl);\n slots[field] = value;\n}\nexport function setMultiInternalSlots(map, pl, props) {\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var k = _a[_i];\n setInternalSlot(map, pl, k, props[k]);\n }\n}\nexport function getInternalSlot(map, pl, field) {\n return getMultiInternalSlots(map, pl, field)[field];\n}\nexport function getMultiInternalSlots(map, pl) {\n var fields = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n fields[_i - 2] = arguments[_i];\n }\n var slots = map.get(pl);\n if (!slots) {\n throw new TypeError(\"\".concat(pl, \" InternalSlot has not been initialized\"));\n }\n return fields.reduce(function (all, f) {\n all[f] = slots[f];\n return all;\n }, Object.create(null));\n}\nexport function isLiteralPart(patternPart) {\n return patternPart.type === 'literal';\n}\n/*\n 17 ECMAScript Standard Built-in Objects:\n Every built-in Function object, including constructors, that is not\n identified as an anonymous function has a name property whose value\n is a String.\n\n Unless otherwise specified, the name property of a built-in Function\n object, if it exists, has the attributes { [[Writable]]: false,\n [[Enumerable]]: false, [[Configurable]]: true }.\n*/\nexport function defineProperty(target, name, _a) {\n var value = _a.value;\n Object.defineProperty(target, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: value,\n });\n}\nexport var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\nexport function invariant(condition, message, Err) {\n if (Err === void 0) { Err = Error; }\n if (!condition) {\n throw new Err(message);\n }\n}\n","//\n// Main\n//\nexport default function memoize(fn, options) {\n var cache = options && options.cache ? options.cache : cacheDefault;\n var serializer = options && options.serializer ? options.serializer : serializerDefault;\n var strategy = options && options.strategy ? options.strategy : strategyDefault;\n return strategy(fn, {\n cache: cache,\n serializer: serializer,\n });\n}\n//\n// Strategy\n//\nfunction isPrimitive(value) {\n return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\nfunction monadic(fn, cache, serializer, arg) {\n var cacheKey = isPrimitive(arg) ? arg : serializer(arg);\n var computedValue = cache.get(cacheKey);\n if (typeof computedValue === 'undefined') {\n computedValue = fn.call(this, arg);\n cache.set(cacheKey, computedValue);\n }\n return computedValue;\n}\nfunction variadic(fn, cache, serializer) {\n var args = Array.prototype.slice.call(arguments, 3);\n var cacheKey = serializer(args);\n var computedValue = cache.get(cacheKey);\n if (typeof computedValue === 'undefined') {\n computedValue = fn.apply(this, args);\n cache.set(cacheKey, computedValue);\n }\n return computedValue;\n}\nfunction assemble(fn, context, strategy, cache, serialize) {\n return strategy.bind(context, fn, cache, serialize);\n}\nfunction strategyDefault(fn, options) {\n var strategy = fn.length === 1 ? monadic : variadic;\n return assemble(fn, this, strategy, options.cache.create(), options.serializer);\n}\nfunction strategyVariadic(fn, options) {\n return assemble(fn, this, variadic, options.cache.create(), options.serializer);\n}\nfunction strategyMonadic(fn, options) {\n return assemble(fn, this, monadic, options.cache.create(), options.serializer);\n}\n//\n// Serializer\n//\nvar serializerDefault = function () {\n return JSON.stringify(arguments);\n};\n//\n// Cache\n//\nfunction ObjectWithoutPrototypeCache() {\n this.cache = Object.create(null);\n}\nObjectWithoutPrototypeCache.prototype.get = function (key) {\n return this.cache[key];\n};\nObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n this.cache[key] = value;\n};\nvar cacheDefault = {\n create: function create() {\n // @ts-ignore\n return new ObjectWithoutPrototypeCache();\n },\n};\nexport var strategies = {\n variadic: strategyVariadic,\n monadic: strategyMonadic,\n};\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","export var ErrorKind;\n(function (ErrorKind) {\n /** Argument is unclosed (e.g. `{0`) */\n ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n /** Argument is empty (e.g. `{}`). */\n ErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n /** Argument is malformed (e.g. `{foo!}``) */\n ErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n /** Expect an argument type (e.g. `{foo,}`) */\n ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n /** Unsupported argument type (e.g. `{foo,foo}`) */\n ErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n /** Expect an argument style (e.g. `{foo, number, }`) */\n ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n /** The number skeleton is invalid. */\n ErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n /** The date time skeleton is invalid. */\n ErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n ErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n ErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n ErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n /** Missing select argument options (e.g. `{foo, select}`) */\n ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n /** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n /**\n * Expecting a message fragment after the `plural` or `selectordinal` selector\n * (e.g. `{foo, plural, one}`)\n */\n ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n /**\n * Duplicate selectors in `plural` or `selectordinal` argument.\n * (e.g. {foo, plural, one {#} one {#}})\n */\n ErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n /** Duplicate selectors in `select` argument.\n * (e.g. {foo, select, apple {apple} apple {apple}})\n */\n ErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n /** Plural or select argument option must have `other` clause. */\n ErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n /** The tag is malformed. (e.g. `foo) */\n ErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n /** The tag name is invalid. (e.g. `<123>foo`) */\n ErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n /** The closing tag does not match the opening tag. (e.g. `foo`) */\n ErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n /** The opening tag has unmatched closing tag. (e.g. `foo`) */\n ErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n})(ErrorKind || (ErrorKind = {}));\n","export var TYPE;\n(function (TYPE) {\n /**\n * Raw text\n */\n TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n /**\n * Variable w/o any format, e.g `var` in `this is a {var}`\n */\n TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n /**\n * Variable w/ number format\n */\n TYPE[TYPE[\"number\"] = 2] = \"number\";\n /**\n * Variable w/ date format\n */\n TYPE[TYPE[\"date\"] = 3] = \"date\";\n /**\n * Variable w/ time format\n */\n TYPE[TYPE[\"time\"] = 4] = \"time\";\n /**\n * Variable w/ select format\n */\n TYPE[TYPE[\"select\"] = 5] = \"select\";\n /**\n * Variable w/ plural format\n */\n TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n /**\n * Only possible within plural argument.\n * This is the `#` symbol that will be substituted with the count.\n */\n TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n /**\n * XML-like tag\n */\n TYPE[TYPE[\"tag\"] = 8] = \"tag\";\n})(TYPE || (TYPE = {}));\nexport var SKELETON_TYPE;\n(function (SKELETON_TYPE) {\n SKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n SKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n})(SKELETON_TYPE || (SKELETON_TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n return el.type === TYPE.pound;\n}\nexport function isTagElement(el) {\n return el.type === TYPE.tag;\n}\nexport function isNumberSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);\n}\nexport function isDateTimeSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);\n}\nexport function createLiteralElement(value) {\n return {\n type: TYPE.literal,\n value: value,\n };\n}\nexport function createNumberElement(value, style) {\n return {\n type: TYPE.number,\n value: value,\n style: style,\n };\n}\n","// @generated from regex-gen.ts\nexport var SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/;\n","/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n var result = {};\n skeleton.replace(DATE_TIME_REGEX, function (match) {\n var len = match.length;\n switch (match[0]) {\n // Era\n case 'G':\n result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n break;\n // Year\n case 'y':\n result.year = len === 2 ? '2-digit' : 'numeric';\n break;\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n // Quarter\n case 'q':\n case 'Q':\n throw new RangeError('`q/Q` (quarter) patterns are not supported');\n // Month\n case 'M':\n case 'L':\n result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n break;\n // Week\n case 'w':\n case 'W':\n throw new RangeError('`w/W` (week) patterns are not supported');\n case 'd':\n result.day = ['numeric', '2-digit'][len - 1];\n break;\n case 'D':\n case 'F':\n case 'g':\n throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n // Weekday\n case 'E':\n result.weekday = len === 4 ? 'short' : len === 5 ? 'narrow' : 'short';\n break;\n case 'e':\n if (len < 4) {\n throw new RangeError('`e..eee` (weekday) patterns are not supported');\n }\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n case 'c':\n if (len < 4) {\n throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n }\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n // Period\n case 'a': // AM, PM\n result.hour12 = true;\n break;\n case 'b': // am, pm, noon, midnight\n case 'B': // flexible day periods\n throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n // Hour\n case 'h':\n result.hourCycle = 'h12';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'H':\n result.hourCycle = 'h23';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'K':\n result.hourCycle = 'h11';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'k':\n result.hourCycle = 'h24';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'j':\n case 'J':\n case 'C':\n throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n // Minute\n case 'm':\n result.minute = ['numeric', '2-digit'][len - 1];\n break;\n // Second\n case 's':\n result.second = ['numeric', '2-digit'][len - 1];\n break;\n case 'S':\n case 'A':\n throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');\n // Zone\n case 'z': // 1..3, 4: specific non-location format\n result.timeZoneName = len < 4 ? 'short' : 'long';\n break;\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n case 'O': // 1, 4: miliseconds in day short, long\n case 'v': // 1, 4: generic non-location format\n case 'V': // 1, 2, 3, 4: time zone ID or city\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');\n }\n return '';\n });\n return result;\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","// @generated from regex-gen.ts\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n","import { __assign } from \"tslib\";\nimport { WHITE_SPACE_REGEX } from './regex.generated';\nexport function parseNumberSkeletonFromString(skeleton) {\n if (skeleton.length === 0) {\n throw new Error('Number skeleton cannot be empty');\n }\n // Parse the skeleton\n var stringTokens = skeleton\n .split(WHITE_SPACE_REGEX)\n .filter(function (x) { return x.length > 0; });\n var tokens = [];\n for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) {\n var stringToken = stringTokens_1[_i];\n var stemAndOptions = stringToken.split('/');\n if (stemAndOptions.length === 0) {\n throw new Error('Invalid number skeleton');\n }\n var stem = stemAndOptions[0], options = stemAndOptions.slice(1);\n for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {\n var option = options_1[_a];\n if (option.length === 0) {\n throw new Error('Invalid number skeleton');\n }\n }\n tokens.push({ stem: stem, options: options });\n }\n return tokens;\n}\nfunction icuUnitToEcma(unit) {\n return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nvar INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nvar CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n var result = {};\n if (str[str.length - 1] === 'r') {\n result.roundingPriority = 'morePrecision';\n }\n else if (str[str.length - 1] === 's') {\n result.roundingPriority = 'lessPrecision';\n }\n str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n // @@@ case\n if (typeof g2 !== 'string') {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits = g1.length;\n }\n // @@@+ case\n else if (g2 === '+') {\n result.minimumSignificantDigits = g1.length;\n }\n // .### case\n else if (g1[0] === '#') {\n result.maximumSignificantDigits = g1.length;\n }\n // .@@## or .@@@ case\n else {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits =\n g1.length + (typeof g2 === 'string' ? g2.length : 0);\n }\n return '';\n });\n return result;\n}\nfunction parseSign(str) {\n switch (str) {\n case 'sign-auto':\n return {\n signDisplay: 'auto',\n };\n case 'sign-accounting':\n case '()':\n return {\n currencySign: 'accounting',\n };\n case 'sign-always':\n case '+!':\n return {\n signDisplay: 'always',\n };\n case 'sign-accounting-always':\n case '()!':\n return {\n signDisplay: 'always',\n currencySign: 'accounting',\n };\n case 'sign-except-zero':\n case '+?':\n return {\n signDisplay: 'exceptZero',\n };\n case 'sign-accounting-except-zero':\n case '()?':\n return {\n signDisplay: 'exceptZero',\n currencySign: 'accounting',\n };\n case 'sign-never':\n case '+_':\n return {\n signDisplay: 'never',\n };\n }\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n // Engineering\n var result;\n if (stem[0] === 'E' && stem[1] === 'E') {\n result = {\n notation: 'engineering',\n };\n stem = stem.slice(2);\n }\n else if (stem[0] === 'E') {\n result = {\n notation: 'scientific',\n };\n stem = stem.slice(1);\n }\n if (result) {\n var signDisplay = stem.slice(0, 2);\n if (signDisplay === '+!') {\n result.signDisplay = 'always';\n stem = stem.slice(2);\n }\n else if (signDisplay === '+?') {\n result.signDisplay = 'exceptZero';\n stem = stem.slice(2);\n }\n if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n throw new Error('Malformed concise eng/scientific notation');\n }\n result.minimumIntegerDigits = stem.length;\n }\n return result;\n}\nfunction parseNotationOptions(opt) {\n var result = {};\n var signOpts = parseSign(opt);\n if (signOpts) {\n return signOpts;\n }\n return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(tokens) {\n var result = {};\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n switch (token.stem) {\n case 'percent':\n case '%':\n result.style = 'percent';\n continue;\n case '%x100':\n result.style = 'percent';\n result.scale = 100;\n continue;\n case 'currency':\n result.style = 'currency';\n result.currency = token.options[0];\n continue;\n case 'group-off':\n case ',_':\n result.useGrouping = false;\n continue;\n case 'precision-integer':\n case '.':\n result.maximumFractionDigits = 0;\n continue;\n case 'measure-unit':\n case 'unit':\n result.style = 'unit';\n result.unit = icuUnitToEcma(token.options[0]);\n continue;\n case 'compact-short':\n case 'K':\n result.notation = 'compact';\n result.compactDisplay = 'short';\n continue;\n case 'compact-long':\n case 'KK':\n result.notation = 'compact';\n result.compactDisplay = 'long';\n continue;\n case 'scientific':\n result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n continue;\n case 'engineering':\n result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n continue;\n case 'notation-simple':\n result.notation = 'standard';\n continue;\n // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n case 'unit-width-narrow':\n result.currencyDisplay = 'narrowSymbol';\n result.unitDisplay = 'narrow';\n continue;\n case 'unit-width-short':\n result.currencyDisplay = 'code';\n result.unitDisplay = 'short';\n continue;\n case 'unit-width-full-name':\n result.currencyDisplay = 'name';\n result.unitDisplay = 'long';\n continue;\n case 'unit-width-iso-code':\n result.currencyDisplay = 'symbol';\n continue;\n case 'scale':\n result.scale = parseFloat(token.options[0]);\n continue;\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n case 'integer-width':\n if (token.options.length > 1) {\n throw new RangeError('integer-width stems only accept a single optional option');\n }\n token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {\n if (g1) {\n result.minimumIntegerDigits = g2.length;\n }\n else if (g3 && g4) {\n throw new Error('We currently do not support maximum integer digits');\n }\n else if (g5) {\n throw new Error('We currently do not support exact integer digits');\n }\n return '';\n });\n continue;\n }\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n result.minimumIntegerDigits = token.stem.length;\n continue;\n }\n if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n // Precision\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n // precision-integer case\n if (token.options.length > 1) {\n throw new RangeError('Fraction-precision stems only accept a single optional option');\n }\n token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {\n // .000* case (before ICU67 it was .000+)\n if (g2 === '*') {\n result.minimumFractionDigits = g1.length;\n }\n // .### case\n else if (g3 && g3[0] === '#') {\n result.maximumFractionDigits = g3.length;\n }\n // .00## case\n else if (g4 && g5) {\n result.minimumFractionDigits = g4.length;\n result.maximumFractionDigits = g4.length + g5.length;\n }\n else {\n result.minimumFractionDigits = g1.length;\n result.maximumFractionDigits = g1.length;\n }\n return '';\n });\n var opt = token.options[0];\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display\n if (opt === 'w') {\n result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' });\n }\n else if (opt) {\n result = __assign(__assign({}, result), parseSignificantPrecision(opt));\n }\n continue;\n }\n // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n continue;\n }\n var signOpts = parseSign(token.stem);\n if (signOpts) {\n result = __assign(__assign({}, result), signOpts);\n }\n var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n if (conciseScientificAndEngineeringOpts) {\n result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);\n }\n }\n return result;\n}\n","var _a;\nimport { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { SKELETON_TYPE, TYPE, } from './types';\nimport { SPACE_SEPARATOR_REGEX } from './regex.generated';\nimport { parseNumberSkeleton, parseNumberSkeletonFromString, parseDateTimeSkeleton, } from '@formatjs/icu-skeleton-parser';\nvar SPACE_SEPARATOR_START_REGEX = new RegExp(\"^\".concat(SPACE_SEPARATOR_REGEX.source, \"*\"));\nvar SPACE_SEPARATOR_END_REGEX = new RegExp(\"\".concat(SPACE_SEPARATOR_REGEX.source, \"*$\"));\nfunction createLocation(start, end) {\n return { start: start, end: end };\n}\n// #region Ponyfills\n// Consolidate these variables up top for easier toggling during debugging\nvar hasNativeStartsWith = !!String.prototype.startsWith;\nvar hasNativeFromCodePoint = !!String.fromCodePoint;\nvar hasNativeFromEntries = !!Object.fromEntries;\nvar hasNativeCodePointAt = !!String.prototype.codePointAt;\nvar hasTrimStart = !!String.prototype.trimStart;\nvar hasTrimEnd = !!String.prototype.trimEnd;\nvar hasNativeIsSafeInteger = !!Number.isSafeInteger;\nvar isSafeInteger = hasNativeIsSafeInteger\n ? Number.isSafeInteger\n : function (n) {\n return (typeof n === 'number' &&\n isFinite(n) &&\n Math.floor(n) === n &&\n Math.abs(n) <= 0x1fffffffffffff);\n };\n// IE11 does not support y and u.\nvar REGEX_SUPPORTS_U_AND_Y = true;\ntry {\n var re = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n /**\n * legacy Edge or Xbox One browser\n * Unicode flag support: supported\n * Pattern_Syntax support: not supported\n * See https://github.com/formatjs/formatjs/issues/2822\n */\n REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a';\n}\ncatch (_) {\n REGEX_SUPPORTS_U_AND_Y = false;\n}\nvar startsWith = hasNativeStartsWith\n ? // Native\n function startsWith(s, search, position) {\n return s.startsWith(search, position);\n }\n : // For IE11\n function startsWith(s, search, position) {\n return s.slice(position, position + search.length) === search;\n };\nvar fromCodePoint = hasNativeFromCodePoint\n ? String.fromCodePoint\n : // IE11\n function fromCodePoint() {\n var codePoints = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n codePoints[_i] = arguments[_i];\n }\n var elements = '';\n var length = codePoints.length;\n var i = 0;\n var code;\n while (length > i) {\n code = codePoints[i++];\n if (code > 0x10ffff)\n throw RangeError(code + ' is not a valid code point');\n elements +=\n code < 0x10000\n ? String.fromCharCode(code)\n : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00);\n }\n return elements;\n };\nvar fromEntries = \n// native\nhasNativeFromEntries\n ? Object.fromEntries\n : // Ponyfill\n function fromEntries(entries) {\n var obj = {};\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n var _a = entries_1[_i], k = _a[0], v = _a[1];\n obj[k] = v;\n }\n return obj;\n };\nvar codePointAt = hasNativeCodePointAt\n ? // Native\n function codePointAt(s, index) {\n return s.codePointAt(index);\n }\n : // IE 11\n function codePointAt(s, index) {\n var size = s.length;\n if (index < 0 || index >= size) {\n return undefined;\n }\n var first = s.charCodeAt(index);\n var second;\n return first < 0xd800 ||\n first > 0xdbff ||\n index + 1 === size ||\n (second = s.charCodeAt(index + 1)) < 0xdc00 ||\n second > 0xdfff\n ? first\n : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;\n };\nvar trimStart = hasTrimStart\n ? // Native\n function trimStart(s) {\n return s.trimStart();\n }\n : // Ponyfill\n function trimStart(s) {\n return s.replace(SPACE_SEPARATOR_START_REGEX, '');\n };\nvar trimEnd = hasTrimEnd\n ? // Native\n function trimEnd(s) {\n return s.trimEnd();\n }\n : // Ponyfill\n function trimEnd(s) {\n return s.replace(SPACE_SEPARATOR_END_REGEX, '');\n };\n// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11.\nfunction RE(s, flag) {\n return new RegExp(s, flag);\n}\n// #endregion\nvar matchIdentifierAtIndex;\nif (REGEX_SUPPORTS_U_AND_Y) {\n // Native\n var IDENTIFIER_PREFIX_RE_1 = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n var _a;\n IDENTIFIER_PREFIX_RE_1.lastIndex = index;\n var match = IDENTIFIER_PREFIX_RE_1.exec(s);\n return (_a = match[1]) !== null && _a !== void 0 ? _a : '';\n };\n}\nelse {\n // IE11\n matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n var match = [];\n while (true) {\n var c = codePointAt(s, index);\n if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) {\n break;\n }\n match.push(c);\n index += c >= 0x10000 ? 2 : 1;\n }\n return fromCodePoint.apply(void 0, match);\n };\n}\nvar Parser = /** @class */ (function () {\n function Parser(message, options) {\n if (options === void 0) { options = {}; }\n this.message = message;\n this.position = { offset: 0, line: 1, column: 1 };\n this.ignoreTag = !!options.ignoreTag;\n this.requiresOtherClause = !!options.requiresOtherClause;\n this.shouldParseSkeletons = !!options.shouldParseSkeletons;\n }\n Parser.prototype.parse = function () {\n if (this.offset() !== 0) {\n throw Error('parser can only be used once');\n }\n return this.parseMessage(0, '', false);\n };\n Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) {\n var elements = [];\n while (!this.isEOF()) {\n var char = this.char();\n if (char === 123 /* `{` */) {\n var result = this.parseArgument(nestingLevel, expectingCloseTag);\n if (result.err) {\n return result;\n }\n elements.push(result.val);\n }\n else if (char === 125 /* `}` */ && nestingLevel > 0) {\n break;\n }\n else if (char === 35 /* `#` */ &&\n (parentArgType === 'plural' || parentArgType === 'selectordinal')) {\n var position = this.clonePosition();\n this.bump();\n elements.push({\n type: TYPE.pound,\n location: createLocation(position, this.clonePosition()),\n });\n }\n else if (char === 60 /* `<` */ &&\n !this.ignoreTag &&\n this.peek() === 47 // char code for '/'\n ) {\n if (expectingCloseTag) {\n break;\n }\n else {\n return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));\n }\n }\n else if (char === 60 /* `<` */ &&\n !this.ignoreTag &&\n _isAlpha(this.peek() || 0)) {\n var result = this.parseTag(nestingLevel, parentArgType);\n if (result.err) {\n return result;\n }\n elements.push(result.val);\n }\n else {\n var result = this.parseLiteral(nestingLevel, parentArgType);\n if (result.err) {\n return result;\n }\n elements.push(result.val);\n }\n }\n return { val: elements, err: null };\n };\n /**\n * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n * [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n * are accepted:\n *\n * ```\n * tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"\"\n * tagName ::= [a-z] (PENChar)*\n * PENChar ::=\n * \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n * [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n * [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n * ```\n *\n * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n * since other tag-based engines like React allow it\n */\n Parser.prototype.parseTag = function (nestingLevel, parentArgType) {\n var startPosition = this.clonePosition();\n this.bump(); // `<`\n var tagName = this.parseTagName();\n this.bumpSpace();\n if (this.bumpIf('/>')) {\n // Self closing tag\n return {\n val: {\n type: TYPE.literal,\n value: \"<\".concat(tagName, \"/>\"),\n location: createLocation(startPosition, this.clonePosition()),\n },\n err: null,\n };\n }\n else if (this.bumpIf('>')) {\n var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n if (childrenResult.err) {\n return childrenResult;\n }\n var children = childrenResult.val;\n // Expecting a close tag\n var endTagStartPosition = this.clonePosition();\n if (this.bumpIf('')) {\n return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n }\n return {\n val: {\n type: TYPE.tag,\n value: tagName,\n children: children,\n location: createLocation(startPosition, this.clonePosition()),\n },\n err: null,\n };\n }\n else {\n return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));\n }\n }\n else {\n return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));\n }\n };\n /**\n * This method assumes that the caller has peeked ahead for the first tag character.\n */\n Parser.prototype.parseTagName = function () {\n var startOffset = this.offset();\n this.bump(); // the first tag name character\n while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {\n this.bump();\n }\n return this.message.slice(startOffset, this.offset());\n };\n Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) {\n var start = this.clonePosition();\n var value = '';\n while (true) {\n var parseQuoteResult = this.tryParseQuote(parentArgType);\n if (parseQuoteResult) {\n value += parseQuoteResult;\n continue;\n }\n var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n if (parseUnquotedResult) {\n value += parseUnquotedResult;\n continue;\n }\n var parseLeftAngleResult = this.tryParseLeftAngleBracket();\n if (parseLeftAngleResult) {\n value += parseLeftAngleResult;\n continue;\n }\n break;\n }\n var location = createLocation(start, this.clonePosition());\n return {\n val: { type: TYPE.literal, value: value, location: location },\n err: null,\n };\n };\n Parser.prototype.tryParseLeftAngleBracket = function () {\n if (!this.isEOF() &&\n this.char() === 60 /* `<` */ &&\n (this.ignoreTag ||\n // If at the opening tag or closing tag position, bail.\n !_isAlphaOrSlash(this.peek() || 0))) {\n this.bump(); // `<`\n return '<';\n }\n return null;\n };\n /**\n * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n * a character that requires quoting (that is, \"only where needed\"), and works the same in\n * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n */\n Parser.prototype.tryParseQuote = function (parentArgType) {\n if (this.isEOF() || this.char() !== 39 /* `'` */) {\n return null;\n }\n // Parse escaped char following the apostrophe, or early return if there is no escaped char.\n // Check if is valid escaped character\n switch (this.peek()) {\n case 39 /* `'` */:\n // double quote, should return as a single quote.\n this.bump();\n this.bump();\n return \"'\";\n // '{', '<', '>', '}'\n case 123:\n case 60:\n case 62:\n case 125:\n break;\n case 35: // '#'\n if (parentArgType === 'plural' || parentArgType === 'selectordinal') {\n break;\n }\n return null;\n default:\n return null;\n }\n this.bump(); // apostrophe\n var codePoints = [this.char()]; // escaped char\n this.bump();\n // read chars until the optional closing apostrophe is found\n while (!this.isEOF()) {\n var ch = this.char();\n if (ch === 39 /* `'` */) {\n if (this.peek() === 39 /* `'` */) {\n codePoints.push(39);\n // Bump one more time because we need to skip 2 characters.\n this.bump();\n }\n else {\n // Optional closing apostrophe.\n this.bump();\n break;\n }\n }\n else {\n codePoints.push(ch);\n }\n this.bump();\n }\n return fromCodePoint.apply(void 0, codePoints);\n };\n Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) {\n if (this.isEOF()) {\n return null;\n }\n var ch = this.char();\n if (ch === 60 /* `<` */ ||\n ch === 123 /* `{` */ ||\n (ch === 35 /* `#` */ &&\n (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||\n (ch === 125 /* `}` */ && nestingLevel > 0)) {\n return null;\n }\n else {\n this.bump();\n return fromCodePoint(ch);\n }\n };\n Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) {\n var openingBracePosition = this.clonePosition();\n this.bump(); // `{`\n this.bumpSpace();\n if (this.isEOF()) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n if (this.char() === 125 /* `}` */) {\n this.bump();\n return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n }\n // argument name\n var value = this.parseIdentifierIfPossible().value;\n if (!value) {\n return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n }\n this.bumpSpace();\n if (this.isEOF()) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n switch (this.char()) {\n // Simple argument: `{name}`\n case 125 /* `}` */: {\n this.bump(); // `}`\n return {\n val: {\n type: TYPE.argument,\n // value does not include the opening and closing braces.\n value: value,\n location: createLocation(openingBracePosition, this.clonePosition()),\n },\n err: null,\n };\n }\n // Argument with options: `{name, format, ...}`\n case 44 /* `,` */: {\n this.bump(); // `,`\n this.bumpSpace();\n if (this.isEOF()) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n }\n default:\n return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n }\n };\n /**\n * Advance the parser until the end of the identifier, if it is currently on\n * an identifier character. Return an empty string otherwise.\n */\n Parser.prototype.parseIdentifierIfPossible = function () {\n var startingPosition = this.clonePosition();\n var startOffset = this.offset();\n var value = matchIdentifierAtIndex(this.message, startOffset);\n var endOffset = startOffset + value.length;\n this.bumpTo(endOffset);\n var endPosition = this.clonePosition();\n var location = createLocation(startingPosition, endPosition);\n return { value: value, location: location };\n };\n Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) {\n var _a;\n // Parse this range:\n // {name, type, style}\n // ^---^\n var typeStartPosition = this.clonePosition();\n var argType = this.parseIdentifierIfPossible().value;\n var typeEndPosition = this.clonePosition();\n switch (argType) {\n case '':\n // Expecting a style string number, date, time, plural, selectordinal, or select.\n return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n case 'number':\n case 'date':\n case 'time': {\n // Parse this range:\n // {name, number, style}\n // ^-------^\n this.bumpSpace();\n var styleAndLocation = null;\n if (this.bumpIf(',')) {\n this.bumpSpace();\n var styleStartPosition = this.clonePosition();\n var result = this.parseSimpleArgStyleIfPossible();\n if (result.err) {\n return result;\n }\n var style = trimEnd(result.val);\n if (style.length === 0) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));\n }\n var styleLocation = createLocation(styleStartPosition, this.clonePosition());\n styleAndLocation = { style: style, styleLocation: styleLocation };\n }\n var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n if (argCloseResult.err) {\n return argCloseResult;\n }\n var location_1 = createLocation(openingBracePosition, this.clonePosition());\n // Extract style or skeleton\n if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) {\n // Skeleton starts with `::`.\n var skeleton = trimStart(styleAndLocation.style.slice(2));\n if (argType === 'number') {\n var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n if (result.err) {\n return result;\n }\n return {\n val: { type: TYPE.number, value: value, location: location_1, style: result.val },\n err: null,\n };\n }\n else {\n if (skeleton.length === 0) {\n return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1);\n }\n var style = {\n type: SKELETON_TYPE.dateTime,\n pattern: skeleton,\n location: styleAndLocation.styleLocation,\n parsedOptions: this.shouldParseSkeletons\n ? parseDateTimeSkeleton(skeleton)\n : {},\n };\n var type = argType === 'date' ? TYPE.date : TYPE.time;\n return {\n val: { type: type, value: value, location: location_1, style: style },\n err: null,\n };\n }\n }\n // Regular style or no style.\n return {\n val: {\n type: argType === 'number'\n ? TYPE.number\n : argType === 'date'\n ? TYPE.date\n : TYPE.time,\n value: value,\n location: location_1,\n style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null,\n },\n err: null,\n };\n }\n case 'plural':\n case 'selectordinal':\n case 'select': {\n // Parse this range:\n // {name, plural, options}\n // ^---------^\n var typeEndPosition_1 = this.clonePosition();\n this.bumpSpace();\n if (!this.bumpIf(',')) {\n return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1)));\n }\n this.bumpSpace();\n // Parse offset:\n // {name, plural, offset:1, options}\n // ^-----^\n //\n // or the first option:\n //\n // {name, plural, one {...} other {...}}\n // ^--^\n var identifierAndLocation = this.parseIdentifierIfPossible();\n var pluralOffset = 0;\n if (argType !== 'select' && identifierAndLocation.value === 'offset') {\n if (!this.bumpIf(':')) {\n return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));\n }\n this.bumpSpace();\n var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);\n if (result.err) {\n return result;\n }\n // Parse another identifier for option parsing\n this.bumpSpace();\n identifierAndLocation = this.parseIdentifierIfPossible();\n pluralOffset = result.val;\n }\n var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n if (optionsResult.err) {\n return optionsResult;\n }\n var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n if (argCloseResult.err) {\n return argCloseResult;\n }\n var location_2 = createLocation(openingBracePosition, this.clonePosition());\n if (argType === 'select') {\n return {\n val: {\n type: TYPE.select,\n value: value,\n options: fromEntries(optionsResult.val),\n location: location_2,\n },\n err: null,\n };\n }\n else {\n return {\n val: {\n type: TYPE.plural,\n value: value,\n options: fromEntries(optionsResult.val),\n offset: pluralOffset,\n pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',\n location: location_2,\n },\n err: null,\n };\n }\n }\n default:\n return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n }\n };\n Parser.prototype.tryParseArgumentClose = function (openingBracePosition) {\n // Parse: {value, number, ::currency/GBP }\n //\n if (this.isEOF() || this.char() !== 125 /* `}` */) {\n return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n }\n this.bump(); // `}`\n return { val: true, err: null };\n };\n /**\n * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n */\n Parser.prototype.parseSimpleArgStyleIfPossible = function () {\n var nestedBraces = 0;\n var startPosition = this.clonePosition();\n while (!this.isEOF()) {\n var ch = this.char();\n switch (ch) {\n case 39 /* `'` */: {\n // Treat apostrophe as quoting but include it in the style part.\n // Find the end of the quoted literal text.\n this.bump();\n var apostrophePosition = this.clonePosition();\n if (!this.bumpUntil(\"'\")) {\n return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));\n }\n this.bump();\n break;\n }\n case 123 /* `{` */: {\n nestedBraces += 1;\n this.bump();\n break;\n }\n case 125 /* `}` */: {\n if (nestedBraces > 0) {\n nestedBraces -= 1;\n }\n else {\n return {\n val: this.message.slice(startPosition.offset, this.offset()),\n err: null,\n };\n }\n break;\n }\n default:\n this.bump();\n break;\n }\n }\n return {\n val: this.message.slice(startPosition.offset, this.offset()),\n err: null,\n };\n };\n Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) {\n var tokens = [];\n try {\n tokens = parseNumberSkeletonFromString(skeleton);\n }\n catch (e) {\n return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);\n }\n return {\n val: {\n type: SKELETON_TYPE.number,\n tokens: tokens,\n location: location,\n parsedOptions: this.shouldParseSkeletons\n ? parseNumberSkeleton(tokens)\n : {},\n },\n err: null,\n };\n };\n /**\n * @param nesting_level The current nesting level of messages.\n * This can be positive when parsing message fragment in select or plural argument options.\n * @param parent_arg_type The parent argument's type.\n * @param parsed_first_identifier If provided, this is the first identifier-like selector of\n * the argument. It is a by-product of a previous parsing attempt.\n * @param expecting_close_tag If true, this message is directly or indirectly nested inside\n * between a pair of opening and closing tags. The nested message will not parse beyond\n * the closing tag boundary.\n */\n Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n var _a;\n var hasOtherClause = false;\n var options = [];\n var parsedSelectors = new Set();\n var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location;\n // Parse:\n // one {one apple}\n // ^--^\n while (true) {\n if (selector.length === 0) {\n var startPosition = this.clonePosition();\n if (parentArgType !== 'select' && this.bumpIf('=')) {\n // Try parse `={number}` selector\n var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);\n if (result.err) {\n return result;\n }\n selectorLocation = createLocation(startPosition, this.clonePosition());\n selector = this.message.slice(startPosition.offset, this.offset());\n }\n else {\n break;\n }\n }\n // Duplicate selector clauses\n if (parsedSelectors.has(selector)) {\n return this.error(parentArgType === 'select'\n ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR\n : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);\n }\n if (selector === 'other') {\n hasOtherClause = true;\n }\n // Parse:\n // one {one apple}\n // ^----------^\n this.bumpSpace();\n var openingBracePosition = this.clonePosition();\n if (!this.bumpIf('{')) {\n return this.error(parentArgType === 'select'\n ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\n : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));\n }\n var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n if (fragmentResult.err) {\n return fragmentResult;\n }\n var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n if (argCloseResult.err) {\n return argCloseResult;\n }\n options.push([\n selector,\n {\n value: fragmentResult.val,\n location: createLocation(openingBracePosition, this.clonePosition()),\n },\n ]);\n // Keep track of the existing selectors\n parsedSelectors.add(selector);\n // Prep next selector clause.\n this.bumpSpace();\n (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location);\n }\n if (options.length === 0) {\n return this.error(parentArgType === 'select'\n ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR\n : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));\n }\n if (this.requiresOtherClause && !hasOtherClause) {\n return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));\n }\n return { val: options, err: null };\n };\n Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) {\n var sign = 1;\n var startingPosition = this.clonePosition();\n if (this.bumpIf('+')) {\n }\n else if (this.bumpIf('-')) {\n sign = -1;\n }\n var hasDigits = false;\n var decimal = 0;\n while (!this.isEOF()) {\n var ch = this.char();\n if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {\n hasDigits = true;\n decimal = decimal * 10 + (ch - 48);\n this.bump();\n }\n else {\n break;\n }\n }\n var location = createLocation(startingPosition, this.clonePosition());\n if (!hasDigits) {\n return this.error(expectNumberError, location);\n }\n decimal *= sign;\n if (!isSafeInteger(decimal)) {\n return this.error(invalidNumberError, location);\n }\n return { val: decimal, err: null };\n };\n Parser.prototype.offset = function () {\n return this.position.offset;\n };\n Parser.prototype.isEOF = function () {\n return this.offset() === this.message.length;\n };\n Parser.prototype.clonePosition = function () {\n // This is much faster than `Object.assign` or spread.\n return {\n offset: this.position.offset,\n line: this.position.line,\n column: this.position.column,\n };\n };\n /**\n * Return the code point at the current position of the parser.\n * Throws if the index is out of bound.\n */\n Parser.prototype.char = function () {\n var offset = this.position.offset;\n if (offset >= this.message.length) {\n throw Error('out of bound');\n }\n var code = codePointAt(this.message, offset);\n if (code === undefined) {\n throw Error(\"Offset \".concat(offset, \" is at invalid UTF-16 code unit boundary\"));\n }\n return code;\n };\n Parser.prototype.error = function (kind, location) {\n return {\n val: null,\n err: {\n kind: kind,\n message: this.message,\n location: location,\n },\n };\n };\n /** Bump the parser to the next UTF-16 code unit. */\n Parser.prototype.bump = function () {\n if (this.isEOF()) {\n return;\n }\n var code = this.char();\n if (code === 10 /* '\\n' */) {\n this.position.line += 1;\n this.position.column = 1;\n this.position.offset += 1;\n }\n else {\n this.position.column += 1;\n // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.\n this.position.offset += code < 0x10000 ? 1 : 2;\n }\n };\n /**\n * If the substring starting at the current position of the parser has\n * the given prefix, then bump the parser to the character immediately\n * following the prefix and return true. Otherwise, don't bump the parser\n * and return false.\n */\n Parser.prototype.bumpIf = function (prefix) {\n if (startsWith(this.message, prefix, this.offset())) {\n for (var i = 0; i < prefix.length; i++) {\n this.bump();\n }\n return true;\n }\n return false;\n };\n /**\n * Bump the parser until the pattern character is found and return `true`.\n * Otherwise bump to the end of the file and return `false`.\n */\n Parser.prototype.bumpUntil = function (pattern) {\n var currentOffset = this.offset();\n var index = this.message.indexOf(pattern, currentOffset);\n if (index >= 0) {\n this.bumpTo(index);\n return true;\n }\n else {\n this.bumpTo(this.message.length);\n return false;\n }\n };\n /**\n * Bump the parser to the target offset.\n * If target offset is beyond the end of the input, bump the parser to the end of the input.\n */\n Parser.prototype.bumpTo = function (targetOffset) {\n if (this.offset() > targetOffset) {\n throw Error(\"targetOffset \".concat(targetOffset, \" must be greater than or equal to the current offset \").concat(this.offset()));\n }\n targetOffset = Math.min(targetOffset, this.message.length);\n while (true) {\n var offset = this.offset();\n if (offset === targetOffset) {\n break;\n }\n if (offset > targetOffset) {\n throw Error(\"targetOffset \".concat(targetOffset, \" is at invalid UTF-16 code unit boundary\"));\n }\n this.bump();\n if (this.isEOF()) {\n break;\n }\n }\n };\n /** advance the parser through all whitespace to the next non-whitespace code unit. */\n Parser.prototype.bumpSpace = function () {\n while (!this.isEOF() && _isWhiteSpace(this.char())) {\n this.bump();\n }\n };\n /**\n * Peek at the *next* Unicode codepoint in the input without advancing the parser.\n * If the input has been exhausted, then this returns null.\n */\n Parser.prototype.peek = function () {\n if (this.isEOF()) {\n return null;\n }\n var code = this.char();\n var offset = this.offset();\n var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1));\n return nextCode !== null && nextCode !== void 0 ? nextCode : null;\n };\n return Parser;\n}());\nexport { Parser };\n/**\n * This check if codepoint is alphabet (lower & uppercase)\n * @param codepoint\n * @returns\n */\nfunction _isAlpha(codepoint) {\n return ((codepoint >= 97 && codepoint <= 122) ||\n (codepoint >= 65 && codepoint <= 90));\n}\nfunction _isAlphaOrSlash(codepoint) {\n return _isAlpha(codepoint) || codepoint === 47; /* '/' */\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n return (c === 45 /* '-' */ ||\n c === 46 /* '.' */ ||\n (c >= 48 && c <= 57) /* 0..9 */ ||\n c === 95 /* '_' */ ||\n (c >= 97 && c <= 122) /** a..z */ ||\n (c >= 65 && c <= 90) /* A..Z */ ||\n c == 0xb7 ||\n (c >= 0xc0 && c <= 0xd6) ||\n (c >= 0xd8 && c <= 0xf6) ||\n (c >= 0xf8 && c <= 0x37d) ||\n (c >= 0x37f && c <= 0x1fff) ||\n (c >= 0x200c && c <= 0x200d) ||\n (c >= 0x203f && c <= 0x2040) ||\n (c >= 0x2070 && c <= 0x218f) ||\n (c >= 0x2c00 && c <= 0x2fef) ||\n (c >= 0x3001 && c <= 0xd7ff) ||\n (c >= 0xf900 && c <= 0xfdcf) ||\n (c >= 0xfdf0 && c <= 0xfffd) ||\n (c >= 0x10000 && c <= 0xeffff));\n}\n/**\n * Code point equivalent of regex `\\p{White_Space}`.\n * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isWhiteSpace(c) {\n return ((c >= 0x0009 && c <= 0x000d) ||\n c === 0x0020 ||\n c === 0x0085 ||\n (c >= 0x200e && c <= 0x200f) ||\n c === 0x2028 ||\n c === 0x2029);\n}\n/**\n * Code point equivalent of regex `\\p{Pattern_Syntax}`.\n * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isPatternSyntax(c) {\n return ((c >= 0x0021 && c <= 0x0023) ||\n c === 0x0024 ||\n (c >= 0x0025 && c <= 0x0027) ||\n c === 0x0028 ||\n c === 0x0029 ||\n c === 0x002a ||\n c === 0x002b ||\n c === 0x002c ||\n c === 0x002d ||\n (c >= 0x002e && c <= 0x002f) ||\n (c >= 0x003a && c <= 0x003b) ||\n (c >= 0x003c && c <= 0x003e) ||\n (c >= 0x003f && c <= 0x0040) ||\n c === 0x005b ||\n c === 0x005c ||\n c === 0x005d ||\n c === 0x005e ||\n c === 0x0060 ||\n c === 0x007b ||\n c === 0x007c ||\n c === 0x007d ||\n c === 0x007e ||\n c === 0x00a1 ||\n (c >= 0x00a2 && c <= 0x00a5) ||\n c === 0x00a6 ||\n c === 0x00a7 ||\n c === 0x00a9 ||\n c === 0x00ab ||\n c === 0x00ac ||\n c === 0x00ae ||\n c === 0x00b0 ||\n c === 0x00b1 ||\n c === 0x00b6 ||\n c === 0x00bb ||\n c === 0x00bf ||\n c === 0x00d7 ||\n c === 0x00f7 ||\n (c >= 0x2010 && c <= 0x2015) ||\n (c >= 0x2016 && c <= 0x2017) ||\n c === 0x2018 ||\n c === 0x2019 ||\n c === 0x201a ||\n (c >= 0x201b && c <= 0x201c) ||\n c === 0x201d ||\n c === 0x201e ||\n c === 0x201f ||\n (c >= 0x2020 && c <= 0x2027) ||\n (c >= 0x2030 && c <= 0x2038) ||\n c === 0x2039 ||\n c === 0x203a ||\n (c >= 0x203b && c <= 0x203e) ||\n (c >= 0x2041 && c <= 0x2043) ||\n c === 0x2044 ||\n c === 0x2045 ||\n c === 0x2046 ||\n (c >= 0x2047 && c <= 0x2051) ||\n c === 0x2052 ||\n c === 0x2053 ||\n (c >= 0x2055 && c <= 0x205e) ||\n (c >= 0x2190 && c <= 0x2194) ||\n (c >= 0x2195 && c <= 0x2199) ||\n (c >= 0x219a && c <= 0x219b) ||\n (c >= 0x219c && c <= 0x219f) ||\n c === 0x21a0 ||\n (c >= 0x21a1 && c <= 0x21a2) ||\n c === 0x21a3 ||\n (c >= 0x21a4 && c <= 0x21a5) ||\n c === 0x21a6 ||\n (c >= 0x21a7 && c <= 0x21ad) ||\n c === 0x21ae ||\n (c >= 0x21af && c <= 0x21cd) ||\n (c >= 0x21ce && c <= 0x21cf) ||\n (c >= 0x21d0 && c <= 0x21d1) ||\n c === 0x21d2 ||\n c === 0x21d3 ||\n c === 0x21d4 ||\n (c >= 0x21d5 && c <= 0x21f3) ||\n (c >= 0x21f4 && c <= 0x22ff) ||\n (c >= 0x2300 && c <= 0x2307) ||\n c === 0x2308 ||\n c === 0x2309 ||\n c === 0x230a ||\n c === 0x230b ||\n (c >= 0x230c && c <= 0x231f) ||\n (c >= 0x2320 && c <= 0x2321) ||\n (c >= 0x2322 && c <= 0x2328) ||\n c === 0x2329 ||\n c === 0x232a ||\n (c >= 0x232b && c <= 0x237b) ||\n c === 0x237c ||\n (c >= 0x237d && c <= 0x239a) ||\n (c >= 0x239b && c <= 0x23b3) ||\n (c >= 0x23b4 && c <= 0x23db) ||\n (c >= 0x23dc && c <= 0x23e1) ||\n (c >= 0x23e2 && c <= 0x2426) ||\n (c >= 0x2427 && c <= 0x243f) ||\n (c >= 0x2440 && c <= 0x244a) ||\n (c >= 0x244b && c <= 0x245f) ||\n (c >= 0x2500 && c <= 0x25b6) ||\n c === 0x25b7 ||\n (c >= 0x25b8 && c <= 0x25c0) ||\n c === 0x25c1 ||\n (c >= 0x25c2 && c <= 0x25f7) ||\n (c >= 0x25f8 && c <= 0x25ff) ||\n (c >= 0x2600 && c <= 0x266e) ||\n c === 0x266f ||\n (c >= 0x2670 && c <= 0x2767) ||\n c === 0x2768 ||\n c === 0x2769 ||\n c === 0x276a ||\n c === 0x276b ||\n c === 0x276c ||\n c === 0x276d ||\n c === 0x276e ||\n c === 0x276f ||\n c === 0x2770 ||\n c === 0x2771 ||\n c === 0x2772 ||\n c === 0x2773 ||\n c === 0x2774 ||\n c === 0x2775 ||\n (c >= 0x2794 && c <= 0x27bf) ||\n (c >= 0x27c0 && c <= 0x27c4) ||\n c === 0x27c5 ||\n c === 0x27c6 ||\n (c >= 0x27c7 && c <= 0x27e5) ||\n c === 0x27e6 ||\n c === 0x27e7 ||\n c === 0x27e8 ||\n c === 0x27e9 ||\n c === 0x27ea ||\n c === 0x27eb ||\n c === 0x27ec ||\n c === 0x27ed ||\n c === 0x27ee ||\n c === 0x27ef ||\n (c >= 0x27f0 && c <= 0x27ff) ||\n (c >= 0x2800 && c <= 0x28ff) ||\n (c >= 0x2900 && c <= 0x2982) ||\n c === 0x2983 ||\n c === 0x2984 ||\n c === 0x2985 ||\n c === 0x2986 ||\n c === 0x2987 ||\n c === 0x2988 ||\n c === 0x2989 ||\n c === 0x298a ||\n c === 0x298b ||\n c === 0x298c ||\n c === 0x298d ||\n c === 0x298e ||\n c === 0x298f ||\n c === 0x2990 ||\n c === 0x2991 ||\n c === 0x2992 ||\n c === 0x2993 ||\n c === 0x2994 ||\n c === 0x2995 ||\n c === 0x2996 ||\n c === 0x2997 ||\n c === 0x2998 ||\n (c >= 0x2999 && c <= 0x29d7) ||\n c === 0x29d8 ||\n c === 0x29d9 ||\n c === 0x29da ||\n c === 0x29db ||\n (c >= 0x29dc && c <= 0x29fb) ||\n c === 0x29fc ||\n c === 0x29fd ||\n (c >= 0x29fe && c <= 0x2aff) ||\n (c >= 0x2b00 && c <= 0x2b2f) ||\n (c >= 0x2b30 && c <= 0x2b44) ||\n (c >= 0x2b45 && c <= 0x2b46) ||\n (c >= 0x2b47 && c <= 0x2b4c) ||\n (c >= 0x2b4d && c <= 0x2b73) ||\n (c >= 0x2b74 && c <= 0x2b75) ||\n (c >= 0x2b76 && c <= 0x2b95) ||\n c === 0x2b96 ||\n (c >= 0x2b97 && c <= 0x2bff) ||\n (c >= 0x2e00 && c <= 0x2e01) ||\n c === 0x2e02 ||\n c === 0x2e03 ||\n c === 0x2e04 ||\n c === 0x2e05 ||\n (c >= 0x2e06 && c <= 0x2e08) ||\n c === 0x2e09 ||\n c === 0x2e0a ||\n c === 0x2e0b ||\n c === 0x2e0c ||\n c === 0x2e0d ||\n (c >= 0x2e0e && c <= 0x2e16) ||\n c === 0x2e17 ||\n (c >= 0x2e18 && c <= 0x2e19) ||\n c === 0x2e1a ||\n c === 0x2e1b ||\n c === 0x2e1c ||\n c === 0x2e1d ||\n (c >= 0x2e1e && c <= 0x2e1f) ||\n c === 0x2e20 ||\n c === 0x2e21 ||\n c === 0x2e22 ||\n c === 0x2e23 ||\n c === 0x2e24 ||\n c === 0x2e25 ||\n c === 0x2e26 ||\n c === 0x2e27 ||\n c === 0x2e28 ||\n c === 0x2e29 ||\n (c >= 0x2e2a && c <= 0x2e2e) ||\n c === 0x2e2f ||\n (c >= 0x2e30 && c <= 0x2e39) ||\n (c >= 0x2e3a && c <= 0x2e3b) ||\n (c >= 0x2e3c && c <= 0x2e3f) ||\n c === 0x2e40 ||\n c === 0x2e41 ||\n c === 0x2e42 ||\n (c >= 0x2e43 && c <= 0x2e4f) ||\n (c >= 0x2e50 && c <= 0x2e51) ||\n c === 0x2e52 ||\n (c >= 0x2e53 && c <= 0x2e7f) ||\n (c >= 0x3001 && c <= 0x3003) ||\n c === 0x3008 ||\n c === 0x3009 ||\n c === 0x300a ||\n c === 0x300b ||\n c === 0x300c ||\n c === 0x300d ||\n c === 0x300e ||\n c === 0x300f ||\n c === 0x3010 ||\n c === 0x3011 ||\n (c >= 0x3012 && c <= 0x3013) ||\n c === 0x3014 ||\n c === 0x3015 ||\n c === 0x3016 ||\n c === 0x3017 ||\n c === 0x3018 ||\n c === 0x3019 ||\n c === 0x301a ||\n c === 0x301b ||\n c === 0x301c ||\n c === 0x301d ||\n (c >= 0x301e && c <= 0x301f) ||\n c === 0x3020 ||\n c === 0x3030 ||\n c === 0xfd3e ||\n c === 0xfd3f ||\n (c >= 0xfe45 && c <= 0xfe46));\n}\n","import { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { Parser } from './parser';\nimport { isDateElement, isDateTimeSkeleton, isNumberElement, isNumberSkeleton, isPluralElement, isSelectElement, isTagElement, isTimeElement, } from './types';\nfunction pruneLocation(els) {\n els.forEach(function (el) {\n delete el.location;\n if (isSelectElement(el) || isPluralElement(el)) {\n for (var k in el.options) {\n delete el.options[k].location;\n pruneLocation(el.options[k].value);\n }\n }\n else if (isNumberElement(el) && isNumberSkeleton(el.style)) {\n delete el.style.location;\n }\n else if ((isDateElement(el) || isTimeElement(el)) &&\n isDateTimeSkeleton(el.style)) {\n delete el.style.location;\n }\n else if (isTagElement(el)) {\n pruneLocation(el.children);\n }\n });\n}\nexport function parse(message, opts) {\n if (opts === void 0) { opts = {}; }\n opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);\n var result = new Parser(message, opts).parse();\n if (result.err) {\n var error = SyntaxError(ErrorKind[result.err.kind]);\n // @ts-expect-error Assign to error object\n error.location = result.err.location;\n // @ts-expect-error Assign to error object\n error.originalMessage = result.err.message;\n throw error;\n }\n if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {\n pruneLocation(result.val);\n }\n return result.val;\n}\nexport * from './types';\n","import { __extends } from \"tslib\";\nexport var IntlErrorCode;\n(function (IntlErrorCode) {\n IntlErrorCode[\"FORMAT_ERROR\"] = \"FORMAT_ERROR\";\n IntlErrorCode[\"UNSUPPORTED_FORMATTER\"] = \"UNSUPPORTED_FORMATTER\";\n IntlErrorCode[\"INVALID_CONFIG\"] = \"INVALID_CONFIG\";\n IntlErrorCode[\"MISSING_DATA\"] = \"MISSING_DATA\";\n IntlErrorCode[\"MISSING_TRANSLATION\"] = \"MISSING_TRANSLATION\";\n})(IntlErrorCode || (IntlErrorCode = {}));\nvar IntlError = /** @class */ (function (_super) {\n __extends(IntlError, _super);\n function IntlError(code, message, exception) {\n var _this = this;\n var err = exception\n ? exception instanceof Error\n ? exception\n : new Error(String(exception))\n : undefined;\n _this = _super.call(this, \"[@formatjs/intl Error \".concat(code, \"] \").concat(message, \" \\n\").concat(err ? \"\\n\".concat(err.message, \"\\n\").concat(err.stack) : '')) || this;\n _this.code = code;\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (typeof Error.captureStackTrace === 'function') {\n // @ts-ignore just so we don't need to declare dep on @types/node\n Error.captureStackTrace(_this, IntlError);\n }\n return _this;\n }\n return IntlError;\n}(Error));\nexport { IntlError };\nvar UnsupportedFormatterError = /** @class */ (function (_super) {\n __extends(UnsupportedFormatterError, _super);\n function UnsupportedFormatterError(message, exception) {\n return _super.call(this, IntlErrorCode.UNSUPPORTED_FORMATTER, message, exception) || this;\n }\n return UnsupportedFormatterError;\n}(IntlError));\nexport { UnsupportedFormatterError };\nvar InvalidConfigError = /** @class */ (function (_super) {\n __extends(InvalidConfigError, _super);\n function InvalidConfigError(message, exception) {\n return _super.call(this, IntlErrorCode.INVALID_CONFIG, message, exception) || this;\n }\n return InvalidConfigError;\n}(IntlError));\nexport { InvalidConfigError };\nvar MissingDataError = /** @class */ (function (_super) {\n __extends(MissingDataError, _super);\n function MissingDataError(message, exception) {\n return _super.call(this, IntlErrorCode.MISSING_DATA, message, exception) || this;\n }\n return MissingDataError;\n}(IntlError));\nexport { MissingDataError };\nvar IntlFormatError = /** @class */ (function (_super) {\n __extends(IntlFormatError, _super);\n function IntlFormatError(message, locale, exception) {\n return _super.call(this, IntlErrorCode.FORMAT_ERROR, \"\".concat(message, \" \\nLocale: \").concat(locale, \"\\n\"), exception) || this;\n }\n return IntlFormatError;\n}(IntlError));\nexport { IntlFormatError };\nvar MessageFormatError = /** @class */ (function (_super) {\n __extends(MessageFormatError, _super);\n function MessageFormatError(message, locale, descriptor, exception) {\n var _this = _super.call(this, \"\".concat(message, \" \\nMessageID: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.id, \"\\nDefault Message: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.defaultMessage, \"\\nDescription: \").concat(descriptor === null || descriptor === void 0 ? void 0 : descriptor.description, \" \\n\"), locale, exception) || this;\n _this.descriptor = descriptor;\n return _this;\n }\n return MessageFormatError;\n}(IntlFormatError));\nexport { MessageFormatError };\nvar MissingTranslationError = /** @class */ (function (_super) {\n __extends(MissingTranslationError, _super);\n function MissingTranslationError(descriptor, locale) {\n var _this = _super.call(this, IntlErrorCode.MISSING_TRANSLATION, \"Missing message: \\\"\".concat(descriptor.id, \"\\\" for locale \\\"\").concat(locale, \"\\\", using \").concat(descriptor.defaultMessage ? 'default message' : 'id', \" as fallback.\")) || this;\n _this.descriptor = descriptor;\n return _this;\n }\n return MissingTranslationError;\n}(IntlError));\nexport { MissingTranslationError };\n","import { __assign, __spreadArray } from \"tslib\";\nimport { IntlMessageFormat } from 'intl-messageformat';\nimport memoize, { strategies } from '@formatjs/fast-memoize';\nimport { UnsupportedFormatterError } from './error';\nexport function filterProps(props, allowlist, defaults) {\n if (defaults === void 0) { defaults = {}; }\n return allowlist.reduce(function (filtered, name) {\n if (name in props) {\n filtered[name] = props[name];\n }\n else if (name in defaults) {\n filtered[name] = defaults[name];\n }\n return filtered;\n }, {});\n}\nvar defaultErrorHandler = function (error) {\n // @ts-ignore just so we don't need to declare dep on @types/node\n if (process.env.NODE_ENV !== 'production') {\n console.error(error);\n }\n};\nexport var DEFAULT_INTL_CONFIG = {\n formats: {},\n messages: {},\n timeZone: undefined,\n defaultLocale: 'en',\n defaultFormats: {},\n fallbackOnEmptyString: true,\n onError: defaultErrorHandler,\n};\nexport function createIntlCache() {\n return {\n dateTime: {},\n number: {},\n message: {},\n relativeTime: {},\n pluralRules: {},\n list: {},\n displayNames: {},\n };\n}\nfunction createFastMemoizeCache(store) {\n return {\n create: function () {\n return {\n get: function (key) {\n return store[key];\n },\n set: function (key, value) {\n store[key] = value;\n },\n };\n },\n };\n}\n/**\n * Create intl formatters and populate cache\n * @param cache explicit cache to prevent leaking memory\n */\nexport function createFormatters(cache) {\n if (cache === void 0) { cache = createIntlCache(); }\n var RelativeTimeFormat = Intl.RelativeTimeFormat;\n var ListFormat = Intl.ListFormat;\n var DisplayNames = Intl.DisplayNames;\n var getDateTimeFormat = memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.dateTime),\n strategy: strategies.variadic,\n });\n var getNumberFormat = memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.number),\n strategy: strategies.variadic,\n });\n var getPluralRules = memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.pluralRules),\n strategy: strategies.variadic,\n });\n return {\n getDateTimeFormat: getDateTimeFormat,\n getNumberFormat: getNumberFormat,\n getMessageFormat: memoize(function (message, locales, overrideFormats, opts) {\n return new IntlMessageFormat(message, locales, overrideFormats, __assign({ formatters: {\n getNumberFormat: getNumberFormat,\n getDateTimeFormat: getDateTimeFormat,\n getPluralRules: getPluralRules,\n } }, (opts || {})));\n }, {\n cache: createFastMemoizeCache(cache.message),\n strategy: strategies.variadic,\n }),\n getRelativeTimeFormat: memoize(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new (RelativeTimeFormat.bind.apply(RelativeTimeFormat, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.relativeTime),\n strategy: strategies.variadic,\n }),\n getPluralRules: getPluralRules,\n getListFormat: memoize(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new (ListFormat.bind.apply(ListFormat, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.list),\n strategy: strategies.variadic,\n }),\n getDisplayNames: memoize(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new (DisplayNames.bind.apply(DisplayNames, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.displayNames),\n strategy: strategies.variadic,\n }),\n };\n}\nexport function getNamedFormat(formats, type, name, onError) {\n var formatType = formats && formats[type];\n var format;\n if (formatType) {\n format = formatType[name];\n }\n if (format) {\n return format;\n }\n onError(new UnsupportedFormatterError(\"No \".concat(type, \" format named: \").concat(name)));\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HandshakeProtocol, HandshakeRequestMessage, HandshakeResponseMessage } from \"./HandshakeProtocol\";\r\nimport { IConnection } from \"./IConnection\";\r\nimport { CancelInvocationMessage, CompletionMessage, IHubProtocol, InvocationMessage, MessageType, StreamInvocationMessage, StreamItemMessage } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { IRetryPolicy } from \"./IRetryPolicy\";\r\nimport { IStreamResult } from \"./Stream\";\r\nimport { Subject } from \"./Subject\";\r\nimport { Arg, getErrorString, Platform } from \"./Utils\";\r\n\r\nconst DEFAULT_TIMEOUT_IN_MS: number = 30 * 1000;\r\nconst DEFAULT_PING_INTERVAL_IN_MS: number = 15 * 1000;\r\n\r\n/** Describes the current state of the {@link HubConnection} to the server. */\r\nexport enum HubConnectionState {\r\n /** The hub connection is disconnected. */\r\n Disconnected = \"Disconnected\",\r\n /** The hub connection is connecting. */\r\n Connecting = \"Connecting\",\r\n /** The hub connection is connected. */\r\n Connected = \"Connected\",\r\n /** The hub connection is disconnecting. */\r\n Disconnecting = \"Disconnecting\",\r\n /** The hub connection is reconnecting. */\r\n Reconnecting = \"Reconnecting\",\r\n}\r\n\r\n/** Represents a connection to a SignalR Hub. */\r\nexport class HubConnection {\r\n private readonly _cachedPingMessage: string | ArrayBuffer;\r\n // Needs to not start with _ for tests\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private readonly connection: IConnection;\r\n private readonly _logger: ILogger;\r\n private readonly _reconnectPolicy?: IRetryPolicy;\r\n private _protocol: IHubProtocol;\r\n private _handshakeProtocol: HandshakeProtocol;\r\n private _callbacks: { [invocationId: string]: (invocationEvent: StreamItemMessage | CompletionMessage | null, error?: Error) => void };\r\n private _methods: { [name: string]: ((...args: any[]) => void)[] };\r\n private _invocationId: number;\r\n\r\n private _closedCallbacks: ((error?: Error) => void)[];\r\n private _reconnectingCallbacks: ((error?: Error) => void)[];\r\n private _reconnectedCallbacks: ((connectionId?: string) => void)[];\r\n\r\n private _receivedHandshakeResponse: boolean;\r\n private _handshakeResolver!: (value?: PromiseLike<{}>) => void;\r\n private _handshakeRejecter!: (reason?: any) => void;\r\n private _stopDuringStartError?: Error;\r\n\r\n private _connectionState: HubConnectionState;\r\n // connectionStarted is tracked independently from connectionState, so we can check if the\r\n // connection ever did successfully transition from connecting to connected before disconnecting.\r\n private _connectionStarted: boolean;\r\n private _startPromise?: Promise;\r\n private _stopPromise?: Promise;\r\n private _nextKeepAlive: number = 0;\r\n\r\n // The type of these a) doesn't matter and b) varies when building in browser and node contexts\r\n // Since we're building the WebPack bundle directly from the TypeScript, this matters (previously\r\n // we built the bundle from the compiled JavaScript).\r\n private _reconnectDelayHandle?: any;\r\n private _timeoutHandle?: any;\r\n private _pingServerHandle?: any;\r\n\r\n private _freezeEventListener = () =>\r\n {\r\n this._logger.log(LogLevel.Warning, \"The page is being frozen, this will likely lead to the connection being closed and messages being lost. For more information see the docs at https://docs.microsoft.com/aspnet/core/signalr/javascript-client#bsleep\");\r\n };\r\n\r\n /** The server timeout in milliseconds.\r\n *\r\n * If this timeout elapses without receiving any messages from the server, the connection will be terminated with an error.\r\n * The default timeout value is 30,000 milliseconds (30 seconds).\r\n */\r\n public serverTimeoutInMilliseconds: number;\r\n\r\n /** Default interval at which to ping the server.\r\n *\r\n * The default value is 15,000 milliseconds (15 seconds).\r\n * Allows the server to detect hard disconnects (like when a client unplugs their computer).\r\n * The ping will happen at most as often as the server pings.\r\n * If the server pings every 5 seconds, a value lower than 5 will ping every 5 seconds.\r\n */\r\n public keepAliveIntervalInMilliseconds: number;\r\n\r\n /** @internal */\r\n // Using a public static factory method means we can have a private constructor and an _internal_\r\n // create method that can be used by HubConnectionBuilder. An \"internal\" constructor would just\r\n // be stripped away and the '.d.ts' file would have no constructor, which is interpreted as a\r\n // public parameter-less constructor.\r\n public static create(connection: IConnection, logger: ILogger, protocol: IHubProtocol, reconnectPolicy?: IRetryPolicy): HubConnection {\r\n return new HubConnection(connection, logger, protocol, reconnectPolicy);\r\n }\r\n\r\n private constructor(connection: IConnection, logger: ILogger, protocol: IHubProtocol, reconnectPolicy?: IRetryPolicy) {\r\n Arg.isRequired(connection, \"connection\");\r\n Arg.isRequired(logger, \"logger\");\r\n Arg.isRequired(protocol, \"protocol\");\r\n\r\n this.serverTimeoutInMilliseconds = DEFAULT_TIMEOUT_IN_MS;\r\n this.keepAliveIntervalInMilliseconds = DEFAULT_PING_INTERVAL_IN_MS;\r\n\r\n this._logger = logger;\r\n this._protocol = protocol;\r\n this.connection = connection;\r\n this._reconnectPolicy = reconnectPolicy;\r\n this._handshakeProtocol = new HandshakeProtocol();\r\n\r\n this.connection.onreceive = (data: any) => this._processIncomingData(data);\r\n this.connection.onclose = (error?: Error) => this._connectionClosed(error);\r\n\r\n this._callbacks = {};\r\n this._methods = {};\r\n this._closedCallbacks = [];\r\n this._reconnectingCallbacks = [];\r\n this._reconnectedCallbacks = [];\r\n this._invocationId = 0;\r\n this._receivedHandshakeResponse = false;\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n\r\n this._cachedPingMessage = this._protocol.writeMessage({ type: MessageType.Ping });\r\n }\r\n\r\n /** Indicates the state of the {@link HubConnection} to the server. */\r\n get state(): HubConnectionState {\r\n return this._connectionState;\r\n }\r\n\r\n /** Represents the connection id of the {@link HubConnection} on the server. The connection id will be null when the connection is either\r\n * in the disconnected state or if the negotiation step was skipped.\r\n */\r\n get connectionId(): string | null {\r\n return this.connection ? (this.connection.connectionId || null) : null;\r\n }\r\n\r\n /** Indicates the url of the {@link HubConnection} to the server. */\r\n get baseUrl(): string {\r\n return this.connection.baseUrl || \"\";\r\n }\r\n\r\n /**\r\n * Sets a new url for the HubConnection. Note that the url can only be changed when the connection is in either the Disconnected or\r\n * Reconnecting states.\r\n * @param {string} url The url to connect to.\r\n */\r\n set baseUrl(url: string) {\r\n if (this._connectionState !== HubConnectionState.Disconnected && this._connectionState !== HubConnectionState.Reconnecting) {\r\n throw new Error(\"The HubConnection must be in the Disconnected or Reconnecting state to change the url.\");\r\n }\r\n\r\n if (!url) {\r\n throw new Error(\"The HubConnection url must be a valid url.\");\r\n }\r\n\r\n this.connection.baseUrl = url;\r\n }\r\n\r\n /** Starts the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully established, or rejects with an error.\r\n */\r\n public start(): Promise {\r\n this._startPromise = this._startWithStateTransitions();\r\n return this._startPromise;\r\n }\r\n\r\n private async _startWithStateTransitions(): Promise {\r\n if (this._connectionState !== HubConnectionState.Disconnected) {\r\n return Promise.reject(new Error(\"Cannot start a HubConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n\r\n this._connectionState = HubConnectionState.Connecting;\r\n this._logger.log(LogLevel.Debug, \"Starting HubConnection.\");\r\n\r\n try {\r\n await this._startInternal();\r\n\r\n if (Platform.isBrowser) {\r\n // Log when the browser freezes the tab so users know why their connection unexpectedly stopped working\r\n window.document.addEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n\r\n this._connectionState = HubConnectionState.Connected;\r\n this._connectionStarted = true;\r\n this._logger.log(LogLevel.Debug, \"HubConnection connected successfully.\");\r\n } catch (e) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._logger.log(LogLevel.Debug, `HubConnection failed to start successfully because of error '${e}'.`);\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n private async _startInternal() {\r\n this._stopDuringStartError = undefined;\r\n this._receivedHandshakeResponse = false;\r\n // Set up the promise before any connection is (re)started otherwise it could race with received messages\r\n const handshakePromise = new Promise((resolve, reject) => {\r\n this._handshakeResolver = resolve;\r\n this._handshakeRejecter = reject;\r\n });\r\n\r\n await this.connection.start(this._protocol.transferFormat);\r\n\r\n try {\r\n const handshakeRequest: HandshakeRequestMessage = {\r\n protocol: this._protocol.name,\r\n version: this._protocol.version,\r\n };\r\n\r\n this._logger.log(LogLevel.Debug, \"Sending handshake request.\");\r\n\r\n await this._sendMessage(this._handshakeProtocol.writeHandshakeRequest(handshakeRequest));\r\n\r\n this._logger.log(LogLevel.Information, `Using HubProtocol '${this._protocol.name}'.`);\r\n\r\n // defensively cleanup timeout in case we receive a message from the server before we finish start\r\n this._cleanupTimeout();\r\n this._resetTimeoutPeriod();\r\n this._resetKeepAliveInterval();\r\n\r\n await handshakePromise;\r\n\r\n // It's important to check the stopDuringStartError instead of just relying on the handshakePromise\r\n // being rejected on close, because this continuation can run after both the handshake completed successfully\r\n // and the connection was closed.\r\n if (this._stopDuringStartError) {\r\n // It's important to throw instead of returning a rejected promise, because we don't want to allow any state\r\n // transitions to occur between now and the calling code observing the exceptions. Returning a rejected promise\r\n // will cause the calling continuation to get scheduled to run later.\r\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\r\n throw this._stopDuringStartError;\r\n }\r\n } catch (e) {\r\n this._logger.log(LogLevel.Debug, `Hub handshake failed with error '${e}' during start(). Stopping HubConnection.`);\r\n\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n\r\n // HttpConnection.stop() should not complete until after the onclose callback is invoked.\r\n // This will transition the HubConnection to the disconnected state before HttpConnection.stop() completes.\r\n await this.connection.stop(e);\r\n throw e;\r\n }\r\n }\r\n\r\n /** Stops the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully terminated, or rejects with an error.\r\n */\r\n public async stop(): Promise {\r\n // Capture the start promise before the connection might be restarted in an onclose callback.\r\n const startPromise = this._startPromise;\r\n\r\n this._stopPromise = this._stopInternal();\r\n await this._stopPromise;\r\n\r\n try {\r\n // Awaiting undefined continues immediately\r\n await startPromise;\r\n } catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n }\r\n\r\n private _stopInternal(error?: Error): Promise {\r\n if (this._connectionState === HubConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HubConnection.stop(${error}) ignored because it is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise!;\r\n }\r\n\r\n this._connectionState = HubConnectionState.Disconnecting;\r\n\r\n this._logger.log(LogLevel.Debug, \"Stopping HubConnection.\");\r\n\r\n if (this._reconnectDelayHandle) {\r\n // We're in a reconnect delay which means the underlying connection is currently already stopped.\r\n // Just clear the handle to stop the reconnect loop (which no one is waiting on thankfully) and\r\n // fire the onclose callbacks.\r\n this._logger.log(LogLevel.Debug, \"Connection stopped during reconnect delay. Done reconnecting.\");\r\n\r\n clearTimeout(this._reconnectDelayHandle);\r\n this._reconnectDelayHandle = undefined;\r\n\r\n this._completeClose();\r\n return Promise.resolve();\r\n }\r\n\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n this._stopDuringStartError = error || new Error(\"The connection was stopped before the hub handshake could complete.\");\r\n\r\n // HttpConnection.stop() should not complete until after either HttpConnection.start() fails\r\n // or the onclose callback is invoked. The onclose callback will transition the HubConnection\r\n // to the disconnected state if need be before HttpConnection.stop() completes.\r\n return this.connection.stop(error);\r\n }\r\n\r\n /** Invokes a streaming hub method on the server using the specified name and arguments.\r\n *\r\n * @typeparam T The type of the items returned by the server.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {IStreamResult} An object that yields results from the server as they are received.\r\n */\r\n public stream(methodName: string, ...args: any[]): IStreamResult {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createStreamInvocation(methodName, args, streamIds);\r\n\r\n // eslint-disable-next-line prefer-const\r\n let promiseQueue: Promise;\r\n\r\n const subject = new Subject();\r\n subject.cancelCallback = () => {\r\n const cancelInvocation: CancelInvocationMessage = this._createCancelInvocation(invocationDescriptor.invocationId);\r\n\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n\r\n return promiseQueue.then(() => {\r\n return this._sendWithProtocol(cancelInvocation);\r\n });\r\n };\r\n\r\n this._callbacks[invocationDescriptor.invocationId] = (invocationEvent: CompletionMessage | StreamItemMessage | null, error?: Error) => {\r\n if (error) {\r\n subject.error(error);\r\n return;\r\n } else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n subject.error(new Error(invocationEvent.error));\r\n } else {\r\n subject.complete();\r\n }\r\n } else {\r\n subject.next((invocationEvent.item) as T);\r\n }\r\n }\r\n };\r\n\r\n promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n subject.error(e);\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n });\r\n\r\n this._launchStreams(streams, promiseQueue);\r\n\r\n return subject;\r\n }\r\n\r\n private _sendMessage(message: any) {\r\n this._resetKeepAliveInterval();\r\n return this.connection.send(message);\r\n }\r\n\r\n /**\r\n * Sends a js object to the server.\r\n * @param message The js object to serialize and send.\r\n */\r\n private _sendWithProtocol(message: any) {\r\n return this._sendMessage(this._protocol.writeMessage(message));\r\n }\r\n\r\n /** Invokes a hub method on the server using the specified name and arguments. Does not wait for a response from the receiver.\r\n *\r\n * The Promise returned by this method resolves when the client has sent the invocation to the server. The server may still\r\n * be processing the invocation.\r\n *\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves when the invocation has been successfully sent, or rejects with an error.\r\n */\r\n public send(methodName: string, ...args: any[]): Promise {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const sendPromise = this._sendWithProtocol(this._createInvocation(methodName, args, true, streamIds));\r\n\r\n this._launchStreams(streams, sendPromise);\r\n\r\n return sendPromise;\r\n }\r\n\r\n /** Invokes a hub method on the server using the specified name and arguments.\r\n *\r\n * The Promise returned by this method resolves when the server indicates it has finished invoking the method. When the promise\r\n * resolves, the server has finished invoking the method. If the server method returns a result, it is produced as the result of\r\n * resolving the Promise.\r\n *\r\n * @typeparam T The expected return type.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves with the result of the server method (if any), or rejects with an error.\r\n */\r\n public invoke(methodName: string, ...args: any[]): Promise {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createInvocation(methodName, args, false, streamIds);\r\n\r\n const p = new Promise((resolve, reject) => {\r\n // invocationId will always have a value for a non-blocking invocation\r\n this._callbacks[invocationDescriptor.invocationId!] = (invocationEvent: StreamItemMessage | CompletionMessage | null, error?: Error) => {\r\n if (error) {\r\n reject(error);\r\n return;\r\n } else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n reject(new Error(invocationEvent.error));\r\n } else {\r\n resolve(invocationEvent.result);\r\n }\r\n } else {\r\n reject(new Error(`Unexpected message type: ${invocationEvent.type}`));\r\n }\r\n }\r\n };\r\n\r\n const promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n reject(e);\r\n // invocationId will always have a value for a non-blocking invocation\r\n delete this._callbacks[invocationDescriptor.invocationId!];\r\n });\r\n\r\n this._launchStreams(streams, promiseQueue);\r\n });\r\n\r\n return p;\r\n }\r\n\r\n /** Registers a handler that will be invoked when the hub method with the specified method name is invoked.\r\n *\r\n * @param {string} methodName The name of the hub method to define.\r\n * @param {Function} newMethod The handler that will be raised when the hub method is invoked.\r\n */\r\n public on(methodName: string, newMethod: (...args: any[]) => void): void {\r\n if (!methodName || !newMethod) {\r\n return;\r\n }\r\n\r\n methodName = methodName.toLowerCase();\r\n if (!this._methods[methodName]) {\r\n this._methods[methodName] = [];\r\n }\r\n\r\n // Preventing adding the same handler multiple times.\r\n if (this._methods[methodName].indexOf(newMethod) !== -1) {\r\n return;\r\n }\r\n\r\n this._methods[methodName].push(newMethod);\r\n }\r\n\r\n /** Removes all handlers for the specified hub method.\r\n *\r\n * @param {string} methodName The name of the method to remove handlers for.\r\n */\r\n public off(methodName: string): void;\r\n\r\n /** Removes the specified handler for the specified hub method.\r\n *\r\n * You must pass the exact same Function instance as was previously passed to {@link @microsoft/signalr.HubConnection.on}. Passing a different instance (even if the function\r\n * body is the same) will not remove the handler.\r\n *\r\n * @param {string} methodName The name of the method to remove handlers for.\r\n * @param {Function} method The handler to remove. This must be the same Function instance as the one passed to {@link @microsoft/signalr.HubConnection.on}.\r\n */\r\n public off(methodName: string, method: (...args: any[]) => void): void;\r\n public off(methodName: string, method?: (...args: any[]) => void): void {\r\n if (!methodName) {\r\n return;\r\n }\r\n\r\n methodName = methodName.toLowerCase();\r\n const handlers = this._methods[methodName];\r\n if (!handlers) {\r\n return;\r\n }\r\n if (method) {\r\n const removeIdx = handlers.indexOf(method);\r\n if (removeIdx !== -1) {\r\n handlers.splice(removeIdx, 1);\r\n if (handlers.length === 0) {\r\n delete this._methods[methodName];\r\n }\r\n }\r\n } else {\r\n delete this._methods[methodName];\r\n }\r\n\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection is closed.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection is closed. Optionally receives a single argument containing the error that caused the connection to close (if any).\r\n */\r\n public onclose(callback: (error?: Error) => void): void {\r\n if (callback) {\r\n this._closedCallbacks.push(callback);\r\n }\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection starts reconnecting.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection starts reconnecting. Optionally receives a single argument containing the error that caused the connection to start reconnecting (if any).\r\n */\r\n public onreconnecting(callback: (error?: Error) => void): void {\r\n if (callback) {\r\n this._reconnectingCallbacks.push(callback);\r\n }\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection successfully reconnects.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection successfully reconnects.\r\n */\r\n public onreconnected(callback: (connectionId?: string) => void): void {\r\n if (callback) {\r\n this._reconnectedCallbacks.push(callback);\r\n }\r\n }\r\n\r\n private _processIncomingData(data: any) {\r\n this._cleanupTimeout();\r\n\r\n if (!this._receivedHandshakeResponse) {\r\n data = this._processHandshakeResponse(data);\r\n this._receivedHandshakeResponse = true;\r\n }\r\n\r\n // Data may have all been read when processing handshake response\r\n if (data) {\r\n // Parse the messages\r\n const messages = this._protocol.parseMessages(data, this._logger);\r\n\r\n for (const message of messages) {\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n this._invokeClientMethod(message);\r\n break;\r\n case MessageType.StreamItem:\r\n case MessageType.Completion: {\r\n const callback = this._callbacks[message.invocationId];\r\n if (callback) {\r\n if (message.type === MessageType.Completion) {\r\n delete this._callbacks[message.invocationId];\r\n }\r\n try {\r\n callback(message);\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream callback threw error: ${getErrorString(e)}`);\r\n }\r\n }\r\n break;\r\n }\r\n case MessageType.Ping:\r\n // Don't care about pings\r\n break;\r\n case MessageType.Close: {\r\n this._logger.log(LogLevel.Information, \"Close message received from server.\");\r\n\r\n const error = message.error ? new Error(\"Server returned an error on close: \" + message.error) : undefined;\r\n\r\n if (message.allowReconnect === true) {\r\n // It feels wrong not to await connection.stop() here, but processIncomingData is called as part of an onreceive callback which is not async,\r\n // this is already the behavior for serverTimeout(), and HttpConnection.Stop() should catch and log all possible exceptions.\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(error);\r\n } else {\r\n // We cannot await stopInternal() here, but subsequent calls to stop() will await this if stopInternal() is still ongoing.\r\n this._stopPromise = this._stopInternal(error);\r\n }\r\n\r\n break;\r\n }\r\n default:\r\n this._logger.log(LogLevel.Warning, `Invalid message type: ${message.type}.`);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this._resetTimeoutPeriod();\r\n }\r\n\r\n private _processHandshakeResponse(data: any): any {\r\n let responseMessage: HandshakeResponseMessage;\r\n let remainingData: any;\r\n\r\n try {\r\n [remainingData, responseMessage] = this._handshakeProtocol.parseHandshakeResponse(data);\r\n } catch (e) {\r\n const message = \"Error parsing handshake response: \" + e;\r\n this._logger.log(LogLevel.Error, message);\r\n\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n }\r\n if (responseMessage.error) {\r\n const message = \"Server returned handshake error: \" + responseMessage.error;\r\n this._logger.log(LogLevel.Error, message);\r\n\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n } else {\r\n this._logger.log(LogLevel.Debug, \"Server handshake complete.\");\r\n }\r\n\r\n this._handshakeResolver();\r\n return remainingData;\r\n }\r\n\r\n private _resetKeepAliveInterval() {\r\n if (this.connection.features.inherentKeepAlive) {\r\n return;\r\n }\r\n\r\n // Set the time we want the next keep alive to be sent\r\n // Timer will be setup on next message receive\r\n this._nextKeepAlive = new Date().getTime() + this.keepAliveIntervalInMilliseconds;\r\n\r\n this._cleanupPingTimer();\r\n }\r\n\r\n private _resetTimeoutPeriod() {\r\n if (!this.connection.features || !this.connection.features.inherentKeepAlive) {\r\n // Set the timeout timer\r\n this._timeoutHandle = setTimeout(() => this.serverTimeout(), this.serverTimeoutInMilliseconds);\r\n\r\n // Set keepAlive timer if there isn't one\r\n if (this._pingServerHandle === undefined)\r\n {\r\n let nextPing = this._nextKeepAlive - new Date().getTime();\r\n if (nextPing < 0) {\r\n nextPing = 0;\r\n }\r\n\r\n // The timer needs to be set from a networking callback to avoid Chrome timer throttling from causing timers to run once a minute\r\n this._pingServerHandle = setTimeout(async () => {\r\n if (this._connectionState === HubConnectionState.Connected) {\r\n try {\r\n await this._sendMessage(this._cachedPingMessage);\r\n } catch {\r\n // We don't care about the error. It should be seen elsewhere in the client.\r\n // The connection is probably in a bad or closed state now, cleanup the timer so it stops triggering\r\n this._cleanupPingTimer();\r\n }\r\n }\r\n }, nextPing);\r\n }\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private serverTimeout() {\r\n // The server hasn't talked to us in a while. It doesn't like us anymore ... :(\r\n // Terminate the connection, but we don't need to wait on the promise. This could trigger reconnecting.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(new Error(\"Server timeout elapsed without receiving a message from the server.\"));\r\n }\r\n\r\n private _invokeClientMethod(invocationMessage: InvocationMessage) {\r\n const methods = this._methods[invocationMessage.target.toLowerCase()];\r\n if (methods) {\r\n try {\r\n methods.forEach((m) => m.apply(this, invocationMessage.arguments));\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `A callback for the method ${invocationMessage.target.toLowerCase()} threw error '${e}'.`);\r\n }\r\n\r\n if (invocationMessage.invocationId) {\r\n // This is not supported in v1. So we return an error to avoid blocking the server waiting for the response.\r\n const message = \"Server requested a response, which is not supported in this version of the client.\";\r\n this._logger.log(LogLevel.Error, message);\r\n\r\n // We don't want to wait on the stop itself.\r\n this._stopPromise = this._stopInternal(new Error(message));\r\n }\r\n } else {\r\n this._logger.log(LogLevel.Warning, `No client method with the name '${invocationMessage.target}' found.`);\r\n }\r\n }\r\n\r\n private _connectionClosed(error?: Error) {\r\n this._logger.log(LogLevel.Debug, `HubConnection.connectionClosed(${error}) called while in state ${this._connectionState}.`);\r\n\r\n // Triggering this.handshakeRejecter is insufficient because it could already be resolved without the continuation having run yet.\r\n this._stopDuringStartError = this._stopDuringStartError || error || new Error(\"The underlying connection was closed before the hub handshake could complete.\");\r\n\r\n // If the handshake is in progress, start will be waiting for the handshake promise, so we complete it.\r\n // If it has already completed, this should just noop.\r\n if (this._handshakeResolver) {\r\n this._handshakeResolver();\r\n }\r\n\r\n this._cancelCallbacksWithError(error || new Error(\"Invocation canceled due to the underlying connection being closed.\"));\r\n\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._completeClose(error);\r\n } else if (this._connectionState === HubConnectionState.Connected && this._reconnectPolicy) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._reconnect(error);\r\n } else if (this._connectionState === HubConnectionState.Connected) {\r\n this._completeClose(error);\r\n }\r\n\r\n // If none of the above if conditions were true were called the HubConnection must be in either:\r\n // 1. The Connecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail it.\r\n // 2. The Reconnecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail the current reconnect attempt\r\n // and potentially continue the reconnect() loop.\r\n // 3. The Disconnected state in which case we're already done.\r\n }\r\n\r\n private _completeClose(error?: Error) {\r\n if (this._connectionStarted) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n\r\n if (Platform.isBrowser) {\r\n window.document.removeEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n\r\n try {\r\n this._closedCallbacks.forEach((c) => c.apply(this, [error]));\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `An onclose callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n\r\n private async _reconnect(error?: Error) {\r\n const reconnectStartTime = Date.now();\r\n let previousReconnectAttempts = 0;\r\n let retryError = error !== undefined ? error : new Error(\"Attempting to reconnect due to a unknown error.\");\r\n\r\n let nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts++, 0, retryError);\r\n\r\n if (nextRetryDelay === null) {\r\n this._logger.log(LogLevel.Debug, \"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt.\");\r\n this._completeClose(error);\r\n return;\r\n }\r\n\r\n this._connectionState = HubConnectionState.Reconnecting;\r\n\r\n if (error) {\r\n this._logger.log(LogLevel.Information, `Connection reconnecting because of error '${error}'.`);\r\n } else {\r\n this._logger.log(LogLevel.Information, \"Connection reconnecting.\");\r\n }\r\n\r\n if (this._reconnectingCallbacks.length !== 0) {\r\n try {\r\n this._reconnectingCallbacks.forEach((c) => c.apply(this, [error]));\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnecting callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n\r\n // Exit early if an onreconnecting callback called connection.stop().\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.\");\r\n return;\r\n }\r\n }\r\n\r\n while (nextRetryDelay !== null) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt number ${previousReconnectAttempts} will start in ${nextRetryDelay} ms.`);\r\n\r\n await new Promise((resolve) => {\r\n this._reconnectDelayHandle = setTimeout(resolve, nextRetryDelay!);\r\n });\r\n this._reconnectDelayHandle = undefined;\r\n\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state during reconnect delay. Done reconnecting.\");\r\n return;\r\n }\r\n\r\n try {\r\n await this._startInternal();\r\n\r\n this._connectionState = HubConnectionState.Connected;\r\n this._logger.log(LogLevel.Information, \"HubConnection reconnected successfully.\");\r\n\r\n if (this._reconnectedCallbacks.length !== 0) {\r\n try {\r\n this._reconnectedCallbacks.forEach((c) => c.apply(this, [this.connection.connectionId]));\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${e}'.`);\r\n }\r\n }\r\n\r\n return;\r\n } catch (e) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt failed because of error '${e}'.`);\r\n\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, `Connection moved to the '${this._connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`);\r\n // The TypeScript compiler thinks that connectionState must be Connected here. The TypeScript compiler is wrong.\r\n if (this._connectionState as any === HubConnectionState.Disconnecting) {\r\n this._completeClose();\r\n }\r\n return;\r\n }\r\n\r\n retryError = e instanceof Error ? e : new Error(e.toString());\r\n nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts++, Date.now() - reconnectStartTime, retryError);\r\n }\r\n }\r\n\r\n this._logger.log(LogLevel.Information, `Reconnect retries have been exhausted after ${Date.now() - reconnectStartTime} ms and ${previousReconnectAttempts} failed attempts. Connection disconnecting.`);\r\n\r\n this._completeClose();\r\n }\r\n\r\n private _getNextRetryDelay(previousRetryCount: number, elapsedMilliseconds: number, retryReason: Error) {\r\n try {\r\n return this._reconnectPolicy!.nextRetryDelayInMilliseconds({\r\n elapsedMilliseconds,\r\n previousRetryCount,\r\n retryReason,\r\n });\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `IRetryPolicy.nextRetryDelayInMilliseconds(${previousRetryCount}, ${elapsedMilliseconds}) threw error '${e}'.`);\r\n return null;\r\n }\r\n }\r\n\r\n private _cancelCallbacksWithError(error: Error) {\r\n const callbacks = this._callbacks;\r\n this._callbacks = {};\r\n\r\n Object.keys(callbacks)\r\n .forEach((key) => {\r\n const callback = callbacks[key];\r\n try {\r\n callback(null, error);\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream 'error' callback called with '${error}' threw error: ${getErrorString(e)}`);\r\n }\r\n });\r\n }\r\n\r\n private _cleanupPingTimer(): void {\r\n if (this._pingServerHandle) {\r\n clearTimeout(this._pingServerHandle);\r\n this._pingServerHandle = undefined;\r\n }\r\n }\r\n\r\n private _cleanupTimeout(): void {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n private _createInvocation(methodName: string, args: any[], nonblocking: boolean, streamIds: string[]): InvocationMessage {\r\n if (nonblocking) {\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n streamIds,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n } else {\r\n return {\r\n arguments: args,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n } else {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n } else {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n }\r\n }\r\n\r\n private _launchStreams(streams: IStreamResult[], promiseQueue: Promise): void {\r\n if (streams.length === 0) {\r\n return;\r\n }\r\n\r\n // Synchronize stream data so they arrive in-order on the server\r\n if (!promiseQueue) {\r\n promiseQueue = Promise.resolve();\r\n }\r\n\r\n // We want to iterate over the keys, since the keys are the stream ids\r\n // eslint-disable-next-line guard-for-in\r\n for (const streamId in streams) {\r\n streams[streamId].subscribe({\r\n complete: () => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId)));\r\n },\r\n error: (err) => {\r\n let message: string;\r\n if (err instanceof Error) {\r\n message = err.message;\r\n } else if (err && err.toString) {\r\n message = err.toString();\r\n } else {\r\n message = \"Unknown error\";\r\n }\r\n\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId, message)));\r\n },\r\n next: (item) => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createStreamItemMessage(streamId, item)));\r\n },\r\n });\r\n }\r\n }\r\n\r\n private _replaceStreamingParams(args: any[]): [IStreamResult[], string[]] {\r\n const streams: IStreamResult[] = [];\r\n const streamIds: string[] = [];\r\n for (let i = 0; i < args.length; i++) {\r\n const argument = args[i];\r\n if (this._isObservable(argument)) {\r\n const streamId = this._invocationId;\r\n this._invocationId++;\r\n // Store the stream for later use\r\n streams[streamId] = argument;\r\n streamIds.push(streamId.toString());\r\n\r\n // remove stream from args\r\n args.splice(i, 1);\r\n }\r\n }\r\n\r\n return [streams, streamIds];\r\n }\r\n\r\n private _isObservable(arg: any): arg is IStreamResult {\r\n // This allows other stream implementations to just work (like rxjs)\r\n return arg && arg.subscribe && typeof arg.subscribe === \"function\";\r\n }\r\n\r\n private _createStreamInvocation(methodName: string, args: any[], streamIds: string[]): StreamInvocationMessage {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n target: methodName,\r\n type: MessageType.StreamInvocation,\r\n };\r\n } else {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n target: methodName,\r\n type: MessageType.StreamInvocation,\r\n };\r\n }\r\n }\r\n\r\n private _createCancelInvocation(id: string): CancelInvocationMessage {\r\n return {\r\n invocationId: id,\r\n type: MessageType.CancelInvocation,\r\n };\r\n }\r\n\r\n private _createStreamItemMessage(id: string, item: any): StreamItemMessage {\r\n return {\r\n invocationId: id,\r\n item,\r\n type: MessageType.StreamItem,\r\n };\r\n }\r\n\r\n private _createCompletionMessage(id: string, error?: any, result?: any): CompletionMessage {\r\n if (error) {\r\n return {\r\n error,\r\n invocationId: id,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n\r\n return {\r\n invocationId: id,\r\n result,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n\r\n/** @private */\r\nexport interface HandshakeRequestMessage {\r\n readonly protocol: string;\r\n readonly version: number;\r\n}\r\n\r\n/** @private */\r\nexport interface HandshakeResponseMessage {\r\n readonly error: string;\r\n readonly minorVersion: number;\r\n}\r\n\r\n/** @private */\r\nexport class HandshakeProtocol {\r\n // Handshake request is always JSON\r\n public writeHandshakeRequest(handshakeRequest: HandshakeRequestMessage): string {\r\n return TextMessageFormat.write(JSON.stringify(handshakeRequest));\r\n }\r\n\r\n public parseHandshakeResponse(data: any): [any, HandshakeResponseMessage] {\r\n let messageData: string;\r\n let remainingData: any;\r\n\r\n if (isArrayBuffer(data)) {\r\n // Format is binary but still need to read JSON text from handshake response\r\n const binaryData = new Uint8Array(data);\r\n const separatorIndex = binaryData.indexOf(TextMessageFormat.RecordSeparatorCode);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = String.fromCharCode.apply(null, Array.prototype.slice.call(binaryData.slice(0, responseLength)));\r\n remainingData = (binaryData.byteLength > responseLength) ? binaryData.slice(responseLength).buffer : null;\r\n } else {\r\n const textData: string = data;\r\n const separatorIndex = textData.indexOf(TextMessageFormat.RecordSeparator);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = textData.substring(0, responseLength);\r\n remainingData = (textData.length > responseLength) ? textData.substring(responseLength) : null;\r\n }\r\n\r\n // At this point we should have just the single handshake message\r\n const messages = TextMessageFormat.parse(messageData);\r\n const response = JSON.parse(messages[0]);\r\n if (response.type) {\r\n throw new Error(\"Expected a handshake response from the server.\");\r\n }\r\n const responseMessage: HandshakeResponseMessage = response;\r\n\r\n // multiple messages could have arrived with handshake\r\n // return additional data to be parsed as usual, or null if all parsed\r\n return [remainingData, responseMessage];\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { IStreamResult, IStreamSubscriber, ISubscription } from \"./Stream\";\r\nimport { SubjectSubscription } from \"./Utils\";\r\n\r\n/** Stream implementation to stream items to the server. */\r\nexport class Subject implements IStreamResult {\r\n /** @internal */\r\n public observers: IStreamSubscriber[];\r\n\r\n /** @internal */\r\n public cancelCallback?: () => Promise;\r\n\r\n constructor() {\r\n this.observers = [];\r\n }\r\n\r\n public next(item: T): void {\r\n for (const observer of this.observers) {\r\n observer.next(item);\r\n }\r\n }\r\n\r\n public error(err: any): void {\r\n for (const observer of this.observers) {\r\n if (observer.error) {\r\n observer.error(err);\r\n }\r\n }\r\n }\r\n\r\n public complete(): void {\r\n for (const observer of this.observers) {\r\n if (observer.complete) {\r\n observer.complete();\r\n }\r\n }\r\n }\r\n\r\n public subscribe(observer: IStreamSubscriber): ISubscription {\r\n this.observers.push(observer);\r\n return new SubjectSubscription(this, observer);\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { ILogger } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\n\r\n/** Defines the type of a Hub Message. */\r\nexport enum MessageType {\r\n /** Indicates the message is an Invocation message and implements the {@link @microsoft/signalr.InvocationMessage} interface. */\r\n Invocation = 1,\r\n /** Indicates the message is a StreamItem message and implements the {@link @microsoft/signalr.StreamItemMessage} interface. */\r\n StreamItem = 2,\r\n /** Indicates the message is a Completion message and implements the {@link @microsoft/signalr.CompletionMessage} interface. */\r\n Completion = 3,\r\n /** Indicates the message is a Stream Invocation message and implements the {@link @microsoft/signalr.StreamInvocationMessage} interface. */\r\n StreamInvocation = 4,\r\n /** Indicates the message is a Cancel Invocation message and implements the {@link @microsoft/signalr.CancelInvocationMessage} interface. */\r\n CancelInvocation = 5,\r\n /** Indicates the message is a Ping message and implements the {@link @microsoft/signalr.PingMessage} interface. */\r\n Ping = 6,\r\n /** Indicates the message is a Close message and implements the {@link @microsoft/signalr.CloseMessage} interface. */\r\n Close = 7,\r\n}\r\n\r\n/** Defines a dictionary of string keys and string values representing headers attached to a Hub message. */\r\nexport interface MessageHeaders {\r\n /** Gets or sets the header with the specified key. */\r\n [key: string]: string;\r\n}\r\n\r\n/** Union type of all known Hub messages. */\r\nexport type HubMessage =\r\n InvocationMessage |\r\n StreamInvocationMessage |\r\n StreamItemMessage |\r\n CompletionMessage |\r\n CancelInvocationMessage |\r\n PingMessage |\r\n CloseMessage;\r\n\r\n/** Defines properties common to all Hub messages. */\r\nexport interface HubMessageBase {\r\n /** A {@link @microsoft/signalr.MessageType} value indicating the type of this message. */\r\n readonly type: MessageType;\r\n}\r\n\r\n/** Defines properties common to all Hub messages relating to a specific invocation. */\r\nexport interface HubInvocationMessage extends HubMessageBase {\r\n /** A {@link @microsoft/signalr.MessageHeaders} dictionary containing headers attached to the message. */\r\n readonly headers?: MessageHeaders;\r\n /** The ID of the invocation relating to this message.\r\n *\r\n * This is expected to be present for {@link @microsoft/signalr.StreamInvocationMessage} and {@link @microsoft/signalr.CompletionMessage}. It may\r\n * be 'undefined' for an {@link @microsoft/signalr.InvocationMessage} if the sender does not expect a response.\r\n */\r\n readonly invocationId?: string;\r\n}\r\n\r\n/** A hub message representing a non-streaming invocation. */\r\nexport interface InvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Invocation;\r\n /** The target method name. */\r\n readonly target: string;\r\n /** The target method arguments. */\r\n readonly arguments: any[];\r\n /** The target methods stream IDs. */\r\n readonly streamIds?: string[];\r\n}\r\n\r\n/** A hub message representing a streaming invocation. */\r\nexport interface StreamInvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.StreamInvocation;\r\n\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n /** The target method name. */\r\n readonly target: string;\r\n /** The target method arguments. */\r\n readonly arguments: any[];\r\n /** The target methods stream IDs. */\r\n readonly streamIds?: string[];\r\n}\r\n\r\n/** A hub message representing a single item produced as part of a result stream. */\r\nexport interface StreamItemMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.StreamItem;\r\n\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n\r\n /** The item produced by the server. */\r\n readonly item?: any;\r\n}\r\n\r\n/** A hub message representing the result of an invocation. */\r\nexport interface CompletionMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Completion;\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n /** The error produced by the invocation, if any.\r\n *\r\n * Either {@link @microsoft/signalr.CompletionMessage.error} or {@link @microsoft/signalr.CompletionMessage.result} must be defined, but not both.\r\n */\r\n readonly error?: string;\r\n /** The result produced by the invocation, if any.\r\n *\r\n * Either {@link @microsoft/signalr.CompletionMessage.error} or {@link @microsoft/signalr.CompletionMessage.result} must be defined, but not both.\r\n */\r\n readonly result?: any;\r\n}\r\n\r\n/** A hub message indicating that the sender is still active. */\r\nexport interface PingMessage extends HubMessageBase {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Ping;\r\n}\r\n\r\n/** A hub message indicating that the sender is closing the connection.\r\n *\r\n * If {@link @microsoft/signalr.CloseMessage.error} is defined, the sender is closing the connection due to an error.\r\n */\r\nexport interface CloseMessage extends HubMessageBase {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Close;\r\n /** The error that triggered the close, if any.\r\n *\r\n * If this property is undefined, the connection was closed normally and without error.\r\n */\r\n readonly error?: string;\r\n\r\n /** If true, clients with automatic reconnects enabled should attempt to reconnect after receiving the CloseMessage. Otherwise, they should not. */\r\n readonly allowReconnect?: boolean;\r\n}\r\n\r\n/** A hub message sent to request that a streaming invocation be canceled. */\r\nexport interface CancelInvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.CancelInvocation;\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n}\r\n\r\n/** A protocol abstraction for communicating with SignalR Hubs. */\r\nexport interface IHubProtocol {\r\n /** The name of the protocol. This is used by SignalR to resolve the protocol between the client and server. */\r\n readonly name: string;\r\n /** The version of the protocol. */\r\n readonly version: number;\r\n /** The {@link @microsoft/signalr.TransferFormat} of the protocol. */\r\n readonly transferFormat: TransferFormat;\r\n\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * If {@link @microsoft/signalr.IHubProtocol.transferFormat} is 'Text', the `input` parameter must be a string, otherwise it must be an ArrayBuffer.\r\n *\r\n * @param {string | ArrayBuffer} input A string or ArrayBuffer containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n parseMessages(input: string | ArrayBuffer, logger: ILogger): HubMessage[];\r\n\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string or ArrayBuffer and returns it.\r\n *\r\n * If {@link @microsoft/signalr.IHubProtocol.transferFormat} is 'Text', the result of this method will be a string, otherwise it will be an ArrayBuffer.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string | ArrayBuffer} A string or ArrayBuffer containing the serialized representation of the message.\r\n */\r\n writeMessage(message: HubMessage): string | ArrayBuffer;\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// These values are designed to match the ASP.NET Log Levels since that's the pattern we're emulating here.\r\n/** Indicates the severity of a log message.\r\n *\r\n * Log Levels are ordered in increasing severity. So `Debug` is more severe than `Trace`, etc.\r\n */\r\nexport enum LogLevel {\r\n /** Log level for very low severity diagnostic messages. */\r\n Trace = 0,\r\n /** Log level for low severity diagnostic messages. */\r\n Debug = 1,\r\n /** Log level for informational diagnostic messages. */\r\n Information = 2,\r\n /** Log level for diagnostic messages that indicate a non-fatal problem. */\r\n Warning = 3,\r\n /** Log level for diagnostic messages that indicate a failure in the current operation. */\r\n Error = 4,\r\n /** Log level for diagnostic messages that indicate a failure that will terminate the entire application. */\r\n Critical = 5,\r\n /** The highest possible log level. Used when configuring logging to indicate that no log messages should be emitted. */\r\n None = 6,\r\n}\r\n\r\n/** An abstraction that provides a sink for diagnostic messages. */\r\nexport interface ILogger {\r\n /** Called by the framework to emit a diagnostic message.\r\n *\r\n * @param {LogLevel} logLevel The severity level of the message.\r\n * @param {string} message The message.\r\n */\r\n log(logLevel: LogLevel, message: string): void;\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\n\r\n/** A logger that does nothing when log messages are sent to it. */\r\nexport class NullLogger implements ILogger {\r\n /** The singleton instance of the {@link @microsoft/signalr.NullLogger}. */\r\n public static instance: ILogger = new NullLogger();\r\n\r\n private constructor() {}\r\n\r\n /** @inheritDoc */\r\n // eslint-disable-next-line\r\n public log(_logLevel: LogLevel, _message: string): void {\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// Not exported from index\r\n/** @private */\r\nexport class TextMessageFormat {\r\n public static RecordSeparatorCode = 0x1e;\r\n public static RecordSeparator = String.fromCharCode(TextMessageFormat.RecordSeparatorCode);\r\n\r\n public static write(output: string): string {\r\n return `${output}${TextMessageFormat.RecordSeparator}`;\r\n }\r\n\r\n public static parse(input: string): string[] {\r\n if (input[input.length - 1] !== TextMessageFormat.RecordSeparator) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n const messages = input.split(TextMessageFormat.RecordSeparator);\r\n messages.pop();\r\n return messages;\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { IStreamSubscriber, ISubscription } from \"./Stream\";\r\nimport { Subject } from \"./Subject\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\n\r\n// Version token that will be replaced by the prepack command\r\n/** The version of the SignalR client. */\r\n\r\nexport const VERSION: string = \"0.0.0-DEV_BUILD\";\r\n/** @private */\r\nexport class Arg {\r\n public static isRequired(val: any, name: string): void {\r\n if (val === null || val === undefined) {\r\n throw new Error(`The '${name}' argument is required.`);\r\n }\r\n }\r\n public static isNotEmpty(val: string, name: string): void {\r\n if (!val || val.match(/^\\s*$/)) {\r\n throw new Error(`The '${name}' argument should not be empty.`);\r\n }\r\n }\r\n\r\n public static isIn(val: any, values: any, name: string): void {\r\n // TypeScript enums have keys for **both** the name and the value of each enum member on the type itself.\r\n if (!(val in values)) {\r\n throw new Error(`Unknown ${name} value: ${val}.`);\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport class Platform {\r\n // react-native has a window but no document so we should check both\r\n public static get isBrowser(): boolean {\r\n return typeof window === \"object\" && typeof window.document === \"object\";\r\n }\r\n\r\n // WebWorkers don't have a window object so the isBrowser check would fail\r\n public static get isWebWorker(): boolean {\r\n return typeof self === \"object\" && \"importScripts\" in self;\r\n }\r\n\r\n // react-native has a window but no document\r\n static get isReactNative(): boolean {\r\n return typeof window === \"object\" && typeof window.document === \"undefined\";\r\n }\r\n\r\n // Node apps shouldn't have a window object, but WebWorkers don't either\r\n // so we need to check for both WebWorker and window\r\n public static get isNode(): boolean {\r\n return !this.isBrowser && !this.isWebWorker && !this.isReactNative;\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getDataDetail(data: any, includeContent: boolean): string {\r\n let detail = \"\";\r\n if (isArrayBuffer(data)) {\r\n detail = `Binary data of length ${data.byteLength}`;\r\n if (includeContent) {\r\n detail += `. Content: '${formatArrayBuffer(data)}'`;\r\n }\r\n } else if (typeof data === \"string\") {\r\n detail = `String data of length ${data.length}`;\r\n if (includeContent) {\r\n detail += `. Content: '${data}'`;\r\n }\r\n }\r\n return detail;\r\n}\r\n\r\n/** @private */\r\nexport function formatArrayBuffer(data: ArrayBuffer): string {\r\n const view = new Uint8Array(data);\r\n\r\n // Uint8Array.map only supports returning another Uint8Array?\r\n let str = \"\";\r\n view.forEach((num) => {\r\n const pad = num < 16 ? \"0\" : \"\";\r\n str += `0x${pad}${num.toString(16)} `;\r\n });\r\n\r\n // Trim of trailing space.\r\n return str.substr(0, str.length - 1);\r\n}\r\n\r\n// Also in signalr-protocol-msgpack/Utils.ts\r\n/** @private */\r\nexport function isArrayBuffer(val: any): val is ArrayBuffer {\r\n return val && typeof ArrayBuffer !== \"undefined\" &&\r\n (val instanceof ArrayBuffer ||\r\n // Sometimes we get an ArrayBuffer that doesn't satisfy instanceof\r\n (val.constructor && val.constructor.name === \"ArrayBuffer\"));\r\n}\r\n\r\n/** @private */\r\nexport async function sendMessage(logger: ILogger, transportName: string, httpClient: HttpClient, url: string, accessTokenFactory: (() => string | Promise) | undefined,\r\n content: string | ArrayBuffer, options: IHttpConnectionOptions): Promise {\r\n let headers: {[k: string]: string} = {};\r\n if (accessTokenFactory) {\r\n const token = await accessTokenFactory();\r\n if (token) {\r\n headers = {\r\n [\"Authorization\"]: `Bearer ${token}`,\r\n };\r\n }\r\n }\r\n\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n logger.log(LogLevel.Trace, `(${transportName} transport) sending data. ${getDataDetail(content, options.logMessageContent!)}.`);\r\n\r\n const responseType = isArrayBuffer(content) ? \"arraybuffer\" : \"text\";\r\n const response = await httpClient.post(url, {\r\n content,\r\n headers: { ...headers, ...options.headers},\r\n responseType,\r\n timeout: options.timeout,\r\n withCredentials: options.withCredentials,\r\n });\r\n\r\n logger.log(LogLevel.Trace, `(${transportName} transport) request complete. Response status: ${response.statusCode}.`);\r\n}\r\n\r\n/** @private */\r\nexport function createLogger(logger?: ILogger | LogLevel): ILogger {\r\n if (logger === undefined) {\r\n return new ConsoleLogger(LogLevel.Information);\r\n }\r\n\r\n if (logger === null) {\r\n return NullLogger.instance;\r\n }\r\n\r\n if ((logger as ILogger).log !== undefined) {\r\n return logger as ILogger;\r\n }\r\n\r\n return new ConsoleLogger(logger as LogLevel);\r\n}\r\n\r\n/** @private */\r\nexport class SubjectSubscription implements ISubscription {\r\n private _subject: Subject;\r\n private _observer: IStreamSubscriber;\r\n\r\n constructor(subject: Subject, observer: IStreamSubscriber) {\r\n this._subject = subject;\r\n this._observer = observer;\r\n }\r\n\r\n public dispose(): void {\r\n const index: number = this._subject.observers.indexOf(this._observer);\r\n if (index > -1) {\r\n this._subject.observers.splice(index, 1);\r\n }\r\n\r\n if (this._subject.observers.length === 0 && this._subject.cancelCallback) {\r\n this._subject.cancelCallback().catch((_) => { });\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport class ConsoleLogger implements ILogger {\r\n private readonly _minLevel: LogLevel;\r\n\r\n // Public for testing purposes.\r\n public out: {\r\n error(message: any): void,\r\n warn(message: any): void,\r\n info(message: any): void,\r\n log(message: any): void,\r\n };\r\n\r\n constructor(minimumLogLevel: LogLevel) {\r\n this._minLevel = minimumLogLevel;\r\n this.out = console;\r\n }\r\n\r\n public log(logLevel: LogLevel, message: string): void {\r\n if (logLevel >= this._minLevel) {\r\n const msg = `[${new Date().toISOString()}] ${LogLevel[logLevel]}: ${message}`;\r\n switch (logLevel) {\r\n case LogLevel.Critical:\r\n case LogLevel.Error:\r\n this.out.error(msg);\r\n break;\r\n case LogLevel.Warning:\r\n this.out.warn(msg);\r\n break;\r\n case LogLevel.Information:\r\n this.out.info(msg);\r\n break;\r\n default:\r\n // console.debug only goes to attached debuggers in Node, so we use console.log for Trace and Debug\r\n this.out.log(msg);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getUserAgentHeader(): [string, string] {\r\n let userAgentHeaderName = \"X-SignalR-User-Agent\";\r\n if (Platform.isNode) {\r\n userAgentHeaderName = \"User-Agent\";\r\n }\r\n return [ userAgentHeaderName, constructUserAgent(VERSION, getOsName(), getRuntime(), getRuntimeVersion()) ];\r\n}\r\n\r\n/** @private */\r\nexport function constructUserAgent(version: string, os: string, runtime: string, runtimeVersion: string | undefined): string {\r\n // Microsoft SignalR/[Version] ([Detailed Version]; [Operating System]; [Runtime]; [Runtime Version])\r\n let userAgent: string = \"Microsoft SignalR/\";\r\n\r\n const majorAndMinor = version.split(\".\");\r\n userAgent += `${majorAndMinor[0]}.${majorAndMinor[1]}`;\r\n userAgent += ` (${version}; `;\r\n\r\n if (os && os !== \"\") {\r\n userAgent += `${os}; `;\r\n } else {\r\n userAgent += \"Unknown OS; \";\r\n }\r\n\r\n userAgent += `${runtime}`;\r\n\r\n if (runtimeVersion) {\r\n userAgent += `; ${runtimeVersion}`;\r\n } else {\r\n userAgent += \"; Unknown Runtime Version\";\r\n }\r\n\r\n userAgent += \")\";\r\n return userAgent;\r\n}\r\n\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getOsName(): string {\r\n if (Platform.isNode) {\r\n switch (process.platform) {\r\n case \"win32\":\r\n return \"Windows NT\";\r\n case \"darwin\":\r\n return \"macOS\";\r\n case \"linux\":\r\n return \"Linux\";\r\n default:\r\n return process.platform;\r\n }\r\n } else {\r\n return \"\";\r\n }\r\n}\r\n\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getRuntimeVersion(): string | undefined {\r\n if (Platform.isNode) {\r\n return process.versions.node;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction getRuntime(): string {\r\n if (Platform.isNode) {\r\n return \"NodeJS\";\r\n } else {\r\n return \"Browser\";\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getErrorString(e: any): string {\r\n if (e.stack) {\r\n return e.stack;\r\n } else if (e.message) {\r\n return e.message;\r\n }\r\n return `${e}`;\r\n}\r\n\r\n/** @private */\r\nexport function getGlobalThis(): unknown {\r\n // globalThis is semi-new and not available in Node until v12\r\n if (typeof globalThis !== \"undefined\") {\r\n return globalThis;\r\n }\r\n if (typeof self !== \"undefined\") {\r\n return self;\r\n }\r\n if (typeof window !== \"undefined\") {\r\n return window;\r\n }\r\n if (typeof global !== \"undefined\") {\r\n return global;\r\n }\r\n throw new Error(\"could not find global\");\r\n}","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"microsoftTeams\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"microsoftTeams\"] = factory();\n\telse\n\t\troot[\"microsoftTeams\"] = factory();\n})(typeof self !== 'undefined' ? self : this, () => {\nreturn ","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @hidden\n * The client version when all SDK APIs started to check platform compatibility for the APIs was 1.6.0.\n * Modified to 2.0.1 which is hightest till now so that if any client doesn't pass version in initialize function, it will be set to highest.\n * Mobile clients are passing versions, hence will be applicable to web and desktop clients only.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const defaultSDKVersionForCompatCheck = '2.0.1';\n\n/**\n * @hidden\n * This is the client version when selectMedia API - VideoAndImage is supported on mobile.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const videoAndImageMediaAPISupportVersion = '2.0.2';\n\n/**\n * @hidden\n * This is the client version when selectMedia API - Video with non-full screen mode is supported on mobile.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const nonFullScreenVideoModeAPISupportVersion = '2.0.3';\n\n/**\n * @hidden\n * This is the client version when selectMedia API - ImageOutputFormats is supported on mobile.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const imageOutputFormatsAPISupportVersion = '2.0.4';\n\n/**\n * @hidden\n * Minimum required client supported version for {@link getUserJoinedTeams} to be supported on {@link HostClientType.android}\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const getUserJoinedTeamsSupportedAndroidClientVersion = '2.0.1';\n\n/**\n * @hidden\n * This is the client version when location APIs (getLocation and showLocation) are supported.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const locationAPIsRequiredVersion = '1.9.0';\n\n/**\n * @hidden\n * This is the client version when permisisons are supported\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const permissionsAPIsRequiredVersion = '2.0.1';\n\n/**\n * @hidden\n * This is the client version when people picker API is supported on mobile.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const peoplePickerRequiredVersion = '2.0.0';\n\n/**\n * @hidden\n * This is the client version when captureImage API is supported on mobile.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const captureImageMobileSupportVersion = '1.7.0';\n\n/**\n * @hidden\n * This is the client version when media APIs are supported on all three platforms ios, android and web.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const mediaAPISupportVersion = '1.8.0';\n\n/**\n * @hidden\n * This is the client version when getMedia API is supported via Callbacks on all three platforms ios, android and web.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const getMediaCallbackSupportVersion = '2.0.0';\n\n/**\n * @hidden\n * This is the client version when scanBarCode API is supported on mobile.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const scanBarCodeAPIMobileSupportVersion = '1.9.0';\n\n/**\n * @hidden\n * List of supported Host origins\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const validOrigins = [\n 'teams.microsoft.com',\n 'teams.microsoft.us',\n 'gov.teams.microsoft.us',\n 'dod.teams.microsoft.us',\n 'int.teams.microsoft.com',\n 'teams.live.com',\n 'devspaces.skype.com',\n 'ssauth.skype.com',\n 'local.teams.live.com', // local development\n 'local.teams.live.com:8080', // local development\n 'local.teams.office.com', // local development\n 'local.teams.office.com:8080', // local development\n 'outlook.office.com',\n 'outlook-sdf.office.com',\n 'outlook.office365.com',\n 'outlook-sdf.office365.com',\n 'outlook.live.com',\n 'outlook-sdf.live.com',\n '*.teams.microsoft.com',\n '*.www.office.com',\n 'www.office.com',\n 'word.office.com',\n 'excel.office.com',\n 'powerpoint.office.com',\n 'www.officeppe.com',\n '*.www.microsoft365.com',\n 'www.microsoft365.com',\n];\n\n/**\n * @hidden\n * USer specified message origins should satisfy this test\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const userOriginUrlValidationRegExp = /^https:\\/\\//;\n\n/**\n * @hidden\n * The protocol used for deep links into Teams\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const teamsDeepLinkProtocol = 'https';\n\n/**\n * @hidden\n * The host used for deep links into Teams\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const teamsDeepLinkHost = 'teams.microsoft.com';\n\n/** @hidden */\nexport const errorLibraryNotInitialized = 'The library has not yet been initialized';\n\n/** @hidden */\nexport const errorRuntimeNotInitialized = 'The runtime has not yet been initialized';\n\n/** @hidden */\nexport const errorRuntimeNotSupported = 'The runtime version is not supported';\n\n/** @hidden */\nexport const errorCallNotStarted = 'The call was not properly started';\n","import { FrameContexts } from '../public';\nexport class GlobalVars {\n public static initializeCalled = false;\n public static initializeCompleted = false;\n public static additionalValidOrigins: string[] = [];\n public static initializePromise: Promise;\n public static isFramelessWindow = false;\n public static frameContext: FrameContexts;\n public static hostClientType: string;\n public static clientSupportedSDKVersion: string;\n public static printCapabilityEnabled = false;\n}\n","import { debug as registerLogger, Debugger } from 'debug';\n\nconst topLevelLogger = registerLogger('teamsJs');\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n *\n * Returns a logger for a given namespace, within the pre-defined top-level teamsJs namespace\n */\nexport function getLogger(namespace: string): Debugger {\n return topLevelLogger.extend(namespace);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","/* eslint-disable @typescript-eslint/no-explicit-any*/\n\nimport { ChannelType, DialogDimension, HostClientType, HostName, TeamType, UserTeamRole } from './constants';\nimport { FrameContexts } from './constants';\n\n/**\n * Represents information about tabs for an app\n */\nexport interface TabInformation {\n /** Represents the tabs associated with a Microsoft Teams app */\n teamTabs: TabInstance[];\n}\n\n/**\n * Represents information about a tab instance\n */\nexport interface TabInstance {\n /**\n * The name of the tab\n */\n tabName: string;\n\n /**\n * @internal\n * Limited to Microsoft-internal use\n * @protected\n */\n internalTabInstanceId?: string;\n\n /**\n * Last viewed time of this tab. null means unknown\n */\n lastViewUnixEpochTime?: string;\n\n /**\n * The developer-defined unique ID for the entity this content points to.\n */\n entityId?: string;\n\n /**\n * The Microsoft Teams ID for the channel with which the content is associated.\n */\n channelId?: string;\n\n /**\n * The name for the channel with which the content is associated.\n */\n channelName?: string;\n\n /**\n * Is this tab in a favorite channel?\n */\n channelIsFavorite?: boolean;\n\n /**\n * The Microsoft Teams ID for the team with which the content is associated.\n */\n teamId?: string;\n\n /**\n * The name for the team with which the content is associated.\n */\n teamName?: string;\n\n /**\n * Is this tab in a favorite team?\n */\n teamIsFavorite?: boolean;\n\n /**\n * The Office 365 group ID for the team with which the content is associated.\n * This field is available only when the identity permission is requested in the manifest.\n */\n groupId?: string;\n\n /**\n * Content URL of this tab\n */\n url?: string;\n\n /**\n * Website URL of this tab\n */\n websiteUrl?: string;\n}\n\n/**\n * Indicates information about the tab instance for filtering purposes.\n */\nexport interface TabInstanceParameters {\n /**\n * Flag allowing to select favorite channels only\n */\n favoriteChannelsOnly?: boolean;\n\n /**\n * Flag allowing to select favorite teams only\n */\n favoriteTeamsOnly?: boolean;\n}\n\n/**\n * Represents Team Information\n */\nexport interface TeamInformation {\n /**\n * Id of the team\n */\n teamId: string;\n\n /**\n * Team display name\n */\n teamName: string;\n\n /**\n * Team description\n */\n teamDescription?: string;\n\n /**\n * Thumbnail Uri\n */\n thumbnailUri?: string;\n\n /**\n * The Office 365 group ID for the team with which the content is associated.\n * This field is available only when the identity permission is requested in the manifest.\n */\n groupId?: string;\n\n /**\n * Role of current user in the team\n */\n userTeamRole?: UserTeamRole;\n\n /**\n * The type of the team.\n */\n teamType?: TeamType;\n\n /**\n * The locked status of the team\n */\n isTeamLocked?: boolean;\n\n /**\n * The archived status of the team\n */\n isTeamArchived?: boolean;\n}\n\n/**\n * Represents OS locale info used for formatting date and time data\n */\nexport interface LocaleInfo {\n /** Represents the user's platform on which the app is running. */\n platform: HostClientType.android | HostClientType.ios | 'macos' | 'windows';\n /**\n * Represents the regional format used by the user's locale.\n * @example `en-us`.\n */\n regionalFormat: string;\n /**\n * Displays date values, as specified by the short date format MM/DD/YYYY in user's regional settings.\n * @example 4/21/2023 or 4-21-2023\n */\n shortDate: string;\n /**\n * Displays only date values, as specified by the Long Date format in user's regional settings.\n * @example Friday, April 21, 2023\n */\n longDate: string;\n /**\n * A string representing the short time format used by the user's locale.\n * @example 10:10\n */\n shortTime: string;\n /**\n * A string representing the long time format used by the user's locale.\n * @example 10:10:42 AM\n */\n longTime: string;\n}\n\n/**\n * Allowed user file open preferences\n */\nexport enum FileOpenPreference {\n /** Indicates that the user should be prompted to open the file in inline. */\n Inline = 'inline',\n /** Indicates that the user should be prompted to open the file in the native desktop application associated with the file type. */\n Desktop = 'desktop',\n /** Indicates that the user should be prompted to open the file in a web browser. */\n Web = 'web',\n}\n\n/**\n * Possible Action Types\n *\n * @beta\n */\nexport enum ActionObjectType {\n /** Represents content within a Microsoft 365 application. */\n M365Content = 'm365content',\n}\n\n/**\n * Data pertaining to object(s) the action is being performed on\n *\n * @param T The type of action being implemented\n *\n * @beta\n */\nexport interface BaseActionObject {\n /** Represents action type. */\n type: T;\n}\n\n/**\n * Stores information needed to represent M365 Content stored\n * in OneDrive or Sharepoint\n *\n * @beta\n */\nexport interface M365ContentAction extends BaseActionObject {\n /**\n * Only office content IDs are passed to the app. Apps should use these ids\n * to query the Microsoft graph for more details.\n */\n itemId: string;\n /** Represents an optional secondary identifier for an action in a Microsoft 365 content item. */\n secondaryId?: SecondaryId;\n}\n\n/**\n * Contains information on what Graph item is being queried\n *\n * @beta\n */\nexport interface SecondaryId {\n /** Name of the secondary id that should be used. */\n name: SecondaryM365ContentIdName;\n /** The secondary id value that can be used to retrieve M365 content. */\n value: string;\n}\n\n/**\n * These correspond with field names in the MSGraph.\n * See (commonly accessed resources)[https://learn.microsoft.com/en-us/graph/api/resources/onedrive?view=graph-rest-1.0#commonly-accessed-resources].\n * @beta\n */\nexport enum SecondaryM365ContentIdName {\n /** OneDrive ID */\n DriveId = 'driveId',\n /** Teams Group ID */\n GroupId = 'groupId',\n /** SharePoint ID */\n SiteId = 'siteId',\n /** User ID */\n UserId = 'userId',\n}\n\n/**\n * Information common to all actions\n *\n * @beta\n */\nexport interface ActionInfo {\n /**\n * Maps to the action id supplied inside the manifest\n */\n actionId: string;\n /**\n * Array of corresponding action objects\n */\n actionObjects: BaseActionObject[];\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use the {@link app.Context} interface and its updated properties instead.\n *\n * @remarks\n * For more details about the updated {@link app.Context} interface, visit the\n * [Teams JavaScript client SDK](https://learn.microsoft.com/microsoftteams/platform/tabs/how-to/using-teams-client-sdk#updates-to-the-context-interface)\n * overview article.\n *\n * Represents the structure of the received context message.\n */\nexport interface Context {\n /**\n * @deprecated\n * As of 2.0.0, please use {@link ActionInfo | app.Context.actionInfo} instead\n *\n * Common information applicable to all content actions\n */\n actionInfo?: ActionInfo;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.TeamInfo.groupId | app.Context.team.groupId} instead\n *\n * The Office 365 group ID for the team with which the content is associated.\n * This field is available only when the identity permission is requested in the manifest.\n */\n groupId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.TeamInfo.internalId | app.Context.team.internalId} instead\n *\n * The Microsoft Teams ID for the team with which the content is associated.\n */\n teamId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.TeamInfo.displayName | app.Context.team.displayName} instead\n *\n * The name for the team with which the content is associated.\n */\n teamName?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.ChannelInfo.id | app.Context.channel.id} instead\n *\n * The Microsoft Teams ID for the channel with which the content is associated.\n */\n channelId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.ChannelInfo.displayName | app.Context.channel.displayName} instead\n *\n * The name for the channel with which the content is associated.\n */\n channelName?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.ChannelInfo.membershipType | app.Context.channel.membershipType} instead\n *\n * The type of the channel with which the content is associated.\n */\n channelType?: ChannelType;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.PageInfo.id | app.Context.page.id} instead\n *\n * The developer-defined unique ID for the entity this content points to.\n */\n entityId: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.PageInfo.subPageId | app.Context.page.subPageId} instead\n *\n * The developer-defined unique ID for the sub-entity this content points to.\n * This field should be used to restore to a specific state within an entity,\n * such as scrolling to or activating a specific piece of content.\n */\n subEntityId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.AppInfo.locale | app.Context.app.locale} instead\n *\n * The current locale that the user has configured for the app formatted as\n * languageId-countryId (for example, en-us).\n */\n locale: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.AppInfo.osLocaleInfo | app.Context.app.osLocaleInfo} instead\n *\n * More detailed locale info from the user's OS if available. Can be used together with\n * the @microsoft/globe NPM package to ensure your app respects the user's OS date and\n * time format configuration\n */\n osLocaleInfo?: LocaleInfo;\n\n /**\n * @deprecated\n *\n * As of 2.0.0, please use {@link app.UserInfo.loginHint | app.Context.user.loginHint} or\n * {@link app.UserInfo.userPrincipalName | app.Context.user.userPrincipalName} instead.\n * The UPN of the current user.\n * Because a malicious party can run your content in a browser, this value should\n * be used only as a hint as to who the user is and never as proof of identity.\n * This field is available only when the identity permission is requested in the manifest.\n */\n upn?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.TenantInfo.id | app.Context.user.tenant.id} instead\n *\n * The Microsoft Entra tenant ID of the current user.\n * Because a malicious party can run your content in a browser, this value should\n * be used only as a hint as to who the user is and never as proof of identity.\n * This field is available only when the identity permission is requested in the manifest.\n */\n tid?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.AppInfo.theme | app.Context.app.theme} instead\n *\n * The current UI theme.\n */\n theme?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.PageInfo.isFullScreen | app.Context.page.isFullScreen} instead\n *\n * Indication whether the tab is in full-screen mode.\n */\n isFullScreen?: boolean;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.TeamInfo.type | app.Context.team.type} instead\n *\n * The type of the team.\n */\n teamType?: TeamType;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.SharePointSiteInfo.teamSiteUrl | app.Context.sharePointSite.teamSiteUrl} instead\n *\n * The root SharePoint site associated with the team.\n */\n teamSiteUrl?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.SharePointSiteInfo.teamSiteDomain | app.Context.sharePointSite.teamSiteDomain} instead\n *\n * The domain of the root SharePoint site associated with the team.\n */\n teamSiteDomain?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.SharePointSiteInfo.teamSitePath | app.Context.sharePointSite.teamSitePath} instead\n *\n * The relative path to the SharePoint site associated with the team.\n */\n teamSitePath?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.ChannelInfo.ownerTenantId | app.Context.channel.ownerTenantId} instead\n *\n * The tenant ID of the host team.\n */\n hostTeamTenantId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.ChannelInfo.ownerGroupId | app.Context.channel.ownerGroupId} instead\n *\n * The Microsoft Entra group ID of the host team.\n */\n hostTeamGroupId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.ChannelInfo.relativeUrl | app.Context.channel.relativeUrl} instead\n *\n * The relative path to the SharePoint folder associated with the channel.\n */\n channelRelativeUrl?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.AppHostInfo.sessionId | app.Context.app.host.sessionId} instead\n *\n * Unique ID for the current Teams session for use in correlating telemetry data.\n */\n sessionId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.TeamInfo.userRole | app.Context.team.userRole} instead\n *\n * The user's role in the team.\n * Because a malicious party can run your content in a browser, this value should\n * be used only as a hint as to the user's role, and never as proof of her role.\n */\n userTeamRole?: UserTeamRole;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.ChatInfo.id | app.Context.chat.id} instead\n *\n * The Microsoft Teams ID for the chat with which the content is associated.\n */\n chatId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.UserInfo.loginHint | app.Context.user.loginHint} instead\n *\n * A value suitable for use as a login_hint when authenticating with Microsoft Entra ID.\n * Because a malicious party can run your content in a browser, this value should\n * be used only as a hint as to who the user is and never as proof of identity.\n * This field is available only when the identity permission is requested in the manifest.\n */\n loginHint?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.UserInfo.userPrincipalName | app.Context.user.userPrincipalName} instead\n *\n * The UPN of the current user. This may be an externally-authenticated UPN (e.g., guest users).\n * Because a malicious party run your content in a browser, this value should\n * be used only as a hint as to who the user is and never as proof of identity.\n * This field is available only when the identity permission is requested in the manifest.\n */\n userPrincipalName?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.UserInfo.id | app.Context.user.id} instead\n *\n * The Microsoft Entra object ID of the current user.\n * Because a malicious party run your content in a browser, this value should\n * be used only as a hint as to who the user is and never as proof of identity.\n * This field is available only when the identity permission is requested in the manifest.\n */\n userObjectId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.TeamInfo.isArchived | app.Context.team.isArchived} instead\n *\n * Indicates whether team is archived.\n * Apps should use this as a signal to prevent any changes to content associated with archived teams.\n */\n isTeamArchived?: boolean;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.AppHostInfo.name | app.Context.app.host.name} instead\n *\n * The name of the host client. Possible values are: Office, Orange, Outlook, Teams\n */\n hostName?: HostName;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.AppHostInfo.clientType | app.Context.app.host.clientType} instead\n *\n * The type of the host client. Possible values are : android, ios, web, desktop, rigel(deprecated, use teamsRoomsWindows instead),\n * surfaceHub, teamsRoomsWindows, teamsRoomsAndroid, teamsPhones, teamsDisplays\n */\n hostClientType?: HostClientType;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.PageInfo.frameContext | app.Context.page.frameContext} instead\n *\n * The context where tab url is loaded (content, task, setting, remove, sidePanel)\n */\n frameContext?: FrameContexts;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.Context | app.Context.sharepoint} instead\n *\n * SharePoint context. This is only available when hosted in SharePoint.\n */\n sharepoint?: any;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.TenantInfo.teamsSku | app.Context.tenant.teamsSku} instead\n *\n * The type of license for the current users tenant.\n */\n tenantSKU?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.UserInfo.licenseType | app.Context.user.licenseType} instead\n *\n * The license type for the current user.\n */\n userLicenseType?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.AppInfo.parentMessageId | app.Context.app.parentMessageId} instead\n *\n * The ID of the parent message from which this task module was launched.\n * This is only available in task modules launched from bot cards.\n */\n parentMessageId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.AppHostInfo.ringId | app.Context.app.host.ringId} instead\n *\n * Current ring ID\n */\n ringId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.AppInfo.sessionId | app.Context.app.sessionId} instead\n *\n * Unique ID for the current session for use in correlating telemetry data.\n */\n appSessionId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.AppInfo.appLaunchId | app.Context.app.appLaunchId} instead\n *\n * ID for the current visible app which is different for across cached sessions. Used for correlating telemetry data``\n */\n appLaunchId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.UserInfo.isCallingAllowed | app.Context.user.isCallingAllowed} instead\n *\n * Represents whether calling is allowed for the current logged in User\n */\n isCallingAllowed?: boolean;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.UserInfo.isPSTNCallingAllowed | app.Context.user.isPSTNCallingAllowed} instead\n *\n * Represents whether PSTN calling is allowed for the current logged in User\n */\n isPSTNCallingAllowed?: boolean;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.MeetingInfo.id | app.Context.meeting.id} instead\n *\n * Meeting Id used by tab when running in meeting context\n */\n meetingId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.ChannelInfo.defaultOneNoteSectionId | app.Context.channel.defaultOneNoteSectionId} instead\n *\n * The OneNote section ID that is linked to the channel.\n */\n defaultOneNoteSectionId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.PageInfo.isMultiWindow | app.Context.page.isMultiWindow} instead\n *\n * Indication whether the tab is in a pop out window\n */\n isMultiWindow?: boolean;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.AppInfo.iconPositionVertical | app.Context.app.iconPositionVertical} instead\n *\n * Personal app icon y coordinate position\n */\n appIconPosition?: number;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.PageInfo.sourceOrigin | app.Context.page.sourceOrigin} instead\n *\n * Source origin from where the tab is opened\n */\n sourceOrigin?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.AppInfo.userClickTime | app.Context.app.userClickTime} instead\n *\n * Time when the user clicked on the tab\n */\n userClickTime?: number;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.TeamInfo.templateId | app.Context.team.templateId} instead\n *\n * Team Template ID if there was a Team Template associated with the creation of the team.\n */\n teamTemplateId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.AppInfo.userFileOpenPreference | app.Context.app.userFileOpenPreference} instead\n *\n * Where the user prefers the file to be opened from by default during file open\n */\n userFileOpenPreference?: FileOpenPreference;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.UserInfo.displayName | app.Context.user.displayName} instead\n *\n * The address book name of the current user.\n */\n userDisplayName?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.SharePointSiteInfo.teamSiteId | app.Context.sharePointSite.teamSiteId} instead\n *\n * Teamsite ID, aka sharepoint site id.\n */\n teamSiteId?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.SharePointSiteInfo.mySiteDomain | app.Context.sharePointSite.mySiteDomain} instead\n *\n * The SharePoint my site domain associated with the user.\n */\n mySiteDomain?: string;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.SharePointSiteInfo.mySitePath | app.Context.sharePointSite.mySitePath} instead\n *\n * The SharePoint relative path to the current users mysite\n */\n mySitePath?: string;\n}\n\n/** Represents the parameters used to share a deep link. */\nexport interface ShareDeepLinkParameters {\n /**\n * The developer-defined unique ID for the sub-page to which this deep link points in the current page.\n * This field should be used to restore to a specific state within a page, such as scrolling to or activating a specific piece of content.\n */\n subPageId: string;\n\n /**\n * The label for the sub-page that should be displayed when the deep link is rendered in a client.\n */\n subPageLabel: string;\n\n /**\n * The fallback URL to which to navigate the user if the client cannot render the page.\n * This URL should lead directly to the sub-entity.\n */\n subPageWebUrl?: string;\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link ShareDeepLinkParameters} instead.\n */\nexport interface DeepLinkParameters {\n /**\n * The developer-defined unique ID for the sub-entity to which this deep link points in the current entity.\n * This field should be used to restore to a specific state within an entity, such as scrolling to or activating a specific piece of content.\n */\n subEntityId: string;\n\n /**\n * The label for the sub-entity that should be displayed when the deep link is rendered in a client.\n */\n subEntityLabel: string;\n\n /**\n * The fallback URL to which to navigate the user if the client cannot render the page.\n * This URL should lead directly to the sub-entity.\n */\n subEntityWebUrl?: string;\n}\n\n/**\n * @hidden\n * Shared Dialog Properties\n */\nexport interface BaseDialogInfo {\n /**\n * The requested size of the dialog\n */\n size: DialogSize;\n\n /**\n * Title of the dialog module.\n */\n title?: string;\n}\n\n/**\n * Data structure to describe dialog information needed to open an Adaptive Card-based dialog.\n */\nexport interface AdaptiveCardDialogInfo extends BaseDialogInfo {\n /**\n * JSON defining an Adaptive Card.\n */\n card: string;\n}\n\n/**\n * Data structure to describe dialog information needed to open a bot-based Adaptive Card-based dialog.\n */\nexport interface BotAdaptiveCardDialogInfo extends AdaptiveCardDialogInfo {\n /**\n * Specifies a bot ID to send the result of the user's interaction with the dialog module.\n * The bot will receive a task/complete invoke event with a JSON object\n * in the event payload.\n */\n completionBotId: string;\n}\n\n/**\n * Data structure to represent the size of a dialog\n */\nexport interface DialogSize {\n /**\n * The requested height of the webview/iframe.\n */\n height: DialogDimension | number;\n\n /**\n * The requested width of the webview/iframe.\n */\n width: DialogDimension | number;\n}\n\n/**\n * Data structure to describe dialog information needed to open a url-based dialog.\n */\nexport interface UrlDialogInfo extends BaseDialogInfo {\n /**\n * The url to be rendered in the webview/iframe.\n *\n * @remarks\n * The domain of the url must match at least one of the\n * valid domains specified in the [validDomains block](https://learn.microsoft.com/microsoftteams/platform/resources/schema/manifest-schema#validdomains) of the app manifest\n */\n url: string;\n\n /**\n * If client doesnt support the URL, the URL that needs to be opened in the browser.\n */\n fallbackUrl?: string;\n}\n\n/**\n * Data structure to describe dialog information needed to open a bot based dialog.\n */\nexport interface BotUrlDialogInfo extends UrlDialogInfo {\n /**\n * Specifies a bot ID to send the result of the user's interaction with the task module.\n * The bot will receive a task/complete invoke event with a JSON object\n * in the event payload.\n */\n completionBotId: string;\n}\n\n/**\n * Data structure to describe dialog information\n */\nexport interface DialogInfo {\n /**\n * The url to be rendered in the webview/iframe.\n *\n * @remarks\n * The domain of the url must match at least one of the\n * valid domains specified in the validDomains block of the manifest\n */\n url?: string;\n\n /**\n * JSON defining an adaptive card.\n */\n card?: string;\n\n /**\n * The requested height of the webview/iframe.\n */\n height?: DialogDimension | number;\n\n /**\n * The requested width of the webview/iframe.\n */\n width?: DialogDimension | number;\n\n /**\n * Title of the task module.\n */\n title?: string;\n\n /**\n * If client doesnt support the URL, the URL that needs to be opened in the browser.\n */\n fallbackUrl?: string;\n\n /**\n * Specifies a bot ID to send the result of the user's interaction with the task module.\n * If specified, the bot will receive a task/complete invoke event with a JSON object\n * in the event payload.\n */\n completionBotId?: string;\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link DialogInfo} instead.\n */\nexport type TaskInfo = DialogInfo;\n\n/**\n * @beta\n * Data structure to be used with the {@link teamsCore.registerOnLoadHandler teamsCore.registerOnLoadHandler(handler: (context: LoadContext) => void): void} to pass the context to the app.\n */\nexport interface LoadContext {\n /**\n * The entity that is requested to be loaded\n */\n entityId: string;\n\n /**\n * The content URL that is requested to be loaded\n */\n contentUrl: string;\n}\n\n/** Represents information about a frame within a tab or dialog module. */\nexport interface FrameInfo {\n /**\n * The current URL that needs to be used in the iframe if the tab is reloaded\n */\n contentUrl: string;\n\n /**\n * The current URL that needs to be used for opening the website when the user clicks on 'Go to website'\n */\n websiteUrl: string;\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link FrameInfo} instead.\n */\nexport type FrameContext = FrameInfo;\n\n/** Represents an error that occurs during the execution of an app or integration. */\nexport interface SdkError {\n /**\n error code\n */\n errorCode: ErrorCode;\n /**\n Optional description for the error. This may contain useful information for web-app developers.\n This string will not be localized and is not for end-user consumption. \n App should not depend on the string content. The exact value may change. This is only for debugging purposes.\n */\n message?: string;\n}\n\n/** Error codes used to identify different types of errors that can occur while developing apps. */\nexport enum ErrorCode {\n /**\n * API not supported in the current platform.\n */\n NOT_SUPPORTED_ON_PLATFORM = 100,\n /**\n * Internal error encountered while performing the required operation.\n */\n INTERNAL_ERROR = 500,\n /**\n * API is not supported in the current context\n */\n NOT_SUPPORTED_IN_CURRENT_CONTEXT = 501,\n /**\n Permissions denied by user\n */\n PERMISSION_DENIED = 1000,\n /**\n * Network issue\n */\n NETWORK_ERROR = 2000,\n /**\n * Underlying hardware doesn't support the capability\n */\n NO_HW_SUPPORT = 3000,\n /**\n * One or more arguments are invalid\n */\n INVALID_ARGUMENTS = 4000,\n /**\n * User is not authorized for this operation\n */\n UNAUTHORIZED_USER_OPERATION = 5000,\n /**\n * Could not complete the operation due to insufficient resources\n */\n INSUFFICIENT_RESOURCES = 6000,\n /**\n * Platform throttled the request because of API was invoked too frequently\n */\n THROTTLE = 7000,\n /**\n * User aborted the operation\n */\n USER_ABORT = 8000,\n /**\n * Could not complete the operation in the given time interval\n */\n OPERATION_TIMED_OUT = 8001,\n /**\n * Platform code is old and doesn't implement this API\n */\n OLD_PLATFORM = 9000,\n /**\n * The file specified was not found on the given location\n */\n FILE_NOT_FOUND = 404,\n /**\n * The return value is too big and has exceeded our size boundries\n */\n SIZE_EXCEEDED = 10000,\n}\n\n/** @hidden */\nexport enum DevicePermission {\n GeoLocation = 'geolocation',\n Media = 'media',\n}\n\n/** @hidden */\nexport interface HostVersionsInfo {\n adaptiveCardSchemaVersion?: AdaptiveCardVersion;\n}\n\n/**\n * Represents the major and minor versions of the Adaptive Card schema in the current host\n */\nexport interface AdaptiveCardVersion {\n /** Represents the major version number. */\n majorVersion: number;\n /** Represents the minor version number. */\n minorVersion: number;\n}\n","/** HostClientType represents the different client platforms on which host can be run. */\nexport enum HostClientType {\n /** Represents the desktop client of host, which is installed on a user's computer and runs as a standalone application. */\n desktop = 'desktop',\n /** Represents the web-based client of host, which runs in a web browser. */\n web = 'web',\n /** Represents the Android mobile client of host, which runs on Android devices such as smartphones and tablets. */\n android = 'android',\n /** Represents the iOS mobile client of host, which runs on iOS devices such as iPhones. */\n ios = 'ios',\n /** Represents the iPadOS client of host, which runs on iOS devices such as iPads. */\n ipados = 'ipados',\n /**\n * @deprecated\n * As of 2.0.0, please use {@link teamsRoomsWindows} instead.\n */\n rigel = 'rigel',\n /** Represents the client of host, which runs on surface hub devices. */\n surfaceHub = 'surfaceHub',\n /** Represents the client of host, which runs on Teams Rooms on Windows devices. More information on Microsoft Teams Rooms on Windows can be found [Microsoft Teams Rooms (Windows)](https://support.microsoft.com/office/microsoft-teams-rooms-windows-help-e667f40e-5aab-40c1-bd68-611fe0002ba2)*/\n teamsRoomsWindows = 'teamsRoomsWindows',\n /** Represents the client of host, which runs on Teams Rooms on Android devices. More information on Microsoft Teams Rooms on Android can be found [Microsoft Teams Rooms (Android)].(https://support.microsoft.com/office/get-started-with-teams-rooms-on-android-68517298-d513-46be-8d6d-d41db5e6b4b2)*/\n teamsRoomsAndroid = 'teamsRoomsAndroid',\n /** Represents the client of host, which runs on Teams phones. More information can be found [Microsoft Teams Phones](https://support.microsoft.com/office/get-started-with-teams-phones-694ca17d-3ecf-40ca-b45e-d21b2c442412) */\n teamsPhones = 'teamsPhones',\n /** Represents the client of host, which runs on Teams displays devices. More information can be found [Microsoft Teams Displays](https://support.microsoft.com/office/get-started-with-teams-displays-ff299825-7f13-4528-96c2-1d3437e6d4e6) */\n teamsDisplays = 'teamsDisplays',\n}\n\n/** HostName indicates the possible hosts for your application. */\nexport enum HostName {\n /**\n * Office.com and Office Windows App\n */\n office = 'Office',\n\n /**\n * For \"desktop\" specifically, this refers to the new, pre-release version of Outlook for Windows.\n * Also used on other platforms that map to a single Outlook client.\n */\n outlook = 'Outlook',\n\n /**\n * Outlook for Windows: the classic, native, desktop client\n */\n outlookWin32 = 'OutlookWin32',\n\n /**\n * Microsoft-internal test Host\n */\n orange = 'Orange',\n\n /**\n * Teams\n */\n teams = 'Teams',\n\n /**\n * Modern Teams\n */\n teamsModern = 'TeamsModern',\n}\n\n/**\n * FrameContexts provides information about the context in which the app is running within the host.\n * Developers can use FrameContexts to determine how their app should behave in different contexts,\n * and can use the information provided by the context to adapt the app to the user's needs.\n *\n * @example\n * If your app is running in the \"settings\" context, you should be displaying your apps configuration page.\n * If the app is running in the content context, the developer may want to display information relevant to\n * the content the user is currently viewing.\n */\nexport enum FrameContexts {\n /**\n * App's frame context from where settings page can be accessed.\n * See [how to create a configuration page.]( https://learn.microsoft.com/microsoftteams/platform/tabs/how-to/create-tab-pages/configuration-page?tabs=teamsjs-v2)\n */\n settings = 'settings',\n /** The default context for the app where all the content of the app is displayed. */\n content = 'content',\n /** Frame context used when app is running in the authentication window launched by calling {@link authentication.authenticate} */\n authentication = 'authentication',\n /** The page shown when the user uninstalls the app. */\n remove = 'remove',\n /** A task module is a pop-up window that can be used to display a form, a dialog, or other interactive content within the host. */\n task = 'task',\n /** The side panel is a persistent panel that is displayed on the right side of the host and can be used to display content or UI that is relevant to the current page or tab. */\n sidePanel = 'sidePanel',\n /** The stage is a large area that is displayed at the center of the host and can be used to display content or UI that requires a lot of space, such as a video player or a document editor. */\n stage = 'stage',\n /** App's frame context from where meetingStage can be accessed in a meeting session, which is the primary area where video and presentation content is displayed during a meeting. */\n meetingStage = 'meetingStage',\n}\n\n/**\n * Indicates the team type, currently used to distinguish between different team\n * types in Office 365 for Education (team types 1, 2, 3, and 4).\n */\nexport enum TeamType {\n /** Represents a standard or classic team in host that is designed for ongoing collaboration and communication among a group of people. */\n Standard = 0,\n /** Represents an educational team in host that is designed for classroom collaboration and communication among students and teachers. */\n Edu = 1,\n /** Represents a class team in host that is designed for classroom collaboration and communication among students and teachers in a structured environment. */\n Class = 2,\n /** Represents a professional learning community (PLC) team in host that is designed for educators to collaborate and share resources and best practices. */\n Plc = 3,\n /** Represents a staff team in host that is designed for staff collaboration and communication among staff members.*/\n Staff = 4,\n}\n\n/**\n * Indicates the various types of roles of a user in a team.\n */\nexport enum UserTeamRole {\n /** Represents that the user is an owner or administrator of the team. */\n Admin = 0,\n /** Represents that the user is a standard member of the team. */\n User = 1,\n /** Represents that the user does not have any role in the team. */\n Guest = 2,\n}\n\n/**\n * Dialog module dimension enum\n */\nexport enum DialogDimension {\n /** Represents a large-sized dialog box, which is typically used for displaying large amounts of content or complex workflows that require more space. */\n Large = 'large',\n /** Represents a medium-sized dialog box, which is typically used for displaying moderate amounts of content or workflows that require less space. */\n Medium = 'medium',\n /** Represents a small-sized dialog box, which is typically used for displaying simple messages or workflows that require minimal space.*/\n Small = 'small',\n}\n\nimport { AdaptiveCardVersion, ErrorCode, SdkError } from './interfaces';\n/**\n * @deprecated\n * As of 2.0.0, please use {@link DialogDimension} instead.\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport import TaskModuleDimension = DialogDimension;\nimport { HostVersionsInfo } from './interfaces';\n\n/**\n * The type of the channel with which the content is associated.\n */\nexport enum ChannelType {\n /** The default channel type. Type of channel is used for general collaboration and communication within a team. */\n Regular = 'Regular',\n /** Type of channel is used for sensitive or confidential communication within a team and is only accessible to members of the channel. */\n Private = 'Private',\n /** Type of channel is used for collaboration between multiple teams or groups and is accessible to members of all the teams or groups. */\n Shared = 'Shared',\n}\n\n/** An error object indicating that the requested operation or feature is not supported on the current platform or device.\n * @typedef {Object} SdkError\n */\nexport const errorNotSupportedOnPlatform: SdkError = { errorCode: ErrorCode.NOT_SUPPORTED_ON_PLATFORM };\n\n/**\n * @hidden\n *\n * Minimum Adaptive Card version supported by the host.\n */\nexport const minAdaptiveCardVersion: AdaptiveCardVersion = { majorVersion: 1, minorVersion: 5 };\n\n/**\n * @hidden\n *\n * Adaptive Card version supported by the Teams v1 client.\n */\nexport const teamsMinAdaptiveCardVersion: HostVersionsInfo = {\n adaptiveCardSchemaVersion: { majorVersion: 1, minorVersion: 5 },\n};\n","/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport * as uuid from 'uuid';\n\nimport { GlobalVars } from '../internal/globalVars';\nimport { minAdaptiveCardVersion } from '../public/constants';\nimport { AdaptiveCardVersion, SdkError } from '../public/interfaces';\nimport { pages } from '../public/pages';\nimport { validOrigins } from './constants';\n\n/**\n * @param pattern - reference pattern\n * @param host - candidate string\n * @returns returns true if host matches pre-know valid pattern\n *\n * @example\n * validateHostAgainstPattern('*.teams.microsoft.com', 'subdomain.teams.microsoft.com') returns true\n * validateHostAgainstPattern('teams.microsoft.com', 'team.microsoft.com') returns false\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction validateHostAgainstPattern(pattern: string, host: string): boolean {\n if (pattern.substring(0, 2) === '*.') {\n const suffix = pattern.substring(1);\n if (\n host.length > suffix.length &&\n host.split('.').length === suffix.split('.').length &&\n host.substring(host.length - suffix.length) === suffix\n ) {\n return true;\n }\n } else if (pattern === host) {\n return true;\n }\n return false;\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function validateOrigin(messageOrigin: URL): boolean {\n // Check whether the url is in the pre-known allowlist or supplied by user\n if (!isValidHttpsURL(messageOrigin)) {\n return false;\n }\n const messageOriginHost = messageOrigin.host;\n\n if (validOrigins.some((pattern) => validateHostAgainstPattern(pattern, messageOriginHost))) {\n return true;\n }\n\n for (const domainOrPattern of GlobalVars.additionalValidOrigins) {\n const pattern = domainOrPattern.substring(0, 8) === 'https://' ? domainOrPattern.substring(8) : domainOrPattern;\n if (validateHostAgainstPattern(pattern, messageOriginHost)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function getGenericOnCompleteHandler(errorMessage?: string): (success: boolean, reason?: string) => void {\n return (success: boolean, reason: string): void => {\n if (!success) {\n throw new Error(errorMessage ? errorMessage : reason);\n }\n };\n}\n\n/**\n * @hidden\n * Compares SDK versions.\n *\n * @param v1 - first version\n * @param v2 - second version\n * @returns NaN in case inputs are not in right format\n * -1 if v1 < v2\n * 1 if v1 > v2\n * 0 otherwise\n * @example\n * compareSDKVersions('1.2', '1.2.0') returns 0\n * compareSDKVersions('1.2a', '1.2b') returns NaN\n * compareSDKVersions('1.2', '1.3') returns -1\n * compareSDKVersions('2.0', '1.3.2') returns 1\n * compareSDKVersions('2.0', 2.0) returns NaN\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function compareSDKVersions(v1: string, v2: string): number {\n if (typeof v1 !== 'string' || typeof v2 !== 'string') {\n return NaN;\n }\n\n const v1parts = v1.split('.');\n const v2parts = v2.split('.');\n\n function isValidPart(x: string): boolean {\n // input has to have one or more digits\n // For ex - returns true for '11', false for '1a1', false for 'a', false for '2b'\n return /^\\d+$/.test(x);\n }\n\n if (!v1parts.every(isValidPart) || !v2parts.every(isValidPart)) {\n return NaN;\n }\n\n // Make length of both parts equal\n while (v1parts.length < v2parts.length) {\n v1parts.push('0');\n }\n while (v2parts.length < v1parts.length) {\n v2parts.push('0');\n }\n\n for (let i = 0; i < v1parts.length; ++i) {\n if (Number(v1parts[i]) == Number(v2parts[i])) {\n continue;\n } else if (Number(v1parts[i]) > Number(v2parts[i])) {\n return 1;\n } else {\n return -1;\n }\n }\n return 0;\n}\n\n/**\n * @hidden\n * Generates a GUID\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function generateGUID(): string {\n return uuid.v4();\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function deepFreeze(obj: T): T {\n Object.keys(obj).forEach((prop) => {\n if (typeof obj[prop] === 'object') {\n deepFreeze(obj[prop]);\n }\n });\n return Object.freeze(obj);\n}\n\n/**\n * @hidden\n * The following type definitions will be used in the\n * utility functions below, which help in transforming the\n * promises to support callbacks for backward compatibility\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport type ErrorResultCallback = (err?: SdkError, result?: T) => void;\nexport type ErrorResultNullCallback = (err: SdkError | null, result: T | null) => void;\nexport type ErrorBooleanResultCallback = (err?: SdkError, result?: boolean) => void;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InputFunction = (...args: any[]) => Promise;\nexport type ResultCallback = (result?: T) => void;\nexport type SdkErrorCallback = ResultCallback;\n\n/**\n * This utility function is used when the result of the promise is same as the result in the callback.\n * @param funcHelper\n * @param callback\n * @param args\n * @returns\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function callCallbackWithErrorOrResultFromPromiseAndReturnPromise(\n funcHelper: InputFunction,\n callback?: ErrorResultCallback,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...args: any[]\n): Promise {\n const p = funcHelper(...args);\n p.then((result: T) => {\n if (callback) {\n callback(undefined, result);\n }\n }).catch((e: SdkError) => {\n if (callback) {\n callback(e);\n }\n });\n return p;\n}\n\n/**\n * This utility function is used when the return type of the promise is usually void and\n * the result in the callback is a boolean type (true for success and false for error)\n * @param funcHelper\n * @param callback\n * @param args\n * @returns\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function callCallbackWithErrorOrBooleanFromPromiseAndReturnPromise(\n funcHelper: InputFunction,\n callback?: ErrorBooleanResultCallback,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...args: any[]\n): Promise {\n const p = funcHelper(...args);\n p.then(() => {\n if (callback) {\n callback(undefined, true);\n }\n }).catch((e: SdkError) => {\n if (callback) {\n callback(e, false);\n }\n });\n return p;\n}\n\n/**\n * This utility function is called when the callback has only Error/SdkError as the primary argument.\n * @param funcHelper\n * @param callback\n * @param args\n * @returns\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function callCallbackWithSdkErrorFromPromiseAndReturnPromise(\n funcHelper: InputFunction,\n callback?: SdkErrorCallback,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...args: any[]\n): Promise {\n const p = funcHelper(...args);\n p.then(() => {\n if (callback) {\n callback(null);\n }\n }).catch((e: SdkError) => {\n if (callback) {\n callback(e);\n }\n });\n return p;\n}\n\n/**\n * This utility function is used when the result of the promise is same as the result in the callback.\n * @param funcHelper\n * @param callback\n * @param args\n * @returns\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function callCallbackWithErrorOrResultOrNullFromPromiseAndReturnPromise(\n funcHelper: InputFunction,\n callback?: ErrorResultNullCallback,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...args: any[]\n): Promise {\n const p = funcHelper(...args);\n p.then((result: T) => {\n if (callback) {\n callback(null, result);\n }\n }).catch((e: SdkError) => {\n if (callback) {\n callback(e, null);\n }\n });\n return p;\n}\n\n/**\n * A helper function to add a timeout to an asynchronous operation.\n *\n * @param action Action to wrap the timeout around\n * @param timeoutInMs Timeout period in milliseconds\n * @param timeoutError Error to reject the promise with if timeout elapses before the action completed\n * @returns A promise which resolves to the result of provided action or rejects with a provided timeout error\n * if the initial action didn't complete within provided timeout.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function runWithTimeout(\n action: () => Promise,\n timeoutInMs: number,\n timeoutError: TError,\n): Promise {\n return new Promise((resolve, reject) => {\n const timeoutHandle = setTimeout(reject, timeoutInMs, timeoutError);\n action()\n .then((result) => {\n clearTimeout(timeoutHandle);\n resolve(result);\n })\n .catch((error) => {\n clearTimeout(timeoutHandle);\n reject(error);\n });\n });\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function createTeamsAppLink(params: pages.NavigateToAppParams): string {\n const url = new URL(\n 'https://teams.microsoft.com/l/entity/' +\n encodeURIComponent(params.appId) +\n '/' +\n encodeURIComponent(params.pageId),\n );\n\n if (params.webUrl) {\n url.searchParams.append('webUrl', params.webUrl);\n }\n if (params.channelId || params.subPageId) {\n url.searchParams.append('context', JSON.stringify({ channelId: params.channelId, subEntityId: params.subPageId }));\n }\n return url.toString();\n}\n\n/**\n * @hidden\n * Checks if the Adaptive Card schema version is supported by the host.\n * @param hostAdaptiveCardSchemaVersion Host's supported Adaptive Card version in the runtime.\n *\n * @returns true if the Adaptive Card Version is not supported and false if it is supported.\n */\nexport function isHostAdaptiveCardSchemaVersionUnsupported(\n hostAdaptiveCardSchemaVersion: AdaptiveCardVersion,\n): boolean {\n const versionCheck = compareSDKVersions(\n `${hostAdaptiveCardSchemaVersion.majorVersion}.${hostAdaptiveCardSchemaVersion.minorVersion}`,\n `${minAdaptiveCardVersion.majorVersion}.${minAdaptiveCardVersion.minorVersion}`,\n );\n if (versionCheck >= 0) {\n return false;\n } else {\n return true;\n }\n}\n\n/**\n * @hidden\n * Checks if a URL is a HTTPS protocol based URL.\n * @param url URL to be validated.\n *\n * @returns true if the URL is an https URL.\n */\nexport function isValidHttpsURL(url: URL): boolean {\n return url.protocol === 'https:';\n}\n","/* eslint-disable @typescript-eslint/ban-types */\n\nimport { errorRuntimeNotInitialized, errorRuntimeNotSupported } from '../internal/constants';\nimport { GlobalVars } from '../internal/globalVars';\nimport { getLogger } from '../internal/telemetry';\nimport { compareSDKVersions, deepFreeze } from '../internal/utils';\nimport { HostClientType, teamsMinAdaptiveCardVersion } from './constants';\nimport { HostVersionsInfo } from './interfaces';\n\nconst runtimeLogger = getLogger('runtime');\n\nexport interface IBaseRuntime {\n readonly apiVersion: number;\n readonly hostVersionsInfo?: HostVersionsInfo;\n readonly isLegacyTeams?: boolean;\n readonly supports?: {};\n}\n\n/**\n * Latest runtime interface version\n */\nexport type Runtime = IRuntimeV2;\n\nexport const latestRuntimeApiVersion = 2;\n\nfunction isLatestRuntimeVersion(runtime: IBaseRuntime): runtime is Runtime {\n return runtime.apiVersion === latestRuntimeApiVersion;\n}\n\ninterface IRuntimeV1 extends IBaseRuntime {\n readonly apiVersion: 1;\n readonly isLegacyTeams?: boolean;\n readonly supports: {\n readonly appEntity?: {};\n readonly appInstallDialog?: {};\n readonly barCode?: {};\n readonly calendar?: {};\n readonly call?: {};\n readonly chat?: {};\n readonly conversations?: {};\n readonly dialog?: {\n readonly bot?: {};\n readonly update?: {};\n };\n readonly geoLocation?: {\n readonly map?: {};\n };\n readonly location?: {};\n readonly logs?: {};\n readonly mail?: {};\n readonly meetingRoom?: {};\n readonly menus?: {};\n readonly monetization?: {};\n readonly notifications?: {};\n readonly pages?: {\n readonly appButton?: {};\n readonly backStack?: {};\n readonly config?: {};\n readonly currentApp?: {};\n readonly fullTrust?: {};\n readonly tabs?: {};\n };\n readonly people?: {};\n readonly permissions?: {};\n readonly profile?: {};\n readonly remoteCamera?: {};\n readonly search?: {};\n readonly sharing?: {};\n readonly stageView?: {};\n readonly teams?: {\n readonly fullTrust?: {\n readonly joinedTeams?: {};\n };\n };\n readonly teamsCore?: {};\n readonly video?: {\n readonly mediaStream?: {};\n readonly sharedFrame?: {};\n };\n readonly webStorage?: {};\n };\n}\n\ninterface IRuntimeV2 extends IBaseRuntime {\n readonly apiVersion: 2;\n readonly hostVersionsInfo?: HostVersionsInfo;\n readonly isLegacyTeams?: boolean;\n readonly supports: {\n readonly appEntity?: {};\n readonly appInstallDialog?: {};\n readonly appNotification?: {};\n readonly barCode?: {};\n readonly calendar?: {};\n readonly call?: {};\n readonly chat?: {};\n readonly conversations?: {};\n readonly dialog?: {\n readonly card?: {\n readonly bot?: {};\n };\n readonly url?: {\n readonly bot?: {};\n };\n readonly update?: {};\n };\n readonly geoLocation?: {\n readonly map?: {};\n };\n readonly interactive?: {};\n readonly secondaryBrowser?: {};\n readonly location?: {};\n readonly logs?: {};\n readonly mail?: {};\n readonly marketplace?: {};\n readonly meetingRoom?: {};\n readonly menus?: {};\n readonly monetization?: {};\n readonly notifications?: {};\n readonly pages?: {\n readonly appButton?: {};\n readonly backStack?: {};\n readonly config?: {};\n readonly currentApp?: {};\n readonly fullTrust?: {};\n readonly tabs?: {};\n };\n readonly people?: {};\n readonly permissions?: {};\n readonly profile?: {};\n readonly remoteCamera?: {};\n readonly search?: {};\n readonly sharing?: {};\n readonly stageView?: {};\n readonly teams?: {\n readonly fullTrust?: {\n readonly joinedTeams?: {};\n };\n };\n readonly teamsCore?: {};\n readonly video?: {\n readonly mediaStream?: {};\n readonly sharedFrame?: {};\n };\n readonly webStorage?: {};\n };\n}\n\n// Constant used to set the runtime configuration\nconst _uninitializedRuntime: UninitializedRuntime = {\n apiVersion: -1,\n supports: {},\n};\n\ninterface UninitializedRuntime extends IBaseRuntime {\n readonly apiVersion: -1;\n readonly supports: {};\n}\n\n/**\n * @hidden\n * Ensures that the runtime has been initialized\n\n * @returns True if the runtime has been initialized\n * @throws Error if the runtime has not been initialized\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function isRuntimeInitialized(runtime: IBaseRuntime): runtime is Runtime {\n if (isLatestRuntimeVersion(runtime)) {\n return true;\n } else if (runtime.apiVersion === -1) {\n throw new Error(errorRuntimeNotInitialized);\n } else {\n throw new Error(errorRuntimeNotSupported);\n }\n}\n\nexport let runtime: Runtime | UninitializedRuntime = _uninitializedRuntime;\n\nexport const teamsRuntimeConfig: Runtime = {\n apiVersion: 2,\n hostVersionsInfo: teamsMinAdaptiveCardVersion,\n isLegacyTeams: true,\n supports: {\n appInstallDialog: {},\n appEntity: {},\n call: {},\n chat: {},\n conversations: {},\n dialog: {\n card: {\n bot: {},\n },\n url: {\n bot: {},\n },\n update: {},\n },\n interactive: {},\n logs: {},\n meetingRoom: {},\n menus: {},\n monetization: {},\n notifications: {},\n pages: {\n appButton: {},\n tabs: {},\n config: {},\n backStack: {},\n fullTrust: {},\n },\n remoteCamera: {},\n stageView: {},\n teams: {\n fullTrust: {},\n },\n teamsCore: {},\n video: {\n sharedFrame: {},\n },\n },\n};\n\ninterface ICapabilityReqs {\n readonly capability: object;\n readonly hostClientTypes: Array;\n}\n\nexport const v1HostClientTypes = [\n HostClientType.desktop,\n HostClientType.web,\n HostClientType.android,\n HostClientType.ios,\n HostClientType.rigel,\n HostClientType.surfaceHub,\n HostClientType.teamsRoomsWindows,\n HostClientType.teamsRoomsAndroid,\n HostClientType.teamsPhones,\n HostClientType.teamsDisplays,\n];\n\n/**\n * @hidden\n * `upgradeToNextVersion` transforms runtime of version `versionToUpgradeFrom` to the next higher version\n *\n * @internal\n * Limited to Microsoft-internal use\n */\ninterface IRuntimeUpgrade {\n versionToUpgradeFrom: number;\n upgradeToNextVersion: (previousVersionRuntime: IBaseRuntime) => IBaseRuntime;\n}\n\n/**\n * @hidden\n * Uses upgradeChain to transform an outdated runtime object to the latest format.\n * @param outdatedRuntime - The runtime object to be upgraded\n * @returns The upgraded runtime object\n * @throws Error if the runtime object could not be upgraded to the latest version\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function fastForwardRuntime(outdatedRuntime: IBaseRuntime): Runtime {\n let runtime = outdatedRuntime;\n if (runtime.apiVersion < latestRuntimeApiVersion) {\n upgradeChain.forEach((upgrade) => {\n if (runtime.apiVersion === upgrade.versionToUpgradeFrom) {\n runtime = upgrade.upgradeToNextVersion(runtime);\n }\n });\n }\n if (isLatestRuntimeVersion(runtime)) {\n return runtime;\n } else {\n throw new Error('Received a runtime that could not be upgraded to the latest version');\n }\n}\n\n/**\n * @hidden\n * List of transformations required to upgrade a runtime object from a previous version to the next higher version.\n * This list must be ordered from lowest version to highest version\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const upgradeChain: IRuntimeUpgrade[] = [\n // This upgrade has been included for testing, it may be removed when there is a real upgrade implemented\n {\n versionToUpgradeFrom: 1,\n upgradeToNextVersion: (previousVersionRuntime: IRuntimeV1): IRuntimeV2 => {\n return {\n apiVersion: 2,\n hostVersionsInfo: undefined,\n isLegacyTeams: previousVersionRuntime.isLegacyTeams,\n supports: {\n ...previousVersionRuntime.supports,\n dialog: previousVersionRuntime.supports.dialog\n ? {\n card: undefined,\n url: previousVersionRuntime.supports.dialog,\n update: previousVersionRuntime.supports.dialog?.update,\n }\n : undefined,\n },\n };\n },\n },\n];\n\nexport const versionConstants: Record> = {\n '1.9.0': [\n {\n capability: { location: {} },\n hostClientTypes: v1HostClientTypes,\n },\n ],\n '2.0.0': [\n {\n capability: { people: {} },\n hostClientTypes: v1HostClientTypes,\n },\n {\n capability: { sharing: {} },\n hostClientTypes: [HostClientType.desktop, HostClientType.web],\n },\n ],\n '2.0.1': [\n {\n capability: { teams: { fullTrust: { joinedTeams: {} } } },\n hostClientTypes: [\n HostClientType.android,\n HostClientType.desktop,\n HostClientType.ios,\n HostClientType.teamsRoomsAndroid,\n HostClientType.teamsPhones,\n HostClientType.teamsDisplays,\n HostClientType.web,\n ],\n },\n {\n capability: { webStorage: {} },\n hostClientTypes: [HostClientType.desktop],\n },\n ],\n '2.0.5': [\n {\n capability: { webStorage: {} },\n hostClientTypes: [HostClientType.android, HostClientType.desktop, HostClientType.ios],\n },\n ],\n};\n\nconst generateBackCompatRuntimeConfigLogger = runtimeLogger.extend('generateBackCompatRuntimeConfig');\n/**\n * @internal\n * Limited to Microsoft-internal use\n *\n * Generates and returns a runtime configuration for host clients which are not on the latest host SDK version\n * and do not provide their own runtime config. Their supported capabilities are based on the highest\n * client SDK version that they can support.\n *\n * @param highestSupportedVersion - The highest client SDK version that the host client can support.\n * @returns runtime which describes the APIs supported by the legacy host client.\n */\nexport function generateBackCompatRuntimeConfig(highestSupportedVersion: string): Runtime {\n generateBackCompatRuntimeConfigLogger('generating back compat runtime config for %s', highestSupportedVersion);\n\n let newSupports = { ...teamsRuntimeConfig.supports };\n\n generateBackCompatRuntimeConfigLogger(\n 'Supported capabilities in config before updating based on highestSupportedVersion: %o',\n newSupports,\n );\n\n Object.keys(versionConstants).forEach((versionNumber) => {\n if (compareSDKVersions(highestSupportedVersion, versionNumber) >= 0) {\n versionConstants[versionNumber].forEach((capabilityReqs) => {\n if (capabilityReqs.hostClientTypes.includes(GlobalVars.hostClientType)) {\n newSupports = {\n ...newSupports,\n ...capabilityReqs.capability,\n };\n }\n });\n }\n });\n\n const backCompatRuntimeConfig: Runtime = {\n apiVersion: 2,\n hostVersionsInfo: teamsMinAdaptiveCardVersion,\n isLegacyTeams: true,\n supports: newSupports,\n };\n\n generateBackCompatRuntimeConfigLogger(\n 'Runtime config after updating based on highestSupportedVersion: %o',\n backCompatRuntimeConfig,\n );\n\n return backCompatRuntimeConfig;\n}\n\nconst applyRuntimeConfigLogger = runtimeLogger.extend('applyRuntimeConfig');\nexport function applyRuntimeConfig(runtimeConfig: IBaseRuntime): void {\n // Some hosts that have not adopted runtime versioning send a string for apiVersion, so we should handle those as v1 inputs\n if (typeof runtimeConfig.apiVersion === 'string') {\n applyRuntimeConfigLogger('Trying to apply runtime with string apiVersion, processing as v1: %o', runtimeConfig);\n runtimeConfig = {\n ...runtimeConfig,\n apiVersion: 1,\n };\n }\n applyRuntimeConfigLogger('Fast-forwarding runtime %o', runtimeConfig);\n const ffRuntimeConfig = fastForwardRuntime(runtimeConfig);\n applyRuntimeConfigLogger('Applying runtime %o', ffRuntimeConfig);\n runtime = deepFreeze(ffRuntimeConfig);\n}\n\nexport function setUnitializedRuntime(): void {\n runtime = deepFreeze(_uninitializedRuntime);\n}\n\n/**\n * @hidden\n * Constant used to set minimum runtime configuration\n * while un-initializing an app in unit test case.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const _minRuntimeConfigToUninitialize: Runtime = {\n apiVersion: 2,\n supports: {\n pages: {\n appButton: {},\n tabs: {},\n config: {},\n backStack: {},\n fullTrust: {},\n },\n teamsCore: {},\n logs: {},\n },\n};\n","import {\n Communication,\n sendMessageEventToChild,\n sendMessageToParent,\n sendMessageToParentAsync,\n waitForMessageQueue,\n} from '../internal/communication';\nimport { GlobalVars } from '../internal/globalVars';\nimport { registerHandler, removeHandler } from '../internal/handlers';\nimport { ensureInitializeCalled, ensureInitialized } from '../internal/internalAPIs';\nimport { FrameContexts, HostClientType } from './constants';\nimport { runtime } from './runtime';\n\n/**\n * Namespace to interact with the authentication-specific part of the SDK.\n *\n * This object is used for starting or completing authentication flows.\n */\nexport namespace authentication {\n let authHandlers: { success: (string) => void; fail: (string) => void } | undefined;\n let authWindowMonitor: number | undefined;\n\n /**\n * @hidden\n * @internal\n * Limited to Microsoft-internal use; automatically called when library is initialized\n */\n export function initialize(): void {\n registerHandler('authentication.authenticate.success', handleSuccess, false);\n registerHandler('authentication.authenticate.failure', handleFailure, false);\n }\n\n let authParams: AuthenticateParameters | undefined;\n /**\n * @deprecated\n * As of 2.0.0, this function has been deprecated in favor of a Promise-based pattern using {@link authentication.authenticate authentication.authenticate(authenticateParameters: AuthenticatePopUpParameters): Promise\\}\n *\n * Registers handlers to be called with the result of an authentication flow triggered using {@link authentication.authenticate authentication.authenticate(authenticateParameters?: AuthenticateParameters): void}\n *\n * @param authenticateParameters - Configuration for authentication flow pop-up result communication\n */\n export function registerAuthenticationHandlers(authenticateParameters: AuthenticateParameters): void {\n authParams = authenticateParameters;\n }\n\n /**\n * Initiates an authentication flow which requires a new window.\n * There are two primary uses for this function:\n * 1. When your app needs to authenticate using a 3rd-party identity provider (not Microsoft Entra ID)\n * 2. When your app needs to show authentication UI that is blocked from being shown in an iframe (e.g., Microsoft Entra consent prompts)\n *\n * For more details, see [Enable authentication using third-party OAuth provider](https://learn.microsoft.com/microsoftteams/platform/tabs/how-to/authentication/auth-flow-tab)\n *\n * This function is *not* needed for \"standard\" Microsoft Entra SSO usage. Using {@link getAuthToken} is usually sufficient in that case. For more, see\n * [Enable SSO for tab apps](https://learn.microsoft.com/microsoftteams/platform/tabs/how-to/authentication/tab-sso-overview))\n *\n * @remarks\n * The authentication flow must start and end from the same domain, otherwise success and failure messages won't be returned to the window that initiated the call.\n * The [Teams authentication flow](https://learn.microsoft.com/microsoftteams/platform/tabs/how-to/authentication/auth-flow-tab) starts and ends at an endpoint on\n * your own service (with a redirect round-trip to the 3rd party identity provider in the middle).\n *\n * @param authenticateParameters - Parameters describing the authentication window used for executing the authentication flow\n *\n * @returns `Promise` that will be fulfilled with the result from the authentication pop-up, if successful. The string in this result is provided in the parameter\n * passed by your app when it calls {@link notifySuccess} in the pop-up window after returning from the identity provider redirect.\n *\n * @throws `Error` if the authentication request fails or is canceled by the user. This error is provided in the parameter passed by your app when it calls\n * {@link notifyFailure} in the pop-up window after returning from the identity provider redirect. However, in some cases it can also be provided by\n * the infrastructure depending on the failure (e.g., a user cancelation)\n *\n */\n export function authenticate(authenticateParameters: AuthenticatePopUpParameters): Promise;\n /**\n * @deprecated\n * As of 2.0.0, please use {@link authentication.authenticate authentication.authenticate(authenticateParameters: AuthenticatePopUpParameters): Promise\\} instead.\n *\n * The documentation for {@link authentication.authenticate authentication.authenticate(authenticateParameters: AuthenticatePopUpParameters): Promise\\} applies\n * to this function.\n * The one difference is that instead of the result being returned via the `Promise`, the result is returned to the callback functions provided in the\n * `authenticateParameters` parameter.\n *\n * @param authenticateParameters - Parameters describing the authentication window used for executing the authentication flow and callbacks used for indicating the result\n *\n */\n export function authenticate(authenticateParameters?: AuthenticateParameters): void;\n export function authenticate(authenticateParameters?: AuthenticateParameters): Promise {\n const isDifferentParamsInCall: boolean = authenticateParameters !== undefined;\n const authenticateParams: AuthenticateParameters | undefined = isDifferentParamsInCall\n ? authenticateParameters\n : authParams;\n if (!authenticateParams) {\n throw new Error('No parameters are provided for authentication');\n }\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.sidePanel,\n FrameContexts.settings,\n FrameContexts.remove,\n FrameContexts.task,\n FrameContexts.stage,\n FrameContexts.meetingStage,\n );\n return authenticateHelper(authenticateParams)\n .then((value: string) => {\n try {\n if (authenticateParams && authenticateParams.successCallback) {\n authenticateParams.successCallback(value);\n return '';\n }\n return value;\n } finally {\n if (!isDifferentParamsInCall) {\n authParams = null;\n }\n }\n })\n .catch((err: Error) => {\n try {\n if (authenticateParams && authenticateParams.failureCallback) {\n authenticateParams.failureCallback(err.message);\n return '';\n }\n throw err;\n } finally {\n if (!isDifferentParamsInCall) {\n authParams = null;\n }\n }\n });\n }\n\n function authenticateHelper(authenticateParameters: AuthenticateParameters): Promise {\n return new Promise((resolve, reject) => {\n if (\n GlobalVars.hostClientType === HostClientType.desktop ||\n GlobalVars.hostClientType === HostClientType.android ||\n GlobalVars.hostClientType === HostClientType.ios ||\n GlobalVars.hostClientType === HostClientType.ipados ||\n GlobalVars.hostClientType === HostClientType.rigel ||\n GlobalVars.hostClientType === HostClientType.teamsRoomsWindows ||\n GlobalVars.hostClientType === HostClientType.teamsRoomsAndroid ||\n GlobalVars.hostClientType === HostClientType.teamsPhones ||\n GlobalVars.hostClientType === HostClientType.teamsDisplays\n ) {\n // Convert any relative URLs into absolute URLs before sending them over to the parent window.\n const link = document.createElement('a');\n link.href = authenticateParameters.url;\n // Ask the parent window to open an authentication window with the parameters provided by the caller.\n resolve(\n sendMessageToParentAsync<[boolean, string]>('authentication.authenticate', [\n link.href,\n authenticateParameters.width,\n authenticateParameters.height,\n authenticateParameters.isExternal,\n ]).then(([success, response]: [boolean, string]) => {\n if (success) {\n return response;\n } else {\n throw new Error(response);\n }\n }),\n );\n } else {\n // Open an authentication window with the parameters provided by the caller.\n authHandlers = {\n success: resolve,\n fail: reject,\n };\n openAuthenticationWindow(authenticateParameters);\n }\n });\n }\n\n /**\n * Requests an Microsoft Entra token to be issued on behalf of your app in an SSO flow.\n * The token is acquired from the cache if it is not expired. Otherwise a request is sent to Microsoft Entra to\n * obtain a new token.\n * This function is used to enable SSO scenarios. See [Enable SSO for tab apps](https://learn.microsoft.com/microsoftteams/platform/tabs/how-to/authentication/tab-sso-overview)\n * for more details.\n *\n * @param authTokenRequest - An optional set of values that configure the token request.\n *\n * @returns `Promise` that will be resolved with the token, if successful.\n *\n * @throws `Error` if the request fails in some way\n */\n export function getAuthToken(authTokenRequest?: AuthTokenRequestParameters): Promise;\n /**\n * @deprecated\n * As of 2.0.0, please use {@link authentication.getAuthToken authentication.getAuthToken(authTokenRequest: AuthTokenRequestParameters): Promise\\} instead.\n *\n * The documentation {@link authentication.getAuthToken authentication.getAuthToken(authTokenRequest: AuthTokenRequestParameters): Promise\\} applies to this\n * function as well. The one difference when using this function is that the result is provided in the callbacks in the `authTokenRequest` parameter\n * instead of as a `Promise`.\n *\n * @param authTokenRequest - An optional set of values that configure the token request.\n * It contains callbacks to call in case of success/failure\n */\n export function getAuthToken(authTokenRequest?: AuthTokenRequest): void;\n export function getAuthToken(authTokenRequest?: AuthTokenRequest): Promise {\n ensureInitializeCalled();\n return getAuthTokenHelper(authTokenRequest)\n .then((value: string) => {\n if (authTokenRequest && authTokenRequest.successCallback) {\n authTokenRequest.successCallback(value);\n return '';\n }\n return value;\n })\n .catch((err: Error) => {\n if (authTokenRequest && authTokenRequest.failureCallback) {\n authTokenRequest.failureCallback(err.message);\n return '';\n }\n throw err;\n });\n }\n\n function getAuthTokenHelper(authTokenRequest?: AuthTokenRequest): Promise {\n return new Promise<[boolean, string]>((resolve) => {\n resolve(\n sendMessageToParentAsync('authentication.getAuthToken', [\n authTokenRequest?.resources,\n authTokenRequest?.claims,\n authTokenRequest?.silent,\n ]),\n );\n }).then(([success, result]: [boolean, string]) => {\n if (success) {\n return result;\n } else {\n throw new Error(result);\n }\n });\n }\n\n /**\n * @hidden\n * Requests the decoded Microsoft Entra user identity on behalf of the app.\n *\n * @returns Promise that resolves with the {@link UserProfile}.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getUser(): Promise;\n /**\n * @deprecated\n * As of 2.0.0, please use {@link authentication.getUser authentication.getUser(): Promise\\} instead.\n *\n * @hidden\n * Requests the decoded Microsoft Entra user identity on behalf of the app.\n *\n * @param userRequest - It passes success/failure callbacks in the userRequest object(deprecated)\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getUser(userRequest: UserRequest): void;\n export function getUser(userRequest?: UserRequest): Promise {\n ensureInitializeCalled();\n return getUserHelper()\n .then((value: UserProfile) => {\n if (userRequest && userRequest.successCallback) {\n userRequest.successCallback(value);\n return null;\n }\n return value;\n })\n .catch((err: Error) => {\n if (userRequest && userRequest.failureCallback) {\n userRequest.failureCallback(err.message);\n return null;\n }\n throw err;\n });\n }\n\n function getUserHelper(): Promise {\n return new Promise<[boolean, UserProfile | string]>((resolve) => {\n resolve(sendMessageToParentAsync('authentication.getUser'));\n }).then(([success, result]: [boolean, UserProfile | string]) => {\n if (success) {\n return result as UserProfile;\n } else {\n throw new Error(result as string);\n }\n });\n }\n\n function closeAuthenticationWindow(): void {\n // Stop monitoring the authentication window\n stopAuthenticationWindowMonitor();\n // Try to close the authentication window and clear all properties associated with it\n try {\n if (Communication.childWindow) {\n Communication.childWindow.close();\n }\n } finally {\n Communication.childWindow = null;\n Communication.childOrigin = null;\n }\n }\n\n function openAuthenticationWindow(authenticateParameters: AuthenticateParameters): void {\n // Close the previously opened window if we have one\n closeAuthenticationWindow();\n // Start with a sensible default size\n let width = authenticateParameters.width || 600;\n let height = authenticateParameters.height || 400;\n // Ensure that the new window is always smaller than our app's window so that it never fully covers up our app\n width = Math.min(width, Communication.currentWindow.outerWidth - 400);\n height = Math.min(height, Communication.currentWindow.outerHeight - 200);\n // Convert any relative URLs into absolute URLs before sending them over to the parent window\n const link = document.createElement('a');\n link.href = authenticateParameters.url.replace('{oauthRedirectMethod}', 'web');\n // We are running in the browser, so we need to center the new window ourselves\n let left: number =\n typeof Communication.currentWindow.screenLeft !== 'undefined'\n ? Communication.currentWindow.screenLeft\n : Communication.currentWindow.screenX;\n let top: number =\n typeof Communication.currentWindow.screenTop !== 'undefined'\n ? Communication.currentWindow.screenTop\n : Communication.currentWindow.screenY;\n left += Communication.currentWindow.outerWidth / 2 - width / 2;\n top += Communication.currentWindow.outerHeight / 2 - height / 2;\n // Open a child window with a desired set of standard browser features\n Communication.childWindow = Communication.currentWindow.open(\n link.href,\n '_blank',\n 'toolbar=no, location=yes, status=no, menubar=no, scrollbars=yes, top=' +\n top +\n ', left=' +\n left +\n ', width=' +\n width +\n ', height=' +\n height,\n );\n if (Communication.childWindow) {\n // Start monitoring the authentication window so that we can detect if it gets closed before the flow completes\n startAuthenticationWindowMonitor();\n } else {\n // If we failed to open the window, fail the authentication flow\n handleFailure('FailedToOpenWindow');\n }\n }\n\n function stopAuthenticationWindowMonitor(): void {\n if (authWindowMonitor) {\n clearInterval(authWindowMonitor);\n authWindowMonitor = 0;\n }\n removeHandler('initialize');\n removeHandler('navigateCrossDomain');\n }\n\n function startAuthenticationWindowMonitor(): void {\n // Stop the previous window monitor if one is running\n stopAuthenticationWindowMonitor();\n // Create an interval loop that\n // - Notifies the caller of failure if it detects that the authentication window is closed\n // - Keeps pinging the authentication window while it is open to re-establish\n // contact with any pages along the authentication flow that need to communicate\n // with us\n authWindowMonitor = Communication.currentWindow.setInterval(() => {\n if (!Communication.childWindow || Communication.childWindow.closed) {\n handleFailure('CancelledByUser');\n } else {\n const savedChildOrigin = Communication.childOrigin;\n try {\n Communication.childOrigin = '*';\n sendMessageEventToChild('ping');\n } finally {\n Communication.childOrigin = savedChildOrigin;\n }\n }\n }, 100);\n // Set up an initialize-message handler that gives the authentication window its frame context\n registerHandler('initialize', () => {\n return [FrameContexts.authentication, GlobalVars.hostClientType];\n });\n // Set up a navigateCrossDomain message handler that blocks cross-domain re-navigation attempts\n // in the authentication window. We could at some point choose to implement this method via a call to\n // authenticationWindow.location.href = url; however, we would first need to figure out how to\n // validate the URL against the tab's list of valid domains.\n registerHandler('navigateCrossDomain', () => {\n return false;\n });\n }\n\n /**\n * When using {@link authentication.authenticate authentication.authenticate(authenticateParameters: AuthenticatePopUpParameters): Promise\\}, the\n * window that was opened to execute the authentication flow should call this method after authentiction to notify the caller of\n * {@link authentication.authenticate authentication.authenticate(authenticateParameters: AuthenticatePopUpParameters): Promise\\} that the\n * authentication request was successful.\n *\n * @remarks\n * This function is usable only from the authentication window.\n * This call causes the authentication window to be closed.\n *\n * @param result - Specifies a result for the authentication. If specified, the frame that initiated the authentication pop-up receives\n * this value in its callback or via the `Promise` return value\n * @param callbackUrl - Specifies the url to redirect back to if the client is Win32 Outlook.\n */\n export function notifySuccess(result?: string, callbackUrl?: string): void {\n redirectIfWin32Outlook(callbackUrl, 'result', result);\n ensureInitialized(runtime, FrameContexts.authentication);\n sendMessageToParent('authentication.authenticate.success', [result]);\n // Wait for the message to be sent before closing the window\n waitForMessageQueue(Communication.parentWindow, () => setTimeout(() => Communication.currentWindow.close(), 200));\n }\n\n /**\n * When using {@link authentication.authenticate authentication.authenticate(authenticateParameters: AuthenticatePopUpParameters): Promise\\}, the\n * window that was opened to execute the authentication flow should call this method after authentiction to notify the caller of\n * {@link authentication.authenticate authentication.authenticate(authenticateParameters: AuthenticatePopUpParameters): Promise\\} that the\n * authentication request failed.\n\n *\n * @remarks\n * This function is usable only on the authentication window.\n * This call causes the authentication window to be closed.\n *\n * @param result - Specifies a result for the authentication. If specified, the frame that initiated the authentication pop-up receives\n * this value in its callback or via the `Promise` return value\n * @param callbackUrl - Specifies the url to redirect back to if the client is Win32 Outlook.\n */\n export function notifyFailure(reason?: string, callbackUrl?: string): void {\n redirectIfWin32Outlook(callbackUrl, 'reason', reason);\n ensureInitialized(runtime, FrameContexts.authentication);\n sendMessageToParent('authentication.authenticate.failure', [reason]);\n // Wait for the message to be sent before closing the window\n waitForMessageQueue(Communication.parentWindow, () => setTimeout(() => Communication.currentWindow.close(), 200));\n }\n\n function handleSuccess(result?: string): void {\n try {\n if (authHandlers) {\n authHandlers.success(result);\n }\n } finally {\n authHandlers = null;\n closeAuthenticationWindow();\n }\n }\n\n function handleFailure(reason?: string): void {\n try {\n if (authHandlers) {\n authHandlers.fail(new Error(reason));\n }\n } finally {\n authHandlers = null;\n closeAuthenticationWindow();\n }\n }\n\n /**\n * Validates that the callbackUrl param is a valid connector url, appends the result/reason and authSuccess/authFailure as URL fragments and redirects the window\n * @param callbackUrl - the connectors url to redirect to\n * @param key - \"result\" in case of success and \"reason\" in case of failure\n * @param value - the value of the passed result/reason parameter\n */\n function redirectIfWin32Outlook(callbackUrl?: string, key?: string, value?: string): void {\n if (callbackUrl) {\n const link = document.createElement('a');\n link.href = decodeURIComponent(callbackUrl);\n if (\n link.host &&\n link.host !== window.location.host &&\n link.host === 'outlook.office.com' &&\n link.search.indexOf('client_type=Win32_Outlook') > -1\n ) {\n if (key && key === 'result') {\n if (value) {\n link.href = updateUrlParameter(link.href, 'result', value);\n }\n Communication.currentWindow.location.assign(updateUrlParameter(link.href, 'authSuccess', ''));\n }\n if (key && key === 'reason') {\n if (value) {\n link.href = updateUrlParameter(link.href, 'reason', value);\n }\n Communication.currentWindow.location.assign(updateUrlParameter(link.href, 'authFailure', ''));\n }\n }\n }\n }\n\n /**\n * Appends either result or reason as a fragment to the 'callbackUrl'\n * @param uri - the url to modify\n * @param key - the fragment key\n * @param value - the fragment value\n */\n function updateUrlParameter(uri: string, key: string, value: string): string {\n const i = uri.indexOf('#');\n let hash = i === -1 ? '#' : uri.substr(i);\n hash = hash + '&' + key + (value !== '' ? '=' + value : '');\n uri = i === -1 ? uri : uri.substr(0, i);\n return uri + hash;\n }\n\n /**\n * @deprecated\n * As of 2.0.0, this interface has been deprecated in favor of leveraging the `Promise` returned from {@link authentication.authenticate authentication.authenticate(authenticateParameters: AuthenticatePopUpParameters): Promise\\}\n *-------------------------\n * Used in {@link AuthenticateParameters} and {@link AuthTokenRequest}\n */\n export interface LegacyCallBacks {\n /**\n * @deprecated\n * As of 2.0.0, this property has been deprecated in favor of a Promise-based pattern.\n *\n * A function that is called if the request succeeds.\n */\n successCallback?: (result: string) => void;\n /**\n * @deprecated\n * As of 2.0.0, this property has been deprecated in favor of a Promise-based pattern.\n *\n * A function that is called if the request fails, with the reason for the failure.\n */\n failureCallback?: (reason: string) => void;\n }\n\n /**\n * Describes the authentication pop-up parameters\n */\n export interface AuthenticatePopUpParameters {\n /**\n * The URL for the authentication pop-up.\n */\n url: string;\n /**\n * The preferred width for the pop-up. This value can be ignored if outside the acceptable bounds.\n */\n width?: number;\n /**\n * The preferred height for the pop-up. This value can be ignored if outside the acceptable bounds.\n */\n height?: number;\n /**\n * Some identity providers restrict their authentication pages from being displayed in embedded browsers (e.g., a web view inside of a native application)\n * If the identity provider you are using prevents embedded browser usage, this flag should be set to `true` to enable the authentication page specified in\n * the {@link url} property to be opened in an external browser.\n * If this flag is `false`, the page will be opened directly within the current hosting application.\n *\n * This flag is ignored when the host for the application is a web app (as opposed to a native application) as the behavior is unnecessary in a web-only\n * environment without an embedded browser.\n */\n isExternal?: boolean;\n }\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link authentication.authenticate authentication.authenticate(authenticateParameters: AuthenticatePopUpParameters): Promise\\} and\n * the associated {@link AuthenticatePopUpParameters} instead.\n *\n * @see {@link LegacyCallBacks}\n */\n export type AuthenticateParameters = AuthenticatePopUpParameters & LegacyCallBacks;\n\n /**\n * Describes authentication token request parameters\n */\n export interface AuthTokenRequestParameters {\n /**\n * @hidden\n * @internal\n * An list of resources for which to acquire the access token; only for internal Microsoft usage\n */\n resources?: string[];\n /**\n * An optional list of claims which to pass to Microsoft Entra when requesting the access token.\n */\n claims?: string[];\n /**\n * An optional flag indicating whether to attempt the token acquisition silently or allow a prompt to be shown.\n */\n silent?: boolean;\n }\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link AuthTokenRequestParameters} instead.\n */\n export type AuthTokenRequest = AuthTokenRequestParameters & LegacyCallBacks;\n\n /**\n * @hidden\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface UserProfile {\n /**\n * @hidden\n * The intended recipient of the token. The application that receives the token must verify that the audience\n * value is correct and reject any tokens intended for a different audience.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n aud: string;\n /**\n * @hidden\n * Identifies how the subject of the token was authenticated.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n amr: string[];\n /**\n * @hidden\n * Stores the time at which the token was issued. It is often used to measure token freshness.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n iat: number;\n /**\n * @hidden\n * Identifies the security token service (STS) that constructs and returns the token. In the tokens that Microsoft Entra\n * returns, the issuer is sts.windows.net. The GUID in the issuer claim value is the tenant ID of the Microsoft Entra\n * directory. The tenant ID is an immutable and reliable identifier of the directory.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n iss: string;\n /**\n * @hidden\n * Provides the last name, surname, or family name of the user as defined in the Microsoft Entra user object.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n family_name: string;\n /**\n * @hidden\n * Provides the first or \"given\" name of the user, as set on the Microsoft Entra user object.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n given_name: string;\n /**\n * @hidden\n * Provides a human-readable value that identifies the subject of the token. This value is not guaranteed to\n * be unique within a tenant and is designed to be used only for display purposes.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n unique_name: string;\n /**\n * @hidden\n * Contains a unique identifier of an object in Microsoft Entra. This value is immutable and cannot be reassigned or\n * reused. Use the object ID to identify an object in queries to Microsoft Entra.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n oid: string;\n /**\n * @hidden\n * Identifies the principal about which the token asserts information, such as the user of an application.\n * This value is immutable and cannot be reassigned or reused, so it can be used to perform authorization\n * checks safely. Because the subject is always present in the tokens the Microsoft Entra issues, we recommended\n * using this value in a general-purpose authorization system.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n sub: string;\n /**\n * @hidden\n * An immutable, non-reusable identifier that identifies the directory tenant that issued the token. You can\n * use this value to access tenant-specific directory resources in a multitenant application. For example,\n * you can use this value to identify the tenant in a call to the Graph API.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n tid: string;\n /**\n * @hidden\n * Defines the end of the time interval within which a token is valid. The service that validates the token\n * should verify that the current date is within the token lifetime; otherwise it should reject the token. The\n * service might allow for up to five minutes beyond the token lifetime to account for any differences in clock\n * time (\"time skew\") between Microsoft Entra and the service.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n exp: number;\n /**\n * @hidden\n * Defines the start of the time interval within which a token is valid. The service that validates the token\n * should verify that the current date is within the token lifetime; otherwise it should reject the token. The\n * service might allow for up to five minutes beyond the token lifetime to account for any differences in clock\n * time (\"time skew\") between Microsoft Entra and the service.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n nbf: number;\n /**\n * @hidden\n * Stores the user name of the user principal.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n upn: string;\n /**\n * @hidden\n * Stores the version number of the token.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n ver: string;\n /**\n * @hidden\n * Stores the data residency of the user.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n dataResidency?: DataResidency;\n }\n\n /**\n * @hidden\n * Limited set of data residencies information exposed to 1P application developers\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export enum DataResidency {\n /**\n * Public\n */\n Public = 'public',\n\n /**\n * European Union Data Boundary\n */\n EUDB = 'eudb',\n\n /**\n * Other, stored to cover fields that will not be exposed\n */\n Other = 'other',\n }\n\n /**\n * @deprecated\n * As of 2.0.0, this interface has been deprecated in favor of a Promise-based pattern.\n * @hidden\n * Describes the UserRequest. Success callback describes how a successful request is handled.\n * Failure callback describes how a failed request is handled.\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface UserRequest {\n /**\n * A function that is called if the token request succeeds, with the resulting token.\n */\n successCallback?: (user: UserProfile) => void;\n /**\n * A function that is called if the token request fails, with the reason for the failure.\n */\n failureCallback?: (reason: string) => void;\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport { sendMessageToParent } from '../internal/communication';\nimport { GlobalVars } from '../internal/globalVars';\nimport { registerHandler, removeHandler } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { isHostAdaptiveCardSchemaVersionUnsupported } from '../internal/utils';\nimport { DialogDimension, errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport {\n AdaptiveCardDialogInfo,\n BotAdaptiveCardDialogInfo,\n BotUrlDialogInfo,\n DialogInfo,\n DialogSize,\n M365ContentAction,\n TaskInfo,\n UrlDialogInfo,\n} from './interfaces';\nimport { runtime } from './runtime';\n\n/**\n * This group of capabilities enables apps to show modal dialogs. There are two primary types of dialogs: URL-based dialogs and [Adaptive Card](https://learn.microsoft.com/adaptive-cards/) dialogs.\n * Both types of dialogs are shown on top of your app, preventing interaction with your app while they are displayed.\n * - URL-based dialogs allow you to specify a URL from which the contents will be shown inside the dialog.\n * - For URL dialogs, use the functions and interfaces in the {@link dialog.url} namespace.\n * - Adaptive Card-based dialogs allow you to provide JSON describing an Adaptive Card that will be shown inside the dialog.\n * - For Adaptive Card dialogs, use the functions and interfaces in the {@link dialog.adaptiveCard} namespace.\n *\n * @remarks Note that dialogs were previously called \"task modules\". While they have been renamed for clarity, the functionality has been maintained.\n * For more details, see [Dialogs](https://learn.microsoft.com/microsoftteams/platform/task-modules-and-cards/what-are-task-modules)\n *\n * @beta\n */\nexport namespace dialog {\n /**\n * Data Structure to represent the SDK response when dialog closes\n *\n * @beta\n */\n export interface ISdkResponse {\n /**\n * Error in case there is a failure before dialog submission\n */\n err?: string;\n\n /**\n * Value provided in the `result` parameter by the dialog when the {@linkcode url.submit} function\n * was called.\n * If the dialog was closed by the user without submitting (e.g., using a control in the corner\n * of the dialog), this value will be `undefined` here.\n */\n result?: string | object;\n }\n\n /**\n * Handler used to receive and process messages sent between a dialog and the app that launched it\n * @beta\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n export type PostMessageChannel = (message: any) => void;\n\n /**\n * Handler used for receiving results when a dialog closes, either the value passed by {@linkcode url.submit}\n * or an error if the dialog was closed by the user.\n *\n * @see {@linkcode ISdkResponse}\n *\n * @beta\n */\n export type DialogSubmitHandler = (result: ISdkResponse) => void;\n const storedMessages: string[] = [];\n\n /**\n * @hidden\n * Hide from docs because this function is only used during initialization\n *\n * Adds register handlers for messageForChild upon initialization and only in the tasks FrameContext. {@link FrameContexts.task}\n * Function is called during app initialization\n * @internal\n * Limited to Microsoft-internal use\n *\n * @beta\n */\n export function initialize(): void {\n registerHandler('messageForChild', handleDialogMessage, false);\n }\n\n function handleDialogMessage(message: string): void {\n if (!GlobalVars.frameContext) {\n // GlobalVars.frameContext is currently not set\n return;\n }\n\n if (GlobalVars.frameContext === FrameContexts.task) {\n storedMessages.push(message);\n } else {\n // Not in task FrameContext, remove 'messageForChild' handler\n removeHandler('messageForChild');\n }\n }\n\n export namespace url {\n /**\n * Allows app to open a url based dialog.\n *\n * @remarks\n * This function cannot be called from inside of a dialog\n *\n * @param urlDialogInfo - An object containing the parameters of the dialog module.\n * @param submitHandler - Handler that triggers when a dialog calls the {@linkcode submit} function or when the user closes the dialog.\n * @param messageFromChildHandler - Handler that triggers if dialog sends a message to the app.\n *\n * @beta\n */\n export function open(\n urlDialogInfo: UrlDialogInfo,\n submitHandler?: DialogSubmitHandler,\n messageFromChildHandler?: PostMessageChannel,\n ): void {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.sidePanel, FrameContexts.meetingStage);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n if (messageFromChildHandler) {\n registerHandler('messageForParent', messageFromChildHandler);\n }\n const dialogInfo: DialogInfo = getDialogInfoFromUrlDialogInfo(urlDialogInfo);\n sendMessageToParent('tasks.startTask', [dialogInfo], (err: string, result: string | object) => {\n submitHandler?.({ err, result });\n removeHandler('messageForParent');\n });\n }\n\n /**\n * Submit the dialog module and close the dialog\n *\n * @remarks\n * This function is only intended to be called from code running within the dialog. Calling it from outside the dialog will have no effect.\n *\n * @param result - The result to be sent to the bot or the app. Typically a JSON object or a serialized version of it,\n * If this function is called from a dialog while {@link M365ContentAction} is set in the context object by the host, result will be ignored\n *\n * @param appIds - Valid application(s) that can receive the result of the submitted dialogs. Specifying this parameter helps prevent malicious apps from retrieving the dialog result. Multiple app IDs can be specified because a web app from a single underlying domain can power multiple apps across different environments and branding schemes.\n *\n * @beta\n */\n export function submit(result?: string | object, appIds?: string | string[]): void {\n // FrameContext content should not be here because dialog.submit can be called only from inside of a dialog (FrameContext task)\n // but it's here because Teams mobile incorrectly returns FrameContext.content when calling app.getFrameContext().\n // FrameContexts.content will be removed once the bug is fixed.\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n // Send tasks.completeTask instead of tasks.submitTask message for backward compatibility with Mobile clients\n sendMessageToParent('tasks.completeTask', [result, appIds ? (Array.isArray(appIds) ? appIds : [appIds]) : []]);\n }\n\n /**\n * Send message to the parent from dialog\n *\n * @remarks\n * This function is only intended to be called from code running within the dialog. Calling it from outside the dialog will have no effect.\n *\n * @param message - The message to send to the parent\n *\n * @beta\n */\n export function sendMessageToParentFromDialog(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n message: any,\n ): void {\n ensureInitialized(runtime, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n sendMessageToParent('messageForParent', [message]);\n }\n\n /**\n * Send message to the dialog from the parent\n *\n * @param message - The message to send\n *\n * @beta\n */\n export function sendMessageToDialog(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n message: any,\n ): void {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.sidePanel, FrameContexts.meetingStage);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n sendMessageToParent('messageForChild', [message]);\n }\n\n /**\n * Register a listener that will be triggered when a message is received from the app that opened the dialog.\n *\n * @remarks\n * This function is only intended to be called from code running within the dialog. Calling it from outside the dialog will have no effect.\n *\n * @param listener - The listener that will be triggered.\n *\n * @beta\n */\n export function registerOnMessageFromParent(listener: PostMessageChannel): void {\n ensureInitialized(runtime, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n // We need to remove the original 'messageForChild'\n // handler since the original does not allow for post messages.\n // It is replaced by the user specified listener that is passed in.\n removeHandler('messageForChild');\n registerHandler('messageForChild', listener);\n storedMessages.reverse();\n while (storedMessages.length > 0) {\n const message = storedMessages.pop();\n listener(message);\n }\n }\n\n /**\n * Checks if dialog.url module is supported by the host\n *\n * @returns boolean to represent whether dialog.url module is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && (runtime.supports.dialog && runtime.supports.dialog.url) !== undefined;\n }\n\n /**\n * Namespace to open a dialog that sends results to the bot framework\n *\n * @beta\n */\n export namespace bot {\n /**\n * Allows an app to open the dialog module using bot.\n *\n * @param botUrlDialogInfo - An object containing the parameters of the dialog module including completionBotId.\n * @param submitHandler - Handler that triggers when the dialog has been submitted or closed.\n * @param messageFromChildHandler - Handler that triggers if dialog sends a message to the app.\n *\n * @returns a function that can be used to send messages to the dialog.\n *\n * @beta\n */\n export function open(\n botUrlDialogInfo: BotUrlDialogInfo,\n submitHandler?: DialogSubmitHandler,\n messageFromChildHandler?: PostMessageChannel,\n ): void {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.sidePanel, FrameContexts.meetingStage);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n if (messageFromChildHandler) {\n registerHandler('messageForParent', messageFromChildHandler);\n }\n const dialogInfo: DialogInfo = getDialogInfoFromBotUrlDialogInfo(botUrlDialogInfo);\n\n sendMessageToParent('tasks.startTask', [dialogInfo], (err: string, result: string | object) => {\n submitHandler?.({ err, result });\n removeHandler('messageForParent');\n });\n }\n\n /**\n * Checks if dialog.url.bot capability is supported by the host\n *\n * @returns boolean to represent whether dialog.url.bot is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n return (\n ensureInitialized(runtime) &&\n (runtime.supports.dialog && runtime.supports.dialog.url && runtime.supports.dialog.url.bot) !== undefined\n );\n }\n }\n\n /**\n * @hidden\n *\n * Convert UrlDialogInfo to DialogInfo to send the information to host in {@linkcode open} API.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getDialogInfoFromUrlDialogInfo(urlDialogInfo: UrlDialogInfo): DialogInfo {\n const dialogInfo: DialogInfo = {\n url: urlDialogInfo.url,\n height: urlDialogInfo.size ? urlDialogInfo.size.height : DialogDimension.Small,\n width: urlDialogInfo.size ? urlDialogInfo.size.width : DialogDimension.Small,\n title: urlDialogInfo.title,\n fallbackUrl: urlDialogInfo.fallbackUrl,\n };\n return dialogInfo;\n }\n\n /**\n * @hidden\n *\n * Convert BotUrlDialogInfo to DialogInfo to send the information to host in {@linkcode bot.open} API.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getDialogInfoFromBotUrlDialogInfo(botUrlDialogInfo: BotUrlDialogInfo): DialogInfo {\n const dialogInfo: DialogInfo = getDialogInfoFromUrlDialogInfo(botUrlDialogInfo);\n dialogInfo.completionBotId = botUrlDialogInfo.completionBotId;\n return dialogInfo;\n }\n }\n\n /**\n * This function currently serves no purpose and should not be used. All functionality that used\n * to be covered by this method is now in subcapabilities and those isSupported methods should be\n * used directly.\n *\n * @hidden\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.dialog ? true : false;\n }\n\n /**\n * Namespace to update the dialog\n *\n * @beta\n */\n export namespace update {\n /**\n * Update dimensions - height/width of a dialog.\n *\n * @param dimensions - An object containing width and height properties.\n *\n * @beta\n */\n export function resize(dimensions: DialogSize): void {\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.sidePanel,\n FrameContexts.task,\n FrameContexts.meetingStage,\n );\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('tasks.updateTask', [dimensions]);\n }\n\n /**\n * Checks if dialog.update capability is supported by the host\n * @returns boolean to represent whether dialog.update capabilty is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.dialog\n ? runtime.supports.dialog.update\n ? true\n : false\n : false;\n }\n }\n\n /**\n * Subcapability for interacting with adaptive card dialogs\n * @beta\n */\n export namespace adaptiveCard {\n /**\n * Allows app to open an adaptive card based dialog.\n *\n * @remarks\n * This function cannot be called from inside of a dialog\n *\n * @param adaptiveCardDialogInfo - An object containing the parameters of the dialog module {@link AdaptiveCardDialogInfo}.\n * @param submitHandler - Handler that triggers when a dialog calls the {@linkcode url.submit} function or when the user closes the dialog.\n *\n * @beta\n */\n export function open(adaptiveCardDialogInfo: AdaptiveCardDialogInfo, submitHandler?: DialogSubmitHandler): void {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.sidePanel, FrameContexts.meetingStage);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n const dialogInfo: DialogInfo = getDialogInfoFromAdaptiveCardDialogInfo(adaptiveCardDialogInfo);\n sendMessageToParent('tasks.startTask', [dialogInfo], (err: string, result: string | object) => {\n submitHandler?.({ err, result });\n });\n }\n\n /**\n * Checks if dialog.adaptiveCard module is supported by the host\n *\n * @returns boolean to represent whether dialog.adaptiveCard module is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n const isAdaptiveCardVersionSupported =\n runtime.hostVersionsInfo &&\n runtime.hostVersionsInfo.adaptiveCardSchemaVersion &&\n !isHostAdaptiveCardSchemaVersionUnsupported(runtime.hostVersionsInfo.adaptiveCardSchemaVersion);\n return (\n ensureInitialized(runtime) &&\n (isAdaptiveCardVersionSupported && runtime.supports.dialog && runtime.supports.dialog.card) !== undefined\n );\n }\n\n /**\n * Namespace for interaction with adaptive card dialogs that need to communicate with the bot framework\n *\n * @beta\n */\n export namespace bot {\n /**\n * Allows an app to open an adaptive card-based dialog module using bot.\n *\n * @param botAdaptiveCardDialogInfo - An object containing the parameters of the dialog module including completionBotId.\n * @param submitHandler - Handler that triggers when the dialog has been submitted or closed.\n *\n * @beta\n */\n export function open(\n botAdaptiveCardDialogInfo: BotAdaptiveCardDialogInfo,\n submitHandler?: DialogSubmitHandler,\n ): void {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.sidePanel, FrameContexts.meetingStage);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n const dialogInfo: DialogInfo = getDialogInfoFromBotAdaptiveCardDialogInfo(botAdaptiveCardDialogInfo);\n\n sendMessageToParent('tasks.startTask', [dialogInfo], (err: string, result: string | object) => {\n submitHandler?.({ err, result });\n });\n }\n\n /**\n * Checks if dialog.adaptiveCard.bot capability is supported by the host\n *\n * @returns boolean to represent whether dialog.adaptiveCard.bot is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n const isAdaptiveCardVersionSupported =\n runtime.hostVersionsInfo &&\n runtime.hostVersionsInfo.adaptiveCardSchemaVersion &&\n !isHostAdaptiveCardSchemaVersionUnsupported(runtime.hostVersionsInfo.adaptiveCardSchemaVersion);\n return (\n ensureInitialized(runtime) &&\n (isAdaptiveCardVersionSupported &&\n runtime.supports.dialog &&\n runtime.supports.dialog.card &&\n runtime.supports.dialog.card.bot) !== undefined\n );\n }\n }\n\n /**\n * @hidden\n * Hide from docs\n * --------\n * Convert AdaptiveCardDialogInfo to DialogInfo to send the information to host in {@linkcode adaptiveCard.open} API.\n *\n * @internal\n */\n function getDialogInfoFromAdaptiveCardDialogInfo(adaptiveCardDialogInfo: AdaptiveCardDialogInfo): DialogInfo {\n const dialogInfo: DialogInfo = {\n card: adaptiveCardDialogInfo.card,\n height: adaptiveCardDialogInfo.size ? adaptiveCardDialogInfo.size.height : DialogDimension.Small,\n width: adaptiveCardDialogInfo.size ? adaptiveCardDialogInfo.size.width : DialogDimension.Small,\n title: adaptiveCardDialogInfo.title,\n };\n return dialogInfo;\n }\n\n /**\n * @hidden\n * Hide from docs\n * --------\n * Convert BotAdaptiveCardDialogInfo to DialogInfo to send the information to host in {@linkcode adaptiveCard.open} API.\n *\n * @internal\n */\n function getDialogInfoFromBotAdaptiveCardDialogInfo(\n botAdaptiveCardDialogInfo: BotAdaptiveCardDialogInfo,\n ): DialogInfo {\n const dialogInfo: DialogInfo = getDialogInfoFromAdaptiveCardDialogInfo(botAdaptiveCardDialogInfo);\n dialogInfo.completionBotId = botAdaptiveCardDialogInfo.completionBotId;\n return dialogInfo;\n }\n }\n}\n","import { sendMessageToParent } from '../internal/communication';\nimport { registerHandler } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { runtime } from '../public/runtime';\nimport { errorNotSupportedOnPlatform } from './constants';\n\n/**\n * Namespace to interact with the menu-specific part of the SDK.\n * This object is used to show View Configuration, Action Menu and Navigation Bar Menu.\n */\nexport namespace menus {\n /**\n * @hidden\n * Represents information about item in View Configuration.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface ViewConfiguration {\n /**\n * @hidden\n * Unique identifier of view.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n id: string;\n /**\n * @hidden\n * Display title of the view.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n title: string;\n /**\n * @hidden\n * Additional information for accessibility.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n contentDescription?: string;\n }\n\n /**\n * Defines how a menu item should appear in the NavBar.\n */\n export enum DisplayMode {\n /**\n * Only place this item in the NavBar if there's room for it.\n * If there's no room, item is shown in the overflow menu.\n */\n ifRoom = 0,\n /**\n * Never place this item in the NavBar.\n * The item would always be shown in NavBar's overflow menu.\n */\n overflowOnly = 1,\n }\n\n /**\n * @hidden\n * Represents information about menu item for Action Menu and Navigation Bar Menu.\n */\n export class MenuItem {\n /**\n * @hidden\n * Unique identifier for the menu item.\n */\n public id: string;\n /**\n * @hidden\n * Display title of the menu item.\n */\n public title: string;\n /**\n * @hidden\n * Display icon of the menu item. The icon value must be a string having SVG icon content.\n */\n public icon: string;\n /**\n * @hidden\n * Selected state display icon of the menu item. The icon value must be a string having SVG icon content.\n */\n public iconSelected?: string;\n /**\n * @hidden\n * Additional information for accessibility.\n */\n public contentDescription?: string;\n /**\n * @hidden\n * State of the menu item\n */\n public enabled = true;\n /**\n * @hidden\n * Interface to show list of items on selection of menu item.\n */\n public viewData?: ViewData;\n /**\n * @hidden\n * Whether the menu item is selected or not\n */\n public selected = false;\n /**\n * The Display Mode of the menu item.\n * Default Behaviour would be DisplayMode.ifRoom if null.\n * Refer {@link DisplayMode}\n */\n public displayMode?: DisplayMode;\n }\n\n /**\n * @hidden\n * Represents information about view to show on Navigation Bar Menu item selection\n */\n export interface ViewData {\n /**\n * @hidden\n * Display header title of the item list.\n */\n listTitle?: string;\n /**\n * @hidden\n * Type of the menu item.\n */\n listType: MenuListType;\n /**\n * @hidden\n * Array of MenuItem. Icon value will be required for all items in the list.\n */\n listItems: MenuItem[];\n }\n\n /**\n * @hidden\n * Represents information about type of list to display in Navigation Bar Menu.\n */\n export enum MenuListType {\n dropDown = 'dropDown',\n popOver = 'popOver',\n }\n let navBarMenuItemPressHandler: ((id: string) => boolean) | undefined;\n let actionMenuItemPressHandler: ((id: string) => boolean) | undefined;\n let viewConfigItemPressHandler: ((id: string) => boolean) | undefined;\n\n /**\n * @hidden\n * Register navBarMenuItemPress, actionMenuItemPress, setModuleView handlers.\n *\n * @internal\n * Limited to Microsoft-internal use.\n */\n export function initialize(): void {\n registerHandler('navBarMenuItemPress', handleNavBarMenuItemPress, false);\n registerHandler('actionMenuItemPress', handleActionMenuItemPress, false);\n registerHandler('setModuleView', handleViewConfigItemPress, false);\n }\n\n /**\n * @hidden\n * Registers list of view configurations and it's handler.\n * Handler is responsible for listening selection of View Configuration.\n *\n * @param viewConfig - List of view configurations. Minimum 1 value is required.\n * @param handler - The handler to invoke when the user selects view configuration.\n */\n export function setUpViews(viewConfig: ViewConfiguration[], handler: (id: string) => boolean): void {\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n viewConfigItemPressHandler = handler;\n sendMessageToParent('setUpViews', [viewConfig]);\n }\n\n function handleViewConfigItemPress(id: string): void {\n if (!viewConfigItemPressHandler || !viewConfigItemPressHandler(id)) {\n ensureInitialized(runtime);\n sendMessageToParent('viewConfigItemPress', [id]);\n }\n }\n\n /**\n * @hidden\n * Used to set menu items on the Navigation Bar. If icon is available, icon will be shown, otherwise title will be shown.\n *\n * @param items List of MenuItems for Navigation Bar Menu.\n * @param handler The handler to invoke when the user selects menu item.\n */\n export function setNavBarMenu(items: MenuItem[], handler: (id: string) => boolean): void {\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n navBarMenuItemPressHandler = handler;\n sendMessageToParent('setNavBarMenu', [items]);\n }\n\n function handleNavBarMenuItemPress(id: string): void {\n if (!navBarMenuItemPressHandler || !navBarMenuItemPressHandler(id)) {\n ensureInitialized(runtime);\n sendMessageToParent('handleNavBarMenuItemPress', [id]);\n }\n }\n\n /** Parameters used to create an action menu within an app */\n export interface ActionMenuParameters {\n /**\n * @hidden\n * Display title for Action Menu\n */\n title: string;\n /**\n * @hidden\n * List of MenuItems for Action Menu\n */\n items: MenuItem[];\n }\n\n /**\n * @hidden\n * Used to show Action Menu.\n *\n * @param params - Parameters for Menu Parameters\n * @param handler - The handler to invoke when the user selects menu item.\n */\n export function showActionMenu(params: ActionMenuParameters, handler: (id: string) => boolean): void {\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n actionMenuItemPressHandler = handler;\n sendMessageToParent('showActionMenu', [params]);\n }\n\n function handleActionMenuItemPress(id: string): void {\n if (!actionMenuItemPressHandler || !actionMenuItemPressHandler(id)) {\n ensureInitialized(runtime);\n sendMessageToParent('handleActionMenuItemPress', [id]);\n }\n }\n\n /**\n * Checks if the menus capability is supported by the host\n * @returns boolean to represent whether the menus capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.menus ? true : false;\n }\n}\n","import { GlobalVars } from '../internal/globalVars';\nimport * as Handlers from '../internal/handlers'; // Conflict with some names\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform } from './constants';\nimport { LoadContext } from './interfaces';\nimport { runtime } from './runtime';\n\n/**\n * Namespace containing the set of APIs that support Teams-specific functionalities.\n */\nexport namespace teamsCore {\n /** Ready to unload function type */\n type readyToUnloadFunctionType = () => void;\n /** Register on load handler function type */\n type registerOnLoadHandlerFunctionType = (context: LoadContext) => void;\n /** Register before unload handler function type */\n type registerBeforeUnloadHandlerFunctionType = (readyToUnload: readyToUnloadFunctionType) => boolean;\n /**\n * Enable print capability to support printing page using Ctrl+P and cmd+P\n */\n export function enablePrintCapability(): void {\n if (!GlobalVars.printCapabilityEnabled) {\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n GlobalVars.printCapabilityEnabled = true;\n // adding ctrl+P and cmd+P handler\n document.addEventListener('keydown', (event: KeyboardEvent) => {\n if ((event.ctrlKey || event.metaKey) && event.keyCode === 80) {\n print();\n event.cancelBubble = true;\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n });\n }\n }\n\n /**\n * default print handler\n */\n export function print(): void {\n if (typeof window !== 'undefined') {\n window.print();\n } else {\n // This codepath only exists to enable compilation in a server-side redered environment. In standard usage, the window object should never be undefined so this code path should never run.\n // If this error has actually been thrown, something has gone very wrong and it is a bug\n throw new Error('window object undefined at print call');\n }\n }\n\n /**\n * Registers a handler to be called when the page has been requested to load.\n *\n * @remarks Check out [App Caching in Teams](https://learn.microsoft.com/microsoftteams/platform/apps-in-teams-meetings/build-tabs-for-meeting?tabs=desktop%2Cmeeting-chat-view-desktop%2Cmeeting-stage-view-desktop%2Cchannel-meeting-desktop#app-caching)\n * for a more detailed explanation about using this API.\n *\n * @param handler - The handler to invoke when the page is loaded.\n *\n * @beta\n */\n export function registerOnLoadHandler(handler: registerOnLoadHandlerFunctionType): void {\n registerOnLoadHandlerHelper(handler, () => {\n if (handler && !isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n });\n }\n\n /**\n * @hidden\n * Undocumented helper function with shared code between deprecated version and current version of the registerOnLoadHandler API.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @param handler - The handler to invoke when the page is loaded.\n * @param versionSpecificHelper - The helper function containing logic pertaining to a specific version of the API.\n */\n export function registerOnLoadHandlerHelper(\n handler: registerOnLoadHandlerFunctionType,\n versionSpecificHelper?: () => void,\n ): void {\n // allow for registration cleanup even when not finished initializing\n handler && ensureInitialized(runtime);\n\n if (handler && versionSpecificHelper) {\n versionSpecificHelper();\n }\n\n Handlers.registerOnLoadHandler(handler);\n }\n\n /**\n * Registers a handler to be called before the page is unloaded.\n *\n * @remarks Check out [App Caching in Teams](https://learn.microsoft.com/microsoftteams/platform/apps-in-teams-meetings/build-tabs-for-meeting?tabs=desktop%2Cmeeting-chat-view-desktop%2Cmeeting-stage-view-desktop%2Cchannel-meeting-desktop#app-caching)\n * for a more detailed explanation about using this API.\n *\n * @param handler - The handler to invoke before the page is unloaded. If this handler returns true the page should\n * invoke the readyToUnload function provided to it once it's ready to be unloaded.\n *\n * @beta\n */\n export function registerBeforeUnloadHandler(handler: registerBeforeUnloadHandlerFunctionType): void {\n registerBeforeUnloadHandlerHelper(handler, () => {\n if (handler && !isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n });\n }\n\n /**\n * @hidden\n * Undocumented helper function with shared code between deprecated version and current version of the registerBeforeUnloadHandler API.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @param handler - - The handler to invoke before the page is unloaded. If this handler returns true the page should\n * invoke the readyToUnload function provided to it once it's ready to be unloaded.\n * @param versionSpecificHelper - The helper function containing logic pertaining to a specific version of the API.\n */\n export function registerBeforeUnloadHandlerHelper(\n handler: registerBeforeUnloadHandlerFunctionType,\n versionSpecificHelper?: () => void,\n ): void {\n // allow for registration cleanup even when not finished initializing\n handler && ensureInitialized(runtime);\n if (handler && versionSpecificHelper) {\n versionSpecificHelper();\n }\n Handlers.registerBeforeUnloadHandler(handler);\n }\n\n /**\n * Checks if teamsCore capability is supported by the host\n *\n * @returns boolean to represent whether the teamsCore capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.teamsCore ? true : false;\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport {\n Communication,\n initializeCommunication,\n sendAndHandleStatusAndReason,\n sendAndUnwrap,\n sendMessageToParent,\n uninitializeCommunication,\n} from '../internal/communication';\nimport { defaultSDKVersionForCompatCheck } from '../internal/constants';\nimport { GlobalVars } from '../internal/globalVars';\nimport * as Handlers from '../internal/handlers'; // Conflict with some names\nimport { ensureInitializeCalled, ensureInitialized, processAdditionalValidOrigins } from '../internal/internalAPIs';\nimport { getLogger } from '../internal/telemetry';\nimport { compareSDKVersions, runWithTimeout } from '../internal/utils';\nimport { inServerSideRenderingEnvironment } from '../private/inServerSideRenderingEnvironment';\nimport { logs } from '../private/logs';\nimport { authentication } from './authentication';\nimport { ChannelType, FrameContexts, HostClientType, HostName, TeamType, UserTeamRole } from './constants';\nimport { dialog } from './dialog';\nimport { ActionInfo, Context as LegacyContext, FileOpenPreference, LocaleInfo } from './interfaces';\nimport { menus } from './menus';\nimport { pages } from './pages';\nimport { applyRuntimeConfig, generateBackCompatRuntimeConfig, IBaseRuntime, runtime } from './runtime';\nimport { teamsCore } from './teamsAPIs';\nimport { version } from './version';\n\n/**\n * Namespace to interact with app initialization and lifecycle.\n */\nexport namespace app {\n const appLogger = getLogger('app');\n\n // ::::::::::::::::::::::: MicrosoftTeams client SDK public API ::::::::::::::::::::\n\n /** App Initialization Messages */\n export const Messages = {\n /** App loaded. */\n AppLoaded: 'appInitialization.appLoaded',\n /** App initialized successfully. */\n Success: 'appInitialization.success',\n /** App initialization failed. */\n Failure: 'appInitialization.failure',\n /** App initialization expected failure. */\n ExpectedFailure: 'appInitialization.expectedFailure',\n };\n\n /**\n * Describes errors that caused app initialization to fail\n */\n export enum FailedReason {\n /**\n * Authentication failed\n */\n AuthFailed = 'AuthFailed',\n /**\n * The application timed out\n */\n Timeout = 'Timeout',\n /**\n * The app failed for a different reason\n */\n Other = 'Other',\n }\n\n /**\n * Describes expected errors that occurred during an otherwise successful\n * app initialization\n */\n export enum ExpectedFailureReason {\n /**\n * There was a permission error\n */\n PermissionError = 'PermissionError',\n /**\n * The item was not found\n */\n NotFound = 'NotFound',\n /**\n * The network is currently throttled\n */\n Throttling = 'Throttling',\n /**\n * The application is currently offline\n */\n Offline = 'Offline',\n /**\n * The app failed for a different reason\n */\n Other = 'Other',\n }\n\n /**\n * Represents the failed request sent during a failed app initialization.\n */\n export interface IFailedRequest {\n /**\n * The reason for the failure\n */\n reason: FailedReason;\n /**\n * This property is currently unused.\n */\n message?: string;\n }\n\n /**\n * Represents the failure request sent during an erroneous app initialization.\n */\n export interface IExpectedFailureRequest {\n /**\n * The reason for the failure\n */\n reason: ExpectedFailureReason;\n /**\n * A message that describes the failure\n */\n message?: string;\n }\n\n /**\n * Represents application information.\n */\n export interface AppInfo {\n /**\n * The current locale that the user has configured for the app formatted as\n * languageId-countryId (for example, en-us).\n */\n locale: string;\n\n /**\n * The current UI theme of the host. Possible values: \"default\", \"dark\", or \"contrast\".\n */\n theme: string;\n\n /**\n * Unique ID for the current session for use in correlating telemetry data.\n */\n sessionId: string;\n\n /**\n * Info of the host\n */\n host: AppHostInfo;\n\n /**\n * More detailed locale info from the user's OS if available. Can be used together with\n * the @microsoft/globe NPM package to ensure your app respects the user's OS date and\n * time format configuration\n */\n osLocaleInfo?: LocaleInfo;\n /**\n * Personal app icon y coordinate position\n */\n iconPositionVertical?: number;\n\n /**\n * Time when the user clicked on the tab\n */\n userClickTime?: number;\n\n /**\n * The ID of the parent message from which this task module was launched.\n * This is only available in task modules launched from bot cards.\n */\n parentMessageId?: string;\n\n /**\n * Where the user prefers the file to be opened from by default during file open\n */\n userFileOpenPreference?: FileOpenPreference;\n\n /**\n * ID for the current visible app which is different for across cached sessions. Used for correlating telemetry data.\n */\n appLaunchId?: string;\n }\n\n /**\n * Represents information about the application's host.\n */\n export interface AppHostInfo {\n /**\n * Identifies which host is running your app\n */\n name: HostName;\n\n /**\n * The client type on which the host is running\n */\n clientType: HostClientType;\n\n /**\n * Unique ID for the current Host session for use in correlating telemetry data.\n */\n sessionId: string;\n\n /**\n * Current ring ID\n */\n ringId?: string;\n }\n\n /**\n * Represents Channel information.\n */\n export interface ChannelInfo {\n /**\n * The Microsoft Teams ID for the channel with which the content is associated.\n */\n id: string;\n\n /**\n * The name for the channel with which the content is associated.\n */\n displayName?: string;\n\n /**\n * The relative path to the SharePoint folder associated with the channel.\n */\n relativeUrl?: string;\n\n /**\n * The type of the channel with which the content is associated.\n */\n membershipType?: ChannelType;\n\n /**\n * The OneNote section ID that is linked to the channel.\n */\n defaultOneNoteSectionId?: string;\n\n /**\n * The tenant ID of the team which owns the channel.\n */\n ownerTenantId?: string;\n\n /**\n * The Microsoft Entra group ID of the team which owns the channel.\n */\n ownerGroupId?: string;\n }\n\n /**\n * Represents Chat information.\n */\n export interface ChatInfo {\n /**\n * The Microsoft Teams ID for the chat with which the content is associated.\n */\n id: string;\n }\n\n /**\n * Represents Meeting information.\n */\n export interface MeetingInfo {\n /**\n * Meeting Id used by tab when running in meeting context\n */\n id: string;\n }\n\n /**\n * Represents Page information.\n */\n export interface PageInfo {\n /**\n * The developer-defined unique ID for the page this content points to.\n */\n id: string;\n\n /**\n * The context where page url is loaded (content, task, setting, remove, sidePanel)\n */\n frameContext: FrameContexts;\n\n /**\n * The developer-defined unique ID for the sub-page this content points to.\n * This field should be used to restore to a specific state within a page,\n * such as scrolling to or activating a specific piece of content.\n */\n subPageId?: string;\n\n /**\n * Indication whether the page is in full-screen mode.\n */\n isFullScreen?: boolean;\n\n /**\n * Indication whether the page is in a pop out window\n */\n isMultiWindow?: boolean;\n\n /**\n * Source origin from where the page is opened\n */\n sourceOrigin?: string;\n }\n\n /**\n * Represents Team information.\n */\n export interface TeamInfo {\n /**\n * The Microsoft Teams ID for the team with which the content is associated.\n */\n internalId: string;\n\n /**\n * The name for the team with which the content is associated.\n */\n displayName?: string;\n\n /**\n * The type of the team.\n */\n type?: TeamType;\n\n /**\n * The Office 365 group ID for the team with which the content is associated.\n * This field is available only when the identity permission is requested in the manifest.\n */\n groupId?: string;\n\n /**\n * Indicates whether team is archived.\n * Apps should use this as a signal to prevent any changes to content associated with archived teams.\n */\n isArchived?: boolean;\n\n /**\n * Team Template ID if there was a Team Template associated with the creation of the team.\n */\n templateId?: string;\n\n /**\n * The user's role in the team.\n\n * Because a malicious party can run your content in a browser, this value should\n * be used only as a hint as to the user's role, and never as proof of her role.\n */\n userRole?: UserTeamRole;\n }\n\n /**\n * Represents User information.\n */\n export interface UserInfo {\n /**\n * The Microsoft Entra object id of the current user.\n *\n * Because a malicious party can run your content in a browser, this value should\n * be used only as a optimization hint as to who the user is and never as proof of identity.\n * Specifically, this value should never be used to determine if a user is authorized to access\n * a resource; access tokens should be used for that.\n * See {@link authentication.getAuthToken} and {@link authentication.authenticate} for more information on access tokens.\n *\n * This field is available only when the identity permission is requested in the manifest.\n */\n id: string;\n\n /**\n * The address book name of the current user.\n */\n displayName?: string;\n\n /**\n * Represents whether calling is allowed for the current logged in User\n */\n isCallingAllowed?: boolean;\n\n /**\n * Represents whether PSTN calling is allowed for the current logged in User\n */\n isPSTNCallingAllowed?: boolean;\n\n /**\n * The license type for the current user. Possible values are:\n * \"Unknown\", \"Teacher\", \"Student\", \"Free\", \"SmbBusinessVoice\", \"SmbNonVoice\", \"FrontlineWorker\", \"Anonymous\"\n */\n licenseType?: string;\n\n /**\n * A value suitable for use when providing a login_hint to Microsoft Entra ID for authentication purposes.\n * See [Provide optional claims to your app](https://learn.microsoft.com/azure/active-directory/develop/active-directory-optional-claims#v10-and-v20-optional-claims-set)\n * for more information about the use of login_hint\n *\n * Because a malicious party can run your content in a browser, this value should\n * be used only as a optimization hint as to who the user is and never as proof of identity.\n * Specifically, this value should never be used to determine if a user is authorized to access\n * a resource; access tokens should be used for that.\n * See {@link authentication.getAuthToken} and {@link authentication.authenticate} for more information on access tokens.\n */\n loginHint?: string;\n\n /**\n * The UPN of the current user. This may be an externally-authenticated UPN (e.g., guest users).\n\n * Because a malicious party can run your content in a browser, this value should\n * be used only as a optimization hint as to who the user is and never as proof of identity.\n * Specifically, this value should never be used to determine if a user is authorized to access\n * a resource; access tokens should be used for that.\n * See {@link authentication.getAuthToken} and {@link authentication.authenticate} for more information on access tokens.\n */\n userPrincipalName?: string;\n\n /**\n * The tenant related info of the current user.\n */\n tenant?: TenantInfo;\n }\n\n /**\n * Represents Tenant information.\n */\n export interface TenantInfo {\n /**\n * The Microsoft Entra tenant ID of the current user.\n\n * Because a malicious party can run your content in a browser, this value should\n * be used only as a optimization hint as to who the user is and never as proof of identity.\n * Specifically, this value should never be used to determine if a user is authorized to access\n * a resource; access tokens should be used for that.\n * See {@link authentication.getAuthToken} and {@link authentication.authenticate} for more information on access tokens.\n */\n id: string;\n\n /**\n * The type of license for the current users tenant.\n */\n teamsSku?: string;\n }\n\n /** Represents information about a SharePoint site */\n export interface SharePointSiteInfo {\n /**\n * The root SharePoint site associated with the team.\n */\n teamSiteUrl?: string;\n\n /**\n * The domain of the root SharePoint site associated with the team.\n */\n teamSiteDomain?: string;\n\n /**\n * The relative path to the SharePoint site associated with the team.\n */\n teamSitePath?: string;\n\n /**\n * Teamsite ID, aka sharepoint site id.\n */\n teamSiteId?: string;\n\n /**\n * The SharePoint my site domain associated with the user.\n */\n mySiteDomain?: string;\n\n /**\n * The SharePoint relative path to the current users mysite\n */\n mySitePath?: string;\n }\n\n /**\n * Represents structure of the received context message.\n */\n export interface Context {\n /**\n * Content Action Info\n *\n * @beta\n */\n actionInfo?: ActionInfo;\n /**\n * Properties about the current session for your app\n */\n app: AppInfo;\n\n /**\n * Info about the current page context hosting your app\n */\n page: PageInfo;\n\n /**\n * Info about the currently logged in user running the app.\n * If the current user is not logged in/authenticated (e.g. a meeting app running for an anonymously-joined partcipant) this will be `undefined`.\n */\n user?: UserInfo;\n\n /**\n * When running in the context of a Teams channel, provides information about the channel, else `undefined`\n */\n channel?: ChannelInfo;\n\n /**\n * When running in the context of a Teams chat, provides information about the chat, else `undefined`\n */\n chat?: ChatInfo;\n\n /**\n * When running in the context of a Teams meeting, provides information about the meeting, else `undefined`\n */\n meeting?: MeetingInfo;\n\n /**\n * When hosted in SharePoint, this is the [SharePoint PageContext](https://learn.microsoft.com/javascript/api/sp-page-context/pagecontext?view=sp-typescript-latest), else `undefined`\n */\n sharepoint?: any;\n\n /**\n * When running in Teams for an organization with a tenant, provides information about the SharePoint site associated with the team.\n * Will be `undefined` when not running in Teams for an organization with a tenant.\n */\n sharePointSite?: SharePointSiteInfo;\n\n /**\n * When running in Teams, provides information about the Team context in which your app is running.\n * Will be `undefined` when not running in Teams.\n */\n team?: TeamInfo;\n }\n\n /**\n * This function is passed to registerOnThemeHandler. It is called every time the user changes their theme.\n */\n type themeHandler = (theme: string) => void;\n\n /**\n * Checks whether the Teams client SDK has been initialized.\n * @returns whether the Teams client SDK has been initialized.\n */\n export function isInitialized(): boolean {\n return GlobalVars.initializeCompleted;\n }\n\n /**\n * Gets the Frame Context that the App is running in. See {@link FrameContexts} for the list of possible values.\n * @returns the Frame Context.\n */\n export function getFrameContext(): FrameContexts {\n return GlobalVars.frameContext;\n }\n\n /**\n * Number of milliseconds we'll give the initialization call to return before timing it out\n */\n const initializationTimeoutInMs = 5000;\n\n /**\n * Initializes the library.\n *\n * @remarks\n * Initialize must have completed successfully (as determined by the resolved Promise) before any other library calls are made\n *\n * @param validMessageOrigins - Optionally specify a list of cross frame message origins. They must have\n * https: protocol otherwise they will be ignored. Example: https://www.example.com\n * @returns Promise that will be fulfilled when initialization has completed, or rejected if the initialization fails or times out\n */\n export function initialize(validMessageOrigins?: string[]): Promise {\n if (!inServerSideRenderingEnvironment()) {\n return runWithTimeout(\n () => initializeHelper(validMessageOrigins),\n initializationTimeoutInMs,\n new Error('SDK initialization timed out.'),\n );\n } else {\n const initializeLogger = appLogger.extend('initialize');\n // This log statement should NEVER actually be written. This code path exists only to enable compilation in server-side rendering environments.\n // If you EVER see this statement in ANY log file, something has gone horribly wrong and a bug needs to be filed.\n initializeLogger('window object undefined at initialization');\n return Promise.resolve();\n }\n }\n\n const initializeHelperLogger = appLogger.extend('initializeHelper');\n function initializeHelper(validMessageOrigins?: string[]): Promise {\n return new Promise((resolve) => {\n // Independent components might not know whether the SDK is initialized so might call it to be safe.\n // Just no-op if that happens to make it easier to use.\n if (!GlobalVars.initializeCalled) {\n GlobalVars.initializeCalled = true;\n\n Handlers.initializeHandlers();\n GlobalVars.initializePromise = initializeCommunication(validMessageOrigins).then(\n ({ context, clientType, runtimeConfig, clientSupportedSDKVersion = defaultSDKVersionForCompatCheck }) => {\n GlobalVars.frameContext = context;\n GlobalVars.hostClientType = clientType;\n GlobalVars.clientSupportedSDKVersion = clientSupportedSDKVersion;\n // Temporary workaround while the Host is updated with the new argument order.\n // For now, we might receive any of these possibilities:\n // - `runtimeConfig` in `runtimeConfig` and `clientSupportedSDKVersion` in `clientSupportedSDKVersion`.\n // - `runtimeConfig` in `clientSupportedSDKVersion` and `clientSupportedSDKVersion` in `runtimeConfig`.\n // - `clientSupportedSDKVersion` in `runtimeConfig` and no `clientSupportedSDKVersion`.\n // This code supports any of these possibilities\n\n // Teams AppHost won't provide this runtime config\n // so we assume that if we don't have it, we must be running in Teams.\n // After Teams updates its client code, we can remove this default code.\n try {\n initializeHelperLogger('Parsing %s', runtimeConfig);\n const givenRuntimeConfig: IBaseRuntime | null = JSON.parse(runtimeConfig);\n initializeHelperLogger('Checking if %o is a valid runtime object', givenRuntimeConfig ?? 'null');\n // Check that givenRuntimeConfig is a valid instance of IBaseRuntime\n if (!givenRuntimeConfig || !givenRuntimeConfig.apiVersion) {\n throw new Error('Received runtime config is invalid');\n }\n runtimeConfig && applyRuntimeConfig(givenRuntimeConfig);\n } catch (e) {\n if (e instanceof SyntaxError) {\n try {\n initializeHelperLogger('Attempting to parse %s as an SDK version', runtimeConfig);\n // if the given runtime config was actually meant to be a SDK version, store it as such.\n // TODO: This is a temporary workaround to allow Teams to store clientSupportedSDKVersion even when\n // it doesn't provide the runtimeConfig. After Teams updates its client code, we should\n // remove this feature.\n if (!isNaN(compareSDKVersions(runtimeConfig, defaultSDKVersionForCompatCheck))) {\n GlobalVars.clientSupportedSDKVersion = runtimeConfig;\n }\n const givenRuntimeConfig: IBaseRuntime | null = JSON.parse(clientSupportedSDKVersion);\n initializeHelperLogger('givenRuntimeConfig parsed to %o', givenRuntimeConfig ?? 'null');\n\n if (!givenRuntimeConfig) {\n throw new Error(\n 'givenRuntimeConfig string was successfully parsed. However, it parsed to value of null',\n );\n } else {\n applyRuntimeConfig(givenRuntimeConfig);\n }\n } catch (e) {\n if (e instanceof SyntaxError) {\n applyRuntimeConfig(generateBackCompatRuntimeConfig(GlobalVars.clientSupportedSDKVersion));\n } else {\n throw e;\n }\n }\n } else {\n // If it's any error that's not a JSON parsing error, we want the program to fail.\n throw e;\n }\n }\n\n GlobalVars.initializeCompleted = true;\n },\n );\n\n authentication.initialize();\n menus.initialize();\n pages.config.initialize();\n dialog.initialize();\n }\n\n // Handle additional valid message origins if specified\n if (Array.isArray(validMessageOrigins)) {\n processAdditionalValidOrigins(validMessageOrigins);\n }\n\n resolve(GlobalVars.initializePromise);\n });\n }\n\n /**\n * @hidden\n * Undocumented function used to set a mock window for unit tests\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function _initialize(hostWindow: any): void {\n Communication.currentWindow = hostWindow;\n }\n\n /**\n * @hidden\n * Undocumented function used to clear state between unit tests\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function _uninitialize(): void {\n if (!GlobalVars.initializeCalled) {\n return;\n }\n\n if (GlobalVars.frameContext) {\n /* eslint-disable strict-null-checks/all */ /* Fix tracked by 5730662 */\n registerOnThemeChangeHandler(null);\n pages.backStack.registerBackButtonHandler(null);\n pages.registerFullScreenHandler(null);\n teamsCore.registerBeforeUnloadHandler(null);\n teamsCore.registerOnLoadHandler(null);\n logs.registerGetLogHandler(null); /* Fix tracked by 5730662 */\n /* eslint-enable strict-null-checks/all */\n }\n\n if (GlobalVars.frameContext === FrameContexts.settings) {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n pages.config.registerOnSaveHandler(null);\n }\n\n if (GlobalVars.frameContext === FrameContexts.remove) {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n pages.config.registerOnRemoveHandler(null);\n }\n\n GlobalVars.initializeCalled = false;\n GlobalVars.initializeCompleted = false;\n GlobalVars.initializePromise = null;\n GlobalVars.additionalValidOrigins = [];\n GlobalVars.frameContext = null;\n GlobalVars.hostClientType = null;\n GlobalVars.isFramelessWindow = false;\n\n uninitializeCommunication();\n }\n\n /**\n * Retrieves the current context the frame is running in.\n *\n * @returns Promise that will resolve with the {@link app.Context} object.\n */\n export function getContext(): Promise {\n return new Promise((resolve) => {\n ensureInitializeCalled();\n resolve(sendAndUnwrap('getContext'));\n }).then((legacyContext) => transformLegacyContextToAppContext(legacyContext)); // converts globalcontext to app.context\n }\n\n /**\n * Notifies the frame that app has loaded and to hide the loading indicator if one is shown.\n */\n export function notifyAppLoaded(): void {\n ensureInitializeCalled();\n sendMessageToParent(Messages.AppLoaded, [version]);\n }\n\n /**\n * Notifies the frame that app initialization is successful and is ready for user interaction.\n */\n export function notifySuccess(): void {\n ensureInitializeCalled();\n sendMessageToParent(Messages.Success, [version]);\n }\n\n /**\n * Notifies the frame that app initialization has failed and to show an error page in its place.\n *\n * @param appInitializationFailedRequest - The failure request containing the reason for why the app failed\n * during initialization as well as an optional message.\n */\n export function notifyFailure(appInitializationFailedRequest: IFailedRequest): void {\n ensureInitializeCalled();\n sendMessageToParent(Messages.Failure, [\n appInitializationFailedRequest.reason,\n appInitializationFailedRequest.message,\n ]);\n }\n\n /**\n * Notifies the frame that app initialized with some expected errors.\n *\n * @param expectedFailureRequest - The expected failure request containing the reason and an optional message\n */\n export function notifyExpectedFailure(expectedFailureRequest: IExpectedFailureRequest): void {\n ensureInitializeCalled();\n sendMessageToParent(Messages.ExpectedFailure, [expectedFailureRequest.reason, expectedFailureRequest.message]);\n }\n\n /**\n * Registers a handler for theme changes.\n *\n * @remarks\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler - The handler to invoke when the user changes their theme.\n */\n export function registerOnThemeChangeHandler(handler: themeHandler): void {\n // allow for registration cleanup even when not called initialize\n handler && ensureInitializeCalled();\n Handlers.registerOnThemeChangeHandler(handler);\n }\n\n /**\n * open link API.\n *\n * @param deepLink - deep link.\n * @returns Promise that will be fulfilled when the operation has completed\n */\n export function openLink(deepLink: string): Promise {\n return new Promise((resolve) => {\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.sidePanel,\n FrameContexts.settings,\n FrameContexts.task,\n FrameContexts.stage,\n FrameContexts.meetingStage,\n );\n resolve(sendAndHandleStatusAndReason('executeDeepLink', deepLink));\n });\n }\n}\n\n/**\n * @hidden\n * Transforms the Legacy Context object received from Messages to the structured app.Context object\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction transformLegacyContextToAppContext(legacyContext: LegacyContext): app.Context {\n const context: app.Context = {\n actionInfo: legacyContext.actionInfo,\n app: {\n locale: legacyContext.locale,\n sessionId: legacyContext.appSessionId ? legacyContext.appSessionId : '',\n theme: legacyContext.theme ? legacyContext.theme : 'default',\n iconPositionVertical: legacyContext.appIconPosition,\n osLocaleInfo: legacyContext.osLocaleInfo,\n parentMessageId: legacyContext.parentMessageId,\n userClickTime: legacyContext.userClickTime,\n userFileOpenPreference: legacyContext.userFileOpenPreference,\n host: {\n name: legacyContext.hostName ? legacyContext.hostName : HostName.teams,\n clientType: legacyContext.hostClientType ? legacyContext.hostClientType : HostClientType.web,\n sessionId: legacyContext.sessionId ? legacyContext.sessionId : '',\n ringId: legacyContext.ringId,\n },\n appLaunchId: legacyContext.appLaunchId,\n },\n page: {\n id: legacyContext.entityId,\n frameContext: legacyContext.frameContext ? legacyContext.frameContext : GlobalVars.frameContext,\n subPageId: legacyContext.subEntityId,\n isFullScreen: legacyContext.isFullScreen,\n isMultiWindow: legacyContext.isMultiWindow,\n sourceOrigin: legacyContext.sourceOrigin,\n },\n user: {\n id: legacyContext.userObjectId,\n displayName: legacyContext.userDisplayName,\n isCallingAllowed: legacyContext.isCallingAllowed,\n isPSTNCallingAllowed: legacyContext.isPSTNCallingAllowed,\n licenseType: legacyContext.userLicenseType,\n loginHint: legacyContext.loginHint,\n userPrincipalName: legacyContext.userPrincipalName,\n tenant: legacyContext.tid\n ? {\n id: legacyContext.tid,\n teamsSku: legacyContext.tenantSKU,\n }\n : undefined,\n },\n channel: legacyContext.channelId\n ? {\n id: legacyContext.channelId,\n displayName: legacyContext.channelName,\n relativeUrl: legacyContext.channelRelativeUrl,\n membershipType: legacyContext.channelType,\n defaultOneNoteSectionId: legacyContext.defaultOneNoteSectionId,\n ownerGroupId: legacyContext.hostTeamGroupId,\n ownerTenantId: legacyContext.hostTeamTenantId,\n }\n : undefined,\n chat: legacyContext.chatId\n ? {\n id: legacyContext.chatId,\n }\n : undefined,\n meeting: legacyContext.meetingId\n ? {\n id: legacyContext.meetingId,\n }\n : undefined,\n sharepoint: legacyContext.sharepoint,\n team: legacyContext.teamId\n ? {\n internalId: legacyContext.teamId,\n displayName: legacyContext.teamName,\n type: legacyContext.teamType,\n groupId: legacyContext.groupId,\n templateId: legacyContext.teamTemplateId,\n isArchived: legacyContext.isTeamArchived,\n userRole: legacyContext.userTeamRole,\n }\n : undefined,\n sharePointSite:\n legacyContext.teamSiteUrl ||\n legacyContext.teamSiteDomain ||\n legacyContext.teamSitePath ||\n legacyContext.mySitePath ||\n legacyContext.mySiteDomain\n ? {\n teamSiteUrl: legacyContext.teamSiteUrl,\n teamSiteDomain: legacyContext.teamSiteDomain,\n teamSitePath: legacyContext.teamSitePath,\n teamSiteId: legacyContext.teamSiteId,\n mySitePath: legacyContext.mySitePath,\n mySiteDomain: legacyContext.mySiteDomain,\n }\n : undefined,\n };\n\n return context;\n}\n","import {\n Communication,\n sendAndHandleSdkError,\n sendAndHandleStatusAndReason,\n sendAndHandleStatusAndReasonWithDefaultError,\n sendAndUnwrap,\n sendMessageEventToChild,\n sendMessageToParent,\n} from '../internal/communication';\nimport { registerHandler, registerHandlerHelper } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { createTeamsAppLink } from '../internal/utils';\nimport { app } from './app';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { FrameInfo, ShareDeepLinkParameters, TabInformation, TabInstance, TabInstanceParameters } from './interfaces';\nimport { runtime } from './runtime';\n\n/**\n * Navigation-specific part of the SDK.\n */\nexport namespace pages {\n /** Callback function */\n type handlerFunctionType = () => void;\n /** Full screen function */\n type fullScreenChangeFunctionType = (isFullScreen: boolean) => void;\n /** Back button handler function */\n type backButtonHandlerFunctionType = () => boolean;\n /** Save event function */\n type saveEventType = (evt: pages.config.SaveEvent) => void;\n /** Remove event function */\n type removeEventType = (evt: pages.config.RemoveEvent) => void;\n\n /**\n * Return focus to the host. Will move focus forward or backward based on where the application container falls in\n * the F6/tab order in the host.\n * On mobile hosts or hosts where there is no keyboard interaction or UI notion of \"focus\" this function has no\n * effect and will be a no-op when called.\n * @param navigateForward - Determines the direction to focus in host.\n */\n export function returnFocus(navigateForward?: boolean): void {\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('returnFocus', [navigateForward]);\n }\n\n /**\n * @hidden\n *\n * Registers a handler for specifying focus when it passes from the host to the application.\n * On mobile hosts or hosts where there is no UI notion of \"focus\" the handler registered with\n * this function will never be called.\n *\n * @param handler - The handler for placing focus within the application.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function registerFocusEnterHandler(handler: (navigateForward: boolean) => void): void {\n registerHandlerHelper('focusEnter', handler, [], () => {\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n });\n }\n\n /**\n * Sets/Updates the current frame with new information\n *\n * @param frameInfo - Frame information containing the URL used in the iframe on reload and the URL for when the\n * user clicks 'Go To Website'\n */\n export function setCurrentFrame(frameInfo: FrameInfo): void {\n ensureInitialized(runtime, FrameContexts.content);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('setFrameContext', [frameInfo]);\n }\n\n /**\n * Initializes the library with context information for the frame\n *\n * @param frameInfo - Frame information containing the URL used in the iframe on reload and the URL for when the\n * user clicks 'Go To Website'\n * @param callback - An optional callback that is executed once the application has finished initialization.\n * @param validMessageOrigins - An optional list of cross-frame message origins. They must have\n * https: protocol otherwise they will be ignored. Example: https:www.example.com\n */\n export function initializeWithFrameContext(\n frameInfo: FrameInfo,\n callback?: handlerFunctionType,\n validMessageOrigins?: string[],\n ): void {\n app.initialize(validMessageOrigins).then(() => callback && callback());\n setCurrentFrame(frameInfo);\n }\n\n /**\n * Defines the configuration of the current or desired instance\n */\n export interface InstanceConfig {\n /**\n * A suggested display name for the new content.\n * In the settings for an existing instance being updated, this call has no effect.\n */\n suggestedDisplayName?: string;\n /**\n * Sets the URL to use for the content of this instance.\n */\n contentUrl: string;\n /**\n * Sets the URL for the removal configuration experience.\n */\n removeUrl?: string;\n /**\n * Sets the URL to use for the external link to view the underlying resource in a browser.\n */\n websiteUrl?: string;\n /**\n * The developer-defined unique ID for the entity to which this content points.\n */\n entityId?: string;\n }\n\n /**\n * Gets the config for the current instance.\n * @returns Promise that resolves with the {@link InstanceConfig} object.\n */\n export function getConfig(): Promise {\n return new Promise((resolve) => {\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.settings,\n FrameContexts.remove,\n FrameContexts.sidePanel,\n );\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n resolve(sendAndUnwrap('settings.getSettings'));\n });\n }\n\n /**\n * Navigates the frame to a new cross-domain URL. The domain of this URL must match at least one of the\n * valid domains specified in the validDomains block of the manifest; otherwise, an exception will be\n * thrown. This function needs to be used only when navigating the frame to a URL in a different domain\n * than the current one in a way that keeps the application informed of the change and allows the SDK to\n * continue working.\n * @param url - The URL to navigate the frame to.\n * @returns Promise that resolves when the navigation has completed.\n */\n export function navigateCrossDomain(url: string): Promise {\n return new Promise((resolve) => {\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.sidePanel,\n FrameContexts.settings,\n FrameContexts.remove,\n FrameContexts.task,\n FrameContexts.stage,\n FrameContexts.meetingStage,\n );\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n const errorMessage =\n 'Cross-origin navigation is only supported for URLs matching the pattern registered in the manifest.';\n resolve(sendAndHandleStatusAndReasonWithDefaultError('navigateCrossDomain', errorMessage, url));\n });\n }\n\n /**\n * Navigate to the given application ID and page ID, with optional parameters for a WebURL (if the application\n * cannot be navigated to, such as if it is not installed), Channel ID (for applications installed as a channel tab),\n * and sub-page ID (for navigating to specific content within the page). This is equivalent to navigating to\n * a deep link with the above data, but does not require the application to build a URL or worry about different\n * deep link formats for different hosts.\n * @param params - Parameters for the navigation\n * @returns a promise that will resolve if the navigation was successful\n */\n export function navigateToApp(params: NavigateToAppParams): Promise {\n return new Promise((resolve) => {\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.sidePanel,\n FrameContexts.settings,\n FrameContexts.task,\n FrameContexts.stage,\n FrameContexts.meetingStage,\n );\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n if (runtime.isLegacyTeams) {\n resolve(sendAndHandleStatusAndReason('executeDeepLink', createTeamsAppLink(params)));\n } else {\n resolve(sendAndHandleStatusAndReason('pages.navigateToApp', params));\n }\n });\n }\n\n /**\n * Shares a deep link that a user can use to navigate back to a specific state in this page.\n * Please note that this method does yet work on mobile hosts.\n *\n * @param deepLinkParameters - ID and label for the link and fallback URL.\n */\n export function shareDeepLink(deepLinkParameters: ShareDeepLinkParameters): void {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.sidePanel, FrameContexts.meetingStage);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('shareDeepLink', [\n deepLinkParameters.subPageId,\n deepLinkParameters.subPageLabel,\n deepLinkParameters.subPageWebUrl,\n ]);\n }\n\n /**\n * Registers a handler for changes from or to full-screen view for a tab.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n * On hosts where there is no support for making an app full screen, the handler registered\n * with this function will never be called.\n * @param handler - The handler to invoke when the user toggles full-screen view for a tab.\n */\n export function registerFullScreenHandler(handler: fullScreenChangeFunctionType): void {\n registerHandlerHelper('fullScreenChange', handler, [], () => {\n if (handler && !isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n });\n }\n\n /**\n * Checks if the pages capability is supported by the host\n * @returns boolean to represent whether the appEntity capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.pages ? true : false;\n }\n\n /**\n * Parameters for the NavigateToApp API\n */\n export interface NavigateToAppParams {\n /**\n * ID of the application to navigate to\n */\n appId: string;\n\n /**\n * Developer-defined ID of the Page to navigate to within the application (Formerly EntityID)\n */\n pageId: string;\n\n /**\n * Optional URL to open if the navigation cannot be completed within the host\n */\n webUrl?: string;\n\n /**\n * Optional developer-defined ID describing the content to navigate to within the Page. This will be passed\n * back to the application via the Context object.\n */\n subPageId?: string;\n\n /**\n * Optional ID of the Teams Channel where the application should be opened\n */\n channelId?: string;\n }\n\n /**\n * Provides APIs for querying and navigating between contextual tabs of an application. Unlike personal tabs,\n * contextual tabs are pages associated with a specific context, such as channel or chat.\n */\n export namespace tabs {\n /**\n * Navigates the hosted application to the specified tab instance.\n * @param tabInstance - The destination tab instance.\n * @returns Promise that resolves when the navigation has completed.\n */\n export function navigateToTab(tabInstance: TabInstance): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n const errorMessage = 'Invalid internalTabInstanceId and/or channelId were/was provided';\n resolve(sendAndHandleStatusAndReasonWithDefaultError('navigateToTab', errorMessage, tabInstance));\n });\n }\n /**\n * Retrieves application tabs for the current user.\n * If no TabInstanceParameters are passed, the application defaults to favorite teams and favorite channels.\n * @param tabInstanceParameters - An optional set of flags that specify whether to scope call to favorite teams or channels.\n * @returns Promise that resolves with the {@link TabInformation}. Contains information for the user's tabs that are owned by this application {@link TabInstance}.\n */\n export function getTabInstances(tabInstanceParameters?: TabInstanceParameters): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n resolve(sendAndUnwrap('getTabInstances', tabInstanceParameters));\n });\n }\n\n /**\n * Retrieves the most recently used application tabs for the current user.\n * @param tabInstanceParameters - An optional set of flags. Note this is currently ignored and kept for future use.\n * @returns Promise that resolves with the {@link TabInformation}. Contains information for the users' most recently used tabs {@link TabInstance}.\n */\n export function getMruTabInstances(tabInstanceParameters?: TabInstanceParameters): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n resolve(sendAndUnwrap('getMruTabInstances', tabInstanceParameters));\n });\n }\n\n /**\n * Checks if the pages.tab capability is supported by the host\n * @returns boolean to represent whether the pages.tab capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.pages\n ? runtime.supports.pages.tabs\n ? true\n : false\n : false;\n }\n }\n /**\n * Provides APIs to interact with the configuration-specific part of the SDK.\n * This object is usable only on the configuration frame.\n */\n export namespace config {\n let saveHandler: undefined | ((evt: SaveEvent) => void);\n let removeHandler: undefined | ((evt: RemoveEvent) => void);\n\n /**\n * @hidden\n * Hide from docs because this function is only used during initialization\n *\n * Adds register handlers for settings.save and settings.remove upon initialization. Function is called in {@link app.initializeHelper}\n * @internal\n * Limited to Microsoft-internal use\n */\n export function initialize(): void {\n registerHandler('settings.save', handleSave, false);\n registerHandler('settings.remove', handleRemove, false);\n }\n\n /**\n * Sets the validity state for the configuration.\n * The initial value is false, so the user cannot save the configuration until this is called with true.\n * @param validityState - Indicates whether the save or remove button is enabled for the user.\n */\n export function setValidityState(validityState: boolean): void {\n ensureInitialized(runtime, FrameContexts.settings, FrameContexts.remove);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('settings.setValidityState', [validityState]);\n }\n\n /**\n * Sets the configuration for the current instance.\n * This is an asynchronous operation; calls to getConfig are not guaranteed to reflect the changed state.\n * @param instanceConfig - The desired configuration for this instance.\n * @returns Promise that resolves when the operation has completed.\n */\n export function setConfig(instanceConfig: InstanceConfig): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.settings, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n resolve(sendAndHandleStatusAndReason('settings.setSettings', instanceConfig));\n });\n }\n\n /**\n * Registers a handler for when the user attempts to save the configuration. This handler should be used\n * to create or update the underlying resource powering the content.\n * The object passed to the handler must be used to notify whether to proceed with the save.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n * @param handler - The handler to invoke when the user selects the Save button.\n */\n export function registerOnSaveHandler(handler: saveEventType): void {\n registerOnSaveHandlerHelper(handler, () => {\n if (handler && !isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n });\n }\n\n /**\n * @hidden\n * Undocumented helper function with shared code between deprecated version and current version of the registerOnSaveHandler API.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @param handler - The handler to invoke when the user selects the Save button.\n * @param versionSpecificHelper - The helper function containing logic pertaining to a specific version of the API.\n */\n export function registerOnSaveHandlerHelper(\n handler: (evt: SaveEvent) => void,\n versionSpecificHelper?: () => void,\n ): void {\n // allow for registration cleanup even when not finished initializing\n handler && ensureInitialized(runtime, FrameContexts.settings);\n if (versionSpecificHelper) {\n versionSpecificHelper();\n }\n saveHandler = handler;\n handler && sendMessageToParent('registerHandler', ['save']);\n }\n\n /**\n * Registers a handler for user attempts to remove content. This handler should be used\n * to remove the underlying resource powering the content.\n * The object passed to the handler must be used to indicate whether to proceed with the removal.\n * Only one handler may be registered at a time. Subsequent registrations will override the first.\n * @param handler - The handler to invoke when the user selects the Remove button.\n */\n export function registerOnRemoveHandler(handler: removeEventType): void {\n registerOnRemoveHandlerHelper(handler, () => {\n if (handler && !isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n });\n }\n\n /**\n * @hidden\n * Undocumented helper function with shared code between deprecated version and current version of the registerOnRemoveHandler API.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @param handler - The handler to invoke when the user selects the Remove button.\n * @param versionSpecificHelper - The helper function containing logic pertaining to a specific version of the API.\n */\n export function registerOnRemoveHandlerHelper(\n handler: (evt: RemoveEvent) => void,\n versionSpecificHelper?: () => void,\n ): void {\n // allow for registration cleanup even when not finished initializing\n handler && ensureInitialized(runtime, FrameContexts.remove, FrameContexts.settings);\n if (versionSpecificHelper) {\n versionSpecificHelper();\n }\n removeHandler = handler;\n handler && sendMessageToParent('registerHandler', ['remove']);\n }\n\n function handleSave(result?: SaveParameters): void {\n const saveEventType = new SaveEventImpl(result);\n if (saveHandler) {\n saveHandler(saveEventType);\n } else if (Communication.childWindow) {\n sendMessageEventToChild('settings.save', [result]);\n } else {\n // If no handler is registered, we assume success.\n saveEventType.notifySuccess();\n }\n }\n\n /**\n * Registers a handler for when the tab configuration is changed by the user\n * @param handler - The handler to invoke when the user clicks on Settings.\n */\n export function registerChangeConfigHandler(handler: handlerFunctionType): void {\n registerHandlerHelper('changeSettings', handler, [FrameContexts.content], () => {\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n });\n }\n\n /**\n * Describes the results of the settings.save event. Includes result, notifySuccess, and notifyFailure\n * to indicate the return object (result) and the status of whether the settings.save call succeeded or not and why.\n */\n export interface SaveEvent {\n /**\n * Object containing properties passed as arguments to the settings.save event.\n */\n result: SaveParameters;\n /**\n * Indicates that the underlying resource has been created and the config can be saved.\n */\n notifySuccess(): void;\n /**\n * Indicates that creation of the underlying resource failed and that the config cannot be saved.\n * @param reason - Specifies a reason for the failure. If provided, this string is displayed to the user; otherwise a generic error is displayed.\n */\n notifyFailure(reason?: string): void;\n }\n\n /**\n * Describes the results of the settings.remove event. Includes notifySuccess, and notifyFailure\n * to indicate the status of whether the settings.save call succeeded or not and why.\n */\n export interface RemoveEvent {\n /**\n * Indicates that the underlying resource has been removed and the content can be removed.\n */\n notifySuccess(): void;\n /**\n * Indicates that removal of the underlying resource failed and that the content cannot be removed.\n * @param reason - Specifies a reason for the failure. If provided, this string is displayed to the user; otherwise a generic error is displayed.\n */\n notifyFailure(reason?: string): void;\n }\n\n /**\n * Parameters used in the settings.save event\n */\n export interface SaveParameters {\n /**\n * Connector's webhook Url returned as arguments to settings.save event as part of user clicking on Save\n */\n webhookUrl?: string;\n }\n\n /**\n * @hidden\n * Hide from docs, since this class is not directly used.\n */\n class SaveEventImpl implements SaveEvent {\n public notified = false;\n public result: SaveParameters;\n public constructor(result?: SaveParameters) {\n this.result = result ? result : {};\n }\n public notifySuccess(): void {\n this.ensureNotNotified();\n sendMessageToParent('settings.save.success');\n this.notified = true;\n }\n public notifyFailure(reason?: string): void {\n this.ensureNotNotified();\n sendMessageToParent('settings.save.failure', [reason]);\n this.notified = true;\n }\n private ensureNotNotified(): void {\n if (this.notified) {\n throw new Error('The SaveEvent may only notify success or failure once.');\n }\n }\n }\n\n function handleRemove(): void {\n const removeEventType = new RemoveEventImpl();\n if (removeHandler) {\n removeHandler(removeEventType);\n } else if (Communication.childWindow) {\n sendMessageEventToChild('settings.remove', []);\n } else {\n // If no handler is registered, we assume success.\n removeEventType.notifySuccess();\n }\n }\n\n /**\n * @hidden\n * Hide from docs, since this class is not directly used.\n */\n class RemoveEventImpl implements RemoveEvent {\n public notified = false;\n\n public notifySuccess(): void {\n this.ensureNotNotified();\n sendMessageToParent('settings.remove.success');\n this.notified = true;\n }\n\n public notifyFailure(reason?: string): void {\n this.ensureNotNotified();\n sendMessageToParent('settings.remove.failure', [reason]);\n this.notified = true;\n }\n\n private ensureNotNotified(): void {\n if (this.notified) {\n throw new Error('The removeEventType may only notify success or failure once.');\n }\n }\n }\n\n /**\n * Checks if the pages.config capability is supported by the host\n * @returns boolean to represent whether the pages.config capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.pages\n ? runtime.supports.pages.config\n ? true\n : false\n : false;\n }\n }\n\n /**\n * Provides APIs for handling the user's navigational history.\n */\n export namespace backStack {\n let backButtonPressHandler: (() => boolean) | undefined;\n\n /**\n * @hidden\n * Register backButtonPress handler.\n *\n * @internal\n * Limited to Microsoft-internal use.\n */\n export function _initialize(): void {\n registerHandler('backButtonPress', handleBackButtonPress, false);\n }\n\n /**\n * Navigates back in the hosted application. See {@link pages.backStack.registerBackButtonHandler} for notes on usage.\n * @returns Promise that resolves when the navigation has completed.\n */\n export function navigateBack(): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n const errorMessage = 'Back navigation is not supported in the current client or context.';\n resolve(sendAndHandleStatusAndReasonWithDefaultError('navigateBack', errorMessage));\n });\n }\n\n /**\n * Registers a handler for user presses of the host client's back button. Experiences that maintain an internal\n * navigation stack should use this handler to navigate the user back within their frame. If an application finds\n * that after running its back button handler it cannot handle the event it should call the navigateBack\n * method to ask the host client to handle it instead.\n * @param handler - The handler to invoke when the user presses the host client's back button.\n */\n export function registerBackButtonHandler(handler: backButtonHandlerFunctionType): void {\n registerBackButtonHandlerHelper(handler, () => {\n if (handler && !isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n });\n }\n\n /**\n * @hidden\n * Undocumented helper function with shared code between deprecated version and current version of the registerBackButtonHandler API.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @param handler - The handler to invoke when the user presses the host client's back button.\n * @param versionSpecificHelper - The helper function containing logic pertaining to a specific version of the API.\n */\n export function registerBackButtonHandlerHelper(handler: () => boolean, versionSpecificHelper?: () => void): void {\n // allow for registration cleanup even when not finished initializing\n handler && ensureInitialized(runtime);\n if (versionSpecificHelper) {\n versionSpecificHelper();\n }\n backButtonPressHandler = handler;\n handler && sendMessageToParent('registerHandler', ['backButton']);\n }\n\n function handleBackButtonPress(): void {\n if (!backButtonPressHandler || !backButtonPressHandler()) {\n if (Communication.childWindow) {\n // If the current window did not handle it let the child window\n sendMessageEventToChild('backButtonPress', []);\n } else {\n navigateBack();\n }\n }\n }\n\n /**\n * Checks if the pages.backStack capability is supported by the host\n * @returns boolean to represent whether the pages.backStack capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.pages\n ? runtime.supports.pages.backStack\n ? true\n : false\n : false;\n }\n }\n\n /**\n * @hidden\n * Hide from docs\n * ------\n * Provides APIs to interact with the full-trust part of the SDK. Limited to 1P applications\n */\n export namespace fullTrust {\n /**\n * @hidden\n * Hide from docs\n * ------\n * Place the tab into full-screen mode.\n */\n export function enterFullscreen(): void {\n ensureInitialized(runtime, FrameContexts.content);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('enterFullscreen', []);\n }\n\n /**\n * @hidden\n * Hide from docs\n * ------\n * Reverts the tab into normal-screen mode.\n */\n export function exitFullscreen(): void {\n ensureInitialized(runtime, FrameContexts.content);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('exitFullscreen', []);\n }\n /**\n * @hidden\n *\n * Checks if the pages.fullTrust capability is supported by the host\n * @returns boolean to represent whether the pages.fullTrust capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.pages\n ? runtime.supports.pages.fullTrust\n ? true\n : false\n : false;\n }\n }\n\n /**\n * Provides APIs to interact with the app button part of the SDK.\n */\n export namespace appButton {\n /**\n * Registers a handler for clicking the app button.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n * @param handler - The handler to invoke when the personal app button is clicked in the app bar.\n */\n export function onClick(handler: handlerFunctionType): void {\n registerHandlerHelper('appButtonClick', handler, [FrameContexts.content], () => {\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n });\n }\n\n /**\n * Registers a handler for entering hover of the app button.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n * @param handler - The handler to invoke when entering hover of the personal app button in the app bar.\n */\n export function onHoverEnter(handler: handlerFunctionType): void {\n registerHandlerHelper('appButtonHoverEnter', handler, [FrameContexts.content], () => {\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n });\n }\n\n /**\n * Registers a handler for exiting hover of the app button.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n * @param handler - The handler to invoke when exiting hover of the personal app button in the app bar.\n */\n export function onHoverLeave(handler: handlerFunctionType): void {\n registerHandlerHelper('appButtonHoverLeave', handler, [FrameContexts.content], () => {\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n });\n }\n\n /**\n * Checks if pages.appButton capability is supported by the host\n * @returns boolean to represent whether the pages.appButton capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.pages\n ? runtime.supports.pages.appButton\n ? true\n : false\n : false;\n }\n }\n\n /**\n * Provides functions for navigating without needing to specify your application ID.\n *\n * @beta\n */\n export namespace currentApp {\n /**\n * Parameters for the NavigateWithinApp\n *\n * @beta\n */\n export interface NavigateWithinAppParams {\n /**\n * The developer-defined unique ID for the page defined in the manifest or when first configuring\n * the page. (Known as {@linkcode Context.entityId} prior to TeamsJS v.2.0.0)\n */\n pageId: string;\n\n /**\n * Optional developer-defined unique ID describing the content to navigate to within the page. This\n * can be retrieved from the Context object {@link app.PageInfo.subPageId | app.Context.page.subPageId}\n */\n subPageId?: string;\n }\n\n /**\n * Navigate within the currently running application with page ID, and sub-page ID (for navigating to\n * specific content within the page).\n * @param params - Parameters for the navigation\n * @returns a promise that will resolve if the navigation was successful\n *\n * @beta\n */\n export function navigateTo(params: NavigateWithinAppParams): Promise {\n return new Promise((resolve) => {\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.sidePanel,\n FrameContexts.settings,\n FrameContexts.task,\n FrameContexts.stage,\n FrameContexts.meetingStage,\n );\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n resolve(sendAndHandleSdkError('pages.currentApp.navigateTo', params));\n });\n }\n\n /**\n * Navigate to the currently running application's first static page defined in the application\n * manifest.\n * @beta\n */\n export function navigateToDefaultPage(): Promise {\n return new Promise((resolve) => {\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.sidePanel,\n FrameContexts.settings,\n FrameContexts.task,\n FrameContexts.stage,\n FrameContexts.meetingStage,\n );\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n resolve(sendAndHandleSdkError('pages.currentApp.navigateToDefaultPage'));\n });\n }\n\n /**\n * Checks if pages.currentApp capability is supported by the host\n * @returns boolean to represent whether the pages.currentApp capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.pages\n ? runtime.supports.pages.currentApp\n ? true\n : false\n : false;\n }\n }\n}\n","// This assignment is replaced at build time by a webpack plugin (or Jest during unit tests) which ensures the value matches the version set in the package version\ndeclare const PACKAGE_VERSION = 'ERROR: This value should be replaced by webpack!';\n/**\n * @hidden\n * Package version.\n */\nexport const version = PACKAGE_VERSION;\n","import { HostClientType } from '../public/constants';\nimport { ErrorCode, SdkError } from '../public/interfaces';\nimport { IBaseRuntime, isRuntimeInitialized, Runtime } from '../public/runtime';\nimport {\n defaultSDKVersionForCompatCheck,\n errorLibraryNotInitialized,\n userOriginUrlValidationRegExp,\n} from './constants';\nimport { GlobalVars } from './globalVars';\nimport { getLogger } from './telemetry';\nimport { compareSDKVersions } from './utils';\n\nconst internalLogger = getLogger('internal');\nconst ensureInitializeCalledLogger = internalLogger.extend('ensureInitializeCalled');\nconst ensureInitializedLogger = internalLogger.extend('ensureInitialized');\n\n/**\n * Ensures `initialize` was called. This function does NOT verify that a response from Host was received and initialization completed.\n *\n * `ensureInitializeCalled` should only be used for APIs which:\n * - work in all FrameContexts\n * - are part of a required Capability\n * - are suspected to be used directly after calling `initialize`, potentially without awaiting the `initialize` call itself\n *\n * For most APIs {@link ensureInitialized} is the right validation function to use instead.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function ensureInitializeCalled(): void {\n if (!GlobalVars.initializeCalled) {\n ensureInitializeCalledLogger(errorLibraryNotInitialized);\n throw new Error(errorLibraryNotInitialized);\n }\n}\n\n/**\n * Ensures `initialize` was called and response from Host was received and processed and that `runtime` is initialized.\n * If expected FrameContexts are provided, it also validates that the current FrameContext matches one of the expected ones.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function ensureInitialized(runtime: IBaseRuntime, ...expectedFrameContexts: string[]): runtime is Runtime {\n // This global var can potentially be removed in the future if we use the initialization status of the runtime object as our source of truth\n if (!GlobalVars.initializeCompleted) {\n ensureInitializedLogger(\n '%s. initializeCalled: %s',\n errorLibraryNotInitialized,\n GlobalVars.initializeCalled.toString(),\n );\n throw new Error(errorLibraryNotInitialized);\n }\n\n if (expectedFrameContexts && expectedFrameContexts.length > 0) {\n let found = false;\n for (let i = 0; i < expectedFrameContexts.length; i++) {\n if (expectedFrameContexts[i] === GlobalVars.frameContext) {\n found = true;\n break;\n }\n }\n\n if (!found) {\n throw new Error(\n `This call is only allowed in following contexts: ${JSON.stringify(expectedFrameContexts)}. ` +\n `Current context: \"${GlobalVars.frameContext}\".`,\n );\n }\n }\n return isRuntimeInitialized(runtime);\n}\n\n/**\n * @hidden\n * Checks whether the platform has knowledge of this API by doing a comparison\n * on API required version and platform supported version of the SDK\n *\n * @param requiredVersion - SDK version required by the API\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function isCurrentSDKVersionAtLeast(requiredVersion: string = defaultSDKVersionForCompatCheck): boolean {\n const value = compareSDKVersions(GlobalVars.clientSupportedSDKVersion, requiredVersion);\n if (isNaN(value)) {\n return false;\n }\n return value >= 0;\n}\n\n/**\n * @hidden\n * Helper function to identify if host client is either android, ios, or ipados\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function isHostClientMobile(): boolean {\n return (\n GlobalVars.hostClientType == HostClientType.android ||\n GlobalVars.hostClientType == HostClientType.ios ||\n GlobalVars.hostClientType == HostClientType.ipados\n );\n}\n\n/**\n * @hidden\n * Helper function which indicates if current API is supported on mobile or not.\n * @throws SdkError if host client is not android/ios or if the requiredVersion is not\n * supported by platform or not. Null is returned in case of success.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function throwExceptionIfMobileApiIsNotSupported(\n requiredVersion: string = defaultSDKVersionForCompatCheck,\n): void {\n if (!isHostClientMobile()) {\n const notSupportedError: SdkError = { errorCode: ErrorCode.NOT_SUPPORTED_ON_PLATFORM };\n throw notSupportedError;\n } else if (!isCurrentSDKVersionAtLeast(requiredVersion)) {\n const oldPlatformError: SdkError = { errorCode: ErrorCode.OLD_PLATFORM };\n throw oldPlatformError;\n }\n}\n\n/**\n * @hidden\n * Processes the valid origins specifuied by the user, de-duplicates and converts them into a regexp\n * which is used later for message source/origin validation\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function processAdditionalValidOrigins(validMessageOrigins: string[]): void {\n let combinedOriginUrls = GlobalVars.additionalValidOrigins.concat(\n validMessageOrigins.filter((_origin: string) => {\n return typeof _origin === 'string' && userOriginUrlValidationRegExp.test(_origin);\n }),\n );\n const dedupUrls: { [url: string]: boolean } = {};\n combinedOriginUrls = combinedOriginUrls.filter((_originUrl) => {\n if (dedupUrls[_originUrl]) {\n return false;\n }\n dedupUrls[_originUrl] = true;\n return true;\n });\n GlobalVars.additionalValidOrigins = combinedOriginUrls;\n}\n","export function inServerSideRenderingEnvironment(): boolean {\n return typeof window === 'undefined';\n}\n","/* eslint-disable @typescript-eslint/ban-types */\n\nimport { FrameContexts, LoadContext } from '../public';\nimport { pages } from '../public/pages';\nimport { runtime } from '../public/runtime';\nimport { Communication, sendMessageEventToChild, sendMessageToParent } from './communication';\nimport { ensureInitialized } from './internalAPIs';\nimport { getLogger } from './telemetry';\n\nconst handlersLogger = getLogger('handlers');\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nclass HandlersPrivate {\n public static handlers: {\n [func: string]: Function;\n } = {};\n public static themeChangeHandler: (theme: string) => void;\n public static loadHandler: (context: LoadContext) => void;\n public static beforeUnloadHandler: (readyToUnload: () => void) => boolean;\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function initializeHandlers(): void {\n // ::::::::::::::::::::MicrosoftTeams SDK Internal :::::::::::::::::\n HandlersPrivate.handlers['themeChange'] = handleThemeChange;\n HandlersPrivate.handlers['load'] = handleLoad;\n HandlersPrivate.handlers['beforeUnload'] = handleBeforeUnload;\n pages.backStack._initialize();\n}\n\nconst callHandlerLogger = handlersLogger.extend('callHandler');\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function callHandler(name: string, args?: unknown[]): [true, unknown] | [false, undefined] {\n const handler = HandlersPrivate.handlers[name];\n if (handler) {\n callHandlerLogger('Invoking the registered handler for message %s with arguments %o', name, args);\n const result = handler.apply(this, args);\n return [true, result];\n } else if (Communication.childWindow) {\n sendMessageEventToChild(name, args);\n return [false, undefined];\n } else {\n callHandlerLogger('Handler for action message %s not found.', name);\n return [false, undefined];\n }\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function registerHandler(name: string, handler: Function, sendMessage = true, args: unknown[] = []): void {\n if (handler) {\n HandlersPrivate.handlers[name] = handler;\n sendMessage && sendMessageToParent('registerHandler', [name, ...args]);\n } else {\n delete HandlersPrivate.handlers[name];\n }\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function removeHandler(name: string): void {\n delete HandlersPrivate.handlers[name];\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function doesHandlerExist(name: string): boolean {\n return HandlersPrivate.handlers[name] != null;\n}\n\n/**\n * @hidden\n * Undocumented helper function with shared code between deprecated version and current version of register*Handler APIs\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @param name - The name of the handler to register.\n * @param handler - The handler to invoke.\n * @param contexts - The context within which it is valid to register this handler.\n * @param registrationHelper - The helper function containing logic pertaining to a specific version of the API.\n */\nexport function registerHandlerHelper(\n name: string,\n handler: Function,\n contexts: FrameContexts[],\n registrationHelper?: () => void,\n): void {\n // allow for registration cleanup even when not finished initializing\n handler && ensureInitialized(runtime, ...contexts);\n if (registrationHelper) {\n registrationHelper();\n }\n\n registerHandler(name, handler);\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function registerOnThemeChangeHandler(handler: (theme: string) => void): void {\n HandlersPrivate.themeChangeHandler = handler;\n handler && sendMessageToParent('registerHandler', ['themeChange']);\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function handleThemeChange(theme: string): void {\n if (HandlersPrivate.themeChangeHandler) {\n HandlersPrivate.themeChangeHandler(theme);\n }\n\n if (Communication.childWindow) {\n sendMessageEventToChild('themeChange', [theme]);\n }\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function registerOnLoadHandler(handler: (context: LoadContext) => void): void {\n HandlersPrivate.loadHandler = handler;\n handler && sendMessageToParent('registerHandler', ['load']);\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction handleLoad(context: LoadContext): void {\n if (HandlersPrivate.loadHandler) {\n HandlersPrivate.loadHandler(context);\n }\n\n if (Communication.childWindow) {\n sendMessageEventToChild('load', [context]);\n }\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function registerBeforeUnloadHandler(handler: (readyToUnload: () => void) => boolean): void {\n HandlersPrivate.beforeUnloadHandler = handler;\n handler && sendMessageToParent('registerHandler', ['beforeUnload']);\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction handleBeforeUnload(): void {\n const readyToUnload = (): void => {\n sendMessageToParent('readyToUnload', []);\n };\n\n if (!HandlersPrivate.beforeUnloadHandler || !HandlersPrivate.beforeUnloadHandler(readyToUnload)) {\n if (Communication.childWindow) {\n sendMessageEventToChild('beforeUnload');\n } else {\n readyToUnload();\n }\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { FrameContexts } from '../public/constants';\nimport { SdkError } from '../public/interfaces';\nimport { latestRuntimeApiVersion } from '../public/runtime';\nimport { version } from '../public/version';\nimport { GlobalVars } from './globalVars';\nimport { callHandler } from './handlers';\nimport { DOMMessageEvent, ExtendedWindow, MessageRequest, MessageResponse } from './interfaces';\nimport { getLogger } from './telemetry';\nimport { validateOrigin } from './utils';\n\nconst communicationLogger = getLogger('communication');\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport class Communication {\n public static currentWindow: Window | any;\n public static parentOrigin: string;\n public static parentWindow: Window | any;\n public static childWindow: Window;\n public static childOrigin: string;\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nclass CommunicationPrivate {\n public static parentMessageQueue: MessageRequest[] = [];\n public static childMessageQueue: MessageRequest[] = [];\n public static nextMessageId = 0;\n public static callbacks: {\n [id: number]: Function; // (arg1, arg2, ...etc) => void\n } = {};\n public static promiseCallbacks: {\n [id: number]: Function; // (args[]) => void\n } = {};\n public static messageListener: Function;\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\ninterface InitializeResponse {\n context: FrameContexts;\n clientType: string;\n runtimeConfig: string;\n clientSupportedSDKVersion: string;\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function initializeCommunication(validMessageOrigins: string[] | undefined): Promise {\n // Listen for messages post to our window\n CommunicationPrivate.messageListener = (evt: DOMMessageEvent): void => processMessage(evt);\n\n // If we are in an iframe, our parent window is the one hosting us (i.e., window.parent); otherwise,\n // it's the window that opened us (i.e., window.opener)\n Communication.currentWindow = Communication.currentWindow || window;\n Communication.parentWindow =\n Communication.currentWindow.parent !== Communication.currentWindow.self\n ? Communication.currentWindow.parent\n : Communication.currentWindow.opener;\n\n // Listen to messages from the parent or child frame.\n // Frameless windows will only receive this event from child frames and if validMessageOrigins is passed.\n if (Communication.parentWindow || validMessageOrigins) {\n Communication.currentWindow.addEventListener('message', CommunicationPrivate.messageListener, false);\n }\n\n if (!Communication.parentWindow) {\n const extendedWindow = Communication.currentWindow as unknown as ExtendedWindow;\n if (extendedWindow.nativeInterface) {\n GlobalVars.isFramelessWindow = true;\n extendedWindow.onNativeMessage = handleParentMessage;\n } else {\n // at this point we weren't able to find a parent to talk to, no way initialization will succeed\n return Promise.reject(new Error('Initialization Failed. No Parent window found.'));\n }\n }\n\n try {\n // Send the initialized message to any origin, because at this point we most likely don't know the origin\n // of the parent window, and this message contains no data that could pose a security risk.\n Communication.parentOrigin = '*';\n return sendMessageToParentAsync<[FrameContexts, string, string, string]>('initialize', [\n version,\n latestRuntimeApiVersion,\n ]).then(\n ([context, clientType, runtimeConfig, clientSupportedSDKVersion]: [FrameContexts, string, string, string]) => {\n return { context, clientType, runtimeConfig, clientSupportedSDKVersion };\n },\n );\n } finally {\n Communication.parentOrigin = null;\n }\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function uninitializeCommunication(): void {\n if (Communication.currentWindow) {\n Communication.currentWindow.removeEventListener('message', CommunicationPrivate.messageListener, false);\n }\n\n Communication.currentWindow = null;\n Communication.parentWindow = null;\n Communication.parentOrigin = null;\n Communication.childWindow = null;\n Communication.childOrigin = null;\n CommunicationPrivate.parentMessageQueue = [];\n CommunicationPrivate.childMessageQueue = [];\n CommunicationPrivate.nextMessageId = 0;\n CommunicationPrivate.callbacks = {};\n CommunicationPrivate.promiseCallbacks = {};\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function sendAndUnwrap(actionName: string, ...args: any[]): Promise {\n return sendMessageToParentAsync(actionName, args).then(([result]: [T]) => result);\n}\n\nexport function sendAndHandleStatusAndReason(actionName: string, ...args: any[]): Promise {\n return sendMessageToParentAsync(actionName, args).then(([wasSuccessful, reason]: [boolean, string]) => {\n if (!wasSuccessful) {\n throw new Error(reason);\n }\n });\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function sendAndHandleStatusAndReasonWithDefaultError(\n actionName: string,\n defaultError: string,\n ...args: any[]\n): Promise {\n return sendMessageToParentAsync(actionName, args).then(([wasSuccessful, reason]: [boolean, string]) => {\n if (!wasSuccessful) {\n throw new Error(reason ? reason : defaultError);\n }\n });\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function sendAndHandleSdkError(actionName: string, ...args: any[]): Promise {\n return sendMessageToParentAsync(actionName, args).then(([error, result]: [SdkError, T]) => {\n if (error) {\n throw error;\n }\n return result;\n });\n}\n\n/**\n * @hidden\n * Send a message to parent. Uses nativeInterface on mobile to communicate with parent context\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function sendMessageToParentAsync(actionName: string, args: any[] = undefined): Promise {\n return new Promise((resolve) => {\n const request = sendMessageToParentHelper(actionName, args);\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n resolve(waitForResponse(request.id));\n });\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction waitForResponse(requestId: number): Promise {\n return new Promise((resolve) => {\n CommunicationPrivate.promiseCallbacks[requestId] = resolve;\n });\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function sendMessageToParent(actionName: string, callback?: Function): void;\n\n/**\n * @hidden\n * Send a message to parent. Uses nativeInterface on mobile to communicate with parent context\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function sendMessageToParent(actionName: string, args: any[], callback?: Function): void;\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function sendMessageToParent(actionName: string, argsOrCallback?: any[] | Function, callback?: Function): void {\n let args: any[] | undefined;\n if (argsOrCallback instanceof Function) {\n callback = argsOrCallback;\n } else if (argsOrCallback instanceof Array) {\n args = argsOrCallback;\n }\n\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n const request = sendMessageToParentHelper(actionName, args);\n if (callback) {\n CommunicationPrivate.callbacks[request.id] = callback;\n }\n}\n\nconst sendMessageToParentHelperLogger = communicationLogger.extend('sendMessageToParentHelper');\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction sendMessageToParentHelper(actionName: string, args: any[]): MessageRequest {\n const logger = sendMessageToParentHelperLogger;\n\n const targetWindow = Communication.parentWindow;\n const request = createMessageRequest(actionName, args);\n\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n logger('Message %i information: %o', request.id, { actionName, args });\n\n if (GlobalVars.isFramelessWindow) {\n if (Communication.currentWindow && Communication.currentWindow.nativeInterface) {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n logger('Sending message %i to parent via framelessPostMessage interface', request.id);\n (Communication.currentWindow as ExtendedWindow).nativeInterface.framelessPostMessage(JSON.stringify(request));\n }\n } else {\n const targetOrigin = getTargetOrigin(targetWindow);\n\n // If the target window isn't closed and we already know its origin, send the message right away; otherwise,\n // queue the message and send it after the origin is established\n if (targetWindow && targetOrigin) {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n logger('Sending message %i to parent via postMessage', request.id);\n targetWindow.postMessage(request, targetOrigin);\n } else {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n logger('Adding message %i to parent message queue', request.id);\n getTargetMessageQueue(targetWindow).push(request);\n }\n }\n return request;\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction processMessage(evt: DOMMessageEvent): void {\n // Process only if we received a valid message\n if (!evt || !evt.data || typeof evt.data !== 'object') {\n return;\n }\n\n // Process only if the message is coming from a different window and a valid origin\n // valid origins are either a pre-known\n const messageSource = evt.source || (evt.originalEvent && evt.originalEvent.source);\n const messageOrigin = evt.origin || (evt.originalEvent && evt.originalEvent.origin);\n if (!shouldProcessMessage(messageSource, messageOrigin)) {\n return;\n }\n\n // Update our parent and child relationships based on this message\n updateRelationships(messageSource, messageOrigin);\n\n // Handle the message\n if (messageSource === Communication.parentWindow) {\n handleParentMessage(evt);\n } else if (messageSource === Communication.childWindow) {\n handleChildMessage(evt);\n }\n}\n\n/**\n * @hidden\n * Validates the message source and origin, if it should be processed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction shouldProcessMessage(messageSource: Window, messageOrigin: string): boolean {\n // Process if message source is a different window and if origin is either in\n // Teams' pre-known whitelist or supplied as valid origin by user during initialization\n if (Communication.currentWindow && messageSource === Communication.currentWindow) {\n return false;\n } else if (\n Communication.currentWindow &&\n Communication.currentWindow.location &&\n messageOrigin &&\n messageOrigin === Communication.currentWindow.location.origin\n ) {\n return true;\n } else {\n return validateOrigin(new URL(messageOrigin));\n }\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction updateRelationships(messageSource: Window, messageOrigin: string): void {\n // Determine whether the source of the message is our parent or child and update our\n // window and origin pointer accordingly\n // For frameless windows (i.e mobile), there is no parent frame, so the message must be from the child.\n if (\n !GlobalVars.isFramelessWindow &&\n (!Communication.parentWindow || Communication.parentWindow.closed || messageSource === Communication.parentWindow)\n ) {\n Communication.parentWindow = messageSource;\n Communication.parentOrigin = messageOrigin;\n } else if (\n !Communication.childWindow ||\n Communication.childWindow.closed ||\n messageSource === Communication.childWindow\n ) {\n Communication.childWindow = messageSource;\n Communication.childOrigin = messageOrigin;\n }\n\n // Clean up pointers to closed parent and child windows\n if (Communication.parentWindow && Communication.parentWindow.closed) {\n Communication.parentWindow = null;\n Communication.parentOrigin = null;\n }\n if (Communication.childWindow && Communication.childWindow.closed) {\n Communication.childWindow = null;\n Communication.childOrigin = null;\n }\n\n // If we have any messages in our queue, send them now\n flushMessageQueue(Communication.parentWindow);\n flushMessageQueue(Communication.childWindow);\n}\n\nconst handleParentMessageLogger = communicationLogger.extend('handleParentMessage');\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction handleParentMessage(evt: DOMMessageEvent): void {\n const logger = handleParentMessageLogger;\n\n if ('id' in evt.data && typeof evt.data.id === 'number') {\n // Call any associated Communication.callbacks\n const message = evt.data as MessageResponse;\n const callback = CommunicationPrivate.callbacks[message.id];\n logger('Received a response from parent for message %i', message.id);\n if (callback) {\n logger('Invoking the registered callback for message %i with arguments %o', message.id, message.args);\n callback.apply(null, [...message.args, message.isPartialResponse]);\n\n // Remove the callback to ensure that the callback is called only once and to free up memory if response is a complete response\n if (!isPartialResponse(evt)) {\n logger('Removing registered callback for message %i', message.id);\n delete CommunicationPrivate.callbacks[message.id];\n }\n }\n const promiseCallback = CommunicationPrivate.promiseCallbacks[message.id];\n if (promiseCallback) {\n logger('Invoking the registered promise callback for message %i with arguments %o', message.id, message.args);\n promiseCallback(message.args);\n\n logger('Removing registered promise callback for message %i', message.id);\n delete CommunicationPrivate.promiseCallbacks[message.id];\n }\n } else if ('func' in evt.data && typeof evt.data.func === 'string') {\n // Delegate the request to the proper handler\n const message = evt.data as MessageRequest;\n logger('Received an action message %s from parent', message.func);\n callHandler(message.func, message.args);\n } else {\n logger('Received an unknown message: %O', evt);\n }\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction isPartialResponse(evt: DOMMessageEvent): boolean {\n return evt.data.isPartialResponse === true;\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction handleChildMessage(evt: DOMMessageEvent): void {\n if ('id' in evt.data && 'func' in evt.data) {\n // Try to delegate the request to the proper handler, if defined\n const message = evt.data as MessageRequest;\n const [called, result] = callHandler(message.func, message.args);\n if (called && typeof result !== 'undefined') {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n sendMessageResponseToChild(message.id, Array.isArray(result) ? result : [result]);\n } else {\n // No handler, proxy to parent\n sendMessageToParent(message.func, message.args, (...args: any[]): void => {\n if (Communication.childWindow) {\n const isPartialResponse = args.pop();\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n sendMessageResponseToChild(message.id, args, isPartialResponse);\n }\n });\n }\n }\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction getTargetMessageQueue(targetWindow: Window): MessageRequest[] {\n return targetWindow === Communication.parentWindow\n ? CommunicationPrivate.parentMessageQueue\n : targetWindow === Communication.childWindow\n ? CommunicationPrivate.childMessageQueue\n : [];\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction getTargetOrigin(targetWindow: Window): string {\n return targetWindow === Communication.parentWindow\n ? Communication.parentOrigin\n : targetWindow === Communication.childWindow\n ? Communication.childOrigin\n : null;\n}\n\nconst flushMessageQueueLogger = communicationLogger.extend('flushMessageQueue');\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction flushMessageQueue(targetWindow: Window | any): void {\n const targetOrigin = getTargetOrigin(targetWindow);\n const targetMessageQueue = getTargetMessageQueue(targetWindow);\n const target = targetWindow == Communication.parentWindow ? 'parent' : 'child';\n while (targetWindow && targetOrigin && targetMessageQueue.length > 0) {\n const request = targetMessageQueue.shift();\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n flushMessageQueueLogger('Flushing message %i from ' + target + ' message queue via postMessage.', request.id);\n targetWindow.postMessage(request, targetOrigin);\n }\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function waitForMessageQueue(targetWindow: Window, callback: () => void): void {\n const messageQueueMonitor = Communication.currentWindow.setInterval(() => {\n if (getTargetMessageQueue(targetWindow).length === 0) {\n clearInterval(messageQueueMonitor);\n callback();\n }\n }, 100);\n}\n\n/**\n * @hidden\n * Send a response to child for a message request that was from child\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction sendMessageResponseToChild(id: number, args?: any[], isPartialResponse?: boolean): void {\n const targetWindow = Communication.childWindow;\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n const response = createMessageResponse(id, args, isPartialResponse);\n const targetOrigin = getTargetOrigin(targetWindow);\n if (targetWindow && targetOrigin) {\n targetWindow.postMessage(response, targetOrigin);\n }\n}\n\n/**\n * @hidden\n * Send a custom message object that can be sent to child window,\n * instead of a response message to a child\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function sendMessageEventToChild(actionName: string, args?: any[]): void {\n const targetWindow = Communication.childWindow;\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n const customEvent = createMessageEvent(actionName, args);\n const targetOrigin = getTargetOrigin(targetWindow);\n\n // If the target window isn't closed and we already know its origin, send the message right away; otherwise,\n // queue the message and send it after the origin is established\n if (targetWindow && targetOrigin) {\n targetWindow.postMessage(customEvent, targetOrigin);\n } else {\n getTargetMessageQueue(targetWindow).push(customEvent);\n }\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction createMessageRequest(func: string, args: any[]): MessageRequest {\n return {\n id: CommunicationPrivate.nextMessageId++,\n func: func,\n timestamp: Date.now(),\n args: args || [],\n };\n}\n\n/**\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction createMessageResponse(id: number, args: any[], isPartialResponse: boolean): MessageResponse {\n return {\n id: id,\n args: args || [],\n isPartialResponse,\n };\n}\n\n/**\n * @hidden\n * Creates a message object without any id, used for custom actions being sent to child frame/window\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction createMessageEvent(func: string, args: any[]): MessageRequest {\n return {\n func: func,\n args: args || [],\n };\n}\n","import { sendMessageToParent } from '../internal/communication';\nimport { registerHandler, removeHandler } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform } from '../public/constants';\nimport { runtime } from '../public/runtime';\n\n/**\n * @hidden\n * Namespace to interact with the logging part of the SDK.\n * This object is used to send the app logs on demand to the host client\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport namespace logs {\n /**\n * @hidden\n *\n * Registers a handler for getting app log\n *\n * @param handler - The handler to invoke to get the app log\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function registerGetLogHandler(handler: () => string): void {\n // allow for registration cleanup even when not finished initializing\n handler && ensureInitialized(runtime);\n if (handler && !isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n if (handler) {\n registerHandler('log.request', () => {\n const log: string = handler();\n sendMessageToParent('log.receive', [log]);\n });\n } else {\n removeHandler('log.request');\n }\n }\n\n /**\n * @hidden\n *\n * Checks if the logs capability is supported by the host\n * @returns boolean to represent whether the logs capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.logs ? true : false;\n }\n}\n","import { FileOpenPreference, TeamInformation } from '../public/interfaces';\n\n/**\n * @hidden\n *\n * Information about all members in a chat\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport interface ChatMembersInformation {\n members: ThreadMember[];\n}\n\n/**\n * @hidden\n *\n * Information about a chat member\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport interface ThreadMember {\n /**\n * @hidden\n * The member's user principal name in the current tenant.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n upn: string;\n}\n\n/**\n * @hidden\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport enum NotificationTypes {\n fileDownloadStart = 'fileDownloadStart',\n fileDownloadComplete = 'fileDownloadComplete',\n}\n\n/**\n * @hidden\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport interface ShowNotificationParameters {\n message: string;\n notificationType: NotificationTypes;\n}\n\n/**\n * @hidden\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport enum ViewerActionTypes {\n view = 'view',\n edit = 'edit',\n editNew = 'editNew',\n}\n\n/**\n * @hidden\n *\n * User setting changes that can be subscribed to\n */\nexport enum UserSettingTypes {\n /**\n * @hidden\n * Use this key to subscribe to changes in user's file open preference\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n fileOpenPreference = 'fileOpenPreference',\n /**\n * @hidden\n * Use this key to subscribe to theme changes\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n theme = 'theme',\n}\n\n/**\n * @hidden\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport interface FilePreviewParameters {\n /**\n * @hidden\n * The developer-defined unique ID for the file.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n entityId?: string;\n\n /**\n * @hidden\n * The display name of the file.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n title?: string;\n\n /**\n * @hidden\n * An optional description of the file.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n description?: string;\n\n /**\n * @hidden\n * The file extension; e.g. pptx, docx, etc.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n type: string;\n\n /**\n * @hidden\n * A url to the source of the file, used to open the content in the user's default browser\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n objectUrl: string;\n\n /**\n * @hidden\n * Optional; an alternate self-authenticating url used to preview the file in Mobile clients and offer it for download by the user\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n downloadUrl?: string;\n\n /**\n * @hidden\n * Optional; an alternate url optimized for previewing the file in web and desktop clients\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n webPreviewUrl?: string;\n\n /**\n * @hidden\n * Optional; an alternate url that allows editing of the file in web and desktop clients\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n webEditUrl?: string;\n\n /**\n * @hidden\n * Optional; the base url of the site where the file is hosted\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n baseUrl?: string;\n\n /**\n * @hidden\n * Deprecated; prefer using {@linkcode viewerAction} instead\n * Optional; indicates whether the file should be opened in edit mode\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n editFile?: boolean;\n\n /**\n * @hidden\n * Optional; the developer-defined unique ID for the sub-entity to return to when the file stage closes.\n * This field should be used to restore to a specific state within an entity, such as scrolling to or activating a specific piece of content.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n subEntityId?: string;\n\n /**\n * @hidden\n * Optional; indicates the mode in which file should be opened. Takes precedence over edit mode.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n viewerAction?: ViewerActionTypes;\n\n /**\n * @hidden\n * Optional; indicates how user prefers to open the file\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n fileOpenPreference?: FileOpenPreference;\n\n /**\n * @hidden\n * Optional; id required to enable conversation button in files. Will be channel id in case file is shared in a channel or the chat id in p2p chat case.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n conversationId?: string;\n}\n\n/**\n * @hidden\n *\n * Query parameters used when fetching team information\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport interface TeamInstanceParameters {\n /**\n * @hidden\n * Flag allowing to select favorite teams only\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n favoriteTeamsOnly?: boolean;\n}\n\n/**\n * @hidden\n *\n * Information on userJoined Teams\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport interface UserJoinedTeamsInformation {\n /**\n * @hidden\n * List of team information\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n userJoinedTeams: TeamInformation[];\n}\n","import { sendAndHandleStatusAndReason, sendAndUnwrap, sendMessageToParent } from '../internal/communication';\nimport { registerHandler, removeHandler } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform, FrameContexts } from '../public/constants';\nimport { runtime } from '../public/runtime';\nimport { ChatMembersInformation } from './interfaces';\n\n/**\n * @hidden\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport interface OpenConversationRequest {\n /**\n * @hidden\n * The Id of the subEntity where the conversation is taking place\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n subEntityId: string;\n\n /**\n * @hidden\n * The title of the conversation\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n title: string;\n\n /**\n * @hidden\n * The Id of the conversation. This is optional and should be specified whenever a previous conversation about a specific sub-entity has already been started before\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n conversationId?: string;\n\n /**\n * @hidden\n * The Id of the channel. This is optional and should be specified whenever a conversation is started or opened in a personal app scope\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n channelId?: string;\n\n /**\n * @hidden\n * The entity Id of the tab\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n entityId: string;\n\n /**\n * @hidden\n * A function that is called once the conversation Id has been created\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n onStartConversation?: (conversationResponse: ConversationResponse) => void;\n\n /**\n * @hidden\n * A function that is called if the pane is closed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n onCloseConversation?: (conversationResponse: ConversationResponse) => void;\n}\n\n/**\n * @hidden\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport interface ConversationResponse {\n /**\n * @hidden\n *\n * Limited to Microsoft-internal use\n * The Id of the subEntity where the conversation is taking place\n */\n subEntityId: string;\n\n /**\n * @hidden\n * The Id of the conversation. This is optional and should be specified whenever a previous conversation about a specific sub-entity has already been started before\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n conversationId?: string;\n\n /**\n * @hidden\n * The Id of the channel. This is optional and should be specified whenever a conversation is started or opened in a personal app scope\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n channelId?: string;\n\n /**\n * @hidden\n * The entity Id of the tab\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n entityId?: string;\n}\n\n/**\n * @hidden\n * Namespace to interact with the conversational subEntities inside the tab\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport namespace conversations {\n /**\n * @hidden\n * Hide from docs\n * --------------\n * Allows the user to start or continue a conversation with each subentity inside the tab\n *\n * @returns Promise resolved upon completion\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function openConversation(openConversationRequest: OpenConversationRequest): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime, FrameContexts.content);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n const sendPromise = sendAndHandleStatusAndReason('conversations.openConversation', {\n title: openConversationRequest.title,\n subEntityId: openConversationRequest.subEntityId,\n conversationId: openConversationRequest.conversationId,\n channelId: openConversationRequest.channelId,\n entityId: openConversationRequest.entityId,\n });\n if (openConversationRequest.onStartConversation) {\n registerHandler(\n 'startConversation',\n (subEntityId: string, conversationId: string, channelId: string, entityId: string) =>\n openConversationRequest.onStartConversation({\n subEntityId,\n conversationId,\n channelId,\n entityId,\n }),\n );\n }\n if (openConversationRequest.onCloseConversation) {\n registerHandler(\n 'closeConversation',\n (subEntityId: string, conversationId?: string, channelId?: string, entityId?: string) =>\n openConversationRequest.onCloseConversation({\n subEntityId,\n conversationId,\n channelId,\n entityId,\n }),\n );\n }\n resolve(sendPromise);\n });\n }\n\n /**\n * @hidden\n *\n * Allows the user to close the conversation in the right pane\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function closeConversation(): void {\n ensureInitialized(runtime, FrameContexts.content);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('conversations.closeConversation');\n removeHandler('startConversation');\n removeHandler('closeConversation');\n }\n\n /**\n * @hidden\n * Hide from docs\n * ------\n * Allows retrieval of information for all chat members.\n * NOTE: This value should be used only as a hint as to who the members are\n * and never as proof of membership in case your app is being hosted by a malicious party.\n *\n * @returns Promise resolved with information on all chat members\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getChatMembers(): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n resolve(sendAndUnwrap('getChatMembers'));\n });\n }\n\n /**\n * Checks if the conversations capability is supported by the host\n * @returns boolean to represent whether conversations capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.conversations ? true : false;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { Communication, sendMessageEventToChild, sendMessageToParent } from '../internal/communication';\nimport { registerHandler } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { getGenericOnCompleteHandler } from '../internal/utils';\nimport { FrameContexts } from '../public/constants';\nimport { runtime } from '../public/runtime';\nimport { FilePreviewParameters, UserSettingTypes } from './interfaces';\n\n/**\n * @hidden\n * Upload a custom App manifest directly to both team and personal scopes.\n * This method works just for the first party Apps.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function uploadCustomApp(manifestBlob: Blob, onComplete?: (status: boolean, reason?: string) => void): void {\n ensureInitialized(runtime);\n\n sendMessageToParent('uploadCustomApp', [manifestBlob], onComplete ? onComplete : getGenericOnCompleteHandler());\n}\n\n/**\n * @hidden\n * Sends a custom action MessageRequest to host or parent window\n *\n * @param actionName - Specifies name of the custom action to be sent\n * @param args - Specifies additional arguments passed to the action\n * @param callback - Optionally specify a callback to receive response parameters from the parent\n * @returns id of sent message\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function sendCustomMessage(actionName: string, args?: any[], callback?: (...args: any[]) => void): void {\n ensureInitialized(runtime);\n\n sendMessageToParent(actionName, args, callback);\n}\n\n/**\n * @hidden\n * Sends a custom action MessageEvent to a child iframe/window, only if you are not using auth popup.\n * Otherwise it will go to the auth popup (which becomes the child)\n *\n * @param actionName - Specifies name of the custom action to be sent\n * @param args - Specifies additional arguments passed to the action\n * @returns id of sent message\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function sendCustomEvent(actionName: string, args?: any[]): void {\n ensureInitialized(runtime);\n\n //validate childWindow\n if (!Communication.childWindow) {\n throw new Error('The child window has not yet been initialized or is not present');\n }\n sendMessageEventToChild(actionName, args);\n}\n\n/**\n * @hidden\n * Adds a handler for an action sent by a child window or parent window\n *\n * @param actionName - Specifies name of the action message to handle\n * @param customHandler - The callback to invoke when the action message is received. The return value is sent to the child\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function registerCustomHandler(actionName: string, customHandler: (...args: any[]) => any[]): void {\n ensureInitialized(runtime);\n registerHandler(actionName, (...args: any[]) => {\n return customHandler.apply(this, args);\n });\n}\n\n/**\n * @hidden\n * register a handler to be called when a user setting changes. The changed setting type & value is provided in the callback.\n *\n * @param settingTypes - List of user setting changes to subscribe\n * @param handler - When a subscribed setting is updated this handler is called\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function registerUserSettingsChangeHandler(\n settingTypes: UserSettingTypes[],\n handler: (settingType: UserSettingTypes, value: any) => void,\n): void {\n ensureInitialized(runtime);\n\n registerHandler('userSettingsChange', handler, true, [settingTypes]);\n}\n\n/**\n * @hidden\n * Opens a client-friendly preview of the specified file.\n *\n * @param file - The file to preview.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function openFilePreview(filePreviewParameters: FilePreviewParameters): void {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n\n const params = [\n filePreviewParameters.entityId,\n filePreviewParameters.title,\n filePreviewParameters.description,\n filePreviewParameters.type,\n filePreviewParameters.objectUrl,\n filePreviewParameters.downloadUrl,\n filePreviewParameters.webPreviewUrl,\n filePreviewParameters.webEditUrl,\n filePreviewParameters.baseUrl,\n filePreviewParameters.editFile,\n filePreviewParameters.subEntityId,\n filePreviewParameters.viewerAction,\n filePreviewParameters.fileOpenPreference,\n filePreviewParameters.conversationId,\n ];\n\n sendMessageToParent('openFilePreview', params);\n}\n","/**\n * App install dialog constants\n */\nexport const teamsDeepLinkUrlPathForAppInstall = '/l/app/';\n\n/**\n * Calendar constants\n */\nexport const teamsDeepLinkUrlPathForCalendar = '/l/meeting/new';\nexport const teamsDeepLinkAttendeesUrlParameterName = 'attendees';\nexport const teamsDeepLinkStartTimeUrlParameterName = 'startTime';\nexport const teamsDeepLinkEndTimeUrlParameterName = 'endTime';\nexport const teamsDeepLinkSubjectUrlParameterName = 'subject';\nexport const teamsDeepLinkContentUrlParameterName = 'content';\n\n/**\n * Call constants\n */\nexport const teamsDeepLinkUrlPathForCall = '/l/call/0/0';\nexport const teamsDeepLinkSourceUrlParameterName = 'source';\nexport const teamsDeepLinkWithVideoUrlParameterName = 'withVideo';\n\n/**\n * Chat constants\n */\nexport const teamsDeepLinkUrlPathForChat = '/l/chat/0/0';\nexport const teamsDeepLinkUsersUrlParameterName = 'users';\nexport const teamsDeepLinkTopicUrlParameterName = 'topicName';\nexport const teamsDeepLinkMessageUrlParameterName = 'message';\n","import { sendMessageToParent } from '../internal/communication';\nimport { sendAndHandleStatusAndReason } from '../internal/communication';\nimport { createTeamsDeepLinkForAppInstallDialog } from '../internal/deepLinkUtilities';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { FrameContexts } from './constants';\nimport { runtime } from './runtime';\n\nexport namespace appInstallDialog {\n /** Represents set of parameters needed to open the appInstallDialog. */\n export interface OpenAppInstallDialogParams {\n /** A unique identifier for the app being installed. */\n appId: string;\n }\n\n /**\n * Displays a dialog box that allows users to install a specific app within the host environment.\n *\n * @param openAPPInstallDialogParams - See {@link OpenAppInstallDialogParams | OpenAppInstallDialogParams} for more information.\n */\n export function openAppInstallDialog(openAPPInstallDialogParams: OpenAppInstallDialogParams): Promise {\n return new Promise((resolve) => {\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.sidePanel,\n FrameContexts.settings,\n FrameContexts.task,\n FrameContexts.stage,\n FrameContexts.meetingStage,\n );\n if (!isSupported()) {\n throw new Error('Not supported');\n }\n if (runtime.isLegacyTeams) {\n resolve(\n sendAndHandleStatusAndReason(\n 'executeDeepLink',\n createTeamsDeepLinkForAppInstallDialog(openAPPInstallDialogParams.appId),\n ),\n );\n } else {\n sendMessageToParent('appInstallDialog.openAppInstallDialog', [openAPPInstallDialogParams]);\n resolve();\n }\n });\n }\n\n /**\n * Checks if the appInstallDialog capability is supported by the host\n * @returns boolean to represent whether the appInstallDialog capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.appInstallDialog ? true : false;\n }\n}\n","import { sendAndHandleSdkError } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { runtime } from './runtime';\n\n/**\n * Namespace to interact with the appNotification specific part of the SDK\n * @beta\n */\nexport namespace appNotification {\n /**\n * Data structure to represent appNotification information\n *\n * @beta\n */\n export interface NotificationDisplayParam {\n /**\n * Notification title(maximum length: 75 characters)\n */\n title: string;\n /**\n * Notification content (maximum length: 1500 characters)\n */\n content: string;\n /**\n * This would represent an optional icon that can be displayed on the notification. It should have a max size of 49 pixels by 49 pixels\n * If no icon is provided, the notification card would be displayed without an icon\n * The url link to where the icon is stored should be provided as the input string\n */\n icon?: URL;\n /**\n * This would specify how long a notification would be displayed on the screen for (unit: seconds)\n *\n */\n displayDurationInSeconds: number;\n /**\n * A url link to the page in which the notification would direct the user to.\n */\n notificationActionUrl: URL;\n }\n\n /**\n * @internal\n *\n * @hidden\n *\n * @beta\n *\n * Data structure to represent appNotification information that would be sent to the host SDK\n */\n export interface NotificationDisplayParamForAppHost {\n /**\n * Notification title(maximum length: 75 characters)\n */\n title: string;\n /**\n * Notification content (maximum length: 1500 characters)\n */\n content: string;\n /**\n * This would represent an optional icon that can be displayed on the notification. It should have a max size of 49 pixels by 49 pixels\n * If no icon is provided, the notification card would be displayed without an icon\n * The url link to where the icon is stored should be provided as the input string\n */\n notificationIconAsSring?: string;\n /**\n * This would specify how long a notification would be displayed on the screen for (unit: seconds)\n *\n */\n displayDurationInSeconds: number;\n /**\n * A url string type to the page in which the notification would direct the user to.\n */\n notificationActionUrlAsString: string;\n }\n\n /**\n * @internal\n *\n * @hidden\n *\n * @beta\n *\n * This converts the notifcationActionUrl from a URL type to a string type for proper flow across the iframe\n * @param notificationDisplayParam - appNotification display parameter with the notificationActionUrl as a URL type\n * @returns a serialized object that can be sent to the host SDK\n */\n function serializeParam(notificationDisplayParam: NotificationDisplayParam): NotificationDisplayParamForAppHost {\n return {\n title: notificationDisplayParam.title,\n content: notificationDisplayParam.content,\n notificationIconAsSring: notificationDisplayParam.icon?.href,\n displayDurationInSeconds: notificationDisplayParam.displayDurationInSeconds,\n notificationActionUrlAsString: notificationDisplayParam.notificationActionUrl.href,\n };\n }\n\n /**\n * Checks the valididty of the URL passed\n *\n * @param url\n * @returns True if a valid url was passed\n *\n * @beta\n */\n function isValidUrl(url: URL): boolean {\n const validProtocols = ['https:'];\n return validProtocols.includes(url.protocol);\n }\n\n /**\n * Validates that the input string is of property length\n *\n * @param inputString and maximumLength\n * @returns True if string length is within specified limit\n *\n * @beta\n */\n function isValidLength(inputString: string, maxLength: number): boolean {\n return inputString.length <= maxLength;\n }\n\n /**\n * Validates that all the required appNotification display parameters are either supplied or satisfy the required checks\n * @param notificationDisplayParam\n * @throws Error if any of the required parameters aren't supplied\n * @throws Error if content or title length is beyond specific limit\n * @throws Error if invalid url is passed\n * @returns void\n *\n * @beta\n */\n function validateNotificationDisplayParams(notificationDisplayParam: NotificationDisplayParam): void {\n const maxTitleLength = 75;\n const maxContentLength = 1500;\n\n if (!notificationDisplayParam.title) {\n throw new Error('Must supply notification title');\n }\n\n if (!isValidLength(notificationDisplayParam.title, maxTitleLength)) {\n throw new Error(\n `Invalid notification title length: Maximum title length ${maxTitleLength}, title length supplied ${notificationDisplayParam.title.length}`,\n );\n }\n\n if (!notificationDisplayParam.content) {\n throw new Error('Must supply notification content');\n }\n if (!isValidLength(notificationDisplayParam.content, maxContentLength)) {\n throw new Error(\n `Invalid notification content length: Maximum content length ${maxContentLength}, content length supplied ${notificationDisplayParam.content.length}`,\n );\n }\n\n if (!notificationDisplayParam.notificationActionUrl) {\n throw new Error('Must supply notification url');\n }\n if (!isValidUrl(notificationDisplayParam.notificationActionUrl)) {\n throw new Error('Invalid notificationAction url');\n }\n\n if (notificationDisplayParam?.icon !== undefined && !isValidUrl(notificationDisplayParam?.icon)) {\n throw new Error('Invalid icon url');\n }\n\n if (!notificationDisplayParam.displayDurationInSeconds) {\n throw new Error('Must supply notification display duration in seconds');\n }\n\n if (notificationDisplayParam.displayDurationInSeconds < 0) {\n throw new Error('Notification display time must be greater than zero');\n }\n }\n\n /**\n * Displays appNotification after making a validiity check on all of the required parameters, by calling the validateNotificationDisplayParams helper function\n * An interface object containing all the required parameters to be displayed on the notification would be passed in here\n * The notificationDisplayParam would be serialized before passing across to the message handler to ensure all objects passed contain simple parameters that would properly pass across the Iframe\n * @param notificationdisplayparam - Interface object with all the parameters required to display an appNotificiation\n * @returns a promise resolution upon conclusion\n * @throws Error if appNotification capability is not supported\n * @throws Error if notficationDisplayParam was not validated successfully\n *\n * @beta\n */\n export function displayInAppNotification(notificationDisplayParam: NotificationDisplayParam): Promise {\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.stage,\n FrameContexts.sidePanel,\n FrameContexts.meetingStage,\n );\n\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n validateNotificationDisplayParams(notificationDisplayParam);\n return sendAndHandleSdkError('appNotification.displayNotification', serializeParam(notificationDisplayParam));\n }\n\n /**\n * Checks if appNotification is supported by the host\n * @returns boolean to represent whether the appNotification capability is supported\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.appNotification ? true : false;\n }\n}\n","import { teamsDeepLinkHost, teamsDeepLinkProtocol } from './constants';\nimport {\n teamsDeepLinkAttendeesUrlParameterName,\n teamsDeepLinkContentUrlParameterName,\n teamsDeepLinkEndTimeUrlParameterName,\n teamsDeepLinkMessageUrlParameterName,\n teamsDeepLinkSourceUrlParameterName,\n teamsDeepLinkStartTimeUrlParameterName,\n teamsDeepLinkSubjectUrlParameterName,\n teamsDeepLinkTopicUrlParameterName,\n teamsDeepLinkUrlPathForAppInstall,\n teamsDeepLinkUrlPathForCalendar,\n teamsDeepLinkUrlPathForCall,\n teamsDeepLinkUrlPathForChat,\n teamsDeepLinkUsersUrlParameterName,\n teamsDeepLinkWithVideoUrlParameterName,\n} from './deepLinkConstants';\n\nexport function createTeamsDeepLinkForChat(users: string[], topic?: string, message?: string): string {\n if (users.length === 0) {\n throw new Error('Must have at least one user when creating a chat deep link');\n }\n\n const usersSearchParameter =\n `${teamsDeepLinkUsersUrlParameterName}=` + users.map((user) => encodeURIComponent(user)).join(',');\n const topicSearchParameter =\n topic === undefined ? '' : `&${teamsDeepLinkTopicUrlParameterName}=${encodeURIComponent(topic)}`;\n const messageSearchParameter =\n message === undefined ? '' : `&${teamsDeepLinkMessageUrlParameterName}=${encodeURIComponent(message)}`;\n\n return `${teamsDeepLinkProtocol}://${teamsDeepLinkHost}${teamsDeepLinkUrlPathForChat}?${usersSearchParameter}${topicSearchParameter}${messageSearchParameter}`;\n}\n\nexport function createTeamsDeepLinkForCall(targets: string[], withVideo?: boolean, source?: string): string {\n if (targets.length === 0) {\n throw new Error('Must have at least one target when creating a call deep link');\n }\n const usersSearchParameter =\n `${teamsDeepLinkUsersUrlParameterName}=` + targets.map((user) => encodeURIComponent(user)).join(',');\n const withVideoSearchParameter =\n withVideo === undefined ? '' : `&${teamsDeepLinkWithVideoUrlParameterName}=${encodeURIComponent(withVideo)}`;\n const sourceSearchParameter =\n source === undefined ? '' : `&${teamsDeepLinkSourceUrlParameterName}=${encodeURIComponent(source)}`;\n\n return `${teamsDeepLinkProtocol}://${teamsDeepLinkHost}${teamsDeepLinkUrlPathForCall}?${usersSearchParameter}${withVideoSearchParameter}${sourceSearchParameter}`;\n}\n\nexport function createTeamsDeepLinkForCalendar(\n attendees?: string[],\n startTime?: string,\n endTime?: string,\n subject?: string,\n content?: string,\n): string {\n const attendeeSearchParameter =\n attendees === undefined\n ? ''\n : `${teamsDeepLinkAttendeesUrlParameterName}=` +\n attendees.map((attendee) => encodeURIComponent(attendee)).join(',');\n const startTimeSearchParameter =\n startTime === undefined ? '' : `&${teamsDeepLinkStartTimeUrlParameterName}=${encodeURIComponent(startTime)}`;\n const endTimeSearchParameter =\n endTime === undefined ? '' : `&${teamsDeepLinkEndTimeUrlParameterName}=${encodeURIComponent(endTime)}`;\n const subjectSearchParameter =\n subject === undefined ? '' : `&${teamsDeepLinkSubjectUrlParameterName}=${encodeURIComponent(subject)}`;\n const contentSearchParameter =\n content === undefined ? '' : `&${teamsDeepLinkContentUrlParameterName}=${encodeURIComponent(content)}`;\n\n return `${teamsDeepLinkProtocol}://${teamsDeepLinkHost}${teamsDeepLinkUrlPathForCalendar}?${attendeeSearchParameter}${startTimeSearchParameter}${endTimeSearchParameter}${subjectSearchParameter}${contentSearchParameter}`;\n}\n\nexport function createTeamsDeepLinkForAppInstallDialog(appId: string): string {\n if (!appId) {\n throw new Error('App ID must be set when creating an app install dialog deep link');\n }\n return `${teamsDeepLinkProtocol}://${teamsDeepLinkHost}${teamsDeepLinkUrlPathForAppInstall}${encodeURIComponent(\n appId,\n )}`;\n}\n","/* eslint-disable @typescript-eslint/explicit-member-accessibility */\n\nimport { sendAndHandleSdkError, sendMessageToParent } from '../internal/communication';\nimport {\n captureImageMobileSupportVersion,\n getMediaCallbackSupportVersion,\n mediaAPISupportVersion,\n nonFullScreenVideoModeAPISupportVersion,\n scanBarCodeAPIMobileSupportVersion,\n} from '../internal/constants';\nimport { GlobalVars } from '../internal/globalVars';\nimport { registerHandler, removeHandler } from '../internal/handlers';\nimport {\n ensureInitialized,\n isCurrentSDKVersionAtLeast,\n throwExceptionIfMobileApiIsNotSupported,\n} from '../internal/internalAPIs';\nimport {\n createFile,\n decodeAttachment,\n isVideoControllerRegistered,\n throwExceptionIfMediaCallIsNotSupportedOnMobile,\n validateGetMediaInputs,\n validateScanBarCodeInput,\n validateSelectMediaInputs,\n validateViewImagesInput,\n} from '../internal/mediaUtil';\nimport { generateGUID } from '../internal/utils';\nimport { errorNotSupportedOnPlatform, FrameContexts, HostClientType } from './constants';\nimport { DevicePermission, ErrorCode, SdkError } from './interfaces';\nimport { runtime } from './runtime';\n\n/**\n * Interact with media, including capturing and viewing images.\n */\nexport namespace media {\n /** Capture image callback function type. */\n type captureImageCallbackFunctionType = (error: SdkError, files: File[]) => void;\n /** Select media callback function type. */\n type selectMediaCallbackFunctionType = (error: SdkError, attachments: Media[]) => void;\n /** Error callback function type. */\n type errorCallbackFunctionType = (error?: SdkError) => void;\n /** Scan BarCode callback function type. */\n type scanBarCodeCallbackFunctionType = (error: SdkError, decodedText: string) => void;\n /** Get media callback function type. */\n type getMediaCallbackFunctionType = (error: SdkError, blob: Blob) => void;\n\n /**\n * Enum for file formats supported\n */\n export enum FileFormat {\n /** Base64 encoding */\n Base64 = 'base64',\n /** File id */\n ID = 'id',\n }\n\n /**\n * File object that can be used to represent image or video or audio\n */\n export class File {\n /**\n * Content of the file. When format is Base64, this is the base64 content\n * When format is ID, this is id mapping to the URI\n * When format is base64 and app needs to use this directly in HTML tags, it should convert this to dataUrl.\n */\n public content: string;\n\n /**\n * Format of the content\n */\n public format: FileFormat;\n\n /**\n * Size of the file in KB\n */\n public size: number;\n\n /**\n * MIME type. This can be used for constructing a dataUrl, if needed.\n */\n public mimeType: string;\n\n /**\n * Optional: Name of the file\n */\n public name?: string;\n }\n\n /**\n * Launch camera, capture image or choose image from gallery and return the images as a File[] object to the callback.\n *\n * @params callback - Callback will be called with an @see SdkError if there are any.\n * If error is null or undefined, the callback will be called with a collection of @see File objects\n * @remarks\n * Note: Currently we support getting one File through this API, i.e. the file arrays size will be one.\n * Note: For desktop, this API is not supported. Callback will be resolved with ErrorCode.NotSupported.\n *\n */\n export function captureImage(callback: captureImageCallbackFunctionType): void {\n if (!callback) {\n throw new Error('[captureImage] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n\n if (!GlobalVars.isFramelessWindow) {\n const notSupportedError: SdkError = { errorCode: ErrorCode.NOT_SUPPORTED_ON_PLATFORM };\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback(notSupportedError, undefined);\n return;\n }\n\n if (!isCurrentSDKVersionAtLeast(captureImageMobileSupportVersion)) {\n const oldPlatformError: SdkError = { errorCode: ErrorCode.OLD_PLATFORM };\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback(oldPlatformError, undefined);\n return;\n }\n\n sendMessageToParent('captureImage', callback);\n }\n\n /**\n * Checks whether or not media has user permission\n *\n * @returns Promise that will resolve with true if the user had granted the app permission to media information, or with false otherwise,\n * In case of an error, promise will reject with the error. Function can also throw a NOT_SUPPORTED_ON_PLATFORM error\n *\n * @beta\n */\n export function hasPermission(): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isPermissionSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n const permissions: DevicePermission = DevicePermission.Media;\n\n return new Promise((resolve) => {\n resolve(sendAndHandleSdkError('permissions.has', permissions));\n });\n }\n\n /**\n * Requests user permission for media\n *\n * @returns Promise that will resolve with true if the user consented permission for media, or with false otherwise,\n * In case of an error, promise will reject with the error. Function can also throw a NOT_SUPPORTED_ON_PLATFORM error\n *\n * @beta\n */\n export function requestPermission(): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isPermissionSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n const permissions: DevicePermission = DevicePermission.Media;\n\n return new Promise((resolve) => {\n resolve(sendAndHandleSdkError('permissions.request', permissions));\n });\n }\n\n /**\n * Checks if permission capability is supported by the host\n * @returns boolean to represent whether permission is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n function isPermissionSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.permissions ? true : false;\n }\n\n /**\n * Media object returned by the select Media API\n */\n export class Media extends File {\n constructor(that: Media = null) {\n super();\n if (that) {\n this.content = that.content;\n this.format = that.format;\n this.mimeType = that.mimeType;\n this.name = that.name;\n this.preview = that.preview;\n this.size = that.size;\n }\n }\n\n /**\n * A preview of the file which is a lightweight representation.\n * In case of images this will be a thumbnail/compressed image in base64 encoding.\n */\n public preview: string;\n\n /**\n * Gets the media in chunks irrespective of size, these chunks are assembled and sent back to the webapp as file/blob\n * @param callback - callback is called with the @see SdkError if there is an error\n * If error is null or undefined, the callback will be called with @see Blob.\n */\n public getMedia(callback: getMediaCallbackFunctionType): void {\n if (!callback) {\n throw new Error('[get Media] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isCurrentSDKVersionAtLeast(mediaAPISupportVersion)) {\n const oldPlatformError: SdkError = { errorCode: ErrorCode.OLD_PLATFORM };\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback(oldPlatformError, null);\n return;\n }\n if (!validateGetMediaInputs(this.mimeType, this.format, this.content)) {\n const invalidInput: SdkError = { errorCode: ErrorCode.INVALID_ARGUMENTS };\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback(invalidInput, null);\n return;\n }\n // Call the new get media implementation via callbacks if the client version is greater than or equal to '2.0.0'\n if (isCurrentSDKVersionAtLeast(getMediaCallbackSupportVersion)) {\n this.getMediaViaCallback(callback);\n } else {\n this.getMediaViaHandler(callback);\n }\n }\n\n /** Function to retrieve media content, such as images or videos, via callback. */\n private getMediaViaCallback(callback: getMediaCallbackFunctionType): void {\n const helper: MediaHelper = {\n mediaMimeType: this.mimeType,\n assembleAttachment: [],\n };\n const localUriId = [this.content];\n function handleGetMediaCallbackRequest(mediaResult: MediaResult): void {\n if (callback) {\n if (mediaResult && mediaResult.error) {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback(mediaResult.error, null);\n } else {\n if (mediaResult && mediaResult.mediaChunk) {\n // If the chunksequence number is less than equal to 0 implies EOF\n // create file/blob when all chunks have arrived and we get 0/-1 as chunksequence number\n if (mediaResult.mediaChunk.chunkSequence <= 0) {\n const file = createFile(helper.assembleAttachment, helper.mediaMimeType);\n callback(mediaResult.error, file);\n } else {\n // Keep pushing chunks into assemble attachment\n const assemble: AssembleAttachment = decodeAttachment(mediaResult.mediaChunk, helper.mediaMimeType);\n helper.assembleAttachment.push(assemble);\n }\n } else {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback({ errorCode: ErrorCode.INTERNAL_ERROR, message: 'data received is null' }, null);\n }\n }\n }\n }\n sendMessageToParent('getMedia', localUriId, handleGetMediaCallbackRequest);\n }\n\n /** Function to retrieve media content, such as images or videos, via handler. */\n private getMediaViaHandler(callback: getMediaCallbackFunctionType): void {\n const actionName = generateGUID();\n const helper: MediaHelper = {\n mediaMimeType: this.mimeType,\n assembleAttachment: [],\n };\n const params = [actionName, this.content];\n this.content && callback && sendMessageToParent('getMedia', params);\n function handleGetMediaRequest(response: string): void {\n if (callback) {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n const mediaResult: MediaResult = JSON.parse(response);\n if (mediaResult.error) {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback(mediaResult.error, null);\n removeHandler('getMedia' + actionName);\n } else {\n if (mediaResult.mediaChunk) {\n // If the chunksequence number is less than equal to 0 implies EOF\n // create file/blob when all chunks have arrived and we get 0/-1 as chunksequence number\n if (mediaResult.mediaChunk.chunkSequence <= 0) {\n const file = createFile(helper.assembleAttachment, helper.mediaMimeType);\n callback(mediaResult.error, file);\n removeHandler('getMedia' + actionName);\n } else {\n // Keep pushing chunks into assemble attachment\n const assemble: AssembleAttachment = decodeAttachment(mediaResult.mediaChunk, helper.mediaMimeType);\n helper.assembleAttachment.push(assemble);\n }\n } else {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback({ errorCode: ErrorCode.INTERNAL_ERROR, message: 'data received is null' }, null);\n removeHandler('getMedia' + actionName);\n }\n }\n }\n }\n\n registerHandler('getMedia' + actionName, handleGetMediaRequest);\n }\n }\n\n /**\n * Input parameter supplied to the select Media API\n */\n export interface MediaInputs {\n /**\n * Only one media type can be selected at a time\n */\n mediaType: MediaType;\n\n /**\n * max limit of media allowed to be selected in one go, current max limit is 10 set by office lens.\n */\n maxMediaCount: number;\n\n /**\n * Additional properties for customization of select media - Image in mobile devices\n */\n imageProps?: ImageProps;\n\n /**\n * Additional properties for customization of select media - Video in mobile devices\n */\n videoProps?: VideoProps;\n\n /**\n * Additional properties for customization of select media - VideoAndImage in mobile devices\n */\n videoAndImageProps?: VideoAndImageProps;\n\n /**\n * Additional properties for audio capture flows.\n */\n audioProps?: AudioProps;\n }\n\n /**\n * @hidden\n * Hide from docs\n * --------\n * All properties common to Image and Video Props\n */\n interface MediaProps {\n /**\n * @hidden\n * Optional; Lets the developer specify the media source, more than one can be specified.\n * Default value is both camera and gallery\n */\n sources?: Source[];\n\n /**\n * @hidden\n * Optional; Specify in which mode the camera will be opened.\n * Default value is Photo\n */\n startMode?: CameraStartMode;\n\n /**\n * @hidden\n * Optional; indicate if user is allowed to move between front and back camera\n * Default value is true\n */\n cameraSwitcher?: boolean;\n }\n\n /**\n * All properties in ImageProps are optional and have default values in the platform\n */\n export interface ImageProps extends MediaProps {\n /**\n * Optional; indicate if inking on the selected Image is allowed or not\n * Default value is true\n */\n ink?: boolean;\n\n /**\n * Optional; indicate if putting text stickers on the selected Image is allowed or not\n * Default value is true\n */\n textSticker?: boolean;\n\n /**\n * Optional; indicate if image filtering mode is enabled on the selected image\n * Default value is false\n */\n enableFilter?: boolean;\n\n /**\n * Optional; Lets the developer specify the image output formats, more than one can be specified.\n * Default value is Image.\n */\n imageOutputFormats?: ImageOutputFormats[];\n }\n\n /**\n * All properties in VideoProps are optional and have default values in the platform\n */\n export interface VideoProps extends MediaProps {\n /**\n * Optional; the maximum duration in seconds after which the recording should terminate automatically.\n * Default value is defined by the platform serving the API.\n */\n maxDuration?: number;\n\n /**\n * Optional; to determine if the video capturing flow needs to be launched\n * in Full Screen Mode (Lens implementation) or PictureInPicture Mode (Native implementation).\n * Default value is true, indicating video will always launch in Full Screen Mode via lens.\n */\n isFullScreenMode?: boolean;\n\n /**\n * Optional; controls the visibility of stop button in PictureInPicture Mode.\n * Default value is true, indicating the user will be able to stop the video.\n */\n isStopButtonVisible?: boolean;\n\n /**\n * Optional; setting VideoController will register your app to listen to the lifecycle events during the video capture flow.\n * Your app can also dynamically control the experience while capturing the video by notifying the host client.\n */\n videoController?: VideoController;\n }\n\n /**\n * All properties in VideoAndImageProps are optional and have default values in the platform\n */\n export interface VideoAndImageProps extends ImageProps, VideoProps {}\n\n /**\n * All properties in AudioProps are optional and have default values in the platform\n */\n export interface AudioProps {\n /**\n * Optional; the maximum duration in minutes after which the recording should terminate automatically\n * Default value is defined by the platform serving the API.\n */\n maxDuration?: number;\n }\n\n /**\n * @hidden\n * Hide from docs\n * --------\n * Base class which holds the callback and notifies events to the host client\n */\n abstract class MediaController {\n /** Callback that can be registered to handle events related to the playback and control of video content. */\n protected controllerCallback: T;\n\n public constructor(controllerCallback?: T) {\n this.controllerCallback = controllerCallback;\n }\n\n protected abstract getMediaType(): MediaType;\n\n /**\n * @hidden\n * Hide from docs\n * --------\n * This function will be implemented by the respective media class which holds the logic\n * of specific events that needs to be notified to the app.\n * @param mediaEvent indicates the event signed by the host client to the app\n */\n protected abstract notifyEventToApp(mediaEvent: MediaControllerEvent): void;\n\n /**\n * @hidden\n * Hide from docs\n * --------\n * Function to notify the host client to programatically control the experience\n * @param mediaEvent indicates what the event that needs to be signaled to the host client\n * Optional; @param callback is used to send app if host client has successfully handled the notification event or not\n */\n protected notifyEventToHost(mediaEvent: MediaControllerEvent, callback?: errorCallbackFunctionType): void {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n\n try {\n throwExceptionIfMobileApiIsNotSupported(nonFullScreenVideoModeAPISupportVersion);\n } catch (err) {\n if (callback) {\n callback(err);\n }\n return;\n }\n\n const params: MediaControllerParam = { mediaType: this.getMediaType(), mediaControllerEvent: mediaEvent };\n sendMessageToParent('media.controller', [params], (err?: SdkError) => {\n if (callback) {\n callback(err);\n }\n });\n }\n\n /**\n * Function to programatically stop the ongoing media event\n * Optional; @param callback is used to send app if host client has successfully stopped the event or not\n */\n public stop(callback?: errorCallbackFunctionType): void {\n this.notifyEventToHost(MediaControllerEvent.StopRecording, callback);\n }\n }\n\n /**\n * Callback which will register your app to listen to lifecycle events during the video capture flow\n */\n export interface VideoControllerCallback {\n /** The event is a type of callback that can be enlisted to handle various events linked to `onRecordingStarted`, which helps with playback of video content. */\n onRecordingStarted?(): void;\n }\n\n /**\n * VideoController class is used to communicate between the app and the host client during the video capture flow\n */\n export class VideoController extends MediaController {\n /** Gets media type video. */\n protected getMediaType(): MediaType {\n return MediaType.Video;\n }\n /** Notify or send an event related to the playback and control of video content to a registered application. */\n public notifyEventToApp(mediaEvent: MediaControllerEvent): void {\n if (!this.controllerCallback) {\n // Early return as app has not registered with the callback\n return;\n }\n\n switch (mediaEvent) {\n case MediaControllerEvent.StartRecording:\n if (this.controllerCallback.onRecordingStarted) {\n this.controllerCallback.onRecordingStarted();\n break;\n }\n }\n }\n }\n\n /**\n * @beta\n * Events which are used to communicate between the app and the host client during the media recording flow\n */\n export enum MediaControllerEvent {\n /** Start recording. */\n StartRecording = 1,\n /** Stop recording. */\n StopRecording = 2,\n }\n\n /**\n * @hidden\n * Hide from docs\n * --------\n * Interface with relevant info to send communication from the app to the host client\n */\n interface MediaControllerParam {\n /**\n * List of team information\n */\n mediaType: media.MediaType;\n\n /**\n * List of team information\n */\n mediaControllerEvent: MediaControllerEvent;\n }\n\n /**\n * The modes in which camera can be launched in select Media API\n */\n export enum CameraStartMode {\n /** Photo mode. */\n Photo = 1,\n /** Document mode. */\n Document = 2,\n /** Whiteboard mode. */\n Whiteboard = 3,\n /** Business card mode. */\n BusinessCard = 4,\n }\n\n /**\n * Specifies the image source\n */\n export enum Source {\n /** Image source is camera. */\n Camera = 1,\n /** Image source is gallery. */\n Gallery = 2,\n }\n\n /**\n * Specifies the type of Media\n */\n export enum MediaType {\n /** Media type photo or image */\n Image = 1,\n /** Media type video. */\n Video = 2,\n /** Media type video and image. */\n VideoAndImage = 3,\n /** Media type audio. */\n Audio = 4,\n }\n\n /**\n * Input for view images API\n */\n export interface ImageUri {\n /** Image location */\n value: string;\n /** Image Uri type */\n type: ImageUriType;\n }\n\n /**\n * ID contains a mapping for content uri on platform's side, URL is generic\n */\n export enum ImageUriType {\n /** Image Id. */\n ID = 1,\n /** Image URL. */\n URL = 2,\n }\n\n /**\n * Specifies the image output formats.\n */\n export enum ImageOutputFormats {\n /** Outputs image. */\n IMAGE = 1,\n /** Outputs pdf. */\n PDF = 2,\n }\n\n /**\n * Media chunks an output of getMedia API from platform\n */\n export interface MediaChunk {\n /**\n * Base 64 data for the requested uri\n */\n chunk: string;\n\n /**\n * chunk sequence number\n */\n chunkSequence: number;\n }\n\n /**\n * Output of getMedia API from platform\n */\n export interface MediaResult {\n /**\n * error encountered in getMedia API\n */\n error: SdkError;\n\n /**\n * Media chunk which will be assemebled and converted into a blob\n */\n mediaChunk: MediaChunk;\n }\n\n /**\n * Helper object to assembled media chunks\n */\n export interface AssembleAttachment {\n /** A number representing the sequence of the attachment in the media chunks. */\n sequence: number;\n /** A Blob object representing the data of the media chunks. */\n file: Blob;\n }\n\n /**\n * Helper class for assembling media\n */\n interface MediaHelper {\n /** A string representing the MIME type of the media file */\n mediaMimeType: string;\n /** An array of {@link media.AssembleAttachment | AssembleAttachment} objects representing the media files to be sent as attachment */\n assembleAttachment: AssembleAttachment[];\n }\n\n /**\n * Select an attachment using camera/gallery\n *\n * @param mediaInputs - The input params to customize the media to be selected\n * @param callback - The callback to invoke after fetching the media\n */\n export function selectMedia(mediaInputs: MediaInputs, callback: selectMediaCallbackFunctionType): void {\n if (!callback) {\n throw new Error('[select Media] Callback cannot be null');\n }\n\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isCurrentSDKVersionAtLeast(mediaAPISupportVersion)) {\n const oldPlatformError: SdkError = { errorCode: ErrorCode.OLD_PLATFORM };\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback(oldPlatformError, null);\n return;\n }\n\n try {\n throwExceptionIfMediaCallIsNotSupportedOnMobile(mediaInputs);\n } catch (err) {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback(err, null);\n return;\n }\n\n if (!validateSelectMediaInputs(mediaInputs)) {\n const invalidInput: SdkError = { errorCode: ErrorCode.INVALID_ARGUMENTS };\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback(invalidInput, null);\n return;\n }\n\n const params = [mediaInputs];\n // What comes back from native as attachments would just be objects and will be missing getMedia method on them\n sendMessageToParent(\n 'selectMedia',\n params,\n (err: SdkError, localAttachments?: Media[], mediaEvent?: MediaControllerEvent) => {\n // MediaControllerEvent response is used to notify the app about events and is a partial response to selectMedia\n if (mediaEvent) {\n if (isVideoControllerRegistered(mediaInputs)) {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n mediaInputs.videoProps.videoController.notifyEventToApp(mediaEvent);\n }\n return;\n }\n\n // Media Attachments are final response to selectMedia\n if (!localAttachments) {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback(err, null);\n return;\n }\n\n const mediaArray: Media[] = [];\n for (const attachment of localAttachments) {\n mediaArray.push(new Media(attachment));\n }\n callback(err, mediaArray);\n },\n );\n }\n\n /**\n * View images using native image viewer\n *\n * @param uriList - list of URIs for images to be viewed - can be content URI or server URL. Supports up to 10 Images in a single call\n * @param callback - returns back error if encountered, returns null in case of success\n */\n export function viewImages(uriList: ImageUri[], callback: errorCallbackFunctionType): void {\n if (!callback) {\n throw new Error('[view images] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n\n if (!isCurrentSDKVersionAtLeast(mediaAPISupportVersion)) {\n const oldPlatformError: SdkError = { errorCode: ErrorCode.OLD_PLATFORM };\n callback(oldPlatformError);\n return;\n }\n if (!validateViewImagesInput(uriList)) {\n const invalidInput: SdkError = { errorCode: ErrorCode.INVALID_ARGUMENTS };\n callback(invalidInput);\n return;\n }\n\n const params = [uriList];\n sendMessageToParent('viewImages', params, callback);\n }\n\n /**\n * Barcode configuration supplied to scanBarCode API to customize barcode scanning experience in mobile\n * All properties in BarCodeConfig are optional and have default values in the platform\n */\n export interface BarCodeConfig {\n /**\n * Optional; Lets the developer specify the scan timeout interval in seconds\n * Default value is 30 seconds and max allowed value is 60 seconds\n */\n timeOutIntervalInSec?: number;\n }\n\n /**\n * @deprecated\n * As of 2.1.0, please use {@link barCode.scanBarCode barCode.scanBarCode(config?: BarCodeConfig): Promise\\} instead.\n\n * Scan Barcode/QRcode using camera\n *\n * @remarks\n * Note: For desktop and web, this API is not supported. Callback will be resolved with ErrorCode.NotSupported.\n *\n * @param callback - callback to invoke after scanning the barcode\n * @param config - optional input configuration to customize the barcode scanning experience\n */\n export function scanBarCode(callback: scanBarCodeCallbackFunctionType, config?: BarCodeConfig): void {\n if (!callback) {\n throw new Error('[media.scanBarCode] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n\n if (\n GlobalVars.hostClientType === HostClientType.desktop ||\n GlobalVars.hostClientType === HostClientType.web ||\n GlobalVars.hostClientType === HostClientType.rigel ||\n GlobalVars.hostClientType === HostClientType.teamsRoomsWindows ||\n GlobalVars.hostClientType === HostClientType.teamsRoomsAndroid ||\n GlobalVars.hostClientType === HostClientType.teamsPhones ||\n GlobalVars.hostClientType === HostClientType.teamsDisplays\n ) {\n const notSupportedError: SdkError = { errorCode: ErrorCode.NOT_SUPPORTED_ON_PLATFORM };\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback(notSupportedError, null);\n return;\n }\n\n if (!isCurrentSDKVersionAtLeast(scanBarCodeAPIMobileSupportVersion)) {\n const oldPlatformError: SdkError = { errorCode: ErrorCode.OLD_PLATFORM };\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback(oldPlatformError, null);\n return;\n }\n\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n if (!validateScanBarCodeInput(config)) {\n const invalidInput: SdkError = { errorCode: ErrorCode.INVALID_ARGUMENTS };\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n callback(invalidInput, null);\n return;\n }\n\n sendMessageToParent('media.scanBarCode', [config], callback);\n }\n}\n","import { sendAndHandleSdkError } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { validateScanBarCodeInput } from '../internal/mediaUtil';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { DevicePermission, ErrorCode } from './interfaces';\nimport { runtime } from './runtime';\n\n/**\n * Namespace to interact with the barcode scanning-specific part of the SDK.\n *\n * @beta\n */\nexport namespace barCode {\n /**\n * Data structure to customize the barcode scanning experience in scanBarCode API.\n * All properties in BarCodeConfig are optional and have default values in the platform\n *\n * @beta\n */\n export interface BarCodeConfig {\n /**\n * Optional; designates the scan timeout interval in seconds.\n * Default value is 30 seconds, max allowed value is 60 seconds.\n */\n timeOutIntervalInSec?: number;\n }\n\n /**\n * Scan Barcode or QRcode using camera\n *\n * @param barCodeConfig - input configuration to customize the barcode scanning experience\n *\n * @returns a scanned code\n *\n * @beta\n */\n export function scanBarCode(barCodeConfig: BarCodeConfig): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n if (!validateScanBarCodeInput(barCodeConfig)) {\n throw { errorCode: ErrorCode.INVALID_ARGUMENTS };\n }\n\n resolve(sendAndHandleSdkError('media.scanBarCode', barCodeConfig));\n });\n }\n\n /**\n * Checks whether or not media has user permission\n *\n * @returns true if the user has granted the app permission to media information, false otherwise\n *\n * @beta\n */\n export function hasPermission(): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n const permissions: DevicePermission = DevicePermission.Media;\n\n return new Promise((resolve) => {\n resolve(sendAndHandleSdkError('permissions.has', permissions));\n });\n }\n\n /**\n * Requests user permission for media\n *\n * @returns true if the user has granted the app permission to the media, false otherwise\n *\n * @beta\n */\n export function requestPermission(): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n const permissions: DevicePermission = DevicePermission.Media;\n\n return new Promise((resolve) => {\n resolve(sendAndHandleSdkError('permissions.request', permissions));\n });\n }\n\n /**\n * Checks if barCode capability is supported by the host\n * @returns boolean to represent whether the barCode capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.barCode && runtime.supports.permissions ? true : false;\n }\n}\n","import { sendAndHandleStatusAndReason } from '../internal/communication';\nimport { createTeamsDeepLinkForChat } from '../internal/deepLinkUtilities';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform, FrameContexts } from '../public/constants';\nimport { runtime } from '../public/runtime';\n\n/**\n * Describes information needed to start a chat\n *\n * @beta\n */\ninterface OpenChatRequest {\n /**\n * An optional message used when initiating chat\n */\n message?: string;\n}\n\n/**\n * Used when starting a chat with one person\n *\n * @see OpenGroupChatRequest for use when a chat with more than one person\n *\n * @beta\n */\nexport interface OpenSingleChatRequest extends OpenChatRequest {\n /**\n * The Microsoft Entra UPN (e-mail address) of the user to chat with\n */\n user: string;\n}\n\n/**\n * Used when starting a chat with more than one person\n *\n * @see OpenSingleChatRequest for use in a chat with only one person\n *\n * @beta\n */\nexport interface OpenGroupChatRequest extends OpenChatRequest {\n /**\n * Array containing Microsoft Entra UPNs (e-mail addresss) of users to open chat with\n */\n users: string[];\n /**\n * The display name of a conversation for 3 or more users (chats with fewer than three users will ignore this field)\n */\n topic?: string;\n}\n\n/**\n * Contains functionality to start chat with others\n *\n * @beta\n */\nexport namespace chat {\n /**\n * Allows the user to open a chat with a single user and allows\n * for the user to specify the message they wish to send.\n *\n * @param openChatRequest: {@link OpenSingleChatRequest}- a request object that contains a user's email as well as an optional message parameter.\n *\n * @returns Promise resolved upon completion\n *\n * @beta\n */\n export function openChat(openChatRequest: OpenSingleChatRequest): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n if (runtime.isLegacyTeams) {\n resolve(\n sendAndHandleStatusAndReason(\n 'executeDeepLink',\n createTeamsDeepLinkForChat([openChatRequest.user], undefined /*topic*/, openChatRequest.message),\n ),\n );\n } else {\n const sendPromise = sendAndHandleStatusAndReason('chat.openChat', {\n members: openChatRequest.user,\n message: openChatRequest.message,\n });\n resolve(sendPromise);\n }\n });\n }\n /**\n * Allows the user to create a chat with multiple users (2+) and allows\n * for the user to specify a message and name the topic of the conversation. If\n * only 1 user is provided into users array default back to origin openChat.\n *\n * @param openChatRequest: {@link OpenGroupChatRequest} - a request object that contains a list of user emails as well as optional parameters for message and topic (display name for the group chat).\n *\n * @returns Promise resolved upon completion\n *\n * @beta\n */\n export function openGroupChat(openChatRequest: OpenGroupChatRequest): Promise {\n return new Promise((resolve) => {\n if (openChatRequest.users.length < 1) {\n throw Error('OpenGroupChat Failed: No users specified');\n }\n if (openChatRequest.users.length === 1) {\n const chatRequest: OpenSingleChatRequest = {\n user: openChatRequest.users[0],\n message: openChatRequest.message,\n };\n openChat(chatRequest);\n } else {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n if (runtime.isLegacyTeams) {\n resolve(\n sendAndHandleStatusAndReason(\n 'executeDeepLink',\n createTeamsDeepLinkForChat(openChatRequest.users, openChatRequest.topic, openChatRequest.message),\n ),\n );\n } else {\n const sendPromise = sendAndHandleStatusAndReason('chat.openChat', {\n members: openChatRequest.users,\n message: openChatRequest.message,\n topic: openChatRequest.topic,\n });\n resolve(sendPromise);\n }\n }\n });\n }\n\n /**\n * Checks if the chat capability is supported by the host\n * @returns boolean to represent whether the chat capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.chat ? true : false;\n }\n}\n","import { sendAndHandleSdkError } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { DevicePermission, ErrorCode } from './interfaces';\nimport { runtime } from './runtime';\n\n/**\n * Namespace to interact with the geoLocation module-specific part of the SDK. This is the newer version of location module.\n *\n * @beta\n */\nexport namespace geoLocation {\n /**\n * Data struture to represent the location information\n *\n * @beta\n */\n export interface Location {\n /**\n Latitude of the location\n */\n latitude: number;\n /**\n Longitude of the location\n */\n longitude: number;\n /**\n Accuracy describes the maximum distance in meters from the captured coordinates to the possible actual location\n @remarks\n This property is only in scope for mobile\n */\n accuracy?: number;\n /**\n Time stamp when the location was captured\n */\n timestamp?: number;\n }\n /**\n * Fetches current user coordinates\n * @returns Promise that will resolve with {@link geoLocation.Location} object or reject with an error. Function can also throw a NOT_SUPPORTED_ON_PLATFORM error\n *\n * @beta\n */\n export function getCurrentLocation(): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n return sendAndHandleSdkError('location.getLocation', { allowChooseLocation: false, showMap: false });\n }\n\n /**\n * Checks whether or not location has user permission\n *\n * @returns Promise that will resolve with true if the user had granted the app permission to location information, or with false otherwise,\n * In case of an error, promise will reject with the error. Function can also throw a NOT_SUPPORTED_ON_PLATFORM error\n *\n * @beta\n */\n export function hasPermission(): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n const permissions: DevicePermission = DevicePermission.GeoLocation;\n\n return new Promise((resolve) => {\n resolve(sendAndHandleSdkError('permissions.has', permissions));\n });\n }\n\n /**\n * Requests user permission for location\n *\n * @returns true if the user consented permission for location, false otherwise\n * @returns Promise that will resolve with true if the user consented permission for location, or with false otherwise,\n * In case of an error, promise will reject with the error. Function can also throw a NOT_SUPPORTED_ON_PLATFORM error\n *\n * @beta\n */\n export function requestPermission(): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n const permissions: DevicePermission = DevicePermission.GeoLocation;\n\n return new Promise((resolve) => {\n resolve(sendAndHandleSdkError('permissions.request', permissions));\n });\n }\n\n /**\n * Checks if geoLocation capability is supported by the host\n * @returns boolean to represent whether geoLocation is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.geoLocation && runtime.supports.permissions ? true : false;\n }\n\n /**\n * Namespace to interact with the location on map module-specific part of the SDK.\n *\n * @beta\n */\n export namespace map {\n /**\n * Allows user to choose location on map\n *\n * @returns Promise that will resolve with {@link geoLocation.Location} object chosen by the user or reject with an error. Function can also throw a NOT_SUPPORTED_ON_PLATFORM error\n *\n * @beta\n */\n export function chooseLocation(): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n return sendAndHandleSdkError('location.getLocation', { allowChooseLocation: true, showMap: true });\n }\n\n /**\n * Shows the location on map corresponding to the given coordinates\n *\n * @param location - Location to be shown on the map\n * @returns Promise that resolves when the location dialog has been closed or reject with an error. Function can also throw a NOT_SUPPORTED_ON_PLATFORM error\n *\n * @beta\n */\n export function showLocation(location: Location): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n if (!location) {\n throw { errorCode: ErrorCode.INVALID_ARGUMENTS };\n }\n return sendAndHandleSdkError('location.showLocation', location);\n }\n\n /**\n * Checks if geoLocation.map capability is supported by the host\n * @returns boolean to represent whether geoLocation.map is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) &&\n runtime.supports.geoLocation &&\n runtime.supports.geoLocation.map &&\n runtime.supports.permissions\n ? true\n : false;\n }\n }\n}\n","import { media } from '../public/media';\nimport { people } from '../public/people';\nimport {\n imageOutputFormatsAPISupportVersion,\n nonFullScreenVideoModeAPISupportVersion,\n videoAndImageMediaAPISupportVersion,\n} from './constants';\nimport { throwExceptionIfMobileApiIsNotSupported } from './internalAPIs';\n\n/**\n * @hidden\n * Helper function to create a blob from media chunks based on their sequence\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function createFile(assembleAttachment: media.AssembleAttachment[], mimeType: string): Blob {\n if (assembleAttachment == null || mimeType == null || assembleAttachment.length <= 0) {\n return null;\n }\n let file: Blob | undefined;\n let sequence = 1;\n assembleAttachment.sort((a, b) => (a.sequence > b.sequence ? 1 : -1));\n assembleAttachment.forEach((item) => {\n if (item.sequence == sequence) {\n if (file) {\n file = new Blob([file, item.file], { type: mimeType });\n } else {\n file = new Blob([item.file], { type: mimeType });\n }\n sequence++;\n }\n });\n return file;\n}\n\n/**\n * @hidden\n * Helper function to convert Media chunks into another object type which can be later assemebled\n * Converts base 64 encoded string to byte array and then into an array of blobs\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function decodeAttachment(attachment: media.MediaChunk, mimeType: string): media.AssembleAttachment {\n if (attachment == null || mimeType == null) {\n return null;\n }\n const decoded = atob(attachment.chunk);\n const byteNumbers = new Array(decoded.length);\n for (let i = 0; i < decoded.length; i++) {\n byteNumbers[i] = decoded.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n const blob: Blob = new Blob([byteArray], { type: mimeType });\n const assemble: media.AssembleAttachment = {\n sequence: attachment.chunkSequence,\n file: blob,\n };\n return assemble;\n}\n\n/**\n * @hidden\n * Function throws an SdkError if the media call is not supported on current mobile version, else undefined.\n *\n * @throws an SdkError if the media call is not supported\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function throwExceptionIfMediaCallIsNotSupportedOnMobile(mediaInputs: media.MediaInputs): void {\n if (isMediaCallForVideoAndImageInputs(mediaInputs)) {\n throwExceptionIfMobileApiIsNotSupported(videoAndImageMediaAPISupportVersion);\n } else if (isMediaCallForNonFullScreenVideoMode(mediaInputs)) {\n throwExceptionIfMobileApiIsNotSupported(nonFullScreenVideoModeAPISupportVersion);\n } else if (isMediaCallForImageOutputFormats(mediaInputs)) {\n throwExceptionIfMobileApiIsNotSupported(imageOutputFormatsAPISupportVersion);\n }\n}\n\n/**\n * @hidden\n * Function returns true if the app has registered to listen to video controller events, else false.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function isVideoControllerRegistered(mediaInputs: media.MediaInputs): boolean {\n if (\n mediaInputs.mediaType == media.MediaType.Video &&\n mediaInputs.videoProps &&\n mediaInputs.videoProps.videoController\n ) {\n return true;\n }\n return false;\n}\n\n/**\n * @hidden\n * Returns true if the mediaInput params are valid and false otherwise\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function validateSelectMediaInputs(mediaInputs: media.MediaInputs): boolean {\n if (mediaInputs == null || mediaInputs.maxMediaCount > 10) {\n return false;\n }\n return true;\n}\n\n/**\n * @hidden\n * Returns true if the mediaInput params are called for mediatype Image and contains Image outputs formats, false otherwise\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function isMediaCallForImageOutputFormats(mediaInputs: media.MediaInputs): boolean {\n if (mediaInputs?.mediaType == media.MediaType.Image && mediaInputs?.imageProps?.imageOutputFormats) {\n return true;\n }\n return false;\n}\n\n/**\n * @hidden\n * Returns true if the mediaInput params are called for mediatype VideoAndImage and false otherwise\n *\n * @internal\n */\nexport function isMediaCallForVideoAndImageInputs(mediaInputs: media.MediaInputs): boolean {\n if (mediaInputs && (mediaInputs.mediaType == media.MediaType.VideoAndImage || mediaInputs.videoAndImageProps)) {\n return true;\n }\n return false;\n}\n\n/**\n * @hidden\n * Returns true if the mediaInput params are called for non-full screen video mode and false otherwise\n *\n * @internal\n */\nexport function isMediaCallForNonFullScreenVideoMode(mediaInputs: media.MediaInputs): boolean {\n if (\n mediaInputs &&\n mediaInputs.mediaType == media.MediaType.Video &&\n mediaInputs.videoProps &&\n !mediaInputs.videoProps.isFullScreenMode\n ) {\n return true;\n }\n return false;\n}\n\n/**\n * @hidden\n * Returns true if the get Media params are valid and false otherwise\n *\n * @internal\n */\nexport function validateGetMediaInputs(mimeType: string, format: media.FileFormat, content: string): boolean {\n if (mimeType == null || format == null || format != media.FileFormat.ID || content == null) {\n return false;\n }\n return true;\n}\n\n/**\n * @hidden\n * Returns true if the view images param is valid and false otherwise\n *\n * @internal\n */\nexport function validateViewImagesInput(uriList: media.ImageUri[]): boolean {\n if (uriList == null || uriList.length <= 0 || uriList.length > 10) {\n return false;\n }\n return true;\n}\n\n/**\n * @hidden\n * Returns true if the scan barcode param is valid and false otherwise\n *\n * @internal\n */\nexport function validateScanBarCodeInput(barCodeConfig: media.BarCodeConfig): boolean {\n if (barCodeConfig) {\n if (\n barCodeConfig.timeOutIntervalInSec === null ||\n barCodeConfig.timeOutIntervalInSec <= 0 ||\n barCodeConfig.timeOutIntervalInSec > 60\n ) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @hidden\n * Returns true if the people picker params are valid and false otherwise\n *\n * @internal\n */\nexport function validatePeoplePickerInput(peoplePickerInputs: people.PeoplePickerInputs): boolean {\n if (peoplePickerInputs) {\n if (peoplePickerInputs.title) {\n if (typeof peoplePickerInputs.title !== 'string') {\n return false;\n }\n }\n\n if (peoplePickerInputs.setSelected) {\n if (typeof peoplePickerInputs.setSelected !== 'object') {\n return false;\n }\n }\n\n if (peoplePickerInputs.openOrgWideSearchInChatOrChannel) {\n if (typeof peoplePickerInputs.openOrgWideSearchInChatOrChannel !== 'boolean') {\n return false;\n }\n }\n if (peoplePickerInputs.singleSelect) {\n if (typeof peoplePickerInputs.singleSelect !== 'boolean') {\n return false;\n }\n }\n }\n return true;\n}\n","import { AdaptiveCardVersion } from './interfaces';\nimport { runtime } from './runtime';\n\n/**\n * @returns The {@linkcode AdaptiveCardVersion} representing the Adaptive Card schema\n * version supported by the host, or undefined if the host does not support Adaptive Cards\n */\nexport function getAdaptiveCardSchemaVersion(): AdaptiveCardVersion | undefined {\n if (!runtime.hostVersionsInfo) {\n return undefined;\n } else {\n return runtime.hostVersionsInfo.adaptiveCardSchemaVersion;\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\n\nimport { sendMessageToParent } from '../internal/communication';\nimport { registerHandler } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { getGenericOnCompleteHandler } from '../internal/utils';\nimport { FrameContexts } from './constants';\nimport { runtime } from './runtime';\n\n/** onComplete function type */\ntype onCompleteFunctionType = (status: boolean, reason?: string) => void;\n/** addEventListner function type */\ntype addEventListnerFunctionType = (message: any) => void;\n\n/** Represents a window or frame within the host app. */\nexport interface IAppWindow {\n /**\n * Send a message to the AppWindow.\n *\n * @param message - The message to send\n * @param onComplete - The callback to know if the postMessage has been success/failed.\n */\n postMessage(message: any, onComplete?: onCompleteFunctionType): void;\n\n /**\n * Add a listener that will be called when an event is received from this AppWindow.\n *\n * @param type - The event to listen to. Currently the only supported type is 'message'.\n * @param listener - The listener that will be called\n */\n addEventListener(type: string, listener: Function): void;\n}\n\n/**\n * An object that application can utilize to establish communication\n * with the child window it opened, which contains the corresponding task.\n */\nexport class ChildAppWindow implements IAppWindow {\n /**\n * Send a message to the ChildAppWindow.\n *\n * @param message - The message to send\n * @param onComplete - The callback to know if the postMessage has been success/failed.\n */\n public postMessage(message: any, onComplete?: onCompleteFunctionType): void {\n ensureInitialized(runtime);\n sendMessageToParent('messageForChild', [message], onComplete ? onComplete : getGenericOnCompleteHandler());\n }\n /**\n * Add a listener that will be called when an event is received from the ChildAppWindow.\n *\n * @param type - The event to listen to. Currently the only supported type is 'message'.\n * @param listener - The listener that will be called\n */\n public addEventListener(type: string, listener: addEventListnerFunctionType): void {\n ensureInitialized(runtime);\n if (type === 'message') {\n registerHandler('messageForParent', listener);\n }\n }\n}\n\n/**\n * An object that is utilized to facilitate communication with a parent window\n * that initiated the opening of current window. For instance, a dialog or task\n * module would utilize it to transmit messages to the application that launched it.\n */\nexport class ParentAppWindow implements IAppWindow {\n /** Represents a parent window or frame. */\n private static _instance: ParentAppWindow;\n /** Get the parent window instance. */\n public static get Instance(): IAppWindow {\n // Do you need arguments? Make it a regular method instead.\n return this._instance || (this._instance = new this());\n }\n\n /**\n * Send a message to the ParentAppWindow.\n *\n * @param message - The message to send\n * @param onComplete - The callback to know if the postMessage has been success/failed.\n */\n public postMessage(message: any, onComplete?: onCompleteFunctionType): void {\n ensureInitialized(runtime, FrameContexts.task);\n sendMessageToParent('messageForParent', [message], onComplete ? onComplete : getGenericOnCompleteHandler());\n }\n\n /**\n * Add a listener that will be called when an event is received from the ParentAppWindow.\n *\n * @param type - The event to listen to. Currently the only supported type is 'message'.\n * @param listener - The listener that will be called\n */\n public addEventListener(type: string, listener: addEventListnerFunctionType): void {\n ensureInitialized(runtime, FrameContexts.task);\n if (type === 'message') {\n registerHandler('messageForChild', listener);\n }\n }\n}\n","import { sendAndHandleSdkError } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { isValidHttpsURL } from '../internal/utils';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { ErrorCode } from './interfaces';\nimport { runtime } from './runtime';\n\n/**\n * Namespace to power up the in-app browser experiences in the Host App.\n * For e.g., opening a URL in the Host App inside a browser\n *\n * @beta\n */\nexport namespace secondaryBrowser {\n /**\n * Open a URL in the secondary browser aka in-app browser\n *\n * @param url Url to open in the browser\n * @returns Promise that successfully resolves if the URL opens in the secondaryBrowser\n * or throws an error {@link SdkError} incase of failure before starting navigation\n *\n * @remarks Any error that happens after navigation begins is handled by the platform browser component and not returned from this function.\n * @beta\n */\n export function open(url: URL): Promise {\n ensureInitialized(runtime, FrameContexts.content);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n if (!url || !isValidHttpsURL(url)) {\n throw { errorCode: ErrorCode.INVALID_ARGUMENTS, message: 'Invalid Url: Only https URL is allowed' };\n }\n\n return sendAndHandleSdkError('secondaryBrowser.open', url.toString());\n }\n\n /**\n * Checks if secondaryBrowser capability is supported by the host\n * @returns boolean to represent whether secondaryBrowser is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.secondaryBrowser ? true : false;\n }\n}\n","import { sendMessageToParent } from '../internal/communication';\nimport { locationAPIsRequiredVersion } from '../internal/constants';\nimport { ensureInitialized, isCurrentSDKVersionAtLeast } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { ErrorCode, SdkError } from './interfaces';\nimport { runtime } from './runtime';\n\n/**\n * @deprecated\n * As of 2.1.0, please use geoLocation namespace.\n *\n * Namespace to interact with the location module-specific part of the SDK.\n */\nexport namespace location {\n /** Get location callback function type */\n type getLocationCallbackFunctionType = (error: SdkError, location: Location) => void;\n /** Show location callback function type */\n type showLocationCallbackFunctionType = (error: SdkError, status: boolean) => void;\n\n /**\n * @deprecated\n * Data Structure to set the location properties in getLocation call.\n */\n export interface LocationProps {\n /**\n whether user can alter location or not\n if false, user will be shown current location \n and wouldn't be allowed to alter it\n */\n allowChooseLocation: boolean;\n /**\n whether selected location should be shown to user on map or not.\n If allowChooseLocation is true, this parameter will be ignored by platform.\n If allowChooseLocation is false, and this parameter is not provided, default \n value will be false.\n */\n showMap?: boolean;\n }\n\n /**\n * @deprecated\n * Data struture to represent the location information\n */\n export interface Location {\n /**\n Latitude of the location\n */\n latitude: number;\n /**\n Longitude of the location\n */\n longitude: number;\n /**\n Accuracy of the coordinates captured\n */\n accuracy?: number;\n /**\n Time stamp when the location was captured\n */\n timestamp?: number;\n }\n\n /**\n * @deprecated\n * As of 2.1.0, please use one of the following functions:\n * - {@link geoLocation.getCurrentLocation geoLocation.getCurrentLocation(): Promise\\} to get the current location.\n * - {@link geoLocation.map.chooseLocation geoLocation.map.chooseLocation(): Promise\\} to choose location on map.\n *\n * Fetches user location\n * @param props {@link LocationProps} - Specifying how the location request is handled\n * @param callback - Callback to invoke when current user location is fetched\n */\n export function getLocation(props: LocationProps, callback: getLocationCallbackFunctionType): void {\n if (!callback) {\n throw new Error('[location.getLocation] Callback cannot be null');\n }\n\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n\n if (!isCurrentSDKVersionAtLeast(locationAPIsRequiredVersion)) {\n throw { errorCode: ErrorCode.OLD_PLATFORM };\n }\n if (!props) {\n throw { errorCode: ErrorCode.INVALID_ARGUMENTS };\n }\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('location.getLocation', [props], callback);\n }\n\n /**\n * @deprecated\n * As of 2.1.0, please use {@link geoLocation.map.showLocation geoLocation.map.showLocation(location: Location): Promise\\} instead.\n *\n * Shows the location on map corresponding to the given coordinates\n *\n * @param location - Location to be shown on the map\n * @param callback - Callback to invoke when the location is opened on map\n */\n export function showLocation(location: Location, callback: showLocationCallbackFunctionType): void {\n if (!callback) {\n throw new Error('[location.showLocation] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isCurrentSDKVersionAtLeast(locationAPIsRequiredVersion)) {\n throw { errorCode: ErrorCode.OLD_PLATFORM };\n }\n if (!location) {\n throw { errorCode: ErrorCode.INVALID_ARGUMENTS };\n }\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n sendMessageToParent('location.showLocation', [location], callback);\n }\n\n /**\n * @deprecated\n * As of 2.1.0, please use geoLocation namespace, and use {@link geoLocation.isSupported geoLocation.isSupported: boolean} to check if geoLocation is supported.\n *\n * Checks if Location capability is supported by the host\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @returns boolean to represent whether Location is supported\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.location ? true : false;\n }\n}\n","import { sendMessageToParent } from '../internal/communication';\nimport { doesHandlerExist, registerHandler, removeHandler } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { FrameContexts } from './constants';\nimport { SdkError } from './interfaces';\nimport { runtime } from './runtime';\n\n/**\n * Interact with meetings, including retrieving meeting details, getting mic status, and sharing app content.\n * This namespace is used to handle meeting related functionality like\n * get meeting details, get/update state of mic, sharing app content and more.\n */\nexport namespace meeting {\n /** Error callback function type */\n type errorCallbackFunctionType = (error: SdkError | null, result: boolean | null) => void;\n /** Get live stream state callback function type */\n type getLiveStreamStateCallbackFunctionType = (\n error: SdkError | null,\n liveStreamState: LiveStreamState | null,\n ) => void;\n /** Live stream error callback function type */\n type liveStreamErrorCallbackFunctionType = (error: SdkError | null) => void;\n /** Register live stream changed handler function type */\n type registerLiveStreamChangedHandlerFunctionType = (liveStreamState: LiveStreamState) => void;\n /** Get app content stage sharing capabilities callback function type */\n type getAppContentCallbackFunctionType = (\n error: SdkError | null,\n appContentStageSharingCapabilities: IAppContentStageSharingCapabilities | null,\n ) => void;\n /** Get app content stage sharing state callback function type */\n type getAppContentStageCallbackFunctionType = (\n error: SdkError | null,\n appContentStageSharingState: IAppContentStageSharingState | null,\n ) => void;\n /** Register speaking state change handler function type */\n type registerSpeakingStateChangeHandlerFunctionType = (speakingState: ISpeakingState) => void;\n /**\n * @hidden\n * Data structure to represent meeting details\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface IMeetingDetailsResponse {\n /**\n * @hidden\n * details object\n */\n details: IMeetingDetails | ICallDetails;\n\n /**\n * @hidden\n * conversation object\n */\n conversation: IConversation;\n\n /**\n * @hidden\n * organizer object\n */\n organizer: IOrganizer;\n }\n\n /**\n * @hidden\n * Hide from docs\n * Base data structure to represent a meeting or call detail\n */\n export interface IMeetingOrCallDetailsBase {\n /**\n * @hidden\n * Scheduled start time of the meeting or start time of the call\n */\n scheduledStartTime: string;\n\n /**\n * @hidden\n * url to join the current meeting or call\n */\n joinUrl?: string;\n\n /**\n * @hidden\n * type of the meeting or call\n */\n type?: T;\n }\n\n /**\n * @hidden\n * Hide from docs\n * Data structure to represent call details\n */\n export type ICallDetails = IMeetingOrCallDetailsBase;\n\n /**\n * @hidden\n * Hide from docs\n * Data structure to represent meeting details.\n */\n export interface IMeetingDetails extends IMeetingOrCallDetailsBase {\n /**\n * @hidden\n * Scheduled end time of the meeting\n */\n scheduledEndTime: string;\n\n /**\n * @hidden\n * meeting title name of the meeting\n */\n title?: string;\n }\n\n /**\n * @hidden\n * Data structure to represent a conversation object.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface IConversation {\n /**\n * @hidden\n * conversation id of the meeting\n */\n id: string;\n }\n\n /**\n * @hidden\n * Data structure to represent an organizer object.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface IOrganizer {\n /**\n * @hidden\n * organizer id of the meeting\n */\n id?: string;\n /**\n * @hidden\n * tenant id of the meeting\n */\n tenantId?: string;\n }\n\n /** Represents the current live streaming state of a meeting */\n export interface LiveStreamState {\n /**\n * indicates whether meeting is streaming\n */\n isStreaming: boolean;\n\n /**\n * error object in case there is a failure\n */\n error?: {\n /** error code from the streaming service, e.g. IngestionFailure */\n code: string;\n /** detailed error message string */\n message?: string;\n };\n }\n\n /** Represents app permission to share contents to meeting. */\n export interface IAppContentStageSharingCapabilities {\n /**\n * indicates whether app has permission to share contents to meeting stage\n */\n doesAppHaveSharePermission: boolean;\n }\n\n /** Represents app being shared to stage. */\n export interface IAppContentStageSharingState {\n /**\n * indicates whether app is currently being shared to stage\n */\n isAppSharing: boolean;\n }\n\n /**\n * Property bag for the speakingState changed event\n *\n */\n export interface ISpeakingState {\n /**\n * Indicates whether one or more participants in a meeting are speaking, or\n * if no participants are speaking\n */\n isSpeakingDetected: boolean;\n\n /**\n * error object in case there is a failure\n */\n error?: SdkError;\n }\n\n /**\n * Property bag for the meeting reaction received event\n *\n * @hidden\n * Hide from docs.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @beta\n */\n export interface MeetingReactionReceivedEventData {\n /**\n * Indicates the type of meeting reaction received\n *\n * @hidden\n * Hide from docs.\n */\n meetingReactionType?: MeetingReactionType;\n /**\n * error object in case there is a failure\n *\n * @hidden\n * Hide from docs.\n */\n error?: SdkError;\n }\n\n /**\n * Interface for raiseHandState properties\n *\n * @hidden\n * Hide from docs.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @beta\n */\n export interface IRaiseHandState {\n /** Indicates whether the selfParticipant's hand is raised or not\n *\n * @hidden\n * Hide from docs.\n */\n\n isHandRaised: boolean;\n }\n\n /**\n * Property bag for the raiseHandState changed event\n *\n * @hidden\n * Hide from docs.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @beta\n */\n export interface RaiseHandStateChangedEventData {\n /**\n * entire raiseHandState object for the selfParticipant\n *\n * @hidden\n * Hide from docs.\n */\n raiseHandState: IRaiseHandState;\n\n /**\n * error object in case there is a failure\n *\n * @hidden\n * Hide from docs.\n */\n error?: SdkError;\n }\n\n /**\n * Interface for mic state change\n *\n * @hidden\n * Hide from docs.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @beta\n */\n export interface MicState {\n /**\n * Indicates the mute status of the mic\n */\n isMicMuted: boolean;\n }\n\n /**\n * Reasons for the app's microphone state to change\n */\n enum MicStateChangeReason {\n HostInitiated,\n AppInitiated,\n AppDeclinedToChange,\n AppFailedToChange,\n }\n\n /**\n * Interface for RequestAppAudioHandling properties\n *\n * @hidden\n * Hide from docs.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @beta\n */\n export interface RequestAppAudioHandlingParams {\n /**\n * Indicates whether the app is requesting to start handling audio, or if\n * it's giving audio back to the host\n */\n isAppHandlingAudio: boolean;\n /**\n * Callback for the host to tell the app to change its microphone state\n * @param micState The microphone state for the app to use\n * @returns A promise with the updated microphone state\n */\n micMuteStateChangedCallback: (micState: MicState) => Promise;\n }\n\n /**\n * Different types of meeting reactions that can be sent/received\n *\n * @hidden\n * Hide from docs.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @beta\n */\n export enum MeetingReactionType {\n like = 'like',\n heart = 'heart',\n laugh = 'laugh',\n surprised = 'surprised',\n applause = 'applause',\n }\n\n /** Represents the type of a meeting */\n export enum MeetingType {\n /** Used when the meeting type is not known. */\n Unknown = 'Unknown',\n /** Used for ad hoc meetings that are created on the fly. */\n Adhoc = 'Adhoc',\n /** Used for meetings that have been scheduled in advance. */\n Scheduled = 'Scheduled',\n /** Used for meetings that occur on a recurring basis. */\n Recurring = 'Recurring',\n /** Used for live events or webinars. */\n Broadcast = 'Broadcast',\n /** Used for meetings that are created on the fly, but with a more polished experience than ad hoc meetings. */\n MeetNow = 'MeetNow',\n }\n\n /** Represents the type of a call. */\n export enum CallType {\n /** Represents a call between two people. */\n OneOnOneCall = 'oneOnOneCall',\n /** Represents a call between more than two people. */\n GroupCall = 'groupCall',\n }\n\n /**\n * Allows an app to get the incoming audio speaker setting for the meeting user\n *\n * @param callback - Callback contains 2 parameters, error and result.\n *\n * error can either contain an error of type SdkError, incase of an error, or null when fetch is successful\n * result can either contain the true/false value, incase of a successful fetch or null when the fetching fails\n * result: True means incoming audio is muted and false means incoming audio is unmuted\n */\n export function getIncomingClientAudioState(callback: errorCallbackFunctionType): void {\n if (!callback) {\n throw new Error('[get incoming client audio state] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel, FrameContexts.meetingStage);\n sendMessageToParent('getIncomingClientAudioState', callback);\n }\n\n /**\n * Allows an app to toggle the incoming audio speaker setting for the meeting user from mute to unmute or vice-versa\n *\n * @param callback - Callback contains 2 parameters, error and result.\n * error can either contain an error of type SdkError, incase of an error, or null when toggle is successful\n * result can either contain the true/false value, incase of a successful toggle or null when the toggling fails\n * result: True means incoming audio is muted and false means incoming audio is unmuted\n */\n export function toggleIncomingClientAudio(callback: errorCallbackFunctionType): void {\n if (!callback) {\n throw new Error('[toggle incoming client audio] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel, FrameContexts.meetingStage);\n sendMessageToParent('toggleIncomingClientAudio', callback);\n }\n\n /**\n * @hidden\n * Allows an app to get the meeting details for the meeting\n *\n * @param callback - Callback contains 2 parameters, error and meetingDetailsResponse.\n * error can either contain an error of type SdkError, incase of an error, or null when get is successful\n * result can either contain a IMeetingDetailsResponse value, in case of a successful get or null when the get fails\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getMeetingDetails(\n callback: (error: SdkError | null, meetingDetails: IMeetingDetailsResponse | null) => void,\n ): void {\n if (!callback) {\n throw new Error('[get meeting details] Callback cannot be null');\n }\n ensureInitialized(\n runtime,\n FrameContexts.sidePanel,\n FrameContexts.meetingStage,\n FrameContexts.settings,\n FrameContexts.content,\n );\n sendMessageToParent('meeting.getMeetingDetails', callback);\n }\n\n /**\n * @hidden\n * Allows an app to get the authentication token for the anonymous or guest user in the meeting\n *\n * @param callback - Callback contains 2 parameters, error and authenticationTokenOfAnonymousUser.\n * error can either contain an error of type SdkError, incase of an error, or null when get is successful\n * authenticationTokenOfAnonymousUser can either contain a string value, incase of a successful get or null when the get fails\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getAuthenticationTokenForAnonymousUser(\n callback: (error: SdkError | null, authenticationTokenOfAnonymousUser: string | null) => void,\n ): void {\n if (!callback) {\n throw new Error('[get Authentication Token For AnonymousUser] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel, FrameContexts.meetingStage, FrameContexts.task);\n sendMessageToParent('meeting.getAuthenticationTokenForAnonymousUser', callback);\n }\n\n /**\n * Allows an app to get the state of the live stream in the current meeting\n *\n * @param callback - Callback contains 2 parameters: error and liveStreamState.\n * error can either contain an error of type SdkError, in case of an error, or null when get is successful\n * liveStreamState can either contain a LiveStreamState value, or null when operation fails\n */\n export function getLiveStreamState(callback: getLiveStreamStateCallbackFunctionType): void {\n if (!callback) {\n throw new Error('[get live stream state] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel);\n sendMessageToParent('meeting.getLiveStreamState', callback);\n }\n\n /**\n * Allows an app to request the live streaming be started at the given streaming url\n *\n * @remarks\n * Use getLiveStreamState or registerLiveStreamChangedHandler to get updates on the live stream state\n *\n * @param streamUrl - the url to the stream resource\n * @param streamKey - the key to the stream resource\n * @param callback - Callback contains error parameter which can be of type SdkError in case of an error, or null when operation is successful\n */\n export function requestStartLiveStreaming(\n callback: liveStreamErrorCallbackFunctionType,\n streamUrl: string,\n streamKey?: string,\n ): void {\n if (!callback) {\n throw new Error('[request start live streaming] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel);\n sendMessageToParent('meeting.requestStartLiveStreaming', [streamUrl, streamKey], callback);\n }\n\n /**\n * Allows an app to request the live streaming be stopped at the given streaming url\n *\n * @remarks\n * Use getLiveStreamState or registerLiveStreamChangedHandler to get updates on the live stream state\n *\n * @param callback - Callback contains error parameter which can be of type SdkError in case of an error, or null when operation is successful\n */\n export function requestStopLiveStreaming(callback: liveStreamErrorCallbackFunctionType): void {\n if (!callback) {\n throw new Error('[request stop live streaming] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel);\n sendMessageToParent('meeting.requestStopLiveStreaming', callback);\n }\n\n /**\n * Registers a handler for changes to the live stream.\n *\n * @remarks\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler - The handler to invoke when the live stream state changes\n */\n export function registerLiveStreamChangedHandler(handler: registerLiveStreamChangedHandlerFunctionType): void {\n if (!handler) {\n throw new Error('[register live stream changed handler] Handler cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel);\n registerHandler('meeting.liveStreamChanged', handler);\n }\n\n /**\n * Allows an app to share contents in the meeting\n *\n * @param callback - Callback contains 2 parameters, error and result.\n * error can either contain an error of type SdkError, incase of an error, or null when share is successful\n * result can either contain a true value, incase of a successful share or null when the share fails\n * @param appContentUrl - is the input URL which needs to be shared on to the stage\n */\n export function shareAppContentToStage(callback: errorCallbackFunctionType, appContentUrl: string): void {\n if (!callback) {\n throw new Error('[share app content to stage] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel, FrameContexts.meetingStage);\n sendMessageToParent('meeting.shareAppContentToStage', [appContentUrl], callback);\n }\n\n /**\n * Provides information related app's in-meeting sharing capabilities\n *\n * @param callback - Callback contains 2 parameters, error and result.\n * error can either contain an error of type SdkError (error indication), or null (non-error indication)\n * appContentStageSharingCapabilities can either contain an IAppContentStageSharingCapabilities object\n * (indication of successful retrieval), or null (indication of failed retrieval)\n */\n export function getAppContentStageSharingCapabilities(callback: getAppContentCallbackFunctionType): void {\n if (!callback) {\n throw new Error('[get app content stage sharing capabilities] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel, FrameContexts.meetingStage);\n sendMessageToParent('meeting.getAppContentStageSharingCapabilities', callback);\n }\n\n /**\n * @hidden\n * Hide from docs.\n * Terminates current stage sharing session in meeting\n *\n * @param callback - Callback contains 2 parameters, error and result.\n * error can either contain an error of type SdkError (error indication), or null (non-error indication)\n * result can either contain a true boolean value (successful termination), or null (unsuccessful fetch)\n */\n export function stopSharingAppContentToStage(callback: errorCallbackFunctionType): void {\n if (!callback) {\n throw new Error('[stop sharing app content to stage] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel, FrameContexts.meetingStage);\n sendMessageToParent('meeting.stopSharingAppContentToStage', callback);\n }\n\n /**\n * Provides information related to current stage sharing state for app\n *\n * @param callback - Callback contains 2 parameters, error and result.\n * error can either contain an error of type SdkError (error indication), or null (non-error indication)\n * appContentStageSharingState can either contain an IAppContentStageSharingState object\n * (indication of successful retrieval), or null (indication of failed retrieval)\n */\n export function getAppContentStageSharingState(callback: getAppContentStageCallbackFunctionType): void {\n if (!callback) {\n throw new Error('[get app content stage sharing state] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel, FrameContexts.meetingStage);\n sendMessageToParent('meeting.getAppContentStageSharingState', callback);\n }\n\n /**\n * Registers a handler for changes to paticipant speaking states. This API returns {@link ISpeakingState}, which will have isSpeakingDetected\n * and/or an error object. If any participant is speaking, isSpeakingDetected will be true. If no participants are speaking, isSpeakingDetected\n * will be false. Default value is false. Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler The handler to invoke when the speaking state of any participant changes (start/stop speaking).\n */\n export function registerSpeakingStateChangeHandler(handler: registerSpeakingStateChangeHandlerFunctionType): void {\n if (!handler) {\n throw new Error('[registerSpeakingStateChangeHandler] Handler cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel, FrameContexts.meetingStage);\n registerHandler('meeting.speakingStateChanged', handler);\n }\n\n /**\n * Registers a handler for changes to the selfParticipant's (current user's) raiseHandState. If the selfParticipant raises their hand, isHandRaised\n * will be true. By default and if the selfParticipant hand is lowered, isHandRaised will be false. This API will return {@link RaiseHandStateChangedEventData}\n * that will have the raiseHandState or an error object. Only one handler can be registered at a time. A subsequent registration\n * replaces an existing registration.\n *\n * @param handler The handler to invoke when the selfParticipant's (current user's) raiseHandState changes.\n *\n * @hidden\n * Hide from docs.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @beta\n */\n export function registerRaiseHandStateChangedHandler(\n handler: (eventData: RaiseHandStateChangedEventData) => void,\n ): void {\n if (!handler) {\n throw new Error('[registerRaiseHandStateChangedHandler] Handler cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel, FrameContexts.meetingStage);\n registerHandler('meeting.raiseHandStateChanged', handler);\n }\n\n /**\n * Registers a handler for receiving meeting reactions. When the selfParticipant (current user) successfully sends a meeting reaction and it is being rendered on the UI, the meetingReactionType will be populated. Only one handler can be registered\n * at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler The handler to invoke when the selfParticipant (current user) successfully sends a meeting reaction\n *\n * @hidden\n * Hide from docs.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @beta\n */\n export function registerMeetingReactionReceivedHandler(\n handler: (eventData: MeetingReactionReceivedEventData) => void,\n ): void {\n if (!handler) {\n throw new Error('[registerMeetingReactionReceivedHandler] Handler cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel, FrameContexts.meetingStage);\n registerHandler('meeting.meetingReactionReceived', handler);\n }\n\n /**\n * Nested namespace for functions to control behavior of the app share button\n *\n * @beta\n */\n export namespace appShareButton {\n /**\n * Property bag for the setVisibilityInfo\n *\n * @beta\n */\n export interface ShareInformation {\n /**\n * boolean flag to set show or hide app share button\n */\n isVisible: boolean;\n\n /**\n * optional string contentUrl, which will override contentUrl coming from Manifest\n */\n contentUrl?: string;\n }\n /**\n * By default app share button will be hidden and this API will govern the visibility of it.\n *\n * This function can be used to hide/show app share button in meeting,\n * along with contentUrl (overrides contentUrl populated in app manifest)\n * @throws standard Invalid Url error\n * @param shareInformation has two elements, one isVisible boolean flag and another\n * optional string contentUrl, which will override contentUrl coming from Manifest\n * @beta\n */\n export function setOptions(shareInformation: ShareInformation): void {\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (shareInformation.contentUrl) {\n new URL(shareInformation.contentUrl);\n }\n sendMessageToParent('meeting.appShareButton.setOptions', [shareInformation]);\n }\n }\n\n /**\n * Have the app handle audio (mic & speaker) and turn off host audio.\n *\n * When {@link RequestAppAudioHandlingParams.isAppHandlingAudio} is true, the host will switch to audioless mode\n * Registers for mic mute status change events, which are events that the app can receive from the host asking the app to\n * mute or unmute the microphone.\n *\n * When {@link RequestAppAudioHandlingParams.isAppHandlingAudio} is false, the host will switch out of audioless mode\n * Unregisters the mic mute status change events so the app will no longer receive these events\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n * @throws Error if {@link RequestAppAudioHandlingParams.micMuteStateChangedCallback} parameter is not defined\n *\n * @param requestAppAudioHandlingParams - {@link RequestAppAudioHandlingParams} object with values for the audio switchover\n * @param callback - Callback with one parameter, the result\n * can either be true (the host is now in audioless mode) or false (the host is not in audioless mode)\n *\n * @hidden\n * Hide from docs.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @beta\n */\n export function requestAppAudioHandling(\n requestAppAudioHandlingParams: RequestAppAudioHandlingParams,\n callback: (isHostAudioless: boolean) => void,\n ): void {\n if (!callback) {\n throw new Error('[requestAppAudioHandling] Callback response cannot be null');\n }\n if (!requestAppAudioHandlingParams.micMuteStateChangedCallback) {\n throw new Error('[requestAppAudioHandling] Callback Mic mute state handler cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel, FrameContexts.meetingStage);\n\n if (requestAppAudioHandlingParams.isAppHandlingAudio) {\n startAppAudioHandling(requestAppAudioHandlingParams, callback);\n } else {\n stopAppAudioHandling(requestAppAudioHandlingParams, callback);\n }\n }\n\n function startAppAudioHandling(\n requestAppAudioHandlingParams: RequestAppAudioHandlingParams,\n callback: (isHostAudioless: boolean) => void,\n ): void {\n const callbackInternalRequest = (error: SdkError | null, isHostAudioless: boolean | null): void => {\n if (error && isHostAudioless != null) {\n throw new Error('[requestAppAudioHandling] Callback response - both parameters cannot be set');\n }\n if (error) {\n throw new Error(`[requestAppAudioHandling] Callback response - SDK error ${error.errorCode} ${error.message}`);\n }\n if (typeof isHostAudioless !== 'boolean') {\n throw new Error('[requestAppAudioHandling] Callback response - isHostAudioless must be a boolean');\n }\n\n const micStateChangedCallback = async (micState: MicState): Promise => {\n try {\n const newMicState = await requestAppAudioHandlingParams.micMuteStateChangedCallback(micState);\n\n const micStateDidUpdate = newMicState.isMicMuted === micState.isMicMuted;\n setMicStateWithReason(\n newMicState,\n micStateDidUpdate ? MicStateChangeReason.HostInitiated : MicStateChangeReason.AppDeclinedToChange,\n );\n } catch {\n setMicStateWithReason(micState, MicStateChangeReason.AppFailedToChange);\n }\n };\n registerHandler('meeting.micStateChanged', micStateChangedCallback);\n\n callback(isHostAudioless);\n };\n sendMessageToParent(\n 'meeting.requestAppAudioHandling',\n [requestAppAudioHandlingParams.isAppHandlingAudio],\n callbackInternalRequest,\n );\n }\n\n function stopAppAudioHandling(\n requestAppAudioHandlingParams: RequestAppAudioHandlingParams,\n callback: (isHostAudioless: boolean) => void,\n ): void {\n const callbackInternalStop = (error: SdkError | null, isHostAudioless: boolean | null): void => {\n if (error && isHostAudioless != null) {\n throw new Error('[requestAppAudioHandling] Callback response - both parameters cannot be set');\n }\n if (error) {\n throw new Error(`[requestAppAudioHandling] Callback response - SDK error ${error.errorCode} ${error.message}`);\n }\n if (typeof isHostAudioless !== 'boolean') {\n throw new Error('[requestAppAudioHandling] Callback response - isHostAudioless must be a boolean');\n }\n\n if (doesHandlerExist('meeting.micStateChanged')) {\n removeHandler('meeting.micStateChanged');\n }\n\n callback(isHostAudioless);\n };\n\n sendMessageToParent(\n 'meeting.requestAppAudioHandling',\n [requestAppAudioHandlingParams.isAppHandlingAudio],\n callbackInternalStop,\n );\n }\n\n /**\n * Notifies the host that the microphone state has changed in the app.\n * @param micState - The new state that the microphone is in\n * isMicMuted - Boolean to indicate the current mute status of the mic.\n *\n * @hidden\n * Hide from docs.\n *\n * @internal\n * Limited to Microsoft-internal use\n *\n * @beta\n */\n export function updateMicState(micState: MicState): void {\n setMicStateWithReason(micState, MicStateChangeReason.AppInitiated);\n }\n\n function setMicStateWithReason(micState: MicState, reason: MicStateChangeReason): void {\n ensureInitialized(runtime, FrameContexts.sidePanel, FrameContexts.meetingStage);\n sendMessageToParent('meeting.updateMicState', [micState, reason]);\n }\n}\n","import { sendAndHandleSdkError } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { callCallbackWithErrorOrResultOrNullFromPromiseAndReturnPromise, InputFunction } from '../internal/utils';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { SdkError } from './interfaces';\nimport { runtime } from './runtime';\n\nexport namespace monetization {\n /**\n * @hidden\n * Data structure to represent a subscription plan.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface PlanInfo {\n /**\n * @hidden\n * plan id\n */\n planId: string;\n /**\n * @hidden\n * term of the plan\n */\n term: string;\n }\n\n /**\n * @hidden\n * Open dialog to start user's purchase experience\n *\n * @param planInfo optional parameter. It contains info of the subscription plan pushed to users.\n * error can either contain an error of type SdkError, incase of an error, or null when get is successful\n * @returns Promise that will be resolved when the operation has completed or rejected with SdkError value\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function openPurchaseExperience(planInfo?: PlanInfo): Promise;\n /**\n * @deprecated\n * As of 2.0.0, please use {@link monetization.openPurchaseExperience monetization.openPurchaseExperience(planInfo?: PlanInfo): Promise\\} instead.\n *\n * @hidden\n * Open dialog to start user's purchase experience\n *\n * @param callback Callback contains 1 parameters, error.\n * @param planInfo optional parameter. It contains info of the subscription plan pushed to users.\n * error can either contain an error of type SdkError, incase of an error, or null when get is successful\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function openPurchaseExperience(callback: (error: SdkError | null) => void, planInfo?: PlanInfo): void;\n /**\n * @hidden\n * This function is the overloaded implementation of openPurchaseExperience.\n * Since the method signatures of the v1 callback and v2 promise differ in the type of the first parameter,\n * we need to do an extra check to know the typeof the @param1 to set the proper arguments of the utility function.\n * @param param1\n * @param param2\n * @returns Promise that will be resolved when the operation has completed or rejected with SdkError value\n */\n export function openPurchaseExperience(\n param1: ((error: SdkError | null) => void) | PlanInfo | undefined,\n param2?: PlanInfo,\n ): Promise {\n let callback: ((error: SdkError | null) => void) | undefined;\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n let planInfo: PlanInfo;\n if (typeof param1 === 'function') {\n callback = param1;\n planInfo = param2;\n } else {\n planInfo = param1;\n }\n const wrappedFunction: InputFunction = () => {\n return new Promise((resolve) => {\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n resolve(sendAndHandleSdkError('monetization.openPurchaseExperience', planInfo));\n });\n };\n\n ensureInitialized(runtime, FrameContexts.content);\n return callCallbackWithErrorOrResultOrNullFromPromiseAndReturnPromise(wrappedFunction, callback);\n }\n\n /**\n * @hidden\n *\n * Checks if the monetization capability is supported by the host\n * @returns boolean to represent whether the monetization capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.monetization ? true : false;\n }\n}\n","import { sendAndHandleStatusAndReason } from '../internal/communication';\nimport { createTeamsDeepLinkForCalendar } from '../internal/deepLinkUtilities';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { FrameContexts } from './constants';\nimport { runtime } from './runtime';\n\n/**\n * Interact with the user's calendar, including opening calendar items and composing meetings.\n */\nexport namespace calendar {\n /**\n * Opens a calendar item.\n *\n * @param openCalendarItemParams - object containing unique ID of the calendar item to be opened.\n */\n export function openCalendarItem(openCalendarItemParams: OpenCalendarItemParams): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime, FrameContexts.content);\n if (!isSupported()) {\n throw new Error('Not supported');\n }\n\n if (!openCalendarItemParams.itemId || !openCalendarItemParams.itemId.trim()) {\n throw new Error('Must supply an itemId to openCalendarItem');\n }\n\n resolve(sendAndHandleStatusAndReason('calendar.openCalendarItem', openCalendarItemParams));\n });\n }\n\n /**\n * Compose a new meeting in the user's calendar.\n *\n * @param composeMeetingParams - object containing various properties to set up the meeting details.\n */\n export function composeMeeting(composeMeetingParams: ComposeMeetingParams): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime, FrameContexts.content);\n if (!isSupported()) {\n throw new Error('Not supported');\n }\n if (runtime.isLegacyTeams) {\n resolve(\n sendAndHandleStatusAndReason(\n 'executeDeepLink',\n createTeamsDeepLinkForCalendar(\n composeMeetingParams.attendees,\n composeMeetingParams.startTime,\n composeMeetingParams.endTime,\n composeMeetingParams.subject,\n composeMeetingParams.content,\n ),\n ),\n );\n } else {\n resolve(sendAndHandleStatusAndReason('calendar.composeMeeting', composeMeetingParams));\n }\n });\n }\n\n /**\n * Checks if the calendar capability is supported by the host\n * @returns boolean to represent whether the calendar capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.calendar ? true : false;\n }\n\n /** Open calendar item parameters. */\n export interface OpenCalendarItemParams {\n /** An unique base64-encoded string id that represents the event's unique identifier of the calendar item to be opened. */\n itemId: string;\n }\n\n /** Compose meeting parameters */\n\n export interface ComposeMeetingParams {\n /** An array of email addresses, user name, or user id of the attendees to invite to the meeting. */\n attendees?: string[];\n /** The start time of the meeting in MM/DD/YYYY HH:MM:SS format. */\n startTime?: string;\n /** The end time of the meeting in MM/DD/YYYY HH:MM:SS format. */\n endTime?: string;\n /** The subject line of the meeting. */\n subject?: string;\n /** The body content of the meeting. */\n content?: string;\n }\n}\n","import { sendAndHandleStatusAndReason } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { FrameContexts } from './constants';\nimport { runtime } from './runtime';\n\n/**\n * Used to interact with mail capability, including opening and composing mail.\n */\nexport namespace mail {\n /**\n * Opens a mail message in the host.\n *\n * @param openMailItemParams - Object that specifies the ID of the mail message.\n */\n export function openMailItem(openMailItemParams: OpenMailItemParams): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime, FrameContexts.content);\n if (!isSupported()) {\n throw new Error('Not supported');\n }\n\n if (!openMailItemParams.itemId || !openMailItemParams.itemId.trim()) {\n throw new Error('Must supply an itemId to openMailItem');\n }\n\n resolve(sendAndHandleStatusAndReason('mail.openMailItem', openMailItemParams));\n });\n }\n\n /**\n * Compose a new email in the user's mailbox.\n *\n * @param composeMailParams - Object that specifies the type of mail item to compose and the details of the mail item.\n *\n */\n export function composeMail(composeMailParams: ComposeMailParams): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime, FrameContexts.content);\n if (!isSupported()) {\n throw new Error('Not supported');\n }\n\n resolve(sendAndHandleStatusAndReason('mail.composeMail', composeMailParams));\n });\n }\n\n /**\n * Checks if the mail capability is supported by the host\n * @returns boolean to represent whether the mail capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.mail ? true : false;\n }\n\n /** Defines the parameters used to open a mail item in the user's mailbox */\n export interface OpenMailItemParams {\n /** An unique base64-encoded string id that represents the itemId or messageId. */\n itemId: string;\n }\n\n /** Defines compose mail types. */\n export enum ComposeMailType {\n /** Compose a new mail message. */\n New = 'new',\n /** Compose a reply to the sender of an existing mail message. */\n Reply = 'reply',\n /** Compose a reply to all recipients of an existing mail message. */\n ReplyAll = 'replyAll',\n /** Compose a new mail message with the content of an existing mail message forwarded to a new recipient. */\n Forward = 'forward',\n }\n\n /**\n * Foundational interface for all other mail compose interfaces\n * Used for holding the type of mail item being composed\n *\n * @typeParam T - the identity type.\n * @see {@link mail.ComposeMailType}\n */\n interface ComposeMailBase {\n /** Type of the mail item being composed. */\n type: T;\n }\n\n /**\n * Parameters supplied when composing a new mail item\n */\n export interface ComposeNewParams extends ComposeMailBase {\n /**\n * The To: recipients for the message\n */\n toRecipients?: string[];\n\n /**\n * The Cc: recipients for the message\n */\n ccRecipients?: string[];\n\n /**\n * The Bcc: recipients for the message\n */\n bccRecipients?: string[];\n\n /**\n * The subject of the message\n */\n subject?: string;\n\n /**\n * The body of the message\n */\n message?: string;\n }\n\n /**\n * Parameters supplied when composing a reply to or forward of a message\n *\n * @see {@link ComposeMailType}\n */\n export interface ComposeReplyOrForwardParams extends ComposeMailBase {\n /** An unique base64-encoded string id that represents the mail message. */\n itemid: string;\n }\n\n /**\n * Parameters supplied to {@link composeMail} when composing a new mail item\n *\n * @see {@link ComposeNewParams}\n * @see {@link ComposeReplyOrForwardParams}\n * @see {@link ComposeMailType}\n */\n export type ComposeMailParams =\n | ComposeNewParams\n | ComposeReplyOrForwardParams\n | ComposeReplyOrForwardParams\n | ComposeReplyOrForwardParams;\n}\n","import { sendAndHandleSdkError } from '../internal/communication';\nimport { peoplePickerRequiredVersion } from '../internal/constants';\nimport { ensureInitialized, isCurrentSDKVersionAtLeast } from '../internal/internalAPIs';\nimport { validatePeoplePickerInput } from '../internal/mediaUtil';\nimport { callCallbackWithErrorOrResultFromPromiseAndReturnPromise } from '../internal/utils';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { ErrorCode, SdkError } from './interfaces';\nimport { runtime } from './runtime';\n\nexport namespace people {\n /** Select people callback function type */\n export type selectPeopleCallbackFunctionType = (error: SdkError, people: PeoplePickerResult[]) => void;\n /**\n * Launches a people picker and allows the user to select one or more people from the list\n * If the app is added to personal app scope the people picker launched is org wide and if the app is added to a chat/channel, people picker launched is also limited to the members of chat/channel\n \n * @param callback - Returns list of JSON object of type PeoplePickerResult which consists of Microsoft Entra IDs, display names and emails of the selected users\n * @param peoplePickerInputs - Input parameters to launch customized people picker\n * @returns Promise that will be fulfilled when the operation has completed\n */\n export function selectPeople(peoplePickerInputs?: PeoplePickerInputs): Promise;\n /**\n * @deprecated\n * As of 2.0.0, please use {@link people.selectPeople people.selectPeople(peoplePickerInputs?: PeoplePickerInputs): Promise\\} instead.\n *\n * Launches a people picker and allows the user to select one or more people from the list\n * If the app is added to personal app scope the people picker launched is org wide and if the app is added to a chat/channel, people picker launched is also limited to the members of chat/channel\n \n * @param callback - Returns list of JSON object of type PeoplePickerResult which consists of Microsoft Entra IDs, display names and emails of the selected users\n * @param peoplePickerInputs - Input parameters to launch customized people picker\n */\n export function selectPeople(\n callback: selectPeopleCallbackFunctionType,\n peoplePickerInputs?: PeoplePickerInputs,\n ): void;\n /**\n * @hidden\n * This function is the overloaded implementation of selectPeople.\n * Since the method signatures of the v1 callback and v2 promise differ in the type of the first parameter,\n * we need to do an extra check to know the typeof the @param1 to set the proper arguments of the utility function.\n * @param param1\n * @param param2\n * @returns Promise of Array of PeoplePickerResult objects.\n */\n export function selectPeople(\n param1: PeoplePickerInputs | selectPeopleCallbackFunctionType | undefined,\n param2?: PeoplePickerInputs,\n ): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task, FrameContexts.settings);\n\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n let callback: selectPeopleCallbackFunctionType;\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n let peoplePickerInputs: PeoplePickerInputs;\n\n if (typeof param1 === 'function') {\n [callback, peoplePickerInputs] = [param1, param2];\n } else {\n peoplePickerInputs = param1;\n }\n\n return callCallbackWithErrorOrResultFromPromiseAndReturnPromise(\n selectPeopleHelper,\n callback,\n peoplePickerInputs,\n );\n }\n\n function selectPeopleHelper(peoplePickerInputs?: PeoplePickerInputs): Promise {\n return new Promise((resolve) => {\n if (!isCurrentSDKVersionAtLeast(peoplePickerRequiredVersion)) {\n throw { errorCode: ErrorCode.OLD_PLATFORM };\n }\n\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n if (!validatePeoplePickerInput(peoplePickerInputs)) {\n throw { errorCode: ErrorCode.INVALID_ARGUMENTS };\n }\n\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n resolve(sendAndHandleSdkError('people.selectPeople', peoplePickerInputs));\n });\n }\n\n /**\n * Input parameter supplied to the People Picker API\n */\n export interface PeoplePickerInputs {\n /**\n * Optional; Set title for the people picker\n * Default value is \"Select people\" for multiselect and \"Select a person\" for single select\n */\n title?: string;\n\n /**\n * Optional; Microsoft Entra IDs of the users to be pre-populated in the search box of people picker control\n * If single select is enabled this value, only the first user in the list will be pre-populated\n * Default value is null\n */\n setSelected?: string[];\n\n /**\n * Optional; launches the people picker in org wide scope even if the app is added to a chat or channel\n * Default value is false\n */\n openOrgWideSearchInChatOrChannel?: boolean;\n\n /**\n * Optional; launches the people picker for which only 1 person can be selected\n * Default value is false\n */\n singleSelect?: boolean;\n }\n\n /**\n * Output user object of people picker API\n */\n export interface PeoplePickerResult {\n /**\n * user object ID (also known as Microsoft Entra ID) of the selected user\n */\n objectId: string;\n\n /**\n * Optional; display name of the selected user\n */\n displayName?: string;\n\n /**\n * Optional; email of the selected user\n */\n email?: string;\n }\n\n /**\n * Checks if the people capability is supported by the host\n * @returns boolean to represent whether the people capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.people ? true : false;\n }\n}\n","import { sendAndHandleSdkError } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { validateShowProfileRequest } from '../internal/profileUtil';\nimport { FrameContexts } from './constants';\nimport { ErrorCode } from './interfaces';\nimport { runtime } from './runtime';\n\n/**\n * Namespace for profile related APIs.\n *\n * @beta\n */\nexport namespace profile {\n /**\n * Opens a profile card at a specified position to show profile information about a persona.\n * @param showProfileRequest The parameters to position the card and identify the target user.\n * @returns Promise that will be fulfilled when the operation has completed\n *\n * @beta\n */\n export function showProfile(showProfileRequest: ShowProfileRequest): Promise {\n ensureInitialized(runtime, FrameContexts.content);\n\n return new Promise((resolve) => {\n const [isValid, message] = validateShowProfileRequest(showProfileRequest);\n if (!isValid) {\n throw { errorCode: ErrorCode.INVALID_ARGUMENTS, message };\n }\n\n // Convert the app provided parameters to the form suitable for postMessage.\n const requestInternal: ShowProfileRequestInternal = {\n modality: showProfileRequest.modality,\n persona: showProfileRequest.persona,\n triggerType: showProfileRequest.triggerType,\n targetRectangle: {\n x: showProfileRequest.targetElementBoundingRect.x,\n y: showProfileRequest.targetElementBoundingRect.y,\n width: showProfileRequest.targetElementBoundingRect.width,\n height: showProfileRequest.targetElementBoundingRect.height,\n },\n };\n\n resolve(sendAndHandleSdkError('profile.showProfile', requestInternal));\n });\n }\n\n /**\n * The type of modalities that are supported when showing a profile.\n * Can be provided as an optional hint with the request and will be\n * respected if the hosting M365 application supports it.\n *\n * @beta\n */\n export type Modality = 'Card' | 'Expanded';\n\n /**\n * The type of the profile trigger.\n * - MouseHover: The user hovered a target.\n * - Press: The target was pressed with either a mouse click or keyboard key press.\n * - AppRequest: The show profile request is happening programmatically, without direct user interaction.\n *\n * @beta\n */\n export type TriggerType = 'MouseHover' | 'Press' | 'AppRequest';\n\n /**\n * The set of identifiers that are supported for resolving the persona.\n *\n * At least one is required, and if multiple are provided then only the highest\n * priority one will be used (AadObjectId > Upn > Smtp). AAD is now known as \"Microsoft Entra ID\"\n *\n * @beta\n */\n export type PersonaIdentifiers = {\n /**\n * The object id in Microsoft Entra.\n *\n * This id is guaranteed to be unique for an object within a tenant,\n * and so if provided will lead to a more performant lookup. It can\n * be resolved via MS Graph (see https://learn.microsoft.com/graph/api/resources/users\n * for examples).\n */\n readonly AadObjectId?: string;\n\n /**\n * The primary SMTP address.\n */\n readonly Smtp?: string;\n\n /**\n * The user principle name.\n */\n readonly Upn?: string;\n };\n\n /**\n * The persona to show the profile for.\n *\n * @beta\n */\n export interface Persona {\n /**\n * The set of identifiers that are supported for resolving the persona.\n */\n identifiers: PersonaIdentifiers;\n\n /**\n * Optional display name override. If not specified the user's display name will be resolved normally.\n */\n displayName?: string;\n }\n\n /**\n * Input parameters provided to the showProfile API.\n *\n * @beta\n */\n export interface ShowProfileRequest {\n /**\n * An optional hint to the hosting M365 application about which modality of the profile you want to show.\n */\n modality?: Modality;\n\n /**\n * The information about the persona to show the profile for.\n */\n persona: Persona;\n\n /**\n * The bounding rectangle of the target.\n */\n targetElementBoundingRect: DOMRect;\n\n /**\n * Specifies which user interaction was used to trigger the API call.\n */\n triggerType: TriggerType;\n }\n\n /**\n * Checks if the profile capability is supported by the host\n * @returns boolean to represent whether the profile capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.profile ? true : false;\n }\n}\n\n/**\n * Internal representation of a DOMRect suitable for sending via postMessage.\n */\nexport type Rectangle = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\n/**\n * @beta\n * @hidden\n * An internal representation of the showProfile parameters suitable for sending via postMessage.\n * The hub expects to receive an object of this type.\n */\nexport interface ShowProfileRequestInternal {\n modality?: profile.Modality;\n persona: profile.Persona;\n targetRectangle: Rectangle;\n triggerType: profile.TriggerType;\n}\n","import { profile } from '../public/profile';\n\n/**\n * @hidden\n * Validates the request parameters\n * @param showProfileRequest The request parameters\n * @returns true if the parameters are valid, false otherwise\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function validateShowProfileRequest(\n showProfileRequest: profile.ShowProfileRequest,\n): [boolean, string | undefined] {\n if (!showProfileRequest) {\n return [false, 'A request object is required'];\n }\n\n // Validate modality\n if (showProfileRequest.modality && typeof showProfileRequest.modality !== 'string') {\n return [false, 'modality must be a string'];\n }\n\n // Validate targetElementBoundingRect\n if (\n !showProfileRequest.targetElementBoundingRect ||\n typeof showProfileRequest.targetElementBoundingRect !== 'object'\n ) {\n return [false, 'targetElementBoundingRect must be a DOMRect'];\n }\n\n // Validate triggerType\n if (!showProfileRequest.triggerType || typeof showProfileRequest.triggerType !== 'string') {\n return [false, 'triggerType must be a valid string'];\n }\n\n return validatePersona(showProfileRequest.persona);\n}\n\n/**\n * @hidden\n * Validates the persona that is used to resolve the profile target\n * @param persona The persona object\n * @returns true if the persona is valid, false otherwise\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nfunction validatePersona(persona: profile.Persona): [boolean, string | undefined] {\n if (!persona) {\n return [false, 'persona object must be provided'];\n }\n\n if (persona.displayName && typeof persona.displayName !== 'string') {\n return [false, 'displayName must be a string'];\n }\n\n if (!persona.identifiers || typeof persona.identifiers !== 'object') {\n return [false, 'persona identifiers object must be provided'];\n }\n\n if (!persona.identifiers.AadObjectId && !persona.identifiers.Smtp && !persona.identifiers.Upn) {\n return [false, 'at least one valid identifier must be provided'];\n }\n\n if (persona.identifiers.AadObjectId && typeof persona.identifiers.AadObjectId !== 'string') {\n return [false, 'AadObjectId identifier must be a string'];\n }\n\n if (persona.identifiers.Smtp && typeof persona.identifiers.Smtp !== 'string') {\n return [false, 'Smtp identifier must be a string'];\n }\n\n if (persona.identifiers.Upn && typeof persona.identifiers.Upn !== 'string') {\n return [false, 'Upn identifier must be a string'];\n }\n\n return [true, undefined];\n}\n","import { generateGUID } from './utils';\n\nexport class VideoFrameTick {\n private static readonly setTimeoutCallbacks: {\n [key: string]: {\n callback: () => void;\n startedAtInMs: number;\n timeoutInMs: number;\n };\n } = {};\n\n public static setTimeout(callback: () => void, timeoutInMs: number): string {\n const startedAtInMs = performance.now();\n const id = generateGUID();\n VideoFrameTick.setTimeoutCallbacks[id] = {\n callback,\n timeoutInMs,\n startedAtInMs,\n };\n return id;\n }\n\n public static clearTimeout(id: string): void {\n delete VideoFrameTick.setTimeoutCallbacks[id];\n }\n\n public static setInterval(callback: () => void, intervalInMs: number): void {\n VideoFrameTick.setTimeout(function next() {\n callback();\n VideoFrameTick.setTimeout(next, intervalInMs);\n }, intervalInMs);\n }\n\n /**\n * Call this function whenever a frame comes in, it will check if any timeout is due and call the callback\n */\n public static tick(): void {\n const now = performance.now();\n const timeoutIds = [];\n // find all the timeouts that are due,\n // not to invoke them in the loop to avoid modifying the collection while iterating\n for (const key in VideoFrameTick.setTimeoutCallbacks) {\n const callback = VideoFrameTick.setTimeoutCallbacks[key];\n const start = callback.startedAtInMs;\n if (now - start >= callback.timeoutInMs) {\n timeoutIds.push(key);\n }\n }\n // invoke the callbacks\n for (const id of timeoutIds) {\n const callback = VideoFrameTick.setTimeoutCallbacks[id];\n callback.callback();\n delete VideoFrameTick.setTimeoutCallbacks[id];\n }\n }\n}\n","import { inServerSideRenderingEnvironment } from '../private/inServerSideRenderingEnvironment';\nimport { videoEx } from '../private/videoEx';\nimport { errorNotSupportedOnPlatform } from '../public/constants';\nimport { video } from '../public/video';\nimport { sendMessageToParent } from './communication';\nimport { registerHandler } from './handlers';\nimport {\n AllowSharedBufferSource,\n PlaneLayout,\n VideoFrameBufferInit,\n VideoFrameCopyToOptions,\n VideoFrameInit,\n VideoPixelFormat,\n} from './VideoFrameTypes';\nimport { VideoPerformanceMonitor } from './videoPerformanceMonitor';\n\n/**\n * @hidden\n * Align with the W3C spec: https://www.w3.org/TR/webcodecs/\n */\ninterface VideoFrame {\n /**\n * The width of the VideoFrame in pixels, potentially including non-visible padding, and prior to\n * considering potential ratio adjustments.\n */\n readonly codedWidth: number;\n /**\n * The height of the VideoFrame in pixels, potentially including non-visible padding, and prior to\n * considering potential ratio adjustments.\n */\n readonly codedHeight: number;\n /**\n * The pixel format of the VideoFrame.\n */\n readonly format: VideoPixelFormat | null;\n /**\n * An integer indicating the timestamp of the video in microseconds.\n */\n readonly timestamp: number;\n /**\n * Clears all states and releases the reference to the media resource\n */\n close(): void;\n /**\n * Copies the contents of the VideoFrame to an ArrayBuffer\n * @param destination An ArrayBuffer, a TypedArray, or a DataView to copy to.\n * @param options An object containing rect - the rectangle of pixels to copy from the VideoFrame.\n */\n copyTo(destination: AllowSharedBufferSource, options?: VideoFrameCopyToOptions): Promise;\n}\n\n/**\n * @hidden\n */\n// eslint-disable-next-line strict-null-checks/all\ndeclare const VideoFrame: {\n prototype: video.VideoFrame;\n new (source: CanvasImageSource, init?: VideoFrameInit): video.VideoFrame;\n new (data: AllowSharedBufferSource, init: VideoFrameBufferInit): video.VideoFrame;\n};\n\n/**\n * @hidden\n * Create a MediaStreamTrack from the media stream with the given streamId and processed by videoFrameHandler.\n */\nexport async function processMediaStream(\n streamId: string,\n videoFrameHandler: video.VideoFrameHandler,\n notifyError: (string) => void,\n videoPerformanceMonitor?: VideoPerformanceMonitor,\n): Promise {\n return createProcessedStreamGenerator(\n await getInputVideoTrack(streamId, notifyError, videoPerformanceMonitor),\n new DefaultTransformer(notifyError, videoFrameHandler),\n );\n}\n\n/**\n * @hidden\n * Create a MediaStreamTrack from the media stream with the given streamId and processed by videoFrameHandler.\n * The videoFrameHandler will receive metadata of the video frame.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport async function processMediaStreamWithMetadata(\n streamId: string,\n videoFrameHandler: videoEx.VideoFrameHandler,\n notifyError: (string) => void,\n videoPerformanceMonitor?: VideoPerformanceMonitor,\n): Promise {\n return createProcessedStreamGenerator(\n await getInputVideoTrack(streamId, notifyError, videoPerformanceMonitor),\n new TransformerWithMetadata(notifyError, videoFrameHandler),\n );\n}\n\n/**\n * Get the video track from the media stream gotten from chrome.webview.getTextureStream(streamId).\n */\nasync function getInputVideoTrack(\n streamId: string,\n notifyError: (string) => void,\n videoPerformanceMonitor?: VideoPerformanceMonitor,\n): Promise {\n if (inServerSideRenderingEnvironment()) {\n throw errorNotSupportedOnPlatform;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const chrome = window['chrome'] as any;\n try {\n videoPerformanceMonitor?.reportGettingTextureStream(streamId);\n const mediaStream = await chrome.webview.getTextureStream(streamId);\n const tracks = mediaStream.getVideoTracks();\n if (tracks.length === 0) {\n throw new Error(`No video track in stream ${streamId}`);\n }\n videoPerformanceMonitor?.reportTextureStreamAcquired();\n return tracks[0];\n } catch (error) {\n const errorMsg = `Failed to get video track from stream ${streamId}, error: ${error}`;\n notifyError(errorMsg);\n throw new Error(`Internal error: can't get video track from stream ${streamId}`);\n }\n}\n\n/**\n * The function to create a processed video track from the original video track.\n * It reads frames from the video track and pipes them to the video frame callback to process the frames.\n * The processed frames are then enqueued to the generator.\n * The generator can be registered back to the media stream so that the host can get the processed frames.\n */\nfunction createProcessedStreamGenerator(\n videoTrack: unknown,\n transformer: TransformerWithMetadata | DefaultTransformer,\n): MediaStreamTrack {\n if (inServerSideRenderingEnvironment()) {\n throw errorNotSupportedOnPlatform;\n }\n const MediaStreamTrackProcessor = window['MediaStreamTrackProcessor'];\n const processor = new MediaStreamTrackProcessor({ track: videoTrack });\n const source = processor.readable;\n const MediaStreamTrackGenerator = window['MediaStreamTrackGenerator'];\n const generator = new MediaStreamTrackGenerator({ kind: 'video' });\n const sink = generator.writable;\n\n source.pipeThrough(new TransformStream(transformer)).pipeTo(sink);\n return generator;\n}\n\n/**\n * @hidden\n * Error messages during video frame transformation.\n */\nenum VideoFrameTransformErrors {\n TimestampIsNull = 'timestamp of the original video frame is null',\n UnsupportedVideoFramePixelFormat = 'Unsupported video frame pixel format',\n}\n\nclass DefaultTransformer {\n public constructor(private notifyError: (string) => void, private videoFrameHandler: video.VideoFrameHandler) {}\n\n public transform = async (originalFrame, controller): Promise => {\n const timestamp = originalFrame.timestamp;\n if (timestamp !== null) {\n try {\n const frameProcessedByApp = await this.videoFrameHandler({ videoFrame: originalFrame });\n // the current typescript version(4.6.4) dosn't support webcodecs API fully, we have to do type conversion here.\n const processedFrame = new VideoFrame(frameProcessedByApp as unknown as CanvasImageSource, {\n // we need the timestamp to be unchanged from the oirginal frame, so we explicitly set it here.\n timestamp: timestamp,\n });\n controller.enqueue(processedFrame);\n originalFrame.close();\n (frameProcessedByApp as VideoFrame).close();\n } catch (error) {\n originalFrame.close();\n this.notifyError(error);\n }\n } else {\n this.notifyError(VideoFrameTransformErrors.TimestampIsNull);\n }\n };\n}\n\n/**\n * @hidden\n * Utility class to parse the header of a one-texture-input texture.\n */\nclass OneTextureHeader {\n private readonly headerDataView: Uint32Array;\n // Identifier for the texture layout, which is the 4-byte ASCII string \"oti1\" hardcoded by the host\n // (oti1 stands for \"one texture input version 1\")\n private readonly ONE_TEXTURE_INPUT_ID = 0x6f746931;\n private readonly INVALID_HEADER_ERROR = 'Invalid video frame header';\n private readonly UNSUPPORTED_LAYOUT_ERROR = 'Unsupported texture layout';\n public constructor(private readonly headerBuffer: ArrayBuffer, private readonly notifyError: (string) => void) {\n this.headerDataView = new Uint32Array(headerBuffer);\n // headerDataView will contain the following data:\n // 0: oneTextureLayoutId\n // 1: version\n // 2: frameRowOffset\n // 3: frameFormat\n // 4: frameWidth\n // 5: frameHeight\n // 6: multiStreamHeaderRowOffset\n // 7: multiStreamCount\n if (this.headerDataView.length < 8) {\n this.notifyError(this.INVALID_HEADER_ERROR);\n throw new Error(this.INVALID_HEADER_ERROR);\n }\n // ensure the texture layout is supported\n if (this.headerDataView[0] !== this.ONE_TEXTURE_INPUT_ID) {\n this.notifyError(this.UNSUPPORTED_LAYOUT_ERROR);\n throw new Error(this.UNSUPPORTED_LAYOUT_ERROR);\n }\n }\n\n public get oneTextureLayoutId(): number {\n return this.headerDataView[0];\n }\n\n public get version(): number {\n return this.headerDataView[1];\n }\n\n public get frameRowOffset(): number {\n return this.headerDataView[2];\n }\n\n public get frameFormat(): number {\n return this.headerDataView[3];\n }\n\n public get frameWidth(): number {\n return this.headerDataView[4];\n }\n\n public get frameHeight(): number {\n return this.headerDataView[5];\n }\n\n public get multiStreamHeaderRowOffset(): number {\n return this.headerDataView[6];\n }\n\n public get multiStreamCount(): number {\n return this.headerDataView[7];\n }\n}\n\n/**\n * @hidden\n * Utility class to parse the metadata of a one-texture-input texture.\n */\nclass OneTextureMetadata {\n private readonly metadataMap: Map = new Map();\n // Stream id for audio inference metadata, which is the 4-byte ASCII string \"1dia\" hardcoded by the host\n // (1dia stands for \"audio inference data version 1\")\n private readonly AUDIO_INFERENCE_RESULT_STREAM_ID = 0x31646961;\n public constructor(metadataBuffer: ArrayBuffer, streamCount: number) {\n const metadataDataView = new Uint32Array(metadataBuffer);\n for (let i = 0, index = 0; i < streamCount; i++) {\n const streamId = metadataDataView[index++];\n const streamDataOffset = metadataDataView[index++];\n const streamDataSize = metadataDataView[index++];\n const streamData = new Uint8Array(metadataBuffer, streamDataOffset, streamDataSize);\n this.metadataMap.set(streamId, streamData);\n }\n }\n\n public get audioInferenceResult(): Uint8Array | undefined {\n return this.metadataMap.get(this.AUDIO_INFERENCE_RESULT_STREAM_ID);\n }\n}\n\nclass TransformerWithMetadata {\n private shouldDiscardAudioInferenceResult = false;\n\n public constructor(private notifyError: (string) => void, private videoFrameHandler: videoEx.VideoFrameHandler) {\n registerHandler(\n 'video.mediaStream.audioInferenceDiscardStatusChange',\n ({ discardAudioInferenceResult }: { discardAudioInferenceResult: boolean }) => {\n this.shouldDiscardAudioInferenceResult = discardAudioInferenceResult;\n },\n );\n }\n\n public transform = async (originalFrame, controller): Promise => {\n const timestamp = originalFrame.timestamp;\n if (timestamp !== null) {\n try {\n const { videoFrame, metadata: { audioInferenceResult } = {} } = await this.extractVideoFrameAndMetadata(\n originalFrame,\n );\n const frameProcessedByApp = await this.videoFrameHandler({ videoFrame, audioInferenceResult });\n // the current typescript version(4.6.4) dosn't support webcodecs API fully, we have to do type conversion here.\n const processedFrame = new VideoFrame(frameProcessedByApp as unknown as CanvasImageSource, {\n // we need the timestamp to be unchanged from the oirginal frame, so we explicitly set it here.\n timestamp: timestamp,\n });\n controller.enqueue(processedFrame);\n videoFrame.close();\n originalFrame.close();\n (frameProcessedByApp as VideoFrame).close();\n } catch (error) {\n originalFrame.close();\n this.notifyError(error);\n }\n } else {\n this.notifyError(VideoFrameTransformErrors.TimestampIsNull);\n }\n };\n\n /**\n * @hidden\n * Extract video frame and metadata from the given texture.\n * The given texure should be in NV12 format and the layout of the texture should be:\n * | Texture layout |\n * | :--- |\n * | Header |\n * | Real video frame data |\n * | Metadata |\n *\n * The header data is in the first two rows with the following format:\n * | oneTextureLayoutId | version | frameRowOffset | frameFormat | frameWidth | frameHeight | multiStreamHeaderRowOffset | multiStreamCount | ... |\n * | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n * | 4 bytes | 4 bytes | 4 bytes | 4 bytes | 4 bytes | 4 bytes | 4 bytes | 4 bytes | ... |\n *\n * After header, it comes with the real video frame data.\n * At the end of the texture, it comes with the metadata. The metadata section can contain multiple types of metadata.\n * Each type of metadata is called a stream. The section is in the following format:\n * | stream1.id | stream1.dataOffset | stream1.dataSize | stream2.id | stream2.dataOffset | stream2.dataSize | ... | stream1.data | stream2.data | ... |\n * | :---: | :---: | :---: | :---: | :---: | :---: |:---:| :---: | :---: |:---:|\n * | 4 bytes | 4 bytes | 4 bytes | 4 bytes | 4 bytes | 4 bytes | ... | ... | ... | ... |\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n private extractVideoFrameAndMetadata = async (\n texture: VideoFrame,\n ): Promise<{ videoFrame: VideoFrame; metadata: { audioInferenceResult?: Uint8Array } }> => {\n if (inServerSideRenderingEnvironment()) {\n throw errorNotSupportedOnPlatform;\n }\n if (texture.format !== 'NV12') {\n this.notifyError(VideoFrameTransformErrors.UnsupportedVideoFramePixelFormat);\n throw new Error(VideoFrameTransformErrors.UnsupportedVideoFramePixelFormat);\n }\n\n // The rectangle of pixels to copy from the texture. The first two rows are the header.\n const headerRect = { x: 0, y: 0, width: texture.codedWidth, height: 2 };\n // allocate buffer for the header\n // The texture is in NV12 format (https://learn.microsoft.com/en-us/windows/win32/medfound/recommended-8-bit-yuv-formats-for-video-rendering#nv12).\n // NV12 has one luma \"luminance\" plane Y and one UV plane with U and V values interleaved.\n // In NV12, chroma planes (blue and red) are subsampled in both the horizontal and vertical dimensions by a factor of 2.\n // So for a 2×2 group of pixels, you have 4 Y samples and 1 U and 1 V sample, each sample being 1 byte.\n // for a 10×10 NV12 frame: there are 100 Y samples followed by 25 U and 25 V samples interleaved.\n // The graphical representation of the memory layout of a 2×2 NV12 frame is as follows:\n // | Y0 | Y1 | Y2 | Y3 | U0 | V0 |\n // The number of pixels of the header is (headerRect.width * headerRect.height), so the number of bytes of the header is\n // (the size of the Y plane + the size of the UV plane)\n // which is (headerRect.width * headerRect.height) + (headerRect.width * headerRect.height) / 2\n // = (headerRect.width * headerRect.height * 3) / 2\n const headerBuffer = new ArrayBuffer((headerRect.width * headerRect.height * 3) / 2);\n await texture.copyTo(headerBuffer, { rect: headerRect });\n const header = new OneTextureHeader(headerBuffer, this.notifyError);\n\n // The rectangle of pixels to copy from the texture. Metadata are at the bottom.\n const metadataRect = {\n x: 0,\n y: header.multiStreamHeaderRowOffset,\n width: texture.codedWidth,\n height: texture.codedHeight - header.multiStreamHeaderRowOffset,\n };\n // Allocate buffer for the metadata. The number of pixels of the metadata section is\n // (metadataRect.width * metadataRect.height), so the number of bytes of the metadata section is\n // (the size of the Y plane + the size of the UV plane), which is\n // (metadataRect.width * metadataRect.height) + (metadataRect.width * metadataRect.height) / 2\n // = (metadataRect.width * metadataRect.height * 3) / 2\n const metadataBuffer = new ArrayBuffer((metadataRect.width * metadataRect.height * 3) / 2);\n await texture.copyTo(metadataBuffer, { rect: metadataRect });\n const metadata = new OneTextureMetadata(metadataBuffer, header.multiStreamCount);\n return {\n videoFrame: new VideoFrame(texture as unknown as CanvasImageSource, {\n timestamp: texture.timestamp,\n visibleRect: {\n x: 0,\n y: header.frameRowOffset,\n width: header.frameWidth,\n height: header.frameHeight,\n },\n }) as VideoFrame,\n metadata: {\n audioInferenceResult: this.shouldDiscardAudioInferenceResult ? undefined : metadata.audioInferenceResult,\n },\n };\n };\n}\n\n/**\n * @hidden\n * Video effect change call back function definition\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\ntype VideoEffectCallBack = (effectId: string | undefined, effectParam?: string) => Promise;\n\n/**\n * @hidden\n */\nexport function createEffectParameterChangeCallback(\n callback: VideoEffectCallBack,\n videoPerformanceMonitor?: VideoPerformanceMonitor,\n) {\n return (effectId: string | undefined, effectParam?: string): void => {\n videoPerformanceMonitor?.reportApplyingVideoEffect(effectId || '', effectParam);\n\n callback(effectId, effectParam)\n .then(() => {\n videoPerformanceMonitor?.reportVideoEffectChanged(effectId || '', effectParam);\n sendMessageToParent('video.videoEffectReadiness', [true, effectId, undefined, effectParam]);\n })\n .catch((reason) => {\n const validReason =\n reason in video.EffectFailureReason ? reason : video.EffectFailureReason.InitializationFailure;\n sendMessageToParent('video.videoEffectReadiness', [false, effectId, validReason, effectParam]);\n });\n };\n}\n\nexport { VideoEffectCallBack as DefaultVideoEffectCallBack };\n","import { VideoFrameTick } from './videoFrameTick';\n\nexport type VideoPerformanceStatisticsResult = {\n effectId: string;\n effectParam?: string;\n frameWidth: number;\n frameHeight: number;\n /**\n * The duration in milliseconds that the data were collected\n */\n duration: number;\n /**\n * The number of frames that were processed in the duration\n */\n sampleCount: number;\n /**\n * An array that presents counts of frames that were finished in n milliseconds:\n * distributionBins[frameProcessingDurationInMs]=frameCount.\n * For example, distributionBins[10] = 5 means that 5 frames were processed in 10 milliseconds.\n */\n distributionBins: Uint32Array;\n};\n\nexport class VideoPerformanceStatistics {\n private static readonly initialSessionTimeoutInMs = 1000;\n private static readonly maxSessionTimeoutInMs = 1000 * 30;\n\n private currentSession: {\n startedAtInMs: number;\n timeoutInMs: number;\n effectId: string;\n effectParam?: string;\n frameWidth: number;\n frameHeight: number;\n };\n\n private frameProcessingStartedAt: number;\n private distributionBins: Uint32Array;\n private sampleCount = 0;\n private timeoutId: string;\n\n public constructor(\n distributionBinSize: number,\n /**\n * Function to report the statistics result\n */\n private reportStatisticsResult: (result: VideoPerformanceStatisticsResult) => void,\n ) {\n this.distributionBins = new Uint32Array(distributionBinSize);\n }\n\n /**\n * Call this function before processing every frame\n */\n public processStarts(effectId: string, frameWidth: number, frameHeight: number, effectParam?: string): void {\n VideoFrameTick.tick();\n if (!this.suitableForThisSession(effectId, frameWidth, frameHeight, effectParam)) {\n this.reportAndResetSession(this.getStatistics(), effectId, effectParam, frameWidth, frameHeight);\n }\n this.start();\n }\n\n public processEnds(): void {\n // calculate duration of the process and record it\n const durationInMillisecond = performance.now() - this.frameProcessingStartedAt;\n const binIndex = Math.floor(Math.max(0, Math.min(this.distributionBins.length - 1, durationInMillisecond)));\n this.distributionBins[binIndex] += 1;\n this.sampleCount += 1;\n }\n\n private getStatistics(): VideoPerformanceStatisticsResult {\n if (!this.currentSession) {\n return null;\n }\n return {\n effectId: this.currentSession.effectId,\n effectParam: this.currentSession.effectParam,\n frameHeight: this.currentSession.frameHeight,\n frameWidth: this.currentSession.frameWidth,\n duration: performance.now() - this.currentSession.startedAtInMs,\n sampleCount: this.sampleCount,\n distributionBins: this.distributionBins.slice(),\n };\n }\n\n private start(): void {\n this.frameProcessingStartedAt = performance.now();\n }\n\n private suitableForThisSession(\n effectId: string,\n frameWidth: number,\n frameHeight: number,\n effectParam?: string,\n ): boolean {\n return (\n this.currentSession &&\n this.currentSession.effectId === effectId &&\n this.currentSession.effectParam === effectParam &&\n this.currentSession.frameWidth === frameWidth &&\n this.currentSession.frameHeight === frameHeight\n );\n }\n\n private reportAndResetSession(result, effectId, effectParam, frameWidth, frameHeight): void {\n result && this.reportStatisticsResult(result);\n this.resetCurrentSession(\n this.getNextTimeout(effectId, this.currentSession),\n effectId,\n effectParam,\n frameWidth,\n frameHeight,\n );\n if (this.timeoutId) {\n VideoFrameTick.clearTimeout(this.timeoutId);\n }\n this.timeoutId = VideoFrameTick.setTimeout(\n (() => this.reportAndResetSession(this.getStatistics(), effectId, effectParam, frameWidth, frameHeight)).bind(\n this,\n ),\n this.currentSession.timeoutInMs,\n );\n }\n\n private resetCurrentSession(\n timeoutInMs: number,\n effectId: string,\n effectParam: string,\n frameWidth: number,\n frameHeight: number,\n ): void {\n this.currentSession = {\n startedAtInMs: performance.now(),\n timeoutInMs,\n effectId,\n effectParam,\n frameWidth,\n frameHeight,\n };\n this.sampleCount = 0;\n this.distributionBins.fill(0);\n }\n\n // send the statistics result every n second, where n starts from 1, 2, 4...and finally stays at every 30 seconds.\n private getNextTimeout(effectId: string, currentSession?: { timeoutInMs: number; effectId: string }): number {\n // only reset timeout when new session or effect changed\n if (!currentSession || currentSession.effectId !== effectId) {\n return VideoPerformanceStatistics.initialSessionTimeoutInMs;\n }\n return Math.min(VideoPerformanceStatistics.maxSessionTimeoutInMs, currentSession.timeoutInMs * 2);\n }\n}\n","import { VideoFrameTick } from './videoFrameTick';\nimport { VideoPerformanceStatistics } from './videoPerformanceStatistics';\n\n/**\n * This class is used to monitor the performance of video processing, and report performance events.\n */\nexport class VideoPerformanceMonitor {\n private static readonly distributionBinSize = 1000;\n private static readonly calculateFPSInterval = 1000;\n\n private isFirstFrameProcessed = false;\n\n // The effect that the user last selected:\n private applyingEffect: {\n effectId: string;\n effectParam?: string;\n };\n\n // The effect that is currently applied to the video:\n private appliedEffect: {\n effectId: string;\n effectParam?: string;\n };\n\n private frameProcessTimeLimit = 100;\n private gettingTextureStreamStartedAt: number;\n private currentStreamId: string;\n private frameProcessingStartedAt = 0;\n private frameProcessingTimeCost = 0;\n private processedFrameCount = 0;\n\n private performanceStatistics: VideoPerformanceStatistics;\n\n public constructor(private reportPerformanceEvent: (actionName: string, args: unknown[]) => void) {\n this.performanceStatistics = new VideoPerformanceStatistics(VideoPerformanceMonitor.distributionBinSize, (result) =>\n this.reportPerformanceEvent('video.performance.performanceDataGenerated', [result]),\n );\n }\n\n /**\n * Start to check frame processing time intervally\n * and report performance event if the average frame processing time is too long.\n */\n public startMonitorSlowFrameProcessing(): void {\n VideoFrameTick.setInterval(() => {\n if (this.processedFrameCount === 0) {\n return;\n }\n const averageFrameProcessingTime = this.frameProcessingTimeCost / this.processedFrameCount;\n if (averageFrameProcessingTime > this.frameProcessTimeLimit) {\n this.reportPerformanceEvent('video.performance.frameProcessingSlow', [averageFrameProcessingTime]);\n }\n this.frameProcessingTimeCost = 0;\n this.processedFrameCount = 0;\n }, VideoPerformanceMonitor.calculateFPSInterval);\n }\n\n /**\n * Define the time limit of frame processing.\n * When the average frame processing time is longer than the time limit, a \"video.performance.frameProcessingSlow\" event will be reported.\n * @param timeLimit\n */\n public setFrameProcessTimeLimit(timeLimit: number): void {\n this.frameProcessTimeLimit = timeLimit;\n }\n\n /**\n * Call this function when the app starts to switch to the new video effect\n */\n public reportApplyingVideoEffect(effectId: string, effectParam?: string): void {\n if (this.applyingEffect?.effectId === effectId && this.applyingEffect?.effectParam === effectParam) {\n return;\n }\n this.applyingEffect = {\n effectId,\n effectParam,\n };\n this.appliedEffect = undefined;\n }\n\n /**\n * Call this function when the new video effect is ready\n */\n public reportVideoEffectChanged(effectId: string, effectParam?: string): void {\n if (\n this.applyingEffect === undefined ||\n (this.applyingEffect.effectId !== effectId && this.applyingEffect.effectParam !== effectParam)\n ) {\n // don't handle obsoleted event\n return;\n }\n this.appliedEffect = {\n effectId,\n effectParam,\n };\n this.applyingEffect = undefined;\n this.isFirstFrameProcessed = false;\n }\n\n /**\n * Call this function when the app starts to process a video frame\n */\n public reportStartFrameProcessing(frameWidth: number, frameHeight: number): void {\n VideoFrameTick.tick();\n if (!this.appliedEffect) {\n return;\n }\n this.frameProcessingStartedAt = performance.now();\n this.performanceStatistics.processStarts(\n this.appliedEffect.effectId,\n frameWidth,\n frameHeight,\n this.appliedEffect.effectParam,\n );\n }\n\n /**\n * Call this function when the app finishes successfully processing a video frame\n */\n public reportFrameProcessed(): void {\n if (!this.appliedEffect) {\n return;\n }\n this.processedFrameCount++;\n this.frameProcessingTimeCost += performance.now() - this.frameProcessingStartedAt;\n this.performanceStatistics.processEnds();\n if (!this.isFirstFrameProcessed) {\n this.isFirstFrameProcessed = true;\n this.reportPerformanceEvent('video.performance.firstFrameProcessed', [\n Date.now(),\n this.appliedEffect.effectId,\n this.appliedEffect?.effectParam,\n ]);\n }\n }\n\n /**\n * Call this function when the app starts to get the texture stream\n */\n public reportGettingTextureStream(streamId: string): void {\n this.gettingTextureStreamStartedAt = performance.now();\n this.currentStreamId = streamId;\n }\n\n /**\n * Call this function when the app finishes successfully getting the texture stream\n */\n public reportTextureStreamAcquired(): void {\n if (this.gettingTextureStreamStartedAt !== undefined) {\n const timeTaken = performance.now() - this.gettingTextureStreamStartedAt;\n this.reportPerformanceEvent('video.performance.textureStreamAcquired', [this.currentStreamId, timeTaken]);\n }\n }\n}\n","import { sendMessageToParent } from '../internal/communication';\nimport { registerHandler } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { VideoPerformanceMonitor } from '../internal/videoPerformanceMonitor';\nimport { createEffectParameterChangeCallback, processMediaStream } from '../internal/videoUtils';\nimport { inServerSideRenderingEnvironment } from '../private/inServerSideRenderingEnvironment';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { runtime } from './runtime';\n\n/**\n * Namespace to video extensibility of the SDK\n * @beta\n */\nexport namespace video {\n const videoPerformanceMonitor = inServerSideRenderingEnvironment()\n ? undefined\n : new VideoPerformanceMonitor(sendMessageToParent);\n\n /** Notify video frame processed function type */\n type notifyVideoFrameProcessedFunctionType = () => void;\n /** Notify error function type */\n type notifyErrorFunctionType = (errorMessage: string) => void;\n\n /**\n * Represents a video frame\n * @beta\n */\n export interface VideoBufferData {\n /**\n * Video frame width\n */\n width: number;\n /**\n * Video frame height\n */\n height: number;\n /**\n * Video frame buffer\n */\n videoFrameBuffer: Uint8ClampedArray;\n /**\n * NV12 luma stride, valid only when video frame format is NV12\n */\n lumaStride?: number;\n /**\n * NV12 chroma stride, valid only when video frame format is NV12\n */\n chromaStride?: number;\n /**\n * RGB stride, valid only when video frame format is RGB\n */\n stride?: number;\n /**\n * The time stamp of the current video frame\n */\n timestamp?: number;\n }\n\n /**\n * Video frame format enum, currently only support NV12\n * @beta\n */\n export enum VideoFrameFormat {\n /** Video format used for encoding and decoding YUV color data in video streaming and storage applications. */\n NV12 = 'NV12',\n }\n\n /**\n * Video frame configuration supplied to the host to customize the generated video frame parameters, like format\n * @beta\n */\n export interface VideoFrameConfig {\n /**\n * Video format\n */\n format: VideoFrameFormat;\n }\n\n /**\n * Video effect change type enum\n * @beta\n */\n export enum EffectChangeType {\n /**\n * Current video effect changed\n */\n EffectChanged = 'EffectChanged',\n /**\n * Disable the video effect\n */\n EffectDisabled = 'EffectDisabled',\n }\n\n /**\n * Predefined failure reasons for preparing the selected video effect\n * @beta\n */\n export enum EffectFailureReason {\n /**\n * A wrong effect id is provide.\n * Use this reason when the effect id is not found or empty, this may indicate a mismatch between the app and its manifest or a bug of the host.\n */\n InvalidEffectId = 'InvalidEffectId',\n /**\n * The effect can't be initialized\n */\n InitializationFailure = 'InitializationFailure',\n }\n\n /**\n * Video effect change call back function definition\n * Return a Promise which will be resolved when the effect is prepared, or throw an {@link EffectFailureReason} on error.\n * @beta\n */\n export type VideoEffectCallback = (effectId: string | undefined) => Promise;\n\n /**\n * @beta\n * Video frame call back function definition\n * The callback will be called on every frame when running on the supported host.\n * We require the frame rate of the video to be at least 22fps for 720p, thus the callback should process a frame timely.\n * The video app should call `notifyVideoFrameProcessed` to notify a successfully processed video frame.\n * The video app should call `notifyError` to notify a failure. When the failures accumulate to a certain number, the host will see the app is \"frozen\" and ask the user to close it or not.\n */\n export type VideoBufferHandler = (\n videoBufferData: VideoBufferData,\n notifyVideoFrameProcessed: notifyVideoFrameProcessedFunctionType,\n notifyError: notifyErrorFunctionType,\n ) => void;\n\n /**\n * @beta\n * VideoFrame definition, align with the W3C spec: https://www.w3.org/TR/webcodecs/#videoframe-interface.\n * The current version of typescript doesn't have the definition of VideoFrame so we have to define it here.\n * At runtime it can be cast to VideoFrame directly: `(videoFrame as VideoFrame)`.\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n export interface VideoFrame {}\n\n /**\n * @beta\n * Video frame data extracted from the media stream. More properties may be added in the future.\n */\n export type VideoFrameData = {\n /**\n * The video frame from the media stream.\n */\n videoFrame: VideoFrame;\n };\n\n /**\n * @beta\n * Video frame call back function definition.\n * The callback will be called on every frame when running on the supported host.\n * We require the frame rate of the video to be at least 22fps for 720p, thus the callback should process a frame timely.\n * The video app should resolve the promise to notify a successfully processed video frame.\n * The video app should reject the promise to notify a failure. When the failures accumulate to a certain number, the host will see the app is \"frozen\" and ask the user to close it or not.\n */\n export type VideoFrameHandler = (receivedVideoFrame: VideoFrameData) => Promise;\n\n /**\n * @beta\n * Callbacks and configuration supplied to the host to process the video frames.\n */\n export type RegisterForVideoFrameParameters = {\n /**\n * Callback function to process the video frames extracted from a media stream.\n */\n videoFrameHandler: VideoFrameHandler;\n /**\n * Callback function to process the video frames shared by the host.\n */\n videoBufferHandler: VideoBufferHandler;\n /**\n * Video frame configuration supplied to the host to customize the generated video frame parameters, like format\n */\n config: VideoFrameConfig;\n };\n\n /**\n * Register callbacks to process the video frames if the host supports it.\n * @beta\n * @param parameters - Callbacks and configuration to process the video frames. A host may support either {@link VideoFrameHandler} or {@link VideoBufferHandler}, but not both.\n * To ensure the video effect works on all supported hosts, the video app must provide both {@link VideoFrameHandler} and {@link VideoBufferHandler}.\n * The host will choose the appropriate callback based on the host's capability.\n *\n * @example\n * ```typescript\n * video.registerForVideoFrame({\n * videoFrameHandler: async (videoFrameData) => {\n * const originalFrame = videoFrameData.videoFrame as VideoFrame;\n * try {\n * const processedFrame = await processFrame(originalFrame);\n * return processedFrame;\n * } catch (e) {\n * throw e;\n * }\n * },\n * videoBufferHandler: (\n * bufferData: VideoBufferData,\n * notifyVideoFrameProcessed: notifyVideoFrameProcessedFunctionType,\n * notifyError: notifyErrorFunctionType\n * ) => {\n * try {\n * processFrameInplace(bufferData);\n * notifyVideoFrameProcessed();\n * } catch (e) {\n * notifyError(e);\n * }\n * },\n * config: {\n * format: video.VideoPixelFormat.NV12,\n * }\n * });\n * ```\n */\n export function registerForVideoFrame(parameters: RegisterForVideoFrameParameters): void {\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n if (!parameters.videoFrameHandler || !parameters.videoBufferHandler) {\n throw new Error('Both videoFrameHandler and videoBufferHandler must be provided');\n }\n registerHandler(\n 'video.setFrameProcessTimeLimit',\n (timeLimitInfo: { timeLimit: number }) =>\n videoPerformanceMonitor?.setFrameProcessTimeLimit(timeLimitInfo.timeLimit),\n false,\n );\n if (doesSupportMediaStream()) {\n registerForMediaStream(parameters.videoFrameHandler, parameters.config);\n } else if (doesSupportSharedFrame()) {\n registerForVideoBuffer(parameters.videoBufferHandler, parameters.config);\n } else {\n // should not happen if isSupported() is true\n throw errorNotSupportedOnPlatform;\n }\n videoPerformanceMonitor?.startMonitorSlowFrameProcessing();\n }\n\n /**\n * Video extension should call this to notify host that the current selected effect parameter changed.\n * If it's pre-meeting, host will call videoEffectCallback immediately then use the videoEffect.\n * If it's the in-meeting scenario, we will call videoEffectCallback when apply button clicked.\n * @beta\n * @param effectChangeType - the effect change type.\n * @param effectId - Newly selected effect id.\n */\n export function notifySelectedVideoEffectChanged(\n effectChangeType: EffectChangeType,\n effectId: string | undefined,\n ): void {\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('video.videoEffectChanged', [effectChangeType, effectId]);\n }\n\n /**\n * Register a callback to be notified when a new video effect is applied.\n * @beta\n * @param callback - Function to be called when new video effect is applied.\n */\n export function registerForVideoEffect(callback: VideoEffectCallback): void {\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n registerHandler(\n 'video.effectParameterChange',\n createEffectParameterChangeCallback(callback, videoPerformanceMonitor),\n false,\n );\n sendMessageToParent('video.registerForVideoEffect');\n }\n\n /**\n * Sending notification to host finished the video frame processing, now host can render this video frame\n * or pass the video frame to next one in video pipeline\n * @beta\n */\n function notifyVideoFrameProcessed(timestamp?: number): void {\n sendMessageToParent('video.videoFrameProcessed', [timestamp]);\n }\n\n /**\n * Sending error notification to host\n * @beta\n * @param errorMessage - The error message that will be sent to the host\n */\n function notifyError(errorMessage: string): void {\n sendMessageToParent('video.notifyError', [errorMessage]);\n }\n\n /**\n * Checks if video capability is supported by the host.\n * @beta\n * @returns boolean to represent whether the video capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n */\n export function isSupported(): boolean {\n return (\n ensureInitialized(runtime) &&\n !!runtime.supports.video &&\n /** A host should support either mediaStream or sharedFrame sub-capability to support the video capability */\n (!!runtime.supports.video.mediaStream || !!runtime.supports.video.sharedFrame)\n );\n }\n\n function registerForMediaStream(videoFrameHandler: VideoFrameHandler, config: VideoFrameConfig): void {\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported() || !doesSupportMediaStream()) {\n throw errorNotSupportedOnPlatform;\n }\n\n registerHandler(\n 'video.startVideoExtensibilityVideoStream',\n async (mediaStreamInfo: { streamId: string }) => {\n // when a new streamId is ready:\n const { streamId } = mediaStreamInfo;\n const monitoredVideoFrameHandler = createMonitoredVideoFrameHandler(videoFrameHandler, videoPerformanceMonitor);\n const generator = await processMediaStream(\n streamId,\n monitoredVideoFrameHandler,\n notifyError,\n videoPerformanceMonitor,\n );\n // register the video track with processed frames back to the stream:\n !inServerSideRenderingEnvironment() && window['chrome']?.webview?.registerTextureStream(streamId, generator);\n },\n false,\n );\n\n sendMessageToParent('video.mediaStream.registerForVideoFrame', [config]);\n }\n\n function createMonitoredVideoFrameHandler(\n videoFrameHandler: VideoFrameHandler,\n videoPerformanceMonitor?: VideoPerformanceMonitor,\n ): VideoFrameHandler {\n return async (videoFrameData: VideoFrameData): Promise => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const originalFrame = videoFrameData.videoFrame as any;\n videoPerformanceMonitor?.reportStartFrameProcessing(originalFrame.codedWidth, originalFrame.codedHeight);\n const processedFrame = await videoFrameHandler(videoFrameData);\n videoPerformanceMonitor?.reportFrameProcessed();\n return processedFrame;\n };\n }\n\n /**\n * Old video frame data structure, almost identical to the {@link VideoBufferData} except `videoFrameBuffer` is named as `data`.\n * Old host like the old Teams passes this data to the SDK. It will be deprecated in the future.\n */\n type LegacyVideoBufferData = Omit & {\n /**\n * Video frame buffer\n */\n data: Uint8ClampedArray;\n };\n\n function registerForVideoBuffer(videoBufferHandler: VideoBufferHandler, config: VideoFrameConfig): void {\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported() || !doesSupportSharedFrame()) {\n throw errorNotSupportedOnPlatform;\n }\n\n registerHandler(\n 'video.newVideoFrame',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (videoBufferData: VideoBufferData | LegacyVideoBufferData) => {\n if (videoBufferData) {\n const timestamp = videoBufferData.timestamp;\n videoPerformanceMonitor?.reportStartFrameProcessing(videoBufferData.width, videoBufferData.height);\n videoBufferHandler(\n normalizeVideoBufferData(videoBufferData),\n () => {\n videoPerformanceMonitor?.reportFrameProcessed();\n notifyVideoFrameProcessed(timestamp);\n },\n notifyError,\n );\n }\n },\n false,\n );\n sendMessageToParent('video.registerForVideoFrame', [config]);\n }\n\n function normalizeVideoBufferData(videoBufferData: VideoBufferData | LegacyVideoBufferData): VideoBufferData {\n if ('videoFrameBuffer' in videoBufferData) {\n return videoBufferData;\n } else {\n // The host may pass the VideoFrame with the old definition which has `data` instead of `videoFrameBuffer`\n const { data, ...newVideoBufferData } = videoBufferData;\n return {\n ...newVideoBufferData,\n videoFrameBuffer: data,\n };\n }\n }\n\n function doesSupportMediaStream(): boolean {\n return (\n ensureInitialized(runtime, FrameContexts.sidePanel) &&\n isTextureStreamAvailable() &&\n !!runtime.supports.video?.mediaStream\n );\n }\n\n function isTextureStreamAvailable(): boolean {\n return (\n !inServerSideRenderingEnvironment() &&\n !!(window['chrome']?.webview?.getTextureStream && window['chrome']?.webview?.registerTextureStream)\n );\n }\n\n function doesSupportSharedFrame(): boolean {\n return ensureInitialized(runtime, FrameContexts.sidePanel) && !!runtime.supports.video?.sharedFrame;\n }\n} //end of video namespace\n","import { sendAndHandleStatusAndReason, sendMessageToParent } from '../internal/communication';\nimport { registerHandler, removeHandler } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { runtime } from './runtime';\n\n/**\n * Allows your application to interact with the host M365 application's search box.\n * By integrating your application with the host's search box, users can search\n * your app using the same search box they use elsewhere in Teams, Outlook, or Office.\n *\n * This functionality is in Beta.\n * @beta\n */\nexport namespace search {\n const onChangeHandlerName = 'search.queryChange';\n const onClosedHandlerName = 'search.queryClose';\n const onExecutedHandlerName = 'search.queryExecute';\n\n /**\n * This interface contains information pertaining to the contents of the host M365 application's search box\n *\n * @beta\n */\n export interface SearchQuery {\n /** The current search term in the host search experience */\n searchTerm: string;\n\n /** Timestamp sequence value to ensure messages are processed in correct order / combine them. */\n timestamp: number;\n }\n\n /**\n * This type will store the SearchQuery and allow other logic to be made inside the handler.\n *\n * @beta\n */\n export type SearchQueryHandler = (query: SearchQuery) => void;\n\n /**\n * Allows the caller to register for various events fired by the host search experience.\n * Calling this function indicates that your application intends to plug into the host's search box and handle search events,\n * when the user is actively using your page/tab.\n * \n * The host may visually update its search box, e.g. with the name or icon of your application.\n * \n * Your application should *not* re-render inside of these callbacks, there may be a large number\n * of onChangeHandler calls if the user is typing rapidly in the search box.\n *\n * @param onClosedHandler - This handler will be called when the user exits or cancels their search.\n * Should be used to return your application to its most recent, non-search state. The value of {@link SearchQuery.searchTerm} \n * will be whatever the last query was before ending search. \n * \n * @param onExecuteHandler - The handler will be called when the user executes their \n * search (by pressing Enter for example). Should be used to display the full list of search results. \n * The value of {@link SearchQuery.searchTerm} is the complete query the user entered in the search box.\n *\n * @param onChangeHandler - This optional handler will be called when the user first starts using the\n * host's search box and as the user types their query. Can be used to put your application into a \n * word-wheeling state or to display suggestions as the user is typing. \n * \n * This handler will be called with an empty {@link SearchQuery.searchTerm} when search is beginning, and subsequently,\n * with the current contents of the search box.\n * @example\n * ``` ts\n * search.registerHandlers(\n query => {\n console.log('Update your application to handle the search experience being closed. Last query: ${query.searchTerm}');\n },\n query => {\n console.log(`Update your application to handle an executed search result: ${query.searchTerm}`);\n },\n query => {\n console.log(`Update your application with the changed search query: ${query.searchTerm}`);\n },\n );\n * ```\n *\n * @beta\n */\n export function registerHandlers(\n onClosedHandler: SearchQueryHandler,\n onExecuteHandler: SearchQueryHandler,\n onChangeHandler?: SearchQueryHandler,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n registerHandler(onClosedHandlerName, onClosedHandler);\n registerHandler(onExecutedHandlerName, onExecuteHandler);\n if (onChangeHandler) {\n registerHandler(onChangeHandlerName, onChangeHandler);\n }\n }\n\n /**\n * Allows the caller to unregister for all events fired by the host search experience. Calling\n * this function will cause your app to stop appearing in the set of search scopes in the hosts\n *\n * @beta\n */\n export function unregisterHandlers(): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n // This should let the host know to stop making the app scope show up in the search experience\n // Can also be used to clean up handlers on the host if desired\n sendMessageToParent('search.unregister');\n removeHandler(onChangeHandlerName);\n removeHandler(onClosedHandlerName);\n removeHandler(onExecutedHandlerName);\n }\n\n /**\n * Checks if search capability is supported by the host\n * @returns boolean to represent whether the search capability is supported\n *\n * @throws Error if {@link app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.search ? true : false;\n }\n\n /**\n * Clear the host M365 application's search box\n *\n * @beta\n */\n export function closeSearch(): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime, FrameContexts.content);\n if (!isSupported()) {\n throw new Error('Not supported');\n }\n\n resolve(sendAndHandleStatusAndReason('search.closeSearch'));\n });\n }\n}\n","import { sendAndHandleSdkError } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { callCallbackWithSdkErrorFromPromiseAndReturnPromise, InputFunction } from '../internal/utils';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { ErrorCode, SdkError } from './interfaces';\nimport { runtime } from './runtime';\n\n/**\n * Namespace to open a share dialog for web content.\n * For more info, see [Share to Teams from personal app or tab](https://learn.microsoft.com/microsoftteams/platform/concepts/build-and-test/share-to-teams-from-personal-app-or-tab)\n */\nexport namespace sharing {\n /** shareWebContent callback function type */\n type shareWebContentCallbackFunctionType = (err?: SdkError) => void;\n\n /** Type of message that can be sent or received by the sharing APIs */\n export const SharingAPIMessages = {\n /**\n * Share web content message.\n * @internal\n */\n shareWebContent: 'sharing.shareWebContent',\n };\n\n // More types can be added as we expand share capability\n type ContentType = 'URL';\n\n /** Represents parameters for base shared content. */\n interface IBaseSharedContent {\n /** Shared content type */\n type: ContentType;\n }\n\n // More types can be added as we expand share capability\n /** IShareRequestContentType defines share request type. */\n export type IShareRequestContentType = IURLContent;\n\n /** Represents IShareRequest parameters interface.\n * @typeparam T - The identity type\n */\n export interface IShareRequest {\n /** Content of the share request. */\n content: T[];\n }\n\n /** Represents IURLContent parameters. */\n export interface IURLContent extends IBaseSharedContent {\n /** Type */\n type: 'URL';\n\n /**\n * Required URL\n */\n url: string;\n\n /**\n * Default initial message text\n */\n message?: string;\n\n /**\n * Show URL preview, defaults to true\n */\n preview?: boolean;\n }\n\n /**\n * Feature is under development\n * Opens a share dialog for web content\n *\n * @param shareWebContentRequest - web content info\n * @returns Promise that will be fulfilled when the operation has completed\n */\n export function shareWebContent(shareWebContentRequest: IShareRequest): Promise;\n /**\n * @deprecated\n * As of 2.0.0, please use {@link sharing.shareWebContent sharing.shareWebContent(shareWebContentRequest: IShareRequest\\): Promise\\} instead.\n *\n * Feature is under development\n * Opens a share dialog for web content\n *\n * @param shareWebContentRequest - web content info\n * @param callback - optional callback\n */\n export function shareWebContent(\n shareWebContentRequest: IShareRequest,\n callback: shareWebContentCallbackFunctionType,\n ): void;\n export function shareWebContent(\n shareWebContentRequest: IShareRequest,\n callback?: shareWebContentCallbackFunctionType,\n ): Promise {\n // validate the given input (synchronous check)\n try {\n validateNonEmptyContent(shareWebContentRequest);\n validateTypeConsistency(shareWebContentRequest);\n validateContentForSupportedTypes(shareWebContentRequest);\n } catch (err) {\n //return the error via callback(v1) or rejected promise(v2)\n const wrappedFunction: InputFunction = () => Promise.reject(err);\n return callCallbackWithSdkErrorFromPromiseAndReturnPromise(wrappedFunction, callback);\n }\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.sidePanel,\n FrameContexts.task,\n FrameContexts.stage,\n FrameContexts.meetingStage,\n );\n return callCallbackWithSdkErrorFromPromiseAndReturnPromise(shareWebContentHelper, callback, shareWebContentRequest);\n }\n\n function shareWebContentHelper(shareWebContentRequest: IShareRequest): Promise {\n return new Promise((resolve) => {\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n resolve(sendAndHandleSdkError(SharingAPIMessages.shareWebContent, shareWebContentRequest));\n });\n }\n\n /**\n * Functions for validating the shareRequest input parameter\n */\n function validateNonEmptyContent(shareRequest: IShareRequest): void {\n if (!(shareRequest && shareRequest.content && shareRequest.content.length)) {\n const err: SdkError = {\n errorCode: ErrorCode.INVALID_ARGUMENTS,\n message: 'Shared content is missing',\n };\n throw err;\n }\n }\n\n function validateTypeConsistency(shareRequest: IShareRequest): void {\n let err: SdkError | undefined;\n if (shareRequest.content.some((item) => !item.type)) {\n err = {\n errorCode: ErrorCode.INVALID_ARGUMENTS,\n message: 'Shared content type cannot be undefined',\n };\n throw err;\n }\n if (shareRequest.content.some((item) => item.type !== shareRequest.content[0].type)) {\n err = {\n errorCode: ErrorCode.INVALID_ARGUMENTS,\n message: 'Shared content must be of the same type',\n };\n throw err;\n }\n }\n\n function validateContentForSupportedTypes(shareRequest: IShareRequest): void {\n let err: SdkError | undefined;\n if (shareRequest.content[0].type === 'URL') {\n if (shareRequest.content.some((item) => !item.url)) {\n err = {\n errorCode: ErrorCode.INVALID_ARGUMENTS,\n message: 'URLs are required for URL content types',\n };\n throw err;\n }\n } else {\n err = {\n errorCode: ErrorCode.INVALID_ARGUMENTS,\n message: 'Content type is unsupported',\n };\n throw err;\n }\n }\n\n /**\n * Checks if the sharing capability is supported by the host\n * @returns boolean to represent whether the sharing capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.sharing ? true : false;\n }\n}\n","import { sendAndHandleSdkError } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { runtime } from './runtime';\n\n/**\n * Namespace to interact with the stage view specific part of the SDK.\n *\n * @beta\n */\nexport namespace stageView {\n /**\n * Parameters to open a stage view.\n */\n export interface StageViewParams {\n /**\n * The ID of the Teams application to be opened.\n */\n appId: string;\n\n /**\n * The URL of the content to display.\n */\n contentUrl: string;\n\n /**\n * The chat or channel ID.\n */\n threadId: string;\n\n /**\n * The title to give the stage view.\n */\n title?: string;\n\n /**\n * The Teams application website URL.\n */\n websiteUrl?: string;\n\n /**\n * The entity ID of the Teams application content being opened.\n */\n entityId?: string;\n }\n\n /**\n * @hidden\n * Feature is under development\n *\n * Opens a stage view to display a Teams application\n * @beta\n * @param stageViewParams - The parameters to pass into the stage view.\n * @returns Promise that resolves or rejects with an error once the stage view is closed.\n */\n export function open(stageViewParams: StageViewParams): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n if (!stageViewParams) {\n throw new Error('[stageView.open] Stage view params cannot be null');\n }\n\n resolve(sendAndHandleSdkError('stageView.open', stageViewParams));\n });\n }\n\n /**\n * Checks if stageView capability is supported by the host\n * @beta\n * @returns boolean to represent whether the stageView capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.stageView ? true : false;\n }\n}\n","import { ensureInitialized } from '../internal/internalAPIs';\nimport { runtime } from './runtime';\n\n/**\n * Contains functionality to allow web apps to store data in webview cache\n *\n * @beta\n */\nexport namespace webStorage {\n /**\n * Checks if web storage gets cleared when a user logs out from host client\n *\n * @returns true is web storage gets cleared on logout and false if it does not\n *\n * @beta\n */\n export function isWebStorageClearedOnUserLogOut(): boolean {\n ensureInitialized(runtime);\n return isSupported();\n }\n\n /**\n * Checks if webStorage capability is supported by the host\n * @returns boolean to represent whether the webStorage capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @beta\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.webStorage ? true : false;\n }\n}\n","import { sendAndUnwrap, sendMessageToParent } from '../internal/communication';\nimport { errorCallNotStarted } from '../internal/constants';\nimport { createTeamsDeepLinkForCall } from '../internal/deepLinkUtilities';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { runtime } from './runtime';\n\n/**\n * Used to interact with call functionality, including starting calls with other users.\n */\nexport namespace call {\n /** Modalities that can be associated with a call. */\n export enum CallModalities {\n /** Indicates that the modality is unknown or undefined. */\n Unknown = 'unknown',\n /** Indicates that the call includes audio. */\n Audio = 'audio',\n /** Indicates that the call includes video. */\n Video = 'video',\n /** Indicates that the call includes video-based screen sharing. */\n VideoBasedScreenSharing = 'videoBasedScreenSharing',\n /** Indicates that the call includes data sharing or messaging. */\n Data = 'data',\n }\n\n /** Represents parameters for {@link startCall | StartCall}. */\n export interface StartCallParams {\n /**\n * Comma-separated list of user IDs representing the participants of the call.\n *\n * @remarks\n * Currently the User ID field supports the Microsoft Entra UserPrincipalName,\n * typically an email address, or in case of a PSTN call, it supports a pstn\n * mri 4:\\.\n */\n targets: string[];\n /**\n * List of modalities for the call. Defaults to [“audio”].\n */\n requestedModalities?: CallModalities[];\n /**\n * An optional parameter that informs about the source of the deep link\n */\n source?: string;\n }\n\n /**\n * Starts a call with other users\n *\n * @param startCallParams - Parameters for the call\n *\n * @throws Error if call capability is not supported\n * @throws Error if host notifies of a failed start call attempt in a legacy Teams environment\n * @returns always true if the host notifies of a successful call inititation\n */\n export function startCall(startCallParams: StartCallParams): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n if (runtime.isLegacyTeams) {\n resolve(\n sendAndUnwrap(\n 'executeDeepLink',\n createTeamsDeepLinkForCall(\n startCallParams.targets,\n startCallParams.requestedModalities?.includes(CallModalities.Video),\n startCallParams.source,\n ),\n ).then((result: boolean) => {\n if (!result) {\n throw new Error(errorCallNotStarted);\n }\n return result;\n }),\n );\n } else {\n return sendMessageToParent('call.startCall', [startCallParams], resolve);\n }\n });\n }\n\n /**\n * Checks if the call capability is supported by the host\n * @returns boolean to represent whether the call capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.call ? true : false;\n }\n}\n","import { app } from './app';\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link app} namespace instead.\n */\nexport namespace appInitialization {\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.Messages} instead.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n export import Messages = app.Messages;\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.FailedReason} instead.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n export import FailedReason = app.FailedReason;\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.ExpectedFailureReason} instead.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n export import ExpectedFailureReason = app.ExpectedFailureReason;\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.IFailedRequest} instead.\n */\n export import IFailedRequest = app.IFailedRequest;\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.IExpectedFailureRequest} instead.\n */\n export import IExpectedFailureRequest = app.IExpectedFailureRequest;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.notifyAppLoaded app.notifyAppLoaded(): void} instead.\n *\n * Notifies the frame that app has loaded and to hide the loading indicator if one is shown.\n */\n export function notifyAppLoaded(): void {\n app.notifyAppLoaded();\n }\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.notifySuccess app.notifySuccess(): void} instead.\n *\n * Notifies the frame that app initialization is successful and is ready for user interaction.\n */\n export function notifySuccess(): void {\n app.notifySuccess();\n }\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.notifyFailure app.notifyFailure(appInitializationFailedRequest: IFailedRequest): void} instead.\n *\n * Notifies the frame that app initialization has failed and to show an error page in its place.\n * @param appInitializationFailedRequest - The failure request containing the reason for why the app failed\n * during initialization as well as an optional message.\n */\n export function notifyFailure(appInitializationFailedRequest: IFailedRequest): void {\n app.notifyFailure(appInitializationFailedRequest);\n }\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link app.notifyExpectedFailure app.notifyExpectedFailure(expectedFailureRequest: IExpectedFailureRequest): void} instead.\n *\n * Notifies the frame that app initialized with some expected errors.\n * @param expectedFailureRequest - The expected failure request containing the reason and an optional message\n */\n export function notifyExpectedFailure(expectedFailureRequest: IExpectedFailureRequest): void {\n app.notifyExpectedFailure(expectedFailureRequest);\n }\n}\n","import { ensureInitialized } from '../internal/internalAPIs';\nimport { getGenericOnCompleteHandler } from '../internal/utils';\nimport { FrameContexts } from './constants';\nimport { pages } from './pages';\nimport { runtime } from './runtime';\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.config} namespace instead.\n *\n * Namespace to interact with the settings-specific part of the SDK.\n * This object is usable only on the settings frame.\n */\nexport namespace settings {\n /** Register on remove handler function type */\n type registerOnRemoveHandlerFunctionType = (evt: RemoveEvent) => void;\n /** Register on save handler function type */\n type registerOnSaveHandlerFunctionType = (evt: SaveEvent) => void;\n /** Set settings on complete function type */\n type setSettingsOnCompleteFunctionType = (status: boolean, reason?: string) => void;\n /** Get settings callback function type */\n type getSettingsCallbackFunctionType = (instanceSettings: Settings) => void;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link pages.config.Config} instead.\n * @remarks\n * Renamed to config in pages.Config\n */\n export import Settings = pages.InstanceConfig;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link pages.config.SaveEvent} instead.\n * @remarks\n * See pages.SaveEvent\n */\n export import SaveEvent = pages.config.SaveEvent;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link pages.config.RemoveEvent} instead.\n * @remarks\n * See pages.RemoveEvent\n */\n export import RemoveEvent = pages.config.RemoveEvent;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link pages.config.SaveParameters} instead.\n * @remarks\n * See pages.SaveParameters\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n export import SaveParameters = pages.config.SaveParameters;\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link pages.config.setValidityState pages.config.setValidityState(validityState: boolean): void} instead.\n *\n * Sets the validity state for the settings.\n * The initial value is false, so the user cannot save the settings until this is called with true.\n *\n * @param validityState - Indicates whether the save or remove button is enabled for the user.\n */\n export function setValidityState(validityState: boolean): void {\n pages.config.setValidityState(validityState);\n }\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link pages.getConfig pages.getConfig(): Promise\\} instead.\n *\n * Gets the settings for the current instance.\n *\n * @param callback - The callback to invoke when the {@link Settings} object is retrieved.\n */\n export function getSettings(callback: getSettingsCallbackFunctionType): void {\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.settings,\n FrameContexts.remove,\n FrameContexts.sidePanel,\n );\n pages.getConfig().then((config: pages.InstanceConfig) => {\n callback(config);\n });\n }\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link pages.config.setConfig pages.config.setConfig(instanceSettings: Config): Promise\\} instead.\n *\n * Sets the settings for the current instance.\n * This is an asynchronous operation; calls to getSettings are not guaranteed to reflect the changed state.\n *\n * @param - Set the desired settings for this instance.\n */\n export function setSettings(instanceSettings: Settings, onComplete?: setSettingsOnCompleteFunctionType): void {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.settings, FrameContexts.sidePanel);\n onComplete = onComplete ? onComplete : getGenericOnCompleteHandler();\n pages.config\n .setConfig(instanceSettings)\n .then(() => {\n onComplete(true);\n })\n .catch((error: Error) => {\n onComplete(false, error.message);\n });\n }\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link pages.config.registerOnSaveHandler pages.config.registerOnSaveHandler(handler: registerOnSaveHandlerFunctionType): void} instead.\n *\n * Registers a handler for when the user attempts to save the settings. This handler should be used\n * to create or update the underlying resource powering the content.\n * The object passed to the handler must be used to notify whether to proceed with the save.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler - The handler to invoke when the user selects the save button.\n */\n export function registerOnSaveHandler(handler: registerOnSaveHandlerFunctionType): void {\n pages.config.registerOnSaveHandlerHelper(handler);\n }\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link pages.config.registerOnRemoveHandler pages.config.registerOnRemoveHandler(handler: registerOnRemoveHandlerFunctionType): void} instead.\n *\n * Registers a handler for user attempts to remove content. This handler should be used\n * to remove the underlying resource powering the content.\n * The object passed to the handler must be used to indicate whether to proceed with the removal.\n * Only one handler may be registered at a time. Subsequent registrations will override the first.\n *\n * @param handler - The handler to invoke when the user selects the remove button.\n */\n export function registerOnRemoveHandler(handler: registerOnRemoveHandlerFunctionType): void {\n pages.config.registerOnRemoveHandlerHelper(handler);\n }\n}\n","import { sendMessageToParent } from '../internal/communication';\nimport { GlobalVars } from '../internal/globalVars';\nimport { registerHandlerHelper } from '../internal/handlers';\nimport { ensureInitializeCalled, ensureInitialized } from '../internal/internalAPIs';\nimport { getGenericOnCompleteHandler } from '../internal/utils';\nimport { app } from './app';\nimport { FrameContexts } from './constants';\nimport {\n Context,\n DeepLinkParameters,\n FrameContext,\n LoadContext,\n TabInformation,\n TabInstanceParameters,\n} from './interfaces';\nimport { pages } from './pages';\nimport { runtime } from './runtime';\nimport { teamsCore } from './teamsAPIs';\n\n/** Execute deep link on complete function type */\ntype executeDeepLinkOnCompleteFunctionType = (status: boolean, reason?: string) => void;\n/** Callback function type */\ntype callbackFunctionType = () => void;\n/** Get context callback function type */\ntype getContextCallbackFunctionType = (context: Context) => void;\n/** Get tab instances callback function type */\ntype getTabInstancesCallbackFunctionType = (tabInfo: TabInformation) => void;\n/** Register back button handler function type */\ntype registerBackButtonHandlerFunctionType = () => boolean;\n/** Register full screen handler function type */\ntype registerFullScreenHandlerFunctionType = (isFullScreen: boolean) => void;\n/** Register on theme change handler function type */\ntype registerOnThemeChangeHandlerFunctionType = (theme: string) => void;\n/**\n * @deprecated\n * As of 2.0.0, please use {@link app.initialize app.initialize(validMessageOrigins?: string[]): Promise\\} instead.\n *\n * Initializes the library. This must be called before any other SDK calls\n * but after the frame is loaded successfully.\n * @param callback - Optionally specify a callback to invoke when Teams SDK has successfully initialized\n * @param validMessageOrigins - Optionally specify a list of cross frame message origins. There must have\n * https: protocol otherwise they will be ignored. Example: https://www.example.com\n */\nexport function initialize(callback?: callbackFunctionType, validMessageOrigins?: string[]): void {\n app.initialize(validMessageOrigins).then(() => {\n if (callback) {\n callback();\n }\n });\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link teamsCore.enablePrintCapability teamsCore.enablePrintCapability(): void} instead.\n *\n * Enable print capability to support printing page using Ctrl+P and cmd+P\n */\nexport function enablePrintCapability(): void {\n teamsCore.enablePrintCapability();\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link teamsCore.print teamsCore.print(): void} instead.\n *\n * Default print handler\n */\nexport function print(): void {\n teamsCore.print();\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link app.getContext app.getContext(): Promise\\} instead.\n *\n * Retrieves the current context the frame is running in.\n *\n * @param callback - The callback to invoke when the {@link Context} object is retrieved.\n */\nexport function getContext(callback: getContextCallbackFunctionType): void {\n ensureInitializeCalled();\n sendMessageToParent('getContext', (context: Context) => {\n if (!context.frameContext) {\n // Fallback logic for frameContext properties\n context.frameContext = GlobalVars.frameContext;\n }\n callback(context);\n });\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link app.registerOnThemeChangeHandler app.registerOnThemeChangeHandler(handler: registerOnThemeChangeHandlerFunctionType): void} instead.\n *\n * Registers a handler for theme changes.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler - The handler to invoke when the user changes their theme.\n */\nexport function registerOnThemeChangeHandler(handler: registerOnThemeChangeHandlerFunctionType): void {\n app.registerOnThemeChangeHandler(handler);\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.registerFullScreenHandler pages.registerFullScreenHandler(handler: registerFullScreenHandlerFunctionType): void} instead.\n *\n * Registers a handler for changes from or to full-screen view for a tab.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler - The handler to invoke when the user toggles full-screen view for a tab.\n */\nexport function registerFullScreenHandler(handler: registerFullScreenHandlerFunctionType): void {\n registerHandlerHelper('fullScreenChange', handler, []);\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.appButton.onClick pages.appButton.onClick(handler: callbackFunctionType): void} instead.\n *\n * Registers a handler for clicking the app button.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler - The handler to invoke when the personal app button is clicked in the app bar.\n */\nexport function registerAppButtonClickHandler(handler: callbackFunctionType): void {\n registerHandlerHelper('appButtonClick', handler, [FrameContexts.content]);\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.appButton.onHoverEnter pages.appButton.onHoverEnter(handler: callbackFunctionType): void} instead.\n *\n * Registers a handler for entering hover of the app button.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler - The handler to invoke when entering hover of the personal app button in the app bar.\n */\nexport function registerAppButtonHoverEnterHandler(handler: callbackFunctionType): void {\n registerHandlerHelper('appButtonHoverEnter', handler, [FrameContexts.content]);\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.appButton.onHoverLeave pages.appButton.onHoverLeave(handler: callbackFunctionType): void} instead.\n *\n * Registers a handler for exiting hover of the app button.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n * @param handler - The handler to invoke when exiting hover of the personal app button in the app bar.\n *\n */\nexport function registerAppButtonHoverLeaveHandler(handler: callbackFunctionType): void {\n registerHandlerHelper('appButtonHoverLeave', handler, [FrameContexts.content]);\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.backStack.registerBackButtonHandler pages.backStack.registerBackButtonHandler(handler: registerBackButtonHandlerFunctionType): void} instead.\n *\n * Registers a handler for user presses of the Team client's back button. Experiences that maintain an internal\n * navigation stack should use this handler to navigate the user back within their frame. If an app finds\n * that after running its back button handler it cannot handle the event it should call the navigateBack\n * method to ask the Teams client to handle it instead.\n *\n * @param handler - The handler to invoke when the user presses their Team client's back button.\n */\nexport function registerBackButtonHandler(handler: registerBackButtonHandlerFunctionType): void {\n pages.backStack.registerBackButtonHandlerHelper(handler);\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link teamsCore.registerOnLoadHandler teamsCore.registerOnLoadHandler(handler: (context: LoadContext) => void): void} instead.\n *\n * @hidden\n * Registers a handler to be called when the page has been requested to load.\n *\n * @param handler - The handler to invoke when the page is loaded.\n */\nexport function registerOnLoadHandler(handler: (context: LoadContext) => void): void {\n teamsCore.registerOnLoadHandlerHelper(handler);\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link teamsCore.registerBeforeUnloadHandler teamsCore.registerBeforeUnloadHandler(handler: (readyToUnload: callbackFunctionType) => boolean): void} instead.\n *\n * @hidden\n * Registers a handler to be called before the page is unloaded.\n *\n * @param handler - The handler to invoke before the page is unloaded. If this handler returns true the page should\n * invoke the readyToUnload function provided to it once it's ready to be unloaded.\n */\nexport function registerBeforeUnloadHandler(handler: (readyToUnload: callbackFunctionType) => boolean): void {\n teamsCore.registerBeforeUnloadHandlerHelper(handler);\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.registerFocusEnterHandler pages.registerFocusEnterHandler(handler: (navigateForward: boolean) => void): void} instead.\n *\n * @hidden\n * Registers a handler when focus needs to be passed from teams to the place of choice on app.\n *\n * @param handler - The handler to invoked by the app when they want the focus to be in the place of their choice.\n */\nexport function registerFocusEnterHandler(handler: (navigateForward: boolean) => boolean): void {\n registerHandlerHelper('focusEnter', handler, []);\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.config.registerChangeConfigHandler pages.config.registerChangeConfigHandler(handler: callbackFunctionType): void} instead.\n *\n * Registers a handler for when the user reconfigurated tab.\n *\n * @param handler - The handler to invoke when the user click on Settings.\n */\nexport function registerChangeSettingsHandler(handler: callbackFunctionType): void {\n registerHandlerHelper('changeSettings', handler, [FrameContexts.content]);\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.tabs.getTabInstances pages.tabs.getTabInstances(tabInstanceParameters?: TabInstanceParameters): Promise\\} instead.\n *\n * Allows an app to retrieve for this user tabs that are owned by this app.\n * If no TabInstanceParameters are passed, the app defaults to favorite teams and favorite channels.\n *\n * @param callback - The callback to invoke when the {@link TabInstanceParameters} object is retrieved.\n * @param tabInstanceParameters - OPTIONAL Flags that specify whether to scope call to favorite teams or channels.\n */\nexport function getTabInstances(\n callback: getTabInstancesCallbackFunctionType,\n tabInstanceParameters?: TabInstanceParameters,\n): void {\n ensureInitialized(runtime);\n pages.tabs.getTabInstances(tabInstanceParameters).then((tabInfo: TabInformation) => {\n callback(tabInfo);\n });\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.tabs.getMruTabInstances pages.tabs.getMruTabInstances(tabInstanceParameters?: TabInstanceParameters): Promise\\} instead.\n *\n * Allows an app to retrieve the most recently used tabs for this user.\n *\n * @param callback - The callback to invoke when the {@link TabInformation} object is retrieved.\n * @param tabInstanceParameters - OPTIONAL Ignored, kept for future use\n */\nexport function getMruTabInstances(\n callback: getTabInstancesCallbackFunctionType,\n tabInstanceParameters?: TabInstanceParameters,\n): void {\n ensureInitialized(runtime);\n pages.tabs.getMruTabInstances(tabInstanceParameters).then((tabInfo: TabInformation) => {\n callback(tabInfo);\n });\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.shareDeepLink pages.shareDeepLink(deepLinkParameters: DeepLinkParameters): void} instead.\n *\n * Shares a deep link that a user can use to navigate back to a specific state in this page.\n *\n * @param deepLinkParameters - ID and label for the link and fallback URL.\n */\nexport function shareDeepLink(deepLinkParameters: DeepLinkParameters): void {\n pages.shareDeepLink({\n subPageId: deepLinkParameters.subEntityId,\n subPageLabel: deepLinkParameters.subEntityLabel,\n subPageWebUrl: deepLinkParameters.subEntityWebUrl,\n });\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link app.openLink app.openLink(deepLink: string): Promise\\} instead.\n *\n * Execute deep link API.\n *\n * @param deepLink - deep link.\n */\nexport function executeDeepLink(deepLink: string, onComplete?: executeDeepLinkOnCompleteFunctionType): void {\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.sidePanel,\n FrameContexts.settings,\n FrameContexts.task,\n FrameContexts.stage,\n FrameContexts.meetingStage,\n );\n onComplete = onComplete ? onComplete : getGenericOnCompleteHandler();\n app\n .openLink(deepLink)\n .then(() => {\n onComplete(true);\n })\n .catch((err: Error) => {\n onComplete(false, err.message);\n });\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.setCurrentFrame pages.setCurrentFrame(frameInfo: FrameInfo): void} instead.\n *\n * Set the current Frame Context\n *\n * @param frameContext - FrameContext information to be set\n */\nexport function setFrameContext(frameContext: FrameContext): void {\n pages.setCurrentFrame(frameContext);\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.initializeWithFrameContext pages.initializeWithFrameContext(frameInfo: FrameInfo, callback?: callbackFunctionType, validMessageOrigins?: string[],): void} instead.\n *\n * Initialize with FrameContext\n *\n * @param frameContext - FrameContext information to be set\n * @param callback - The optional callback to be invoked be invoked after initilizing the frame context\n * @param validMessageOrigins - Optionally specify a list of cross frame message origins.\n * They must have https: protocol otherwise they will be ignored. Example: https:www.example.com\n */\nexport function initializeWithFrameContext(\n frameContext: FrameContext,\n callback?: callbackFunctionType,\n validMessageOrigins?: string[],\n): void {\n pages.initializeWithFrameContext(frameContext, callback, validMessageOrigins);\n}\n","import { ensureInitialized } from '../internal/internalAPIs';\nimport { getGenericOnCompleteHandler } from '../internal/utils';\nimport { FrameContexts } from './constants';\nimport { TabInstance } from './interfaces';\nimport { pages } from './pages';\nimport { runtime } from './runtime';\n/**\n * Navigation specific part of the SDK.\n */\n\n/** Navigation on complete handler function type */\ntype onCompleteHandlerFunctionType = (status: boolean, reason?: string) => void;\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.returnFocus pages.returnFocus(navigateForward?: boolean): void} instead.\n *\n * Return focus to the main Teams app. Will focus search bar if navigating foward and app bar if navigating back.\n *\n * @param navigateForward - Determines the direction to focus in teams app.\n */\nexport function returnFocus(navigateForward?: boolean): void {\n pages.returnFocus(navigateForward);\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.tabs.navigateToTab pages.tabs.navigateToTab(tabInstance: TabInstance): Promise\\} instead.\n *\n * Navigates the Microsoft Teams app to the specified tab instance.\n *\n * @param tabInstance - The tab instance to navigate to.\n * @param onComplete - The callback to invoke when the action is complete.\n */\nexport function navigateToTab(tabInstance: TabInstance, onComplete?: onCompleteHandlerFunctionType): void {\n ensureInitialized(runtime);\n onComplete = onComplete ? onComplete : getGenericOnCompleteHandler();\n pages.tabs\n .navigateToTab(tabInstance)\n .then(() => {\n onComplete(true);\n })\n .catch((error: Error) => {\n onComplete(false, error.message);\n });\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.navigateCrossDomain pages.navigateCrossDomain(url: string): Promise\\} instead.\n *\n * Navigates the frame to a new cross-domain URL. The domain of this URL must match at least one of the\n * valid domains specified in the validDomains block of the manifest; otherwise, an exception will be\n * thrown. This function needs to be used only when navigating the frame to a URL in a different domain\n * than the current one in a way that keeps the app informed of the change and allows the SDK to\n * continue working.\n *\n * @param url - The URL to navigate the frame to.\n * @param onComplete - The callback to invoke when the action is complete.\n */\nexport function navigateCrossDomain(url: string, onComplete?: onCompleteHandlerFunctionType): void {\n ensureInitialized(\n runtime,\n FrameContexts.content,\n FrameContexts.sidePanel,\n FrameContexts.settings,\n FrameContexts.remove,\n FrameContexts.task,\n FrameContexts.stage,\n FrameContexts.meetingStage,\n );\n onComplete = onComplete ? onComplete : getGenericOnCompleteHandler();\n pages\n .navigateCrossDomain(url)\n .then(() => {\n onComplete(true);\n })\n .catch((error: Error) => {\n onComplete(false, error.message);\n });\n}\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link pages.backStack.navigateBack pages.backStack.navigateBack(): Promise\\} instead.\n *\n * Navigates back in the Teams client.\n * See registerBackButtonHandler for more information on when it's appropriate to use this method.\n *\n * @param onComplete - The callback to invoke when the action is complete.\n */\nexport function navigateBack(onComplete?: onCompleteHandlerFunctionType): void {\n ensureInitialized(runtime);\n onComplete = onComplete ? onComplete : getGenericOnCompleteHandler();\n pages.backStack\n .navigateBack()\n .then(() => {\n onComplete(true);\n })\n .catch((error: Error) => {\n onComplete(false, error.message);\n });\n}\n","/* eslint-disable @typescript-eslint/ban-types */\n\nimport { sendMessageToParent } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { ChildAppWindow, IAppWindow } from './appWindow';\nimport { FrameContexts, TaskModuleDimension } from './constants';\nimport { dialog } from './dialog';\nimport { BotUrlDialogInfo, DialogInfo, DialogSize, TaskInfo, UrlDialogInfo } from './interfaces';\nimport { runtime } from './runtime';\n\n/**\n * @deprecated\n * As of 2.0.0, please use {@link dialog} namespace instead.\n *\n * Namespace to interact with the task module-specific part of the SDK.\n * This object is usable only on the content frame.\n * The tasks namespace will be deprecated. Please use dialog for future developments.\n */\nexport namespace tasks {\n /** Start task submit handler function type. */\n type startTaskSubmitHandlerFunctionType = (err: string, result: string | object) => void;\n\n /**\n * @deprecated\n * As of 2.8.0:\n * - For url-based dialogs, please use {@link dialog.url.open dialog.url.open(urlDialogInfo: UrlDialogInfo, submitHandler?: DialogSubmitHandler, messageFromChildHandler?: PostMessageChannel): void} .\n * - For url-based dialogs with bot interaction, please use {@link dialog.url.bot.open dialog.url.bot.open(botUrlDialogInfo: BotUrlDialogInfo, submitHandler?: DialogSubmitHandler, messageFromChildHandler?: PostMessageChannel): void}\n * - For Adaptive Card-based dialogs:\n * - In Teams, please continue to use this function until the new functions in {@link dialog.adaptiveCard} have been fully implemented. You can tell at runtime when they are implemented in Teams by checking\n * the return value of the {@link dialog.adaptiveCard.isSupported} function. This documentation line will also be removed once they have been fully implemented in Teams.\n * - In all other hosts, please use {@link dialog.adaptiveCard.open dialog.adaptiveCard.open(cardDialogInfo: CardDialogInfo, submitHandler?: DialogSubmitHandler, messageFromChildHandler?: PostMessageChannel): void}\n *\n * Allows an app to open the task module.\n *\n * @param taskInfo - An object containing the parameters of the task module\n * @param submitHandler - Handler to call when the task module is completed\n */\n export function startTask(taskInfo: TaskInfo, submitHandler?: startTaskSubmitHandlerFunctionType): IAppWindow {\n const dialogSubmitHandler = submitHandler\n ? /* eslint-disable-next-line strict-null-checks/all */ /* fix tracked by 5730662 */\n (sdkResponse: dialog.ISdkResponse) => submitHandler(sdkResponse.err, sdkResponse.result)\n : undefined;\n if (taskInfo.card === undefined && taskInfo.url === undefined) {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.sidePanel, FrameContexts.meetingStage);\n sendMessageToParent('tasks.startTask', [taskInfo as DialogInfo], submitHandler);\n } else if (taskInfo.card) {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.sidePanel, FrameContexts.meetingStage);\n sendMessageToParent('tasks.startTask', [taskInfo as DialogInfo], submitHandler);\n } else if (taskInfo.completionBotId !== undefined) {\n dialog.url.bot.open(getBotUrlDialogInfoFromTaskInfo(taskInfo), dialogSubmitHandler);\n } else {\n dialog.url.open(getUrlDialogInfoFromTaskInfo(taskInfo), dialogSubmitHandler);\n }\n return new ChildAppWindow();\n }\n\n /**\n * @deprecated\n * As of 2.0.0, please use {@link dialog.update.resize dialog.update.resize(dimensions: DialogSize): void} instead.\n *\n * Update height/width task info properties.\n *\n * @param taskInfo - An object containing width and height properties\n */\n export function updateTask(taskInfo: TaskInfo): void {\n taskInfo = getDefaultSizeIfNotProvided(taskInfo);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { width, height, ...extra } = taskInfo;\n\n if (Object.keys(extra).length) {\n throw new Error('resize requires a TaskInfo argument containing only width and height');\n }\n dialog.update.resize(taskInfo as DialogSize);\n }\n\n /**\n * @deprecated\n * As of 2.8.0, please use {@link dialog.url.submit} instead.\n *\n * Submit the task module.\n *\n * @param result - Contains the result to be sent to the bot or the app. Typically a JSON object or a serialized version of it\n * @param appIds - Valid application(s) that can receive the result of the submitted dialogs. Specifying this parameter helps prevent malicious apps from retrieving the dialog result. Multiple app IDs can be specified because a web app from a single underlying domain can power multiple apps across different environments and branding schemes.\n */\n export function submitTask(result?: string | object, appIds?: string | string[]): void {\n dialog.url.submit(result, appIds);\n }\n\n /**\n * Converts {@link TaskInfo} to {@link UrlDialogInfo}\n * @param taskInfo - TaskInfo object to convert\n * @returns - Converted UrlDialogInfo object\n */\n function getUrlDialogInfoFromTaskInfo(taskInfo: TaskInfo): UrlDialogInfo {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n const urldialogInfo: UrlDialogInfo = {\n url: taskInfo.url,\n size: {\n height: taskInfo.height ? taskInfo.height : TaskModuleDimension.Small,\n width: taskInfo.width ? taskInfo.width : TaskModuleDimension.Small,\n },\n title: taskInfo.title,\n fallbackUrl: taskInfo.fallbackUrl,\n };\n return urldialogInfo;\n }\n\n /**\n * Converts {@link TaskInfo} to {@link BotUrlDialogInfo}\n * @param taskInfo - TaskInfo object to convert\n * @returns - converted BotUrlDialogInfo object\n */\n function getBotUrlDialogInfoFromTaskInfo(taskInfo: TaskInfo): BotUrlDialogInfo {\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n const botUrldialogInfo: BotUrlDialogInfo = {\n url: taskInfo.url,\n size: {\n height: taskInfo.height ? taskInfo.height : TaskModuleDimension.Small,\n width: taskInfo.width ? taskInfo.width : TaskModuleDimension.Small,\n },\n title: taskInfo.title,\n fallbackUrl: taskInfo.fallbackUrl,\n completionBotId: taskInfo.completionBotId,\n };\n return botUrldialogInfo;\n }\n\n /**\n * Sets the height and width of the {@link TaskInfo} object to the original height and width, if initially specified,\n * otherwise uses the height and width values corresponding to {@link DialogDimension | TaskModuleDimension.Small}\n * @param taskInfo TaskInfo object from which to extract size info, if specified\n * @returns TaskInfo with height and width specified\n */\n export function getDefaultSizeIfNotProvided(taskInfo: TaskInfo): TaskInfo {\n taskInfo.height = taskInfo.height ? taskInfo.height : TaskModuleDimension.Small;\n taskInfo.width = taskInfo.width ? taskInfo.width : TaskModuleDimension.Small;\n return taskInfo;\n }\n}\n","import { sendAndHandleSdkError } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { FrameContexts } from './constants';\nimport { runtime } from './runtime';\n\n/**\n * APIs involving Live Share, a framework for building real-time collaborative apps.\n * For more information, visit https://aka.ms/teamsliveshare\n *\n * @see LiveShareHost\n */\nexport namespace liveShare {\n /**\n * @hidden\n * The meeting roles of a user.\n * Used in Live Share for its role verification feature.\n * For more information, visit https://learn.microsoft.com/microsoftteams/platform/apps-in-teams-meetings/teams-live-share-capabilities?tabs=javascript#role-verification-for-live-data-structures\n */\n export enum UserMeetingRole {\n /**\n * Guest role.\n */\n guest = 'Guest',\n /**\n * Attendee role.\n */\n attendee = 'Attendee',\n /**\n * Presenter role.\n */\n presenter = 'Presenter',\n /**\n * Organizer role.\n */\n organizer = 'Organizer',\n }\n\n /**\n * @hidden\n * State of the current Live Share session's Fluid container.\n * This is used internally by the `LiveShareClient` when joining a Live Share session.\n */\n export enum ContainerState {\n /**\n * The call to `LiveShareHost.setContainerId()` successfully created the container mapping\n * for the current Live Share session.\n */\n added = 'Added',\n\n /**\n * A container mapping for the current Live Share session already exists.\n * This indicates to Live Share that a new container does not need be created.\n */\n alreadyExists = 'AlreadyExists',\n\n /**\n * The call to `LiveShareHost.setContainerId()` failed to create the container mapping.\n * This happens when another client has already set the container ID for the session.\n */\n conflict = 'Conflict',\n\n /**\n * A container mapping for the current Live Share session does not yet exist.\n * This indicates to Live Share that a new container should be created.\n */\n notFound = 'NotFound',\n }\n\n /**\n * @hidden\n * Returned from `LiveShareHost.getFluidContainerId()` and `LiveShareHost.setFluidContainerId`.\n * This response specifies the container mapping information for the current Live Share session.\n */\n export interface IFluidContainerInfo {\n /**\n * State of the containerId mapping.\n */\n containerState: ContainerState;\n\n /**\n * ID of the container to join for the meeting. Undefined if the container hasn't been\n * created yet.\n */\n containerId: string | undefined;\n\n /**\n * If true, the local client should create the container and then save the created containers\n * ID to the mapping service.\n */\n shouldCreate: boolean;\n\n /**\n * If `containerId` is undefined and `shouldCreate` is false, the container isn't ready\n * but another client is creating it. In this case, the local client should wait the specified\n * amount of time before calling `LiveShareHost.getFluidContainerId()` again.\n */\n retryAfter: number;\n }\n\n /**\n * @hidden\n * Returned from `LiveShareHost.getNtpTime()` to specify the global timestamp for the current\n * Live Share session.\n */\n export interface INtpTimeInfo {\n /**\n * ISO 8601 formatted server time. For example: '2019-09-07T15:50-04:00'\n */\n ntpTime: string;\n\n /**\n * Server time expressed as the number of milliseconds since the ECMAScript epoch.\n */\n ntpTimeInUTC: number;\n }\n\n /**\n * @hidden\n * Returned from `LiveShareHost.getFluidTenantInfo()` to specify the Fluid service to use for the\n * current Live Share session.\n */\n export interface IFluidTenantInfo {\n /**\n * The Fluid Tenant ID Live Share should use.\n */\n tenantId: string;\n\n /**\n * The Fluid service endpoint Live Share should use.\n */\n serviceEndpoint: string;\n }\n\n /**\n * @hidden\n * Returned from `LiveShareHost.getClientInfo()` to specify the client info for a\n * particular client in a Live Share session.\n */\n export interface IClientInfo {\n /**\n * The host user's `userId` associated with a given `clientId`\n */\n userId: string;\n /**\n * User's meeting roles associated with a given `clientId`\n */\n roles: UserMeetingRole[];\n /**\n * The user's display name associated with a given `clientId`.\n * If this returns as `undefined`, the user may need to update their host client.\n */\n displayName?: string;\n }\n\n /**\n * Checks if the interactive capability is supported by the host\n * @returns boolean to represent whether the interactive capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime, FrameContexts.meetingStage, FrameContexts.sidePanel) &&\n runtime.supports.interactive\n ? true\n : false;\n }\n}\n\n/**\n * Live Share host implementation for connecting to real-time collaborative sessions.\n * Designed for use with the `LiveShareClient` class in the `@microsoft/live-share` package.\n * Learn more at https://aka.ms/teamsliveshare\n *\n * @remarks\n * The `LiveShareClient` class from Live Share uses the hidden API's to join/manage the session.\n * To create a new `LiveShareHost` instance use the static `LiveShareHost.create()` function.\n */\nexport class LiveShareHost {\n /**\n * @hidden\n * Returns the Fluid Tenant connection info for user's current context.\n */\n public getFluidTenantInfo(): Promise {\n ensureSupported();\n return new Promise((resolve) => {\n resolve(sendAndHandleSdkError('interactive.getFluidTenantInfo'));\n });\n }\n\n /**\n * @hidden\n * Returns the fluid access token for mapped container Id.\n *\n * @param containerId Fluid's container Id for the request. Undefined for new containers.\n * @returns token for connecting to Fluid's session.\n */\n public getFluidToken(containerId?: string): Promise {\n ensureSupported();\n return new Promise((resolve) => {\n // eslint-disable-next-line strict-null-checks/all\n resolve(sendAndHandleSdkError('interactive.getFluidToken', containerId));\n });\n }\n\n /**\n * @hidden\n * Returns the ID of the fluid container associated with the user's current context.\n */\n public getFluidContainerId(): Promise {\n ensureSupported();\n return new Promise((resolve) => {\n resolve(sendAndHandleSdkError('interactive.getFluidContainerId'));\n });\n }\n\n /**\n * @hidden\n * Sets the ID of the fluid container associated with the current context.\n *\n * @remarks\n * If this returns false, the client should delete the container they created and then call\n * `getFluidContainerId()` to get the ID of the container being used.\n * @param containerId ID of the fluid container the client created.\n * @returns A data structure with a `containerState` indicating the success or failure of the request.\n */\n public setFluidContainerId(containerId: string): Promise {\n ensureSupported();\n return new Promise((resolve) => {\n resolve(sendAndHandleSdkError('interactive.setFluidContainerId', containerId));\n });\n }\n\n /**\n * @hidden\n * Returns the shared clock server's current time.\n */\n public getNtpTime(): Promise {\n ensureSupported();\n return new Promise((resolve) => {\n resolve(sendAndHandleSdkError('interactive.getNtpTime'));\n });\n }\n\n /**\n * @hidden\n * Associates the fluid client ID with a set of user roles.\n *\n * @param clientId The ID for the current user's Fluid client. Changes on reconnects.\n * @returns The roles for the current user.\n */\n public registerClientId(clientId: string): Promise {\n ensureSupported();\n return new Promise((resolve) => {\n resolve(sendAndHandleSdkError('interactive.registerClientId', clientId));\n });\n }\n\n /**\n * @hidden\n * Returns the roles associated with a client ID.\n *\n * @param clientId The Client ID the message was received from.\n * @returns The roles for a given client. Returns `undefined` if the client ID hasn't been registered yet.\n */\n public getClientRoles(clientId: string): Promise {\n ensureSupported();\n return new Promise((resolve) => {\n resolve(sendAndHandleSdkError('interactive.getClientRoles', clientId));\n });\n }\n\n /**\n * @hidden\n * Returns the `IClientInfo` associated with a client ID.\n *\n * @param clientId The Client ID the message was received from.\n * @returns The info for a given client. Returns `undefined` if the client ID hasn't been registered yet.\n */\n public getClientInfo(clientId: string): Promise {\n ensureSupported();\n return new Promise((resolve) => {\n resolve(sendAndHandleSdkError('interactive.getClientInfo', clientId));\n });\n }\n\n /**\n * Factories a new `LiveShareHost` instance for use with the `LiveShareClient` class\n * in the `@microsoft/live-share` package.\n *\n * @remarks\n * `app.initialize()` must first be called before using this API.\n * This API can only be called from `meetingStage` or `sidePanel` contexts.\n */\n public static create(): LiveShareHost {\n ensureSupported();\n\n return new LiveShareHost();\n }\n}\n\nfunction ensureSupported(): void {\n if (!liveShare.isSupported()) {\n throw new Error('LiveShareHost Not supported');\n }\n}\n","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { validate } from 'uuid';\n\nimport { marketplace } from '../public';\n\n/**\n * @hidden\n * deserialize the cart data:\n * - convert url properties from string to URL\n * @param cartItems The cart items\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function deserializeCart(cartData: any): marketplace.Cart {\n try {\n cartData.cartItems = deserializeCartItems(cartData.cartItems);\n return cartData as marketplace.Cart;\n } catch (e) {\n throw new Error('Error deserializing cart');\n }\n}\n\n/**\n * @hidden\n * deserialize the cart items:\n * - convert url properties from string to URL\n * @param cartItems The cart items\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function deserializeCartItems(cartItemsData: any): marketplace.CartItem {\n return cartItemsData.map((cartItem) => {\n if (cartItem.imageURL) {\n const url = new URL(cartItem.imageURL);\n cartItem.imageURL = url;\n }\n if (cartItem.accessories) {\n cartItem.accessories = deserializeCartItems(cartItem.accessories);\n }\n return cartItem;\n }) as marketplace.CartItem;\n}\n\n/**\n * @hidden\n * serialize the cart items:\n * - make URL properties to string\n * @param cartItems The cart items\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport const serializeCartItems = (cartItems: marketplace.CartItem[]): any => {\n try {\n return cartItems.map((cartItem) => {\n const { imageURL, accessories, ...rest } = cartItem;\n const cartItemsData: any = { ...rest };\n if (imageURL) {\n cartItemsData.imageURL = imageURL.href;\n }\n if (accessories) {\n cartItemsData.accessories = serializeCartItems(accessories);\n }\n return cartItemsData;\n });\n } catch (e) {\n throw new Error('Error serializing cart items');\n }\n};\n\n/**\n * @hidden\n * Validate the cart item properties are valid\n * @param cartItems The cart items\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function validateCartItems(cartItems: marketplace.CartItem[]): void {\n if (!Array.isArray(cartItems) || cartItems.length === 0) {\n throw new Error('cartItems must be a non-empty array');\n }\n for (const cartItem of cartItems) {\n validateBasicCartItem(cartItem);\n validateAccessoryItems(cartItem.accessories);\n }\n}\n\n/**\n * @hidden\n * Validate accessories\n * @param accessoryItems The accessories to be validated\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function validateAccessoryItems(accessoryItems: marketplace.Item[] | undefined | null): void {\n if (accessoryItems === null || accessoryItems === undefined) {\n return;\n }\n if (!Array.isArray(accessoryItems) || accessoryItems.length === 0) {\n throw new Error('CartItem.accessories must be a non-empty array');\n }\n for (const accessoryItem of accessoryItems) {\n if (accessoryItem['accessories']) {\n throw new Error('Item in CartItem.accessories cannot have accessories');\n }\n validateBasicCartItem(accessoryItem);\n }\n}\n\n/**\n * @hidden\n * Validate the basic cart item properties are valid\n * @param basicCartItem The basic cart item\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function validateBasicCartItem(basicCartItem: marketplace.Item): void {\n if (!basicCartItem.id) {\n throw new Error('cartItem.id must not be empty');\n }\n if (!basicCartItem.name) {\n throw new Error('cartItem.name must not be empty');\n }\n validatePrice(basicCartItem.price);\n validateQuantity(basicCartItem.quantity);\n}\n\n/**\n * @hidden\n * Validate the id is valid\n * @param id A uuid string\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function validateUuid(id: string | undefined | null): void {\n if (id === undefined || id === null) {\n return;\n }\n if (!id) {\n throw new Error('id must not be empty');\n }\n if (validate(id) === false) {\n throw new Error('id must be a valid UUID');\n }\n}\n\n/**\n * @hidden\n * Validate the cart item properties are valid\n * @param price The price to be validated\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function validatePrice(price: number): void {\n if (typeof price !== 'number' || price < 0) {\n throw new Error(`price ${price} must be a number not less than 0`);\n }\n if (parseFloat(price.toFixed(3)) !== price) {\n throw new Error(`price ${price} must have at most 3 decimal places`);\n }\n}\n\n/**\n * @hidden\n * Validate quantity\n * @param quantity The quantity to be validated\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function validateQuantity(quantity: number): void {\n if (typeof quantity !== 'number' || quantity <= 0 || parseInt(quantity.toString()) !== quantity) {\n throw new Error(`quantity ${quantity} must be an integer greater than 0`);\n }\n}\n\n/**\n * @hidden\n * Validate cart status\n * @param cartStatus The cartStatus to be validated\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport function validateCartStatus(cartStatus: marketplace.CartStatus): void {\n if (!Object.values(marketplace.CartStatus).includes(cartStatus)) {\n throw new Error(`cartStatus ${cartStatus} is not valid`);\n }\n}\n","import { sendAndHandleSdkError } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport {\n deserializeCart,\n serializeCartItems,\n validateCartItems,\n validateCartStatus,\n validateUuid,\n} from '../internal/marketplaceUtils';\nimport { errorNotSupportedOnPlatform, FrameContexts } from './constants';\nimport { runtime } from './runtime';\n\n/**\n * @hidden\n * Namespace for an app to support a checkout flow by interacting with the marketplace cart in the host.\n * @beta\n */\nexport namespace marketplace {\n /**\n * @hidden\n * the version of the current cart interface\n * which is forced to send to the host in the calls.\n * @internal\n * Limited to Microsoft-internal use\n * @beta\n */\n export const cartVersion: CartVersion = {\n /**\n * @hidden\n * Represents the major version of the current cart interface,\n * it is increased when incompatible interface update happens.\n */\n majorVersion: 1,\n /**\n * @hidden\n * The minor version of the current cart interface, which is compatible\n * with the previous minor version in the same major version.\n */\n minorVersion: 1,\n };\n\n /**\n * @hidden\n * Represents the cart object for the app checkout flow.\n * @beta\n */\n export interface Cart {\n /**\n * @hidden\n * Version of the cart.\n */\n readonly version: CartVersion;\n /**\n * @hidden\n * The uuid of the cart.\n */\n readonly id: string;\n /**\n * @hidden\n * The cart info.\n */\n readonly cartInfo: CartInfo;\n /**\n * @hidden\n * The cart items.\n */\n readonly cartItems: CartItem[];\n }\n\n /**\n * @hidden\n * Version of the cart that is used by the app.\n * @internal\n * Limited to Microsoft-internal use\n * @beta\n */\n interface CartVersion {\n /**\n * @hidden\n * Represents the major version of a cart, it\n * not compatible with the previous major version.\n */\n readonly majorVersion: number;\n /**\n * @hidden\n * The minor version of a cart, which is compatible\n * with the previous minor version in the same major version.\n */\n readonly minorVersion: number;\n }\n\n /**\n * @hidden\n * Represents the cart information\n * @beta\n */\n interface CartInfo {\n /**\n * @hidden\n * The country market where the products are selling.\n * Should be country code in ISO 3166-1 alpha-2 format, e.g. CA for Canada.\n * https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n */\n readonly market: string;\n /**\n * @hidden\n * The identifier to tell the cart is checked out by admin or end user.\n */\n readonly intent: Intent;\n /**\n * @hidden\n * Locale the app should render for the user\n * Should be a BCP 47 language tag, e.g. en-US ([primary tag]-[ISO 3166-1 alpha-2 code]).\n * https://en.wikipedia.org/wiki/IETF_language_tag\n */\n readonly locale: string;\n /**\n * @hidden\n * The status of the cart.\n */\n readonly status: CartStatus;\n /**\n * @hidden\n * ISO 4217 currency code for the cart item price, e.g. USD for US Dollar.\n * https://en.wikipedia.org/wiki/ISO_4217\n */\n readonly currency: string;\n /**\n * @hidden\n * ISO 8601 timestamp string in UTC, indicates when the cart is created.\n * e.g. 2023-06-19T22:06:59Z\n * https://en.wikipedia.org/wiki/ISO_8601\n */\n readonly createdAt: string;\n /**\n * @hidden\n * ISO 8601 timestamp string in UTC, indicates when the cart is updated.\n * e.g. 2023-06-19T22:06:59Z\n * https://en.wikipedia.org/wiki/ISO_8601\n */\n readonly updatedAt: string;\n }\n\n /**\n * @hidden\n * Represents the basic cart item information.\n * @beta\n */\n export interface Item {\n /**\n * @hidden\n * The id of the cart item.\n */\n readonly id: string;\n /**\n * @hidden\n * The display name of the cart item.\n */\n readonly name: string;\n /**\n * @hidden\n * The quantity of the cart item.\n */\n readonly quantity: number;\n /**\n * @hidden\n * The price of the single cart item.\n */\n readonly price: number;\n /**\n * @hidden\n * The thumbnail imageURL of the cart item.\n */\n readonly imageURL?: URL;\n }\n\n /**\n * @hidden\n * Represents the cart item that could have accessories\n * @beta\n */\n export interface CartItem extends Item {\n /**\n * @hidden\n * Accessories to the item if existing.\n */\n readonly accessories?: Item[];\n /**\n * @hidden\n * The thumbnail imageURL of the cart item.\n */\n readonly imageURL?: URL;\n }\n\n /**\n * @hidden\n * Represents the persona creating the cart.\n * @beta\n */\n export enum Intent {\n /**\n * @hidden\n * The cart is created by admin of an organization in Teams Admin Center.\n */\n TACAdminUser = 'TACAdminUser',\n /**\n * @hidden\n * The cart is created by admin of an organization in Teams.\n */\n TeamsAdminUser = 'TeamsAdminUser',\n /**\n * @hidden\n * The cart is created by end user of an organization in Teams.\n */\n TeamsEndUser = 'TeamsEndUser',\n }\n\n /**\n * @hidden\n * Represents the status of the cart.\n * @beta\n */\n export enum CartStatus {\n /**\n * @hidden\n * Cart is created but not checked out yet.\n */\n Open = 'Open',\n /**\n * @hidden\n * Cart is checked out but not completed yet.\n */\n Processing = 'Processing',\n /**\n * @hidden\n * Indicate checking out is completed and the host should\n * return a new cart in the next getCart call.\n */\n Processed = 'Processed',\n /**\n * @hidden\n * Indicate checking out process is manually cancelled by the user\n */\n Closed = 'Closed',\n /**\n * @hidden\n * Indicate checking out is failed and the host should\n * return a new cart in the next getCart call.\n */\n Error = 'Error',\n }\n /**\n * @hidden\n * Represents the parameters to update the cart items.\n * @beta\n */\n export interface AddOrUpdateCartItemsParams {\n /**\n * @hidden\n * The uuid of the cart to be updated, target on the cart\n * being checked out if cartId is not provided.\n */\n cartId?: string;\n /**\n * @hidden\n * A list of cart items object, for each item,\n * if item id exists in the cart, overwrite the item price and quantity,\n * otherwise add new items to cart.\n */\n cartItems: CartItem[];\n }\n /**\n * @hidden\n * Represents the parameters to remove the cart items.\n * @beta\n */\n export interface RemoveCartItemsParams {\n /**\n * @hidden\n * The uuid of the cart to be updated, target on the cart\n * being checked out if cartId is not provided.\n */\n cartId?: string;\n /**\n * @hidden\n * A list of cart id, delete the cart item accordingly.\n */\n cartItemIds: string[];\n }\n /**\n * @hidden\n * Represents the parameters to update the cart status.\n * @beta\n */\n export interface UpdateCartStatusParams {\n /**\n * @hidden\n * The uuid of the cart to be updated, target on the cart\n * being checked out if cartId is not provided.\n */\n cartId?: string;\n /**\n * @hidden\n * Status of the cart.\n */\n cartStatus: CartStatus;\n /**\n * @hidden\n * Extra info to the status.\n */\n statusInfo?: string;\n }\n\n /**\n * @hidden\n * Get the cart object owned by the host to checkout.\n * @returns A promise of the cart object in the cartVersion.\n * @beta\n */\n export function getCart(): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n return sendAndHandleSdkError('marketplace.getCart', cartVersion).then(deserializeCart);\n }\n /**\n * @hidden\n * Add or update cart items in the cart owned by the host.\n * @param addOrUpdateCartItemsParams Represents the parameters to update the cart items.\n * @returns A promise of the updated cart object in the cartVersion.\n * @beta\n */\n export function addOrUpdateCartItems(addOrUpdateCartItemsParams: AddOrUpdateCartItemsParams): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n if (!addOrUpdateCartItemsParams) {\n throw new Error('addOrUpdateCartItemsParams must be provided');\n }\n validateUuid(addOrUpdateCartItemsParams?.cartId);\n validateCartItems(addOrUpdateCartItemsParams?.cartItems);\n return sendAndHandleSdkError('marketplace.addOrUpdateCartItems', {\n ...addOrUpdateCartItemsParams,\n cartItems: serializeCartItems(addOrUpdateCartItemsParams.cartItems),\n cartVersion,\n }).then(deserializeCart);\n }\n\n /**\n * @hidden\n * Remove cart items from the cart owned by the host.\n * @param removeCartItemsParams The parameters to remove the cart items.\n * @returns A promise of the updated cart object in the cartVersion.\n * @beta\n */\n export function removeCartItems(removeCartItemsParams: RemoveCartItemsParams): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n if (!removeCartItemsParams) {\n throw new Error('removeCartItemsParams must be provided');\n }\n validateUuid(removeCartItemsParams?.cartId);\n if (!Array.isArray(removeCartItemsParams?.cartItemIds) || removeCartItemsParams?.cartItemIds.length === 0) {\n throw new Error('cartItemIds must be a non-empty array');\n }\n return sendAndHandleSdkError('marketplace.removeCartItems', {\n ...removeCartItemsParams,\n cartVersion,\n }).then(deserializeCart);\n }\n /**\n * @hidden\n * Update cart status in the cart owned by the host.\n * @param updateCartStatusParams The parameters to update the cart status.\n * @returns A promise of the updated cart object in the cartVersion.\n * @beta\n */\n export function updateCartStatus(updateCartStatusParams: UpdateCartStatusParams): Promise {\n ensureInitialized(runtime, FrameContexts.content, FrameContexts.task);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n if (!updateCartStatusParams) {\n throw new Error('updateCartStatusParams must be provided');\n }\n validateUuid(updateCartStatusParams?.cartId);\n validateCartStatus(updateCartStatusParams?.cartStatus);\n return sendAndHandleSdkError('marketplace.updateCartStatus', {\n ...updateCartStatusParams,\n cartVersion,\n }).then(deserializeCart);\n }\n /**\n * @hidden\n * Checks if the marketplace capability is supported by the host.\n * @returns Boolean to represent whether the marketplace capability is supported.\n * @throws Error if {@linkcode app.initialize} has not successfully completed.\n * @beta\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.marketplace ? true : false;\n }\n}\n","import { sendMessageToParent } from '../internal/communication';\nimport { registerHandler } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { ErrorCode, FileOpenPreference, FrameContexts, SdkError } from '../public';\nimport { runtime } from '../public/runtime';\n\n/**\n * @hidden\n *\n * Namespace to interact with the files specific part of the SDK.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport namespace files {\n /**\n * @hidden\n *\n * Cloud storage providers registered with Microsoft Teams\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export enum CloudStorageProvider {\n Dropbox = 'DROPBOX',\n Box = 'BOX',\n Sharefile = 'SHAREFILE',\n GoogleDrive = 'GOOGLEDRIVE',\n Egnyte = 'EGNYTE',\n SharePoint = 'SharePoint',\n }\n interface IWopiThumbnail {\n size: number;\n url: string;\n }\n\n interface IWopiService {\n name: string;\n description: string;\n thumbnails: IWopiThumbnail[];\n }\n\n /**\n * @hidden\n *\n * External third-party cloud storages providers interface\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface IExternalProvider extends IWopiService {\n providerType: CloudStorageProviderType;\n providerCode: CloudStorageProvider;\n }\n\n /**\n * @hidden\n *\n * Cloud storage provider type enums\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export enum CloudStorageProviderType {\n Sharepoint = 0,\n WopiIntegration,\n Google,\n OneDrive,\n Recent,\n Aggregate,\n FileSystem, // Used for Downloaded files on Desktop\n Search, // Used by P2P files with OSearch\n AllFiles, // Used by P2P files with AllFiles API\n SharedWithMe,\n }\n\n /**\n * @hidden\n *\n * Cloud storage folder interface\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface CloudStorageFolder {\n /**\n * @hidden\n * ID of the cloud storage folder\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n id: string;\n /**\n * @hidden\n * Display Name/Title of the cloud storage folder\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n title: string;\n /**\n * @hidden\n * ID of the cloud storage folder in the provider\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n folderId: string;\n /**\n * @hidden\n * Type of the cloud storage folder provider integration\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n providerType: CloudStorageProviderType;\n /**\n * @hidden\n * Code of the supported cloud storage folder provider\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n providerCode: CloudStorageProvider;\n /**\n * @hidden\n * Display name of the owner of the cloud storage folder provider\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n ownerDisplayName: string;\n /**\n * @hidden\n * Sharepoint specific siteURL of the folder\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n siteUrl?: string;\n /**\n * @hidden\n * Sharepoint specific serverRelativeUrl of the folder\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n serverRelativeUrl?: string;\n /**\n * @hidden\n * Sharepoint specific libraryType of the folder\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n libraryType?: string;\n /**\n * @hidden\n * Sharepoint specific accessType of the folder\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n accessType?: string;\n }\n\n /**\n * @hidden\n *\n * Cloud storage item interface\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface CloudStorageFolderItem {\n /**\n * @hidden\n * ID of the item in the provider\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n id: string;\n /**\n * @hidden\n * Display name/title\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n title: string;\n /**\n * @hidden\n * Key to differentiate files and subdirectory\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n isSubdirectory: boolean;\n /**\n * @hidden\n * File extension\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n type: string;\n /**\n * @hidden\n * Last modifed time of the item\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n lastModifiedTime: string;\n /**\n * @hidden\n * Display size of the items in bytes\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n size: number;\n /**\n * @hidden\n * URL of the file\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n objectUrl: string;\n /**\n * @hidden\n * Temporary access token for the item\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n accessToken?: string;\n }\n\n /**\n * @hidden\n *\n * Files entity user interface\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface IFilesEntityUser {\n /**\n * @hidden\n * User name.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n displayName: string;\n /**\n * @hidden\n * User email.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n email: string;\n\n /**\n * @hidden\n * User MRI.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n mri: string;\n }\n\n /**\n * @hidden\n *\n * Special Document Library enum\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export enum SpecialDocumentLibraryType {\n ClassMaterials = 'classMaterials',\n }\n\n /**\n * @hidden\n *\n * Document Library Access enum\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export enum DocumentLibraryAccessType {\n Readonly = 'readonly',\n }\n\n /**\n * @hidden\n *\n * SharePoint file interface\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface ISharePointFile {\n siteId?: string;\n siteUrl: string;\n objectId: string;\n objectUrl: string;\n openInWindowFileUrl: string;\n title: string;\n isFolder: boolean;\n serverRelativeUrl: string;\n lastModifiedByUser: IFilesEntityUser;\n lastModifiedTime: string;\n sentByUser: IFilesEntityUser;\n createdByUser: IFilesEntityUser;\n createdTime: string;\n size: number;\n type: string;\n spItemUrl?: string;\n libraryType?: SpecialDocumentLibraryType;\n accessType?: DocumentLibraryAccessType;\n etag?: string;\n remoteItem?: string;\n listUrl?: string;\n }\n\n /**\n * @hidden\n *\n * Download status enum\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export enum FileDownloadStatus {\n Downloaded = 'Downloaded',\n Downloading = 'Downloading',\n Failed = 'Failed',\n }\n\n /**\n * @hidden\n *\n * Download Files interface\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface IFileItem {\n /**\n * @hidden\n * ID of the file metadata\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n objectId?: string;\n /**\n * @hidden\n * Path of the file\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n path?: string;\n /**\n * @hidden\n * Size of the file in bytes\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n sizeInBytes?: number;\n /**\n * @hidden\n * Download status\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n status?: FileDownloadStatus;\n /**\n * @hidden\n * Download timestamp\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n timestamp: Date;\n /**\n * @hidden\n * File name\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n title: string;\n /**\n * @hidden\n * Type of file i.e. the file extension.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n extension: string;\n }\n\n /**\n * @hidden\n * Object used to represent a file\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface File extends Blob {\n /**\n * A number that represents the number of milliseconds since the Unix epoch\n */\n lastModified: number;\n /**\n * Name of the file\n */\n name: string;\n /**\n * A string containing the path of the file relative to the ancestor directory the user selected\n */\n webkitRelativePath?: string;\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Actions specific to 3P cloud storage provider file and / or account\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export enum CloudStorageProviderFileAction {\n Download = 'DOWNLOAD',\n Upload = 'UPLOAD',\n Delete = 'DELETE',\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Interface for 3P cloud storage provider request content type\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface CloudStorageProviderRequest {\n content: T;\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Base interface for 3P cloud storage provider action request content\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface CloudStorageProviderContent {\n providerCode: CloudStorageProvider;\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Interface representing 3P cloud storage provider add new file action.\n * The file extension represents type of file e.g. docx, pptx etc. and need not be prefixed with dot(.)\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface CloudStorageProviderNewFileContent extends CloudStorageProviderContent {\n newFileName: string;\n newFileExtension: string;\n destinationFolder: CloudStorageFolderItem | ISharePointFile;\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Interface representing 3P cloud storage provider rename existing file action\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface CloudStorageProviderRenameFileContent extends CloudStorageProviderContent {\n existingFile: CloudStorageFolderItem | ISharePointFile;\n newFile: CloudStorageFolderItem | ISharePointFile;\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Interface representing 3P cloud storage provider delete existing file(s) action\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface CloudStorageProviderDeleteFileContent extends CloudStorageProviderContent {\n itemList: CloudStorageFolderItem[] | ISharePointFile[];\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Interface representing 3P cloud storage provider download existing file(s) action\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface CloudStorageProviderDownloadFileContent extends CloudStorageProviderContent {\n itemList: CloudStorageFolderItem[] | ISharePointFile[];\n }\n\n /**\n * @hidden\n * Hide from docs\n * @beta\n *\n * Interface representing 3P cloud storage provider upload existing file(s) action\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface CloudStorageProviderUploadFileContent extends CloudStorageProviderContent {\n itemList: File[];\n destinationFolder: CloudStorageFolderItem | ISharePointFile;\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Gets a list of cloud storage folders added to the channel\n * @param channelId - ID of the channel whose cloud storage folders should be retrieved\n * @param callback - Callback that will be triggered post folders load\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getCloudStorageFolders(\n channelId: string,\n callback: (error: SdkError, folders: CloudStorageFolder[]) => void,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!channelId || channelId.length === 0) {\n throw new Error('[files.getCloudStorageFolders] channelId name cannot be null or empty');\n }\n if (!callback) {\n throw new Error('[files.getCloudStorageFolders] Callback cannot be null');\n }\n\n sendMessageToParent('files.getCloudStorageFolders', [channelId], callback);\n }\n\n /**\n * @hidden\n * Hide from docs\n * ------\n * Initiates the add cloud storage folder flow\n *\n * @param channelId - ID of the channel to add cloud storage folder\n * @param callback - Callback that will be triggered post add folder flow is compelete\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function addCloudStorageFolder(\n channelId: string,\n callback: (error: SdkError, isFolderAdded: boolean, folders: CloudStorageFolder[]) => void,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!channelId || channelId.length === 0) {\n throw new Error('[files.addCloudStorageFolder] channelId name cannot be null or empty');\n }\n if (!callback) {\n throw new Error('[files.addCloudStorageFolder] Callback cannot be null');\n }\n\n sendMessageToParent('files.addCloudStorageFolder', [channelId], callback);\n }\n\n /**\n * @hidden\n * Hide from docs\n * ------\n *\n * Deletes a cloud storage folder from channel\n *\n * @param channelId - ID of the channel where folder is to be deleted\n * @param folderToDelete - cloud storage folder to be deleted\n * @param callback - Callback that will be triggered post delete\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function deleteCloudStorageFolder(\n channelId: string,\n folderToDelete: CloudStorageFolder,\n callback: (error: SdkError, isFolderDeleted: boolean) => void,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!channelId) {\n throw new Error('[files.deleteCloudStorageFolder] channelId name cannot be null or empty');\n }\n if (!folderToDelete) {\n throw new Error('[files.deleteCloudStorageFolder] folderToDelete cannot be null or empty');\n }\n if (!callback) {\n throw new Error('[files.deleteCloudStorageFolder] Callback cannot be null');\n }\n\n sendMessageToParent('files.deleteCloudStorageFolder', [channelId, folderToDelete], callback);\n }\n\n /**\n * @hidden\n * Hide from docs\n * ------\n *\n * Fetches the contents of a Cloud storage folder (CloudStorageFolder) / sub directory\n *\n * @param folder - Cloud storage folder (CloudStorageFolder) / sub directory (CloudStorageFolderItem)\n * @param providerCode - Code of the cloud storage folder provider\n * @param callback - Callback that will be triggered post contents are loaded\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getCloudStorageFolderContents(\n folder: CloudStorageFolder | CloudStorageFolderItem,\n providerCode: CloudStorageProvider,\n callback: (error: SdkError, items: CloudStorageFolderItem[]) => void,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!folder || !providerCode) {\n throw new Error('[files.getCloudStorageFolderContents] folder/providerCode name cannot be null or empty');\n }\n\n if (!callback) {\n throw new Error('[files.getCloudStorageFolderContents] Callback cannot be null');\n }\n\n if ('isSubdirectory' in folder && !folder.isSubdirectory) {\n throw new Error('[files.getCloudStorageFolderContents] provided folder is not a subDirectory');\n }\n\n sendMessageToParent('files.getCloudStorageFolderContents', [folder, providerCode], callback);\n }\n\n /**\n * @hidden\n * Hide from docs\n * ------\n *\n * Open a cloud storage file in Teams\n *\n * @param file - cloud storage file that should be opened\n * @param providerCode - Code of the cloud storage folder provider\n * @param fileOpenPreference - Whether file should be opened in web/inline\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function openCloudStorageFile(\n file: CloudStorageFolderItem,\n providerCode: CloudStorageProvider,\n fileOpenPreference?: FileOpenPreference.Web | FileOpenPreference.Inline,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!file || !providerCode) {\n throw new Error('[files.openCloudStorageFile] file/providerCode cannot be null or empty');\n }\n\n if (file.isSubdirectory) {\n throw new Error('[files.openCloudStorageFile] provided file is a subDirectory');\n }\n\n sendMessageToParent('files.openCloudStorageFile', [file, providerCode, fileOpenPreference]);\n }\n\n /**\n * @hidden\n * Allow 1st party apps to call this function to get the external\n * third party cloud storage accounts that the tenant supports\n * @param excludeAddedProviders: return a list of support third party\n * cloud storages that hasn't been added yet.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getExternalProviders(\n excludeAddedProviders = false,\n callback: (error: SdkError, providers: IExternalProvider[]) => void,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!callback) {\n throw new Error('[files.getExternalProviders] Callback cannot be null');\n }\n\n sendMessageToParent('files.getExternalProviders', [excludeAddedProviders], callback);\n }\n\n /**\n * @hidden\n * Allow 1st party apps to call this function to move files\n * among SharePoint and third party cloud storages.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function copyMoveFiles(\n selectedFiles: CloudStorageFolderItem[] | ISharePointFile[],\n providerCode: CloudStorageProvider,\n destinationFolder: CloudStorageFolderItem | ISharePointFile,\n destinationProviderCode: CloudStorageProvider,\n isMove = false,\n callback: (error?: SdkError) => void,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n if (!selectedFiles || selectedFiles.length === 0) {\n throw new Error('[files.copyMoveFiles] selectedFiles cannot be null or empty');\n }\n if (!providerCode) {\n throw new Error('[files.copyMoveFiles] providerCode cannot be null or empty');\n }\n if (!destinationFolder) {\n throw new Error('[files.copyMoveFiles] destinationFolder cannot be null or empty');\n }\n if (!destinationProviderCode) {\n throw new Error('[files.copyMoveFiles] destinationProviderCode cannot be null or empty');\n }\n if (!callback) {\n throw new Error('[files.copyMoveFiles] callback cannot be null');\n }\n sendMessageToParent(\n 'files.copyMoveFiles',\n [selectedFiles, providerCode, destinationFolder, destinationProviderCode, isMove],\n callback,\n );\n }\n\n /**\n * @hidden\n * Hide from docs\n * ------\n *\n * Gets list of downloads for current user\n * @param callback Callback that will be triggered post downloads load\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getFileDownloads(callback: (error?: SdkError, files?: IFileItem[]) => void): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!callback) {\n throw new Error('[files.getFileDownloads] Callback cannot be null');\n }\n\n sendMessageToParent('files.getFileDownloads', [], callback);\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Open download preference folder if fileObjectId value is undefined else open folder containing the file with id fileObjectId\n * @param fileObjectId - Id of the file whose containing folder should be opened\n * @param callback Callback that will be triggered post open download folder/path\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function openDownloadFolder(fileObjectId: string = undefined, callback: (error?: SdkError) => void): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!callback) {\n throw new Error('[files.openDownloadFolder] Callback cannot be null');\n }\n\n sendMessageToParent('files.openDownloadFolder', [fileObjectId], callback);\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Initiates add 3P cloud storage provider flow, where a pop up window opens for user to select required\n * 3P provider from the configured policy supported 3P provider list, following which user authentication\n * for selected 3P provider is performed on success of which the selected 3P provider support is added for user\n * @beta\n *\n * @param callback Callback that will be triggered post add 3P cloud storage provider action.\n * If the error is encountered (and hence passed back), no provider value is sent back.\n * For success scenarios, error value will be passed as null and a valid provider value is sent.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function addCloudStorageProvider(callback: (error?: SdkError, provider?: CloudStorageProvider) => void): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!callback) {\n throw getSdkError(ErrorCode.INVALID_ARGUMENTS, '[files.addCloudStorageProvider] callback cannot be null');\n }\n\n sendMessageToParent('files.addCloudStorageProvider', [], callback);\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Initiates signout of 3P cloud storage provider flow, which will remove the selected\n * 3P cloud storage provider from the list of added providers. No other user input and / or action\n * is required except the 3P cloud storage provider to signout from\n *\n * @param logoutRequest 3P cloud storage provider remove action request content\n * @param callback Callback that will be triggered post signout of 3P cloud storage provider action\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function removeCloudStorageProvider(\n logoutRequest: CloudStorageProviderRequest,\n callback: (error?: SdkError) => void,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!callback) {\n throw getSdkError(ErrorCode.INVALID_ARGUMENTS, '[files.removeCloudStorageProvider] callback cannot be null');\n }\n\n if (!(logoutRequest && logoutRequest.content)) {\n throw getSdkError(\n ErrorCode.INVALID_ARGUMENTS,\n '[files.removeCloudStorageProvider] 3P cloud storage provider request content is missing',\n );\n }\n\n sendMessageToParent('files.removeCloudStorageProvider', [logoutRequest], callback);\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Initiates the add 3P cloud storage file flow, which will add a new file for the given 3P provider\n *\n * @param addNewFileRequest 3P cloud storage provider add action request content\n * @param callback Callback that will be triggered post adding a new file flow is finished\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function addCloudStorageProviderFile(\n addNewFileRequest: CloudStorageProviderRequest,\n callback: (error?: SdkError, actionStatus?: boolean) => void,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!callback) {\n throw getSdkError(ErrorCode.INVALID_ARGUMENTS, '[files.addCloudStorageProviderFile] callback cannot be null');\n }\n\n if (!(addNewFileRequest && addNewFileRequest.content)) {\n throw getSdkError(\n ErrorCode.INVALID_ARGUMENTS,\n '[files.addCloudStorageProviderFile] 3P cloud storage provider request content is missing',\n );\n }\n\n sendMessageToParent('files.addCloudStorageProviderFile', [addNewFileRequest], callback);\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Initiates the rename 3P cloud storage file flow, which will rename an existing file in the given 3P provider\n *\n * @param renameFileRequest 3P cloud storage provider rename action request content\n * @param callback Callback that will be triggered post renaming an existing file flow is finished\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function renameCloudStorageProviderFile(\n renameFileRequest: CloudStorageProviderRequest,\n callback: (error?: SdkError, actionStatus?: boolean) => void,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!callback) {\n throw getSdkError(ErrorCode.INVALID_ARGUMENTS, '[files.renameCloudStorageProviderFile] callback cannot be null');\n }\n\n if (!(renameFileRequest && renameFileRequest.content)) {\n throw getSdkError(\n ErrorCode.INVALID_ARGUMENTS,\n '[files.renameCloudStorageProviderFile] 3P cloud storage provider request content is missing',\n );\n }\n\n sendMessageToParent('files.renameCloudStorageProviderFile', [renameFileRequest], callback);\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Initiates the delete 3P cloud storage file(s) / folder (folder has to be empty) flow,\n * which will delete existing file(s) / folder from the given 3P provider\n *\n * @param deleteFileRequest 3P cloud storage provider delete action request content\n * @param callback Callback that will be triggered post deleting existing file(s) flow is finished\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function deleteCloudStorageProviderFile(\n deleteFileRequest: CloudStorageProviderRequest,\n callback: (error?: SdkError, actionStatus?: boolean) => void,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!callback) {\n throw getSdkError(ErrorCode.INVALID_ARGUMENTS, '[files.deleteCloudStorageProviderFile] callback cannot be null');\n }\n\n if (\n !(\n deleteFileRequest &&\n deleteFileRequest.content &&\n deleteFileRequest.content.itemList &&\n deleteFileRequest.content.itemList.length > 0\n )\n ) {\n throw getSdkError(\n ErrorCode.INVALID_ARGUMENTS,\n '[files.deleteCloudStorageProviderFile] 3P cloud storage provider request content details are missing',\n );\n }\n\n sendMessageToParent('files.deleteCloudStorageProviderFile', [deleteFileRequest], callback);\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Initiates the download 3P cloud storage file(s) flow,\n * which will download existing file(s) from the given 3P provider in the teams client side without sharing any file info in the callback\n *\n * @param downloadFileRequest 3P cloud storage provider download file(s) action request content\n * @param callback Callback that will be triggered post downloading existing file(s) flow is finished\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function downloadCloudStorageProviderFile(\n downloadFileRequest: CloudStorageProviderRequest,\n callback: (error?: SdkError, actionStatus?: boolean) => void,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!callback) {\n throw getSdkError(\n ErrorCode.INVALID_ARGUMENTS,\n '[files.downloadCloudStorageProviderFile] callback cannot be null',\n );\n }\n\n if (\n !(\n downloadFileRequest &&\n downloadFileRequest.content &&\n downloadFileRequest.content.itemList &&\n downloadFileRequest.content.itemList.length > 0\n )\n ) {\n throw getSdkError(\n ErrorCode.INVALID_ARGUMENTS,\n '[files.downloadCloudStorageProviderFile] 3P cloud storage provider request content details are missing',\n );\n }\n\n sendMessageToParent('files.downloadCloudStorageProviderFile', [downloadFileRequest], callback);\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Initiates the upload 3P cloud storage file(s) flow, which will upload file(s) to the given 3P provider\n * @beta\n *\n * @param uploadFileRequest 3P cloud storage provider upload file(s) action request content\n * @param callback Callback that will be triggered post uploading file(s) flow is finished\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function uploadCloudStorageProviderFile(\n uploadFileRequest: CloudStorageProviderRequest,\n callback: (error?: SdkError, actionStatus?: boolean) => void,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!callback) {\n throw getSdkError(ErrorCode.INVALID_ARGUMENTS, '[files.uploadCloudStorageProviderFile] callback cannot be null');\n }\n\n if (\n !(\n uploadFileRequest &&\n uploadFileRequest.content &&\n uploadFileRequest.content.itemList &&\n uploadFileRequest.content.itemList.length > 0\n )\n ) {\n throw getSdkError(\n ErrorCode.INVALID_ARGUMENTS,\n '[files.uploadCloudStorageProviderFile] 3P cloud storage provider request content details are missing',\n );\n }\n\n if (!uploadFileRequest.content.destinationFolder) {\n throw getSdkError(\n ErrorCode.INVALID_ARGUMENTS,\n '[files.uploadCloudStorageProviderFile] Invalid destination folder details',\n );\n }\n\n sendMessageToParent('files.uploadCloudStorageProviderFile', [uploadFileRequest], callback);\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Register a handler to be called when a user's 3P cloud storage provider list changes i.e.\n * post adding / removing a 3P provider, list is updated\n *\n * @param handler - When 3P cloud storage provider list is updated this handler is called\n *\n * @internal Limited to Microsoft-internal use\n */\n export function registerCloudStorageProviderListChangeHandler(handler: () => void): void {\n ensureInitialized(runtime);\n\n if (!handler) {\n throw new Error('[registerCloudStorageProviderListChangeHandler] Handler cannot be null');\n }\n\n registerHandler('files.cloudStorageProviderListChange', handler);\n }\n\n /**\n * @hidden\n * Hide from docs\n *\n * Register a handler to be called when a user's 3P cloud storage provider content changes i.e.\n * when file(s) is/are added / renamed / deleted / uploaded, the list of files is updated\n *\n * @param handler - When 3P cloud storage provider content is updated this handler is called\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function registerCloudStorageProviderContentChangeHandler(handler: () => void): void {\n ensureInitialized(runtime);\n\n if (!handler) {\n throw new Error('[registerCloudStorageProviderContentChangeHandler] Handler cannot be null');\n }\n\n registerHandler('files.cloudStorageProviderContentChange', handler);\n }\n\n function getSdkError(errorCode: ErrorCode, message: string): SdkError {\n const sdkError: SdkError = {\n errorCode: errorCode,\n message: message,\n };\n return sdkError;\n }\n}\n","import { sendAndHandleSdkError } from '../internal/communication';\nimport { registerHandler } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform } from '../public/constants';\nimport { runtime } from '../public/runtime';\n\n/**\n * @hidden\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport namespace meetingRoom {\n /**\n * @hidden\n *\n * Data structure to represent a meeting room.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface MeetingRoomInfo {\n /**\n * @hidden\n * Endpoint id of the meeting room.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n endpointId: string;\n /**\n * @hidden\n * Device name of the meeting room.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n deviceName: string;\n /**\n * @hidden\n * Client type of the meeting room.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n clientType: string;\n /**\n * @hidden\n * Client version of the meeting room.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n clientVersion: string;\n }\n\n /**\n * @hidden\n * Type of Media control capabilities of a meeting room.\n */\n type MediaControls = 'toggleMute' | 'toggleCamera' | 'toggleCaptions' | 'volume';\n\n /**\n * @hidden\n * Types of Stage Layout control capabilities of a meeting room.\n */\n\n type StageLayoutControls =\n | 'showVideoGallery'\n | 'showContent'\n | 'showVideoGalleryAndContent'\n | 'showLargeGallery'\n | 'showTogether';\n\n /**\n * @hidden\n * Types of Meeting Control capabilities of a meeting room.\n */\n\n type MeetingControls = 'leaveMeeting';\n\n /**\n * @hidden\n * Types of Stage Layout State of a meeting room.\n */\n\n type StageLayoutStates = 'Gallery' | 'Content + gallery' | 'Content' | 'Large gallery' | 'Together mode';\n\n /**\n * @hidden\n * Data structure to represent capabilities of a meeting room.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface MeetingRoomCapability {\n /**\n * @hidden\n * Media control capabilities, value can be \"toggleMute\", \"toggleCamera\", \"toggleCaptions\", \"volume\".\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n mediaControls: MediaControls[];\n /**\n * @hidden\n * Main stage layout control capabilities, value can be \"showVideoGallery\", \"showContent\", \"showVideoGalleryAndContent\", \"showLargeGallery\", \"showTogether\".\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n stageLayoutControls: StageLayoutControls[];\n /**\n * @hidden\n * Meeting control capabilities, value can be \"leaveMeeting\".\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n meetingControls: MeetingControls[];\n }\n\n /**\n * @hidden\n * Data structure to represent states of a meeting room.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface MeetingRoomState {\n /**\n * @hidden\n * Current mute state, true: mute, false: unmute.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n toggleMute: boolean;\n /**\n * @hidden\n * Current camera state, true: camera on, false: camera off.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n toggleCamera: boolean;\n /**\n * @hidden\n * Current captions state, true: captions on, false: captions off.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n toggleCaptions: boolean;\n /**\n * @hidden\n * Current main stage layout state, value can be one of \"Gallery\", \"Content + gallery\", \"Content\", \"Large gallery\" and \"Together mode\".\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n stageLayout: StageLayoutStates;\n /**\n * @hidden\n * Current leaveMeeting state, true: leave, false: no-op.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n leaveMeeting: boolean;\n }\n\n /**\n * @hidden\n * Fetch the meeting room info that paired with current client.\n *\n * @returns Promise resolved with meeting room info or rejected with SdkError value\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getPairedMeetingRoomInfo(): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n resolve(sendAndHandleSdkError('meetingRoom.getPairedMeetingRoomInfo'));\n });\n }\n\n /**\n * @hidden\n * Send a command to paired meeting room.\n *\n * @param commandName The command name.\n * @returns Promise resolved upon completion or rejected with SdkError value\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function sendCommandToPairedMeetingRoom(commandName: string): Promise {\n return new Promise((resolve) => {\n if (!commandName || commandName.length == 0) {\n throw new Error('[meetingRoom.sendCommandToPairedMeetingRoom] Command name cannot be null or empty');\n }\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n resolve(sendAndHandleSdkError('meetingRoom.sendCommandToPairedMeetingRoom', commandName));\n });\n }\n\n /**\n * @hidden\n * Registers a handler for meeting room capabilities update.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler The handler to invoke when the capabilities of meeting room update.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function registerMeetingRoomCapabilitiesUpdateHandler(\n handler: (capabilities: MeetingRoomCapability) => void,\n ): void {\n if (!handler) {\n throw new Error('[meetingRoom.registerMeetingRoomCapabilitiesUpdateHandler] Handler cannot be null');\n }\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n registerHandler('meetingRoom.meetingRoomCapabilitiesUpdate', (capabilities: MeetingRoomCapability) => {\n ensureInitialized(runtime);\n handler(capabilities);\n });\n }\n\n /**\n * @hidden\n * Hide from docs\n * Registers a handler for meeting room states update.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler The handler to invoke when the states of meeting room update.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function registerMeetingRoomStatesUpdateHandler(handler: (states: MeetingRoomState) => void): void {\n if (!handler) {\n throw new Error('[meetingRoom.registerMeetingRoomStatesUpdateHandler] Handler cannot be null');\n }\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n registerHandler('meetingRoom.meetingRoomStatesUpdate', (states: MeetingRoomState) => {\n ensureInitialized(runtime);\n handler(states);\n });\n }\n\n /**\n * @hidden\n *\n * Checks if the meetingRoom capability is supported by the host\n * @returns boolean to represent whether the meetingRoom capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.meetingRoom ? true : false;\n }\n}\n","import { sendMessageToParent } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform, FrameContexts } from '../public/constants';\nimport { runtime } from '../public/runtime';\nimport { ShowNotificationParameters } from './interfaces';\n\nexport namespace notifications {\n /**\n * @hidden\n * display notification API.\n *\n * @param message - Notification message.\n * @param notificationType - Notification type\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function showNotification(showNotificationParameters: ShowNotificationParameters): void {\n ensureInitialized(runtime, FrameContexts.content);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n sendMessageToParent('notifications.showNotification', [showNotificationParameters]);\n }\n\n /**\n * @hidden\n *\n * Checks if the notifications capability is supported by the host\n * @returns boolean to represent whether the notifications capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.notifications ? true : false;\n }\n}\n","import { sendMessageToParent } from '../internal/communication';\nimport { registerHandler } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform, FrameContexts } from '../public/constants';\nimport { SdkError } from '../public/interfaces';\nimport { runtime } from '../public/runtime';\n\n/**\n * @hidden\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport namespace remoteCamera {\n /**\n * @hidden\n * Data structure to represent patricipant details needed to request control of camera.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface Participant {\n /**\n * @hidden\n * Id of participant.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n id: string;\n /**\n * @hidden\n * Display name of participant.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n displayName?: string;\n /**\n * @hidden\n * Active indicates whether the participant's device is actively being controlled.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n active?: boolean;\n }\n\n /**\n * @hidden\n * Enum used to indicate possible camera control commands.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export enum ControlCommand {\n Reset = 'Reset',\n ZoomIn = 'ZoomIn',\n ZoomOut = 'ZoomOut',\n PanLeft = 'PanLeft',\n PanRight = 'PanRight',\n TiltUp = 'TiltUp',\n TiltDown = 'TiltDown',\n }\n\n /**\n * @hidden\n * Data structure to indicate the current state of the device.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface DeviceState {\n /**\n * @hidden\n * All operation are available to apply.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n available: boolean;\n /**\n * @hidden\n * Either camera doesnt support to get state or It unable to apply command.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n error: boolean;\n /**\n * @hidden\n * Reset max out or already applied. Client Disable Reset.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n reset: boolean;\n /**\n * @hidden\n * ZoomIn maxed out.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n zoomIn: boolean;\n /**\n * @hidden\n * ZoomOut maxed out.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n zoomOut: boolean;\n /**\n * @hidden\n * PanLeft reached max left.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n panLeft: boolean;\n /**\n * @hidden\n * PanRight reached max right.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n panRight: boolean;\n /**\n * @hidden\n * TiltUp reached top.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n tiltUp: boolean;\n /**\n * @hidden\n * TiltDown reached bottom.\n *\n * @internal Limited to Microsoft-internal use\n */\n tiltDown: boolean;\n }\n\n /**\n * @hidden\n * Enum used to indicate the reason for the error.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export enum ErrorReason {\n CommandResetError,\n CommandZoomInError,\n CommandZoomOutError,\n CommandPanLeftError,\n CommandPanRightError,\n CommandTiltUpError,\n CommandTiltDownError,\n SendDataError,\n }\n\n /**\n * @hidden\n * Data structure to indicate the status of the current session.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface SessionStatus {\n /**\n * @hidden\n * Whether the far-end user is controlling a device.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n inControl: boolean;\n /**\n * @hidden\n * Reason the control session was terminated.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n terminatedReason?: SessionTerminatedReason;\n }\n\n /**\n * @hidden\n * Enum used to indicate the reason the session was terminated.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export enum SessionTerminatedReason {\n None,\n ControlDenied,\n ControlNoResponse,\n ControlBusy,\n AckTimeout,\n ControlTerminated,\n ControllerTerminated,\n DataChannelError,\n ControllerCancelled,\n ControlDisabled,\n ControlTerminatedToAllowOtherController,\n }\n\n /**\n * @hidden\n * Fetch a list of the participants with controllable-cameras in a meeting.\n *\n * @param callback - Callback contains 2 parameters, error and participants.\n * error can either contain an error of type SdkError, incase of an error, or null when fetch is successful\n * participants can either contain an array of Participant objects, incase of a successful fetch or null when it fails\n * participants: object that contains an array of participants with controllable-cameras\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getCapableParticipants(\n callback: (error: SdkError | null, participants: Participant[] | null) => void,\n ): void {\n if (!callback) {\n throw new Error('[remoteCamera.getCapableParticipants] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('remoteCamera.getCapableParticipants', callback);\n }\n\n /**\n * @hidden\n * Request control of a participant's camera.\n *\n * @param participant - Participant specifies the participant to send the request for camera control.\n * @param callback - Callback contains 2 parameters, error and requestResponse.\n * error can either contain an error of type SdkError, incase of an error, or null when fetch is successful\n * requestResponse can either contain the true/false value, incase of a successful request or null when it fails\n * requestResponse: True means request was accepted and false means request was denied\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function requestControl(\n participant: Participant,\n callback: (error: SdkError | null, requestResponse: boolean | null) => void,\n ): void {\n if (!participant) {\n throw new Error('[remoteCamera.requestControl] Participant cannot be null');\n }\n if (!callback) {\n throw new Error('[remoteCamera.requestControl] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('remoteCamera.requestControl', [participant], callback);\n }\n\n /**\n * @hidden\n * Send control command to the participant's camera.\n *\n * @param ControlCommand - ControlCommand specifies the command for controling the camera.\n * @param callback - Callback to invoke when the command response returns.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function sendControlCommand(ControlCommand: ControlCommand, callback: (error: SdkError | null) => void): void {\n if (!ControlCommand) {\n throw new Error('[remoteCamera.sendControlCommand] ControlCommand cannot be null');\n }\n if (!callback) {\n throw new Error('[remoteCamera.sendControlCommand] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('remoteCamera.sendControlCommand', [ControlCommand], callback);\n }\n\n /**\n * @hidden\n * Terminate the remote session\n *\n * @param callback - Callback to invoke when the command response returns.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function terminateSession(callback: (error: SdkError | null) => void): void {\n if (!callback) {\n throw new Error('[remoteCamera.terminateSession] Callback cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('remoteCamera.terminateSession', callback);\n }\n\n /**\n * @hidden\n * Registers a handler for change in participants with controllable-cameras.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler - The handler to invoke when the list of participants with controllable-cameras changes.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function registerOnCapableParticipantsChangeHandler(\n handler: (participantChange: Participant[]) => void,\n ): void {\n if (!handler) {\n throw new Error('[remoteCamera.registerOnCapableParticipantsChangeHandler] Handler cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n registerHandler('remoteCamera.capableParticipantsChange', handler);\n }\n\n /**\n * @hidden\n * Registers a handler for error.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler - The handler to invoke when there is an error from the camera handler.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function registerOnErrorHandler(handler: (error: ErrorReason) => void): void {\n if (!handler) {\n throw new Error('[remoteCamera.registerOnErrorHandler] Handler cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n registerHandler('remoteCamera.handlerError', handler);\n }\n\n /**\n * @hidden\n * Registers a handler for device state change.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler - The handler to invoke when the controlled device changes state.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function registerOnDeviceStateChangeHandler(handler: (deviceStateChange: DeviceState) => void): void {\n if (!handler) {\n throw new Error('[remoteCamera.registerOnDeviceStateChangeHandler] Handler cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n registerHandler('remoteCamera.deviceStateChange', handler);\n }\n\n /**\n * @hidden\n * Registers a handler for session status change.\n * Only one handler can be registered at a time. A subsequent registration replaces an existing registration.\n *\n * @param handler - The handler to invoke when the current session status changes.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function registerOnSessionStatusChangeHandler(handler: (sessionStatusChange: SessionStatus) => void): void {\n if (!handler) {\n throw new Error('[remoteCamera.registerOnSessionStatusChangeHandler] Handler cannot be null');\n }\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n registerHandler('remoteCamera.sessionStatusChange', handler);\n }\n\n /**\n * @hidden\n *\n * Checks if the remoteCamera capability is supported by the host\n * @returns boolean to represent whether the remoteCamera capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.remoteCamera ? true : false;\n }\n}\n","import { sendMessageToParent } from '../internal/communication';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { FrameContexts, SdkError } from '../public';\nimport { errorNotSupportedOnPlatform } from '../public/constants';\nimport { runtime } from '../public/runtime';\n/**\n * @hidden\n * Namespace to interact with the application entities specific part of the SDK.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport namespace appEntity {\n /**\n * @hidden\n *\n * Information on an app entity\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface AppEntity {\n /**\n * @hidden\n * ID of the application\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n appId: string;\n\n /**\n * @hidden\n * URL for the application's icon\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n appIconUrl: string;\n\n /**\n * @hidden\n * Content URL for the app entity\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n contentUrl: string;\n\n /**\n * @hidden\n * The display name for the app entity\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n displayName: string;\n\n /**\n * @hidden\n * Website URL for the app entity. It is meant to be opened by the user in a browser.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n websiteUrl: string;\n }\n\n /**\n * @hidden\n * Hide from docs\n * --------\n * Open the Tab Gallery and retrieve the app entity\n * @param threadId ID of the thread where the app entity will be created\n * @param categories A list of application categories that will be displayed in the opened tab gallery\n * @param subEntityId An object that will be made available to the application being configured\n * through the Context's subEntityId field.\n * @param callback Callback that will be triggered once the app entity information is available.\n * The callback takes two arguments: an SdkError in case something happened (i.e.\n * no permissions to execute the API) and the app entity configuration, if available\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function selectAppEntity(\n threadId: string,\n categories: string[],\n subEntityId: string,\n callback: (sdkError?: SdkError, appEntity?: AppEntity) => void,\n ): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n if (!threadId || threadId.length == 0) {\n throw new Error('[appEntity.selectAppEntity] threadId name cannot be null or empty');\n }\n\n if (!callback) {\n throw new Error('[appEntity.selectAppEntity] Callback cannot be null');\n }\n\n sendMessageToParent('appEntity.selectAppEntity', [threadId, categories, subEntityId], callback);\n }\n\n /**\n * @hidden\n *\n * Checks if the appEntity capability is supported by the host\n * @returns boolean to represent whether the appEntity capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.appEntity ? true : false;\n }\n}\n","import { sendAndUnwrap, sendMessageToParent } from '../internal/communication';\nimport { getUserJoinedTeamsSupportedAndroidClientVersion } from '../internal/constants';\nimport { GlobalVars } from '../internal/globalVars';\nimport { ensureInitialized, isCurrentSDKVersionAtLeast } from '../internal/internalAPIs';\nimport { errorNotSupportedOnPlatform, FrameContexts, HostClientType } from '../public/constants';\nimport { ErrorCode, SdkError } from '../public/interfaces';\nimport { runtime } from '../public/runtime';\nimport { TeamInstanceParameters, UserJoinedTeamsInformation } from './interfaces';\n\n/**\n * @hidden\n * Namespace to interact with the `teams` specific part of the SDK.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport namespace teams {\n export enum ChannelType {\n Regular = 0,\n Private = 1,\n Shared = 2,\n }\n\n /**\n * @hidden\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface ChannelInfo {\n siteUrl: string;\n objectId: string;\n folderRelativeUrl: string;\n displayName: string;\n channelType: ChannelType;\n }\n\n /**\n * @hidden\n * Get a list of channels belong to a Team\n *\n * @param groupId - a team's objectId\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getTeamChannels(groupId: string, callback: (error: SdkError, channels: ChannelInfo[]) => void): void {\n ensureInitialized(runtime, FrameContexts.content);\n\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n if (!groupId) {\n throw new Error('[teams.getTeamChannels] groupId cannot be null or empty');\n }\n\n if (!callback) {\n throw new Error('[teams.getTeamChannels] Callback cannot be null');\n }\n\n sendMessageToParent('teams.getTeamChannels', [groupId], callback);\n }\n\n /**\n * @hidden\n * Allow 1st party apps to call this function when they receive migrated errors to inform the Hub/Host to refresh the siteurl\n * when site admin renames siteurl.\n *\n * @param threadId - ID of the thread where the app entity will be created; if threadId is not\n * provided, the threadId from route params will be used.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function refreshSiteUrl(threadId: string, callback: (error: SdkError) => void): void {\n ensureInitialized(runtime);\n\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n if (!threadId) {\n throw new Error('[teams.refreshSiteUrl] threadId cannot be null or empty');\n }\n\n if (!callback) {\n throw new Error('[teams.refreshSiteUrl] Callback cannot be null');\n }\n\n sendMessageToParent('teams.refreshSiteUrl', [threadId], callback);\n }\n\n /**\n * @hidden\n *\n * Checks if teams capability is supported by the host\n * @returns boolean to represent whether the teams capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.teams ? true : false;\n }\n\n /**\n * @hidden\n * @internal\n * Limited to Microsoft-internal use\n */\n export namespace fullTrust {\n /**\n * @hidden\n * @internal\n * Limited to Microsoft-internal use\n */\n export namespace joinedTeams {\n /**\n * @hidden\n * Allows an app to retrieve information of all user joined teams\n *\n * @param teamInstanceParameters - Optional flags that specify whether to scope call to favorite teams\n * @returns Promise that resolves with information about the user joined teams or rejects with an error when the operation has completed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getUserJoinedTeams(\n teamInstanceParameters?: TeamInstanceParameters,\n ): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n if (\n (GlobalVars.hostClientType === HostClientType.android ||\n GlobalVars.hostClientType === HostClientType.teamsRoomsAndroid ||\n GlobalVars.hostClientType === HostClientType.teamsPhones ||\n GlobalVars.hostClientType === HostClientType.teamsDisplays) &&\n !isCurrentSDKVersionAtLeast(getUserJoinedTeamsSupportedAndroidClientVersion)\n ) {\n const oldPlatformError: SdkError = { errorCode: ErrorCode.OLD_PLATFORM };\n throw new Error(JSON.stringify(oldPlatformError));\n }\n\n /* eslint-disable-next-line strict-null-checks/all */ /* Fix tracked by 5730662 */\n resolve(sendAndUnwrap('getUserJoinedTeams', teamInstanceParameters));\n });\n }\n /**\n * @hidden\n *\n * Checks if teams.fullTrust.joinedTeams capability is supported by the host\n * @returns boolean to represent whether the teams.fullTrust.joinedTeams capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.teams\n ? runtime.supports.teams.fullTrust\n ? runtime.supports.teams.fullTrust.joinedTeams\n ? true\n : false\n : false\n : false;\n }\n }\n\n /**\n * @hidden\n * Allows an app to get the configuration setting value\n *\n * @param key - The key for the config setting\n * @returns Promise that resolves with the value for the provided configuration setting or rejects with an error when the operation has completed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function getConfigSetting(key: string): Promise {\n return new Promise((resolve) => {\n ensureInitialized(runtime);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n resolve(sendAndUnwrap('getConfigSetting', key));\n });\n }\n\n /**\n * @hidden\n *\n * Checks if teams.fullTrust capability is supported by the host\n * @returns boolean to represent whether the teams.fullTrust capability is supported\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function isSupported(): boolean {\n return ensureInitialized(runtime) && runtime.supports.teams\n ? runtime.supports.teams.fullTrust\n ? true\n : false\n : false;\n }\n }\n}\n","import { sendMessageToParent } from '../internal/communication';\nimport { registerHandler } from '../internal/handlers';\nimport { ensureInitialized } from '../internal/internalAPIs';\nimport { VideoPerformanceMonitor } from '../internal/videoPerformanceMonitor';\nimport {\n createEffectParameterChangeCallback,\n DefaultVideoEffectCallBack as VideoEffectCallBack,\n processMediaStream,\n processMediaStreamWithMetadata,\n} from '../internal/videoUtils';\nimport { errorNotSupportedOnPlatform, FrameContexts } from '../public/constants';\nimport { runtime } from '../public/runtime';\nimport { video } from '../public/video';\nimport { inServerSideRenderingEnvironment } from './inServerSideRenderingEnvironment';\n\n/**\n * @hidden\n * Extended video API\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\nexport namespace videoEx {\n const videoPerformanceMonitor = inServerSideRenderingEnvironment()\n ? undefined\n : new VideoPerformanceMonitor(sendMessageToParent);\n /**\n * @hidden\n * Error level when notifying errors to the host, the host will decide what to do acording to the error level.\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export enum ErrorLevel {\n Fatal = 'fatal',\n Warn = 'warn',\n }\n /**\n * @hidden\n * Video frame configuration supplied to the host to customize the generated video frame parameters\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface VideoFrameConfig extends video.VideoFrameConfig {\n /**\n * @hidden\n * Flag to indicate use camera stream to synthesize video frame or not.\n * Default value is true.\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n requireCameraStream?: boolean;\n /**\n * @hidden\n * Machine learning model to run in the host to do audio inference for you\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n audioInferenceModel?: ArrayBuffer;\n }\n\n /**\n * @hidden\n * Represents a video frame\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface VideoBufferData extends video.VideoBufferData {\n /**\n * @hidden\n * The model output if you passed in an {@linkcode VideoFrameConfig.audioInferenceModel}\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n audioInferenceResult?: Uint8Array;\n }\n\n /**\n * Old video frame data structure, almost identical to the {@link VideoBufferData} except `videoFrameBuffer` is named as `data`.\n * Old host like the old Teams passes this data to the SDK. It will be deprecated in the future.\n */\n type LegacyVideoBufferData = Omit & {\n /**\n * Video frame buffer\n */\n data: Uint8ClampedArray;\n };\n\n /**\n * @hidden\n * The callback will be called on every frame when running on the supported host.\n * We require the frame rate of the video to be at least 22fps for 720p, thus the callback should process a frame timely.\n * The video app should call `notifyVideoFrameProcessed` to notify a successfully processed video frame.\n * The video app should call `notifyError` to notify a failure. When the failures accumulate to a certain number(determined by the host), the host will see the app is \"frozen\" and give the user the option to close the app.\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export type VideoBufferHandler = (\n videoBufferData: VideoBufferData,\n notifyVideoFrameProcessed: () => void,\n notifyError: (errorMessage: string) => void,\n ) => void;\n\n /**\n * @hidden\n * Video frame data extracted from the media stream. More properties may be added in the future.\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export type VideoFrameData = video.VideoFrameData & {\n /**\n * @hidden\n * The model output if you passed in an {@linkcode VideoFrameConfig.audioInferenceModel}\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n audioInferenceResult?: Uint8Array;\n };\n\n /**\n * @hidden\n * The callback will be called on every frame when running on the supported host.\n * We require the frame rate of the video to be at least 22fps for 720p, thus the callback should process a frame timely.\n * The video app should resolve the promise to notify a successfully processed video frame.\n * The video app should reject the promise to notify a failure. When the failures accumulate to a certain number(determined by the host), the host will see the app is \"frozen\" and give the user the option to close the app.\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export type VideoFrameHandler = (receivedVideoFrame: VideoFrameData) => Promise;\n\n /**\n * @hidden\n * @beta\n * Callbacks and configuration supplied to the host to process the video frames.\n * @internal\n * Limited to Microsoft-internal use\n */\n export type RegisterForVideoFrameParameters = {\n /**\n * Callback function to process the video frames extracted from a media stream.\n */\n videoFrameHandler: VideoFrameHandler;\n /**\n * Callback function to process the video frames shared by the host.\n */\n videoBufferHandler: VideoBufferHandler;\n /**\n * Video frame configuration supplied to the host to customize the generated video frame parameters, like format\n */\n config: VideoFrameConfig;\n };\n\n /**\n * @hidden\n * Register to process video frames\n * @beta\n *\n * @param parameters - Callbacks and configuration to process the video frames. A host may support either {@link VideoFrameHandler} or {@link VideoBufferHandler}, but not both.\n * To ensure the video effect works on all supported hosts, the video app must provide both {@link VideoFrameHandler} and {@link VideoBufferHandler}.\n * The host will choose the appropriate callback based on the host's capability.\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function registerForVideoFrame(parameters: RegisterForVideoFrameParameters): void {\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n if (!parameters.videoFrameHandler || !parameters.videoBufferHandler) {\n throw new Error('Both videoFrameHandler and videoBufferHandler must be provided');\n }\n\n if (ensureInitialized(runtime, FrameContexts.sidePanel)) {\n registerHandler(\n 'video.setFrameProcessTimeLimit',\n (timeLimit: number) => videoPerformanceMonitor?.setFrameProcessTimeLimit(timeLimit),\n false,\n );\n if (runtime.supports.video?.mediaStream) {\n registerHandler(\n 'video.startVideoExtensibilityVideoStream',\n async (mediaStreamInfo: { streamId: string; metadataInTexture?: boolean }) => {\n const { streamId, metadataInTexture } = mediaStreamInfo;\n const generator = metadataInTexture\n ? await processMediaStreamWithMetadata(\n streamId,\n parameters.videoFrameHandler,\n notifyError,\n videoPerformanceMonitor,\n )\n : await processMediaStream(streamId, parameters.videoFrameHandler, notifyError, videoPerformanceMonitor);\n // register the video track with processed frames back to the stream\n !inServerSideRenderingEnvironment() &&\n window['chrome']?.webview?.registerTextureStream(streamId, generator);\n },\n false,\n );\n sendMessageToParent('video.mediaStream.registerForVideoFrame', [parameters.config]);\n } else if (runtime.supports.video?.sharedFrame) {\n registerHandler(\n 'video.newVideoFrame',\n (videoBufferData: VideoBufferData | LegacyVideoBufferData) => {\n if (videoBufferData) {\n videoPerformanceMonitor?.reportStartFrameProcessing(videoBufferData.width, videoBufferData.height);\n const timestamp = videoBufferData.timestamp;\n parameters.videoBufferHandler(\n normalizedVideoBufferData(videoBufferData),\n () => {\n videoPerformanceMonitor?.reportFrameProcessed();\n notifyVideoFrameProcessed(timestamp);\n },\n notifyError,\n );\n }\n },\n false,\n );\n sendMessageToParent('video.registerForVideoFrame', [parameters.config]);\n } else {\n // should not happen if isSupported() is true\n throw errorNotSupportedOnPlatform;\n }\n videoPerformanceMonitor?.startMonitorSlowFrameProcessing();\n }\n }\n\n function normalizedVideoBufferData(videoBufferData: VideoBufferData | LegacyVideoBufferData): VideoBufferData {\n videoBufferData['videoFrameBuffer'] = videoBufferData['videoFrameBuffer'] || videoBufferData['data'];\n delete videoBufferData['data'];\n return videoBufferData as VideoBufferData;\n }\n\n /**\n * @hidden\n * Video extension should call this to notify host that the current selected effect parameter changed.\n * If it's pre-meeting, host will call videoEffectCallback immediately then use the videoEffect.\n * If it's the in-meeting scenario, we will call videoEffectCallback when apply button clicked.\n * @beta\n * @param effectChangeType - the effect change type.\n * @param effectId - Newly selected effect id. {@linkcode VideoEffectCallBack}\n * @param effectParam Variant for the newly selected effect. {@linkcode VideoEffectCallBack}\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function notifySelectedVideoEffectChanged(\n effectChangeType: video.EffectChangeType,\n effectId: string | undefined,\n effectParam?: string,\n ): void {\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('video.videoEffectChanged', [effectChangeType, effectId, effectParam]);\n }\n\n /**\n * @hidden\n * Register the video effect callback, host uses this to notify the video extension the new video effect will by applied\n * @beta\n * @param callback - The VideoEffectCallback to invoke when registerForVideoEffect has completed\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function registerForVideoEffect(callback: VideoEffectCallBack): void {\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n\n registerHandler(\n 'video.effectParameterChange',\n createEffectParameterChangeCallback(callback, videoPerformanceMonitor),\n false,\n );\n sendMessageToParent('video.registerForVideoEffect');\n }\n\n /**\n * @hidden\n * Personalized video effect\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export interface PersonalizedEffect {\n /**\n * Personalized effect id\n */\n id: string;\n /**\n * Display name\n */\n name: string;\n /**\n * Effect type defined by app\n */\n type: string;\n /**\n * Data URI of the thumbnail image content encoded in ASCII format using the base64 scheme\n */\n thumbnail: string;\n }\n\n /**\n * @hidden\n * Send personalized effects to Teams client\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function updatePersonalizedEffects(effects: PersonalizedEffect[]): void {\n ensureInitialized(runtime, FrameContexts.sidePanel);\n if (!video.isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n sendMessageToParent('video.personalizedEffectsChanged', [effects]);\n }\n\n /**\n * @hidden\n *\n * Checks if video capability is supported by the host\n * @beta\n *\n * @throws Error if {@linkcode app.initialize} has not successfully completed\n *\n * @returns boolean to represent whether the video capability is supported\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function isSupported(): boolean {\n ensureInitialized(runtime);\n return video.isSupported();\n }\n\n /**\n * @hidden\n * Sending notification to host finished the video frame processing, now host can render this video frame\n * or pass the video frame to next one in video pipeline\n * @beta\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n function notifyVideoFrameProcessed(timestamp?: number): void {\n sendMessageToParent('video.videoFrameProcessed', [timestamp]);\n }\n\n /**\n * @hidden\n * Sending error notification to host\n * @beta\n * @param errorMessage - The error message that will be sent to the host\n * @param errorLevel - The error level that will be sent to the host\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n function notifyError(errorMessage: string, errorLevel: ErrorLevel = ErrorLevel.Warn): void {\n sendMessageToParent('video.notifyError', [errorMessage, errorLevel]);\n }\n\n /**\n * @hidden\n * Sending fatal error notification to host. Call this function only when your app meets fatal error and can't continue.\n * The host will stop the video pipeline and terminate this session, and optionally, show an error message to the user.\n * @beta\n * @param errorMessage - The error message that will be sent to the host\n *\n * @internal\n * Limited to Microsoft-internal use\n */\n export function notifyFatalError(errorMessage: string): void {\n ensureInitialized(runtime);\n if (!video.isSupported()) {\n throw errorNotSupportedOnPlatform;\n }\n notifyError(errorMessage, ErrorLevel.Fatal);\n }\n}\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n var protocol = parseProtocol(fullPath);\n\n if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n var fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url: url,\n data: data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n var axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nmodule.exports = AxiosError;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'beforeRedirect': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n var isObjectPayload = utils.isObject(data);\n var contentType = headers && headers['Content-Type'];\n\n var isFileList;\n\n if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n var _FormData = this.env && this.env.FormData;\n return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n } else if (isObjectPayload || contentType === 'application/json') {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: require('./env/FormData')\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","module.exports = {\n \"version\": \"0.27.2\"\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n // eslint-disable-next-line no-param-reassign\n formData = formData || new FormData();\n\n var stack = [];\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n function build(data, parentKey) {\n if (utils.isPlainObject(data) || utils.isArray(data)) {\n if (stack.indexOf(data) !== -1) {\n throw Error('Circular reference detected in ' + parentKey);\n }\n\n stack.push(data);\n\n utils.forEach(data, function each(value, key) {\n if (utils.isUndefined(value)) return;\n var fullKey = parentKey ? parentKey + '.' + key : key;\n var arr;\n\n if (value && !parentKey && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n // eslint-disable-next-line func-names\n arr.forEach(function(el) {\n !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n });\n return;\n }\n }\n\n build(value, fullKey);\n });\n\n stack.pop();\n } else {\n formData.append(parentKey, convertValue(data));\n }\n }\n\n build(obj);\n\n return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n // eslint-disable-next-line func-names\n return function(thing) {\n var str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n type = type.toLowerCase();\n return function isKindOf(thing) {\n return kindOf(thing) === type;\n };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n var pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n var props;\n var i;\n var prop;\n var merged = {};\n\n destObj = destObj || {};\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (!merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = Object.getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n var lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n if (!thing) return null;\n var i = thing.length;\n if (isUndefined(i)) return null;\n var arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n // eslint-disable-next-line func-names\n return function(thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM,\n inherits: inherits,\n toFlatObject: toFlatObject,\n kindOf: kindOf,\n kindOfTest: kindOfTest,\n endsWith: endsWith,\n toArray: toArray,\n isTypedArray: isTypedArray,\n isFileList: isFileList\n};\n","import getPrototypeOf from \"./getPrototypeOf.js\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}","import superPropBase from \"./superPropBase.js\";\nexport default function _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n}","/*!\n * Chart.js v3.7.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n let ticking = false;\n let args = [];\n return function(...rest) {\n args = updateArgs(rest);\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n}\nfunction debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\nconst uid = (function() {\n let id = 0;\n return function() {\n return id++;\n };\n}());\nfunction isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n return true;\n }\n return false;\n}\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : value / dimension;\nconst toDimension = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\nfunction _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\nfunction clone$1(source) {\n if (isArray(source)) {\n return source.map(clone$1);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for (; k < klen; ++k) {\n target[keys[k]] = clone$1(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n merge(tval, sval, options);\n } else {\n target[key] = clone$1(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n for (let i = 0; i < ilen; ++i) {\n source = sources[i];\n if (!isObject(source)) {\n continue;\n }\n const keys = Object.keys(source);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, source, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone$1(sval);\n }\n}\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\nconst emptyString = '';\nconst dot = '.';\nfunction indexOfDotOrLength(key, start) {\n const idx = key.indexOf(dot, start);\n return idx === -1 ? key.length : idx;\n}\nfunction resolveObjectKey(obj, key) {\n if (key === emptyString) {\n return obj;\n }\n let pos = 0;\n let idx = indexOfDotOrLength(key, pos);\n while (obj && idx > pos) {\n obj = obj[key.substr(pos, idx - pos)];\n pos = idx + 1;\n idx = indexOfDotOrLength(key, pos);\n }\n return obj;\n}\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\nfunction _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b) => a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < (-0.5 * PI)) {\n angle += TAU;\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n linear: t => t,\n easeInQuad: t => t * t,\n easeOutQuad: t => -t * (t - 2),\n easeInOutQuad: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n easeInCubic: t => t * t * t,\n easeOutCubic: t => (t -= 1) * t * t + 1,\n easeInOutCubic: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: t => t * t * t * t,\n easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n easeInOutQuart: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: t => t * t * t * t * t,\n easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n easeInOutQuint: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n easeOutSine: t => Math.sin(t * HALF_PI),\n easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: t => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic(t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack(t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack(t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n easeOutBounce(t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n easeInOutBounce: t => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.1.9\n * https://github.com/kurkle/color#readme\n * (c) 2020 Jukka Kurkela\n * Released under the MIT License\n */\nconst map = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = '0123456789ABCDEF';\nconst h1 = (b) => hex[b & 0xF];\nconst h2 = (b) => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = (b) => (((b & 0xF0) >> 4) === (b & 0xF));\nfunction isShort(v) {\n\treturn eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\n}\nfunction hexParse(str) {\n\tvar len = str.length;\n\tvar ret;\n\tif (str[0] === '#') {\n\t\tif (len === 4 || len === 5) {\n\t\t\tret = {\n\t\t\t\tr: 255 & map[str[1]] * 17,\n\t\t\t\tg: 255 & map[str[2]] * 17,\n\t\t\t\tb: 255 & map[str[3]] * 17,\n\t\t\t\ta: len === 5 ? map[str[4]] * 17 : 255\n\t\t\t};\n\t\t} else if (len === 7 || len === 9) {\n\t\t\tret = {\n\t\t\t\tr: map[str[1]] << 4 | map[str[2]],\n\t\t\t\tg: map[str[3]] << 4 | map[str[4]],\n\t\t\t\tb: map[str[5]] << 4 | map[str[6]],\n\t\t\t\ta: len === 9 ? (map[str[7]] << 4 | map[str[8]]) : 255\n\t\t\t};\n\t\t}\n\t}\n\treturn ret;\n}\nfunction hexString(v) {\n\tvar f = isShort(v) ? h1 : h2;\n\treturn v\n\t\t? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '')\n\t\t: v;\n}\nfunction round(v) {\n\treturn v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n\treturn lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n\treturn lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n\treturn lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n\treturn lim(round(v * 100), 0, 100);\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n\tconst m = RGB_RE.exec(str);\n\tlet a = 255;\n\tlet r, g, b;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[7] !== r) {\n\t\tconst v = +m[7];\n\t\ta = 255 & (m[8] ? p2b(v) : v * 255);\n\t}\n\tr = +m[1];\n\tg = +m[3];\n\tb = +m[5];\n\tr = 255 & (m[2] ? p2b(r) : r);\n\tg = 255 & (m[4] ? p2b(g) : g);\n\tb = 255 & (m[6] ? p2b(b) : b);\n\treturn {\n\t\tr: r,\n\t\tg: g,\n\t\tb: b,\n\t\ta: a\n\t};\n}\nfunction rgbString(v) {\n\treturn v && (\n\t\tv.a < 255\n\t\t\t? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n\t\t\t: `rgb(${v.r}, ${v.g}, ${v.b})`\n\t);\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n\tconst a = s * Math.min(l, 1 - l);\n\tconst f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n\treturn [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n\tconst f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n\treturn [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n\tconst rgb = hsl2rgbn(h, 1, 0.5);\n\tlet i;\n\tif (w + b > 1) {\n\t\ti = 1 / (w + b);\n\t\tw *= i;\n\t\tb *= i;\n\t}\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] *= 1 - w - b;\n\t\trgb[i] += w;\n\t}\n\treturn rgb;\n}\nfunction rgb2hsl(v) {\n\tconst range = 255;\n\tconst r = v.r / range;\n\tconst g = v.g / range;\n\tconst b = v.b / range;\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tconst l = (max + min) / 2;\n\tlet h, s, d;\n\tif (max !== min) {\n\t\td = max - min;\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\th = max === r\n\t\t\t? ((g - b) / d) + (g < b ? 6 : 0)\n\t\t\t: max === g\n\t\t\t\t? (b - r) / d + 2\n\t\t\t\t: (r - g) / d + 4;\n\t\th = h * 60 + 0.5;\n\t}\n\treturn [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n\treturn (\n\t\tArray.isArray(a)\n\t\t\t? f(a[0], a[1], a[2])\n\t\t\t: f(a, b, c)\n\t).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n\treturn calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n\treturn calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n\treturn calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n\treturn (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n\tconst m = HUE_RE.exec(str);\n\tlet a = 255;\n\tlet v;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[5] !== v) {\n\t\ta = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n\t}\n\tconst h = hue(+m[2]);\n\tconst p1 = +m[3] / 100;\n\tconst p2 = +m[4] / 100;\n\tif (m[1] === 'hwb') {\n\t\tv = hwb2rgb(h, p1, p2);\n\t} else if (m[1] === 'hsv') {\n\t\tv = hsv2rgb(h, p1, p2);\n\t} else {\n\t\tv = hsl2rgb(h, p1, p2);\n\t}\n\treturn {\n\t\tr: v[0],\n\t\tg: v[1],\n\t\tb: v[2],\n\t\ta: a\n\t};\n}\nfunction rotate(v, deg) {\n\tvar h = rgb2hsl(v);\n\th[0] = hue(h[0] + deg);\n\th = hsl2rgb(h);\n\tv.r = h[0];\n\tv.g = h[1];\n\tv.b = h[2];\n}\nfunction hslString(v) {\n\tif (!v) {\n\t\treturn;\n\t}\n\tconst a = rgb2hsl(v);\n\tconst h = a[0];\n\tconst s = n2p(a[1]);\n\tconst l = n2p(a[2]);\n\treturn v.a < 255\n\t\t? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n\t\t: `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map$1 = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n\tconst unpacked = {};\n\tconst keys = Object.keys(names);\n\tconst tkeys = Object.keys(map$1);\n\tlet i, j, k, ok, nk;\n\tfor (i = 0; i < keys.length; i++) {\n\t\tok = nk = keys[i];\n\t\tfor (j = 0; j < tkeys.length; j++) {\n\t\t\tk = tkeys[j];\n\t\t\tnk = nk.replace(k, map$1[k]);\n\t\t}\n\t\tk = parseInt(names[ok], 16);\n\t\tunpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n\t}\n\treturn unpacked;\n}\nlet names$1;\nfunction nameParse(str) {\n\tif (!names$1) {\n\t\tnames$1 = unpack();\n\t\tnames$1.transparent = [0, 0, 0, 0];\n\t}\n\tconst a = names$1[str.toLowerCase()];\n\treturn a && {\n\t\tr: a[0],\n\t\tg: a[1],\n\t\tb: a[2],\n\t\ta: a.length === 4 ? a[3] : 255\n\t};\n}\nfunction modHSL(v, i, ratio) {\n\tif (v) {\n\t\tlet tmp = rgb2hsl(v);\n\t\ttmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n\t\ttmp = hsl2rgb(tmp);\n\t\tv.r = tmp[0];\n\t\tv.g = tmp[1];\n\t\tv.b = tmp[2];\n\t}\n}\nfunction clone(v, proto) {\n\treturn v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n\tvar v = {r: 0, g: 0, b: 0, a: 255};\n\tif (Array.isArray(input)) {\n\t\tif (input.length >= 3) {\n\t\t\tv = {r: input[0], g: input[1], b: input[2], a: 255};\n\t\t\tif (input.length > 3) {\n\t\t\t\tv.a = n2b(input[3]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tv = clone(input, {r: 0, g: 0, b: 0, a: 1});\n\t\tv.a = n2b(v.a);\n\t}\n\treturn v;\n}\nfunction functionParse(str) {\n\tif (str.charAt(0) === 'r') {\n\t\treturn rgbParse(str);\n\t}\n\treturn hueParse(str);\n}\nclass Color {\n\tconstructor(input) {\n\t\tif (input instanceof Color) {\n\t\t\treturn input;\n\t\t}\n\t\tconst type = typeof input;\n\t\tlet v;\n\t\tif (type === 'object') {\n\t\t\tv = fromObject(input);\n\t\t} else if (type === 'string') {\n\t\t\tv = hexParse(input) || nameParse(input) || functionParse(input);\n\t\t}\n\t\tthis._rgb = v;\n\t\tthis._valid = !!v;\n\t}\n\tget valid() {\n\t\treturn this._valid;\n\t}\n\tget rgb() {\n\t\tvar v = clone(this._rgb);\n\t\tif (v) {\n\t\t\tv.a = b2n(v.a);\n\t\t}\n\t\treturn v;\n\t}\n\tset rgb(obj) {\n\t\tthis._rgb = fromObject(obj);\n\t}\n\trgbString() {\n\t\treturn this._valid ? rgbString(this._rgb) : this._rgb;\n\t}\n\thexString() {\n\t\treturn this._valid ? hexString(this._rgb) : this._rgb;\n\t}\n\thslString() {\n\t\treturn this._valid ? hslString(this._rgb) : this._rgb;\n\t}\n\tmix(color, weight) {\n\t\tconst me = this;\n\t\tif (color) {\n\t\t\tconst c1 = me.rgb;\n\t\t\tconst c2 = color.rgb;\n\t\t\tlet w2;\n\t\t\tconst p = weight === w2 ? 0.5 : weight;\n\t\t\tconst w = 2 * p - 1;\n\t\t\tconst a = c1.a - c2.a;\n\t\t\tconst w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\t\tw2 = 1 - w1;\n\t\t\tc1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n\t\t\tc1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n\t\t\tc1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n\t\t\tc1.a = p * c1.a + (1 - p) * c2.a;\n\t\t\tme.rgb = c1;\n\t\t}\n\t\treturn me;\n\t}\n\tclone() {\n\t\treturn new Color(this.rgb);\n\t}\n\talpha(a) {\n\t\tthis._rgb.a = n2b(a);\n\t\treturn this;\n\t}\n\tclearer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 - ratio;\n\t\treturn this;\n\t}\n\tgreyscale() {\n\t\tconst rgb = this._rgb;\n\t\tconst val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n\t\trgb.r = rgb.g = rgb.b = val;\n\t\treturn this;\n\t}\n\topaquer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 + ratio;\n\t\treturn this;\n\t}\n\tnegate() {\n\t\tconst v = this._rgb;\n\t\tv.r = 255 - v.r;\n\t\tv.g = 255 - v.g;\n\t\tv.b = 255 - v.b;\n\t\treturn this;\n\t}\n\tlighten(ratio) {\n\t\tmodHSL(this._rgb, 2, ratio);\n\t\treturn this;\n\t}\n\tdarken(ratio) {\n\t\tmodHSL(this._rgb, 2, -ratio);\n\t\treturn this;\n\t}\n\tsaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, ratio);\n\t\treturn this;\n\t}\n\tdesaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, -ratio);\n\t\treturn this;\n\t}\n\trotate(deg) {\n\t\trotate(this._rgb, deg);\n\t\treturn this;\n\t}\n}\nfunction index_esm(input) {\n\treturn new Color(input);\n}\n\nconst isPatternOrGradient = (value) => value instanceof CanvasGradient || value instanceof CanvasPattern;\nfunction color(value) {\n return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n constructor(_descriptors) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n}\nvar defaults = new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n});\n\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n let type, xOffset, yOffset, size, cornerRadius;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch (style) {\n default:\n ctx.arc(x, y, radius, 0, TAU);\n ctx.closePath();\n break;\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'line':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\nfunction _isPointInArea(point, area, margin) {\n margin = margin || 0.5;\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += font.lineHeight;\n }\n ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction addRoundedRectPath(ctx, rect) {\n const {x, y, w, h, radius} = rect;\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n ctx.lineTo(x, y + h - radius.bottomLeft);\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n ctx.lineTo(x + w, y + radius.topRight);\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\nfunction toTRBL(value) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\nfunction toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = '';\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\nfunction resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {lo, hi};\n}\nconst _lookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n const set = new Set();\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n set.add(items[i]);\n }\n if (set.size === ilen) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: rootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete target._keys;\n delete scopes[0][prop];\n return true;\n },\n get(target, prop) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n set(target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value;\n delete target._keys;\n return true;\n }\n });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete proxy[prop];\n return true;\n },\n get(target, prop, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n set(target, prop, value) {\n proxy[prop] = value;\n delete target[prop];\n return true;\n }\n });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n const value = resolve();\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop];\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n value = value(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n return fallback;\n }\n } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n return value;\n }\n return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (defined(value)) {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (defined(value)) {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01;\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\nfunction _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(evt, canvas) {\n const e = evt.native || evt;\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const {offsetX, offsetY} = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(evt, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect();\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n height = round1(width / 2);\n }\n return {\n width,\n height\n };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = deviceHeight / pixelRatio;\n chart.width = deviceWidth / pixelRatio;\n const canvas = chart.canvas;\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\nconst supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() {\n passiveSupported = true;\n return false;\n }\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n }\n return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x(x) {\n return x;\n },\n setWidth(w) {\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) {\n return x;\n },\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n let {start, end, loop} = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n return result;\n}\nfunction _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n while (start < count && points[start].skip) {\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while (end > start && points[end % count].skip) {\n end--;\n }\n end %= count;\n return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { _toLeftRightCenter as $, _rlookupByKey as A, getAngleFromPoint as B, toPadding as C, each as D, getMaximumSize as E, _getParentNode as F, readUsedSize as G, HALF_PI as H, throttled as I, supportsEventListenerOptions as J, _isDomSupported as K, log10 as L, _factorize as M, finiteOrDefault as N, callback as O, PI as P, _addGrace as Q, toDegrees as R, _measureText as S, TAU as T, _int16Range as U, _alignPixel as V, clipArea as W, renderText as X, unclipArea as Y, toFont as Z, _arrayUnique as _, resolve as a, _angleDiff as a$, _alignStartEnd as a0, overrides as a1, merge as a2, _capitalize as a3, descriptors as a4, isFunction as a5, _attachContext as a6, _createResolver as a7, _descriptors as a8, mergeIf as a9, restoreTextDirection as aA, noop as aB, distanceBetweenPoints as aC, _setMinAndMaxByKey as aD, niceNum as aE, almostWhole as aF, almostEquals as aG, _decimalPlaces as aH, _longestText as aI, _filterBetween as aJ, _lookup as aK, getHoverColor as aL, clone$1 as aM, _merger as aN, _mergerIf as aO, _deprecated as aP, toFontString as aQ, splineCurve as aR, splineCurveMonotone as aS, getStyle as aT, fontString as aU, toLineHeight as aV, PITAU as aW, INFINITY as aX, RAD_PER_DEG as aY, QUARTER_PI as aZ, TWO_THIRDS_PI as a_, uid as aa, debounce as ab, retinaScale as ac, clearCanvas as ad, setsEqual as ae, _elementsEqual as af, _isClickEvent as ag, _isBetween as ah, _readValueToProps as ai, _updateBezierControlPoints as aj, _computeSegments as ak, _boundSegments as al, _steppedInterpolation as am, _bezierInterpolation as an, _pointInLine as ao, _steppedLineTo as ap, _bezierCurveTo as aq, drawPoint as ar, addRoundedRectPath as as, toTRBL as at, toTRBLCorners as au, _boundSegment as av, _normalizeAngle as aw, getRtlAdapter as ax, overrideTextDirection as ay, _textX as az, isArray as b, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, isNumber as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _limitValue as w, _lookupByKey as x, getRelativePosition as y, _isPointInArea as z };\n","/*!\n * Chart.js v3.7.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as isNumber, w as _limitValue, x as _lookupByKey, y as getRelativePosition$1, z as _isPointInArea, A as _rlookupByKey, B as getAngleFromPoint, C as toPadding, D as each, E as getMaximumSize, F as _getParentNode, G as readUsedSize, I as throttled, J as supportsEventListenerOptions, K as _isDomSupported, L as log10, M as _factorize, N as finiteOrDefault, O as callback, Q as _addGrace, R as toDegrees, S as _measureText, U as _int16Range, V as _alignPixel, W as clipArea, X as renderText, Y as unclipArea, Z as toFont, $ as _toLeftRightCenter, a0 as _alignStartEnd, a1 as overrides, a2 as merge, a3 as _capitalize, a4 as descriptors, a5 as isFunction, a6 as _attachContext, a7 as _createResolver, a8 as _descriptors, a9 as mergeIf, aa as uid, ab as debounce, ac as retinaScale, ad as clearCanvas, ae as setsEqual, af as _elementsEqual, ag as _isClickEvent, ah as _isBetween, ai as _readValueToProps, aj as _updateBezierControlPoints, ak as _computeSegments, al as _boundSegments, am as _steppedInterpolation, an as _bezierInterpolation, ao as _pointInLine, ap as _steppedLineTo, aq as _bezierCurveTo, ar as drawPoint, as as addRoundedRectPath, at as toTRBL, au as toTRBLCorners, av as _boundSegment, aw as _normalizeAngle, ax as getRtlAdapter, ay as overrideTextDirection, az as _textX, aA as restoreTextDirection, aB as noop, aC as distanceBetweenPoints, aD as _setMinAndMaxByKey, aE as niceNum, aF as almostWhole, aG as almostEquals, aH as _decimalPlaces, aI as _longestText, aJ as _filterBetween, aK as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nclass Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for (; i >= 0; --i) {\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color(from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || (elapsed < duration));\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n});\ndefaults.describe('animations', {\n _fallback: 'animation',\n});\ndefaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0\n },\n }\n }\n});\nclass Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.$context = undefined;\n this._syncList = [];\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = () => this.getContext(index, active);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n const {start, end, reverse, top, bottom} = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\nclass BarController extends DatasetController {\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const metasets = iScale.getMatchingVisibleMetas(this._type);\n const stacked = iScale.options.stacked;\n const ilen = metasets.length;\n const stacks = [];\n let i, item;\n for (i = 0; i < ilen; ++i) {\n item = metasets[i];\n if (!item.controller.options.grouped) {\n continue;\n }\n if (typeof dataIndex !== 'undefined') {\n const val = item.controller.getParsed(dataIndex)[\n item.controller._cachedMeta.vScale.axis\n ];\n if (isNullOrUndef(val) || isNaN(val)) {\n continue;\n }\n }\n if (stacked === false || stacks.indexOf(item.stack) === -1 ||\n\t\t\t\t(stacked === undefined && item.stack === undefined)) {\n stacks.push(item.stack);\n }\n if (item.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1;\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n head = base + size;\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n};\nBarController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n};\n\nclass BubbleController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: meta.label,\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n};\nBubbleController.overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n }\n }\n }\n }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n let startAngle = this._getRotation();\n let i;\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(tooltipItem) {\n let dataLabel = tooltipItem.label;\n const value = ': ' + tooltipItem.formattedValue;\n if (isArray(dataLabel)) {\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n return dataLabel;\n }\n }\n }\n }\n};\n\nclass LineController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\nLineController.id = 'line';\nLineController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false,\n};\nLineController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n};\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const {iScale, _parsed} = meta;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(\n _lookupByKey(_parsed, iScale.axis, min).lo,\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(\n _lookupByKey(_parsed, iScale.axis, max).hi + 1,\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1),\n start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {start, count};\n}\nfunction scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nclass PolarAreaController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const dataset = this.getDataset();\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(dataset.data[i]) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const dataset = this.getDataset();\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index) => {\n if (!isNaN(dataset.data[index]) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n};\nPolarAreaController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(context) {\n return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n }\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const dataset = this.getDataset();\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, dataset.data[i]);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n};\nRadarController.overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n};\n\nclass ScatterController extends LineController {\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n showLine: false,\n fill: false\n};\nScatterController.overrides = {\n interaction: {\n mode: 'point'\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(item) {\n return '(' + item.label + ', ' + item.formattedValue + ')';\n }\n }\n }\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n constructor(options) {\n this.options = options || {};\n }\n formats() {\n return abstract();\n }\n parse(value, format) {\n return abstract();\n }\n format(timestamp, format) {\n return abstract();\n }\n add(timestamp, amount, unit) {\n return abstract();\n }\n diff(a, b, unit) {\n return abstract();\n }\n startOf(timestamp, unit, weekday) {\n return abstract();\n }\n endOf(timestamp, unit) {\n return abstract();\n }\n}\nDateAdapter.override = function(members) {\n Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n _date: DateAdapter\n};\n\nfunction getRelativePosition(e, chart) {\n if ('native' in e) {\n return {\n x: e.x,\n y: e.y\n };\n }\n return getRelativePosition$1(e, chart);\n}\nfunction evaluateAllVisibleItems(chart, handler) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n let index, data, element;\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n ({index, data} = metasets[i]);\n for (let j = 0, jlen = data.length; j < jlen; ++j) {\n element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n return {lo: 0, hi: data.length - 1};\n}\nfunction optimizedEvaluateItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition) {\n const items = [];\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n optimizedEvaluateItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = _isPointInArea(center, chart.chartArea, chart._minPadding);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({element, datasetIndex, index});\n }\n }\n optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition) {\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return [];\n }\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition);\n}\nfunction getAxisItems(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const items = [];\n const axis = options.axis;\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateAllVisibleItems(chart, (element, datasetIndex, index) => {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n intersectsItem = true;\n }\n });\n if (options.intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\nvar Interaction = {\n modes: {\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition)\n : getNearestItems(chart, position, axis, false, useFinalPosition);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n return elements;\n },\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition) :\n getNearestItems(chart, position, axis, false, useFinalPosition);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n return items;\n },\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n return getIntersectItems(chart, position, axis, useFinalPosition);\n },\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition);\n },\n x(chart, e, options, useFinalPosition) {\n return getAxisItems(chart, e, {axis: 'x', intersect: options.intersect}, useFinalPosition);\n },\n y(chart, e, options, useFinalPosition) {\n return getAxisItems(chart, e, {axis: 'y', intersect: options.intersect}, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\ndefaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n});\nvar layouts = {\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n chart.boxes.push(item);\n },\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition$1(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart, (args) => {\n const event = args[0];\n return [event, event.offsetX, event.offsetY];\n });\n addListener(canvas, type, proxy);\n return proxy;\n}\nclass DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n constructor() {\n this.x = undefined;\n this.y = undefined;\n this.active = false;\n this.options = undefined;\n this.$animations = undefined;\n }\n tooltipPosition(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n return this;\n }\n const ret = {};\n props.forEach(prop => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n if (remain === 1 || remain === 2 || remain === 5) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawBorder: true,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n borderDash: [],\n borderDashOffset: 0.0,\n borderWidth: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n constructor(cfg) {\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {min, max};\n }\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [this]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = this.ticks.length;\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [this]);\n }\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for (i = 0; i < length; ++i) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const {min, max} = this;\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const optsAtIndex = grid.setContext(this.getContext(i));\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = grid.borderDash || [];\n const borderDashOffset = optsAtIndex.borderDashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n if (isHorizontal) {\n x = pixel;\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = y + textOffset - labelPadding.top;\n let left = x - labelPadding.left;\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor,\n };\n }\n items.push({\n rotation,\n label,\n font,\n color,\n strokeColor,\n strokeWidth,\n textOffset,\n textAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {textAlign, x};\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n drawBorder() {\n const {chart, ctx, options: {grid}} = this;\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.borderWidth;\n ctx.strokeStyle = borderOpts.borderColor;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n const tickFont = item.font;\n const label = item.label;\n if (item.backdrop) {\n ctx.fillStyle = item.backdrop.color;\n ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n }\n let y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, item);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: gz + 1,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n each(arg, item => {\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = new Registry();\n\nclass PluginService {\n constructor() {\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\nfunction allPlugins(config) {\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n }\n }\n return plugins;\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, plugins, options, all) {\n const result = [];\n const context = chart.getContext();\n for (let i = 0; i < plugins.length; i++) {\n const plugin = plugins[i];\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, plugin, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, plugin, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true});\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y') {\n return id;\n }\n return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const firstIDs = Object.create(null);\n const scales = Object.create(null);\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n firstIDs[axis] = firstIDs[axis] || id;\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const {options, type} = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {type},\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"3.7.1\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nclass Chart {\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas can be reused.'\n );\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {size: newSize});\n callback(options.onResize, [this, newSize], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass.prototype, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {mode});\n this._layers.sort(compare2Level('z', '_idx'));\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = this.chartArea;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n this.notifyPlugins('destroy');\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type) => _add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = () => {\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = () => {\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: _isPointInArea(e, this.chartArea, this._minPadding)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [e, active, this], this);\n if (isClick) {\n callback(options.onClick, [e, active, this], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n defaults: {\n enumerable,\n value: defaults\n },\n instances: {\n enumerable,\n value: instances\n },\n overrides: {\n enumerable,\n value: overrides\n },\n registry: {\n enumerable,\n value: registry\n },\n version: {\n enumerable,\n value: version\n },\n getChart: {\n enumerable,\n value: getChart\n },\n register: {\n enumerable,\n value: (...items) => {\n registry.add(...items);\n invalidatePlugins();\n }\n },\n unregister: {\n enumerable,\n value: (...items) => {\n registry.remove(...items);\n invalidatePlugins();\n }\n }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\nfunction pathArc(ctx, element, offset, spacing, end) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, startAngle + TAU);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + circumference % TAU;\n if (circumference % TAU === 0) {\n endAngle += TAU;\n }\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.fill();\n return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n const {x, y, startAngle, pixelMargin, fullCircles} = element;\n const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n const innerRadius = element.innerRadius + pixelMargin;\n let i;\n if (inner) {\n clipArc(ctx, element, startAngle + TAU);\n }\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle) {\n const {options} = element;\n const {borderWidth, borderJoinStyle} = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.stroke();\n}\nclass ArcElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = this.options.spacing / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return (betweenAngles && withinRadius);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference',\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 2;\n const spacing = (options.spacing || 0) / 2;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n let radiusOffset = 0;\n if (offset) {\n radiusOffset = offset / 2;\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n if (this.circumference >= PI) {\n radiusOffset = offset;\n }\n }\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n const endAngle = drawArc(ctx, this, radiusOffset, spacing);\n drawBorder(ctx, this, radiusOffset, spacing, endAngle);\n ctx.restore();\n }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let {move = true, reverse} = params || {};\n let i, point, prev;\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n constructor(cfg) {\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || (this.points.length - start);\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n};\nLineElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n return options.radius + options.hitRadius;\n }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n};\nPointElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {x: pointAx, y: pointAy} = data[a];\n maxArea = area = -1;\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs(\n (pointAx - avgX) * (data[j].y - pointAy) -\n (pointAx - data[j].x) * (avgY - pointAy)\n );\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX,\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {value: data});\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset) => {\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const {iScale} = meta;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {start, count};\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false,\n },\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {_data, indexAxis} = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n if (meta.type !== 'line') {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\nfunction decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n if (fill[0] === '-' || fill[0] === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n }\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n let target = null;\n let horizontal;\n if (fill === 'start') {\n target = scale.bottom;\n } else if (fill === 'end') {\n target = scale.top;\n } else if (isObject(fill)) {\n target = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n target = scale.getBasePixel();\n }\n if (isNumberFinite(target)) {\n horizontal = scale.isHorizontal();\n return {\n x: horizontal ? target : null,\n y: horizontal ? null : target\n };\n }\n return null;\n}\nclass simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const target = [];\n const start = options.reverse ? scale.max : scale.min;\n const end = options.reverse ? scale.min : scale.max;\n let i, center, value;\n if (fill === 'start') {\n value = start;\n } else if (fill === 'end') {\n value = end;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n if (options.grid.circular) {\n center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for (i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\nfunction buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(createBoundaryLine({x: null, y: scale.bottom}, line));\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\nfunction getTarget(source) {\n const {chart, fill, line} = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return createBoundaryLine(boundary, line);\n}\nfunction createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n if (!propagate) {\n return fill;\n }\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\nfunction _clip(ctx, target, clipY) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments) {\n let {start, end} = segment;\n end = findSegmentEnd(start, end, points);\n const bounds = getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments) {\n const subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction clipBounds(ctx, scale, bounds) {\n const {top, bottom} = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\nfunction _fill(ctx, cfg) {\n const {line, target, property, color, scale} = cfg;\n const segments = _segments(line, target, property);\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n _clip(ctx, target, area.top);\n _fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n _clip(ctx, target, area.bottom);\n }\n _fill(ctx, {line, target, color: below, scale, property});\n ctx.restore();\n}\nfunction drawfill(ctx, source, area) {\n const target = getTarget(source);\n const {line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis});\n unclipArea(ctx);\n }\n}\nvar plugin_filler = {\n id: 'filler',\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw) {\n drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (source) {\n drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config) {\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const {options, ctx} = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {color: fontColor, padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxWidth * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\nfunction isListened(type, opts) {\n if (type === 'mousemove' && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: 0,\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n\nclass Title extends Element {\n constructor(config) {\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const {top, left, bottom, right, options} = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {titleX, titleY, maxWidth, rotation};\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold',\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst positioners = {\n average(items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {width, height};\n}\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n constructor(config) {\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart || config._chart;\n this._chart = this.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const {callbacks} = options;\n const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n const title = callbacks.title.apply(this, [context]);\n const afterTitle = callbacks.afterTitle.apply(this, [context]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n }\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n }\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n const footer = callbacks.footer.apply(this, [tooltipItems]);\n const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(scoped.labelColor.call(this, context));\n labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n labelTextColors.push(scoped.labelTextColor.call(this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColors = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = labelColors.borderWidth || 1;\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n const borderRadius = toTRBLCorners(labelColors.borderRadius);\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n if (tooltip) {\n tooltip.draw(chart.ctx);\n }\n chart.notifyPlugins('afterTooltipDraw', args);\n },\n afterEvent(chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: {\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n }\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: plugin_filler,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n ticks: {\n callback: CategoryScale.prototype.getLabelForValue\n }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for (; j < numSpaces; ++j) {\n ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = 1;\n if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n offset = Math.abs(max * 0.05);\n }\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n};\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n const endExp = Math.floor(log10(dataRange.max));\n const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n const ticks = [];\n let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n let exp = Math.floor(log10(tickVal));\n let significand = Math.floor(tickVal / Math.pow(10, exp));\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n do {\n ticks.push({value: tickVal, major: isMajor(tickVal)});\n ++significand;\n if (significand === 10) {\n significand = 1;\n ++exp;\n precision = exp >= 0 ? 1 : precision;\n }\n tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n } while (exp < endExp || (exp === endExp && significand < endSignificand));\n const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n ticks.push({value: lastTick, major: isMajor(tickVal)});\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(exp(min, -1));\n setMax(exp(max, +1));\n }\n }\n if (min <= 0) {\n setMin(exp(max, -1));\n }\n if (max <= 0) {\n setMax(exp(min, +1));\n }\n if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n setMin(exp(min, -1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n};\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\nfunction fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const extra = getTickBackdropHeight(opts) / 2;\n const outerDistance = scale.drawingArea;\n const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const size = labelSizes[i];\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n for (let i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n const {backdropColor} = optsAtIndex;\n if (!isNullOrUndef(backdropColor)) {\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height);\n }\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const {color, lineWidth} = gridLineOpts;\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(gridLineOpts.borderDash);\n ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n constructor(cfg) {\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid} = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const optsAtIndex = grid.setContext(this.getContext(index - 1));\n drawRadiusLine(this, optsAtIndex, offset, labelCount);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index) => {\n if (index === 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback(label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n};\nRadialLinearScale.defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n};\n\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n return a - b;\n}\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n constructor(props) {\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n initOffsets(timestamps) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n const formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], this) : label;\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return (this._cache.data = this.normalize(timestamps));\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n major: {\n enabled: false\n }\n }\n};\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n constructor(props) {\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, plugin_filler as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","function toVal(mix) {\n\tvar k, y, str='';\n\n\tif (typeof mix === 'string' || typeof mix === 'number') {\n\t\tstr += mix;\n\t} else if (typeof mix === 'object') {\n\t\tif (Array.isArray(mix)) {\n\t\t\tfor (k=0; k < mix.length; k++) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tif (y = toVal(mix[k])) {\n\t\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\t\tstr += y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (k in mix) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\tstr += k;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn str;\n}\n\nexport default function () {\n\tvar i=0, tmp, x, str='';\n\twhile (i < arguments.length) {\n\t\tif (tmp = arguments[i++]) {\n\t\t\tif (x = toVal(tmp)) {\n\t\t\t\tstr && (str += ' ');\n\t\t\t\tstr += x\n\t\t\t}\n\t\t}\n\t}\n\treturn str;\n}\n"," \t// The module cache\n \tvar installedModules = {};\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\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 50d3c294847480487dbf","const attach = require('./attach');\nconst ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\n\nmodule.exports = attach(ENVIRONMENT_IS_WORKER ? self : window);\n\n\n\n// WEBPACK FOOTER //\n// ./src/browser.js","/*\n* Configuration for React-Native's package system\n* @providesModule whatwg-fetch\n*/\n\nlet interceptors = [];\n\nfunction interceptor(fetch, ...args) {\n const reversedInterceptors = interceptors.reduce((array, interceptor) => [interceptor].concat(array), []);\n let promise = Promise.resolve(args);\n\n // Register request interceptors\n reversedInterceptors.forEach(({ request, requestError }) => {\n if (request || requestError) {\n promise = promise.then(args => request(...args), requestError);\n }\n });\n\n // Register fetch call\n promise = promise.then(args => {\n const request = new Request(...args);\n return fetch(request).then(response => {\n response.request = request;\n return response;\n }).catch(error => {\n error.request = request;\n return Promise.reject(error);\n });\n });\n\n // Register response interceptors\n reversedInterceptors.forEach(({ response, responseError }) => {\n if (response || responseError) {\n promise = promise.then(response, responseError);\n }\n });\n\n return promise;\n}\n\nmodule.exports = function attach(env) {\n // Make sure fetch is available in the given environment\n if (!env.fetch) {\n try {\n require('whatwg-fetch');\n } catch (err) {\n throw Error('No fetch available. Unable to register fetch-intercept');\n }\n }\n env.fetch = (function (fetch) {\n return function (...args) {\n return interceptor(fetch, ...args);\n };\n })(env.fetch);\n\n return {\n register: function (interceptor) {\n interceptors.push(interceptor);\n return () => {\n const index = interceptors.indexOf(interceptor);\n if (index >= 0) {\n interceptors.splice(index, 1);\n }\n };\n },\n clear: function () {\n interceptors = [];\n }\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/attach.js","module.exports = require(\"whatwg-fetch\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"whatwg-fetch\"\n// module id = 2\n// module chunks = 0 1","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { __assign, __spreadArray } from \"tslib\";\nimport { parse } from '@formatjs/icu-messageformat-parser';\nimport memoize, { strategies } from '@formatjs/fast-memoize';\nimport { formatToParts, PART_TYPE, } from './formatters';\n// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1, c2) {\n if (!c2) {\n return c1;\n }\n return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) {\n all[k] = __assign(__assign({}, c1[k]), (c2[k] || {}));\n return all;\n }, {}));\n}\nfunction mergeConfigs(defaultConfig, configs) {\n if (!configs) {\n return defaultConfig;\n }\n return Object.keys(defaultConfig).reduce(function (all, k) {\n all[k] = mergeConfig(defaultConfig[k], configs[k]);\n return all;\n }, __assign({}, defaultConfig));\n}\nfunction createFastMemoizeCache(store) {\n return {\n create: function () {\n return {\n get: function (key) {\n return store[key];\n },\n set: function (key, value) {\n store[key] = value;\n },\n };\n },\n };\n}\nfunction createDefaultFormatters(cache) {\n if (cache === void 0) { cache = {\n number: {},\n dateTime: {},\n pluralRules: {},\n }; }\n return {\n getNumberFormat: memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.number),\n strategy: strategies.variadic,\n }),\n getDateTimeFormat: memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.dateTime),\n strategy: strategies.variadic,\n }),\n getPluralRules: memoize(function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n }, {\n cache: createFastMemoizeCache(cache.pluralRules),\n strategy: strategies.variadic,\n }),\n };\n}\nvar IntlMessageFormat = /** @class */ (function () {\n function IntlMessageFormat(message, locales, overrideFormats, opts) {\n var _this = this;\n if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; }\n this.formatterCache = {\n number: {},\n dateTime: {},\n pluralRules: {},\n };\n this.format = function (values) {\n var parts = _this.formatToParts(values);\n // Hot path for straight simple msg translations\n if (parts.length === 1) {\n return parts[0].value;\n }\n var result = parts.reduce(function (all, part) {\n if (!all.length ||\n part.type !== PART_TYPE.literal ||\n typeof all[all.length - 1] !== 'string') {\n all.push(part.value);\n }\n else {\n all[all.length - 1] += part.value;\n }\n return all;\n }, []);\n if (result.length <= 1) {\n return result[0] || '';\n }\n return result;\n };\n this.formatToParts = function (values) {\n return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message);\n };\n this.resolvedOptions = function () { return ({\n locale: Intl.NumberFormat.supportedLocalesOf(_this.locales)[0],\n }); };\n this.getAst = function () { return _this.ast; };\n if (typeof message === 'string') {\n this.message = message;\n if (!IntlMessageFormat.__parse) {\n throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');\n }\n // Parse string messages into an AST.\n this.ast = IntlMessageFormat.__parse(message, {\n ignoreTag: opts === null || opts === void 0 ? void 0 : opts.ignoreTag,\n });\n }\n else {\n this.ast = message;\n }\n if (!Array.isArray(this.ast)) {\n throw new TypeError('A message must be provided as a String or AST.');\n }\n // Creates a new object with the specified `formats` merged with the default\n // formats.\n this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n // Defined first because it's used to build the format pattern.\n this.locales = locales;\n this.formatters =\n (opts && opts.formatters) || createDefaultFormatters(this.formatterCache);\n }\n Object.defineProperty(IntlMessageFormat, \"defaultLocale\", {\n get: function () {\n if (!IntlMessageFormat.memoizedDefaultLocale) {\n IntlMessageFormat.memoizedDefaultLocale =\n new Intl.NumberFormat().resolvedOptions().locale;\n }\n return IntlMessageFormat.memoizedDefaultLocale;\n },\n enumerable: false,\n configurable: true\n });\n IntlMessageFormat.memoizedDefaultLocale = null;\n IntlMessageFormat.__parse = parse;\n // Default format options used as the prototype of the `formats` provided to the\n // constructor. These are used when constructing the internal Intl.NumberFormat\n // and Intl.DateTimeFormat instances.\n IntlMessageFormat.formats = {\n number: {\n integer: {\n maximumFractionDigits: 0,\n },\n currency: {\n style: 'currency',\n },\n percent: {\n style: 'percent',\n },\n },\n date: {\n short: {\n month: 'numeric',\n day: 'numeric',\n year: '2-digit',\n },\n medium: {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n },\n long: {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n },\n full: {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n },\n },\n time: {\n short: {\n hour: 'numeric',\n minute: 'numeric',\n },\n medium: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n },\n long: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n },\n full: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n },\n },\n };\n return IntlMessageFormat;\n}());\nexport { IntlMessageFormat };\n","import { __extends } from \"tslib\";\nexport var ErrorCode;\n(function (ErrorCode) {\n // When we have a placeholder but no value to format\n ErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n // When value supplied is invalid\n ErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n // When we need specific Intl API but it's not available\n ErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n})(ErrorCode || (ErrorCode = {}));\nvar FormatError = /** @class */ (function (_super) {\n __extends(FormatError, _super);\n function FormatError(msg, code, originalMessage) {\n var _this = _super.call(this, msg) || this;\n _this.code = code;\n _this.originalMessage = originalMessage;\n return _this;\n }\n FormatError.prototype.toString = function () {\n return \"[formatjs Error: \".concat(this.code, \"] \").concat(this.message);\n };\n return FormatError;\n}(Error));\nexport { FormatError };\nvar InvalidValueError = /** @class */ (function (_super) {\n __extends(InvalidValueError, _super);\n function InvalidValueError(variableId, value, options, originalMessage) {\n return _super.call(this, \"Invalid values for \\\"\".concat(variableId, \"\\\": \\\"\").concat(value, \"\\\". Options are \\\"\").concat(Object.keys(options).join('\", \"'), \"\\\"\"), ErrorCode.INVALID_VALUE, originalMessage) || this;\n }\n return InvalidValueError;\n}(FormatError));\nexport { InvalidValueError };\nvar InvalidValueTypeError = /** @class */ (function (_super) {\n __extends(InvalidValueTypeError, _super);\n function InvalidValueTypeError(value, type, originalMessage) {\n return _super.call(this, \"Value for \\\"\".concat(value, \"\\\" must be of type \").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this;\n }\n return InvalidValueTypeError;\n}(FormatError));\nexport { InvalidValueTypeError };\nvar MissingValueError = /** @class */ (function (_super) {\n __extends(MissingValueError, _super);\n function MissingValueError(variableId, originalMessage) {\n return _super.call(this, \"The intl string context variable \\\"\".concat(variableId, \"\\\" was not provided to the string \\\"\").concat(originalMessage, \"\\\"\"), ErrorCode.MISSING_VALUE, originalMessage) || this;\n }\n return MissingValueError;\n}(FormatError));\nexport { MissingValueError };\n","import { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTimeElement, isTagElement, } from '@formatjs/icu-messageformat-parser';\nimport { MissingValueError, InvalidValueError, ErrorCode, FormatError, InvalidValueTypeError, } from './error';\nexport var PART_TYPE;\n(function (PART_TYPE) {\n PART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n PART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n})(PART_TYPE || (PART_TYPE = {}));\nfunction mergeLiteral(parts) {\n if (parts.length < 2) {\n return parts;\n }\n return parts.reduce(function (all, part) {\n var lastPart = all[all.length - 1];\n if (!lastPart ||\n lastPart.type !== PART_TYPE.literal ||\n part.type !== PART_TYPE.literal) {\n all.push(part);\n }\n else {\n lastPart.value += part.value;\n }\n return all;\n }, []);\n}\nexport function isFormatXMLElementFn(el) {\n return typeof el === 'function';\n}\n// TODO(skeleton): add skeleton support\nexport function formatToParts(els, locales, formatters, formats, values, currentPluralValue, \n// For debugging\noriginalMessage) {\n // Hot path for straight simple msg translations\n if (els.length === 1 && isLiteralElement(els[0])) {\n return [\n {\n type: PART_TYPE.literal,\n value: els[0].value,\n },\n ];\n }\n var result = [];\n for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {\n var el = els_1[_i];\n // Exit early for string parts.\n if (isLiteralElement(el)) {\n result.push({\n type: PART_TYPE.literal,\n value: el.value,\n });\n continue;\n }\n // TODO: should this part be literal type?\n // Replace `#` in plural rules with the actual numeric value.\n if (isPoundElement(el)) {\n if (typeof currentPluralValue === 'number') {\n result.push({\n type: PART_TYPE.literal,\n value: formatters.getNumberFormat(locales).format(currentPluralValue),\n });\n }\n continue;\n }\n var varName = el.value;\n // Enforce that all required values are provided by the caller.\n if (!(values && varName in values)) {\n throw new MissingValueError(varName, originalMessage);\n }\n var value = values[varName];\n if (isArgumentElement(el)) {\n if (!value || typeof value === 'string' || typeof value === 'number') {\n value =\n typeof value === 'string' || typeof value === 'number'\n ? String(value)\n : '';\n }\n result.push({\n type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n value: value,\n });\n continue;\n }\n // Recursively format plural and select parts' option — which can be a\n // nested pattern structure. The choosing of the option to use is\n // abstracted-by and delegated-to the part helper object.\n if (isDateElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.date[el.style]\n : isDateTimeSkeleton(el.style)\n ? el.style.parsedOptions\n : undefined;\n result.push({\n type: PART_TYPE.literal,\n value: formatters\n .getDateTimeFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isTimeElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.time[el.style]\n : isDateTimeSkeleton(el.style)\n ? el.style.parsedOptions\n : undefined;\n result.push({\n type: PART_TYPE.literal,\n value: formatters\n .getDateTimeFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isNumberElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.number[el.style]\n : isNumberSkeleton(el.style)\n ? el.style.parsedOptions\n : undefined;\n if (style && style.scale) {\n value =\n value *\n (style.scale || 1);\n }\n result.push({\n type: PART_TYPE.literal,\n value: formatters\n .getNumberFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isTagElement(el)) {\n var children = el.children, value_1 = el.value;\n var formatFn = values[value_1];\n if (!isFormatXMLElementFn(formatFn)) {\n throw new InvalidValueTypeError(value_1, 'function', originalMessage);\n }\n var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue);\n var chunks = formatFn(parts.map(function (p) { return p.value; }));\n if (!Array.isArray(chunks)) {\n chunks = [chunks];\n }\n result.push.apply(result, chunks.map(function (c) {\n return {\n type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n value: c,\n };\n }));\n }\n if (isSelectElement(el)) {\n var opt = el.options[value] || el.options.other;\n if (!opt) {\n throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n }\n result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values));\n continue;\n }\n if (isPluralElement(el)) {\n var opt = el.options[\"=\".concat(value)];\n if (!opt) {\n if (!Intl.PluralRules) {\n throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API, originalMessage);\n }\n var rule = formatters\n .getPluralRules(locales, { type: el.pluralType })\n .select(value - (el.offset || 0));\n opt = el.options[rule] || el.options.other;\n }\n if (!opt) {\n throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n }\n result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0)));\n continue;\n }\n }\n return mergeLiteral(result);\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","// vim:ts=4:sts=4:sw=4:\n/*!\n *\n * Copyright 2009-2017 Kris Kowal under the terms of the MIT\n * license found at https://github.com/kriskowal/q/blob/v1/LICENSE\n *\n * With parts by Tyler Close\n * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found\n * at http://www.opensource.org/licenses/mit-license.html\n * Forked at ref_send.js version: 2009-05-11\n *\n * With parts by Mark Miller\n * Copyright (C) 2011 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n(function (definition) {\n \"use strict\";\n\n // This file will function properly as a