{"version":3,"sources":["locales/index.js","components/env.js","api/analytics.js","components/password-reset-form-error-array/TextInput.js","components/link-button/linkButton.js","components/successForm/successForm.js","components/password-reset-form-error-array/PasswordResetFormErrorArray.js","components/contact-us/contactUs.js","components/card/cardTemplate.js","components/disambiguation-form/disambiguationForm.js","components/username-recovery-form/usernameRecoveryForm.js","components/username-recovery-form/usernameRecoveryStatusForm.js","components/username-recovery-form/usernameRecoveryEmailCaptureForm.js","api/Errors.js","api/user-factors.js","components/password-recovery-form/passwordRecoveryOptionsForm.js","components/icons/IconCircle.js","components/icons/IconStack.js","components/account-verification-options-form/accountVerificationOptionsForm.js","components/otp-validation-form/otpValidationForm.js","components/email-password-success-form/EmailPasswordSuccessForm.js","components/duplicate-session-form/DuplicateSessionForm.js","components/eula/eulaForm.js","components/account-verification-form/accountVerificationForm.js","components/factor-enrollment-options-form/factorEnrollmentOptionsForm.js","components/enroll-verification/enrollVerificationForm.js","components/enroll-verification/enrollInternationalFactorForm.js","components/thirdPartyAccessDenied/thirdPartyAccessDenied.js","components/UserNotLinkedPage/UserNotLinkedPage.js","components/user-form/userForm.js","components/successRedirect/successRedirect.js","components/signin-control/signInControl.js","components/header/Header.js","components/footer/Footer.js","components/broadcast-message/BroadcastMessage.js","components/password-validation/translationMap.js","components/App.js","i18n.js","index.js","components/launchercontrol-form/launcherControllerForm.js","components/solutionlauncher-control/SolutionLauncher.js","components/UserElectedPasswordChangeFlow.js","components/account-recovery/AccountRecoveryEmailPasswordResetForm.js","components/isThirdPartyCookieEnabled.js"],"names":["module","exports","en","translation","common","solution","next","back","backTo","hidePassword","hidePassword_plural","showPassword","showPassword_plural","conjunctionOr","error","generic","genericTODO","passwordRequired","EXPIRED_PASSWORD","FAILED_PASSWORD_CHANGE_REQUIREMENTS","FAILED_PASSWORD_CHANGE_UPDATED_REQUIREMENTS","INVALID_USER_OR_PASSWORD","INVALID_USER_OR_CODE","INVALID_CURRENT_PASSWORD","MFA_ENROLLMENT_REQUIRED","MFA_RATE_LIMIT","SYSTEM_ERROR","USER_NOT_LINKED","USER_STATE_ERROR","invalidOtpCode","MESSAGE_PASSWORD_UNACCEPTABLE","MESSAGE_MINIMUM_LENGTH_NOT_MET","MESSAGE_EXCEEDS_MAXIMUM_LENGTH","MESSAGE_NEED_AT_LEAST_ONE_LETTER","MESSAGE_NEED_AT_LEAST_ONE_NUMBER","MESSAGE_NEED_AT_LEAST_ONE_LETTER_OR_ONE_NUMBER","MESSAGE_NO_PASSWORD_PROVIDED","MESSAGE_CANNOT_CONTAIN_OR_BE_PART_OF_USERNAME","MESSAGE_CANNOT_BE_PREVIOUSLY_USED_PASSWORD","MESSAGE_CANNOT_BE_A_COMMON_PASSWORD","MESSAGE_INCORRECT_OLD_PASSWORD","MESSAGE_CANNOT_BE_CURRENT_PASSWORD","MESSAGE_CANNOT_BE_DICTIONARY_WORD","MESSAGE_CANNOT_BE_COX_BRAND","MESSAGE_CANNOT_CONTAIN_FIRST_NAME_LAST_NAME","MESSAGE_CANNOT_CONTAIN_QUADS","disambiguationForm","text","buttonSignInBridge","buttonSignInSolution","launcherControllerForm","title","dropdownLabel","dropdownPlaceholder","otpValidationForm","sentText","otpChallenge","submit","differentOption","resendCode","passwordForm","textInputLabel","linkForgotPassword","buttonSignIn","successForm","continue","successRedirect","message","redirectMessage","passwordResetForm","titleActivation","expired","requestChange","currentPassword","inputLabel","newPassword","confirmPassword","buttonChangePassword","buttonSetPassword","onSuccess","onSuccessActivation","return","accountRecoveryPasswordResetForm","buttonContinue","accountRecoveryEmailPasswordResetForm","login","linkExpired","solutionLauncher","userNotYetAvailable","linkExpiredActivation","signInControl","popover","popover_bridgeNative","usernameText","usernameText_bridgeOnly","contactUs","privacyStatement","allRightsReserved","termsOfUse","usernameForm","recoveryVerb","linkForgotUsername","popoverPasswordHint","usernameRecoveryForm","buttonBridge","buttonSolution","usernameRecoveryStatusForm","buttonBack","usernameRecoveryEmailCaptureForm","nextButton","userUnlinkedForm","mySettingsButton","attachedSolutionsLink","userLinkedToBridgeForm","button","timeoutMessage","countdown","reload","reload_button","timedOutTitle","timedOutBody","passwordRecoveryOptionsForm","emailButton","smsButton","accountRecoveryEmailSentForm","titleText","resultTitle","resultText","closeButton","solutionIdentityFlow","buttonAttach","dtBackdoor","duplicateSession","buttonText","eulaForm","body","checkBox","acceptButton","accountVerificationOptionsForm","help","select","email","sms","totp","accountVerificationForm","usage","input","errorCodeInvalid","buttonGoBack","buttonLoading","factorEnrollmentOptionsForm","titleRecovery","bodyRecovery","optionHeader","optionHeaderRecovery","enrollFactorForm","phoneInputLabel","phoneNumberInvalid","emailInputLabel","emailError","invalid","inUse","success","enrollFactorVerificationForm","thirdPartyAccessDenied","explanation","backToSignin","es","fr","getEnv","url","window","location","hostname","indexOf","externalApplications","dangerzone","user-settings.dangerzone.coxautoservices.com","live","user-settings.coxautoinc.com","linkClicked","element","result","report","initializeDataLayer","solutionId","env","dataLayer","push","dataLayerVersion","application","name","version","environment","isProduction","sessionControl","event","action","eventElement","eventAction","eventResult","eventLocation","eventValue","undefined","productEvent","properties","arguments","length","eventName","eventProperties","TextInput","props","react_default","a","createElement","className","id","htmlId","htmlFor","label","type","autoComplete","onChange","onKeyDown","onBlur","IconError_default","LinkButton","onClick","disabled","children","SuccessForm","onClickContinue","e","preventDefault","Translation","t","IconComplete_default","SubmitButton_default","solutionDisplayName","PasswordResetFormErrorArray","_this","Object","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","call","signinCallback","state","setPasswordValid","passwordValid","errors","setState","validPassword","passwordErrors","setErrorsIgnoreBlanks","errorCurrentPassword","isValidCurrentPassword","errorNewPassword","isValidPassword","errorConfirmPassword","isValidConfirmation","newPasswordConfirmation","setErrors","onLostFocusPassword","validateCurrentPassword","onLostFocusPasswordConfirmation","onToggleShowPassword","showAsText","collectCurrentPassword","validPasswordCurrent","trim","onClickAbort","reasonType","concat","abortButtonCallback","passwordChangeComplete","submitForm","bind","assertThisInitialized","handleFormSubmit","key","isValidForm","stopPropagation","document","getElementById","click","_this2","onSubmitPassword","then","isSuccess","value","passwordChangeBackendErrors","successForm_successForm","_this3","link_button_linkButton","count","password_reset_form_error_array_TextInput","join","target","_this4","signInButtonEnabled","submitButton","method","onSubmit","reasonKey","displayName","username","toUpperCase","Fragment","defaultValue","doublePasswordInputBox","abortButton","Button_default","buttonStyle","PCW_default","password","checkValidity","mode","passwordPolicy","renderSuccess","renderChangePasswordForm","React","Component","ContactUs","href","contactUsUrl","rel","Trans","i18nKey","CardTemplate","Card_default","header","logo","src","alt","logoAlt","contact_us_contactUs","DisambiguationForm","solutionList","onClickUserName","onClickUsernameFromDisambiguationPage","onClickSolutionName","clickedValue","isBridge","onSubmitSolutionName","nonBridgeSolutionName","foundNonBridgeSolution","find","index","TruncateText_default","Grid_default","map","Row_default","block","UsernameRecoveryForm","loading","availableSolutions","clickedSolutionValue","navigationHandler","idp","shortCircuit","recoverBridgeUsername","assign","usernameResetUrl","fetchAvailableSolutions","fetchIdentityProviders","client_id","clientId","flag","items","filter","elem","errorMsg","catch","err","LoadingIndicator_default","size","withRouter","UsernameRecoveryStatusForm","recoveryEmail","onClickRecoverUsernameStatusBack","UsernameRecoveryEmailCaptureForm","emailValue","validEmail","onClickRecoveryEmailNextButton","focus","onEmailInputKeydown","cxEvent","isValid","domEvent","onFormSubmit","EmailInput_default","autoFocus","maxLength","required","InternalServerError","_Error","inherits","wrapNativeSuper","Error","UnhandledResponseCodeError","_Error2","API_VERSION","PasswordRecoveryOptionsForm","onClickRecoveryBySmsButton","onClickPasswordRecoveryBySmsFromOptionsForm","onClickRecoveryByEmailButton","onClickPasswordRecoveryByEmailFromOptionsForm","factors","baseUrl","URL","fetch","headers","Accept","response","status","json","fetchFactors","apiBaseUrl","shouldShortCircuit","objectSpread","finally","IconCircle","_ref","isActive","other","objectWithoutProperties","SvgIcon_default","viewBox","cx","cy","r","IconStack","AccountVerificationOptionsForm","FormGroup_default","controlId","option","IconFactor","factorType","toLowerCase","IconTextsms_default","IconEmail_default","index_es","icon","faMobileScreenButton","components_icons_IconStack","components_icons_IconCircle","values","param","translationParam","components","disclaimer","factor","onChallengeFactor","resultMessage","faqLink","onLinkClicked","_ref$location","onVerifyClicked","OtpValidationForm","_useState","useState","_useState2","slicedToArray","passcode","updatePasscode","_useState3","_useState4","isVerifying","setIsVerifying","onPasscodeInputKeydown","onClickPasscodeVerifyButton","verifyPasscode","authenticated","onClickResendPassCodeButton","resendPasscode","onClickShowRecoveryOptions","showRecoveryOptions","TextInput_default","isLoading","loadingText","EmailPasswordSuccessForm","_ref2","closePasswordRecovery","onClickClose","DuplicateSessionForm","submitLogout","setTimeout","retryFunction","sessionUsername","sessionBridgeUsername","newUsername","bridgeEnv","style","display","EulaForm","checkedAccept","toggleCheckAccept","setLoading","_useTranslation","useTranslation","termsOfServiceLink","privacyPolicyLink","CheckBoxList_default","options","onAcceptEula","AccountVerificationForm","code","setCode","isValidCode","setIsValidCode","_useState5","_useState6","setError","_useState7","_useState8","getActiveFactor","f","onCodeInvalid","displayError","onClickVerifyButton","match","onVerifyFactor","onClickGoBack","returnToChallengeOptions","onClickSendNewCode","codeSentTo","placeholder","sendsChallenge","FactorEnrollmentOptionsForm","defaultFactors","forRecovery","lcOption","IconSms","IconEmail","disclaimerClassName","onEnrollFactor","EnrollVerificationForm","resendTimeout","timerInitialState","remaining","timestamp","Date","now","_useState9","_useState10","isResendDisabled","setResendDisabled","_useState11","_useState12","timer","setTimer","intervalRef","useRef","delaySubmit","useEffect","current","setInterval","Math","ceil","clearInterval","asyncToGenerator","regenerator_default","mark","_callee","wrap","_context","prev","Promise","resolve","successCallback","stop","_x","apply","returnToEnrollOptions","timeRemaining","EnrollInternationalFactorForm","phoneNumber","setPhoneNumber","isPhoneNumberValid","setIsPhoneNumberValid","setEmail","isEmailValid","setIsEmailValid","errorCode","setErrorCode","onClickEnrollButton","formatPhoneNumber","onClickShowFactorEnrollmentOptions","onReturnToFactorEnrolmentOptions","onChangePhoneNumber","isValidPhoneNumber","phoneInputKeyDown","onChangeEmail","validateEmail","emailAddress","test","onEmailInputBlur","emailInputKeyDown","showPhoneError","showEmailError","min","international","defaultCountry","displayLabel","getError","ThirdPartyAccessDenied","onTryAgainClick","destination","partition","UserNotLinkedPage","mySettingsUrl","PRODUCTION","NON_PRODUCTION","homePageUrl","solutionGroup","UserForm","onForgotButtonClick","onForgotUsernameClick","onClickForgotPasswordHint","onClickForgotPassword","authProviderDisplayName","includes","onForgotPasswordClick","onClickUsername","onClickUsernameFromPasswordPage","onUsernameKeyDown","componentDidUpdate","page","prevProps","prevState","snapshot","blur","onSubmitUsername","Popover_default","popoverContent","trigger","position","backToApplicationButton","navigationButtons","color","currentFlow","showForgotUsername","recoveryOptions","showForgotPassword","SuccessRedirect","onLinkClick","delayRender","clearTimeout","landingPageLink","origin","startsWith","SignInControl","userFormAbortButton","abortUrl","currentPage","showText","showSolutionLogo","enrollFactor","components_password_reset_form_error_array_PasswordResetFormErrorArray","onSubmitPasswordChange","passwordvalidation","components_UserNotLinkedPage_UserNotLinkedPage","errorAttrs","bodyText","getI18n","interpolation","escapeValue","dangerouslySetInnerHTML","__html","solutionLandingUrl","featureFlags","usernameRecoveryEmailCaptureForm_UsernameRecoveryEmailCaptureForm","passwordRecoveryOptionsForm_PasswordRecoveryOptionsForm","account_verification_form_accountVerificationForm","verificationFactors","account_verification_options_form_accountVerificationOptionsForm","components_email_password_success_form_EmailPasswordSuccessForm","otp_validation_form_otpValidationForm","onAccountRecoveryPasswordChange","mfaEnrollmentForRecovery","factor_enrollment_options_form_factorEnrollmentOptionsForm","submitFactorEnrollmentOption","enroll_verification_enrollInternationalFactorForm","returnToFactorEnrolmentOptions","enroll_verification_enrollVerificationForm","onVerifyEnrollFactor","onEnrollSuccess","onContinueSignin","duplicate_session_form_DuplicateSessionForm","eula_eulaForm","thirdPartyAccessDenied_thirdPartyAccessDenied","successRedirect_successRedirect","disambiguation","disambiguation_form_disambiguationForm","user_form_userForm","usernameTextComponent","replace","bridgeNative","card_cardTemplate","solutionLogoURI","Header","Footer","Col_default","xs","sm","smPush","smPull","getFullYear","validStyles","supportedLanguages","validateLanguage","config","lang","_i","_Object$keys","keys","BroadcastMessage","_step","_iterator","_createForOfIteratorHelper","s","n","done","addResourceBundle","broadcast","textStyle","buttonUrl","exists","activeMessage","intervalHolder","translationMap","MINIMUM_LENGTH_NOT_MET","EXCEEDS_MAXIMUM_LENGTH","NEED_AT_LEAST_ONE_LETTER","NEED_AT_LEAST_ONE_NUMBER","NEED_AT_LEAST_ONE_LETTER_OR_ONE_NUMBER","NO_PASSWORD_PROVIDED","CANNOT_CONTAIN_USERNAME","CANNOT_BE_PREVIOUSLY_USED_PASSWORD","CANNOT_BE_A_COMMON_PASSWORD","INCORRECT_OLD_PASSWORD","CANNOT_BE_CURRENT_PASSWORD","CANNOT_BE_DICTIONARY_WORD","CANNOT_BE_COX_BRAND","CANNOT_CONTAIN_FIRST_NAME_LAST_NAME","CANNOT_CONTAIN_QUADS","PASSWORD_REQUIREMENTS_NOT_MET","DEFAULT","mapToTranslatedMessage","userApiCode","translationKey","mapToTranslatedMessages","userApiCodes","codesToMap","obj","Symbol","iterator","errorMessages","translationMap_createForOfIteratorHelper","toConsumableArray","Set","codeToMap","indexOfDefault","splice","timeoutThresholds","initialTimeout","info","warningTime","App","forgotPassword","authenticationProvider","history","bookMarkSolution","solutionInfo","passwordResetUrl","usernameRecoveryEmail","SendUsernameRequest","params","requestOptions","Content-Type","Access-Control-Allow-Credentials","X-CoxAuto-Correlation-Id","transactionId","JSON","stringify","sendUsernameResponse","clearErrors","initiatePasswordRecovery","userName","ok","retrieveRecoveryWorkflow","path","passwordWorkflowResponse","isShortCircuit","showRecoveryOptionsFunc","accountRecoveryWorkflowId","workflowId","SMSRecoveryRequest","passcodeVerifyResponse","SMSResendRequest","passcodeResendResponse","factorId","stateToken","verificationStateToken","bodyUsed","NREUM","noticeError","unblock","passCode","continueSignin","submitParams","parse","handleSignin","factorValue","token","mfaEnrollIdentityToken","verificationCode","timeoutTimestamp","authenticationProviderPasswordRecoveryUrl","thirdPartyCookiesAllowed","solutionListUpdateCallback","submitUsername","forgotUsername","submitPassword","submitSolutionName","changePassword","navigateBackAPage","federate","handleErrorState","getDTBackdoorLink","forceErrorState","passwordRecoveryUrl","federationProvider","trimmedUsername","identityParams","canShowDtLegacyLink","reportThirdPartyCookieStatus","forEach","searchParams","append","toString","apiResponse","apiResponseOk","apiResponseStatus","failedJson","passwordErrorCodes","solutionid","_this5","passwordResetState","oldPassword","entries","errorAttributes","_this6","eulaIdentityToken","responseJson","eulaAcceptedChallenge","challengeState","_this7","isThirdPartyCookieAllowed","bool","_this8","_ref3","res","t0","t1","sent","abrupt","analyticsUser","platformId","bridgePlatformId","bridgeUsername","solutionPrincipalId","user","identifyUser","redirectUrl","navigator","userAgent","redirectMode","doSubmitForm","formParams","dtBackdoorUrl","backdoorPartition","legacyLink","attributes","_this9","I18N_KEY","BUTTON_ACTION","retryCallback","form","setAttribute","hasOwnProperty","hiddenField","appendChild","goBack","_this10","components_header_Header","broadcast_message_BroadcastMessage","Alert_default","displayCloseButton","remainingTime","onCloseClick","solutionLogoUrl","getPartition","components_footer_Footer","resources","require","moment","i18n","use","initReactI18next","LanguageDetector","init","defaultNS","fallbackLng","format","lng","locale","LauncherControllerForm","solutions","launcherOptions","item","sort","b","solutionName","md","Tooltip_default","tooltipContent","SolutionLauncher","UserElectedPasswordChangeFlow","returnSuccess","returnFail","successUrl","AccountRecoveryEmailPasswordResetForm","toggleLoading","errorLink","toggleErrorLink","toggleDisplayCloseButton","showForm","toggleShowForm","setErrorMsg","setWorkflowId","_useState13","_useState14","launcherUrl","setLauncherUrl","_useState15","_useState16","userId","setUserId","_useState17","_useState18","setPasswordPolicy","_useState19","_useState20","setPasswordChangeBackendErrors","textValues","formTitle","flowName","onLinkExpired","useCallback","userNotAvailable","authenticatedUserId","failedResponse","dataset","solutionlauncherlist","apibaseurl","transactionid","solutioninfo","solutiondisplayname","forceerrorstate","featureflags","publicview","successurl","aborturl","currentflow","emailrecoverytoken","activationtoken","passwordpolicy","parseErr","render","components_UserElectedPasswordChangeFlow","account_recovery_AccountRecoveryEmailPasswordResetForm","errorCallback","redirect_uri","acceptableIframeDomains","self","top","postMessage","timeoutID","addEventListener","source","domain","replaceState","react","fallback","react_router_dom","components_App","credentials","URLSearchParams","testUrl","has","solutionlauncher_control_SolutionLauncher"],"mappings":"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","file":"static/js/cxApp.a29c300a.chunk.js","sourcesContent":["module.exports = {\"en\":{\"translation\":{\"common\":{\"solution\":\"solution\",\"next\":\"Next\",\"back\":\"Back\",\"backTo\":\"Back to {{return}}\",\"hidePassword\":\"Hide Password\",\"hidePassword_plural\":\"Hide Passwords\",\"showPassword\":\"Show Password\",\"showPassword_plural\":\"Show Passwords\",\"conjunctionOr\":\"or\"},\"error\":{\"generic\":\"There was an error processing your request. Please try again.\",\"genericTODO\":\"There was an error processing your request - TODO: HANDLE BRIDGE!!!. Please try again.\",\"passwordRequired\":\"Password is required.\",\"EXPIRED_PASSWORD\":\"Change Bridge ID password.\",\"FAILED_PASSWORD_CHANGE_REQUIREMENTS\":\"Password entered does not meet the required criteria. Enter a password that meets the below criteria.\",\"FAILED_PASSWORD_CHANGE_UPDATED_REQUIREMENTS\":\"Password entered does not meet the required criteria and/or cannot be a known weak password. Enter a password that meets the below criteria.\",\"INVALID_USER_OR_PASSWORD\":\"Invalid username, invalid password, or your account may be locked. Check that your username is correct or select \\\"Forgot password?\\\"\",\"INVALID_USER_OR_CODE\":\"The passcode may have expired, or your account may be locked. Please try again.\",\"INVALID_CURRENT_PASSWORD\":\"We were unable to validate your current password. Please Try Again.\",\"MFA_ENROLLMENT_REQUIRED\":\"In order to continue, please add at least one authentication factor to your account.\",\"MFA_RATE_LIMIT\":\"A verification code was recently sent to you. Please try again in 30 seconds.\",\"SYSTEM_ERROR\":\"Our service is temporarily unavailable. You may try again in a few minutes. If you continue to see this message, please contact support.\",\"USER_NOT_LINKED\":\"This user does not have access to the requested solution\",\"USER_STATE_ERROR\":\"Unable to complete sign in. Please contact support.\",\"invalidOtpCode\":\"Your code doesn't match our records. Please try again.\",\"MESSAGE_PASSWORD_UNACCEPTABLE\":\"Password does not meet requirements. Please choose a stronger password.\",\"MESSAGE_MINIMUM_LENGTH_NOT_MET\":\"Password must be at least 8 characters.\",\"MESSAGE_EXCEEDS_MAXIMUM_LENGTH\":\"Password must be less than 72 characters.\",\"MESSAGE_NEED_AT_LEAST_ONE_LETTER\":\"Password must contain at least one letter.\",\"MESSAGE_NEED_AT_LEAST_ONE_NUMBER\":\"Password must contain at least one number.\",\"MESSAGE_NEED_AT_LEAST_ONE_LETTER_OR_ONE_NUMBER\":\"Password must contain at least one letter or one number.\",\"MESSAGE_NO_PASSWORD_PROVIDED\":\"You must provide a password.\",\"MESSAGE_CANNOT_CONTAIN_OR_BE_PART_OF_USERNAME\":\"Password cannot contain part of your username.\",\"MESSAGE_CANNOT_BE_PREVIOUSLY_USED_PASSWORD\":\"Password cannot be one of your previously used passwords.\",\"MESSAGE_CANNOT_BE_A_COMMON_PASSWORD\":\"Password cannot be a known common password.\",\"MESSAGE_INCORRECT_OLD_PASSWORD\":\"Old password is not correct.\",\"MESSAGE_CANNOT_BE_CURRENT_PASSWORD\":\"Password cannot be your current password.\",\"MESSAGE_CANNOT_BE_DICTIONARY_WORD\":\"Password cannot be a single dictionary word.\",\"MESSAGE_CANNOT_BE_COX_BRAND\":\"Password cannot be a singular Cox Automotive brand name.\",\"MESSAGE_CANNOT_CONTAIN_FIRST_NAME_LAST_NAME\":\"Password cannot contain your first or last name.\",\"MESSAGE_CANNOT_CONTAIN_QUADS\":\"Password cannot contain a sequential character pattern.\"},\"disambiguationForm\":{\"text\":\"Is {{username}} your Bridge ID username or your {{solutionDisplayName}} username?\",\"buttonSignInBridge\":\"Sign in with {{solutionDisplayName}}\",\"buttonSignInSolution\":\"Sign in with {{solutionDisplayName}} credentials\"},\"launcherControllerForm\":{\"title\":\"Choose the Cox Automotive solution to launch\",\"dropdownLabel\":\"Solution\",\"dropdownPlaceholder\":\"Choose a solution\"},\"otpValidationForm\":{\"title\":\"Forgot Password?\",\"text\":\"In order to reset your password, you must first verify this is your account.\",\"sentText\":\"Your request has been processed. If you do not receive a code on your mobile phone after 30 seconds, you may resend the code or contact your administrator to reset your password.\",\"otpChallenge\":\"Code\",\"submit\":\"Verify\",\"differentOption\":\"Try another Method\",\"resendCode\":\"Resend Code\"},\"passwordForm\":{\"textInputLabel\":\"Password\",\"linkForgotPassword\":\"Forgot password?\",\"buttonSignIn\":\"Sign in\"},\"successForm\":{\"continue\":\"Continue to {{solutionDisplayName}}\"},\"successRedirect\":{\"message\":\"You're logged in. Directing you to your application.\",\"redirectMessage\":\"You're logged in to your Bridge account and now we're redirecting back to your application.

If this takes longer than expected, there might be a temporary issue. You can visit your landing page and navigate to another application\"},\"passwordResetForm\":{\"title\":\"Change password\",\"titleActivation\":\"Set password to activate Cox Automotive Account\",\"text\":{\"expired\":\"The password for Bridge ID {{displayName}} has expired and must be changed.\",\"requestChange\":\"Change the password for Bridge ID {{displayName}}.\"},\"currentPassword\":{\"inputLabel\":\"Current password\",\"error\":\"Enter current password\"},\"newPassword\":{\"inputLabel\":\"New password\",\"error\":\"Entered password does not meet all requirements\"},\"confirmPassword\":{\"inputLabel\":\"Confirm password\",\"error\":\"Passwords do not match\"},\"buttonChangePassword\":\"Change password\",\"buttonSetPassword\":\"Set password\",\"onSuccess\":\"Your password has been successfully changed.\",\"onSuccessActivation\":\"Your account has been successfully activated\",\"return\":\"Return to {{solutionDisplayName}}\"},\"accountRecoveryPasswordResetForm\":{\"title\":\"Change password\",\"textInputLabel\":\"New password\",\"buttonChangePassword\":\"Change password\",\"buttonContinue\":\"Continue to {{solutionDisplayName}}\"},\"accountRecoveryEmailPasswordResetForm\":{\"login\":\"login\",\"linkExpired\":\"The password recovery link is expired, click here to \",\"solutionLauncher\":\"My Cox Auto\",\"userNotYetAvailable\":\"User account is still being provisioned. Please try again in a few minutes.\",\"linkExpiredActivation\":\"This link has expired. To proceed with account activation, please contact your administrator and request a new email with an active activation link.\"},\"signInControl\":{\"popover\":\"Bridge ID is a Single Sign On gateway to all your Cox Automotive solutions. Use your Bridge ID to eliminate multiple usernames and passwords, access all your solutions faster, and speed up your workday.

If you don't have a Bridge ID account, sign in with your {{solutionDisplayName}} username and password.\",\"popover_bridgeNative\":\"Bridge ID is a Single Sign On gateway to all your Cox Automotive solutions. Use your Bridge ID to eliminate multiple usernames and passwords, access all your solutions faster, and speed up your workday.\",\"title\":\"Sign in to {{solutionDisplayName}}\",\"usernameText\":\"Use your {{solutionDisplayName}} username and password or your {BRIDGEID} account if you have attached {{solutionDisplayName}}.\",\"usernameText_bridgeOnly\":\"Use your {BRIDGEID} username and password.\",\"contactUs\":\"Contact Us\",\"privacyStatement\":\"Privacy Statement\",\"allRightsReserved\":\"All Rights Reserved\",\"termsOfUse\":\"Terms of Use\"},\"usernameForm\":{\"textInputLabel\":\"Username\",\"recoveryVerb\":\"Forgot\",\"linkForgotUsername\":\"username\",\"linkForgotPassword\":\"password?\",\"popoverPasswordHint\":\"Enter your username and click Next to enter your password, or start the password retrieval process\"},\"usernameRecoveryForm\":{\"title\":\"Recover username\",\"text\":\"Do you sign in to {{solutionDisplayName}} with a Bridge ID account?\",\"buttonBridge\":\"Yes, recover Bridge ID username\",\"buttonSolution\":\"No, recover {{solutionDisplayName}}-specific username\"},\"usernameRecoveryStatusForm\":{\"text\":\"Your request is being processed. If an account exists with the email {{recoveryEmail}}, your Bridge ID username will be sent to this email. If you do not receive an email within a few minutes, please contact your administrator to recover your username.\",\"buttonBack\":\"Back\"},\"usernameRecoveryEmailCaptureForm\":{\"text\":\"Enter the email associated with your Bridge ID and we'll attempt to send your username to you.

If you don't know your email, contact your administrator.\",\"inputLabel\":\"Email\",\"nextButton\":\"Next\"},\"userUnlinkedForm\":{\"title\":\"You have signed in, but your Bridge ID: {{username}} is not attached to {{solutionDisplayName}}.\",\"text\":\"You have successfully signed in with your Bridge ID {{username}}, but {{solutionGroup}} doesn't seem to be attached yet.

If you just created this Bridge ID account or attached {{solutionGroup}} to your Bridge ID account within the last 10 seconds, sign out and then sign in with your Bridge ID {{username}} and password again.

If you have other solutions attached to your Bridge ID, you may visit them now.\",\"mySettingsButton\":\"Attach {{solutionGroup}} to your Bridge ID\",\"attachedSolutionsLink\":\"Continue to your attached solutions\"},\"userLinkedToBridgeForm\":{\"text\":\"{{userFirstName}}, you previously attached {{solutionDisplayName}} to your Bridge ID {{bridgeUsername}}. To access {{solutionDisplayName}}, sign in with your Bridge ID.\",\"title\":\"Use your Bridge ID to access {{solutionDisplayName}}\",\"button\":\"Sign in with Bridge ID\"},\"timeoutMessage\":{\"countdown\":\"Sign in within {{remainingTime}}\",\"reload\":\"Restart session\",\"reload_button\":\"Sign in to {{solutionGroup}}\",\"timedOutTitle\":\"Session timed out\",\"timedOutBody\":\"Your session has been timed out.\"},\"passwordRecoveryOptionsForm\":{\"title\":\"Forgot Password?\",\"text\":\"In order to reset your password, you must first verify this is your account.\",\"emailButton\":\"Verify by email\",\"smsButton\":\"Verify by phone\",\"error\":\"Unable to recover password. Please contact your Dealer Admin for more information.\"},\"accountRecoveryEmailSentForm\":{\"title\":\"Forgot Password?\",\"titleText\":\"In order to reset your password, you must first verify this is your account.\",\"resultTitle\":\"An email has been sent to the address registered with your Bridge ID account.\",\"resultText\":\"Follow the instructions in the email to reset your password. The password reset link will expire in 1 hour.\",\"closeButton\":\"Close\"},\"solutionIdentityFlow\":{\"title\":\"Use your {{solutionDisplayName}} username and password\",\"usernameText\":\"To attach {{solutionDisplayName}}, you must use your {{solutionDisplayName}} username and password, not your Bridge ID account.\",\"buttonAttach\":\"Attach\"},\"dtBackdoor\":\"If you are still unable to login, you may access Dealertrack or Dealertrack DMS directly.\",\"duplicateSession\":{\"title\":\"End existing session?\",\"text\":\"You are currently signed in as {{sessionUsername}}. If you continue, you will be signed out of all sessions for {{sessionUsername}} and will sign in as {{newUsername}}.\",\"buttonText\":\"Continue\"},\"eulaForm\":{\"title\":\"Terms of Use and Privacy Statement Update\",\"body\":\"Our Terms of Use and Privacy Statement have been updated. Accepting the Terms of Use and Privacy Statement will allow you to access Cox Automotive applications.\",\"checkBox\":\"I accept the new Terms of Use and Privacy Statement\",\"acceptButton\":\"Continue\"},\"accountVerificationOptionsForm\":{\"title\":\"Verify your identity\",\"body\":\"How would you like to verify your identity?\",\"help\":\"Need help? Contact your dealer admin or view FAQs\",\"select\":\"Select\",\"email\":\"{{param}}\",\"sms\":\"{{param}}Messaging and data rates may apply\",\"totp\":\"Authentication App\"},\"accountVerificationForm\":{\"title\":\"Enter verification code\",\"body\":\"Verify your account by entering the code sent to {{codeSentTo}}. This code will be valid for 5 minutes.\",\"usage\":{\"email\":\"Verify your account by entering the code sent to {{codeSentTo}}. This code will be valid for 5 minutes.\",\"sms\":\"Verify your account by entering the code sent to {{codeSentTo}}. This code will be valid for 5 minutes.\",\"totp\":\"Verify your account by entering the code from your Authentication App\"},\"input\":\"Enter your one time code\",\"errorCodeInvalid\":\"This code is invalid. Please re-enter the code.\",\"buttonGoBack\":\"Try another method\",\"button\":\"Verify\",\"buttonLoading\":\"Verifying\",\"countdown\":\"You may resend a code in {{timeRemaining}}\"},\"factorEnrollmentOptionsForm\":{\"title\":\"Protect your account with multi-factor authentication\",\"titleRecovery\":\"Enable account recovery\",\"body\":\"These factors can be used to verify your identity. SMS and email can be used for password recovery. Only email can be used to recover a forgotten username.\",\"bodyRecovery\":\"Your current factors are insufficient to recover a forgotten password. Please add an additional method below.\",\"optionHeader\":\"Which method would you like to use to verify your account?\",\"optionHeaderRecovery\":\"Which method would you like to use to recover your account?\",\"help\":\"Learn more\",\"select\":\"Select\",\"email\":\"Email
This text is hidden\",\"sms\":\"SMS Text Message
Messaging and data rates may apply\"},\"enrollFactorForm\":{\"title\":{\"sms\":\"Enter your phone number\",\"email\":\"Enter your email address\"},\"phoneInputLabel\":\"Phone Number\",\"phoneNumberInvalid\":\"Mobile phone is invalid\",\"emailInputLabel\":\"Email\",\"emailError\":{\"invalid\":\"Email is invalid\",\"inUse\":\"Email is already in use. Use an alternative email or click Try another method.\"},\"differentOption\":\"Try another Method\",\"button\":\"Submit\",\"buttonLoading\":\"Enrolling\",\"help\":\"Need help? Contact your dealer admin.\",\"success\":{\"email\":\"Email has been verified\",\"sms\":\"SMS has been verified\"}},\"enrollFactorVerificationForm\":{\"buttonLoading\":\"Verifying (Please wait {{timeRemaining}})\"},\"thirdPartyAccessDenied\":{\"title\":\"Unauthorized by Dealership Identity Provider\",\"explanation\":\"You are currently logged in to your dealership's identity provider with an identity that is unauthorized to use Cox Automotive solutions. Please ask your dealership's identity provider administrator to grant you access and try again.\",\"backToSignin\":\"Back To Sign In\"}}},\"es\":{\"translation\":{\"common\":{\"solution\":\"solución\",\"next\":\"Continuar\",\"back\":\"Volver\",\"backTo\":\"Volver a {{return}}\",\"hidePassword\":\"Ocultar la contraseña\",\"hidePassword_plural\":\"Ocultar las contraseñas\",\"showPassword\":\"Mostrar la contraseña\",\"showPassword_plural\":\"Mostrar contraseñas\",\"conjunctionOr\":\"o\"},\"error\":{\"generic\":\"Hubo un error al procesar su solicitud. Inténtelo de nuevo.\",\"genericTODO\":\"Hubo un error al procesar su solicitud. Inténtelo de nuevo.\",\"passwordRequired\":\"Se requiere contraseña.\",\"EXPIRED_PASSWORD\":\"Cambiar la contraseña de Bridge ID.\",\"FAILED_PASSWORD_CHANGE_REQUIREMENTS\":\"La contraseña ingresada no cumple con los criterios requeridos. Ingrese una contraseña que cumpla con los siguientes criterios.\",\"FAILED_PASSWORD_CHANGE_UPDATED_REQUIREMENTS\":\"La contraseña ingresada no cumple con los criterios requeridos y/o no puede ser una contraseña débil conocida. Ingrese una contraseña que cumpla con los siguientes criterios.\",\"INVALID_USER_OR_PASSWORD\":\"Nombre de usuario inválido, contraseña inválida o su cuenta puede estar bloqueada. Compruebe que el nombre de usuario es correcto o seleccione \\\"¿Se le olvidó su contraseña?\\\"\",\"INVALID_USER_OR_CODE\":\"Es posible que el código de acceso haya caducado o que su cuenta esté bloqueada. Por favor, inténtelo de nuevo.\",\"INVALID_CURRENT_PASSWORD\":\"No pudimos validar la contraseña actual. Por favor, inténtelo de nuevo.\",\"MFA_ENROLLMENT_REQUIRED\":\"Para continuar, añada al menos un factor de autenticación a su cuenta.\",\"MFA_RATE_LIMIT\":\"Se le ha enviado recientemente un código de verificación. Por favor, inténtelo de nuevo en 30 segundos.\",\"SYSTEM_ERROR\":\"Nuestro servicio no está disponible temporariamente. Puede intentarlo de nuevo en unos minutos. Si continúa viendo este mensaje, por favor contacte al servicio de asistencia.\",\"USER_NOT_LINKED\":\"Este usuario no tiene acceso a la solución solicitada.\",\"USER_STATE_ERROR\":\"No se puede completar el registro. Por favor, contacte al servicio de asistencia.\",\"invalidOtpCode\":\"Su código no coincide con nuestros registro. Inténtelo de nuevo.\",\"MESSAGE_PASSWORD_UNACCEPTABLE\":\"La contraseña no cumple los requisitos. Por favor, elija una contraseña más fuerte.\",\"MESSAGE_MINIMUM_LENGTH_NOT_MET\":\"La contraseña debe tener al menos 8 caracteres.\",\"MESSAGE_EXCEEDS_MAXIMUM_LENGTH\":\"La contraseña debe tener menos de 72 caracteres.\",\"MESSAGE_NEED_AT_LEAST_ONE_LETTER\":\"La contraseña debe contener al menos una letra.\",\"MESSAGE_NEED_AT_LEAST_ONE_NUMBER\":\"La contraseña debe contener al menos un número.\",\"MESSAGE_NEED_AT_LEAST_ONE_LETTER_OR_ONE_NUMBER\":\"La contraseña debe contener al menos una letra o un número.\",\"MESSAGE_NO_PASSWORD_PROVIDED\":\"Debe proporcionar una contraseña.\",\"MESSAGE_CANNOT_CONTAIN_OR_BE_PART_OF_USERNAME\":\"La contraseña no puede contener parte de su nombre de usuario.\",\"MESSAGE_CANNOT_BE_PREVIOUSLY_USED_PASSWORD\":\"La contraseña no puede ser una de sus contraseñas utilizadas anteriormente.\",\"MESSAGE_CANNOT_BE_A_COMMON_PASSWORD\":\"La contraseña no puede ser una contraseña común conocida.\",\"MESSAGE_INCORRECT_OLD_PASSWORD\":\"La contraseña previa no es correcta.\",\"MESSAGE_CANNOT_BE_CURRENT_PASSWORD\":\"La contraseña no puede ser su contraseña actual.\",\"MESSAGE_CANNOT_BE_DICTIONARY_WORD\":\"La contraseña no puede ser una sola palabra del diccionario inglés.\",\"MESSAGE_CANNOT_BE_COX_BRAND\":\"La contraseña no puede ser una marca singular de Cox Automotive.\",\"MESSAGE_CANNOT_CONTAIN_FIRST_NAME_LAST_NAME\":\"La contraseña no puede contener su nombre ni su apellido.\",\"MESSAGE_CANNOT_CONTAIN_QUADS\":\"La contraseña no puede contener un patrón de caracteres secuenciales.\"},\"disambiguationForm\":{\"text\":\"¿Es {{username}} su nombre de usuario de Bridge ID o su nombre de usuario {{solutionDisplayName}}?\",\"buttonSignInBridge\":\"Inicie sesión con {{solutionDisplayName}}\",\"buttonSignInSolution\":\"Inicie sesión con las credenciales {{solutionDisplayName}}\"},\"launcherControllerForm\":{\"title\":\"Elija la solución Cox Automotive para lanzar\",\"dropdownLabel\":\"Solución\",\"dropdownPlaceholder\":\"Elija una solucion\"},\"otpValidationForm\":{\"title\":\"¿Olvidó la contraseña?\",\"text\":\"Para restablecer su contraseña, primero debe verificar que esta es su cuenta.\",\"sentText\":\"Su solicitud ha sido procesada. Si no recibe un código en su teléfono móvil después de 30 segundos, puede reenviar el código o ponerse en contacto con su administrador para restablecer la contraseña.\",\"otpChallenge\":\"Código\",\"submit\":\"Verifique\",\"differentOption\":\"Pruebe otro método\",\"resendCode\":\"Reenviar el código\"},\"passwordForm\":{\"textInputLabel\":\"Contraseña\",\"linkForgotPassword\":\"¿Se le olvidó su contraseña?\",\"buttonSignIn\":\"Registrarse\"},\"successForm\":{\"continue\":\"Continúa en {{solutionDisplayName}}\"},\"successRedirect\":{\"message\":\"Ha iniciado sesión. Dirigiéndolo a su aplicación.\",\"redirectMessage\":\"Ha iniciado sesión en su cuenta de Bridge y ahora estamos redirigiendo de nuevo a su aplicación.

Si esto tarda más de lo esperado, podría haber un problema temporal. Puede visitar su página de inicio y navegar a otra aplicación\"},\"passwordResetForm\":{\"title\":\"Cambiar contraseña\",\"titleActivation\":\"Establecer contraseña para activar la cuenta de Cox Automotive\",\"text\":{\"expired\":\"La contraseña de {{displayName}} ha expirado y debe ser cambiada.\",\"requestChange\":\"Cambiar la contraseña de Bridge ID {{displayName}}.\"},\"currentPassword\":{\"inputLabel\":\"Contraseña actual\",\"error\":\"Introduzca la contraseña actual\"},\"newPassword\":{\"inputLabel\":\"Nueva contraseña\",\"error\":\"La contraseña introducida no cumple todos los requisitos\"},\"confirmPassword\":{\"inputLabel\":\"Confirmar la contraseña\",\"error\":\"Las contraseñas no coinciden\"},\"buttonChangePassword\":\"Cambiar la contraseña\",\"buttonSetPassword\":\"Establecer contraseña\",\"onSuccess\":\"Su contraseña ha sido cambiada con éxito.\",\"onSuccessActivation\":\"Tu cuenta ha sido activada con éxito\",\"return\":\"Volver a {{solutionDisplayName}}\"},\"accountRecoveryPasswordResetForm\":{\"title\":\"Cambiar la contraseña\",\"textInputLabel\":\"Nueva contraseña\",\"buttonChangePassword\":\"Cambiar la contraseña\",\"buttonContinue\":\"Continúa en {{solutionDisplayName}}\"},\"accountRecoveryEmailPasswordResetForm\":{\"login\":\"login\",\"linkExpired\":\"El enlace de recuperación de la contraseña ha caducado, haga clic aquí para \",\"solutionLauncher\":\"My Cox Auto\",\"userNotYetAvailable\":\"La cuenta de usuario aún se está aprovisionando. Por favor, inténtelo de nuevo en unos minutos.\",\"linkExpiredActivation\":\"Este enlace ha expirado. Para proceder con la activación de la cuenta, por favor contacta a tu administrador y solicita un nuevo correo electrónico con un enlace de activación activo.\"},\"signInControl\":{\"popover\":\"Bridge ID es un portal de inicio de sesión único para todas sus soluciones de Cox Automotive. Use su Bridge ID para eliminar múltiples nombres de usuario y contraseñas, acceda a todas sus soluciones más rápido y acelere su jornada laboral.

Si no tiene una cuenta de Bridge ID, inicie sesión con su {{solutionDisplayName}} nombre de usuario y contraseña. \",\"popover_bridgeNative\":\"Bridge ID es un portal de inicio de sesión único para todas sus soluciones de Cox Automotive. Use su Bridge ID para eliminar múltiples nombres de usuario y contraseñas, acceda a todas sus soluciones más rápido y acelere su jornada laboral.\",\"title\":\"Inicie sesión en {{solutionDisplayName}}\",\"usernameText\":\"Utilice su nombre de usuario y contraseña {{solutionDisplayName}} o su cuenta {BRIDGEID} si ha adjuntado {{solutionDisplayName}}.\",\"usernameText_bridgeOnly\":\"Utilice su nombre de usuario y contraseña de {BRIDGEID}.\",\"contactUs\":\"Contáctenos\",\"privacyStatement\":\"Declaracion de Privacidad\",\"allRightsReserved\":\"Reservados Todos Los Derechos\",\"termsOfUse\":\"Condiciones de Uso\"},\"usernameForm\":{\"textInputLabel\":\"Nombre de usuario\",\"recoveryVerb\":\"¿Olvidó\",\"linkForgotUsername\":\"nombre de usuario\",\"linkForgotPassword\":\"contraseña?\",\"popoverPasswordHint\":\"Introduzca su nombre de usuario y haga clic en Continuar para introducir su contraseña, o inicie el proceso de recuperación de la contraseña\"},\"usernameRecoveryForm\":{\"title\":\"Recuperar el nombre de usuario\",\"text\":\"¿Inicia sesión en {{solutionDisplayName}} con una cuenta de Bridge ID?\",\"buttonBridge\":\"Sí, recupere el nombre de usuario de Bridge ID\",\"buttonSolution\":\"No, recupere {{solutionDisplayName}}: nombre de usuario específico\"},\"usernameRecoveryStatusForm\":{\"text\":\"Su solicitud está siendo procesada. Si existe una cuenta con el correo electrónico {{recoveryEmail}}, su nombre de usuario Bridge ID será enviado a este correo electrónico. Si no recibe un correo electrónico en unos minutos, por favor contacte a su administrador para recuperar su nombre de usuario.\",\"buttonBack\":\"Volver\"},\"usernameRecoveryEmailCaptureForm\":{\"text\":\"Ingrese el correo electrónico asociado con su ID del Puente e intentaremos enviarle su nombre de usuario.

Si no conoce su correo electrónico, póngase en contacto con su administrador.\",\"inputLabel\":\"Correo electrónico\",\"nextButton\":\"Continuar\"},\"userUnlinkedForm\":{\"title\":\"Ha iniciado sesión, pero su Bridge ID: {{username}} no está vinculado a {{solutionDisplayName}}.\",\"text\":\"Has iniciado sesión con éxito con su ID de Bridge {{username}}, pero {{solutionGroup}} todavía no parece estar vinculada.

Si acaba de crear esta cuenta de Bridge ID o adjuntar {{solutionGroup}} a su cuenta de Bridge ID en los últimos 10 segundos, cierre la sesión y luego inicie sesión con su Bridge ID {{username}} y contraseña nuevamente.

Si tiene otras soluciones vinculadas a su Bridge ID, puede visítalos ahora.\",\"mySettingsButton\":\"Adjunte {{solutionGroup}} a su Bridge ID\",\"attachedSolutionsLink\":\"Continúe con sus soluciones adjuntas\"},\"userLinkedToBridgeForm\":{\"text\":\"{{userFirstName}}, usted previamente adjuntó {{solutionDisplayName}} a su Bridge ID {{bridgeUsername}}. Para acceder a {{solutionDisplayName}}, inicie sesión con su Bridge ID.\",\"title\":\"Use su Bridge ID para acceder a {{solutionDisplayName}}\",\"button\":\"Inicie sesión con Bridge ID\"},\"timeoutMessage\":{\"countdown\":\"Inicie sesión en {{remainingTime}}\",\"reload\":\"Reiniciar sesión\",\"reload_button\":\"Inicie sesión en {{{solutionGroup}}\",\"timedOutTitle\":\"Sesión expirada\",\"timedOutBody\":\"Su sesión ha terminado.\"},\"passwordRecoveryOptionsForm\":{\"title\":\"¿Olvidó su contraseña?\",\"text\":\"Para restablecer su contraseña, primero debe verificar que esta es su cuenta.\",\"emailButton\":\"Verificar por correo electrónico\",\"smsButton\":\"Verificar por teléfono\",\"error\":\"No se puede recuperar la contraseña. Por favor, póngase en contacto con su administrador para obtener más información.\"},\"accountRecoveryEmailSentForm\":{\"title\":\"¿Olvidó su contraseña?\",\"titleText\":\"Para restablecer su contraseña, primero debe verificar que esta es su cuenta.\",\"resultTitle\":\"Se ha enviado un correo electrónico a la dirección registrada en su cuenta de Bridge ID.\",\"resultText\":\"Siga las instrucciones en el mensaje para restablecer su contraseña. El enlace para restablecer la contraseña expirará en 1 hora.\",\"closeButton\":\"Cerrar\"},\"solutionIdentityFlow\":{\"title\":\"Use su {{solutionDisplayName}} nombre de usuario y contraseña\",\"usernameText\":\"Para vincular {{solutionDisplayName}}, debes usar su {{solutionDisplayName}} nombre de usuario y contraseña, no su cuenta de Bridge ID.\",\"buttonAttach\":\"Vincular\"},\"dtBackdoor\":\"Si todavía no puede acceder, puede acceder a Dealertrack o Dealertrack DMS directamente.\",\"duplicateSession\":{\"title\":\"¿Terminar la sesión actual?\",\"text\":\"Actualmente está registrado como {{{sessionUsername}}. Si continúa, saldrá de todas las sesiones de {{sessionUsername}} y se registrará como {{newUsername}}.\",\"buttonText\":\"Continuar\"},\"eulaForm\":{\"title\":\"Actualización de las Condiciones de Uso y la Declaración de Privacidad\",\"body\":\"Nuestras Condiciones de Uso y Declaración de Privacidad han sido actualizadas. La aceptación de las Condiciones de Uso y la Declaración de Privacidad le permitirá acceder a las aplicaciones de Cox Automotive.\",\"checkBox\":\"Acepto las nuevos Condiciones de Uso y la Declaración de Privacidad\",\"acceptButton\":\"Aceptar\"},\"accountVerificationOptionsForm\":{\"title\":\"Verifique su identidad\",\"body\":\"¿Cómo desea verificar su identidad?\",\"help\":\"¿Necesita ayuda? Póngase en contacto con el administrador de su concesionario o consulte las preguntas frecuentes\",\"select\":\"Seleccione\",\"email\":\"{{param}}\",\"sms\":\"{{param}}Pueden aplicarse tarifas de mensajería y datos\",\"totp\":\"La aplicación de autenticación\"},\"accountVerificationForm\":{\"title\":\"Introduzca el código de verificación\",\"body\":\"Verifique su cuenta introduciendo el código enviado a {{codeSentTo}}. Este código será válido por 5 minutos.\",\"usage\":{\"email\":\"Verifique su cuenta introduciendo el código enviado a {{codeSentTo}}. Este código será válido por 5 minutos.\",\"sms\":\"Verifique su cuenta introduciendo el código enviado a {{codeSentTo}}. Este código será válido por 5 minutos.\",\"totp\":\"Verifique su cuenta introduciendo el código que aparece en su Applicación de Autenticación\"},\"input\":\"Introduzca su código único\",\"errorCodeInvalid\":\"Este código no es válido. Por favor, vuelva a introducir el código.\",\"buttonGoBack\":\"Pruebe otro método\",\"button\":\"Verificar\",\"buttonLoading\":\"Verificando\",\"countdown\":\"Puede reenviar un código en {{timeRemaining}}\"},\"factorEnrollmentOptionsForm\":{\"title\":\"Proteja su cuenta con la autenticación multifactorial\",\"titleRecovery\":\"Activar la recuperación de su cuenta\",\"body\":\"Estos factores pueden utilizarse para verificar su identidad. El SMS y el correo electrónico pueden utilizarse para recuperar la contraseña. Sólo el correo electrónico puede utilizarse para recuperar un nombre de usuario olvidado.\",\"bodyRecovery\":\"Sus factores actuales son insuficientes para recuperar una contraseña olvidada. Por favor, añada un método adicional a continuación.\",\"optionHeader\":\"¿Qué método desea utilizar para verificar su cuenta?\",\"optionHeaderRecovery\":\"¿Qué método desea utilizar para recuperar su cuenta?\",\"help\":\"Más información\",\"select\":\"Seleccione\",\"email\":\"Correo electrónico
This text is hidden\",\"sms\":\"SMS mensaje de texto
Pueden aplicarse tarifas de mensajería y datos\"},\"enrollFactorForm\":{\"title\":{\"sms\":\"Introduzca su número de teléfono\",\"email\":\"Introduzca su correo electrónico\"},\"phoneInputLabel\":\"Número de teléfono\",\"emailInputLabel\":\"Correo electrónico\",\"phoneNumberInvalid\":\"El teléfono móvil no es válido\",\"emailError\":{\"invalid\":\"Su correo electrónico no es válido\",\"inUse\":\"El correo electrónico ya está en uso. Utilice un correo electrónico alternativo o haga clic en Pruebe otro método.\"},\"differentOption\":\"Pruebe otro método\",\"button\":\"Enviar\",\"buttonLoading\":\"Enviar\",\"help\":\"¿Necesitas ayuda? Póngase en contacto con el administrador de su concesionario.\",\"success\":{\"email\":\"El correo electrónico ha sido verificado\",\"sms\":\"El teléfono móvil ha sido verificado\"}},\"enrollFactorVerificationForm\":{\"buttonLoading\":\"Verificando (Por favor, espere {{timeRemaining}})\"},\"thirdPartyAccessDenied\":{\"title\":\"No Autorizado por el Proveedor de Identidad del Concesionario\",\"explanation\":\"Ha iniciado sesión en el proveedor de identidad de su concesionario con una identidad que no está autorizada a utilizar las soluciones de Cox Automotive. Pida al administrador del proveedor de identidad de tu concesionario que le conceda acceso y vuelva a intentarlo.\",\"backToSignin\":\"Volver a Iniciar Sesión\"}}},\"fr\":{\"translation\":{\"common\":{\"solution\":\"Solution\",\"next\":\"Prochain\",\"back\":\"Retour\",\"backTo\":\"Retour à {{return}}\",\"hidePassword\":\"Cacher le mot de passe\",\"hidePassword_plural\":\"Cacher les mots de passe\",\"showPassword\":\"Montrer le mot de passe\",\"showPassword_plural\":\"Montrer les mots de passe\",\"conjunctionOr\":\"ou\"},\"error\":{\"generic\":\"Il y a eu une erreur avec votre demande. S'il vous plaît, réessayez.\",\"genericTODO\":\"Il y a eu une erreur lors du traitement de votre demande. S'il vous plaît, réessayez.\",\"passwordRequired\":\"Mot de passe est requis.\",\"EXPIRED_PASSWORD\":\"Changer le mot de passe Bridge ID.\",\"FAILED_PASSWORD_CHANGE_REQUIREMENTS\":\"Le mot de passe entré ne répond pas aux critères requis. Entrez un mot de passe qui répond aux critères suivants.\",\"FAILED_PASSWORD_CHANGE_UPDATED_REQUIREMENTS\":\"Le mot de passe entré ne répond pas aux critères requis et/ou ne peut pas être un mot de passe faible connu. Entrez un mot de passe qui répond aux critères suivants.\",\"INVALID_USER_OR_PASSWORD\":\"Un nom d'utilisateur ou un mot de passe non valide, ou votre compte peut être verrouillé. Vérifiez que votre nom d'utilisateur est correct ou sélectionnez \\\"Mot de passe oublié?\\\"\",\"INVALID_USER_OR_CODE\":\"Le code d'accès a peut-être expiré, ou votre compte est peut-être verrouillé. Veuillez réessayer.\",\"INVALID_CURRENT_PASSWORD\":\"Nous n'avons pas pu valider votre mot de passe actuel. Veuillez réessayer.\",\"MFA_RATE_LIMIT\":\"Un code de vérification vous a été envoyé récemment. Veuillez réessayer dans 30 secondes.\",\"MFA_ENROLLMENT_REQUIRED\":\"Afin de continuer, veuillez ajouter au moins un facteur d'authentification à votre compte.\",\"SYSTEM_ERROR\":\"Notre service est temporairement indisponible. Vous pouvez réessayer dans quelques minutes. Si vous continuez à voir ce message, veuillez contacter le support.\",\"USER_NOT_LINKED\":\"Cet utilisateur n'a pas accès à la solution demandée\",\"USER_STATE_ERROR\":\"Impossible de terminer l'identification. Veuillez contacter l'assistance.\",\"invalidOtpCode\":\"Votre code ne correspond pas à nos enregistrements. Veuillez réessayer.\",\"MESSAGE_PASSWORD_UNACCEPTABLE\":\"Le mot de passe ne répond pas aux exigences. Veuillez choisir un mot de passe plus fort.\",\"MESSAGE_MINIMUM_LENGTH_NOT_MET\":\"Le mot de passe doit comporter au moins 8 caractères.\",\"MESSAGE_EXCEEDS_MAXIMUM_LENGTH\":\"Le mot de passe doit comporter moins de 72 caractères.\",\"MESSAGE_NEED_AT_LEAST_ONE_LETTER\":\"Le mot de passe doit contenir au moins une lettre.\",\"MESSAGE_NEED_AT_LEAST_ONE_NUMBER\":\"Le mot de passe doit contenir au moins un chiffre.\",\"MESSAGE_NEED_AT_LEAST_ONE_LETTER_OR_ONE_NUMBER\":\"Le mot de passe doit contenir au moins une lettre ou un chiffre.\",\"MESSAGE_NO_PASSWORD_PROVIDED\":\"Vous devez fournir un mot de passe.\",\"MESSAGE_CANNOT_CONTAIN_OR_BE_PART_OF_USERNAME\":\"Le mot de passe ne peut pas contenir une partie de votre nom d'utilisateur.\",\"MESSAGE_CANNOT_BE_PREVIOUSLY_USED_PASSWORD\":\"Le mot de passe ne peut pas être l'un de vos mots de passe précédemment utilisés.\",\"MESSAGE_CANNOT_BE_A_COMMON_PASSWORD\":\"Le mot de passe ne peut pas être un mot de passe courant connu.\",\"MESSAGE_INCORRECT_OLD_PASSWORD\":\"L'ancien mot de passe n'est pas correct.\",\"MESSAGE_CANNOT_BE_CURRENT_PASSWORD\":\"Le mot de passe ne peut pas être votre mot de passe actuel.\",\"MESSAGE_CANNOT_BE_DICTIONARY_WORD\":\"Le mot de passe ne peut pas être un seul mot du dictionnaire anglais.\",\"MESSAGE_CANNOT_BE_COX_BRAND\":\"Le mot de passe ne peut pas être un nom de marque unique de Cox Automotive.\",\"MESSAGE_CANNOT_CONTAIN_FIRST_NAME_LAST_NAME\":\"Le mot de passe ne peut pas contenir votre prénom ou votre nom de famille.\",\"MESSAGE_CANNOT_CONTAIN_QUADS\":\"Le mot de passe ne peut pas contenir un motif de caractères séquentiels.\"},\"disambiguationForm\":{\"text\":\"Est-ce que {{username}} votre Bridge ID ou votre nom d'utilisateur de {{solutionDisplayName}}?\",\"buttonSignInBridge\":\"Connectez-vous avec {{solutionDisplayName}}\",\"buttonSignInSolution\":\"Connectez-vous avec les informations d'identification {{solutionDisplayName}}.\"},\"launcherControllerForm\":{\"title\":\"Choisissez la solution de Cox Automotive à lancer\",\"dropdownLabel\":\"Solution\",\"dropdownPlaceholder\":\"Choisissez une solution\"},\"otpValidationForm\":{\"title\":\"Oublié votre mot de passe ?\",\"text\":\"Pour réinitialiser votre mot de passe, vous devez d'abord vérifier qu'il s'agit bien de votre compte.\",\"sentText\":\"Votre demande a été traitée. Si vous ne recevez pas de code sur votre téléphone portable après 30 secondes, vous pouvez renvoyer le code ou contacter votre administrateur pour réinitialiser votre mot de passe.\",\"otpChallenge\":\"Code\",\"submit\":\"Vérifier\",\"differentOption\":\"Essayez une autre méthode\",\"resendCode\":\"Renvoyer le code\"},\"passwordForm\":{\"textInputLabel\":\"Mot de passe\",\"linkForgotPassword\":\"mot de passe oublié?\",\"buttonSignIn\":\"Se Connecter\"},\"successForm\":{\"continue\":\"Continuer sur {{solutionDisplayName}}\"},\"successRedirect\":{\"message\":\"Vous êtes connecté. Redirection vers votre application.\",\"redirectMessage\":\"Vous êtes connecté à votre compte Bridge et nous vous redirigeons maintenant vers votre application.

Si cela prend plus de temps que prévu, il peut y avoir un problème temporaire. Vous pouvez visiter votre page d'accueil et naviguer vers une autre application\"},\"passwordResetForm\":{\"title\":\"Changer le mot de passe\",\"titleActivation\":\"Définir le mot de passe pour activer le compte Cox Automotive\",\"text\":{\"expired\":\"Le mot de passe pour Bridge ID {{displayName}} a expiré et doit être modifié.\",\"requestChange\":\"Changez le mot de passe pour Bridge ID {{displayName}}.\"},\"currentPassword\":{\"inputLabel\":\"Mot de passe actuel\",\"error\":\"Entrez le mot de passe actuel\"},\"newPassword\":{\"inputLabel\":\"Nouveau mot de passe\",\"error\":\"Le mot de passe saisi ne répond pas à toutes les exigences\"},\"confirmPassword\":{\"inputLabel\":\"Confirmer le mot de passe\",\"error\":\"Les mots de passe ne correspondent pas\"},\"buttonChangePassword\":\"Changer le mot de passe\",\"buttonSetPassword\":\"Définir le mot de passe\",\"onSuccess\":\"Votre mot de passe a été modifié avec succès.\",\"onSuccessActivation\":\"Votre compte a été activé avec succès\",\"return\":\"Retour à {{solutionDisplayName}}\"},\"accountRecoveryPasswordResetForm\":{\"title\":\"Changer de mot de passe\",\"textInputLabel\":\"Nouveau mot de passe\",\"buttonChangePassword\":\"Changer de mot de passe\",\"buttonContinue\":\"Continuer sur {{solutionDisplayName}}\"},\"accountRecoveryEmailPasswordResetForm\":{\"login\":\"login\",\"linkExpired\":\"Le lien de récupération du mot de passe est expiré, cliquez ici pour \",\"solutionLauncher\":\"My Cox Auto\",\"userNotYetAvailable\":\"Le compte utilisateur est toujours en cours de provisionnement. Veuillez réessayer dans quelques minutes.\",\"linkExpiredActivation\":\"Ce lien a expiré. Pour procéder à l'activation du compte, veuillez contacter votre administrateur et demander un nouvel e-mail avec un lien d'activation actif.\"},\"signInControl\":{\"popover\":\"Bridge ID est une passerelle à authentification unique pour toutes vos solutions Cox Automotive. Utilisez votre identifiant de Bridge ID pour éliminer plusieurs noms d'utilisateur et mots de passe, accéder à toutes vos solutions plus rapidement et accélérer votre journée de travail.

Si vous n'avez pas de compte Bridge ID, connectez-vous avec votre nom d'utilisateur et votre mot de passe {{solutionDisplayName}}\",\"popover_bridgeNative\":\"Bridge ID est une passerelle à authentification unique pour toutes vos solutions Cox Automotive. Utilisez votre identifiant de Bridge ID pour éliminer plusieurs noms d'utilisateur et mots de passe, accéder à toutes vos solutions plus rapidement et accélérer votre journée de travail.\",\"title\":\"Connectez-vous à {{solutionDisplayName}}\",\"usernameText\":\"Utilisez votre nom d’utilisateur et votre mot de passe {{solutionDisplayName}} ou votre compte {BRIDGEID} si vous avez joint {{solutionDisplayName}}.\",\"usernameText_bridgeOnly\":\"Utilisez votre {BRIDGEID} nom d’utilisateur et mot de passe.\",\"contactUs\":\"Contactez-nous\",\"privacyStatement\":\"Déclaration de Confidentialité\",\"allRightsReserved\":\"Tous droits réservés\",\"termsOfUse\":\"Conditions d'Utilisation\"},\"usernameForm\":{\"textInputLabel\":\"Nom d'utilisateur\",\"recoveryVerb\":\"Vous avez oublié\",\"linkForgotUsername\":\"identifiant\",\"linkForgotPassword\":\"mot de passe ?\",\"popoverPasswordHint\":\"Entrez votre nom d'utilisateur et cliquez sur Prochain pour entrer votre mot de passe, ou lancez le processus de récupération du mot de passe\"},\"usernameRecoveryForm\":{\"title\":\"Récupérer un nom d'utilisateur\",\"text\":\"Vous vous connectez sur {{solutionDisplayName}} avec un Bridge ID?\",\"buttonBridge\":\"Oui, récupérer le nom d'utilisateur Bridge ID\",\"buttonSolution\":\"Non, récupérer le nom d'utilisateur spécifique de {{solutionDisplayName}}\"},\"usernameRecoveryStatusForm\":{\"text\":\"Votre demande est en cours de traitement. Si un compte existe avec l'e-mail {{recoveryEmail}}, votre nom d'utilisateur Bridge ID sera envoyé à cet e-mail. Si vous ne recevez pas de courriel dans les minutes qui suivent, veuillez contacter votre administrateur pour récupérer votre nom d'utilisateur.\",\"buttonBack\":\"Retour\"},\"usernameRecoveryEmailCaptureForm\":{\"text\":\"Saisissez l'adresse électronique associée à votre ID Bridge et nous tenterons de vous envoyer votre nom d'utilisateur.

Si vous ne connaissez pas votre adresse électronique, contactez votre administrateur.\",\"inputLabel\":\"Courriel :\",\"nextButton\":\"Suivant\"},\"userUnlinkedForm\":{\"title\":\"Vous vous êtes connecté, mais votre Bridge ID : {{username}} n'est pas rattaché à {{solutionDisplayName}}.\",\"text\":\"Vous vous êtes connecté avec votre identifiant Bridge ID {{username}}, mais {{solutionGroup}} ne semble pas encore être connecté.

Si vous venez de créer ce compte Bridge ID ou si vous avez joint {{solutionGroup}} à votre compte Bridge ID au cours des 10 dernières secondes, déconnectez-vous, puis connectez-vous à nouveau avec votre Bridge ID {{username}} et votre mot de passe.

Si votre Bridge ID est associé à d'autres solutions, vous pouvez visitez-les maintenant.\",\"mySettingsButton\":\"Attachez {{solutionGroup}} à votre ID de pont\",\"attachedSolutionsLink\":\"Continuez vers vos solutions ci-jointes\"},\"userLinkedToBridgeForm\":{\"text\":\"{{userFirstName}}, vous avez précédemment attaché {{solutionDisplayName}} à votre {{bridgeUsername}}. Pour accéder à {{solutionDisplayName}}, connectez-vous avec votre Bridge ID.\",\"title\":\"Utilisez votre BridgeID pour accéder à {{solutionDisplayName}}\",\"button\":\"Connectez-vous avec Bridge ID\"},\"timeoutMessage\":{\"countdown\":\"Connectez-vous dans les {{remainingTime}}\",\"reload\":\"Redémarrer la session\",\"reload_button\":\"Connectez-vous à {{solutionGroup}}\",\"timedOutTitle\":\"Séance interrompue\",\"timedOutBody\":\"Votre session a été interrompue.\"},\"passwordRecoveryOptionsForm\":{\"title\":\"Oublié votre mot de passe ?\",\"text\":\"Pour réinitialiser votre mot de passe, vous devez d'abord vérifier qu'il s'agit bien de votre compte.\",\"emailButton\":\"Vérification par courrier électronique\",\"smsButton\":\"Vérifier par téléphone\",\"error\":\"Impossible de récupérer le mot de passe. Veuillez contacter votre administrateur pour plus d'informations.\"},\"accountRecoveryEmailSentForm\":{\"title\":\"Oublié votre mot de passe ?\",\"titleText\":\"Pour réinitialiser votre mot de passe, vous devez d'abord vérifier qu'il s'agit bien de votre compte.\",\"resultTitle\":\"Un courrier électronique a été envoyé à l'adresse enregistrée avec votre compte Bridge ID.\",\"resultText\":\"Suivez les instructions contenues dans le courriel pour réinitialiser votre mot de passe. Le lien de réinitialisation du mot de passe expirera dans 1 heure.\",\"closeButton\":\"Fermer\"},\"solutionIdentityFlow\":{\"title\":\"Utilisez votre nom d'utilisateur et votre mot de passe {{solutionDisplayName}}\",\"usernameText\":\"Pour joindre {{solutionDisplayName}}, vous devez utiliser votre nom d'utilisateur et votre mot de passe {{solutionDisplayName}}, et non votre compte Bridge ID.\",\"buttonAttach\":\"Joindre\"},\"dtBackdoor\":\"Si vous ne parvenez toujours pas à vous connecter, vous pouvez accéder directement à Dealertrack ou Dealertrack DMS.\",\"duplicateSession\":{\"title\":\"Mettre fin à une session existante?\",\"text\":\"Vous êtes actuellement connecté en tant que {{sessionUsername}}. Si vous continuez, vous serez déconnecté de toutes les sessions pour {{sessionUsername}} et vous vous connecterez en tant que {{newUsername}}.\",\"buttonText\":\"Continuer\"},\"eulaForm\":{\"title\":\"Mise à jour des Conditions d'Utilisation et la Déclaration de Confidentialité\",\"body\":\"Nos Conditions d'Utilisation et Déclaration de Confidentialité ont été mises à jour. L'acceptation des Conditions d'Utilisation et de la Déclaration de Confidentialité vous permettra d'accéder aux applications de Cox Automotive.\",\"checkBox\":\"J'accepte les nouvelles Conditions d'Utilisation et la Déclaration de Confidentialité\",\"acceptButton\":\"Continuer\"},\"accountVerificationOptionsForm\":{\"title\":\"Vérifiez votre identité\",\"body\":\"Comment voulez-vous vérifier votre identité ?\",\"help\":\"Vous avez besoin d'aide ? Contactez votre concessionnaire admin ou consultez les FAQ\",\"select\":\"Sélectionnez\",\"email\":\"{{param}}\",\"sms\":\"{{param}}Des tarifs de messagerie et de données peuvent s'appliquer\",\"totp\":\"L'application d'authentification\"},\"accountVerificationForm\":{\"title\":\"Entrez le code de vérification\",\"body\":\"Vérifier votre compte en entrant le code envoyé à {{codeSentTo}}. Ce code sera valable pendant 5 minutes.\",\"usage\":{\"email\":\"Vérifier votre compte en entrant le code envoyé à {{codeSentTo}}. Ce code sera valable pendant 5 minutes.\",\"sms\":\"Vérifier votre compte en entrant le code envoyé à {{codeSentTo}}. Ce code sera valable pendant 5 minutes.\",\"totp\":\"Verify your account by entering the code from your Authentication App\"},\"input\":\"Entrez votre code unique\",\"errorCodeInvalid\":\"Ce code n'est pas valide. Veuillez saisir à nouveau le code.\",\"buttonGoBack\":\"Essayez une autre méthode\",\"button\":\"Vérifier\",\"buttonLoading\":\"Vérification de\",\"countdown\":\"Vous pouvez renvoyer un code dans {{timeRemaining}}\"},\"factorEnrollmentOptionsForm\":{\"title\":\"Protégez votre compte avec l'authentification multifactorielle\",\"titleRecovery\":\"Activer la récupération du compte\",\"body\":\"Ces facteurs peuvent être utilisés pour vérifier votre identité. Les SMS et les e-mails peuvent être utilisés pour récupérer un mot de passe. Seul l'e-mail peut être utilisé pour récupérer un nom d'utilisateur oublié.\",\"bodyRecovery\":\"Vos facteurs actuels sont insuffisants pour récupérer un mot de passe oublié. Veuillez ajouter une méthode supplémentaire ci-dessous.\",\"optionHeader\":\"Quelle méthode souhaitez-vous utiliser pour vérifier votre compte?\",\"optionHeaderRecovery\":\"Quelle méthode souhaitez-vous utiliser pour récupérer votre compte?\",\"help\":\"En savoir plus\",\"select\":\"Sélectionnez\",\"email\":\"Courriel
This text is hidden\",\"sms\":\"SMS Message texte
Des tarifs de messagerie et de données peuvent s'appliquer\"},\"enrollFactorForm\":{\"title\":{\"sms\":\"Entrez votre numéro de téléphone\",\"email\":\"Entrez votre courriel\"},\"phoneInputLabel\":\"Numéro de téléphone\",\"emailInputLabel\":\"Courriel\",\"phoneNumberInvalid\":\"Le téléphone portable n'est pas valide\",\"emailError\":{\"invalid\":\"Courriel n'est pas valide\",\"inUse\":\"Courriel est déjà utilisé. Utilisez une autre adresse électronique ou cliquez sur Essayez une autre méthode.\"},\"differentOption\":\"Essayez une autre méthode\",\"button\":\"Soumettez\",\"buttonLoading\":\"Soumettre\",\"help\":\"Vous avez besoin d'aide ? Contactez votre distributeur.\",\"success\":{\"email\":\"Le courriel a été vérifié\",\"sms\":\"Le téléphone portable a été vérifié\"}},\"enrollFactorVerificationForm\":{\"buttonLoading\":\"Vérifier (Veuillez attendre {{timeRemaining}})\"},\"thirdPartyAccessDenied\":{\"title\":\"Non Autorisé par Le Fournisseur D'identité du Concessionnaire\",\"explanation\":\"Vous êtes actuellement connecté au fournisseur d'identité de votre concessionnaire avec une identité qui n'est pas autorisée à utiliser les solutions de Cox Automotive. Veuillez demander à l'administrateur du fournisseur d'identité de votre concessionnaire de vous accorder l'accès et réessayez.\",\"backToSignin\":\"Retour à la Page de Connexion\"}}}}","export default function getEnv() {\n const url = window.location.hostname;\n\n if (url === \"signin.dangerzone.coxautoservices.com\") {\n return \"dangerzone\";\n }\n\n if (url.indexOf(\"signin.coxautoinc.com\") !== -1) {\n return \"live\";\n }\n\n if (url === \"localhost\" || url === \"127.0.0.1\") {\n return \"dangerzone\";\n }\n\n return \"unknown\";\n}\n\nconst externalApplications = {\n dangerzone: {\n \"user-settings.dangerzone.coxautoservices.com\": \"My Settings\"\n },\n live: {\n \"user-settings.coxautoinc.com\": \"My Settings\"\n }\n};\n\nexport const externalAppName = hostname => {\n return externalApplications[getEnv()][hostname];\n};\n","import getEnv from \"../components/env\";\n\nexport function linkClicked(element, result, location) {\n report(element, \"Clicked\", result, location);\n}\n\n/**\n * @param {string} solutionId\n *\n * @see https://coxautoinc.sharepoint.com/sites/department-user-experience/SitePages/Common%20Data%20Layer%20Variables%20schema%20for%20Google%20Tag%20Manager.aspx\n */\nexport function initializeDataLayer(solutionId) {\n const env = getEnv();\n window.dataLayer.push({\n common: {\n dataLayerVersion: 2,\n application: {\n name: \"Signin\",\n version: \"1\",\n environment: env,\n isProduction: env === \"live\"\n }\n },\n solutionId,\n sessionControl: \"start\"\n });\n window.dataLayer.push({ event: \"dataLayerReady\" });\n}\n\n/**\n * Identifies the user to the data layer. Once the user is identified all subsequent\n * events will be associated with this user. The tag manager script effectively treats\n * the array of objects added to the datalayer as a single merged object, where each\n * push will add to or overwrite existing values.\n *\n * @param {string} bridgePlatformId\n * @param {string} bridgeUsername\n * @param {string} solutionPrincipalId\n */\nexport function identifyUser({\n bridgePlatformId,\n bridgeUsername,\n solutionPrincipalId\n}) {\n window.dataLayer.push({\n common: {\n user: {\n bridgePlatformId,\n bridgeUsername,\n solutionPrincipalId\n }\n }\n });\n}\n\nexport function endSession() {\n window.dataLayer.push({ sessionControl: \"end\" });\n}\n\n/*\nDefined by https://fuel.coxautoinc.com/docs/DOC-145376\nLocation - A breadcrumb trail of nested DOM components. These values should be consistent across events such that all\n user interactions within a given component have the same breadcrumb trail. The top-most item should break down\n into a reasonable number of application features.\nElement - The name of an element the user interacted with, from their perspective. This should be provided in readable\n English, i.e. passing in \"Tab\" as opposed to \"li\" or other DOM/code type identifiers (including classes and IDs).\n\nAction - The action that triggered the data collection (clicked, hovered, dragged, etc). This should be in readable\n English and past tense.\nResult - What occurred from the user's perspective (opened the date selector, etc). This should be in readable English\n and past tense for consistency across applications. Ideally, the value here would be the actual result of the\n user interaction, not simply a guess. For example, if a user kicked off an ajax process, if that process fails,\n the result should articulate that.\n\nValue - Any quantitative value associated with the action (a count of returned search results, etc).\n */\nexport function report(element, action, result, location) {\n window.dataLayer.push({\n event: \"userEvent\",\n eventElement: element,\n eventAction: action,\n eventResult: result,\n eventLocation: location,\n eventValue: undefined\n });\n}\n\n/**\n * Publishes a new product event to the data layer.\n *\n * @param {string} name\n * @param {object} properties\n *\n * @see https://coxautoinc.sharepoint.com/sites/department-user-experience/SitePages/User%20Event%20Tracking%20with%20Google%20Tag%20Manager.aspx\n */\nexport function productEvent(name, properties = {}) {\n window.dataLayer.push({\n event: \"productEvent\",\n eventName: name,\n eventProperties: properties\n });\n}\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport IconError from \"@cx/ui/Icons/IconError\";\n\nconst TextInput = props => {\n return (\n

\n \n {props.label}\n \n\n
\n \n
\n\n {props.error && (\n
\n \n {props.error}\n
\n )}\n
\n );\n};\n\nTextInput.propTypes = {\n error: PropTypes.string,\n htmlId: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n onBlur: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onKeyDown: PropTypes.func.isRequired,\n type: PropTypes.string.isRequired\n};\n\nexport default TextInput;\n","import React from \"react\";\nimport \"./linkButton.scss\";\nimport PropTypes from \"prop-types\";\n\n/**\n * A button that looks like a link.\n */\nconst LinkButton = props => (\n \n {props.children}\n \n);\n\nLinkButton.propTypes = {\n children: PropTypes.node.isRequired,\n disabled: PropTypes.bool,\n htmlId: PropTypes.string.isRequired,\n onClick: PropTypes.func\n};\n\nexport default LinkButton;\n","import React from \"react\";\nimport { Translation } from \"react-i18next\";\nimport SubmitButton from \"@cx/ui/SubmitButton\";\nimport PropTypes from \"prop-types\";\nimport IconComplete from \"@cx/ui/Icons/IconComplete\";\n\nimport \"./successForm.scss\";\n\nconst SuccessForm = props => {\n const onClickContinue = e => {\n props.onClick();\n e.preventDefault();\n };\n\n return (\n \n {t => (\n
\n \n
{t(props.message)}
\n \n {t(\"successForm.continue\", {\n solutionDisplayName: props.solutionDisplayName\n })}\n \n
\n )}\n
\n );\n};\n\nSuccessForm.propTypes = {\n message: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n solutionDisplayName: PropTypes.string.isRequired\n};\n\nexport default SuccessForm;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Translation } from \"react-i18next\";\nimport { linkClicked } from \"../../api/analytics\";\nimport PCW from \"@bridge/react-components/lib/PCW\";\nimport Button from \"@cx/ui/Button\";\nimport \"./PasswordResetFormErrorArray.scss\";\nimport TextInput from \"./TextInput\";\nimport LinkButton from \"../link-button/linkButton\";\nimport SuccessForm from \"../successForm/successForm\";\n\n/**\n * Password only page.\n */\nclass PasswordResetFormErrorArray extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n passwordChangeComplete: false,\n currentPassword: null,\n newPassword: \"\",\n newPasswordConfirmation: \"\",\n showAsText: false,\n validPassword: false,\n errorCurrentPassword: false,\n errorNewPassword: false,\n errorConfirmPassword: false,\n passwordErrors: []\n };\n\n this.submitForm = this.submitForm.bind(this);\n this.handleFormSubmit = this.handleFormSubmit.bind(this);\n this.onKeyDown = this.onKeyDown.bind(this);\n }\n\n onClickContinue = () => {\n this.props.signinCallback(this.state.newPassword);\n };\n\n onKeyDown(e) {\n if (e.key === \"Enter\") {\n if (this.isValidForm()) {\n e.preventDefault();\n e.stopPropagation();\n this.submitForm();\n } else {\n this.setErrors();\n }\n }\n }\n\n isValidCurrentPassword() {\n return (\n !this.props.collectCurrentPassword || this.state.validPasswordCurrent\n );\n }\n\n isValidPassword() {\n return this.state.validPassword;\n }\n\n isValidConfirmation() {\n return this.state.newPassword === this.state.newPasswordConfirmation;\n }\n\n isValidForm() {\n return (\n this.isValidCurrentPassword() &&\n this.isValidPassword() &&\n this.isValidConfirmation()\n );\n }\n\n submitForm() {\n // Normally we would prefer to use `document.getElementById(\"login\").submit();` but when this is called, the html form\n // specification states that it should bypass the handlers, so we will click on the submit button instead\n // see https://stackoverflow.com/a/19847255 for quick writeup of the problem\n document.getElementById(\"changePassword\").click();\n }\n\n setPasswordValid = (passwordValid, errors) => {\n this.setState({ validPassword: passwordValid });\n this.setState({ passwordErrors: errors });\n };\n\n setErrorsIgnoreBlanks = () => {\n this.setState({\n errorCurrentPassword: !this.isValidCurrentPassword(),\n errorNewPassword:\n this.isValidCurrentPassword() &&\n !this.isValidPassword() &&\n this.state.newPassword !== \"\",\n errorConfirmPassword:\n this.isValidCurrentPassword() &&\n this.isValidPassword() &&\n !this.isValidConfirmation() &&\n this.state.newPasswordConfirmation !== \"\"\n });\n };\n\n setErrors = () => {\n this.setState({\n errorCurrentPassword: !this.isValidCurrentPassword(),\n errorNewPassword:\n this.isValidCurrentPassword() && !this.isValidPassword(),\n errorConfirmPassword:\n this.isValidCurrentPassword() &&\n this.isValidPassword() &&\n !this.isValidConfirmation()\n });\n };\n\n onLostFocusPassword = e => {\n this.validateCurrentPassword();\n this.setErrorsIgnoreBlanks();\n };\n\n onLostFocusPasswordConfirmation = e => {\n this.setErrorsIgnoreBlanks();\n };\n\n onToggleShowPassword = e => {\n e.preventDefault();\n this.setState({ showAsText: !this.state.showAsText });\n };\n\n validateCurrentPassword = () => {\n if (this.props.collectCurrentPassword) {\n const currentPassword = this.state.currentPassword;\n this.setState({\n validPasswordCurrent: !(\n currentPassword == null || currentPassword.trim() === \"\"\n )\n });\n }\n };\n\n onClickAbort = e => {\n e.preventDefault();\n linkClicked(\n \"Abort Password Change\",\n \"Firing Password Abort Callback\",\n this.props.reasonType\n ? `Password Reset Form (${this.props.reasonType})`\n : \"Password Reset Form\"\n );\n this.props.abortButtonCallback();\n };\n\n handleFormSubmit(e) {\n // Let's stop the form from submitting to the post endpoint\n e.preventDefault();\n linkClicked(\n \"Submit Change Password Button\",\n \"Authenticate User\",\n this.props.reasonType\n ? `Password Reset Form (${this.props.reasonType})`\n : \"Password Reset Form\"\n );\n this.props\n .onSubmitPassword(this.state.newPassword, this.state.currentPassword)\n .then(isSuccess => {\n this.setState({ passwordChangeComplete: isSuccess });\n\n // TODO: determine if error is INVALID_CURRENT_PASSWORD or FAILED_PASSWORD_CHANGE_REQUIREMENTS for\n // user-elected flow, and only clear appropriate password\n if (!isSuccess) {\n this.setState({ newPassword: \"\" });\n this.setState({ newPasswordConfirmation: \"\" });\n document.getElementById(\"new-password\").value = \"\";\n if (document.getElementById(\"confirm-password\"))\n document.getElementById(\"confirm-password\").value = \"\";\n if (this.props.collectCurrentPassword) {\n document.getElementById(\"current-password\").value = \"\";\n }\n\n if (\n this.props.passwordChangeBackendErrors &&\n this.props.passwordChangeBackendErrors.length > 0\n ) {\n this.setState({\n validPassword: false,\n errorNewPassword: true,\n passwordErrors: this.props.passwordChangeBackendErrors\n });\n }\n }\n });\n }\n\n renderSuccess() {\n return (\n \n );\n }\n\n doublePasswordInputBox() {\n return (\n \n {t => (\n
\n \n {this.state.showAsText\n ? t(\"common.hidePassword\", { count: 2 })\n : t(\"common.showPassword\", { count: 2 })}\n \n\n 0\n ? this.state.passwordErrors.join(`\\r\\n`)\n : null\n }\n onBlur={this.onLostFocusPassword}\n onChange={e =>\n this.setState({\n newPassword: e.target.value,\n errorNewPassword: false,\n errorConfirmPassword: false\n })\n }\n onKeyDown={this.onKeyDown}\n />\n\n \n this.setState({\n newPasswordConfirmation: e.target.value,\n errorConfirmPassword: false\n })\n }\n onKeyDown={this.onKeyDown}\n />\n
\n )}\n
\n );\n }\n\n renderChangePasswordForm() {\n const signInButtonEnabled = this.isValidForm();\n const submitButton = (\n \n {t => (\n
\n \n {this.props.reasonType === \"activation\"\n ? t(\"passwordResetForm.buttonSetPassword\")\n : t(\"passwordResetForm.buttonChangePassword\")}\n \n
\n )}\n
\n );\n\n return (\n \n {t => (\n
\n \n {this.props.reasonKey !== undefined &&\n t(\"passwordResetForm.text.\" + this.props.reasonKey, {\n displayName: this.props.username.toUpperCase()\n })}\n {this.props.reasonKey !== undefined && (\n <>\n
\n
\n \n )}\n \n \n
\n \n {this.props.collectCurrentPassword && (\n
\n \n this.setState(\n {\n currentPassword: e.target.value,\n errorNewPassword: false,\n errorConfirmPassword: false\n },\n this.validateCurrentPassword\n )\n }\n onKeyDown={this.onKeyDown}\n />\n
\n
\n )}\n {this.doublePasswordInputBox()}\n
\n
\n {this.props.abortButton && this.props.abortButtonCallback && (\n \n {this.props.abortButton}\n \n )}\n {submitButton}\n
\n \n \n
\n \n
\n \n )}\n
\n );\n }\n\n render() {\n if (this.state.passwordChangeComplete) {\n return this.renderSuccess();\n } else {\n return this.renderChangePasswordForm();\n }\n }\n}\n\nPasswordResetFormErrorArray.propTypes = {\n abortButton: PropTypes.string,\n abortButtonCallback: PropTypes.func,\n collectCurrentPassword: PropTypes.bool,\n onSubmitPassword: PropTypes.func.isRequired,\n passwordChangeBackendErrors: PropTypes.array,\n passwordPolicy: PropTypes.string,\n reasonKey: PropTypes.string,\n reasonType: PropTypes.string,\n signinCallback: PropTypes.func.isRequired,\n solutionDisplayName: PropTypes.string.isRequired,\n username: PropTypes.string.isRequired\n};\n\nexport default PasswordResetFormErrorArray;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Trans } from \"react-i18next\";\nimport \"./contactUs.scss\";\nimport { linkClicked } from \"../../api/analytics\";\n\nconst ContactUs = props => (\n
\n \n linkClicked(\n \"Contact Us Button\",\n \"Navigate to Solution's Contact Us Page\",\n \"Contact Us Form\"\n )\n }\n >\n \n \n
\n);\n\nContactUs.propTypes = {\n contactUsUrl: PropTypes.string.isRequired\n};\n\nexport default ContactUs;\n","import React from \"react\";\nimport \"./cardTemplate.scss\";\nimport PropTypes from \"prop-types\";\nimport Card from \"@cx/ui/Card\";\nimport ContactUs from \"../contact-us/contactUs\";\n\n/**\n * Container for an authorization page, centrally positioned in view.\n */\nconst CardTemplate = props => (\n
\n \n {props.logo && (\n
\n {props.logoAlt}\n
\n
\n )}\n {props.title}\n
\n }\n >\n {props.body}\n \n
\n {props.contactUsUrl && }\n
\n \n);\n\nCardTemplate.propTypes = {\n body: PropTypes.object.isRequired,\n contactUsUrl: PropTypes.string,\n logo: PropTypes.string,\n logoAlt: PropTypes.string,\n title: PropTypes.object.isRequired\n};\n\nexport default CardTemplate;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Button from \"@cx/ui/Button\";\nimport Grid from \"@cx/ui/Grid\";\nimport Row from \"@cx/ui/Row\";\nimport TruncateText from \"@cx/ui/TruncateText\";\nimport \"./disambiguationForm.scss\";\nimport { Translation } from \"react-i18next\";\nimport { linkClicked } from \"../../api/analytics\";\nimport LinkButton from \"../link-button/linkButton\";\n\nclass DisambiguationForm extends React.Component {\n state = {\n solutionList: this.props.solutionList || []\n };\n\n onClickUserName = e => {\n linkClicked(\n \"Username Back Button\",\n \"Return to Username Form\",\n \"Disambiguation Form\"\n );\n this.props.onClickUsernameFromDisambiguationPage();\n e.preventDefault();\n };\n\n onClickSolutionName = (e, value) => {\n e.preventDefault();\n const clickedValue = value.isBridge ? \"Bridge\" : \"Solution\";\n linkClicked(\n \"Solution Group Select Button : \" + clickedValue,\n \"Disambiguate user to \" + clickedValue,\n \"Disambiguation Form\"\n );\n this.props.onSubmitSolutionName(value);\n };\n\n render() {\n let nonBridgeSolutionName = \"solution\";\n if (this.state.solutionList !== undefined) {\n // checks in the list of solutions whether there is a non bridge solution and returns true if it exists\n const foundNonBridgeSolution = this.state.solutionList.find(\n (value, index) => {\n return value !== undefined && !value.isBridge;\n }\n );\n\n nonBridgeSolutionName =\n foundNonBridgeSolution === undefined\n ? \"solution\"\n : foundNonBridgeSolution.displayName;\n }\n\n return (\n \n {t => (\n
\n \n \n ← {this.props.username}\n \n \n
\n
\n\n \n {t(\"disambiguationForm.text\", {\n username: this.props.username.toUpperCase(),\n solutionDisplayName:\n this.state.solutionList === null ||\n this.state.solutionList === undefined\n ? t(\"common.solution\")\n : nonBridgeSolutionName\n })}\n \n\n
\n
\n\n \n {this.state.solutionList === null ||\n this.state.solutionList === undefined ? (\n
\n ) : (\n this.state.solutionList.map((value, index) => {\n const key = \"solButton\" + index;\n return (\n \n this.onClickSolutionName(e, value)}\n >\n {value.isBridge\n ? t(\"disambiguationForm.buttonSignInBridge\", {\n solutionDisplayName: value.displayName\n })\n : t(\"disambiguationForm.buttonSignInSolution\", {\n solutionDisplayName: value.displayName\n })}\n \n \n );\n })\n )}\n \n
\n )}\n \n );\n }\n}\n\nDisambiguationForm.propTypes = {\n onClickUsernameFromDisambiguationPage: PropTypes.func.isRequired,\n onSubmitSolutionName: PropTypes.func.isRequired,\n solutionList: PropTypes.array.isRequired,\n username: PropTypes.string.isRequired\n};\n\nexport default DisambiguationForm;\n","import React from \"react\";\nimport Button from \"@cx/ui/Button\";\nimport Grid from \"@cx/ui/Grid\";\nimport Row from \"@cx/ui/Row\";\nimport PropTypes from \"prop-types\";\nimport LoadingIndicator from \"@cx/ui/LoadingIndicator\";\nimport { Translation } from \"react-i18next\";\nimport { linkClicked } from \"../../api/analytics\";\nimport { withRouter } from \"react-router-dom\";\n\n/**\n * Username Recovery Page\n */\nclass UsernameRecoveryForm extends React.Component {\n state = {\n loading: true,\n availableSolutions: []\n };\n\n componentDidMount() {\n this.fetchAvailableSolutions();\n }\n\n // Processes click of Bridge or solution button for recover username.\n onClickSolutionName = (e, value) => {\n const clickedSolutionValue = value.isBridge ? \"Bridge\" : \"Solution\";\n linkClicked(\n \"Solution Group Select Button : \" + clickedSolutionValue,\n \"Attempted Navigation to \" +\n clickedSolutionValue +\n \" username reset page\",\n \"Username Recovery Form\"\n );\n // Do Bridge or solution-specific navigation for recovering username.\n this.navigationHandler(value, false);\n };\n\n navigationHandler = (idp, shortCircuit) => {\n if (idp.isBridge) {\n this.props.recoverBridgeUsername(shortCircuit);\n } else {\n window.location.assign(idp.usernameResetUrl);\n }\n };\n\n fetchAvailableSolutions = () => {\n this.props\n .fetchIdentityProviders({\n solutionId: this.props.solutionId,\n /* eslint-disable-next-line camelcase */\n client_id: this.props.clientId,\n flag: \"forgotUsername\"\n })\n .then(\n result => {\n // there are 2 items that come back, if both usernameResetUrl's are null,\n // go to recover bridge username\n if (result.items.filter(elem => elem.usernameResetUrl).length === 0) {\n this.navigationHandler({ isBridge: true }, true);\n } else {\n this.setState({\n availableSolutions: result.items,\n loading: false\n });\n }\n },\n error => {\n this.setState({\n errorMsg: \"error.generic\"\n });\n }\n )\n .catch(err => {});\n };\n\n render() {\n if (this.state.loading) {\n return ;\n } else {\n return (\n \n {t => (\n
\n {t(\"usernameRecoveryForm.text\", {\n solutionDisplayName: \"\" + this.props.solutionDisplayName\n })}\n
\n
\n \n {this.state.availableSolutions.map((value, index) => {\n const key = \"solutionButton\" + index;\n return (\n \n this.onClickSolutionName(e, value)}\n >\n {\" \"}\n {value.isBridge\n ? t(\"usernameRecoveryForm.buttonBridge\")\n : t(\"usernameRecoveryForm.buttonSolution\", {\n solutionDisplayName:\n \"\" + this.props.solutionDisplayName\n })}\n \n \n );\n })}\n \n
\n )}\n
\n );\n }\n }\n}\n\nUsernameRecoveryForm.propTypes = {\n apiBaseUrl: PropTypes.string.isRequired,\n clientId: PropTypes.string.isRequired,\n featureFlags: PropTypes.object.isRequired,\n fetchIdentityProviders: PropTypes.func.isRequired,\n recoverBridgeUsername: PropTypes.func.isRequired,\n solutionDisplayName: PropTypes.string.isRequired,\n solutionId: PropTypes.string.isRequired\n};\n\nexport default withRouter(UsernameRecoveryForm);\n","import React from \"react\";\nimport Button from \"@cx/ui/Button\";\nimport PropTypes from \"prop-types\";\nimport { Translation } from \"react-i18next\";\n\nconst UsernameRecoveryStatusForm = props => {\n return (\n \n {t => (\n
\n {t(\"usernameRecoveryStatusForm.text\", {\n recoveryEmail: props.recoveryEmail\n })}\n
\n
\n \n {t(\"usernameRecoveryStatusForm.buttonBack\")}\n \n
\n
\n )}\n
\n );\n};\n\nUsernameRecoveryStatusForm.propTypes = {\n onClickRecoverUsernameStatusBack: PropTypes.func.isRequired,\n recoveryEmail: PropTypes.string.isRequired\n};\n\nexport default UsernameRecoveryStatusForm;\n","import React from \"react\";\nimport SubmitButton from \"@cx/ui/SubmitButton\";\nimport EmailInput from \"@cx/ui/EmailInput\";\nimport { Trans, Translation } from \"react-i18next\";\nimport PropTypes from \"prop-types\";\nimport { linkClicked } from \"../../api/analytics\";\n\nimport \"./usernameRecoveryEmailCaptureForm.scss\";\n\nexport default class UsernameRecoveryEmailCaptureForm extends React.Component {\n state = {\n emailValue: \"\",\n validEmail: \"false\"\n };\n\n onClickRecoveryEmailNextButton = () => {\n if (this.state.validEmail) {\n this.props.onClickRecoveryEmailNextButton(this.state.emailValue);\n\n linkClicked(\n \"Forgot Username Recovery button\",\n \"Recover Bridge Username via Email\",\n \"Username Recovery Status Form\"\n );\n } else {\n document.getElementById(\"RecoveryEmailInput\").focus();\n }\n };\n\n onEmailInputKeydown = e => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n this.onClickRecoveryEmailNextButton(e);\n }\n };\n\n onChange = (cxEvent, isValid, domEvent) => {\n this.setState({\n emailValue: cxEvent.target.value,\n validEmail: isValid\n });\n };\n\n render() {\n return (\n \n {t => (\n \n
\n \n
\n
\n
\n
\n \n
\n
\n \n {t(\"usernameRecoveryEmailCaptureForm.nextButton\")}\n \n
\n \n )}\n
\n );\n }\n}\n\nUsernameRecoveryEmailCaptureForm.propTypes = {\n onClickRecoveryEmailNextButton: PropTypes.func.isRequired\n};\n","export class InternalServerError extends Error {\n constructor(message) {\n super(\"InternalServerError\", message);\n }\n}\n\nexport class UnhandledResponseCodeError extends Error {\n constructor(message) {\n super(\"UnhandledResponseCodeError\", message);\n }\n}\n","import { InternalServerError, UnhandledResponseCodeError } from \"./Errors\";\n\nconst API_VERSION = \"application/vnd.coxauto.v1+json\";\n\nexport function fetchFactors(baseUrl, username, clientId) {\n const url = new URL(\n baseUrl + `/signin/factors/types?username=${username}&clientId=${clientId}`\n );\n\n return fetch(url.href, {\n mode: \"cors\",\n method: \"GET\",\n headers: {\n Accept: API_VERSION\n }\n }).then(response => {\n switch (response.status) {\n case 200:\n return response.json();\n case 500:\n throw new InternalServerError(\n `Internal Server Error [${response.status}]`\n );\n default:\n throw new UnhandledResponseCodeError(\n `Received ${response.status} response code`\n );\n }\n });\n}\n","import React from \"react\";\nimport Button from \"@cx/ui/Button\";\nimport LoadingIndicator from \"@cx/ui/LoadingIndicator\";\nimport { Trans, Translation } from \"react-i18next\";\nimport PropTypes from \"prop-types\";\nimport { linkClicked, report } from \"../../api/analytics\";\nimport { fetchFactors } from \"../../api/user-factors\";\n\n// TODO: Convert to stateless component\n// TODO: Discuss moving GA out of individual components to keep them simple\nexport default class PasswordRecoveryOptionsForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n factors: [],\n loading: true\n };\n }\n componentDidMount() {\n fetchFactors(\n this.props.apiBaseUrl,\n this.props.username,\n this.props.clientId\n )\n .then(factors => {\n if (this.shouldShortCircuit(factors)) {\n factors[0].indexOf(\"EMAIL\") > -1\n ? this.props.onClickPasswordRecoveryByEmailFromOptionsForm(true)\n : this.props.onClickPasswordRecoveryBySmsFromOptionsForm(true);\n }\n this.setState({ factors });\n if (!factors.length) {\n report(\n \"Password Recovery Options Form\",\n \"No Factors For User\",\n \"Shown Error Screen\"\n );\n }\n })\n // eslint-disable-next-line no-console\n .catch(() => {\n this.setState(state => ({ ...state, error: true }));\n })\n .finally(() => {\n this.setState(state => ({ ...state, loading: false }));\n });\n }\n\n shouldShortCircuit(factors) {\n return (\n factors.length === 1 ||\n (factors.length === 2 && factors.indexOf(\"SMS\") === -1)\n );\n }\n\n onClickRecoveryBySmsButton = () => {\n linkClicked(\n \"Verify by SMS Code\",\n \"Initiate SMS Password Recovery\",\n \"Password Recovery Options Form\"\n );\n this.props.onClickPasswordRecoveryBySmsFromOptionsForm();\n };\n\n onClickRecoveryByEmailButton = () => {\n linkClicked(\n \"Verify by Email\",\n \"Initiate Email Password Recovery\",\n \"Password Recovery Options Form\"\n );\n this.props.onClickPasswordRecoveryByEmailFromOptionsForm();\n };\n\n render() {\n // render options based on available factor types\n if (this.state.loading || this.shouldShortCircuit(this.state.factors)) {\n return ;\n }\n\n if (!this.state.factors.length && !this.state.error) {\n return (\n
\n \n {t => (\n
\n
\n {t(\"passwordRecoveryOptionsForm.error\")}\n
\n
\n
\n
\n )}\n
\n
\n );\n } else {\n return (\n
\n \n {t => (\n
\n
\n \n
\n
\n
\n \n {t(\"passwordRecoveryOptionsForm.emailButton\")}\n \n \n {t(\"passwordRecoveryOptionsForm.smsButton\")}\n \n \n )}\n
\n
\n );\n }\n }\n}\n\nPasswordRecoveryOptionsForm.propTypes = {\n apiBaseUrl: PropTypes.string.isRequired,\n clientId: PropTypes.string.isRequired,\n onClickPasswordRecoveryByEmailFromOptionsForm: PropTypes.func.isRequired,\n onClickPasswordRecoveryBySmsFromOptionsForm: PropTypes.func.isRequired,\n username: PropTypes.string.isRequired\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport SvgIcon from \"@cx/ui/internal/SvgIcon\";\nimport \"./IconCircle.scss\";\n\nconst IconCircle = ({ htmlId, className, isActive, ...other }) => {\n return (\n \n \n \n );\n};\n\nIconCircle.propTypes = {\n className: PropTypes.string,\n htmlId: PropTypes.string,\n isActive: PropTypes.bool\n};\n\nexport default IconCircle;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport \"./IconStack.scss\";\n\nconst IconStack = ({ children, className, ...other }) => {\n return (\n \n {children}\n \n );\n};\n\nIconStack.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string\n};\n\nexport default IconStack;\n","import React from \"react\";\nimport { Trans, Translation } from \"react-i18next\";\nimport PropTypes from \"prop-types\";\nimport { linkClicked } from \"../../api/analytics\";\nimport FormGroup from \"react-bootstrap/lib/FormGroup\";\nimport Button from \"@cx/ui/Button\";\nimport Card from \"@cx/ui/Card\";\nimport IconCircle from \"../icons/IconCircle\";\nimport IconStack from \"../icons/IconStack\";\nimport IconSms from \"@cx/ui/Icons/IconTextsms\";\nimport IconEmail from \"@cx/ui/Icons/IconEmail\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faMobileScreenButton } from \"@fortawesome/free-solid-svg-icons\";\nimport \"./accountVerificationOptionsForm.scss\";\n\nconst AccountVerificationOptionsForm = props => {\n const onClickVerifyButton = (e, factor) => {\n props.onChallengeFactor(factor.id).then(success => {\n const resultMessage = success\n ? `Send an account verification code by ${factor.factorType}`\n : `Failed to send an account verification code by ${factor.factorType}`;\n linkClicked(\n `Verify by ${factor.factorType} button`,\n resultMessage,\n \"Account Verification Options Form\"\n );\n });\n };\n return (\n \n {t => (\n \n
\n {t(\"accountVerificationOptionsForm.body\")}\n
\n {props.factors.map(option => {\n const factorType = option.factorType.toLowerCase();\n let IconFactor;\n switch (factorType) {\n case \"sms\":\n IconFactor = (\n \n );\n break;\n case \"email\":\n IconFactor = (\n \n );\n break;\n case \"totp\":\n IconFactor = (\n \n );\n break;\n default:\n }\n return (\n \n \n \n {IconFactor}\n \n
\n {\n \n )\n }}\n />\n }\n
\n \n onClickVerifyButton(e, option)}\n >\n {t(\"accountVerificationOptionsForm.select\")}\n \n \n \n );\n })}\n
\n {\n \n linkClicked(\n \"Help\",\n \"Navigate to Help\",\n \"Account Verification Options Form\"\n )\n }\n />\n )\n }}\n />\n }\n
\n \n )}\n
\n );\n};\n\nAccountVerificationOptionsForm.propTypes = {\n factors: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n factorType: PropTypes.string.isRequired,\n sendsChallenge: PropTypes.bool,\n translationParam: PropTypes.string\n })\n ),\n onChallengeFactor: PropTypes.func.isRequired\n};\n\nexport default AccountVerificationOptionsForm;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Button from \"@cx/ui/Button\";\nimport TextInput from \"@cx/ui/TextInput\";\nimport { Trans, Translation } from \"react-i18next\";\nimport \"./otpValidationForm.scss\";\nimport { linkClicked } from \"../../api/analytics\";\nimport SubmitButton from \"@cx/ui/SubmitButton\";\nimport LinkButton from \"../link-button/linkButton\";\n\nconst onLinkClicked = ({\n element,\n result,\n location = \"SMS Password Recovery OTP Authentication Form\"\n}) => linkClicked(element, result, location);\n\nconst onVerifyClicked = result =>\n onLinkClicked({ element: \"Verify Button\", result });\n\n// TODO: Convert to stateless component\nconst OtpValidationForm = props => {\n const [passcode, updatePasscode] = useState(\"\");\n const [isVerifying, setIsVerifying] = useState(false);\n\n const onPasscodeInputKeydown = e => {\n if (e.key === \"Enter\") {\n onClickPasscodeVerifyButton(e);\n }\n };\n\n const onClickPasscodeVerifyButton = e => {\n e.preventDefault();\n if (!passcode) return;\n\n setIsVerifying(true);\n props.verifyPasscode(passcode).then(authenticated => {\n if (authenticated) {\n onVerifyClicked(\n \"SMS Password Recovery OTP code authentication succeeded\"\n );\n } else {\n setIsVerifying(false);\n onVerifyClicked(\"SMS Password Recovery OTP code authentication failed\");\n }\n });\n };\n\n const onClickResendPassCodeButton = e => {\n e.preventDefault();\n onLinkClicked({\n element: \"Resend Code Link\",\n result: \"Requested Resend SMS Code\"\n });\n props.resendPasscode();\n };\n\n const onClickShowRecoveryOptions = e => {\n onLinkClicked({\n element: \"Recovery Options Button\",\n result: \"Use a different Password Recovery verification method\"\n });\n props.showRecoveryOptions(e);\n };\n\n return (\n \n {t => (\n
\n
\n \n
\n
\n \n
\n
\n
\n updatePasscode(e.target.value)}\n value={passcode}\n onKeyDown={onPasscodeInputKeydown}\n />\n
\n \n \n \n
\n
\n
\n {props.showRecoveryOptions && (\n \n \n \n )}\n \n {t(\"otpValidationForm.submit\")}\n \n
\n \n )}\n
\n );\n};\n\nOtpValidationForm.propTypes = {\n resendPasscode: PropTypes.func.isRequired,\n showRecoveryOptions: PropTypes.func,\n verifyPasscode: PropTypes.func.isRequired\n};\n\nexport default OtpValidationForm;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { Trans } from \"react-i18next\";\nimport Button from \"@cx/ui/Button\";\nimport SubmitButton from \"@cx/ui/SubmitButton\";\nimport { linkClicked } from \"../../api/analytics\";\n\nimport \"./EmailPasswordSuccessForm.scss\";\n\nconst onClickShowRecoveryOptions = ({ props, e }) => {\n linkClicked(\n \"Recovery Options Button\",\n \"Use a different Password Recovery verification method\",\n \"Email Password Recovery\"\n );\n props.showRecoveryOptions(e);\n};\n\nconst onClickClose = ({ props, e }) => {\n linkClicked(\n \"Close Button\",\n \"Close Password Recovery\",\n \"Email Password Recovery\"\n );\n props.closePasswordRecovery(e);\n};\n\nconst EmailPasswordSuccessForm = props => (\n
\n
\n
\n \n {/* why are we using linebreaks instead of

(paragraphs) with CSS? */}\n
\n
\n \n \n \n
\n
\n \n
\n
\n

\n
\n {props.showRecoveryOptions && (\n onClickShowRecoveryOptions({ props, e })}\n buttonStyle=\"secondary\"\n type=\"button\"\n >\n \n \n )}\n onClickClose({ props, e })}\n type=\"button\"\n >\n \n \n
\n
\n
\n);\n\nEmailPasswordSuccessForm.propTypes = {\n closePasswordRecovery: PropTypes.func.isRequired,\n showRecoveryOptions: PropTypes.func\n};\n\nexport default EmailPasswordSuccessForm;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport SubmitButton from \"@cx/ui/SubmitButton\";\n\nimport { Trans } from \"react-i18next\";\nimport { linkClicked } from \"../../api/analytics\";\n\nclass DuplicateSessionForm extends React.Component {\n constructor() {\n super();\n this.state = {\n loading: false\n };\n }\n\n submitLogout = () => {\n this.setState({ loading: true });\n linkClicked(\n \"Logout And Continue\",\n \"Submitting logout and will submit Signin again in 4 seconds\",\n \"duplicateSession\"\n );\n\n setTimeout(() => {\n // if successful, keep loading animation going as we are now waiting for a redirect\n // and if unsuccessful stop loading so the user can retry the operation\n this.props\n .retryFunction()\n .then(success => this.setState({ loading: success }));\n }, 4000);\n };\n\n render() {\n return (\n
\n

\n \n

\n \n \n \n {this.state.loading && (\n \n )}\n
\n );\n }\n}\nDuplicateSessionForm.propTypes = {\n bridgeEnv: PropTypes.oneOf([\"PROD\", \"QA\", \"DEV\"]).isRequired,\n newUsername: PropTypes.string.isRequired,\n retryFunction: PropTypes.func.isRequired,\n sessionBridgeUsername: PropTypes.string.isRequired\n};\nexport default DuplicateSessionForm;\n","import React, { useState } from \"react\";\nimport { Trans, useTranslation } from \"react-i18next\";\nimport PropTypes from \"prop-types\";\nimport SubmitButton from \"@cx/ui/SubmitButton\";\nimport CheckBoxList from \"@cx/ui/CheckBoxList\";\nimport { linkClicked } from \"../../api/analytics\";\n\nimport \"./eulaForm.scss\";\n\nconst EulaForm = props => {\n const [checkedAccept, toggleCheckAccept] = useState(false);\n const [loading, setLoading] = useState(false);\n const [t] = useTranslation();\n\n const onClickContinue = e => {\n e.preventDefault();\n if (loading) {\n // If we are currently loading, no-op\n return;\n }\n setLoading(true);\n\n linkClicked(\n \"Accept EULA\",\n \"Continuing to Signin after accepting EULA\",\n \"Eula Form\"\n );\n props.onAcceptEula().then(status => {\n // If we are successful it will still be \"true\" and keep us loading as we are now waiting on the signin call\n // to complete the process.\n setLoading(status);\n });\n };\n\n return (\n
\n \n linkClicked(\n \"Terms of Use\",\n \"Navigate to Terms of Use\",\n \"Eula Form\"\n )\n }\n />\n ),\n privacyPolicyLink: (\n // Text will be injected by translation so disable lint rule below\n // eslint-disable-next-line jsx-a11y/anchor-has-content\n \n linkClicked(\n \"Privacy Statement\",\n \"Navigate to Privacy Statement\",\n \"Eula Form\"\n )\n }\n />\n )\n }}\n />\n toggleCheckAccept(!checkedAccept)}\n options={[{ value: \"accept\", label: t(\"eulaForm.checkBox\") }]}\n />\n \n {t(\"eulaForm.acceptButton\")}\n \n
\n );\n};\n\nEulaForm.propTypes = {\n onAcceptEula: PropTypes.func.isRequired\n};\n\nexport default EulaForm;\n","import React, { useState } from \"react\";\nimport { Trans, Translation } from \"react-i18next\";\nimport SubmitButton from \"@cx/ui/SubmitButton\";\nimport Button from \"@cx/ui/Button\";\nimport PropTypes from \"prop-types\";\nimport { linkClicked } from \"../../api/analytics\";\nimport IconError from \"@cx/ui/Icons/IconError\";\nimport LinkButton from \"../link-button/linkButton\";\n\nimport \"./accountVerificationForm.scss\";\n\nconst AccountVerificationForm = props => {\n const [code, setCode] = useState(\"\");\n const [isValidCode, setIsValidCode] = useState(false);\n const [error, setError] = useState(null);\n const [loading, setLoading] = useState(false);\n\n const getActiveFactor = () => props.factors.filter(f => f.isActive)[0];\n\n const onCodeInvalid = displayError => {\n if (document.getElementById(\"input-verification-code\")) {\n document.getElementById(\"input-verification-code\").value = \"\";\n }\n if (displayError) setError(\"accountVerificationForm.errorCodeInvalid\");\n };\n\n const onKeyDown = e => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n if (isValidCode) {\n onClickVerifyButton();\n } else {\n onCodeInvalid(true);\n }\n }\n };\n\n const onChange = e => {\n setCode(e.target.value);\n setIsValidCode(e.target.value.match(/^\\d{6}$/g));\n setError(null);\n };\n\n const onClickVerifyButton = e => {\n setLoading(true);\n props.onVerifyFactor(code).then(response => {\n const success = response === true;\n\n if (!success) onCodeInvalid(!response);\n const resultMessage = success\n ? `Submitted a correct passcode (${getActiveFactor().factorType})`\n : `Submitted an incorrect or failed passcode (${\n getActiveFactor().factorType\n })`;\n linkClicked(\n \"Verify passcode button\",\n resultMessage,\n \"Account Verification Form\"\n );\n setLoading(success);\n });\n };\n\n const onClickGoBack = e => {\n linkClicked(\n \"Try another method button\",\n \"Return to the challenge options form\",\n \"Account Verification Form\"\n );\n props.returnToChallengeOptions();\n };\n\n const onClickSendNewCode = e => {\n e.preventDefault();\n const factor = getActiveFactor();\n props.onChallengeFactor(factor.id).then(success => {\n const resultMessage = success\n ? `Send a new account verification code (${factor.factorType})`\n : `Failed to send a new account verification code (${factor.factorType})`;\n linkClicked(\n `Send new code button`,\n resultMessage,\n \"Account Verification Form\"\n );\n });\n };\n\n return (\n \n {t => (\n
\n
\n \n
\n
\n\n
\n \n
\n {error && (\n
\n \n {t(error)}\n
\n )}\n {getActiveFactor().sendsChallenge && (\n
\n \n {t(\"otpValidationForm.resendCode\")}\n \n
\n )}\n
\n
\n \n {t(\"accountVerificationForm.buttonGoBack\")}\n \n \n {t(\"accountVerificationForm.button\")}\n \n
\n
\n
\n )}\n
\n );\n};\n\nAccountVerificationForm.propTypes = {\n factors: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n factorType: PropTypes.string.isRequired,\n translationParam: PropTypes.string,\n sendsChallenge: PropTypes.bool,\n isActive: PropTypes.bool\n })\n ),\n onChallengeFactor: PropTypes.func.isRequired,\n onVerifyFactor: PropTypes.func.isRequired,\n returnToChallengeOptions: PropTypes.func.isRequired\n};\n\nexport default AccountVerificationForm;\n","import React from \"react\";\nimport { Trans, Translation } from \"react-i18next\";\nimport PropTypes from \"prop-types\";\nimport { linkClicked } from \"../../api/analytics\";\nimport FormGroup from \"react-bootstrap/lib/FormGroup\";\nimport Button from \"@cx/ui/Button\";\nimport Card from \"@cx/ui/Card\";\nimport IconCircle from \"../icons/IconCircle\";\nimport IconStack from \"../icons/IconStack\";\nimport IconSms from \"@cx/ui/Icons/IconTextsms\";\nimport IconEmail from \"@cx/ui/Icons/IconEmail\";\nimport \"./factorEnrollmentOptionsForm.scss\";\n\nconst FactorEnrollmentOptionsForm = props => {\n const defaultFactors = [\"SMS\", \"EMAIL\"];\n const onClickEnrollButton = (e, factor) => {\n props.onEnrollFactor(factor);\n linkClicked(\n `Enroll ${factor} factor button`,\n \"User successfully taken to enroll factor form\",\n \"Factor Enrollment Form\"\n );\n };\n\n return (\n \n {t => (\n \n
\n {t(\n `factorEnrollmentOptionsForm.body${\n props.forRecovery ? \"Recovery\" : \"\"\n }`\n )}\n
\n
\n \n linkClicked(\n \"Help\",\n \"Navigate to Help\",\n \"Factor Enrollment Form\"\n )\n }\n >\n {t(\"factorEnrollmentOptionsForm.help\")} →\n \n
\n
\n \n {t(\n `factorEnrollmentOptionsForm.optionHeader${\n props.forRecovery ? \"Recovery\" : \"\"\n }`\n )}\n \n
\n {defaultFactors.map(option => {\n const lcOption = option.toLowerCase();\n const IconFactor = lcOption === \"sms\" ? IconSms : IconEmail;\n const disclaimerClassName =\n lcOption === \"sms\"\n ? \"factorEnrollmentShowDisclaimerLabel\"\n : \"factorEnrollmentHideDisclaimerLabel\";\n return (\n \n \n \n \n \n
\n {\n \n )\n }}\n />\n }\n
\n \n onClickEnrollButton(e, option)}\n >\n {t(\"factorEnrollmentOptionsForm.select\")}\n \n \n
\n );\n })}\n \n )}\n
\n );\n};\n\nFactorEnrollmentOptionsForm.propTypes = {\n forRecovery: PropTypes.bool,\n onEnrollFactor: PropTypes.func.isRequired\n};\n\nexport default FactorEnrollmentOptionsForm;\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Trans, Translation } from \"react-i18next\";\nimport SubmitButton from \"@cx/ui/SubmitButton\";\nimport Button from \"@cx/ui/Button\";\nimport PropTypes from \"prop-types\";\nimport { linkClicked } from \"../../api/analytics\";\nimport IconError from \"@cx/ui/Icons/IconError\";\nimport LinkButton from \"../link-button/linkButton\";\n\nimport \"./enrollVerificationForm.scss\";\n\nconst EnrollVerificationForm = props => {\n const resendTimeout = props.resendTimeout ? props.resendTimeout : 30;\n const timerInitialState = {\n remaining: resendTimeout,\n timestamp: Date.now() + resendTimeout * 1000\n };\n\n const [code, setCode] = useState(\"\");\n const [isValidCode, setIsValidCode] = useState(false);\n const [error, setError] = useState(null);\n const [loading, setLoading] = useState(false);\n const [isResendDisabled, setResendDisabled] = useState(true);\n const [timer, setTimer] = useState(timerInitialState);\n const intervalRef = useRef(0);\n const factor = props.factor;\n const delaySubmit = factor.factorType === \"SMS\";\n\n useEffect(() => {\n if (isResendDisabled) {\n intervalRef.current = setInterval(() => {\n if (timer.remaining <= 1) {\n setResendDisabled(false);\n } else {\n setTimer(timer => ({\n ...timer,\n remaining: Math.ceil((timer.timestamp - Date.now()) / 1000)\n }));\n }\n }, 1000);\n }\n return () => {\n clearInterval(intervalRef.current);\n };\n }, [isResendDisabled, timer]);\n\n const onCodeInvalid = displayError => {\n setIsValidCode(false);\n if (document.getElementById(\"input-verification-code\")) {\n document.getElementById(\"input-verification-code\").value = \"\";\n }\n if (displayError) setError(\"accountVerificationForm.errorCodeInvalid\");\n };\n\n const onKeyDown = e => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n if (!loading) {\n if (isValidCode) {\n onClickVerifyButton();\n } else {\n onCodeInvalid(true);\n }\n }\n }\n };\n\n const onChange = e => {\n setCode(e.target.value);\n setIsValidCode(e.target.value.match(/^\\d{6}$/g));\n setError(null);\n };\n\n const onClickVerifyButton = e => {\n setLoading(true);\n props.onVerifyFactor(factor.factorType, code).then(async response => {\n const success = response === true;\n const resultMessage = success\n ? `Submitted a correct passcode (${factor.factorType})`\n : `Submitted an incorrect or failed passcode (${factor.factorType})`;\n linkClicked(\n \"Verify passcode button\",\n resultMessage,\n \"MFA Enroll Verification Form\"\n );\n\n if (!success) {\n onCodeInvalid(!response);\n } else {\n if (delaySubmit && timer.remaining > 1) {\n await new Promise(resolve =>\n setTimeout(resolve, timer.remaining * 1000)\n );\n }\n props.successCallback();\n }\n setLoading(false);\n });\n };\n\n const onClickGoBack = e => {\n linkClicked(\n \"Try another method button\",\n \"Return to the MFA enrollment options form\",\n \"MFA Enroll Verification Form\"\n );\n props.returnToEnrollOptions();\n };\n\n const onClickSendNewCode = e => {\n e.preventDefault();\n props\n .onChallengeFactor(factor.factorType, factor.translationParam)\n .then(success => {\n const resultMessage = success\n ? `Send a new account verification code (${factor.factorType})`\n : `Failed to send a new account verification code (${factor.factorType})`;\n linkClicked(\n `Send new code button`,\n resultMessage,\n \"MFA Enroll Verification Form\"\n );\n if (success) {\n setResendDisabled(true);\n setTimer(timerInitialState);\n }\n });\n };\n\n const translationParam = factor.translationParam;\n return (\n \n {t => (\n
\n
\n \n
\n
\n\n
\n \n
\n {error && (\n
\n \n {t(error)}\n
\n )}\n
\n \n {isResendDisabled\n ? t(\"accountVerificationForm.countdown\", {\n timeRemaining: timer.remaining\n })\n : t(\"otpValidationForm.resendCode\")}\n \n
\n
\n
\n \n {t(\"accountVerificationForm.buttonGoBack\")}\n \n \n {t(\"accountVerificationForm.button\")}\n \n
\n
\n
\n )}\n
\n );\n};\n\nEnrollVerificationForm.propTypes = {\n factor: PropTypes.shape({\n factorType: PropTypes.string.isRequired,\n translationParam: PropTypes.string\n }),\n onChallengeFactor: PropTypes.func.isRequired,\n onVerifyFactor: PropTypes.func.isRequired,\n resendTimeout: PropTypes.number,\n returnToEnrollOptions: PropTypes.func.isRequired,\n successCallback: PropTypes.func.isRequired\n};\n\nexport default EnrollVerificationForm;\n","import React, { useState } from \"react\";\nimport { Trans, Translation } from \"react-i18next\";\nimport PropTypes from \"prop-types\";\nimport { linkClicked } from \"../../api/analytics\";\nimport EmailInput from \"@cx/ui/EmailInput\";\nimport SubmitButton from \"@cx/ui/SubmitButton\";\nimport Button from \"@cx/ui/Button\";\nimport IconError from \"@cx/ui/Icons/IconError\";\n\nimport \"./enrollInternationalFactorForm.scss\";\n\nimport \"react-phone-number-input/style.css\";\nimport PhoneInput, {\n formatPhoneNumber,\n isValidPhoneNumber\n} from \"react-phone-number-input\";\n\nconst EnrollInternationalFactorForm = props => {\n const factorType = props.factor.factorType;\n\n const factorInputId = \"factor-input\";\n\n const initialState = \"\";\n const [phoneNumber, setPhoneNumber] = useState(initialState);\n const [isPhoneNumberValid, setIsPhoneNumberValid] = useState(false);\n const [email, setEmail] = useState(\"\");\n const [isEmailValid, setIsEmailValid] = useState(false);\n const [errorCode, setErrorCode] = useState(\"\");\n\n const [loading, setLoading] = useState(false);\n\n const onClickEnrollButton = e => {\n setLoading(true);\n props\n .onEnrollFactor(\n factorType,\n phoneNumber ? formatPhoneNumber(phoneNumber, \"International\") : email\n )\n .then(success => {\n const resultMessage = success\n ? `Send an MFA enroll verification code by ${factorType}`\n : `Failed to send an MFA enroll verification code by ${factorType}`;\n linkClicked(\n `Enroll MFA with ${factorType} button`,\n resultMessage,\n \"MFA Enroll Form\"\n );\n setLoading(false);\n })\n .catch(err => {\n if (err.message.indexOf(\"emailInUse\") !== -1) {\n setErrorCode(\"inUse\");\n setLoading(false);\n\n linkClicked(\n `Enroll MFA with ${factorType} button`,\n \"Couldn't enroll, email is already in use\",\n \"MFA Enroll Form\"\n );\n } else if (err.message.indexOf(\"phoneInvalid\") !== -1) {\n setIsPhoneNumberValid(false);\n setLoading(false);\n\n linkClicked(\n `Enroll MFA with ${factorType} button`,\n \"Couldn't enroll, phone number is invalid\",\n \"MFA Enroll Form\"\n );\n }\n });\n };\n\n const onClickShowFactorEnrollmentOptions = e => {\n props.onReturnToFactorEnrolmentOptions();\n linkClicked(\n `Return to MFA Enroll Options Button`,\n \"Success\",\n \"MFA Enroll Form\"\n );\n };\n\n const onChangePhoneNumber = value => {\n if (value) {\n setIsPhoneNumberValid(isValidPhoneNumber(value));\n } else {\n setIsPhoneNumberValid(false);\n }\n setPhoneNumber(value);\n };\n\n const phoneInputKeyDown = event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n if (isValidPhoneNumber(event.target.value)) {\n onClickEnrollButton(event);\n }\n }\n };\n\n const onChangeEmail = event => {\n setEmail(event.target.value);\n setIsEmailValid(validateEmail(event.target.value));\n };\n\n const validateEmail = emailAddress => {\n // Source: http://emailregex.com/\n const regEx = /^(([^<>()[\\]\\\\.,;:\\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,}))$/;\n const test = regEx.test(emailAddress);\n setErrorCode(test ? \"\" : \"invalid\");\n return test;\n };\n\n const onEmailInputBlur = event => {\n setEmail(event.target.value);\n setIsEmailValid(validateEmail(event.target.value));\n };\n\n const emailInputKeyDown = event => {\n if (event.key === \"Enter\") {\n onEmailInputBlur(event);\n if (validateEmail(event.target.value)) {\n onClickEnrollButton(event);\n }\n }\n };\n\n const showPhoneError = !(isPhoneNumberValid || phoneNumber === initialState);\n const showEmailError = !(!errorCode || email === \"\");\n\n return (\n \n {t => (\n <>\n {factorType === \"SMS\" && (\n
\n \n {showPhoneError && (\n
\n \n \n {t(\"enrollFactorForm.phoneNumberInvalid\")}\n \n
\n )}\n
\n )}\n {factorType === \"EMAIL\" && (\n
\n {\n return showEmailError\n ? t(\"enrollFactorForm.emailError.\" + errorCode)\n : \"\";\n }}\n />\n
\n )}\n {!(\n (factorType === \"SMS\" && showPhoneError) ||\n (factorType === \"EMAIL\" && showEmailError)\n ) && (\n
{t(\"enrollFactorForm.help\")}
\n )}\n
\n
\n \n \n \n \n {t(\"enrollFactorForm.button\")}\n \n
\n \n )}\n
\n );\n};\n\nEnrollInternationalFactorForm.propTypes = {\n factor: PropTypes.shape({\n factorType: PropTypes.string.isRequired\n }),\n onEnrollFactor: PropTypes.func.isRequired,\n onReturnToFactorEnrolmentOptions: PropTypes.func.isRequired\n};\n\nexport default EnrollInternationalFactorForm;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Button from \"@cx/ui/Button\";\nimport \"./thirdPartyAccessDenied.scss\";\nimport { Translation } from \"react-i18next\";\nimport { linkClicked } from \"../../api/analytics\";\n\nclass ThirdPartyAccessDenied extends React.Component {\n onTryAgainClick = () => {\n linkClicked(\n \"Back To Signin Button\",\n \"Go back to signin to retry sp initiated 3rd party self-registration\",\n \"Third Party Access Denied Page\"\n );\n\n const destination = `${this.props.apiBaseUrl}/?partition=${this.props.partition}&clientId=${this.props.clientId}`;\n window.location.assign(destination);\n };\n\n render() {\n return (\n \n {t => (\n
\n {t(\"thirdPartyAccessDenied.explanation\")}\n \n {t(\"thirdPartyAccessDenied.backToSignin\")}\n \n
\n )}\n
\n );\n }\n}\n\nThirdPartyAccessDenied.propTypes = {\n apiBaseUrl: PropTypes.string.isRequired,\n clientId: PropTypes.string.isRequired,\n partition: PropTypes.string.isRequired\n};\n\nexport default ThirdPartyAccessDenied;\n","import React from \"react\";\nimport { Trans } from \"react-i18next\";\nimport Button from \"@cx/ui/Button\";\nimport \"./UserNotLinkedPage.scss\";\nimport PropTypes from \"prop-types\";\nimport getEnv from \"../env\";\nimport { linkClicked } from \"../../api/analytics\";\n\nconst UserNotLinkedPage = ({ solutionDisplayName, partition }) => {\n const mySettings = {\n dangerzone: {\n PRODUCTION:\n \"https://user-settings.dangerzone.coxautoservices.com/#attached-solutions\",\n NON_PRODUCTION:\n \"https://user-settings.dangerzone.coxautoservices.com/?partition=non-prod#attached-solutions\"\n },\n live: {\n PRODUCTION: \"https://user-settings.coxautoinc.com/#attached-solutions\",\n NON_PRODUCTION:\n \"https://user-settings.coxautoinc.com/?partition=non-prod#attached-solutions\"\n }\n };\n\n const landingPage = {\n dangerzone: {\n PRODUCTION: \"https://mycoxautomotive.dangerzone.coxautoservices.com/\",\n NON_PRODUCTION:\n \"https://mycoxautomotive.dangerzone.coxautoservices.com/?partition=non-prod\"\n },\n live: {\n PRODUCTION: \"https://mycoxautomotive.coxautoinc.com/\",\n NON_PRODUCTION:\n \"https://mycoxautomotive.coxautoinc.com/?partition=non-prod\"\n }\n };\n\n const mySettingsUrl = mySettings[getEnv()][partition];\n const homePageUrl = landingPage[getEnv()][partition];\n\n const onClick = element =>\n linkClicked(`Navigate to ${element}`, \"Success\", \"User Not Linked page\");\n\n return (\n
\n
\n onClick(\"My Settings - Attach Solutions\")}\n >\n
\n \n
\n \n onClick(\"Landing Page\")}\n >\n \n \n
\n
\n );\n};\n\nUserNotLinkedPage.propTypes = {\n partition: PropTypes.string.isRequired,\n solutionDisplayName: PropTypes.string.isRequired\n};\n\nexport default UserNotLinkedPage;\n","import React from \"react\";\nimport Button from \"@cx/ui/Button\";\nimport Popover from \"@cx/ui/Popover\";\nimport LoadingIndicator from \"@cx/ui/LoadingIndicator\";\nimport TruncateText from \"@cx/ui/TruncateText\";\nimport PropTypes from \"prop-types\";\nimport { Trans, Translation } from \"react-i18next\";\nimport \"./userForm.scss\";\nimport { linkClicked } from \"../../api/analytics\";\nimport LinkButton from \"../link-button/linkButton\";\n\nconst PAGE_USERNAME = \"usernamePage\";\nconst PAGE_PASSWORD = \"passwordPage\";\n\nclass UserForm extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n username: this.props.username || \"\",\n password: \"\",\n loading: false,\n showAsText: false\n };\n\n this.submitForm = this.submitForm.bind(this);\n this.handleFormSubmit = this.handleFormSubmit.bind(this);\n this.onKeyDown = this.onKeyDown.bind(this);\n this.onUsernameKeyDown = this.onUsernameKeyDown.bind(this);\n }\n\n componentDidMount() {\n // hack to force the initial update\n this.componentDidUpdate({ page: \"\" }, null, null);\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n // Handle the focusing when switching pages\n if (prevProps.page !== this.props.page) {\n switch (this.props.page) {\n case PAGE_USERNAME:\n document.getElementById(\"username\").focus();\n break;\n\n case PAGE_PASSWORD:\n document.getElementById(\"password\").focus();\n break;\n\n default:\n // If we didn't just steal focus, let's make sure to remove focus if the element still on page\n if (\n prevProps.page === PAGE_USERNAME &&\n document.getElementById(\"username\")\n ) {\n document.getElementById(\"username\").blur();\n }\n\n if (\n prevProps.page === PAGE_PASSWORD &&\n document.getElementById(\"password\")\n ) {\n document.getElementById(\"password\").blur();\n }\n\n break;\n }\n }\n }\n\n // IE11 requires the form to be programatically submitted if we want the password manager to detect the username/password.\n submitForm() {\n // Normally we would prefer to use `document.getElementById(\"login\").submit();` but when this is called, the htmp form\n // specification states that it should bypass the handlers, so we will click on the submit button instead\n // see https://stackoverflow.com/a/19847255 for quick writeup of the problem\n document.getElementById(\"signIn\").click();\n }\n\n handleFormSubmit(e) {\n // Let's stop the form from submitting to the post endpoint\n e.preventDefault();\n\n switch (this.props.page) {\n case PAGE_USERNAME:\n linkClicked(\n \"Next Button\",\n \"Disambiguation/Password form\",\n \"Username Form\"\n );\n this.props.onSubmitUsername(this.state.username);\n break;\n\n case PAGE_PASSWORD:\n if (this.state.loading) {\n return false;\n }\n linkClicked(\n \"Submit Password Button\",\n \"Authenticate User\",\n \"Password Form\"\n );\n this.setState({ loading: true });\n this.props.onSubmitPassword(this.state.password).then(success => {\n this.setState({ loading: success });\n if (document.getElementById(\"password\") && !success) {\n document.getElementById(\"password\").value = \"\";\n }\n });\n\n return false;\n\n default:\n break;\n }\n }\n\n onUsernameKeyDown(e) {\n if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n this.submitForm();\n } else if (\n [\n // There seems to be a synthetic \"Unidentified\" event when password managers run.\n // we have not found a definitive spec for this behavior, this was discovered through observation.\n \"Unidentified\",\n\n // Allow tabbing through the fields\n \"Tab\",\n\n // Common key presses that don't change the value of the text, we probably don't need these but figured\n // we will cover the most obvious movement and meta keys, not including F1 keys etc.\n \"Shift\",\n \"Control\",\n \"Meta\",\n \"Alt\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowDown\",\n \"ArrowUp\",\n \"Escape\",\n \"Home\",\n \"End\",\n \"PageUp\",\n \"PageDown\"\n ].indexOf(e.key) === -1\n ) {\n this.setState({ password: \"\" });\n document.getElementById(\"password\").value = \"\";\n }\n }\n\n onKeyDown(e) {\n if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n this.submitForm();\n }\n }\n\n onForgotButtonClick = e => {\n e.preventDefault();\n linkClicked(\n \"Forgot Username Button\",\n \"Username Recovery form\",\n \"Username Form\"\n );\n this.props.onForgotUsernameClick(this.state.username);\n };\n\n onClickForgotPasswordHint = e => {\n e.preventDefault();\n linkClicked(\n \"Forgot Password Hint\",\n \"Show a hint about how to access password recovery\",\n \"Username Form\"\n );\n };\n\n onClickForgotPassword = e => {\n e.preventDefault();\n const solutionValue = this.props.authProviderDisplayName.includes(\"Bridge\")\n ? \"Bridge\"\n : \"Solution\";\n linkClicked(\n \"Forgot Password Link\",\n \"Allow Password Reset for \" + solutionValue,\n \"Password Form\"\n );\n\n this.props.onForgotPasswordClick();\n };\n\n onClickUsername = e => {\n e.preventDefault();\n linkClicked(\n \"Username Back Button\",\n \"Return to Username Form\",\n \"Password Form\"\n );\n this.props.onClickUsernameFromPasswordPage();\n };\n\n onClickAbort = e => {\n const { abortButton } = this.props;\n e.preventDefault();\n linkClicked(\n \"Abort Solution Identity Authentication\",\n `Firing Return to ${abortButton.text || \"Application\"} Callback`,\n \"Password Form\"\n );\n abortButton.onClick();\n };\n\n onToggleShowPassword = e => {\n e.preventDefault();\n this.setState({ showAsText: !this.state.showAsText });\n };\n\n recoveryOptions(t) {\n return (\n
\n {t(\"usernameForm.recoveryVerb\")}\n \n {t(\"usernameForm.linkForgotUsername\")}\n \n {t(\"common.conjunctionOr\")}\n \n {t(\"usernameForm.popoverPasswordHint\")}\n
\n }\n trigger={[\"click\", \"outsideClick\"]}\n position=\"bottom\"\n >\n \n {t(\"usernameForm.linkForgotPassword\")}\n \n \n
\n );\n }\n\n render() {\n const backToApplicationButton = this.props.abortButton && (\n \n );\n\n const navigationButtons = (\n \n {t => (\n
\n {backToApplicationButton}\n \n {this.state.loading && (\n \n )}\n {this.props.page === PAGE_USERNAME && t(\"common.next\")}\n {this.props.page === PAGE_PASSWORD &&\n t(\n this.props.currentFlow === \"solutionIdentity\"\n ? \"solutionIdentityFlow.buttonAttach\"\n : \"passwordForm.buttonSignIn\"\n )}\n \n
\n )}\n
\n );\n\n return (\n \n {t => (\n
\n \n \n \n {t(\"usernameForm.textInputLabel\")}\n \n {\n this.setState({ username: e.target.value });\n }}\n // value={this.state.username}\n defaultValue={this.props.username} // Must be a default value so it can remain an uncontrolled component (for IE password manager)\n onKeyDown={this.onUsernameKeyDown}\n />\n {this.props.showForgotUsername && this.recoveryOptions(t)}\n
\n {this.props.page === PAGE_USERNAME && navigationButtons}\n
\n\n \n \n \n ← {this.props.username}\n \n \n
\n
\n \n {this.state.showAsText\n ? t(\"common.hidePassword\", { count: 1 })\n : t(\"common.showPassword\", { count: 1 })}\n \n \n {t(\"passwordForm.textInputLabel\")}\n \n this.setState({ password: e.target.value })}\n onKeyDown={this.onKeyDown}\n />\n {this.props.showForgotPassword && (\n \n {t(\"passwordForm.linkForgotPassword\")}\n \n )}\n
\n {this.props.page === PAGE_PASSWORD && navigationButtons}\n \n \n \n )}\n
\n );\n }\n}\n\nUserForm.propTypes = {\n abortButton: PropTypes.shape({\n onClick: PropTypes.func.isRequired,\n text: PropTypes.string\n }),\n authProviderDisplayName: PropTypes.string.isRequired,\n currentFlow: PropTypes.string,\n featureFlags: PropTypes.object.isRequired,\n onClickUsernameFromPasswordPage: PropTypes.func.isRequired,\n onForgotPasswordClick: PropTypes.func.isRequired,\n onForgotUsernameClick: PropTypes.func.isRequired,\n onSubmitPassword: PropTypes.func.isRequired,\n onSubmitUsername: PropTypes.func.isRequired,\n page: PropTypes.string.isRequired,\n showForgotPassword: PropTypes.bool.isRequired,\n showForgotUsername: PropTypes.bool.isRequired,\n solution: PropTypes.string.isRequired,\n solutionName: PropTypes.string,\n username: PropTypes.string\n};\n\nexport default UserForm;\n","import React from \"react\";\nimport { Trans, Translation } from \"react-i18next\";\nimport PropTypes from \"prop-types\";\nimport LoadingIndicator from \"@cx/ui/LoadingIndicator\";\nimport \"./successRedirect.scss\";\nimport { linkClicked, report } from \"../../api/analytics\";\n\n// eslint-disable-next-line react/prefer-stateless-function\nclass SuccessRedirect extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n delayRender: true\n };\n }\n\n componentDidMount() {\n this.timer = setTimeout(() => {\n report(\n \"Loading Explanation Shown\",\n \"User Signed In\",\n `User is waiting for ${this.props.solutionId} to respond`,\n \"Signin Success form\"\n );\n this.setState({ delayRender: false });\n }, 3000); // Delay for 3 seconds\n }\n\n componentWillUnmount() {\n clearTimeout(this.timer);\n }\n\n onLinkClick = () => {\n linkClicked(\n \"Landing Page fallback\",\n `Clicked landing page instead of waiting for ${this.props.solutionId}`,\n \"Signin Success form\"\n );\n };\n\n render() {\n if (this.state.delayRender) {\n return ;\n }\n\n return (\n \n {t => (\n
\n {\n <>\n \n
{t(this.props.message)}
\n
\n this.onLinkClick()}\n />\n )\n }}\n />\n
\n \n }\n
\n )}\n
\n );\n }\n}\n\nSuccessRedirect.propTypes = {\n message: PropTypes.string.isRequired,\n partition: PropTypes.string.isRequired,\n redirectMessage: PropTypes.string.isRequired,\n solutionId: PropTypes.string.isRequired\n};\n\nexport default SuccessRedirect;\n","import React from \"react\";\nimport PasswordResetFormErrorArray from \"../password-reset-form-error-array/PasswordResetFormErrorArray\";\nimport CardTemplate from \"../card/cardTemplate.js\";\nimport PropTypes from \"prop-types\";\nimport Popover from \"@cx/ui/Popover\";\nimport DisambiguationForm from \"../disambiguation-form/disambiguationForm\";\nimport UsernameRecoveryForm from \"../username-recovery-form/usernameRecoveryForm\";\nimport UsernameRecoveryStatusForm from \"../username-recovery-form/usernameRecoveryStatusForm\";\nimport UsernameRecoveryEmailCaptureForm from \"../username-recovery-form/usernameRecoveryEmailCaptureForm\";\nimport PasswordRecoveryOptionsForm from \"../password-recovery-form/passwordRecoveryOptionsForm\";\nimport AccountVerificationOptionsForm from \"../account-verification-options-form/accountVerificationOptionsForm\";\nimport OtpValidationForm from \"../otp-validation-form/otpValidationForm\";\nimport Button from \"@cx/ui/Button\";\nimport { getI18n, Trans, Translation } from \"react-i18next\";\nimport replace from \"react-string-replace\";\nimport { withRouter } from \"react-router-dom\";\nimport EmailPasswordSuccessForm from \"../email-password-success-form/EmailPasswordSuccessForm\";\nimport DuplicateSessionForm from \"../duplicate-session-form/DuplicateSessionForm\";\nimport EulaForm from \"../eula/eulaForm\";\nimport AccountVerificationForm from \"../account-verification-form/accountVerificationForm\";\nimport FactorEnrollmentOptionsForm from \"../factor-enrollment-options-form/factorEnrollmentOptionsForm\";\nimport EnrollVerificationForm from \"../enroll-verification/enrollVerificationForm\";\nimport SuccessForm from \"../successForm/successForm\";\nimport EnrollFactorForm from \"../enroll-verification/enrollInternationalFactorForm\";\nimport ThirdPartyAccessDenied from \"../thirdPartyAccessDenied/thirdPartyAccessDenied\";\nimport UserNotLinkedPage from \"../UserNotLinkedPage/UserNotLinkedPage\";\nimport UserForm from \"../user-form/userForm\";\nimport { externalAppName } from \"../env\";\nimport LinkButton from \"../link-button/linkButton\";\nimport SuccessRedirect from \"../successRedirect/successRedirect\";\n\n// eslint-disable-next-line react/prefer-stateless-function\nclass SignInControl extends React.Component {\n constructor(props) {\n super(props);\n this.userFormAbortButton = this.userFormAbortButton.bind(this);\n }\n\n userFormAbortButton(abortUrl) {\n if (abortUrl)\n return {\n onClick: () => (window.location.href = this.props.abortUrl),\n text: externalAppName(new URL(abortUrl).hostname)\n };\n else return undefined;\n }\n\n render() {\n const currentPage = this.props.currentPage || \"usernamePage\";\n\n let title = \"signInControl.title\";\n let usernameText = \"signInControl.usernameText\";\n let body;\n let showText = true;\n let showSolutionLogo = true;\n\n const enrollFactor = this.props.enrollFactor;\n switch (currentPage) {\n case \"passwordResetPage\":\n title = \"passwordResetForm.title\";\n showText = false;\n body = (\n \n );\n\n break;\n\n case \"userUnlinkedErrorPage\":\n title = \"userUnlinkedForm.title\";\n showText = false;\n body = (\n \n );\n break;\n\n case \"genericMessagePage\":\n title = this.props.errorAttrs[\"I18N_KEY\"] + \".title\";\n showText = false;\n\n // We want to be able to pass in formatting like bold, so we need to get the text from\n // i18n then pass it in as an unescaped html element to react to render the formatting.\n // eslint-disable-next-line no-case-declarations\n const bodyText = getI18n().t(\n this.props.errorAttrs[\"I18N_KEY\"] + \".text\",\n this.props.errorAttrs,\n { interpolation: { escapeValue: true } } // Escape the inputs (default but being explicit)\n );\n\n body = (\n
\n {/* eslint-disable-next-line react/no-danger */}\n
\n
\n {this.props.errorAttrs[\"BUTTON_ACTION\"] && (\n
\n
\n \n \n \n
\n )}\n
\n );\n break;\n\n case \"timeoutErrorPage\":\n title = \"timeoutMessage.timedOutTitle\";\n showText = false;\n body = (\n
\n \n

