{"version":3,"sources":["models/ClientType.ts","reportWebVitals.ts","components/custom-styled-components/CustomStyledComponents.tsx","components/central-pane/CentralPane.tsx","shared/get-environment.ts","shared/endpoints.ts","shared/i18n/index.ts","shared/i18n/en.ts","shared/i18n/fr.ts","shared/i18n/es.ts","shared/state/change-password-alert-message-atom.ts","shared/state/client-atom.ts","shared/state/client-key-atom.ts","shared/state/credential-alert-message-atom.ts","shared/state/force-change-password-atom.ts","shared/state/login-alert-message-atom.ts","shared/state/redirect-url-atom.ts","shared/state/show-change-username-atom.ts","shared/state/show-forgot-password-atom.ts","shared/state/use-modal-view-atom.ts","shared/analytics.ts","shared/state/username-atom.ts","shared/state/username-set-by-param-atom.ts","shared/state/logout-alert-message-atom.ts","shared/state/show-change-password-error-atom.ts","shared/state/userid-atom.ts","shared/test-utils/recoil-observer.tsx","models/LoginType.ts","shared/get-domain.ts","shared/client/universallogin-client.ts","shared/http/httpClient.ts","providers/auth-provider/AuthProvider.tsx","hooks/use-localized-message.ts","shared/utils/map-query-to-client-type.ts","shared/utils/enforce-query-params.tsx","shared/errors.ts","shared/utils/hub.ts","shared/utils/redirect-to-external.tsx","shared/utils/validate-username-email.ts","hooks/parse-query-params/parse-query-params.tsx","components/side-pane/SidePane.tsx","components/top-bar/TopBar.tsx","components/page-layout/PageLayout.tsx","components/page-layout/NonBorderLayout.tsx","components/page-layout/BorderLayout.tsx","components/page-layout/EmbeddedLayout.tsx","components/view-mode-handler/view-mode-handler.tsx","components/change-password/change-password.tsx","components/change-password/change-password-error.tsx","components/login/state.ts","components/credentials/Credentials.tsx","components/error-boundary/ErrorBoundary.tsx","components/login/Login.tsx","components/callback/Callback.tsx","components/forgot-password/state.ts","components/forgot-password/forgot-password.tsx","components/i18n/I18nProvider.tsx","components/page-title/PageTitle.tsx","components/error/Error.tsx","components/logout/Logout.tsx","components/logout-callback/logout-callback.tsx","shared/usePageTracking.ts","App.tsx","index.tsx"],"names":["ClientType","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","StyledTitle","styled","h3","StyledSpace","Space","StyledButton","Button","MarginBaseSmall","StyledAlert","Alert","MarginBaseXsmall","StyledChangeButton","StyledForm","Form","StyledPasswordFormItem","Item","MarginBaseBase","StyledRightAlignCol","Col","StyledBottomMarginCol","StyledForgotPasswordButton","StyledSignInButton","StyledInputFormItem","CentralPane","Modal","div","FontSizeBaseDisplayLarge","props","xs","sm","md","lg","xl","children","getEnvironment","host","window","location","toLowerCase","parts","exec","environmentSuffix","getEnvironmentSuffix","envSuffix","universalLoginApiRoot","authApiRoot","getUniversalLoginV1Endpoint","messages","en","PageTitle","CovaPageTitle","fr","es","changePasswordAlertMsgState","atom","key","default","clientState","web","clientKeyState","credentialAlertMsgState","forceChangePasswordState","loginAlertMsgState","redirectUrlState","showChangeUsernameState","showForgotPasswordState","reportUIEvent","categoryName","actionName","labelValue","isNonInteraction","ReactGA","event","category","action","label","toLocaleLowerCase","nonInteraction","reportException","exception","additionalData","captureException","scope","setExtras","usernameState","effects_UNSTABLE","onSet","newUsername","username","setUser","isUsernameSetByParamState","logoutAlertMsgState","showChangePasswordErrorState","userIdState","LoginType","getDomainFromUsername","emailDomain","atSignPosition","search","slice","getLoginConfigurationUrl","clientKey","redirectUrl","getLogoutUrl","getAuthRevokeCookieUrl","getLoginRedirectUrl","returnUrl","makeHttpCall","request","a","reqInit","getNewRequestInit","fetch","url","response","ok","hasError","handleNotOkResponse","method","getFailedResult","makeHttpCallWithResponse","handleOkResponse","headers","toString","reqHeaders","Headers","append","undefined","accessToken","credentials","body","redirected","json","value","failedResult","status","reportFailedHttpResponse","statusCode","errorType","message","httpError","errorInformation","error","responseMessage","captureMessage","setLevel","Severity","Warning","doAuthConfig","doCredentialLogin","usernameorEmail","password","tokenAndUserIdResourceRequest","UsernameOrEmailAddress","Password","ClientKey","RedirectUrl","JSON","stringify","doForceChangePassword","usernameOrEmail","currentPassword","newPassword","userId","forceChangePasswordRequest","doChangePassword","changePasswordRequest","doForgotPassword","email","forgotPasswordRequest","doLogout","doRevokeCookie","doGetLoginRedirectUrl","useLocalizedMessage","id","values","useIntl","formatMessage","mapQueryParameterToClientType","clientFromQuery","URLSearchParams","get","EnforcedQueryParamRoute","requiredQueryParams","rest","queryParams","requiredQueryParam","has","getHubUrl","domainName","sensitiveQueryParams","redirectExternalUrl","reportUrl","URL","forEach","element","searchParams","delete","assign","redirectToHubUrl","hostname","includes","emailRegex","parseQueryParam","paramName","useParseClientKeyQueryParam","setClientKeyStateState","useSetRecoilState","newClientKey","SidePane","TopBar","style","paddingLeft","SpacingBaseLarge","backgroundColor","ColorGrey800","height","SpacingLayoutXxlarge","display","justifyContent","alignItems","PageLayout","src","minHeight","justify","align","className","NonBorderLayout","marginTop","PaddingPageheaderVertical","width","BorderLayout","EmbeddedLayout","ViewModeHandler","client","Text","Typography","Title","currentPasswordState","newPasswordState","confirmPasswordState","changePasswordBtnLoadingState","ChangePassword","useRecoilValue","parseClientKeyQueryParam","parseUsernameQueryParam","setUsernameStateState","useParseUsernameQueryParam","history","useHistory","useRecoilState","setCurrentPassword","setNewPassword","confirmPassword","setConfirmPassword","changePasswordBtnIsLoading","setChangePasswordBtnLoading","setUsername","setCredentialAlertMsg","forceChangePassword","setForceChangePasswordState","setShowChangePasswordErrorState","setUserId","confirmPasswordMatch","trim","length","isChangePasswordBtnEnabled","isCancelBtnHidden","useForm","form","yourPasswordWasReset","yourPasswordsMustMatch","redirectToSignIn","loginRedirectUrl","type","push","onChangePasswordClicked","changePasswordResult","loginRedirectUrlResult","loginRedirectUrlResultValue","layout","onFinish","direction","size","name","autoComplete","onChange","e","target","autoFocus","rules","validator","rule","Promise","resolve","reject","span","onClick","hidden","disabled","loading","htmlType","ChangePasswordError","showChangePasswordError","changePasswordAlertMsg","setChangePasswordAlertMsg","genericErrorCode","useEffect","errorResult","errorCodes","getErrorCodes","setShowErrorMessage","emptyUsernameOrEmailLocalized","emptyCurrentPasswordLocalized","currentNewAreEquivalentLocalized","incorrectPasswordLocalized","emptyNewPasswordLocalized","newTempAreEquivalentLocalized","badPasswordStrength","passwordTooSimple","cantBeLastPassword","cantBeLastNumPasswords","errorInfos","result","info","reqValStrength","information","requiredValue","replace","reqValComplexity","reqValMinRevisions","details","map","x","i","buttonDisabledState","enterPasswordState","loadingBtnState","Credentials","setEnterPasswordState","isButtonDisabled","setIsButtonDisabled","isLoading","setIsLoading","showForgotPasswordBtn","React","useState","setPassword","credentialAlertMsg","showChangeUsernameBtn","loginAlertMsg","setLoginAlertMsg","invalidCredentialsErrorLine1","invalidCredentialsErrorLine2","forgotPassword","changeUsername","userLockedMessage","userLockedTitle","loginUrl","signin","loginResult","msg","lockReasonDescription","redirectUrlWithTokenAndUserIdResource","generateRedirectUrlWithTokenAndUserIdResource","token","refreshToken","decodedUrl","decodeURIComponent","marginBottom","PaddingBaseBase","iconRender","visible","evt","input","isValid","textAlign","wrapperCol","offset","FallbackComponent","icon","myFallback","errorData","ErrorBoundary","fallback","Login","enterPasswordStatus","setUserInput","isUsernameSetByParam","setIsUsernameSetByParam","parseClientQueryParam","setClientStateState","clientType","useParseClientQueryParam","parseRedirectUrlQueryParam","setRedirectUrlStateState","newRedirectUrl","useParseRedirectUrlQueryParam","redirectToHubIfMissingQueryParams","login","setError","handleLoginConfig","credentialsUrl","trimAndSetUsername","untrimmedUsername","trimmedInput","handleRedirect","authenticationUrl","urlWithLoginHint","match","isUsernameValidEmail","loginConfig","protocol","loginType","usernameParam","Callback","errorState","isError","setErrorState","callHook","useCallback","uuid4","version","mobile","sendMessageForMobile","sendMessageForDesktopAndDefault","TokenNotProvidedResult","localizedErrorTitle","localizedErrorResponse","title","statusText","interopTarget","getInteropTarget","postMessage","object","ReactNativeWebView","sendReactNativeMessage","sendDefaultMobileMessage","requestBody","cefSharpTarget","globalThis","CefSharp","PostMessage","forgotPasswordState","ForgotPassword","setForgotPasswordAlertMsgState","forgotPasswordStatus","setForgotPasswordState","actionCompletedAlertMessage","onResetPasswordClick","getLocale","navigator","language","split","getAntdLocale","fr_FR","es_ES","en_US","I18nProvider","locale","iQmetrixTitle","covaTitle","Helmet","rel","href","Error","localizedAccessTokenErrorTitle","localizedAccessTokenErrorResponse","localizedNonExistentExternalUserErrorTitle","localizedNonExistentExternalUserErrorResponse","localizedUnmatchingExternalUserErrorResponse","Logout","logoutAlertMsg","setLogoutAlertMsg","LogoutErrorLine1","LogoutErrorLine2","logout","callbackUrl","LogoutCallback","state","uriDecodedState","decodeURI","decodedReturnUrl","atob","usePageTracking","useLocation","pageview","pathname","RouterSwitch","path","component","exact","App","universalLoginRoot","rqDefaultCallbackUrl","setShowForgotPasswordState","setClientState","setRedirectUrlState","setChangeUsernameState","useLayoutEffect","setRedirectUrlFromParamOrDefault","setNonWebViewParams","Sentry","dsn","process","release","environment","attachStacktrace","integrations","Integrations","BrowserTracing","tracesSampleRate","initialize","set","env","ReactDOM","render","StrictMode","document","getElementById","init"],"mappings":"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","file":"static/js/main.62361ad0.chunk.js","sourcesContent":["export enum ClientType {\n web = \"web\",\n desktop = \"desktop\",\n mobile = \"mobile\",\n}","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\";\nimport { Alert, Button, Col, Form, Modal, Space } from \"@iqmetrix/antd\";\nimport { MarginBaseBase, MarginBaseXsmall, FontSizeBaseDisplayLarge, MarginBaseSmall } from \"@iqmetrix/style-tokens\";\nimport styled from \"styled-components\";\n\ninterface IHeaderProps {\n title: string;\n}\n\nexport const CustomModalHeader: React.FC = (props: IHeaderProps) => {\n return (\n \n {props.title}\n \n );\n};\n\nexport const CustomModalFooter: React.FC = ({ children }) => {\n return {children};\n};\n\nexport const CustomModalContent: React.FC = ({ children }) => {\n return {children};\n};\n\nexport const StyledTitle = styled.h3`\n && {\n font-weight: bold\n }\n`;\n\nexport const StyledSpace = styled(Space)`\n && {\n display: flex;\n }\n`\n\nexport const StyledButton = styled(Button)`\n && {\n margin-left: ${MarginBaseSmall};\n }\n`;\n\nexport const StyledAlert = styled(Alert)`\n && {\n margin-bottom: ${MarginBaseXsmall};\n }\n`;\n\nexport const StyledChangeButton = styled(Button)`\n && {\n padding: 0;\n }\n`;\n\nexport const StyledForm = styled(Form)`\n && {\n width: 100%;\n margin-top: ${MarginBaseSmall};\n\n }\n .ant-form-item {\n margin-bottom: 0px;\n }\n`;\n\nexport const StyledPasswordFormItem = styled(Form.Item)`\n && {\n margin-top: ${MarginBaseBase};\n }\n`;\n\nexport const StyledRightAlignCol = styled(Col)`\n && {\n text-align: right;\n }\n`;\n\nexport const StyledBottomMarginCol = styled(Col)`\n && {\n margin-bottom: ${MarginBaseBase};\n }\n`;\n\nexport const StyledForgotPasswordButton = styled(Button)`\n && {\n padding: 0;\n }\n`;\n\nexport const StyledSignInButton = styled(Button)`\n && {\n margin-top: ${MarginBaseXsmall};\n margin-left: auto;\n }\n`;\n\nexport const StyledInputFormItem = styled(Form.Item)`\n && {\n margin-bottom: 0px;\n }\n`;\n\nexport const StyledXLBottomMarginInputFormItem = styled(Form.Item)`\n && {\n margin-top: ${MarginBaseBase};\n }\n`;\nexport const StyledModal = styled(Modal)`\n .ant-modal-body:first-child {\n padding: 0;\n }\n`;\n\nexport const StyledModalHeader = styled.div`\n && {\n border: 1px solid #b7b7b7;\n border-bottom: hidden;\n }\n`;\n\nexport const StyledModalTitle = styled.div`\n && {\n font-weight: bolder;\n font-size: ${FontSizeBaseDisplayLarge};\n }\n`;\n\nexport const StyledModalContent = styled.div`\n && {\n border: 1px solid #b7b7b7;\n border-top: hidden;\n border-bottom: hidden;\n }\n`;\n\nexport const StyledModalFooter = styled.div`\n && {\n border: 1px solid #b7b7b7;\n border-top: hidden;\n }\n`;\n","import React from \"react\";\nimport { StyledBottomMarginCol } from \"components/custom-styled-components\";\n\nexport const CentralPane: React.FC = (props) => {\n return (\n \n { props.children }\n \n );\n};\nexport default CentralPane;","export const getEnvironment = (): string => {\n const host = window.location.host.toLowerCase();\n const parts = /(?:signin)(.*?)\\./.exec(host);\n const environmentSuffix = parts && parts[1];\n switch (environmentSuffix) {\n case \"int\":\n case \"rc\":\n return environmentSuffix;\n case \"\":\n return \"prod\";\n default:\n return \"int\";\n }\n};\n\nexport const getEnvironmentSuffix = (): string => {\n const host = window.location.host.toLowerCase();\n const parts = /(?:signin)(.*?)\\./.exec(host);\n const environmentSuffix = parts && parts[1];\n switch (environmentSuffix) {\n case \"int\":\n case \"rc\":\n case \"\":\n return environmentSuffix;\n default:\n return \"int\";\n }\n};\n","import { getEnvironmentSuffix } from \"./get-environment\";\n\nconst envSuffix = getEnvironmentSuffix();\n\nconst universalLoginApiRoot = `https://signinbackend${envSuffix}.iqmetrix.net`;\n\nconst authApiRoot = `https://accounts${envSuffix}.iqmetrix.net`;\n\nexport const getUniversalLoginV1Endpoint = () => {\n return `${universalLoginApiRoot}/v1`;\n};\n\nexport const getAuthEndpoint = () => {\n return `${authApiRoot}`;\n};","import en from \"./en\";\nimport fr from \"./fr\";\nimport es from \"./es\";\n\nexport type Messages = typeof en;\n\nexport const messages: Record = {\n en,\n fr,\n es,\n};\n","const messages = {\n PageTitle: \"iQmetrix Sign in\",\n CovaPageTitle: \"COVA Sign in\",\n\n \"Login.Next\": \"Next\",\n \"Login.Sign_in_Title\": \"Sign in\",\n \"Login.Username_or_Email\": \"Username or Email\",\n\n \"ForgotPassword.Cancel\": \"Cancel\",\n \"ForgotPassword.Email_address\": \"Email address\",\n\n \"ForgotPassword.Instructions.Please_enter_the_email_address\": \"Please enter the email address associated with your account and we'll send you instructions to reset your password.\",\n \"ForgotPassword.Instructions.For_further_assistance\": \"For further assistance, please contact your Hub Administrator.\",\n\n \"ForgotPassword.Alert_message\": \"If an account exists, you will receive an email with your temporary password.\",\n \"ForgotPassword.Reset_Password_Button\": \"Reset Password\",\n \"ForgotPassword.Reset_password_Title\": \"Reset password\",\n\n \"Credentials.Error.The_credentials_you_have_entered_are_incorrect\": \"The credentials you have entered are incorrect.\",\n \"Credentials.Error.Please_try_again\": \"Please try again.\",\n \"Credentials.Error.UserLockedTitle\": \"Your account is locked\",\n \"Credentials.Error.User_is_locked\": \"Please contact your administrator to unlock your account\",\n\n \"Credentials.Forgot_password\": \"Forgot password\",\n \"Credentials.Password\": \"Password\",\n \"Credentials.Sign_in_button\": \"Sign in\",\n \"Credentials.Sign_in_title\": \"Sign in\",\n \"Credentials.Username_change\": \"Change\",\n\n \"ChangePassword.Cancel\": \"Cancel\",\n \"ChangePassword.Change_password_button\": \"Change Password\",\n \"ChangePassword.Change_password_title\": \"Change password\",\n \"ChangePassword.Confirm_password\": \"Confirm password\",\n \"ChangePassword.Current_password\": \"Current password\",\n \"ChangePassword.New_password\": \"New password\",\n \"ChangePassword.Your_current_password_is_temporary\": \"Your current password is temporary and must be changed.\",\n \"ChangePassword.Your_password_was_reset\": \"Your password was reset. You can sign in using your new password.\",\n \"ChangePassword.Your_passwords_must_match\": \"Your passwords must match.\",\n \"ChangePassword.ChangePassword_IncorrectPassword\": \"The current password is incorrect.\",\n \"ChangePassword.ChangePassword_EmptyNewPassword\": \"The password must not be empty.\",\n \"ChangePassword.ChangePassword_NewAndTempPasswordEquivalent\": \"The new password cannot be the same as the temporary password.\",\n \"ChangePassword.ChangePassword_PasswordStrength\": \"Your new password must be at least {} characters long.\",\n \"ChangePassword.ChangePassword_PasswordMinimumRevisions\": \"Your new password must be different than your previous {} passwords.\",\n \"ChangePassword.ChangePassword_PasswordMinimumRevisions_Multiple\": \"Your new password must be different than your previous password.\",\n \"ChangePassword.ChangePassword_PasswordComplexity\": \"Your new password must have at least one character from {} of the following: uppercase, lowercase, numbers and special characters.\",\n \"ChangePassword.ChangePassword_EmptyUsernameOrEmail\": \"Username Or Email must be provided.\",\n \"ChangePassword.ChangePassword_EmptyCurrentPassword\": \"Current password must be provided.\",\n \"ChangePassword.ChangePassword_CurrentAndNewPasswordEquivalent\": \"Current and new password must not match.\",\n \"ChangePassword.Server_error_alert\": \"There is an error on the server\",\n\n \"Callback.Error_title\": \"There is an error on the server\",\n \"Callback.No_access_token_was_provided\": \"No accessToken was provided. Please try again or contact your administrator\",\n \"Error.Non_existent_external_user_error_title\": \"Your account is not set up.\",\n \"Error.Non_existent_external_user_error_response\": \"Contact your systems administrator to create your account.\",\n \"Error.External_user_does_not_match_error_response\": \"Authenticated user does not match initiating user.\",\n\n \"Logout.Server_error_alert\": \"There is an error on the server\",\n \"Logout.Server_try_again\": \"Please try again or contact your administrator.\",\n};\n\nexport default messages;\n","const messages = {\n PageTitle: \"Connexion iQmetrix\",\n CovaPageTitle: \"Connexion COVA\",\n\n \"Login.Next\": \"Suivant\",\n \"Login.Sign_in_Title\": \"Ouverture de session\",\n \"Login.Username_or_Email\": \"Nom d'utilisateur ou courriel\",\n\n \"ForgotPassword.Cancel\": \"Annuler\",\n \"ForgotPassword.Email_address\": \"Adresse de courriel\",\n\n \"ForgotPassword.Instructions.Please_enter_the_email_address\":\n \"Veuillez saisir l'adresse de courriel associée à votre compte. Nous vous enverrons ensuite des instructions pour réinitialiser votre mot de passe.\",\n \"ForgotPassword.Instructions.For_further_assistance\": \"Pour obtenir de l'aide, veuillez contacter votre administrateur Hub.\",\n\n \"ForgotPassword.Alert_message\": \"Si un compte existe, vous recevrez un courriel comprenant votre mot de passe temporaire.\",\n \"ForgotPassword.Reset_Password_Button\": \"Réinitialisez le mot de passe\",\n \"ForgotPassword.Reset_password_Title\": \"Réinitialisez le mot de passe\",\n\n \"Credentials.Error.The_credentials_you_have_entered_are_incorrect\": \"Les informations d'identification que vous avez saisies sont incorrectes.\",\n \"Credentials.Error.Please_try_again\": \"Veuillez réessayer.\",\n \"Credentials.Error.UserLockedTitle\": \"Votre compte est bloqué\",\n \"Credentials.Error.User_is_locked\": \"Veuillez contacter votre administrateur pour débloquer votre compte\",\n\n \"Credentials.Forgot_password\": \"Mot de passe oublié\",\n \"Credentials.Password\": \"Mot de passe\",\n \"Credentials.Sign_in_button\": \"Ouverture de session\",\n \"Credentials.Sign_in_title\": \"Ouverture de session\",\n \"Credentials.Username_change\": \"Modifiez\",\n\n \"ChangePassword.Cancel\": \"Annuler\",\n \"ChangePassword.Change_password_button\": \"Modifiez le mot de passe\",\n \"ChangePassword.Change_password_title\": \"Modifiez le mot de passe\",\n \"ChangePassword.Confirm_password\": \"Confirmez le mot de passe\",\n \"ChangePassword.Current_password\": \"Mot de passe actuel\",\n \"ChangePassword.New_password\": \"Nouveau mot de passe\",\n \"ChangePassword.Your_current_password_is_temporary\": \"Votre mot de passe actuel est temporaire et doit être modifié.\",\n \"ChangePassword.Your_password_was_reset\": \"Votre mot de passe a été réinitialisé. Vous pouvez vous connecter avec votre nouveau mot de passe.\",\n \"ChangePassword.Your_passwords_must_match\": \"Vos mots de passe doivent correspondre.\",\n \"ChangePassword.ChangePassword_IncorrectPassword\": \"Le mot de passe actuel est incorrect.\",\n \"ChangePassword.ChangePassword_EmptyNewPassword\": \"Le mot de passe ne doit pas être vide.\",\n \"ChangePassword.ChangePassword_NewAndTempPasswordEquivalent\": \"Le nouveau mot de passe ne peut pas être le même que le mot de passe temporaire.\",\n \"ChangePassword.ChangePassword_PasswordStrength\": \"Votre nouveau mot de passe doit comporter au moins {} caractères.\",\n \"ChangePassword.ChangePassword_PasswordMinimumRevisions\": \"Votre nouveau mot de passe doit être différent de vos {} mots de passe précédents.\",\n \"ChangePassword.ChangePassword_PasswordMinimumRevisions_Multiple\": \"Votre nouveau mot de passe doit être différent de votre ancien mot de passe.\",\n \"ChangePassword.ChangePassword_PasswordComplexity\":\n \"Votre nouveau mot de passe doit comporter au moins un caractère {} parmi les suivants : majuscules, minuscules, chiffres et caractères spéciaux.\",\n \"ChangePassword.ChangePassword_EmptyUsernameOrEmail\": \"Le nom d'utilisateur ou le courriel doit être fourni.\",\n \"ChangePassword.ChangePassword_EmptyCurrentPassword\": \"Le mot de passe actuel doit être fourni.\",\n \"ChangePassword.ChangePassword_CurrentAndNewPasswordEquivalent\": \"Le mot de passe actuel et le nouveau ne doivent pas correspondre.\",\n \"ChangePassword.Server_error_alert\": \"Il y a une erreur de serveur\",\n\n \"Callback.Error_title\": \"Il y a une erreur de serveur\",\n \"Callback.No_access_token_was_provided\": \"Aucun accessToken n'a été fourni. Veuillez réessayer ou contacter votre administrateur\",\n \"Error.Non_existent_external_user_error_title\": \"Votre compte n'est pas configuré.\",\n \"Error.Non_existent_external_user_error_response\": \"Contactez votre administrateur système pour créer votre compte.\",\n \"Error.External_user_does_not_match_error_response\": \"Authenticated user does not match initiating user.\",\n\n \"Logout.Server_error_alert\": \"Il y a une erreur de serveur\",\n \"Logout.Server_try_again\": \"Veuillez réessayer ou contacter votre administrateur\",\n};\n\nexport default messages;\n","const messages = {\n PageTitle: \"Ingresar a iQmetrix\",\n CovaPageTitle: \"Ingresar a COVA\",\n\n \"Login.Next\": \"Siguiente\",\n \"Login.Sign_in_Title\": \"Ingresar\",\n \"Login.Username_or_Email\": \"Nombre de Usuario o Correo Electrónico\",\n\n \"ForgotPassword.Cancel\": \"Cancelar\",\n \"ForgotPassword.Email_address\": \"Correo Electrónico\",\n\n \"ForgotPassword.Instructions.Please_enter_the_email_address\":\n \"Por favor escriba la dirección de correo electrónico asociada a su cuenta y le enviaremos instrucciones para configurar su contraseña nuevamente\",\n \"ForgotPassword.Instructions.For_further_assistance\": \"Para obtener más ayuda, por favor contacte con su Administrador de Hub\",\n\n \"ForgotPassword.Alert_message\": \"Si es que su cuenta existe, recibirá un correo electrónico con su contraseña temporal.\",\n \"ForgotPassword.Reset_Password_Button\": \"Recuperar Contraseña\",\n \"ForgotPassword.Reset_password_Title\": \"Recuperar Contraseña\",\n\n \"Credentials.Error.The_credentials_you_have_entered_are_incorrect\": \"Los datos de usuario que ingreso son incorrectos.\",\n \"Credentials.Error.Please_try_again\": \"Por favor inténtelo de nuevo.\",\n \"Credentials.Error.UserLockedTitle\": \"Su cuenta ha sido bloqueada\",\n \"Credentials.Error.User_is_locked\": \"Por favor contacte al administrador para desbloquear su cuenta\",\n\n \"Credentials.Forgot_password\": \"¿Olvidó su contraseña?\",\n \"Credentials.Password\": \"Contraseña\",\n \"Credentials.Sign_in_button\": \"Registro\",\n \"Credentials.Sign_in_title\": \"Registro\",\n \"Credentials.Username_change\": \"Cambiar\",\n\n \"ChangePassword.Cancel\": \"Cancelar\",\n \"ChangePassword.Change_password_button\": \"Cambiar Contraseña\",\n \"ChangePassword.Change_password_title\": \"Cambiar Contraseña\",\n \"ChangePassword.Confirm_password\": \"Confirmar contraseña\",\n \"ChangePassword.Current_password\": \"Contraseña actual\",\n \"ChangePassword.New_password\": \"Nueva contraseña\",\n \"ChangePassword.Your_current_password_is_temporary\": \"Su contraseña actual es temporal y debe ser cambiada.\",\n \"ChangePassword.Your_password_was_reset\": \"Su contraseña ha sido actualizada. Ingrese a su cuenta usando su nueva contraseña.\",\n \"ChangePassword.Your_passwords_must_match\": \"Las contraseñas deben ser iguales.\",\n \"ChangePassword.ChangePassword_IncorrectPassword\": \"La contraseña actual es incorrecta.\",\n \"ChangePassword.ChangePassword_EmptyNewPassword\": \"La contraseña no puede estar vacía.\",\n \"ChangePassword.ChangePassword_NewAndTempPasswordEquivalent\": \"La nueva contraseña no puede ser igual a la contraseña temporal.\",\n \"ChangePassword.ChangePassword_PasswordStrength\": \"La nueva contraseña debe tener al menos {} caracteres.\",\n \"ChangePassword.ChangePassword_PasswordMinimumRevisions\": \"La nueva contraseña debe ser diferente de al menos {} contraseñas anteriores.\",\n \"ChangePassword.ChangePassword_PasswordMinimumRevisions_Multiple\": \"La nueva contraseña debes ser diferente de su contraseña anterior\",\n \"ChangePassword.ChangePassword_PasswordComplexity\": \"La nueva contraseña debe tener al menos un caracter de {} de los siguientes: mayúscula, minúscula, números y caracteres especiales. \",\n \"ChangePassword.ChangePassword_EmptyUsernameOrEmail\": \"Debe escribir un nombre de usuario o correo electrónico.\",\n \"ChangePassword.ChangePassword_EmptyCurrentPassword\": \"Debe escribir la contraseña.\",\n \"ChangePassword.ChangePassword_CurrentAndNewPasswordEquivalent\": \"La contraseña actual y la nueva no pueden ser iguales.\",\n \"ChangePassword.Server_error_alert\": \"Hubo un error con el servidor\",\n\n \"Callback.Error_title\": \"Hubo un error con el servidor\",\n \"Callback.No_access_token_was_provided\": \"No se ha proveído un accessToken. Por favor intente nuevamente o contacte a su administrador\",\n \"Error.Non_existent_external_user_error_title\": \"Su cuenta no ha sido configurada todavía. \",\n \"Error.Non_existent_external_user_error_response\": \"Contactese con el administrador del sistema para crear una cuenta.\",\n \"Error.External_user_does_not_match_error_response\": \"Authenticated user does not match initiating user.\",\n\n \"Logout.Server_error_alert\": \"Hubo un error con el servidor\",\n \"Logout.Server_try_again\": \"Por favor intente nuevamente o contacte a su administrador\",\n};\n\nexport default messages;\n","import { atom } from 'recoil';\nimport { AlertMessage } from '../../models/messaging';\n\ntype AlertMessageType = AlertMessage | null;\nexport const changePasswordAlertMsgState = atom({\n key: 'changePasswordAlertMsgState',\n default: null as AlertMessageType\n})","import { atom } from 'recoil';\nimport { ClientType } from \"models/ClientType\";\n\nexport const clientState = atom({\n key: 'client', // unique ID (with respect to other atoms/selectors)\n default: ClientType.web, // default value (aka initial value)\n});","import { atom } from 'recoil';\n\nexport const clientKeyState = atom({\n key: 'clientKey', // unique ID (with respect to other atoms/selectors)\n default: 'iQmetrixHub', // default value (aka initial value)\n});","import { atom } from 'recoil';\r\nimport { AlertMessage } from '../../models/messaging';\r\n\r\ntype AlertMessageType = AlertMessage | null;\r\nexport const credentialAlertMsgState = atom({\r\n key: 'credentialAlertMsgState',\r\n default: null as AlertMessageType\r\n})","import { atom } from 'recoil';\n\nexport const forceChangePasswordState = atom({\n key: 'forceChangePassword',\n default: false\n});","import { atom } from 'recoil';\r\n\r\nexport const loginAlertMsgState = atom({\r\n key: 'loginAlertMsgState',\r\n default: '',\r\n})","import { atom } from 'recoil';\n\nexport const redirectUrlState = atom({\n key: 'redirectUrl', \n default: ''\n});","import { atom } from 'recoil';\n\nexport const showChangeUsernameState = atom({\n key: 'showChangeUsernameBtn',\n default: true\n});","import { atom } from 'recoil';\n\nexport const showForgotPasswordState = atom({\n key: 'showForgotPasswordBtn',\n default: true\n});","import { atom } from 'recoil';\n\nexport const useModalViewState = atom({\n key: 'useModalView',\n default: true\n});","import ReactGA from \"react-ga\";\nimport { captureMessage, captureException, setUser, Severity } from \"@sentry/react\";\n\nexport const trackPage = (currentPage: string) => {\n ReactGA.set({ currentPage });\n ReactGA.pageview(currentPage);\n};\n\nexport const reportUIEvent = (categoryName: string, actionName: string, labelValue: string, isNonInteraction = false) => {\n ReactGA.event({\n // Required: A top level category for these events. E.g. 'User', 'Navigation', 'App Editing', etc\n category: categoryName,\n // Required: A description of the behaviour. E.g. 'Clicked Delete', 'Added a component', 'Deleted account', etc.\n action: actionName,\n // Optional. More precise labelling of the related action. E.g. alongside the 'Added a component' action, we could add the name of a component as the label. E.g. 'Survey', 'Heading', 'Button', etc.\n label: labelValue.toLocaleLowerCase(),\n // Optional. If an event is not triggered by a user interaction, but instead by our code (e.g. on page load), it should be flagged as a nonInteraction event to avoid skewing bounce rate data.\n nonInteraction: isNonInteraction,\n });\n};\n\nexport const setUsernameToReport = (username: string): void => {\n setUser({ username });\n};\n\nexport const reportException = (exception: any, additionalData: Record) =>\n captureException(exception, (scope) => {\n scope.setExtras(additionalData);\n return scope;\n });\n\nexport const reportWarning = (actionName: string, additionalData: Record) =>\n captureMessage(actionName, (scope) => {\n scope.setLevel(Severity.Warning);\n scope.setExtras(additionalData);\n return scope;\n });\n","import { atom } from 'recoil';\nimport { setUsernameToReport } from 'shared/analytics';\n\nexport const usernameState = atom({\n key: 'username', // unique ID (with respect to other atoms/selectors)\n default: '', // default value (aka initial value)\n effects_UNSTABLE: [\n ({onSet}) => {\n onSet(newUsername => {\n if (typeof(newUsername) === \"string\") {\n setUsernameToReport(newUsername);\n }\n });\n }\n ]\n});","import { atom } from 'recoil';\n\nexport const isUsernameSetByParamState = atom({\n key: 'isUsernameSetByParam', // unique ID (with respect to other atoms/selectors)\n default: false, // default value (aka initial value)\n});","import { atom } from 'recoil';\nimport { AlertMessage } from '../../models/messaging';\n\ntype AlertMessageType = AlertMessage | null;\nexport const logoutAlertMsgState = atom({\n key: 'logoutAlertMsgState',\n default: null as AlertMessageType\n})","import { atom } from 'recoil';\nimport { HttpErrorResult } from '../../models/http/http';\n\ntype PasswordErrorState = HttpErrorResult | null;\nexport const showChangePasswordErrorState = atom({\n key: 'showChangePasswordError',\n default: null as PasswordErrorState\n});","import { atom } from 'recoil';\n\nexport const userIdState = atom({\n key: 'userId',\n default: 0 // default value (aka initial value)\n});","import React, { useEffect } from \"react\";\nimport { RecoilState, useRecoilValue } from \"recoil\";\n\ninterface IObserver {\n node: RecoilState;\n onChange: (value: any) => void;\n}\n\nexport const RecoilObserver = (props: IObserver) => {\n const { node, onChange } = props;\n\n const value = useRecoilValue(node);\n \n useEffect(() => { onChange(value) }, [onChange, value]);\n\n return null;\n};","export enum LoginType {\n IQ = 0,\n OpenID = 1,\n}","export const getDomainFromUsername = (username: string) => {\n let emailDomain = username;\n const atSignPosition = username.search('@');\n if (atSignPosition > 0) {\n emailDomain = username.slice(atSignPosition+1);\n }\n\n return emailDomain;\n};","import { getUniversalLoginV1Endpoint, getAuthEndpoint } from \"shared\";\n\nexport const getLoginConfigurationUrl = (username : string, clientKey: string, redirectUrl: string) => {\n return `${getUniversalLoginV1Endpoint()}/loginconfiguration?usernameOrEmail=${username}&clientKey=${clientKey}&clientReturnUrl=${redirectUrl}`;\n};\n\nexport const getCredentialLoginUrl = () => {\n return `${getUniversalLoginV1Endpoint()}/oauth2/token`;\n}\n\nexport const getChangePasswordUrl = () => {\n return `${getUniversalLoginV1Endpoint()}/account/change-password`;\n}\n\nexport const getForceChangePasswordUrl = () => {\n return `${getUniversalLoginV1Endpoint()}/account/force-change-password`;\n}\n\nexport const getForgotPasswordUrl = () => {\n return `${getUniversalLoginV1Endpoint()}/account/forgot-password`;\n}\n\nexport const getLogoutUrl = (redirectUrl: string) => {\n return `${getUniversalLoginV1Endpoint()}/logout?returnUrl=${redirectUrl}`;\n}\n\nexport const getAuthRevokeCookieUrl = () => {\n return `${getAuthEndpoint()}/account/revoke-cookie`;\n}\n\nexport const getLoginRedirectUrl = (returnUrl: string) => {\n return `${getUniversalLoginV1Endpoint()}/login/get-redirect-url?returnUrl=${returnUrl}`;\n}","import { reportWarning, reportException } from \"shared/analytics\";\nimport { HttpErrorInformation, HttpErrorResult, HttpObjectResult, HttpRequest, HttpResult, HttpRedirectResult } from \"../../models/http/http\";\n\nexport interface HttpError {\n message: string;\n errorInformation: HttpErrorInformation[];\n innerError: any;\n stackTrace: string;\n}\n\nexport const makeHttpCall = async (request: HttpRequest): Promise => {\n const reqInit = getNewRequestInit(request);\n try {\n const response = await fetch(request.url, reqInit);\n\n return response.ok ? { hasError: false } : await handleNotOkResponse(request, response);\n } catch (error) {\n reportException(error, {\n url: request.url,\n method: request.method,\n });\n return getFailedResult();\n }\n};\n\nexport const makeHttpCallWithResponse = async (request: HttpRequest): Promise> => {\n const reqInit = getNewRequestInit(request);\n try {\n const response = await fetch(request.url, reqInit);\n\n return response.ok ? await handleOkResponse(response) : await handleNotOkResponse(request, response);\n } catch (error) {\n reportException(error, {\n url: request.url,\n method: request.method,\n headers: reqInit.headers?.toString() || \"\",\n });\n\n return getFailedResult();\n }\n};\n\nconst getNewRequestInit = (request: HttpRequest): RequestInit => {\n const reqHeaders = new Headers();\n reqHeaders.append(\"Content-Type\", \"application/json\");\n\n if (request.accessToken !== undefined) {\n reqHeaders.append(\"Authorization\", \"Bearer \" + request.accessToken);\n }\n\n const reqInit = {\n method: request.method,\n headers: reqHeaders,\n credentials: request.credentials\n } as RequestInit;\n\n if (request.method === \"POST\") {\n reqInit.body = request.body;\n }\n\n return reqInit;\n};\n\nconst getFailedResult = (): HttpResult => ({ hasError: true });\n\nconst handleOkResponse = async (response: Response): Promise> => {\n if (response.redirected) {\n return {\n hasError: false,\n url: response.url,\n } as HttpRedirectResult;\n }\n\n return {\n hasError: false,\n value: await response.json(),\n } as HttpObjectResult;\n};\n\nconst handleNotOkResponse = async (request: HttpRequest, response: Response): Promise => {\n const failedResult = getFailedResult();\n\n if (response.status !== 400) {\n reportFailedHttpResponse(request, response, \"\");\n return { ...failedResult, statusCode: response.status, errorType: [], message: \"\" } as HttpErrorResult;\n }\n\n try {\n const httpError = (await response.json()) as HttpError;\n return {\n ...failedResult,\n message: httpError.message,\n errorType: httpError.errorInformation,\n statusCode: response.status,\n } as HttpErrorResult;\n } catch (error) {\n reportException(request, { error: (error as any).toString() });\n return failedResult;\n }\n};\n\nconst reportFailedHttpResponse = (request: HttpRequest, response: Response, responseMessage: string) =>\n reportWarning(\"HttpRequest\", {\n url: request.url,\n method: request.method,\n response: response.status.toString(),\n responseMessage: responseMessage,\n });\n","import {\n getLoginConfigurationUrl,\n getCredentialLoginUrl,\n getChangePasswordUrl,\n getForceChangePasswordUrl,\n getForgotPasswordUrl,\n getLogoutUrl,\n getAuthRevokeCookieUrl,\n getLoginRedirectUrl\n} from \"shared/client/universallogin-client\";\nimport { makeHttpCall, makeHttpCallWithResponse } from \"../../shared/http/httpClient\";\nimport { HttpRequest, HttpObjectResult, HttpResult, HttpErrorResult } from \"models/http/http\";\nimport {\n ChangePasswordRequest,\n ChangePasswordResource,\n ForceChangePasswordRequest,\n ForceChangePasswordResource,\n ForgotPasswordResource,\n ForgotPasswordRequest,\n LoginConfigurationResource,\n TokenAndUserIdResource,\n TokenAndUserIdResourceRequest,\n LogoutResource,\n LoginRedirectUrlResource\n} from \"models\";\n\nconst AUTH_FORCE_CHANGE_PASSWORD_ERROR_CODE = \"AuthForcePasswordChangeErrorCode\";\nconst AUTH_USER_LOCKED_ERROR_CODE = \"AuthUserLockedErrorCode\";\n\nconst doAuthConfig = async (username: string, clientKey: string, redirectUrl: string): Promise> => {\n const request = {\n url: getLoginConfigurationUrl(username, clientKey, redirectUrl),\n method: \"GET\",\n } as HttpRequest;\n return (await makeHttpCallWithResponse(request)) as HttpObjectResult;\n};\n\nconst doCredentialLogin = async (usernameorEmail: string, password: string, clientKey: string, redirectUrl: string): Promise> => {\n const tokenAndUserIdResourceRequest: TokenAndUserIdResourceRequest = {\n UsernameOrEmailAddress: usernameorEmail,\n Password: password,\n ClientKey: clientKey,\n RedirectUrl: redirectUrl,\n };\n const request = {\n url: getCredentialLoginUrl(),\n method: \"POST\",\n body: JSON.stringify(tokenAndUserIdResourceRequest),\n } as HttpRequest;\n\n return await makeHttpCallWithResponse(request);\n};\n\nconst doForceChangePassword = async (usernameOrEmail: string, currentPassword: string, newPassword: string, userId: number): Promise> => {\n const forceChangePasswordRequest: ForceChangePasswordRequest = { usernameOrEmail, currentPassword, newPassword, userId };\n const request = {\n url: getForceChangePasswordUrl(),\n method: \"POST\",\n body: JSON.stringify(forceChangePasswordRequest),\n } as HttpRequest;\n\n return await makeHttpCallWithResponse(request);\n};\n\nconst doChangePassword = async (accessToken: string, currentPassword: string, newPassword: string): Promise> => {\n const changePasswordRequest: ChangePasswordRequest = { currentPassword, newPassword };\n const request = {\n url: getChangePasswordUrl(),\n method: \"POST\",\n body: JSON.stringify(changePasswordRequest),\n accessToken,\n } as HttpRequest;\n return await makeHttpCallWithResponse(request);\n};\n\nconst doForgotPassword = async (email: string): Promise> => {\n const forgotPasswordRequest: ForgotPasswordRequest = { email };\n const request = {\n url: getForgotPasswordUrl(),\n method: \"POST\",\n body: JSON.stringify(forgotPasswordRequest),\n } as HttpRequest;\n return (await makeHttpCall(request)) as HttpObjectResult;\n};\n\nconst doLogout = async (accessToken: string, redirectUrl: string): Promise | HttpErrorResult> => {\n const request = {\n url: getLogoutUrl(redirectUrl),\n method: \"GET\",\n accessToken,\n } as HttpRequest;\n\n return (await makeHttpCallWithResponse(request)) as HttpObjectResult;\n};\n\nconst doRevokeCookie = async (): Promise> => {\n const request = {\n url: getAuthRevokeCookieUrl(),\n method: \"POST\",\n credentials: \"include\"\n } as HttpRequest;\n\n return (await makeHttpCall(request)) as HttpObjectResult;\n};\n\nconst doGetLoginRedirectUrl = async (returnUrl: string): Promise> => {\n const request = {\n url: getLoginRedirectUrl(returnUrl),\n method: \"GET\",\n } as HttpRequest;\n\n return await makeHttpCallWithResponse(request);\n};\n\nexport { doAuthConfig, doCredentialLogin, doChangePassword, doForceChangePassword, doForgotPassword, doLogout, doRevokeCookie, doGetLoginRedirectUrl, AUTH_FORCE_CHANGE_PASSWORD_ERROR_CODE, AUTH_USER_LOCKED_ERROR_CODE };\n","import { useIntl } from \"react-intl\";\nimport type { Messages } from \"shared\";\n\ntype MessageFormatPrimitiveValue = string | number | boolean | null | undefined;\n\nexport function useLocalizedMessage(id: keyof Messages, values?: Record) {\n const intl = useIntl();\n return intl.formatMessage({ id }, values);\n}\n","import { ClientType } from \"../../models\";\n\nexport const mapQueryParameterToClientType = (): ClientType => {\n const queryParams = new URLSearchParams(window.location.search);\n const clientFromQuery = queryParams.get(\"client\") || \"\";\n const client: ClientType = clientFromQuery in ClientType ? (clientFromQuery as ClientType) : ClientType.web;\n return client;\n};\n","import { AppError } from \"models\";\nimport React from \"react\";\nimport { Route } from \"react-router-dom\";\nimport { MissingQueryParamMessage } from \"shared\";\n\nexport interface EnforcedQueryParamRouteProps {\n exact?: boolean;\n path: string;\n children: React.ReactNode;\n requiredQueryParams: string[]\n}\n\nexport const EnforcedQueryParamRoute = ({ children, requiredQueryParams, ...rest}: EnforcedQueryParamRouteProps) => {\n\n const queryParams = new URLSearchParams(window.location.search);\n for (const requiredQueryParam of requiredQueryParams) {\n if (!queryParams.has(requiredQueryParam)) {\n throw { message: MissingQueryParamMessage } as AppError;\n }\n }\n\n return (\n \n {children}\n \n )\n}","export const MissingQueryParamMessage = \"We are missing important information to perform this action.\";","import { getEnvironmentSuffix } from \"../get-environment\";\n\ntype BrandDomainName = \"iqmetrix\" | \"covasoft\";\nexport const getHubUrl = (domainName: BrandDomainName) => {\n const envSuffix = getEnvironmentSuffix();\n\n return `https://hub${envSuffix}.${domainName}.net/`;\n};\n","import { getHubUrl } from \"./hub\";\nimport { reportUIEvent } from \"../analytics\";\n\nconst sensitiveQueryParams: string[] = [\"accessToken\"];\n\nexport const redirectExternalUrl = (url: string): void => {\n const reportUrl = new URL(url);\n sensitiveQueryParams.forEach((element) => {\n if (reportUrl.searchParams.has(element)) {\n reportUrl.searchParams.delete(element);\n }\n });\n reportUIEvent(\"Redirect\", \"Redirect to external URL\", reportUrl.toString(), true);\n\n window.location.assign(url);\n};\n\nexport const redirectToHubUrl = (): void => {\n const url = window.location.hostname.toLowerCase().includes(\"cova\") ? getHubUrl(\"covasoft\") : getHubUrl(\"iqmetrix\");\n reportUIEvent(\"Redirect\", \"Redirect to Hub URL\", url, true);\n window.location.assign(url);\n};\n","const emailRegex = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/g;\n\nexport const isUsernameValidEmail = (username: string) => (username.match(emailRegex)?.length || 0) > 0;\n","import { useSetRecoilState } from \"recoil\";\nimport { clientState, clientKeyState, redirectUrlState, usernameState } from \"shared/state\";\nimport { ClientType } from \"models/ClientType\";\nimport { mapQueryParameterToClientType } from \"../../shared/utils/map-query-to-client-type\";\nimport { redirectToHubUrl } from \"../../shared/utils\";\n\nexport const parseQueryParam = (paramName: string) => {\n const queryParams = new URLSearchParams(window.location.search);\n return queryParams.get(paramName);\n};\n\nexport const useParseClientQueryParam = () => {\n const setClientStateState = useSetRecoilState(clientState);\n const action = () => {\n const clientType = mapQueryParameterToClientType();\n setClientStateState(clientType);\n };\n\n return action;\n};\n\nexport const useParseClientKeyQueryParam = () => {\n const setClientKeyStateState = useSetRecoilState(clientKeyState);\n\n const action = () => {\n const newClientKey = parseQueryParam(\"clientKey\");\n if (newClientKey != null) {\n setClientKeyStateState(newClientKey);\n }\n };\n\n return action;\n};\n\nexport const useParseUsernameQueryParam = () => {\n const setUsernameStateState = useSetRecoilState(usernameState);\n\n const action = () => {\n const newUsername = parseQueryParam(\"username\");\n if (newUsername != null) {\n setUsernameStateState(newUsername);\n }\n };\n\n return action;\n};\n\nexport const useParseRedirectUrlQueryParam = () => {\n const setRedirectUrlStateState = useSetRecoilState(redirectUrlState);\n\n const action = () => {\n const newRedirectUrl = parseQueryParam(\"redirectUrl\");\n if (newRedirectUrl != null) {\n setRedirectUrlStateState(newRedirectUrl);\n }\n };\n\n return action;\n};\n\nexport const useRedirectToHubIfMissingQueryParams = () => {\n const action = () => {\n const queryParams = new URLSearchParams(window.location.search);\n if (!queryParams.has(\"redirectUrl\") && mapQueryParameterToClientType() === ClientType.web) {\n redirectToHubUrl();\n }\n };\n\n return action;\n};\n","import React from \"react\";\nimport { Col } from \"@iqmetrix/antd\";\n\nexport const SidePane: React.FC = (props) => {\n return (\n \n { props.children }\n \n );\n};\nexport default SidePane;","import React from \"react\";\nimport { Row } from \"@iqmetrix/antd\";\nimport { SpacingBaseLarge, ColorGrey800, SpacingLayoutXxlarge } from \"@iqmetrix/style-tokens\";\n\nexport const TopBar: React.FC = (props) => {\n return (\n \n { props.children }\n \n );\n};\nexport default TopBar;","import React from \"react\";\nimport { Row } from \"@iqmetrix/antd\";\nimport SidePane from \"../side-pane/SidePane\";\nimport CentralPane from \"../central-pane/CentralPane\";\nimport TopBar from \"../top-bar/TopBar\";\n\nexport const PageLayout: React.FC = (props) => {\n return (\n
\n {window.location.hostname.toLowerCase().includes(\"cova\") ? : }\n \n \n {props.children}\n \n \n
\n );\n};\nexport default PageLayout;\n","import React from \"react\";\nimport { Row } from \"@iqmetrix/antd\";\nimport { PaddingPageheaderVertical } from \"@iqmetrix/style-tokens\";\n\nexport const NonBorderLayout: React.FC = (props) => {\n return (\n <>\n \n { props.children }\n \n \n );\n};\nexport default NonBorderLayout;","import React from \"react\";\nimport { Card } from \"@iqmetrix/antd\";\n\nexport const BorderLayout: React.FC = (props) => {\n return (\n \n {props.children}\n \n )\n};\n\nexport default BorderLayout;","import React from \"react\";\nimport { Row } from \"@iqmetrix/antd\";\nimport CentralPane from \"../central-pane/CentralPane\";\n\nexport const EmbeddedLayout: React.FC = (props) => {\n return (\n
\n \n {props.children}\n \n
\n );\n};\nexport default EmbeddedLayout;\n","import PageLayout from \"../page-layout/PageLayout\";\nimport NonBorderLayout from \"../page-layout/NonBorderLayout\";\nimport BorderLayout from \"../page-layout/BorderLayout\";\nimport EmbeddedLayout from \"../page-layout/EmbeddedLayout\";\nimport { ClientType } from \"models/ClientType\";\nimport React, { PropsWithChildren } from \"react\";\n\nexport interface ViewModeHandlerProps {\n client: ClientType;\n}\n\nexport const ViewModeHandler: React.FC> = ({ client, children }) =>\n client === ClientType.web ? (\n \n {children}\n \n ) : (\n \n {children}\n \n );\n","import React from \"react\";\nimport { Form, Input, Typography } from \"@iqmetrix/antd\";\nimport { RuleObject } from \"antd/lib/form\";\nimport { atom, useRecoilState, useRecoilValue, useSetRecoilState } from \"recoil\";\nimport { doChangePassword, doForceChangePassword, doRevokeCookie, doGetLoginRedirectUrl } from \"providers/auth-provider\";\nimport { useHistory } from \"react-router-dom\";\nimport { showChangePasswordErrorState, clientState, credentialAlertMsgState, forceChangePasswordState, usernameState, redirectUrlState, clientKeyState, userIdState } from \"../../shared/state\";\nimport { reportUIEvent } from \"shared/analytics\";\nimport { useLocalizedMessage, useParseClientKeyQueryParam, useParseUsernameQueryParam } from \"../../hooks\";\nimport { redirectExternalUrl } from \"../../shared/utils/redirect-to-external\";\nimport { getDomainFromUsername } from \"../../shared/get-domain\";\nimport { ViewModeHandler } from \"../view-mode-handler\";\nimport { StyledSpace, StyledForm, StyledButton, StyledRightAlignCol } from \"components/custom-styled-components\";\nimport { HttpErrorResult, HttpObjectResult } from \"models/http/http\";\nimport { ChangePasswordError } from \"./\";\nimport { ClientType, LoginRedirectUrlResource } from \"models\";\n\nconst { Text, Title } = Typography;\n\nconst currentPasswordState = atom({\n key: \"currentPasswordState\",\n default: \"\",\n});\n\nconst newPasswordState = atom({\n key: \"newPasswordState\",\n default: \"\",\n});\n\nconst confirmPasswordState = atom({\n key: \"confirmPasswordState\",\n default: \"\",\n});\n\nconst changePasswordBtnLoadingState = atom({\n key: \"changePasswordBtnLoadingState\",\n default: false,\n});\n\nexport const ChangePassword: React.FC = () => {\n const params = new URLSearchParams(window.location.search);\n const accessToken = params.get(\"accessToken\") as string;\n const clientKey = useRecoilValue(clientKeyState);\n\n const parseClientKeyQueryParam = useParseClientKeyQueryParam();\n const parseUsernameQueryParam = useParseUsernameQueryParam();\n parseClientKeyQueryParam();\n parseUsernameQueryParam();\n\n const history = useHistory();\n const [currentPassword, setCurrentPassword] = useRecoilState(currentPasswordState);\n const [newPassword, setNewPassword] = useRecoilState(newPasswordState);\n const [confirmPassword, setConfirmPassword] = useRecoilState(confirmPasswordState);\n const [changePasswordBtnIsLoading, setChangePasswordBtnLoading] = useRecoilState(changePasswordBtnLoadingState);\n const [username, setUsername] = useRecoilState(usernameState);\n const setCredentialAlertMsg = useSetRecoilState(credentialAlertMsgState);\n const client = useRecoilValue(clientState);\n const [forceChangePassword, setForceChangePasswordState] = useRecoilState(forceChangePasswordState);\n const setShowChangePasswordErrorState = useSetRecoilState(showChangePasswordErrorState);\n const redirectUrl = useRecoilValue(redirectUrlState);\n const [userId, setUserId] = useRecoilState(userIdState);\n\n const confirmPasswordMatch = (value?: string) => value && value.trim().length > 0 && value === newPassword;\n const isChangePasswordBtnEnabled = currentPassword && newPassword && confirmPassword && confirmPasswordMatch(confirmPassword);\n const isCancelBtnHidden = client != ClientType.web;\n const [form] = Form.useForm();\n\n const yourPasswordWasReset = useLocalizedMessage(\"ChangePassword.Your_password_was_reset\");\n const yourPasswordsMustMatch = useLocalizedMessage(\"ChangePassword.Your_passwords_must_match\");\n\n const redirectToSignIn = (username: string, loginRedirectUrl: string) => {\n setUsername(username);\n setCredentialAlertMsg({\n type: \"success\",\n message: yourPasswordWasReset,\n });\n\n history.push(`/credentials?redirectUrl=${loginRedirectUrl}&clientKey=${clientKey}&username=${username}&client=${client}`);\n };\n\n const onCancelButtonClicked = () => {\n reportUIEvent(\"User\", \"Clicked Cancel Change Password\", getDomainFromUsername(username));\n redirectExternalUrl(redirectUrl);\n };\n\n const onChangePasswordClicked = async () => {\n setChangePasswordBtnLoading(true);\n reportUIEvent(\"User\", \"Clicked Change Password\", getDomainFromUsername(username));\n\n const changePasswordResult = forceChangePassword ? await doForceChangePassword(username, currentPassword, newPassword, userId) : await doChangePassword(accessToken, currentPassword, newPassword);\n\n setChangePasswordBtnLoading(false);\n\n if (changePasswordResult.hasError) {\n setShowChangePasswordErrorState(changePasswordResult as HttpErrorResult);\n } else {\n setUserId(0);\n setForceChangePasswordState(false);\n await doRevokeCookie();\n const loginRedirectUrlResult = await doGetLoginRedirectUrl(redirectUrl);\n if (loginRedirectUrlResult.hasError) {\n redirectToSignIn(username, redirectUrl);\n }\n else\n {\n const loginRedirectUrlResultValue = (loginRedirectUrlResult as HttpObjectResult).value;\n redirectToSignIn(username, loginRedirectUrlResultValue.redirectUrl);\n }\n }\n };\n\n const confirmPasswordValidator = (rule: RuleObject, value?: string) => (confirmPasswordMatch(value) ? Promise.resolve() : Promise.reject(yourPasswordsMustMatch));\n\n return (\n \n \n {useLocalizedMessage(\"ChangePassword.Change_password_title\")}\n \n \n {useLocalizedMessage(forceChangePassword ? \"ChangePassword.Your_current_password_is_temporary\" : \"ChangePassword.Change_password_title\")}\n \n \n \n setCurrentPassword(e.target.value)} data-testid=\"currentPasswordInput\" autoComplete=\"current-password\" autoFocus />\n \n \n setNewPassword(e.target.value)} data-testid=\"newPasswordInput\" autoComplete=\"new-password\" />\n \n \n setConfirmPassword(e.target.value)} data-testid=\"confirmPasswordInput\" autoComplete=\"new-password\" />\n \n \n \n \n \n \n {useLocalizedMessage(\"ChangePassword.Change_password_button\")}\n \n \n \n \n \n \n );\n};\n\nexport default ChangePassword;","import React, { useEffect } from \"react\";\nimport { useLocalizedMessage } from \"../../hooks\";\nimport { StyledAlert } from \"../custom-styled-components\";\nimport { HttpErrorInformation, RequiredValueInformation, HttpErrorResult } from \"../../models/http/http\";\nimport { useRecoilState, useRecoilValue } from \"recoil\";\nimport { changePasswordAlertMsgState, showChangePasswordErrorState } from \"../../shared/state\";\n\nexport const ChangePasswordError: React.FC = () => {\n const showChangePasswordError = useRecoilValue(showChangePasswordErrorState);\n const [changePasswordAlertMsg, setChangePasswordAlertMsg] = useRecoilState(changePasswordAlertMsgState);\n const genericErrorCode = useLocalizedMessage(\"ChangePassword.Server_error_alert\");\n \n useEffect(() => {\n const errorResult = showChangePasswordError as HttpErrorResult;\n if (errorResult != null) {\n if (errorResult.errorType != null && errorResult.errorType.length > 0) {\n const errorCodes = getErrorCodes(errorResult.errorType);\n setShowErrorMessage(errorCodes);\n } else {\n setShowErrorMessage([genericErrorCode]);\n }\n }\n \n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [showChangePasswordError]);\n\n \n const AUTH_EMPTY_USERNAME_EMAIL = \"ChangePassword_EmptyUsernameOrEmail\";\n const AUTH_EMPTY_CURRENT_PASSWORD_EMAIL = \"ChangePassword_EmptyCurrentPassword\";\n const AUTH_PASSWORD_CURRENT_EQUIVALENT_ERROR_CODE = \"ChangePassword_CurrentAndNewPasswordEquivalent\";\n const AUTH_PASSWORD_INCORRECT_ERROR_CODE = \"ChangePassword_IncorrectPassword\";\n const AUTH_EMPTY_NEW_PASSWORD_ERROR_CODE = \"ChangePassword_EmptyNewPassword\";\n const AUTH_PASSWORD_TEMP_EQUIVALENT_ERROR_CODE = \"ChangePassword_NewAndTempPasswordEquivalent\";\n const AUTH_PASSWORD_STRENGTH_ERROR_CODE = \"ChangePassword_PasswordStrength\";\n const AUTH_PASSWORD_COMPLEXITY_ERROR_CODE = \"ChangePassword_PasswordComplexity\";\n const AUTH_PASSWORD_MINIMUM_REVISIONS_ERROR_CODE = \"ChangePassword_PasswordMinimumRevisions\";\n\n const emptyUsernameOrEmailLocalized = useLocalizedMessage(\"ChangePassword.ChangePassword_EmptyUsernameOrEmail\");\n const emptyCurrentPasswordLocalized = useLocalizedMessage(\"ChangePassword.ChangePassword_EmptyCurrentPassword\");\n const currentNewAreEquivalentLocalized = useLocalizedMessage(\"ChangePassword.ChangePassword_CurrentAndNewPasswordEquivalent\");\n const incorrectPasswordLocalized = useLocalizedMessage(\"ChangePassword.ChangePassword_IncorrectPassword\")\n const emptyNewPasswordLocalized = useLocalizedMessage(\"ChangePassword.ChangePassword_EmptyNewPassword\");\n const newTempAreEquivalentLocalized = useLocalizedMessage(\"ChangePassword.ChangePassword_NewAndTempPasswordEquivalent\");\n const badPasswordStrength = useLocalizedMessage(\"ChangePassword.ChangePassword_PasswordStrength\");\n const passwordTooSimple = useLocalizedMessage(\"ChangePassword.ChangePassword_PasswordComplexity\");\n const cantBeLastPassword = useLocalizedMessage(\"ChangePassword.ChangePassword_PasswordMinimumRevisions\");\n const cantBeLastNumPasswords = useLocalizedMessage(\"ChangePassword.ChangePassword_PasswordMinimumRevisions_Multiple\");\n\n const getErrorCodes = (errorInfos: HttpErrorInformation[]): string[] => {\n const result: string[] = [];\n for(const info of errorInfos) {\n switch (info.type){\n case AUTH_EMPTY_USERNAME_EMAIL:\n result.push(emptyUsernameOrEmailLocalized);\n break;\n case AUTH_EMPTY_CURRENT_PASSWORD_EMAIL:\n result.push(emptyCurrentPasswordLocalized);\n break;\n case AUTH_PASSWORD_CURRENT_EQUIVALENT_ERROR_CODE:\n result.push(currentNewAreEquivalentLocalized);\n break;\n case AUTH_PASSWORD_INCORRECT_ERROR_CODE:\n result.push(incorrectPasswordLocalized);\n break;\n case AUTH_EMPTY_NEW_PASSWORD_ERROR_CODE:\n result.push(emptyNewPasswordLocalized);\n break;\n case AUTH_PASSWORD_TEMP_EQUIVALENT_ERROR_CODE:\n result.push(newTempAreEquivalentLocalized);\n break;\n case AUTH_PASSWORD_STRENGTH_ERROR_CODE: {\n const reqValStrength = (info.information as RequiredValueInformation).requiredValue;\n result.push(badPasswordStrength.replace(\"{}\", reqValStrength.toString()));\n break;\n }\n case AUTH_PASSWORD_COMPLEXITY_ERROR_CODE: {\n const reqValComplexity = (info.information as RequiredValueInformation).requiredValue;\n result.push(passwordTooSimple.replace(\"{}\", reqValComplexity.toString()));\n break;\n }\n case AUTH_PASSWORD_MINIMUM_REVISIONS_ERROR_CODE: {\n const reqValMinRevisions = (info.information as RequiredValueInformation).requiredValue;\n if (reqValMinRevisions <= 1) {\n result.push(cantBeLastPassword);\n } else {\n result.push(cantBeLastNumPasswords.replace(\"{}\", reqValMinRevisions.toString()));\n }\n break;\n }\n }\n }\n return result;\n }\n\n const setShowErrorMessage = (details: string[]) => {\n setChangePasswordAlertMsg({\n type: \"error\",\n message: (\n <>\n {details.map((x, i) =>
  • {x}
  • )}\n \n ),\n });\n };\n\n return (\n <>\n {changePasswordAlertMsg && }\n \n );\n};\n\nexport default ChangePasswordError;","import { atom } from 'recoil';\n\nexport const buttonDisabledState = atom({\n key: 'isEnterPasswordButtonDisabled',\n default: true\n});\n\ntype EnterPasswordStateType = 'none' | 'gettingAuthDetails' | 'error';\nexport const enterPasswordState = atom({\n key: 'enterPassword',\n default: 'none',\n});","import React, { useEffect } from \"react\";\nimport { Input, Typography, EyeTwoTone, EyeInvisibleOutlined, Row, Col, Form, Alert, Space } from \"@iqmetrix/antd\";\nimport { atom, useRecoilState, useRecoilValue, useSetRecoilState } from \"recoil\";\nimport {\n clientState,\n clientKeyState,\n credentialAlertMsgState,\n forceChangePasswordState,\n redirectUrlState,\n showChangeUsernameState,\n showForgotPasswordState,\n usernameState,\n loginAlertMsgState,\n userIdState,\n} from \"../../shared/state\";\nimport { doCredentialLogin, AUTH_FORCE_CHANGE_PASSWORD_ERROR_CODE, AUTH_USER_LOCKED_ERROR_CODE } from \"./../../providers/auth-provider/AuthProvider\";\nimport { reportUIEvent } from \"../../shared/analytics\";\nimport { useHistory } from \"react-router-dom\";\nimport {\n StyledAlert,\n StyledChangeButton,\n StyledForgotPasswordButton,\n StyledForm,\n StyledPasswordFormItem,\n StyledRightAlignCol,\n StyledSignInButton,\n StyledTitle,\n} from \"components/custom-styled-components/CustomStyledComponents\";\nimport { PaddingBaseBase } from \"@iqmetrix/style-tokens\";\nimport { redirectExternalUrl } from \"../../shared/utils/redirect-to-external\";\nimport { useLocalizedMessage } from \"../../hooks\";\nimport { getDomainFromUsername } from \"../../shared/get-domain\";\nimport { enterPasswordState } from \"../login/state\";\nimport { ViewModeHandler } from \"../view-mode-handler\";\nimport { HttpErrorResult, HttpObjectResult, LockReasonInformation, UserIdInformation } from \"models/http/http\";\nimport { TokenAndUserIdResource } from \"models\";\n\nconst { Text, Title } = Typography;\n\nexport const buttonDisabledState = atom({\n key: \"isSignInButtonDisabled\",\n default: true,\n});\n\nexport const loadingBtnState = atom({\n key: \"credentialsLoadingBtnState\",\n default: false,\n});\n\nexport const Credentials: React.FC = () => {\n const setEnterPasswordState = useSetRecoilState(enterPasswordState);\n const [isButtonDisabled, setIsButtonDisabled] = useRecoilState(buttonDisabledState);\n const [isLoading, setIsLoading] = useRecoilState(loadingBtnState);\n const showForgotPasswordBtn = useRecoilValue(showForgotPasswordState);\n const username = useRecoilValue(usernameState);\n const [password, setPassword] = React.useState(\"\");\n const [credentialAlertMsg, setCredentialAlertMsg] = useRecoilState(credentialAlertMsgState);\n const showChangeUsernameBtn = useRecoilValue(showChangeUsernameState);\n const clientKey = useRecoilValue(clientKeyState);\n const redirectUrl = useRecoilValue(redirectUrlState);\n const client = useRecoilValue(clientState);\n const history = useHistory();\n const queryParams = new URLSearchParams(window.location.search);\n const setForceChangePasswordState = useSetRecoilState(forceChangePasswordState);\n const setUserId = useSetRecoilState(userIdState);\n const [loginAlertMsg, setLoginAlertMsg] = useRecoilState(loginAlertMsgState);\n\n const invalidCredentialsErrorLine1 = useLocalizedMessage(\"Credentials.Error.The_credentials_you_have_entered_are_incorrect\");\n const invalidCredentialsErrorLine2 = useLocalizedMessage(\"Credentials.Error.Please_try_again\");\n const forgotPassword = useLocalizedMessage(\"Credentials.Forgot_password\");\n const changeUsername = useLocalizedMessage(\"Credentials.Username_change\");\n const userLockedMessage = useLocalizedMessage(\"Credentials.Error.User_is_locked\");\n const userLockedTitle = useLocalizedMessage(\"Credentials.Error.UserLockedTitle\");\n\n let loginUrl = \"/\";\n if (queryParams.toString() !== \"\") {\n loginUrl += `?${queryParams}`;\n }\n\n useEffect(() => {\n setIsLoading(false);\n if (!username) {\n history.push(loginUrl);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const onChangeClick = () => {\n if (queryParams.has(\"username\")) {\n queryParams.delete(\"username\");\n window.location.search = queryParams.toString();\n }\n setLoginAlertMsg(\"\");\n setCredentialAlertMsg(null);\n setEnterPasswordState(\"none\");\n reportUIEvent(\"User\", \"Clicked Change Username\", getDomainFromUsername(username));\n history.push(loginUrl);\n };\n\n const onForgotPassword = () => {\n setCredentialAlertMsg(null);\n reportUIEvent(\"User\", \"Clicked Forgot Password\", getDomainFromUsername(username));\n history.push(`/forgot-password?${queryParams}`);\n };\n\n const onPasswordInput = (evt: React.ChangeEvent) => {\n const input = evt.target.value;\n const isValid = input && input.length !== 0;\n setIsButtonDisabled(!isValid);\n setPassword(input);\n };\n\n const forceChangePassword = () => {\n setForceChangePasswordState(true);\n setEnterPasswordState(\"none\");\n history.push(`/force-change-password?${queryParams}`);\n };\n\n const setUserLocked = (msg: string) => {\n setCredentialAlertMsg({\n type: \"error\",\n message: (\n <>\n {userLockedTitle}\n { msg || userLockedMessage }\n \n )\n });\n };\n\n const setShowErrorMessage = () => {\n setCredentialAlertMsg({\n type: \"error\",\n message: (\n <>\n {invalidCredentialsErrorLine1}\n
    \n {invalidCredentialsErrorLine2}\n \n ),\n });\n };\n\n const signin = async () => {\n setIsLoading(true);\n reportUIEvent(\"User\", \"Clicked Sign in\", getDomainFromUsername(username));\n\n const loginResult = await doCredentialLogin(username, password, clientKey, redirectUrl);\n\n if (loginResult.hasError) {\n const error = loginResult as HttpErrorResult;\n if (error) {\n const errorType = error.errorType;\n if (errorType && errorType.length > 0) {\n setShowErrorMessage();\n setIsLoading(false);\n if (errorType[0].type === AUTH_FORCE_CHANGE_PASSWORD_ERROR_CODE) {\n const info = errorType[0].information as UserIdInformation;\n if (info && info.userId) {\n setUserId(info.userId);\n }\n forceChangePassword();\n }\n else if (errorType[0].type === AUTH_USER_LOCKED_ERROR_CODE) {\n const info = errorType[0].information as LockReasonInformation;\n setUserLocked(info.lockReasonDescription);\n }\n }\n }\n } else {\n const value = (loginResult as HttpObjectResult).value;\n const redirectUrlWithTokenAndUserIdResource = generateRedirectUrlWithTokenAndUserIdResource(value.redirectUrl, value.token, value.refreshToken, value?.userId);\n redirectExternalUrl(redirectUrlWithTokenAndUserIdResource);\n }\n };\n\n const generateRedirectUrlWithTokenAndUserIdResource = (redirectUrl: string, token: string, refreshToken: string, userId?: number): string => {\n const decodedUrl = decodeURIComponent(redirectUrl);\n const result = new URL(decodedUrl);\n result.searchParams.append(\"accessToken\", token);\n result.searchParams.append(\"refreshToken\", refreshToken);\n if (userId) {\n result.searchParams.append(\"userId\", userId.toString());\n }\n return result.toString();\n };\n\n const handleAlertMessage = () => {\n if (loginAlertMsg) {\n return ;\n }\n\n return ;\n };\n\n return (\n \n \n {useLocalizedMessage(\"Credentials.Sign_in_title\")}\n {credentialAlertMsg && }\n {handleAlertMessage()}\n \n \n {username}\n \n {showChangeUsernameBtn && (\n \n \n {changeUsername}\n \n \n )}\n \n \n \n (visible ? : )}\n onChange={onPasswordInput}\n data-testid=\"passwordInput\"\n name=\"password\"\n autoComplete=\"current-password\"\n autoFocus\n />\n \n {showForgotPasswordBtn && (\n \n \n {forgotPassword}\n \n \n )}\n \n \n \n {useLocalizedMessage(\"Credentials.Sign_in_button\")}\n \n \n \n \n \n );\n};\n\nexport default Credentials;\n","import * as React from \"react\";\nimport * as Sentry from \"@sentry/react\";\nimport { Result } from \"@iqmetrix/antd\";\nimport { FallbackRender } from \"@sentry/react/dist/errorboundary\";\n\ninterface FallBackProps {\n error: Error;\n}\n\nconst FallbackComponent: React.FC = (props: FallBackProps) => {\n return ;\n};\n\nconst myFallback: FallbackRender = (errorData) => ;\n\nexport const ErrorBoundary = ({ children }: React.PropsWithChildren) => {children};\n","import { Button, Input, Typography, Space, Alert } from \"@iqmetrix/antd\";\nimport { PaddingBaseBase } from \"@iqmetrix/style-tokens\";\nimport { useRecoilState, useRecoilValue } from \"recoil\";\nimport { doAuthConfig } from \"./../../providers/auth-provider/AuthProvider\";\nimport { clientKeyState, redirectUrlState, usernameState, isUsernameSetByParamState, clientState, credentialAlertMsgState } from \"../../shared/state\";\nimport { buttonDisabledState, enterPasswordState } from \"./state\";\nimport { reportUIEvent } from \"../../shared/analytics\";\nimport { LoginConfigurationResource } from \"models\";\nimport { useHistory } from \"react-router-dom\";\nimport { StyledForm, StyledInputFormItem, StyledSpace, StyledRightAlignCol, StyledAlert } from \"components/custom-styled-components/CustomStyledComponents\";\nimport { redirectExternalUrl } from \"../../shared/utils/redirect-to-external\";\nimport { isUsernameValidEmail } from \"../../shared/utils\";\nimport React, { useEffect } from \"react\";\nimport { useLocalizedMessage, useParseClientQueryParam, useParseClientKeyQueryParam, useParseRedirectUrlQueryParam, useRedirectToHubIfMissingQueryParams } from \"../../hooks\";\nimport { getDomainFromUsername } from \"../../shared/get-domain\";\nimport { ViewModeHandler } from \"../view-mode-handler\";\n\nconst { Text, Title } = Typography;\n\nexport const Login: React.FC = () => {\n const [isButtonDisabled, setIsButtonDisabled] = useRecoilState(buttonDisabledState);\n const [enterPasswordStatus, setEnterPasswordState] = useRecoilState(enterPasswordState);\n const [username, setUserInput] = useRecoilState(usernameState);\n const [credentialAlertMsg] = useRecoilState(credentialAlertMsgState);\n const [isUsernameSetByParam, setIsUsernameSetByParam] = useRecoilState(isUsernameSetByParamState);\n const clientKey = useRecoilValue(clientKeyState);\n const redirectUrl = useRecoilValue(redirectUrlState);\n const client = useRecoilValue(clientState);\n const history = useHistory();\n\n const parseClientQueryParam = useParseClientQueryParam();\n const parseClientKeyQueryParam = useParseClientKeyQueryParam();\n const parseRedirectUrlQueryParam = useParseRedirectUrlQueryParam();\n const redirectToHubIfMissingQueryParams = useRedirectToHubIfMissingQueryParams();\n\n const login = async () => {\n setEnterPasswordState(\"gettingAuthDetails\");\n\n reportUIEvent(\"User\", \"Clicked Sign in.Next\", getDomainFromUsername(username));\n\n const result = await doAuthConfig(username, clientKey, redirectUrl);\n if (result.hasError) {\n setIsButtonDisabled(false);\n setError();\n }\n else\n {\n const isRedirect = handleLoginConfig(result.value);\n if (!isRedirect) {\n reportUIEvent(\"User\", \"Retrieved Login Configuration\", \"Hub\", true);\n const queryParams = new URLSearchParams(window.location.search);\n let credentialsUrl = \"/credentials\";\n if (queryParams.toString() !== \"\") {\n credentialsUrl += `?${queryParams}`;\n }\n history.push(credentialsUrl);\n } else {\n reportUIEvent(\"User\", \"Retrieved Login Configuration\", \"OpenId\", true);\n }\n }\n };\n\n const setError = () => {\n setEnterPasswordState(\"error\");\n };\n\n const isValidInput = (input: string) => input && input.length !== 0;\n\n const inputChanged = (event: any) => {\n trimAndSetUsername(event.target.value);\n };\n\n const trimAndSetUsername = (untrimmedUsername: string) => {\n const trimmedInput = untrimmedUsername.trim();\n setIsButtonDisabled(!isValidInput(trimmedInput));\n setUserInput(trimmedInput);\n };\n\n const handleRedirect = (authenticationUrl: string, username: string): boolean => {\n const urlWithLoginHint = new URL(authenticationUrl);\n if (isUsernameValidEmail(username)) urlWithLoginHint.searchParams.append(\"login_hint\", username);\n\n redirectExternalUrl(urlWithLoginHint.toString());\n return true;\n }\n\n const handleLoginConfig = (loginConfig: LoginConfigurationResource): boolean => {\n switch (loginConfig?.protocol) {\n case \"Okta\":\n return handleRedirect(loginConfig.authenticationUrl, username);\n default: {\n switch (loginConfig?.loginType) {\n default: //Unknown, treat like iQ\n case 0: //iQ login\n return false;\n case 1: { //OpenId login\n return handleRedirect(loginConfig.authenticationUrl, username);\n }\n }\n }\n }\n };\n\n const handleAlertMessage = () => {\n if (enterPasswordStatus === \"error\") {\n return (\n \n );\n }\n\n return ;\n };\n\n // This will run on component mount\n useEffect(() => {\n redirectToHubIfMissingQueryParams();\n parseClientQueryParam();\n parseClientKeyQueryParam();\n parseRedirectUrlQueryParam();\n\n const queryParams = new URLSearchParams(window.location.search);\n const usernameParam = queryParams.get(\"username\") || \"\";\n trimAndSetUsername(usernameParam);\n if (usernameParam) {\n setIsUsernameSetByParam(true);\n setIsButtonDisabled(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // This will run when isUsernameSetByParam changes\n useEffect(() => {\n if (isUsernameSetByParam && username) {\n login();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isUsernameSetByParam]);\n\n\n\n return (\n \n \n \n {useLocalizedMessage(\"Login.Sign_in_Title\")}\n \n {credentialAlertMsg && }\n {handleAlertMessage()}\n \n {useLocalizedMessage(\"Login.Username_or_Email\")}\n {}\n \n \n \n \n \n \n );\n};\n\nexport default Login;\n","import React, { useCallback, useEffect } from \"react\";\nimport { Result } from \"@iqmetrix/antd\";\nimport type { InteropBodyRequest } from '@iqmetrix/host-interop';\nimport { SetterOrUpdater, useRecoilState } from \"recoil\";\nimport { atom } from \"recoil\";\nimport { useLocalizedMessage } from \"../../hooks\";\nimport { InteropRequestBody } from \"models/InteropRequestBody\";\nimport { ClientType } from \"models\";\nimport { reportException } from \"shared/analytics\";\nimport { uuid4 } from '@sentry/utils';\nimport { mapQueryParameterToClientType } from '../../shared/utils';\n\nexport const Callback: React.FC = () => {\n const [isError, setErrorState] = useRecoilState(errorState);\n\n const queryParams = new URLSearchParams(window.location.search);\n const accessToken = queryParams.get(\"accessToken\") || \"\";\n const refreshToken = queryParams.get(\"refreshToken\") || \"\";\n\n const callHook = useCallback(() => {\n if (accessToken != \"\" && refreshToken != \"\") {\n const userId = queryParams.get(\"userId\") || \"\";\n const clientType = mapQueryParameterToClientType();\n\n const requestBody : InteropRequestBody = {\n token : accessToken,\n refreshToken: refreshToken,\n userId : userId,\n }\n\n const request = {\n body: requestBody,\n id: uuid4(),\n name: \"tokenAndUserId\",\n type: \"request\",\n version: \"1\",\n } as InteropBodyRequest;\n\n if (clientType === ClientType.mobile) {\n sendMessageForMobile(request, setErrorState);\n }\n else {\n sendMessageForDesktopAndDefault(request, clientType, setErrorState);\n }\n } else {\n setErrorState(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n callHook();\n }, [callHook]);\n\n return <>{isError === false ? <> : };\n};\n\nconst TokenNotProvidedResult: React.FC = () => {\n const localizedErrorTitle = useLocalizedMessage(\"Callback.Error_title\");\n const localizedErrorResponse = useLocalizedMessage(\"Callback.No_access_token_was_provided\");\n return \n}\n\nexport async function sendMessageForDesktopAndDefault(request : InteropBodyRequest, clientType: ClientType, setErrorState: SetterOrUpdater) {\n const interopTarget = getInteropTarget();\n\n try {\n interopTarget.postMessage(request);\n }\n catch (error) {\n reportException(error, {\n client: clientType.toString(),\n object: interopTarget,\n method: \"postMessage\",\n });\n\n setErrorState(true);\n }\n}\n\nexport const errorState = atom({\n key: \"isError\",\n default: false,\n});\n\nexport const sendMessageForMobile = (request : InteropBodyRequest, setErrorState: SetterOrUpdater) => {\n if (window && (window as any).ReactNativeWebView) {\n sendReactNativeMessage(request, setErrorState);\n } else {\n sendDefaultMobileMessage(request, setErrorState);\n }\n}\n\nconst sendReactNativeMessage = (requestBody: InteropBodyRequest, setErrorState: SetterOrUpdater) => {\n try {\n (window as any).ReactNativeWebView.postMessage(JSON.stringify(requestBody));\n } catch (error) {\n reportException(error, {\n client: ClientType.mobile,\n object: \"ReactNativeWebView\",\n method: \"postMessage\"\n });\n\n setErrorState(true);\n }\n};\n\nconst sendDefaultMobileMessage = (requestBody: InteropBodyRequest, setErrorState: SetterOrUpdater) => {\n try {\n window.postMessage(requestBody);\n } catch (error) {\n reportException(error, {\n client: ClientType.mobile,\n object: \"window\",\n method: \"postMessage\"\n });\n\n setErrorState(true);\n }\n};\n\nconst getInteropTarget = () =>\n{\n const cefSharpTarget = (globalThis as any).CefSharp;\n if(cefSharpTarget)\n cefSharpTarget.postMessage = (msg: any) => cefSharpTarget.PostMessage(msg);\n return cefSharpTarget ?? window;\n}\n\nexport default Callback;\n","import { atom } from 'recoil';\r\n\r\nexport const buttonDisabledState = atom({\r\n key: 'isResetPasswordButtonDisabled',\r\n default: true\r\n});\r\n\r\nexport const forgotPasswordState = atom({\r\n key: 'forgotPasswordInProgress',\r\n default: false,\r\n});","import { Input, Typography, Form } from \"@iqmetrix/antd\";\nimport { StyledForm, StyledButton, StyledSpace, StyledRightAlignCol } from \"components/custom-styled-components/CustomStyledComponents\";\nimport React, { useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useRecoilState, useRecoilValue, useSetRecoilState } from \"recoil\";\nimport { usernameState, loginAlertMsgState, clientState } from \"shared/state\";\nimport { buttonDisabledState, forgotPasswordState } from \"./state\";\nimport { doForgotPassword } from \"../../providers/auth-provider\";\nimport { reportUIEvent } from \"../../shared/analytics\";\nimport { useLocalizedMessage } from \"../../hooks\";\nimport { getDomainFromUsername } from \"../../shared/get-domain\";\nimport { ViewModeHandler } from \"../view-mode-handler\";\n\nconst { Text, Title } = Typography;\n\nexport const ForgotPassword: React.FC = () => {\n const [username, setUserInput] = useRecoilState(usernameState);\n const [isButtonDisabled, setIsButtonDisabled] = useRecoilState(buttonDisabledState);\n const history = useHistory();\n const setForgotPasswordAlertMsgState = useSetRecoilState(loginAlertMsgState);\n const [forgotPasswordStatus, setForgotPasswordState] = useRecoilState(forgotPasswordState);\n const client = useRecoilValue(clientState);\n const queryParams = new URLSearchParams(window.location.search);\n\n const actionCompletedAlertMessage = useLocalizedMessage(\"ForgotPassword.Alert_message\");\n\n const isValidInput = (input: string) => input && input.length !== 0;\n\n const inputChanged = (event: any) => {\n const trimmedInput = event.target.value.trim();\n setIsButtonDisabled(!isValidInput(trimmedInput));\n setUserInput(event.target.value);\n };\n\n const onResetPasswordClick = async () => {\n setForgotPasswordState(true);\n await doForgotPassword(username);\n reportUIEvent(\"User\", \"Clicked Reset Password\", getDomainFromUsername(username));\n\n setForgotPasswordAlertMsgState(actionCompletedAlertMessage);\n setForgotPasswordState(false);\n history.push(`/credentials?${queryParams}`);\n };\n\n const onCancelButtonClick = () => {\n setForgotPasswordAlertMsgState(\"\");\n reportUIEvent(\"User\", \"Clicked Cancel Reset Password\", getDomainFromUsername(username));\n history.push(`/credentials?${queryParams}`);\n };\n\n useEffect(() => {\n if (username) {\n setIsButtonDisabled(false);\n }\n }, [setIsButtonDisabled, username]);\n\n return (\n \n \n {useLocalizedMessage(\"ForgotPassword.Reset_password_Title\")} \n \n {useLocalizedMessage(\"ForgotPassword.Instructions.Please_enter_the_email_address\")}\n {useLocalizedMessage(\"ForgotPassword.Instructions.For_further_assistance\")}\n {useLocalizedMessage(\"ForgotPassword.Email_address\")}\n {}\n \n \n \n {useLocalizedMessage(\"ForgotPassword.Cancel\")}\n \n \n {useLocalizedMessage(\"ForgotPassword.Reset_Password_Button\")}\n \n \n \n \n \n \n );\n};\n\nexport default ForgotPassword;\n","import React from \"react\";\nimport { IntlProvider } from \"react-intl\";\nimport { ConfigProvider } from \"@iqmetrix/antd\";\n\nimport en_US from \"@iqmetrix/antd/lib/locale/en_US\";\nimport es_ES from \"@iqmetrix/antd/lib/locale/es_ES\";\nimport fr_FR from \"@iqmetrix/antd/lib/locale/fr_FR\";\nimport type { Locale } from \"@iqmetrix/antd/lib/locale-provider\";\n\nimport { messages } from \"shared\";\n\nconst getLocale = () => navigator.language.split(/[-_]/)[0];\nconst getMessages = () => messages[getLocale()];\n\nconst getAntdLocale = (): Locale => {\n switch (getLocale()) {\n case \"fr\":\n return fr_FR;\n case \"es\":\n return es_ES;\n default:\n return en_US;\n }\n};\n\nexport const I18nProvider: React.FC = (props) => (\n \n \n {props?.children}\n \n \n);\n","import React from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { useLocalizedMessage } from \"../../hooks\";\n\nexport const PageTitle: React.FC = () => {\n const iQmetrixTitle = useLocalizedMessage(\"PageTitle\");\n const covaTitle = useLocalizedMessage(\"CovaPageTitle\");\n\n return (\n <>\n {window.location.hostname.toLowerCase().includes(\"cova\") ? (\n \n {covaTitle}\n \n \n \n ) : (\n \n {iQmetrixTitle}\n \n \n \n )}\n \n );\n};\n","import React from \"react\";\nimport { Result } from \"@iqmetrix/antd\";\nimport { useLocalizedMessage } from \"../../hooks\";\n\nexport const Error: React.FC = () => {\n const localizedAccessTokenErrorTitle = useLocalizedMessage(\"Callback.Error_title\");\n const localizedAccessTokenErrorResponse = useLocalizedMessage(\"Callback.No_access_token_was_provided\");\n const localizedNonExistentExternalUserErrorTitle = useLocalizedMessage(\"Error.Non_existent_external_user_error_title\");\n const localizedNonExistentExternalUserErrorResponse = useLocalizedMessage(\"Error.Non_existent_external_user_error_response\");\n const localizedUnmatchingExternalUserErrorResponse = useLocalizedMessage(\"Error.External_user_does_not_match_error_response\");\n let localizedErrorTitle = localizedAccessTokenErrorTitle;\n let localizedErrorResponse = localizedAccessTokenErrorResponse;\n\n const queryParams = new URLSearchParams(window.location.search);\n if (queryParams.has(\"code\")) {\n const code = queryParams.get(\"code\") || \"\";\n\n switch(code) {\n case 'AuthExternalUserDoesNotExistErrorCode': {\n localizedErrorTitle = localizedNonExistentExternalUserErrorTitle;\n localizedErrorResponse = localizedNonExistentExternalUserErrorResponse;\n break;\n }\n case 'AuthExternalUserDoesNotMatchErrorCode': {\n localizedErrorResponse = localizedUnmatchingExternalUserErrorResponse;\n break;\n }\n default: {\n break;\n }\n }\n }\n\n return ;\n};\n\nexport default Error;\n","import React, { useEffect } from \"react\";\nimport { useRecoilState } from \"recoil\";\nimport { doLogout } from \"providers/auth-provider\";\nimport { redirectExternalUrl, redirectToHubUrl } from \"../../shared/utils/redirect-to-external\";\nimport { logoutAlertMsgState } from \"../../shared/state\";\nimport { ClientType, LogoutResource } from \"../../models\";\nimport { reportUIEvent } from \"shared/analytics\";\nimport { useLocalizedMessage } from \"../../hooks\";\nimport { StyledAlert } from \"components/custom-styled-components/CustomStyledComponents\";\nimport { HttpErrorResult, HttpObjectResult } from \"models/http/http\";\n\nexport const Logout: React.FC = () => {\n const queryParams = new URLSearchParams(window.location.search);\n const accessToken = queryParams.get(\"accessToken\") as string;\n const redirectUrl = queryParams.get(\"redirectUrl\") as string;\n const [logoutAlertMsg, setLogoutAlertMsg] = useRecoilState(logoutAlertMsgState);\n const LogoutErrorLine1 = useLocalizedMessage(\"Logout.Server_error_alert\");\n const LogoutErrorLine2 = useLocalizedMessage(\"Logout.Server_try_again\");\n\n const logout = async () => {\n const result = await doLogout(accessToken, redirectUrl);\n\n if (result.hasError) {\n const error = result as HttpErrorResult;\n if (error && error.statusCode === 401) {\n // Unauthorized, redirect to default log in page\n redirectToHubUrl();\n }\n else {\n setShowErrorMessage();\n }\n }\n else\n {\n setLogoutAlertMsg(null);\n redirectExternalUrl((result as HttpObjectResult).value.callbackUrl);\n }\n };\n\n const setShowErrorMessage = () => {\n setLogoutAlertMsg({\n type: \"error\",\n message: (\n <>\n {LogoutErrorLine1}\n
    \n {LogoutErrorLine2}\n \n ),\n });\n };\n\n useEffect(() => {\n const clientFromQuery = queryParams.get(\"client\") || \"\";\n const client: ClientType = clientFromQuery in ClientType ? (clientFromQuery as ClientType) : ClientType.web;\n reportUIEvent(\"User\", \"Logout Universal Login\", client, true);\n\n logout();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n {logoutAlertMsg && }\n \n );\n};\n\nexport default Logout;\n","import React, { useEffect } from \"react\";\nimport { redirectExternalUrl } from \"../../shared/utils/redirect-to-external\";\n\nexport const LogoutCallback: React.FC = () => {\n const queryParams = new URLSearchParams(window.location.search);\n const state = queryParams.get(\"state\") as string;\n\n useEffect(() => {\n const uriDecodedState = decodeURI(state);\n const decodedReturnUrl = atob(uriDecodedState);\n redirectExternalUrl(decodedReturnUrl);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n );\n};\n\nexport default LogoutCallback;","import { useEffect} from \"react\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport ReactGA from \"react-ga\";\r\n\r\nconst usePageTracking = () => {\r\n const location = useLocation();\r\n\r\n useEffect(() => {\r\n ReactGA.pageview(location.pathname + location.search);\r\n }, [location]);\r\n};\r\n\r\nexport default usePageTracking;","import React, { useLayoutEffect } from \"react\";\nimport { useSetRecoilState } from \"recoil\";\nimport { BrowserRouter as Router, Switch, Route } from \"react-router-dom\";\nimport { ChangePassword, Credentials, ErrorBoundary, Login, ForgotPassword, Callback, Error, PageTitle, Logout, LogoutCallback } from \"./components\";\nimport usePageTracking from \"./shared/usePageTracking\";\nimport { redirectUrlState, showForgotPasswordState, clientState, showChangeUsernameState } from \"./shared/state\";\nimport { EnforcedQueryParamRoute, mapQueryParameterToClientType } from \"./shared/utils\";\nimport { getEnvironmentSuffix } from \"shared/get-environment\";\nimport { ClientType } from \"models/ClientType\";\nimport { reportUIEvent } from \"./shared/analytics\";\nimport \"./App.scss\";\n\nconst RouterSwitch: React.FC = () => {\n const changePasswordRequiredQueryParams = [\"accessToken\"];\n const logoutRequiredQueryParams = [\"accessToken\", \"redirectUrl\"];\n usePageTracking();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nconst App: React.FC = () => {\n const envSuffix = getEnvironmentSuffix();\n const universalLoginRoot = `https://signin${envSuffix}.iqmetrix.net`;\n const rqDefaultCallbackUrl = `${universalLoginRoot}/callback`;\n const queryParams = new URLSearchParams(window.location.search);\n const setShowForgotPasswordState = useSetRecoilState(showForgotPasswordState);\n const setClientState = useSetRecoilState(clientState);\n const setRedirectUrlState = useSetRecoilState(redirectUrlState);\n const setChangeUsernameState = useSetRecoilState(showChangeUsernameState);\n\n useLayoutEffect(() => {\n const client = mapQueryParameterToClientType();\n setClientState(client);\n setRedirectUrlFromParamOrDefault(client);\n if (client !== ClientType.web) {\n setNonWebViewParams();\n }\n reportUIEvent(\"User\", \"Loaded Universal Login\", client, true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const setNonWebViewParams = () => {\n setShowForgotPasswordState(false);\n if (queryParams.has(\"lockUsername\")) {\n setChangeUsernameState(queryParams.get(\"lockUsername\") !== \"true\");\n }\n };\n\n const setRedirectUrlFromParamOrDefault = (client : ClientType) => {\n setRedirectUrlState(queryParams.get(\"redirectUrl\") || `${rqDefaultCallbackUrl}?client=${client}`);\n };\n\n return (\n \n \n \n \n \n \n );\n};\n\nexport default App;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\n\nimport * as Sentry from \"@sentry/react\";\nimport { Integrations } from \"@sentry/tracing\";\nimport ReactGA from \"react-ga\";\nimport reportWebVitals from \"./reportWebVitals\";\n\nimport App from \"./App\";\nimport { getEnvironment } from \"./shared/get-environment\";\n\nimport { RecoilRoot } from \"recoil\";\nimport { I18nProvider } from \"./components\";\n\nimport \"./index.scss\";\n\nReactGA.initialize(\"UA-196873696-1\");\nReactGA.set({ env: getEnvironment() });\n\nasync function init() {\n const info = await import(\"../package.json\");\n Sentry.init({\n dsn: process.env.REACT_APP_SENTRY_DSN,\n release: info.name + \"@\" + info.version,\n environment: getEnvironment(),\n attachStacktrace: true,\n integrations: [new Integrations.BrowserTracing()],\n tracesSampleRate: 0.1,\n });\n}\n\nReactDOM.render(\n \n \n \n \n \n \n \n \n ,\n document.getElementById(\"root\"),\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\ninit();\n"],"sourceRoot":""}