\n {this.props.solutionLandingUrl && (\n \n \n \n )}\n
\n );\n break;\n\n case \"usernameRecoveryPage\":\n title = \"usernameRecoveryForm.title\";\n showText = false;\n body = (\n \n );\n break;\n\n case \"usernameRecoveryStatusForm\":\n title = \"usernameRecoveryForm.title\";\n showText = false;\n body = (\n \n );\n break;\n\n case \"usernameRecoveryEmailCaptureForm\":\n title = \"usernameRecoveryForm.title\";\n showText = false;\n body = (\n \n );\n break;\n\n case \"passwordRecoveryOptionsForm\":\n title = \"passwordRecoveryOptionsForm.title\";\n showText = false;\n body = (\n \n );\n break;\n\n case \"accountVerificationForm\":\n title = \"accountVerificationForm.title\";\n showText = false;\n body = (\n \n );\n break;\n\n case \"accountVerificationOptionsForm\":\n title = \"accountVerificationOptionsForm.title\";\n showText = false;\n body = (\n \n );\n break;\n\n case \"accountRecoveryEmailSentForm\":\n title = \"accountRecoveryEmailSentForm.title\";\n showText = false;\n body = (\n \n );\n break;\n\n case \"otpValidationForm\":\n title = \"otpValidationForm.title\";\n showText = false;\n body = (\n \n );\n break;\n\n case \"accountRecoveryPasswordResetForm\":\n title = \"accountRecoveryPasswordResetForm.title\";\n showText = false;\n body = (\n \n );\n break;\n\n case \"factorEnrollmentOptionsForm\":\n title = `factorEnrollmentOptionsForm.title${\n this.props.mfaEnrollmentForRecovery ? \"Recovery\" : \"\"\n }`;\n showText = false;\n showSolutionLogo = false;\n body = (\n \n );\n break;\n\n case \"enrollFactorPage\":\n title =\n \"enrollFactorForm.title.\" + enrollFactor.factorType.toLowerCase();\n showText = false;\n showSolutionLogo = false;\n body = (\n \n );\n break;\n\n case \"enrollVerificationForm\":\n title = \"accountVerificationForm.title\";\n showText = false;\n showSolutionLogo = false;\n body = (\n \n );\n break;\n\n case \"factorEnrollSuccessForm\":\n title = null;\n showText = false;\n showSolutionLogo = false;\n body = (\n \n );\n break;\n\n case \"duplicateSessionDetected\":\n title = \"duplicateSession.title\";\n showText = false;\n body = (\n \n );\n break;\n\n case \"eulaPage\":\n title = \"eulaForm.title\";\n showText = false;\n showSolutionLogo = false;\n body = ;\n break;\n\n case \"thirdPartyAccessDenied\":\n title = \"thirdPartyAccessDenied.title\";\n showText = false;\n showSolutionLogo = false;\n body = (\n \n );\n break;\n\n case \"successRedirectCard\":\n title = null;\n showText = false;\n showSolutionLogo = false;\n body = (\n \n );\n break;\n\n case \"disambiguationPage\":\n case \"usernamePage\":\n case \"passwordPage\":\n default: {\n // For IE and other password managers, we can not swap out the screen between the user, password, and disambiguation screens.\n // so we are rendering the user form at all times, the form will hide the unnecessary components using visual tricks with the\n // stylesheets instead of removing from dom or display none as it seems to break many password managers.\n let disambiguation;\n if (currentPage === \"disambiguationPage\") {\n disambiguation = (\n \n );\n }\n\n if (this.props.currentFlow === \"solutionIdentity\") {\n title = \"solutionIdentityFlow.title\";\n usernameText = \"solutionIdentityFlow.usernameText\";\n }\n\n body = (\n
\n {disambiguation}\n \n
\n );\n }\n }\n\n let usernameTextComponent = (\n \n {t => (\n \n {replace(\n t(usernameText, {\n solutionDisplayName:\n this.props.solutionDisplayName === undefined\n ? \"solution\"\n : this.props.solutionDisplayName\n }),\n \"{BRIDGEID}\",\n () => (\n \n \n
\n }\n trigger={[\"click\", \"outsideClick\"]}\n position=\"right\"\n >\n Bridge ID\n \n )\n )}\n
\n
\n \n )}\n
\n );\n\n // Note that it makes no sense for the second line to say “Use your Dealertrack F&I username and password or your Bridge ID account” because they are one and the same.\n if (\n this.props.solutionDisplayName !== undefined &&\n this.props.currentFlow !== \"solutionIdentity\"\n ) {\n if (\n this.props.solutionDisplayName.toLowerCase().indexOf(\"dealertrack\") !==\n -1 ||\n this.props.bridgeNative\n ) {\n usernameTextComponent = (\n \n {t => (\n \n {replace(\n t(\"signInControl.usernameText_bridgeOnly\"),\n \"{BRIDGEID}\",\n () => (\n \n \n \n }\n trigger={[\"click\", \"outsideClick\"]}\n position=\"right\"\n >\n Bridge ID\n \n )\n )}\n
\n
\n
\n )}\n
\n );\n }\n }\n\n return (\n
\n \n ) : (\n \"\"\n )\n }\n body={\n
\n {showText && usernameTextComponent}\n {body}\n
\n }\n contactUsUrl={\n this.props.currentFlow === \"solutionIdentity\"\n ? undefined\n : this.props.contactUsUrl\n }\n logo={showSolutionLogo && this.props.solutionLogoURI}\n logoAlt={showSolutionLogo && this.props.solutionDisplayName + \" logo\"}\n />\n
\n );\n }\n}\n\nSignInControl.propTypes = {\n abortUrl: PropTypes.string,\n apiBaseUrl: PropTypes.string.isRequired,\n authProviderDisplayName: PropTypes.string,\n availableSolutions: PropTypes.array,\n bridgeNative: PropTypes.bool.isRequired,\n clientId: PropTypes.string.isRequired,\n closePasswordRecovery: PropTypes.func.isRequired,\n contactUsUrl: PropTypes.string,\n currentFlow: PropTypes.string,\n currentPage: PropTypes.string.isRequired,\n displayName: PropTypes.string,\n enrollFactor: PropTypes.object,\n errorAttrs: PropTypes.object,\n featureFlags: PropTypes.object.isRequired,\n fetchIdentityProviders: PropTypes.func.isRequired,\n mfaEnrollmentForRecovery: PropTypes.bool,\n onAcceptEula: PropTypes.func.isRequired,\n onAccountRecoveryPasswordChange: PropTypes.func.isRequired,\n onChallengeFactor: PropTypes.func.isRequired,\n onClickPasswordRecoveryByEmailFromOptionsForm: PropTypes.func.isRequired,\n onClickPasswordRecoveryBySmsFromOptionsForm: PropTypes.func.isRequired,\n onClickRecoverUsernameStatusBack: PropTypes.func.isRequired,\n onClickRecoveryEmailNextButton: PropTypes.func.isRequired,\n onClickSolutionName: PropTypes.func.isRequired,\n onClickUsernameFromPasswordPage: PropTypes.func.isRequired,\n onContinueSignin: PropTypes.func.isRequired,\n onEnrollFactor: PropTypes.func.isRequired,\n onEnrollSuccess: PropTypes.func.isRequired,\n onForgotPasswordClick: PropTypes.func.isRequired,\n onForgotUsernameClick: PropTypes.func.isRequired,\n onSubmitPassword: PropTypes.func.isRequired,\n onSubmitPasswordChange: PropTypes.func.isRequired,\n onSubmitUsername: PropTypes.func.isRequired,\n onVerifyEnrollFactor: PropTypes.func.isRequired,\n onVerifyFactor: PropTypes.func.isRequired,\n partition: PropTypes.string,\n passwordChangeBackendErrors: PropTypes.array,\n passwordPolicy: PropTypes.string,\n passwordvalidation: PropTypes.string,\n recoverBridgeUsername: PropTypes.func.isRequired,\n recoveryEmail: PropTypes.string,\n resendPasscode: PropTypes.func.isRequired,\n returnToChallengeOptions: PropTypes.func.isRequired,\n returnToFactorEnrolmentOptions: PropTypes.func.isRequired,\n showForgotPassword: PropTypes.bool.isRequired,\n showForgotUsername: PropTypes.bool.isRequired,\n showRecoveryOptions: PropTypes.func,\n solutionDisplayName: PropTypes.string.isRequired,\n solutionId: PropTypes.string,\n solutionLandingUrl: PropTypes.string,\n solutionList: PropTypes.array,\n solutionLogoURI: PropTypes.string,\n submitFactorEnrollmentOption: PropTypes.func.isRequired,\n username: PropTypes.string.isRequired,\n verificationFactors: PropTypes.array,\n verifyPasscode: PropTypes.func.isRequired\n};\n\nexport default withRouter(SignInControl);\n","import React from \"react\";\nimport \"./Header.scss\";\n/**\n * Renders the Cox Automotive top-level header.\n */\nconst Header = () =>
;\nexport default Header;\n","import React from \"react\";\nimport \"./Footer.scss\";\nimport { Trans } from \"react-i18next\";\n\nimport Row from \"@cx/ui/Row\";\nimport Col from \"@cx/ui/Col\";\nimport { linkClicked } from \"../../api/analytics\";\n\nconst Footer = () => (\n
\n \n \n \n linkClicked(\n \"Terms of Use Button\",\n \"Navigate to Terms of Use\",\n \"Footer\"\n )\n }\n >\n \n \n \n\n \n \n linkClicked(\n \"Privacy Statement Button\",\n \"Navigate to Privacy Statement\",\n \"Footer\"\n )\n }\n >\n \n \n \n\n \n ©2019 - {new Date().getFullYear()} Cox Automotive.\n \n .\n \n \n \n
\n);\n\nFooter.propTypes = {};\n\nexport default Footer;\n","import React from \"react\";\nimport { linkClicked } from \"../../api/analytics\";\nimport \"./broadcast-message.scss\";\nimport Button from \"@cx/ui/Button\";\nimport PropTypes from \"prop-types\";\nimport { getI18n, Trans } from \"react-i18next\";\n\nconst validStyles = [\"warning\", \"danger\", \"info\", \"primary\", \"success\"];\nconst supportedLanguages = [\"en\", \"es\", \"fr\"];\n\nconst validateConfig = config => {\n // Check that `style` exists and is one of the supported options\n if (!config.style || !validStyles.includes(config.style)) return false;\n\n // Check that English body text exists, at minimum\n return config.text && config.text.en && config.text.en.body;\n};\n\nconst validateLanguage = (config, lang) => {\n for (const key of Object.keys(config.text.en)) {\n if (!config.text[lang] || !config.text[lang][key]) {\n return false;\n }\n }\n\n return true;\n};\n\nconst activeMessage = config => {\n const textStyle = config.style === \"primary\" ? \"white\" : config.style;\n\n return (\n \n
\n {config.text.en.title && (\n
\n \n
\n )}\n\n \n
\n {config.buttonUrl && getI18n().exists(\"broadcast.buttonText\") && (\n {\n linkClicked(\n \"Broadcast Message\",\n \"Navigate to Additional Info Page\",\n \"Info Header\"\n );\n }}\n >\n \n \n )}\n
\n
\n );\n};\n\nconst BroadcastMessage = props => {\n if (props.config && validateConfig(props.config)) {\n for (const lang of supportedLanguages) {\n getI18n().addResourceBundle(\n lang,\n \"translation\",\n {\n broadcast: validateLanguage(props.config, lang)\n ? props.config.text[lang]\n : {}\n },\n true,\n true\n );\n }\n return activeMessage(props.config);\n } else {\n return
;\n }\n};\n\nBroadcastMessage.propTypes = {\n config: PropTypes.object.isRequired\n};\n\nexport default BroadcastMessage;\n","import { getI18n } from \"react-i18next\";\n\nconst translationMap = {\n MINIMUM_LENGTH_NOT_MET: \"error.MESSAGE_MINIMUM_LENGTH_NOT_MET\",\n EXCEEDS_MAXIMUM_LENGTH: \"error.MESSAGE_EXCEEDS_MAXIMUM_LENGTH\",\n NEED_AT_LEAST_ONE_LETTER: \"error.MESSAGE_NEED_AT_LEAST_ONE_LETTER\",\n NEED_AT_LEAST_ONE_NUMBER: \"error.MESSAGE_NEED_AT_LEAST_ONE_NUMBER\",\n NEED_AT_LEAST_ONE_LETTER_OR_ONE_NUMBER:\n \"error.MESSAGE_NEED_AT_LEAST_ONE_LETTER_OR_ONE_NUMBER\",\n NO_PASSWORD_PROVIDED: \"error.MESSAGE_NO_PASSWORD_PROVIDED\",\n CANNOT_CONTAIN_USERNAME:\n \"error.MESSAGE_CANNOT_CONTAIN_OR_BE_PART_OF_USERNAME\",\n CANNOT_BE_PREVIOUSLY_USED_PASSWORD:\n \"error.MESSAGE_CANNOT_BE_PREVIOUSLY_USED_PASSWORD\",\n CANNOT_BE_A_COMMON_PASSWORD: \"error.MESSAGE_CANNOT_BE_A_COMMON_PASSWORD\",\n INCORRECT_OLD_PASSWORD: \"error.MESSAGE_INCORRECT_OLD_PASSWORD\",\n CANNOT_BE_CURRENT_PASSWORD: \"error.MESSAGE_CANNOT_BE_CURRENT_PASSWORD\",\n CANNOT_BE_DICTIONARY_WORD: \"error.MESSAGE_CANNOT_BE_DICTIONARY_WORD\",\n CANNOT_BE_COX_BRAND: \"error.MESSAGE_CANNOT_BE_COX_BRAND\",\n CANNOT_CONTAIN_FIRST_NAME_LAST_NAME:\n \"error.MESSAGE_CANNOT_CONTAIN_FIRST_NAME_LAST_NAME\",\n CANNOT_CONTAIN_QUADS: \"error.MESSAGE_CANNOT_CONTAIN_QUADS\",\n PASSWORD_REQUIREMENTS_NOT_MET: \"error.MESSAGE_PASSWORD_UNACCEPTABLE\",\n DEFAULT: \"error.MESSAGE_PASSWORD_UNACCEPTABLE\"\n};\n\n/**\n * Maps the given User API error code\n * to the associated, translated UI error message.\n * @param {string} userApiCode a User API error code\n * @return {string} the associated, translated UI error message.\n * If userApiCode is invalid, a default password-related error message\n * is returned.\n */\nconst mapToTranslatedMessage = userApiCode => {\n const translationKey = translationMap[userApiCode]\n ? translationMap[userApiCode]\n : translationMap[\"DEFAULT\"];\n return getI18n().t(translationKey);\n};\n\nconst isIterable = obj => {\n // checks for null and undefined\n if (obj == null) {\n return false;\n }\n return typeof obj[Symbol.iterator] === \"function\";\n};\n\n/**\n * Maps the given array of User API error codes\n * to an array of the associated, translated UI error messages.\n * @param {Array.} userApiCodes an array of User API error codes\n * @return {Array.} an array of the associated, translated UI error\n * messages. If userApiCodes is undefined, null, not iterable, or empty,\n * an array containing a single default password-related error message is\n * returned.\n */\nexport const mapToTranslatedMessages = userApiCodes => {\n let codesToMap;\n\n if (isIterable(userApiCodes) && userApiCodes.length > 0) {\n codesToMap = userApiCodes;\n } else {\n // userApiCodes was not iterable or was empty. This could only happen\n // if something goes wrong upstream (if the User API call\n // fails to populate the array of password error codes.)\n // This function is only called if a password change attempt failed,\n // and we must display some error message to the user, so use the default.\n codesToMap = [\"DEFAULT\"];\n }\n\n // remove any duplicates from codesToMap\n codesToMap = [...new Set(codesToMap)];\n\n let errorMessages = [];\n for (const codeToMap of codesToMap) {\n errorMessages.push(mapToTranslatedMessage(codeToMap));\n }\n\n // Despite removing duplicates from codesToMap, there still could be\n // duplicates in errorMessages, because the default message occurs for\n // ANY invalid code. Remove duplicates from errorMessages.\n errorMessages = [...new Set(errorMessages)];\n\n // All messages in errorMessages are now unique, but one default message\n // could still be present. If there is more than one message, remove\n // the DEFAULT message (if it exists).\n if (errorMessages.length > 1) {\n const indexOfDefault = errorMessages.indexOf(\n mapToTranslatedMessage(\"DEFAULT\")\n );\n if (indexOfDefault > -1) {\n // remove the redundant default message\n errorMessages.splice(indexOfDefault, 1);\n }\n }\n\n return errorMessages;\n};\n","import React from \"react\";\nimport SignInControl from \"./signin-control/signInControl.js\";\nimport Header from \"./header/Header.js\";\nimport PropTypes from \"prop-types\";\nimport { getI18n, Trans } from \"react-i18next\";\nimport Alert from \"@cx/ui/Alert\";\nimport \"./app.scss\";\nimport {\n endSession,\n identifyUser,\n initializeDataLayer,\n linkClicked,\n productEvent,\n report\n} from \"../api/analytics\";\nimport { withRouter } from \"react-router-dom\";\nimport Footer from \"./footer/Footer\";\nimport BroadcastMessage from \"./broadcast-message/BroadcastMessage\";\nimport { mapToTranslatedMessages } from \"./password-validation/translationMap\";\n\nconst timeoutThresholds = {\n initialTimeout: 600, // How long before we go to the expired screen\n info: 60, // When to show it as in Info box\n warningTime: 30 // when to show it as a Warning box\n};\nlet intervalHolder;\n\nclass App extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n showRecoveryOptionsFunc: this.showRecoveryOptions,\n username: this.props.username || \"\",\n password: \"\",\n errorMsg: undefined,\n errorAttrs: undefined,\n timeoutTimestamp: Date.now() + timeoutThresholds.initialTimeout * 1000,\n timeRemaining: timeoutThresholds.initialTimeout,\n solution:\n this.props.solution !== undefined\n ? JSON.parse(this.props.solution)\n : undefined,\n solutionList: [],\n solutionInfo: undefined,\n availableSolutions: [],\n apiBaseUrl: this.props.apiBaseUrl || \"https://localhost:50055\",\n transactionId: this.props.transactionId,\n authenticationProvider: undefined,\n authenticationProviderPasswordRecoveryUrl: undefined,\n usernameRecoveryEmail: undefined,\n accountRecoveryWorkflowId: undefined,\n verificationFactors: [],\n enrollFactor: null,\n unblock: null,\n thirdPartyCookiesAllowed: undefined,\n passwordChangeBackendErrors: []\n };\n\n this.solutionListUpdateCallback = this.solutionListUpdateCallback.bind(\n this\n );\n this.submitUsername = this.submitUsername.bind(this);\n this.forgotUsername = this.forgotUsername.bind(this);\n this.submitPassword = this.submitPassword.bind(this);\n this.submitSolutionName = this.submitSolutionName.bind(this);\n this.changePassword = this.changePassword.bind(this);\n this.navigateBackAPage = this.navigateBackAPage.bind(this);\n this.clearErrors = this.clearErrors.bind(this);\n this.handleSignin = this.handleSignin.bind(this);\n this.federate = this.federate.bind(this);\n this.handleErrorState = this.handleErrorState.bind(this);\n this.onAccountRecoveryPasswordChange = this.onAccountRecoveryPasswordChange.bind(\n this\n );\n this.onAcceptEula = this.onAcceptEula.bind(this);\n this.fetchIdentityProviders = this.fetchIdentityProviders.bind(this);\n this.getDTBackdoorLink = this.getDTBackdoorLink.bind(this);\n this.submitFactorEnrollmentOption = this.submitFactorEnrollmentOption.bind(\n this\n );\n this.onEnrollFactor = this.onEnrollFactor.bind(this);\n this.onVerifyEnrollFactor = this.onVerifyEnrollFactor.bind(this);\n this.onEnrollSuccess = this.onEnrollSuccess.bind(this);\n this.continueSignin = this.continueSignin.bind(this);\n }\n\n componentDidMount() {\n if (this.props.currentFlow !== \"solutionIdentity\") {\n intervalHolder = setInterval(() => {\n if (this.state.timeRemaining <= 1) {\n clearInterval(intervalHolder);\n report(\n \"Page\",\n \"System Timed Out\",\n \"Shown Timeout Screen\",\n this.props.location.state\n );\n\n this.props.history.replace(\n this.props.bookMarkSolution,\n \"timeoutErrorPage\"\n );\n this.props.history.block(); // returns a function that can unblock, can take in function to provide prompt\n this.setState({ timeRemaining: 0 }); // Hides the alert box\n } else {\n this.setState({\n timeRemaining: Math.ceil(\n (this.state.timeoutTimestamp - Date.now()) / 1000\n )\n });\n }\n }, 1000);\n }\n // initialize gtm data layer\n initializeDataLayer(this.props.solutionId);\n\n // Force the error (added for callback endpoint)\n if (this.props.forceErrorState) {\n this.handleErrorState(this.props.forceErrorState, null);\n }\n }\n\n solutionListUpdateCallback() {\n if (\n this.state.solutionList === undefined ||\n this.state.solutionList.length < 1\n ) {\n this.setState({\n errorMsg: \"error.generic\"\n });\n if (window.NREUM)\n window.NREUM.noticeError(\n new Error(\"SolutionList was undefined or length of 0\"),\n {\n transactionId: this.state.transactionId\n }\n );\n return; // Return so we don't show white page due to undefined error.\n }\n\n if (this.state.solutionList.length === 1) {\n this.submitSolutionName(this.state.solutionList[0]);\n } else if (this.state.solutionList.length > 1) {\n this.props.history.push(\n this.props.bookMarkSolution,\n \"disambiguationPage\"\n );\n this.setState({\n errorMsg: \"\"\n });\n }\n }\n\n submitSolutionName(solutionInfo) {\n if (solutionInfo.passwordRequired) {\n this.setState({\n authenticationProvider: solutionInfo.solutionId,\n authenticationProviderPasswordRecoveryUrl:\n solutionInfo.passwordRecoveryUrl,\n solutionInfo,\n errorMsg: \"\"\n });\n this.props.history.push(this.props.bookMarkSolution, \"passwordPage\");\n } else {\n // if passwordRequired === false, start federation\n if (solutionInfo.federationProvider !== undefined) {\n this.federate(solutionInfo.federationProvider);\n } else {\n // TODO: handle error\n }\n }\n }\n\n submitUsername(newUsername) {\n const trimmedUsername = newUsername.trim();\n const identityParams = {\n username: trimmedUsername,\n solutionId: this.props.solutionId,\n /* eslint-disable-next-line camelcase */\n client_id: this.props.params.client_id\n };\n\n this.fetchIdentityProviders(identityParams)\n .then(result => {\n this.setState(\n {\n solutionList: result.items,\n username: trimmedUsername\n },\n () => {\n this.solutionListUpdateCallback();\n }\n );\n })\n .catch(err => {\n this.setState({\n errorMsg: \"error.generic\",\n errorAttrs: {\n ...this.state.errorAttrs,\n canShowDtLegacyLink: true\n }\n });\n if (window.NREUM)\n window.NREUM.noticeError(err, {\n transactionId: this.state.transactionId\n });\n });\n\n this.reportThirdPartyCookieStatus(identityParams);\n }\n\n submitFactorEnrollmentOption(factor) {\n this.setState({ enrollFactor: { factorType: factor } });\n this.props.history.push(this.props.bookMarkSolution, \"enrollFactorPage\");\n }\n\n fetchIdentityProviders(params) {\n if (this.props.idp) {\n return Promise.resolve({ items: [this.props.idp] });\n } else {\n const url = new URL(this.state.apiBaseUrl + \"/identity-providers\");\n Object.keys(params).forEach(key =>\n url.searchParams.append(key, params[key])\n );\n\n return fetch(url, {\n headers: {\n Accept: \"application/vnd.coxauto.v1+json\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n mode: \"cors\"\n }).then(response => {\n if (!response.ok) {\n throw response;\n }\n return response.json(); // we only get here if there is no error\n });\n }\n }\n\n forgotUsername() {\n this.props.history.push(\n this.props.bookMarkSolution,\n \"usernameRecoveryPage\"\n );\n\n this.setState({\n errorMsg: \"\"\n });\n }\n\n forgotPassword = () => {\n // this.state.authenticationProvider:\n // = BRI ~ Bridge 2 user\n // = any other value ~ Solution user\n // test comment\n if (this.state.authenticationProvider === \"BRI\") {\n // Switch to forgot password recovery options page for Bridge 2 users.\n this.props.history.push(\n this.props.bookMarkSolution,\n \"passwordRecoveryOptionsForm\"\n );\n } else {\n // Follow Solution user password reset flow.\n window.location.assign(this.state.solutionInfo.passwordResetUrl);\n }\n };\n\n // Handle recovering bridge username.\n recoverBridgeUsername = shortCircuit => {\n if (shortCircuit) {\n this.props.history.replace(\n this.props.bookMarkSolution,\n \"usernameRecoveryEmailCaptureForm\"\n );\n } else {\n this.props.history.push(\n this.props.bookMarkSolution,\n \"usernameRecoveryEmailCaptureForm\"\n );\n }\n };\n\n // Handle next page from username recovery.\n onClickRecoveryEmailNextButton = recoveryEmail => {\n this.setState({ usernameRecoveryEmail: recoveryEmail });\n const SendUsernameRequest = {\n clientId: this.props.params.client_id,\n emailAddress: recoveryEmail\n };\n const requestOptions = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.v1+json\",\n Accept: \"application/vnd.coxauto.v1+json\",\n \"Access-Control-Allow-Credentials\": \"true\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n body: JSON.stringify(SendUsernameRequest)\n };\n fetch(\n new URL(this.state.apiBaseUrl + \"/account/recovery/username\").href,\n requestOptions\n )\n .then(response => response.json())\n .then(sendUsernameResponse => {\n this.props.history.push(\n this.props.bookMarkSolution,\n \"usernameRecoveryStatusForm\"\n );\n this.clearErrors();\n })\n .catch(err => {\n this.setState({\n errorMsg: \"error.generic\"\n });\n });\n };\n\n // Handle moving back to recovery options page from passcode page\n showRecoveryOptions = () => {\n this.props.history.push(\n this.props.bookMarkSolution,\n \"passwordRecoveryOptionsForm\"\n );\n };\n\n // Handle moving back from username recovery status.\n onClickRecoverUsernameStatusBack = () => {\n this.props.history.push(this.props.bookMarkSolution, \"usernamePage\");\n };\n\n initiatePasswordRecovery = () =>\n fetch(new URL(\"/account/recovery/email\", this.state.apiBaseUrl).href, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.v1+json\",\n Accept: \"application/vnd.coxauto.v1+json\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n body: JSON.stringify({\n method: \"EMAIL\",\n userName: this.state.username,\n clientId: this.props.params.client_id\n })\n })\n .then(response => {\n if (!response.ok) {\n throw response;\n }\n this.clearErrors();\n })\n .catch(err => {\n this.setState({\n errorMsg: \"error.generic\"\n });\n throw err;\n });\n\n retrieveRecoveryWorkflow = ({ method, path }) =>\n fetch(new URL(this.state.apiBaseUrl + path).href, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.v1+json\",\n Accept: \"application/vnd.coxauto.v1+json\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n body: JSON.stringify({\n method,\n userName: this.state.username,\n clientId: this.props.params.client_id\n })\n })\n .then(response => {\n if (!response.ok) {\n throw response;\n }\n return response.json();\n })\n .then(passwordWorkflowResponse => {\n this.clearErrors();\n return passwordWorkflowResponse;\n });\n\n onClickPasswordRecoveryByEmailFromOptionsForm = (isShortCircuit = false) => {\n this.initiatePasswordRecovery()\n .then(() => {\n this.setState({\n showRecoveryOptionsFunc: isShortCircuit\n ? undefined\n : this.showRecoveryOptions\n });\n if (isShortCircuit) {\n this.props.history.replace(\n this.props.bookMarkSolution,\n \"accountRecoveryEmailSentForm\"\n );\n } else {\n this.props.history.push(\n this.props.bookMarkSolution,\n \"accountRecoveryEmailSentForm\"\n );\n }\n })\n .catch(() => {});\n };\n\n onClickPasswordRecoveryBySmsFromOptionsForm = (isShortCircuit = false) =>\n this.retrieveRecoveryWorkflow({\n method: \"SMS\",\n path: \"/account/recovery/sms\"\n })\n .then(passwordWorkflowResponse =>\n this.setState({\n accountRecoveryWorkflowId: passwordWorkflowResponse.workflowId,\n passwordPolicy: passwordWorkflowResponse.passwordPolicy\n })\n )\n .then(() => {\n this.setState({\n showRecoveryOptionsFunc: isShortCircuit\n ? undefined\n : this.showRecoveryOptions\n });\n if (isShortCircuit) {\n this.props.history.replace(\n this.props.bookMarkSolution,\n \"otpValidationForm\"\n );\n } else {\n this.props.history.push(\n this.props.bookMarkSolution,\n \"otpValidationForm\"\n );\n }\n })\n .catch(() => {\n this.setState({\n errorMsg: \"error.generic\"\n });\n });\n\n closePasswordRecovery = e => {\n this.props.history.push(this.props.bookMarkSolution, \"passwordPage\");\n };\n\n // Handle Passcode verification for reset password by Phone.\n verifyPasscode = passcode => {\n // Make signin-api AJAX REST call to password reset\n const SMSRecoveryRequest = {\n clientId: this.props.params.client_id,\n passcode,\n workflowId: this.state.accountRecoveryWorkflowId\n };\n const requestOptions = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.v1+json\",\n Accept: \"application/vnd.coxauto.v1+json\",\n \"Access-Control-Allow-Credentials\": \"true\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n body: JSON.stringify(SMSRecoveryRequest)\n };\n return fetch(\n new URL(this.state.apiBaseUrl + \"/account/recovery/sms/verify\").href,\n requestOptions\n )\n .then(response => {\n if (!response.ok) {\n throw new Error(\"error.generic\");\n }\n return response.json();\n })\n .then(response => {\n if (!response.workflowId) {\n throw new Error(\"error.invalidOtpCode\");\n }\n return response;\n })\n .then(passcodeVerifyResponse => {\n this.clearErrors();\n\n this.setState({\n accountRecoveryWorkflowId: passcodeVerifyResponse.workflowId\n });\n this.props.history.push(\n this.props.bookMarkSolution,\n \"accountRecoveryPasswordResetForm\"\n );\n return true;\n })\n .catch(({ message }) => {\n this.setState({\n errorMsg: message\n });\n return false;\n });\n };\n\n // Handle Passcode verification for reset password by Phone.\n resendPasscode = () => {\n // Make signin-api AJAX REST call to password reset\n const SMSResendRequest = {\n clientId: this.props.params.client_id,\n workflowId: this.state.accountRecoveryWorkflowId\n };\n const requestOptions = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.v1+json\",\n Accept: \"application/vnd.coxauto.v1+json\",\n \"Access-Control-Allow-Credentials\": \"true\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n body: JSON.stringify(SMSResendRequest)\n };\n fetch(\n new URL(this.state.apiBaseUrl + \"/account/recovery/sms/resend\").href,\n requestOptions\n )\n .then(response => {\n if (!response.ok) {\n throw response;\n }\n return response.json();\n })\n .then(passcodeResendResponse => {\n this.clearErrors();\n this.setState({\n accountRecoveryWorkflowId:\n passcodeResendResponse.workflowId ||\n this.state.accountRecoveryWorkflowId\n });\n })\n .catch(err => {\n this.setState({\n errorMsg: \"error.generic\"\n });\n });\n };\n\n onAccountRecoveryPasswordChange(newPassword) {\n // DISALLOWED_STRINGS_FOR_PASSWORDS_FF is set, use the newer code.\n return fetch(\n new URL(\n \"/account/recovery/reset-password\",\n this.state.apiBaseUrl\n ).toString(),\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.v1+json\",\n Accept: \"application/vnd.coxauto.v1+json\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n body: JSON.stringify({\n workflowId: this.state.accountRecoveryWorkflowId,\n password: newPassword,\n clientId: this.props.params.client_id\n })\n }\n )\n .then(apiResponse =>\n apiResponse.json().then(json => {\n json.apiResponseOk = apiResponse.ok;\n json.apiResponseStatus = apiResponse.status;\n return json;\n })\n )\n .then(json => {\n if (json.apiResponseOk) {\n // happy path\n this.clearErrors();\n this.setState({\n accountRecoveryWorkflowId: json.workflowId\n });\n return json;\n } else {\n // failure path\n throw json;\n }\n })\n .catch(failedJson => {\n if (\n failedJson.apiResponseStatus &&\n (failedJson.apiResponseStatus === 400 ||\n failedJson.apiResponseStatus === 422)\n ) {\n // Display the password error messages.\n this.setState({\n passwordChangeBackendErrors: mapToTranslatedMessages(\n failedJson.passwordErrorCodes\n )\n });\n } else {\n this.setState({ errorMsg: `error.generic` });\n }\n return false;\n });\n }\n\n federate(federationProvider) {\n const submitParams = JSON.parse(JSON.stringify(this.props.params));\n submitParams.federationProvider = federationProvider;\n this.handleSignin(submitParams);\n }\n\n submitPassword(newPassword) {\n const submitParams = JSON.parse(JSON.stringify(this.props.params));\n submitParams.password = newPassword;\n this.setState({\n password: newPassword\n });\n submitParams.solutionid = this.props.solutionId;\n submitParams.authenticationProvider = this.state.authenticationProvider;\n return this.handleSignin(submitParams);\n }\n\n changePassword(newPassword) {\n const url = new URL(this.state.apiBaseUrl + \"/change-password\"),\n body = {\n clientId: this.props.params.client_id,\n token: this.state.passwordResetState,\n oldPassword: this.state.password,\n newPassword\n };\n return fetch(url.href, {\n headers: {\n Accept: \"application/vnd.coxauto.v1+json\",\n \"Content-Type\": \"application/vnd.coxauto.tokenchangepassword.v1+json\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n method: \"POST\",\n body: JSON.stringify(body),\n mode: \"cors\"\n })\n .then(response => response.json())\n .then(response => {\n if (Object.entries(response).length === 0) {\n this.clearErrors();\n return true;\n } else {\n this.handleErrorState(\n response.errorCode,\n response.errorAttributes,\n response.passwordErrorCodes\n );\n return false;\n }\n })\n .catch(err => {\n this.setState({\n errorMsg: \"error.generic\"\n });\n if (window.NREUM)\n window.NREUM.noticeError(err, {\n transactionId: this.state.transactionId\n });\n });\n }\n\n onChallengeFactor = factorId => {\n const url = new URL(this.state.apiBaseUrl + \"/signin/factors/challenge\");\n const body = {\n factorId,\n stateToken: this.state.verificationStateToken,\n clientId: this.props.params.client_id,\n username: this.state.username\n };\n\n this.setState({\n verificationFactors: this.state.verificationFactors.map(f => {\n return {\n ...f,\n isActive: f.id === factorId\n };\n })\n });\n\n return fetch(url.href, {\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.v1+json\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n method: \"POST\",\n body: JSON.stringify(body),\n mode: \"cors\"\n })\n .then(response => {\n if (!response.ok) {\n if (response.status === 401) {\n // Either the user is locked out or they waited too long\n // Bounce back to signin\n this.setState({\n errorMsg: \"error.INVALID_USER_OR_CODE\"\n });\n this.props.history.push(\n this.props.bookMarkSolution,\n \"usernamePage\"\n );\n return false;\n } else if (response.status === 403) {\n // OKTA rate limit, display error\n this.setState({\n errorMsg: \"error.MFA_RATE_LIMIT\"\n });\n return false;\n } else {\n throw response.bodyUsed\n ? response.json()\n : { errorCode: \"generic\" };\n }\n }\n this.clearErrors();\n this.props.history.push(\n this.props.bookMarkSolution,\n \"accountVerificationForm\"\n );\n return true;\n })\n .catch(err => {\n this.setState({\n errorMsg: \"error.generic\"\n });\n if (window.NREUM)\n window.NREUM.noticeError(err, {\n transactionId: this.state.transactionId\n });\n\n return false;\n });\n };\n\n returnToChallengeOptions = e => {\n this.props.history.push(\n this.props.bookMarkSolution,\n \"accountVerificationOptionsForm\"\n );\n };\n\n returnToFactorEnrolmentOptions = e => {\n this.props.history.push(\n this.props.bookMarkSolution,\n \"factorEnrollmentOptionsForm\"\n );\n };\n\n onEnrollSuccess = () => {\n this.props.history.push(\n this.props.bookMarkSolution,\n \"factorEnrollSuccessForm\"\n );\n const unblock = this.props.history.block();\n this.setState({ unblock });\n };\n\n onVerifyFactor = passCode => {\n const url = new URL(this.state.apiBaseUrl + \"/signin/factors/verify\");\n const activeFactor = this.state.verificationFactors.filter(\n f => f.isActive\n )[0];\n const body = {\n factorId: activeFactor.id,\n stateToken: this.state.verificationStateToken,\n clientId: this.props.params.client_id,\n username: this.state.username,\n passCode\n };\n\n return fetch(url.href, {\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.v1+json\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n method: \"POST\",\n body: JSON.stringify(body),\n mode: \"cors\"\n })\n .then(response => {\n if (!response.ok) {\n if (response.status === 403) {\n // This means the code was invalid, let the form handle it\n return false;\n } else if (response.status === 401) {\n // Either the user is locked out or they waited too long to enter the code\n // Bounce back to signin\n this.setState({\n errorMsg: \"error.INVALID_USER_OR_CODE\"\n });\n this.props.history.push(\n this.props.bookMarkSolution,\n \"usernamePage\"\n );\n return false;\n } else {\n throw response.bodyUsed\n ? response.json()\n : { errorCode: \"generic\" };\n }\n }\n this.clearErrors();\n return this.continueSignin();\n })\n .catch(err => {\n this.setState({\n errorMsg: \"error.generic\"\n });\n if (window.NREUM)\n window.NREUM.noticeError(err, {\n transactionId: this.state.transactionId\n });\n\n return \"error.generic\";\n });\n };\n\n continueSignin = () => {\n if (this.state.unblock) {\n this.state.unblock();\n }\n const submitParams = JSON.parse(JSON.stringify(this.props.params));\n submitParams.authenticationProvider = this.state.authenticationProvider;\n submitParams.password = this.state.password;\n return this.handleSignin(submitParams);\n };\n\n onEnrollFactor = (factorType, factorValue) => {\n const url = new URL(this.state.apiBaseUrl + \"/signin/factors/enroll\");\n const body = {\n factorType,\n token: this.state.mfaEnrollIdentityToken,\n clientId: this.props.params.client_id,\n emailAddress: factorType === \"EMAIL\" ? factorValue : null,\n phoneNumber: factorType === \"SMS\" ? factorValue : null\n };\n\n this.setState({\n enrollFactor: { factorType, translationParam: factorValue }\n });\n\n return fetch(url.href, {\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.v1+json\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n method: \"POST\",\n body: JSON.stringify(body),\n mode: \"cors\"\n })\n .then(response => {\n if (!response.ok) {\n switch (response.status) {\n case 403:\n this.setState({\n errorMsg: \"error.MFA_RATE_LIMIT\"\n });\n return false;\n case 409:\n throw new Error(\"fieldError.emailInUse\");\n case 422:\n throw new Error(\"fieldError.phoneInvalid\");\n default:\n throw new Error(\"error.generic\");\n }\n }\n this.clearErrors();\n if (response.status === 200) {\n // the factor has already been verified, so continue\n this.onEnrollSuccess();\n } else {\n this.props.history.push(\n this.props.bookMarkSolution,\n \"enrollVerificationForm\"\n );\n }\n return true;\n })\n .catch(err => {\n if (err.message.startsWith(\"fieldError\")) throw err;\n this.setState({\n errorMsg: \"error.generic\"\n });\n if (window.NREUM)\n window.NREUM.noticeError(err, {\n transactionId: this.state.transactionId\n });\n\n return false;\n });\n };\n\n onVerifyEnrollFactor = (factorType, verificationCode) => {\n const url = new URL(\n this.state.apiBaseUrl + \"/signin/factors/enroll-verify\"\n );\n const body = {\n token: this.state.mfaEnrollIdentityToken,\n clientId: this.props.params.client_id,\n factorType,\n verificationCode\n };\n\n return fetch(url.href, {\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.v1+json\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n method: \"POST\",\n body: JSON.stringify(body),\n mode: \"cors\"\n })\n .then(response => {\n if (!response.ok) {\n switch (response.status) {\n case 403: // This means the code was invalid, let the form handle it\n return false;\n case 409: // This means they already verified a factor, so success\n this.onEnrollSuccess();\n return false;\n default:\n throw response.bodyUsed\n ? response.json()\n : { errorCode: \"generic\" };\n }\n }\n this.clearErrors();\n return true;\n })\n .catch(err => {\n this.setState({\n errorMsg: \"error.generic\"\n });\n if (window.NREUM)\n window.NREUM.noticeError(err, {\n transactionId: this.state.transactionId\n });\n\n return \"error.generic\";\n });\n };\n\n onAcceptEula() {\n const url = new URL(this.state.apiBaseUrl + \"/eula\"),\n body = {\n token: this.state.eulaIdentityToken,\n clientId: this.props.params.client_id\n };\n return fetch(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n method: \"POST\",\n body: JSON.stringify(body),\n mode: \"cors\"\n })\n .then(response =>\n response.json().then(responseJson => {\n if (response.ok && responseJson.eulaAcceptedChallenge) {\n const submitParams = JSON.parse(JSON.stringify(this.props.params));\n submitParams.challengeState = responseJson.eulaAcceptedChallenge;\n submitParams.authenticationProvider = this.state.authenticationProvider;\n submitParams.password = this.state.password;\n return this.handleSignin(submitParams);\n } else {\n throw new Error(\"Missing eulaAcceptedChallenge\");\n }\n })\n )\n .catch(err => {\n this.setState({\n errorMsg: \"error.generic\"\n });\n if (window.NREUM)\n window.NREUM.noticeError(err, {\n transactionId: this.state.transactionId\n });\n\n return false;\n });\n }\n\n reportThirdPartyCookieStatus(identityParams) {\n this.props\n .isThirdPartyCookieAllowed(\n identityParams.username,\n identityParams.client_id\n )\n .then(bool => {\n this.setState({ thirdPartyCookiesAllowed: bool });\n })\n .catch(() => {}); // no-op;\n }\n\n handleSignin(submitParams) {\n submitParams.username = this.state.username;\n submitParams.solutionid = this.props.solutionId;\n submitParams.transactionId = this.state.transactionId;\n\n return fetch(new URL(this.state.apiBaseUrl + \"/signin\").href, {\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.v1+json\",\n Accept: \"application/vnd.coxauto.v1+json\",\n \"X-CoxAuto-Correlation-Id\": this.state.transactionId\n },\n method: \"POST\",\n body: JSON.stringify(submitParams)\n })\n .then(async res => ({ status: res.status, body: await res.json() }))\n .then(response => {\n const analyticsUser = response.body.analyticsUser;\n if (analyticsUser && analyticsUser.platformId) {\n identifyUser({\n bridgePlatformId: analyticsUser.platformId,\n bridgeUsername: analyticsUser.username\n });\n productEvent(\"User Identified\");\n }\n\n if (response.status === 200) {\n productEvent(`Authenticated And Authorized`, {\n solutionId: this.props.solutionId\n });\n }\n\n if (response.body.redirectUrl) {\n // Skip the success page if Safari.\n // TODO: fix signin success page not rendering in Safari.\n const isSafari =\n navigator.userAgent.indexOf(\"Safari\") !== -1 &&\n navigator.userAgent.indexOf(\"Chrome\") === -1;\n if (!isSafari) {\n this.props.history.push(\n this.props.bookMarkSolution,\n \"successRedirectCard\"\n );\n // As this page is a terminating page, let's make sure to stop and clear the timeout timer and block the back button\n clearInterval(intervalHolder);\n this.props.history.block(); // returns a function that can unblock, can take in function to provide prompt\n }\n endSession();\n switch (response.body.redirectMode) {\n case \"FORM_POST\":\n this.doSubmitForm(\n response.body.formParams,\n response.body.redirectUrl\n );\n break;\n case \"GET\":\n default:\n window.location.assign(response.body.redirectUrl);\n }\n return true;\n } else {\n this.handleErrorState(\n response.body.errorCode,\n response.body.errorAttributes\n );\n return false;\n }\n })\n .catch(err => {\n const errorAttrs = {\n ...this.state.errorAttrs,\n canShowDtLegacyLink: true\n };\n\n this.setState({\n errorMsg: \"error.generic\",\n errorAttrs\n });\n if (window.NREUM)\n window.NREUM.noticeError(err, {\n transactionId: this.state.transactionId\n });\n\n return false;\n });\n }\n\n getDTBackdoorLink() {\n if (\n // Validate Feature flag is enabled\n this.props.featureFlags[\n \"pdt.enable-disable-dt-backdoor-login-on-csi-error-message\"\n ]\n ) {\n const dtBackdoorUrl =\n this.state.solution.partition === \"NON_PRODUCTION\"\n ? \"https://login-qa.dealertrack.com/login/dtlogin\"\n : \"https://login.dealertrack.com/login/dtlogin\";\n const backdoorPartition =\n this.state.solution.partition === \"NON_PRODUCTION\"\n ? \"NON_PRODUCTION\"\n : \"PRODUCTION\";\n\n return (\n \n linkClicked(\n \"Legacy DT Fallback\",\n \"User redirected to \" +\n backdoorPartition +\n \" dealertrack legacy login\",\n \"Header Alert Box\"\n )\n }\n />\n )\n }}\n />\n );\n } else {\n return null;\n }\n }\n\n handleErrorState(errorCode, attributes, passwordErrorCodes) {\n switch (errorCode) {\n case \"VERIFICATION_REQUIRED\":\n this.clearErrors();\n this.props.history.push(\n this.props.bookMarkSolution,\n \"accountVerificationOptionsForm\"\n );\n this.setState({\n verificationFactors: attributes[\"factors\"],\n verificationStateToken: attributes[\"stateToken\"]\n });\n report(\n \"Verification Options Shown\",\n \"User Logged In\",\n \"User needs to verify account\",\n \"Account Verification Form\"\n );\n break;\n\n case \"EULA_REQUIRED\":\n this.clearErrors();\n this.props.history.push(this.props.bookMarkSolution, \"eulaPage\");\n this.setState({\n eulaIdentityToken: attributes[\"eulaIdentityToken\"]\n });\n report(\n \"EULA Shown\",\n \"User Logged In\",\n \"User needs to accept EULA\",\n \"Eula Form\"\n );\n break;\n case \"EXPIRED_PASSWORD\":\n this.clearErrors();\n this.props.history.push(\n this.props.bookMarkSolution,\n \"passwordResetPage\"\n );\n this.setState({\n passwordResetState: attributes[\"changePasswordToken\"]\n });\n this.setState({\n passwordPolicy: attributes[\"passwordPolicy\"]\n });\n break;\n case \"FAILED_PASSWORD_CHANGE_REQUIREMENTS\":\n // Display the password error messages.\n this.setState({\n passwordChangeBackendErrors: mapToTranslatedMessages(\n passwordErrorCodes\n )\n });\n break;\n case \"MFA_ENROLLMENT_REQUIRED\":\n this.clearErrors();\n this.props.history.push(\n this.props.bookMarkSolution,\n \"factorEnrollmentOptionsForm\"\n );\n this.setState({\n mfaEnrollIdentityToken: attributes[\"stateToken\"],\n mfaEnrollmentForRecovery: attributes[\"forRecovery\"]\n });\n report(\n \"Factor Enrollment Options Shown\",\n \"User Logged In\",\n \"User needs to enroll with at least one factor\",\n \"Factor Enrollment Form\"\n );\n break;\n case \"USER_NOT_LINKED\":\n this.props.history.push(\n this.props.bookMarkSolution,\n \"userUnlinkedErrorPage\"\n );\n\n productEvent(`Authenticated But Not Authorized`, {\n solutionId: this.props.solutionId\n });\n\n // As this page is a terminating page, let's make sure to stop and clear the timeout timer and block the back button\n clearInterval(intervalHolder);\n this.props.history.block(); // returns a function that can unblock, can take in function to provide prompt\n this.setState({\n timeRemaining: 0 // Hides the countdown timer box\n });\n break;\n case \"USER_MUST_USE_BRIDGE\":\n report(\n \"Username\",\n \"Username Submitted\",\n \"Valid Solution User Linked to Bridge, shown bridge username required screen\",\n \"userLinkedToBridgeForm\"\n );\n\n this.setState(\n {\n errorAttrs: {\n ...this.state.errorAttrs,\n ...attributes,\n I18N_KEY: \"userLinkedToBridgeForm\",\n username: this.state.username,\n solutionDisplayName: this.props.solutionDisplayName,\n BUTTON_ACTION: () => {\n this.setState(\n { username: attributes[\"bridgeUsername\"] }, // Update the username\n () => {\n report(\n \"Login with Bridge ID Button\",\n \"Button Clicked\",\n \"Valid Solution User Linked to Bridge, shown bridge username required screen\",\n \"userLinkedToBridgeForm\"\n );\n\n this.props.history.push(\n this.props.bookMarkSolution,\n \"usernamePage\"\n ); // go back to the signin page, preserving history so they can go back to this page\n // this.submitUsername(attributes['bridgeUsername']) // Submit the username to get to proper password screen\n }\n );\n }\n }\n },\n () =>\n this.props.history.push(\n this.props.bookMarkSolution,\n \"genericMessagePage\"\n )\n );\n break;\n case \"INVALID_USER_OR_PASSWORD\":\n report(\n \"Password Input\",\n \"Invalid username/password entered\",\n \"Triggered alert\",\n \"Password Form\"\n );\n this.setState({ errorMsg: \"error.INVALID_USER_OR_PASSWORD\" });\n break;\n case \"DUPLICATE_SESSION\":\n report(\n \"Username\",\n \"Username Submitted\",\n \"Duplicate Session Detected, asking user to confirm logout\",\n \"duplicateSession\"\n );\n this.setState(\n {\n errorAttrs: {\n ...this.state.errorAttrs,\n ...attributes,\n retryCallback: () =>\n this.state.solutionInfo.passwordRequired\n ? this.submitPassword(this.state.password)\n : this.federate(this.state.solutionInfo.federationProvider)\n }\n },\n () => {\n this.props.history.push(\n this.props.bookMarkSolution,\n \"duplicateSessionDetected\"\n );\n }\n );\n break;\n case \"USER_STATE_ERROR\":\n case \"SYSTEM_ERROR\":\n attributes[\"canShowDtLegacyLink\"] = true;\n this.setState({\n errorMsg: \"error.\" + errorCode,\n errorAttrs: {\n ...this.state.errorAttrs,\n ...attributes\n }\n });\n break;\n case \"INTERNAL_SERVER_ERROR\":\n case \"BAD_GATEWAY\":\n case \"SERVICE_UNAVAILABLE\":\n case \"GATEWAY_TIMEOUT\":\n attributes[\"canShowDtLegacyLink\"] = true;\n this.setState({\n errorMsg: \"error.SYSTEM_ERROR\",\n errorAttrs: {\n ...this.state.errorAttrs,\n ...attributes\n }\n });\n break;\n case \"THIRD_PARTY_ACCESS_DENIED\":\n this.props.history.push(\n this.props.bookMarkSolution,\n \"thirdPartyAccessDenied\"\n );\n // As this page is a terminating page, let's make sure to stop and clear the timeout timer and block the back button\n clearInterval(intervalHolder);\n this.props.history.block(); // returns a function that can unblock, can take in function to provide prompt\n this.setState({\n timeRemaining: 0 // Hides the alert box\n });\n break;\n\n default:\n if (window.NREUM)\n window.NREUM.noticeError(\n \"Unhandled Error Code in error handler: \" + errorCode,\n {\n transactionId: this.state.transactionId\n }\n );\n attributes[\"canShowDtLegacyLink\"] = true;\n this.setState({\n errorMsg: \"error.SYSTEM_ERROR\",\n errorAttrs: {\n ...this.state.errorAttrs,\n ...attributes\n }\n });\n }\n }\n\n doSubmitForm(params, url) {\n const form = document.createElement(\"form\");\n form.setAttribute(\"method\", \"post\");\n form.setAttribute(\"action\", url);\n\n for (const key in params) {\n if (params.hasOwnProperty(key)) {\n const hiddenField = document.createElement(\"input\");\n hiddenField.setAttribute(\"type\", \"hidden\");\n hiddenField.setAttribute(\"name\", key);\n hiddenField.setAttribute(\"value\", params[key]);\n\n form.appendChild(hiddenField);\n }\n }\n document.body.appendChild(form);\n form.submit();\n }\n\n navigateBackAPage() {\n this.props.history.goBack();\n }\n\n clearErrors() {\n this.setState({ errorMsg: undefined });\n }\n\n getPartition() {\n return (\n this.props.partition ||\n (this.state.solution ? this.state.solution.partition : \"PRODUCTION\")\n );\n }\n\n render() {\n return (\n
\n
\n \n
\n {this.state.timeRemaining < timeoutThresholds.info &&\n this.state.timeRemaining !== 0 && (\n timeoutThresholds.warningTime\n ? \"info\"\n : \"warning\"\n }\n displayCloseButton={false}\n >\n \n {this.state.solution !== undefined &&\n this.state.solution.solutionLandingUrl && (\n \n  \n .\n \n )}\n \n )}\n {this.state.errorMsg && (\n \n {/* eslint-disable react/no-danger */}\n \n {this.state.errorAttrs &&\n this.state.errorAttrs.canShowDtLegacyLink &&\n this.getDTBackdoorLink()}\n {/* eslint-enable react/no-danger */}\n \n )}\n \n this.props.history.push(\n this.props.bookMarkSolution,\n \"usernamePage\"\n )\n }\n onClickSolutionName={this.submitSolutionName}\n solutionDisplayName={this.props.solutionDisplayName}\n solutionList={this.state.solutionList}\n solutionId={this.props.solutionId}\n apiBaseUrl={this.props.apiBaseUrl}\n clientId={this.props.params.client_id}\n showForgotPassword={\n this.state.solution &&\n this.state.solution.showForgotPassword !== undefined\n ? this.state.solution.showForgotPassword\n : true\n }\n showForgotUsername={\n this.state.solution &&\n this.state.solution.showForgotUsername !== undefined\n ? this.state.solution.showForgotUsername\n : true\n }\n bridgeNative={\n this.state.solution ? this.state.solution.bridgeNative : false\n }\n solutionLandingUrl={\n this.state.solution\n ? this.state.solution.solutionLandingUrl\n : undefined\n }\n recoverBridgeUsername={this.recoverBridgeUsername}\n featureFlags={this.props.featureFlags}\n onClickRecoveryEmailNextButton={this.onClickRecoveryEmailNextButton}\n onClickRecoverUsernameStatusBack={\n this.onClickRecoverUsernameStatusBack\n }\n recoveryEmail={this.state.usernameRecoveryEmail}\n verificationFactors={this.state.verificationFactors}\n onChallengeFactor={this.onChallengeFactor}\n onVerifyFactor={this.onVerifyFactor}\n onClickPasswordRecoveryByEmailFromOptionsForm={\n this.onClickPasswordRecoveryByEmailFromOptionsForm\n }\n onClickPasswordRecoveryBySmsFromOptionsForm={\n this.onClickPasswordRecoveryBySmsFromOptionsForm\n }\n closePasswordRecovery={this.closePasswordRecovery}\n verifyPasscode={this.verifyPasscode}\n showRecoveryOptions={this.state.showRecoveryOptionsFunc}\n resendPasscode={this.resendPasscode}\n onAccountRecoveryPasswordChange={\n this.onAccountRecoveryPasswordChange\n }\n fetchIdentityProviders={this.fetchIdentityProviders}\n returnToChallengeOptions={this.returnToChallengeOptions}\n returnToFactorEnrolmentOptions={this.returnToFactorEnrolmentOptions}\n passwordPolicy={this.state.passwordPolicy}\n submitFactorEnrollmentOption={this.submitFactorEnrollmentOption}\n onEnrollFactor={this.onEnrollFactor}\n onVerifyEnrollFactor={this.onVerifyEnrollFactor}\n enrollFactor={this.state.enrollFactor}\n onEnrollSuccess={this.onEnrollSuccess}\n onContinueSignin={this.continueSignin}\n passwordChangeBackendErrors={this.state.passwordChangeBackendErrors}\n partition={this.getPartition()}\n mfaEnrollmentForRecovery={this.state.mfaEnrollmentForRecovery}\n />\n
\n {this.props.currentFlow !== \"solutionIdentity\" &&
}\n
\n );\n }\n}\n\nApp.propTypes = {\n abortUrl: PropTypes.string,\n apiBaseUrl: PropTypes.string.isRequired,\n bookMarkSolution: PropTypes.string,\n currentFlow: PropTypes.string,\n featureFlags: PropTypes.object.isRequired,\n forceErrorState: PropTypes.string,\n history: PropTypes.object.isRequired,\n idp: PropTypes.object,\n isThirdPartyCookieAllowed: PropTypes.func,\n location: PropTypes.object.isRequired,\n /* eslint-disable camelcase */\n params: PropTypes.shape({\n client_id: PropTypes.string.isRequired,\n response_type: PropTypes.string.isRequired,\n scope: PropTypes.string.isRequired,\n redirect_uri: PropTypes.string.isRequired,\n state: PropTypes.string.isRequired,\n nonce: PropTypes.string\n }).isRequired,\n partition: PropTypes.string,\n solution: PropTypes.string,\n solutionDisplayName: PropTypes.string,\n solutionId: PropTypes.string,\n transactionId: PropTypes.string,\n username: PropTypes.string\n};\n\nexport default withRouter(App);\n\n// For unit tests\nexport const AppComponent = App;\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport \"moment/locale/fr\";\nimport \"moment/locale/es\";\n\n/* eslint-disable import/no-webpack-loader-syntax */\nconst resources = require(\"i18next-resource-store-loader!./locales/index.js\");\nconst moment = require(\"moment\");\n\ni18n\n .use(initReactI18next) // passes i18n down to react-i18next\n .use(LanguageDetector)\n .init({\n resources,\n defaultNS: \"translation\",\n fallbackLng: \"en\",\n // lng: \"fr\", // TODO: replace with browser language; for testing locales\n interpolation: {\n escapeValue: false, // react already safes from xss\n format(value, format, lng) {\n if (value instanceof Date)\n return moment(value)\n .locale(lng)\n .format(format);\n return value;\n }\n }\n });\n\nexport default i18n;\n","import React, { Suspense } from \"react\";\nimport { render } from \"react-dom\";\nimport App from \"./components/App\";\nimport \"./index.scss\";\nimport \"./i18n\";\nimport SolutionLauncher from \"./components/solutionlauncher-control/SolutionLauncher\";\nimport UserElectedPasswordChangeFlow from \"./components/UserElectedPasswordChangeFlow\";\nimport LoadingIndicator from \"@cx/ui/LoadingIndicator\";\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport AccountRecoveryEmailPasswordResetForm from \"./components/account-recovery/AccountRecoveryEmailPasswordResetForm\";\nimport { isThirdPartyCookieEnabled } from \"./components/isThirdPartyCookieEnabled\";\n\nconst {\n solutionlauncherlist,\n apibaseurl,\n transactionid,\n solutioninfo,\n solutiondisplayname,\n solutionid,\n forceerrorstate,\n username,\n featureflags,\n publicview,\n successurl,\n aborturl,\n idp,\n partition,\n currentflow,\n emailrecoverytoken,\n activationtoken,\n passwordpolicy,\n ...params\n} = document.getElementById(\"params\").dataset;\n\nlet featureFlags;\ntry {\n featureFlags = featureflags ? JSON.parse(featureflags) : {};\n} catch (parseErr) {\n // If for some reason we get feature flags that are not parsable, let's just\n // log the error and continue\n if (window.NREUM) window.NREUM.noticeError(parseErr);\n featureFlags = {};\n}\n\nif (\n solutionlauncherlist &&\n (solutionlauncherlist !== \"\" || solutionlauncherlist !== \"null\")\n) {\n render(\n ,\n document.getElementById(\"root\")\n );\n} else if (publicview === \"changepassword\") {\n render(\n ,\n document.getElementById(\"root\")\n );\n} else if (publicview === \"activation\") {\n render(\n ,\n document.getElementById(\"root\")\n );\n} else if (publicview === \"resetPasswordByEmail\") {\n render(\n ,\n document.getElementById(\"root\")\n );\n} else {\n // This is important for our SPA's as this is used by the PKCE flow to identify that\n // the solution is not currently logged in... As we are a hop from the original request\n // we can't see if the request passed a no-prompt parameter\n try {\n const errorCallback =\n params.redirect_uri +\n \"?state=\" +\n params.state +\n \"&error=access_denied&error_description=interactive+login+prohibited+within+frame\";\n\n // TODO: This is some J.A.S. so a specific solution group can circumvent 3p cookie deprecation.\n // Readdress this when no longer needed...\n const acceptableIframeDomains =\n featureFlags[\"ops.acceptable-iframe-domains\"] || [];\n if (window.self !== window.top && acceptableIframeDomains.length) {\n // J.A.S. to start hand-shake with top window for loading signin in an iframe:\n window.top.postMessage(\"ORIGIN_REQUEST\", \"*\");\n\n // J.A.S. to default to errorCallback if we don't get a response from top window in short period of time:\n const timeoutID = setTimeout(() => {\n window.location = errorCallback;\n }, 500);\n\n // J.A.S to clear the timer, so signin can be in an iframe:\n window.addEventListener(\"message\", event => {\n if (\n // make sure the topmost window in the window hierarchy is the one that sent the message:\n window.top === event.source &&\n acceptableIframeDomains.find(domain => event.origin.includes(domain))\n ) {\n clearTimeout(timeoutID);\n }\n });\n // don't allow the iframe:\n } else if (window.self !== window.top) {\n window.location = errorCallback;\n }\n } catch (e) {\n // do nothing, this is to just see if we have this use case right now\n if (window.NREUM) window.NREUM.noticeError(e);\n }\n\n // Remove query params before rendering so users can not bookmark this app in it's current state\n const bookMarkSolution =\n \"/?solutionID=\" + solutionid + \"&clientId=\" + params.client_id;\n\n window.history.replaceState({}, document.title, bookMarkSolution);\n // Render the ui\n render(\n }>\n \n \n \n ,\n document.getElementById(\"root\")\n );\n}\n","import React from \"react\";\nimport CardTemplate from \"../card/cardTemplate\";\nimport Col from \"@cx/ui/Col\";\nimport PropTypes from \"prop-types\";\nimport Button from \"@cx/ui/Button\";\nimport Tooltip from \"@cx/ui/Tooltip\";\nimport { Trans, Translation } from \"react-i18next\";\nimport { linkClicked } from \"../../api/analytics\";\nimport \"./laucherController.scss\";\n\nconst LauncherControllerForm = props => {\n const solutions = props.launcherOptions.filter(\n item => item[\"solutionLandingUrl\"]\n );\n solutions.sort((a, b) =>\n a.solutionName.toLowerCase() > b.solutionName.toLowerCase() ? 1 : -1\n );\n\n return (\n
\n
\n }\n body={\n \n {t => (\n
\n {solutions.map(option => (\n \n \n \n linkClicked(\n option.solutionName,\n \"Navigate to landing page of \" +\n option.solutionId,\n \"Solution Launcher\"\n )\n }\n >\n \n \n \n \n ))}\n
\n )}\n
\n }\n />\n
\n
\n );\n};\n\nLauncherControllerForm.propTypes = {\n launcherOptions: PropTypes.arrayOf(\n PropTypes.shape({\n solutionId: PropTypes.string.isRequired,\n solutionName: PropTypes.string.isRequired,\n solutionLandingUrl: PropTypes.string,\n solutionLogoUrl: PropTypes.string\n })\n )\n};\nexport default LauncherControllerForm;\n","import React, { Component } from \"react\";\nimport LauncherControlerForm from \"../launchercontrol-form/launcherControllerForm\";\nimport Header from \"../header/Header\";\nimport PropTypes from \"prop-types\";\nimport \"../app.scss\";\nimport Footer from \"../footer/Footer\";\nimport { initializeDataLayer } from \"../../api/analytics\";\n\nclass SolutionLauncher extends Component {\n componentDidMount() {\n initializeDataLayer(\"\");\n }\n\n render() {\n return (\n
\n
\n
\n
\n
\n \n
\n
\n
\n );\n }\n}\n\nSolutionLauncher.propTypes = {\n launcherOptions: PropTypes.string\n};\n\nexport default SolutionLauncher;\n","import React from \"react\";\nimport Header from \"./header/Header\";\nimport CardTemplate from \"./card/cardTemplate\";\nimport PropTypes from \"prop-types\";\nimport Alert from \"@cx/ui/Alert\";\nimport { Trans } from \"react-i18next\";\nimport { initializeDataLayer } from \"../api/analytics\";\nimport PasswordResetFormErrorArray from \"./password-reset-form-error-array/PasswordResetFormErrorArray\";\nimport { mapToTranslatedMessages } from \"./password-validation/translationMap\";\n\nclass UserElectedPasswordChangeFlow extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n errorMsg: null,\n passwordChangeBackendErrors: []\n };\n\n this.changePassword = this.changePassword.bind(this);\n this.returnSuccess = this.returnSuccess.bind(this);\n this.returnFail = this.returnFail.bind(this);\n }\n\n componentDidMount() {\n initializeDataLayer(\"\");\n }\n\n changePassword(newPassword, oldPassword) {\n const url = new URL(this.props.apiBaseUrl + \"/change-password\"),\n body = {\n partition: this.props.partition,\n oldPassword,\n newPassword\n };\n return fetch(url, {\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.sessionchangepassword.v1+json\"\n },\n method: \"POST\",\n body: JSON.stringify(body),\n mode: \"cors\"\n })\n .then(response => response.json())\n .then(response => {\n if (Object.entries(response).length === 0) {\n this.setState({\n errorMsg: null,\n passwordChangeBackendErrors: []\n });\n\n // Start redirecting now\n this.returnSuccess();\n\n // While this is true, return false so we don't show the success page as we are redirecting anyways\n return false;\n } else {\n switch (response.errorCode) {\n case \"INVALID_CURRENT_PASSWORD\":\n this.setState({\n errorMsg: \n });\n break;\n\n case \"FAILED_PASSWORD_CHANGE_REQUIREMENTS\":\n // Display the password error messages.\n this.setState({\n passwordChangeBackendErrors: mapToTranslatedMessages(\n response.passwordErrorCodes\n )\n });\n break;\n\n default:\n throw new Error(\n \"Unexpected Error Code from user password change: \" +\n response.errorCode\n );\n }\n return false;\n }\n })\n .catch(err => {\n if (window.NREUM) window.NREUM.noticeError(err);\n\n this.setState({ errorMsg: });\n return false;\n });\n }\n\n returnSuccess() {\n window.location.href = this.props.successUrl;\n }\n\n returnFail() {\n window.location.href = this.props.abortUrl;\n }\n\n render() {\n return (\n
\n
\n
\n {this.state.errorMsg && (\n this.setState({ errorMsg: null })}\n >\n {this.state.errorMsg}\n \n )}\n
\n \n body={\n
\n \n }\n abortButtonCallback={this.returnFail}\n passwordPolicy={this.props.passwordPolicy}\n passwordChangeBackendErrors={\n this.state.passwordChangeBackendErrors\n }\n />\n
\n }\n />\n
\n
\n
\n );\n }\n}\n\nUserElectedPasswordChangeFlow.propTypes = {\n abortUrl: PropTypes.string.isRequired,\n apiBaseUrl: PropTypes.string.isRequired,\n featureFlags: PropTypes.object.isRequired,\n partition: PropTypes.string.isRequired,\n passwordPolicy: PropTypes.string,\n solutionDisplayName: PropTypes.string.isRequired,\n successUrl: PropTypes.string.isRequired,\n username: PropTypes.string.isRequired\n};\n\nexport default UserElectedPasswordChangeFlow;\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { Trans, useTranslation } from \"react-i18next\";\nimport CardTemplate from \"../card/cardTemplate\";\nimport Header from \"../header/Header\";\nimport LoadingIndicator from \"@cx/ui/LoadingIndicator\";\nimport PropTypes from \"prop-types\";\nimport Alert from \"@cx/ui/Alert\";\nimport { initializeDataLayer, linkClicked } from \"../../api/analytics\";\nimport PasswordResetFormErrorArray from \"../password-reset-form-error-array/PasswordResetFormErrorArray\";\nimport { mapToTranslatedMessages } from \"../password-validation/translationMap\";\n\nconst AccountRecoveryEmailPasswordResetForm = props => {\n const [loading, toggleLoading] = useState(true);\n const [errorLink, toggleErrorLink] = useState(false);\n const [displayCloseButton, toggleDisplayCloseButton] = useState(true);\n const [showForm, toggleShowForm] = useState(true);\n const [errorMsg, setErrorMsg] = useState(null);\n const [workflowId, setWorkflowId] = useState(\"\");\n const [launcherUrl, setLauncherUrl] = useState(null);\n const [userId, setUserId] = useState(\"\");\n const [passwordPolicy, setPasswordPolicy] = useState(\"\");\n const [\n passwordChangeBackendErrors,\n setPasswordChangeBackendErrors\n ] = useState([]);\n const [t] = useTranslation();\n\n const textValues =\n props.reasonType === \"activation\"\n ? {\n formTitle: \"passwordResetForm.titleActivation\",\n flowName: \"Activation\",\n linkExpired:\n \"accountRecoveryEmailPasswordResetForm.linkExpiredActivation\",\n location: \"Activation Form\",\n result: \"Activation Form Loaded\"\n }\n : {\n formTitle: \"passwordResetForm.title\",\n flowName: \"Account Recovery\",\n linkExpired: \"accountRecoveryEmailPasswordResetForm.linkExpired\",\n location: \"Account Recovery Email Password Reset Form\",\n result: \"Account Recovery Password Reset Form Loaded\"\n };\n\n const onLinkExpired = useCallback(() => {\n setErrorMsg(t(textValues.linkExpired));\n toggleErrorLink(true);\n toggleDisplayCloseButton(false);\n toggleShowForm(false);\n }, [t, textValues.linkExpired]);\n\n const userNotAvailable = useCallback(() => {\n setErrorMsg(t(\"accountRecoveryEmailPasswordResetForm.userNotYetAvailable\"));\n toggleErrorLink(true);\n toggleDisplayCloseButton(false);\n toggleShowForm(false);\n }, [t]);\n\n useEffect(() => {\n initializeDataLayer(\"\");\n }, []);\n\n useEffect(() => {\n setLauncherUrl(\n new URL(\n \"/solutionlauncher?partition=\" + props.partition,\n props.apiBaseUrl\n )\n );\n fetch(\n new URL(\"/account/recovery/email/token\", props.apiBaseUrl).toString(),\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.v1+json\",\n Accept: \"application/vnd.coxauto.v1+json\"\n },\n body: JSON.stringify({\n token: props.token,\n partition: props.partition\n })\n }\n )\n .then(response => {\n if (!response.ok) {\n throw response;\n }\n return response.json();\n })\n .then(response => {\n setWorkflowId(response.workflowId);\n setUserId(response.authenticatedUserId);\n setPasswordPolicy(response.passwordPolicy);\n toggleLoading(false);\n toggleErrorLink(false);\n setErrorMsg(null);\n linkClicked(\n `Email ${textValues.flowName} Workflow Verified`,\n textValues.result,\n textValues.location\n );\n })\n .catch(failedResponse => {\n if (failedResponse.status === 404) {\n onLinkExpired();\n } else if (failedResponse.status === 409) {\n userNotAvailable();\n } else {\n setErrorMsg(t(\"error.generic\"));\n toggleErrorLink(false);\n toggleShowForm(false);\n toggleDisplayCloseButton(false);\n }\n toggleLoading(false);\n linkClicked(\n `Email ${textValues.flowName} Workflow Not Verified`,\n `${textValues.flowName} Error Page Loaded`,\n textValues.location\n );\n });\n }, [\n props.token,\n props.partition,\n props.apiBaseUrl,\n t,\n onLinkExpired,\n textValues.flowName,\n textValues.result,\n textValues.location,\n userNotAvailable\n ]);\n\n const onAccountRecoveryPasswordChange = password => {\n // DISALLOWED_STRINGS_FOR_PASSWORDS_FF is set, use the newer code.\n return fetch(\n new URL(\"/account/recovery/reset-password\", props.apiBaseUrl).toString(),\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/vnd.coxauto.v1+json\",\n Accept: \"application/vnd.coxauto.v1+json\"\n },\n body: JSON.stringify({\n workflowId,\n password,\n partition: props.partition,\n reasonType: props.reasonType\n })\n }\n )\n .then(apiResponse =>\n apiResponse.json().then(json => {\n json.apiResponseOk = apiResponse.ok;\n json.apiResponseStatus = apiResponse.status;\n return json;\n })\n )\n .then(json => {\n if (json.apiResponseOk) {\n // happy path\n setWorkflowId(json.workflowId);\n setErrorMsg(null);\n toggleErrorLink(false);\n return json;\n } else {\n // failure path\n throw json;\n }\n })\n .catch(failedJson => {\n if (\n failedJson.apiResponseStatus &&\n (failedJson.apiResponseStatus === 400 ||\n failedJson.apiResponseStatus === 422)\n ) {\n // Display the password error messages.\n setPasswordChangeBackendErrors(\n mapToTranslatedMessages(failedJson.passwordErrorCodes)\n );\n } else if (failedJson.apiResponseStatus === 404) {\n onLinkExpired();\n } else {\n setErrorMsg(t(\"error.generic\"));\n toggleErrorLink(false);\n }\n return false;\n });\n };\n\n const submitPassword = () => {\n window.location.assign(launcherUrl.href);\n };\n\n if (loading) {\n return (\n
\n
\n
\n
\n \n body={\n
\n \n
\n }\n />\n
\n
\n
\n );\n } else {\n return (\n
\n
\n
\n {errorMsg && (\n setErrorMsg(null)}\n >\n {errorMsg}\n {errorLink && props.reasonType === \"recovery\" && (\n \n \n .\n \n )}\n \n )}\n {showForm && (\n
\n \n body={\n
\n
\n \n
\n
\n }\n />\n
\n )}\n
\n
\n );\n }\n};\n\nAccountRecoveryEmailPasswordResetForm.propTypes = {\n apiBaseUrl: PropTypes.string.isRequired,\n partition: PropTypes.string.isRequired,\n reasonType: PropTypes.string,\n token: PropTypes.string.isRequired\n};\n\nexport default AccountRecoveryEmailPasswordResetForm;\n","export const isThirdPartyCookieEnabled = (username, clientId) => {\n const url = \"https://v506vqbo50.execute-api.us-east-2.amazonaws.com\";\n const requestOptions = {\n method: \"GET\",\n mode: \"cors\",\n credentials: \"include\"\n };\n\n return fetch(`${url}/setup`, requestOptions)\n .then(response => {\n if (response.status === 200) {\n const params = new URLSearchParams();\n if (username) {\n params.append(\"username\", username);\n }\n if (clientId) {\n params.append(\"clientid\", clientId);\n }\n let testUrl = `${url}/test`;\n if (params.has(\"username\") || params.has(\"clientid\")) {\n testUrl = `${testUrl}?${params.toString()}`;\n }\n return fetch(`${testUrl}`, requestOptions);\n } else {\n throw new Error();\n }\n })\n .then(res => {\n if (res.status === 200) {\n return true;\n } else if (res.status === 400) {\n return false;\n } else {\n return undefined;\n }\n })\n .catch(() => undefined);\n};\n"],"sourceRoot":""}