{"version":3,"file":"static/chunks/776-0780b72e9a7ab362.js","mappings":"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","sources":["webpack://_N_E/./server/allowed-frame-ancestors.ts","webpack://_N_E/./components/icons/eye-icon.tsx","webpack://_N_E/./hooks/use-guest-two-factor-login-mutation.ts","webpack://_N_E/./components/login-form/login-form.tsx","webpack://_N_E/./utils/guest-login.ts"],"sourcesContent":["export const frameAncestors = [\n '*.adobemsbasic.com',\n '*.hilton.com:*',\n '*.hilton.com.cn',\n '*.hilton.com.cn:*',\n '*.developersync.com',\n '*.devpvtlab.com',\n '*.hiltonapi.com',\n '*.hiltonhonors.com',\n '*.maritzstage.com',\n '*.mastercard.com',\n '*.nonprod-tmaws.io',\n '*.onelink-translations.com',\n '*.points.com',\n '*.pointworthy.com',\n '*.pub-tmaws.io',\n '*.prod-tmaws.io',\n '*.surfgold.net',\n '*.ticketmaster.net',\n '*.ticketmaster.com',\n '*.ticketmaster.net:*',\n '*.livenation.com',\n '*.ticketmaster.ca',\n '*.ticketmaster.co.uk',\n];\n","export const EyeIcon = (props?: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n width=\"24\"\n aria-hidden=\"true\"\n focusable={false}\n onClick={(e) => e.preventDefault()}\n {...props}\n >\n <path d=\"m0 0v24h24v-24z\" fill=\"none\" />\n <path d=\"m20.871 11.682c-2.194-2.657-5.428-4.182-8.871-4.182s-6.676 1.524-8.871 4.182c-.152.185-.152.452 0 .637 2.195 2.657 5.428 4.182 8.871 4.182s6.677-1.524 8.871-4.182c.152-.185.152-.452 0-.637zm-5.371.318c0 1.93-1.57 3.5-3.5 3.5s-3.5-1.57-3.5-3.5 1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5zm-11.326 0c1.219-1.363 2.753-2.363 4.445-2.938-.688.791-1.119 1.81-1.119 2.938s.431 2.147 1.119 2.938c-1.693-.575-3.226-1.575-4.445-2.938zm11.207 2.938c.688-.79 1.119-1.81 1.119-2.938s-.431-2.147-1.119-2.938c1.693.575 3.226 1.574 4.445 2.938-1.219 1.363-2.753 2.363-4.445 2.938z\" />\n </svg>\n);\nexport const EyeSlashIcon = (props?: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n width=\"24\"\n aria-hidden=\"true\"\n focusable={false}\n onClick={(e) => e.preventDefault()}\n {...props}\n >\n <path d=\"m0 0v24h24v-24z\" fill=\"none\" />\n <path d=\"m20.871 11.682c-2.194-2.657-5.428-4.182-8.871-4.182-.373 0-.743.026-1.11.062l.712.979c.132-.015.262-.04.398-.04 1.93 0 3.5 1.57 3.5 3.5 0 .52-.121 1.009-.325 1.453l.645.887c.426-.682.68-1.478.68-2.34 0-1.128-.431-2.147-1.119-2.938 1.693.575 3.226 1.574 4.445 2.938-1.054 1.178-2.35 2.065-3.773 2.661l.612.842c1.607-.714 3.052-1.787 4.206-3.184.152-.185.152-.452 0-.637z\" />\n <path d=\"m8.404 6.206c-.162-.225-.475-.271-.698-.11-.224.162-.273.475-.11.698l.913 1.255c-2.08.661-3.951 1.903-5.38 3.633-.152.185-.152.452 0 .637 2.195 2.657 5.428 4.182 8.871 4.182.835 0 1.655-.1 2.453-.278l1.143 1.572c.098.135.25.206.404.206.103 0 .205-.031.294-.096.224-.162.272-.475.11-.698zm-4.23 5.794c1.219-1.363 2.753-2.363 4.445-2.938-.688.791-1.119 1.81-1.119 2.938s.431 2.147 1.119 2.938c-1.693-.575-3.226-1.575-4.445-2.938zm7.826 3.5c-1.93 0-3.5-1.57-3.5-3.5 0-.981.413-1.86 1.068-2.494l4.051 5.57c-.485.262-1.03.423-1.62.423z\" />\n </svg>\n);\n","import { useMutation } from '@tanstack/react-query';\nimport type { GuestLoginResponse } from '../typings/app/guest-login';\nimport { getTelemetry } from '../utils/guest-login';\nimport { logError } from '@dx-ui/framework-logger';\nimport { generateError } from '@dx-ui/utilities-generate-error';\n\ntype TChallenge = {\n authorizationHeader: string;\n bodyData: { totp: string };\n sourceId: string;\n};\n\nexport const useGuestTwoFactorLoginMutation = () => {\n return useMutation<GuestLoginResponse, Error, TChallenge>({\n mutationKey: ['/en/auth2/api/guest/login/sourceId/verify'],\n mutationFn: async ({ authorizationHeader, bodyData, sourceId }) => {\n const telemetry = getTelemetry();\n\n const options: RequestInit = {\n method: 'post',\n credentials: 'same-origin',\n headers: {\n 'content-type': 'application/json',\n Authorization: authorizationHeader,\n ...(telemetry ? { 'Akamai-BM-Telemetry': telemetry } : {}),\n },\n body: JSON.stringify(bodyData),\n };\n const response = await fetch(`/en/auth2/api/guest/login/${sourceId}/verify`, options);\n if (!response.ok) {\n const error = generateError(`Submitting with OTP failed: ${response.statusText}`);\n throw error;\n }\n return await response.json();\n },\n onError: (error) => {\n logError('LOGIN_FORM_OTP', error);\n },\n retry: false,\n });\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport * as React from 'react';\nimport ReCAPTCHA from 'react-google-recaptcha';\nimport { Link } from '@dx-ui/osc-link';\nimport cx from 'classnames';\nimport isEmpty from 'lodash/isEmpty';\nimport pick from 'lodash/pick';\nimport { useRouter } from 'next/router';\n\nimport ErrorHeader from '../../components/error-header/error-header';\nimport { useTranslation } from 'next-i18next';\nimport {\n type GuestLoginResponse,\n type GuestLoginState,\n type IGuestFormValues,\n} from '../../typings/app/guest-login';\nimport { LoginStatus, type CodeState, type LoginError } from '../../typings/app/login';\nimport {\n FailedLogin,\n FailedRecaptcha,\n LoginHandler,\n UnexpectedError,\n UnknownError,\n} from '../../utils/constants';\nimport { OHW_BASE_URL, RECAPTCHA_PUBLIC_KEY, RECAPTCHA_PUBLIC_KEY_CN } from '../../utils/env';\nimport { getGuestLoginUrl, getTelemetry } from '../../utils/guest-login';\nimport { frameAncestors } from '../../server/allowed-frame-ancestors';\nimport type { TCodeResponse, PageState } from '../../typings/app/two-factor';\nimport { status as statusVal } from '../../typings/app/two-factor';\nimport CodeForm from '../code-form/code-form';\nimport HelpBlock from '../help-block/help-block';\nimport { useMetrics } from '../../utils/metrics';\nimport type { DigitalData } from '@dx-ui/config-metrics';\nimport Icon from '@dx-ui/osc-icon';\nimport { useRect } from '@dx-ui/utilities-use-rect';\nimport { useEventListener } from 'usehooks-ts';\nimport { logError } from '@dx-ui/framework-logger';\nimport { EyeIcon, EyeSlashIcon } from '../../components/icons/eye-icon';\nimport { sendConductricsReward } from '../../hooks/use-conductrics';\nimport { Goals } from '../../typings/app/goals';\nimport { useAuth } from '@dx-ui/framework-auth-provider';\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\nimport { useGuestTwoFactorLoginMutation } from '../../hooks/use-guest-two-factor-login-mutation';\n\nconst allowedFrameAncestors = frameAncestors.map((raw) => raw.replace(/\\*|:/g, ''));\n\nconst passwordToggleBlacklistPaths = [\n '/join/confirmation',\n '/business/login',\n '/go-hilton',\n '/hilton-honors/login',\n '/hgv-max',\n '/groups.hilton.com',\n];\n\ntype GuestLoginConfigOptions = {\n digitalData?: string;\n username?: string;\n showCreatePassword?: boolean;\n joinLink?: Omit<Link, 'icon'>;\n forgetInfoLink?: Omit<Link, 'icon'>;\n secureInfoLink?: Omit<Link, 'icon'>;\n};\n\ntype GuestLoginForm = {\n showRecaptcha: boolean;\n shouldSendTelemetry: boolean;\n sourceId: string;\n handleLogin?: (authResponse: GuestLoginResponse, formFieldsMissing?: string) => void;\n loginFormConfig?: GuestLoginConfigOptions;\n prefilledUsername?: string;\n buttonClassName?: string;\n};\n\nfunction isAllowedDomain(origin: string) {\n // strips off port number, if any, then checks\n return allowedFrameAncestors.some((frameAncestor) =>\n origin.replace(/:\\d+/, '').endsWith(frameAncestor)\n );\n}\n\nfunction checkHiltonLink(url: string) {\n const urlObject = new URL(url);\n if (urlObject.host.includes('.hilton.com')) {\n return url;\n }\n return '';\n}\n\nconst checkPasswordToggleVisible = (currentPath: string | undefined) => {\n return !passwordToggleBlacklistPaths.some((blacklistedPath) =>\n currentPath?.includes(blacklistedPath)\n );\n};\n\nconst LoginForm: React.FC<GuestLoginForm> = ({\n showRecaptcha,\n shouldSendTelemetry,\n sourceId,\n handleLogin,\n loginFormConfig,\n prefilledUsername,\n buttonClassName,\n}) => {\n const { t } = useTranslation(['login', 'error']);\n const router = useRouter();\n const language = router.locale || 'en';\n const recaptchaSiteKey = language?.includes('zh_')\n ? RECAPTCHA_PUBLIC_KEY_CN || ''\n : RECAPTCHA_PUBLIC_KEY;\n\n const initialGuestLoginState = React.useMemo(\n () => ({\n password: '',\n remember: false,\n username: prefilledUsername || '',\n }),\n [prefilledUsername]\n );\n\n const [loading, setLoading] = React.useState(false);\n const [loginError, setLoginError] = React.useState<LoginError | null>(null);\n const [loginForm, setLoginForm] = React.useState<GuestLoginState>(initialGuestLoginState);\n const [pageState, setPageStep] = React.useState<PageState>('login');\n const [codeState, setCodeState] = React.useState<CodeState>({\n challengeToken: null,\n deliveryMethod: null,\n validated: null,\n });\n const [parentDigitalData, setParentDigitalData] = React.useState<DigitalData | null>(null);\n const [destinationURL, setDestinationURL] = useState<string>();\n const passwordToggleVisible = checkPasswordToggleVisible(destinationURL || router.pathname);\n\n const metrics = useMetrics();\n\n const [loginData, setLoginData] = React.useState<IGuestFormValues | null>(null);\n\n const recaptchaRef = React.useRef<ReCAPTCHA & { captcha: HTMLDivElement }>(null);\n const usernameRef = React.useRef<HTMLInputElement>(null);\n const formWrapperRef = React.useRef<HTMLDivElement>(null);\n const formRef = React.useRef<HTMLFormElement>(null);\n const { authClient } = useAuth();\n const twoFactorMutation = useGuestTwoFactorLoginMutation();\n const isLoading = loading || twoFactorMutation.isPending;\n\n const height = useRect({ ref: formWrapperRef })?.height;\n const [configs, setConfigs] = React.useState<GuestLoginConfigOptions>(\n loginFormConfig || {\n showCreatePassword: false,\n forgetInfoLink: {\n url: `${OHW_BASE_URL}${language}/hilton-honors/login/forgot-information/`,\n },\n secureInfoLink: {\n url: `${OHW_BASE_URL}${language}/p/global-privacy-statement/`,\n },\n joinLink: { url: `${OHW_BASE_URL}${language}/hilton-honors/join/` },\n }\n );\n\n const { forgetInfoLink, secureInfoLink, joinLink, showCreatePassword } = configs;\n\n function sendMessage(message: GuestLoginResponse) {\n window.parent.postMessage(message, '*');\n }\n\n useEffect(() => {\n window.parent.postMessage({ type: 'digitalData' }, '*');\n }, []);\n\n useEffect(() => {\n if (parentDigitalData) {\n setDestinationURL(parentDigitalData.page?.pageInfo?.destinationURL);\n metrics.setLoginModalData([parentDigitalData]);\n }\n }, [metrics, parentDigitalData]);\n\n const setErrorMetrics = useCallback(\n ({ error }: GuestLoginResponse, formFieldsMissing?: string) => {\n if (error) {\n const alertHeader = t(`error:${error.status}.header`);\n const alertBody = t(`error:${error.status}.body`);\n const alertMessage = alertHeader ? `${alertHeader} ${alertBody}` : alertBody;\n metrics.trackLoginError([\n {\n type: error?.status,\n source: 'global_click',\n formFields: formFieldsMissing,\n alertMessage,\n },\n ]);\n return;\n }\n },\n [metrics, t]\n );\n\n const handleError = useCallback(\n (error: LoginError | null, handler?: typeof LoginHandler, formFieldsMissing?: string) => {\n sendConductricsReward(Goals.LoginError);\n setLoginError(error);\n if (isBrowser && error) {\n setErrorMetrics({ error }, formFieldsMissing);\n setLoginForm(initialGuestLoginState);\n showRecaptcha && recaptchaRef?.current?.reset();\n if (error.status === 'invalid_entry') {\n usernameRef?.current?.focus?.();\n }\n sendMessage({ handler: handler || LoginHandler, error });\n }\n },\n [initialGuestLoginState, setErrorMetrics, showRecaptcha]\n );\n\n const doSubmit = useCallback(\n async (formValues: IGuestFormValues): Promise<void> => {\n const telemetry = getTelemetry();\n const { username, password, remember, recaptcha } = formValues;\n setLoading(true);\n const authorizationHeader = (await authClient?.getAuthorizationHeader()) || '';\n\n const postOptions: RequestInit = {\n method: 'POST',\n credentials: 'same-origin',\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n Accept: 'application/json; charset=utf-8',\n ...(shouldSendTelemetry && telemetry ? { 'Akamai-BM-Telemetry': telemetry } : {}),\n Authorization: authorizationHeader,\n },\n };\n\n try {\n const props = {\n username,\n password,\n remember,\n recaptcha,\n showRecaptcha,\n };\n const url = getGuestLoginUrl(sourceId);\n\n const response = await fetch(url, {\n ...postOptions,\n body: JSON.stringify(props),\n });\n\n // check for akamai bmp\n if (response.status === 428) {\n sendMessage({ status: 'ready', height: 700 });\n return setLoading(false);\n }\n\n const {\n data,\n error,\n handler,\n status,\n deliveryMethod,\n validated,\n challengeToken,\n }: GuestLoginResponse = await response.json();\n\n const safeError = error && Object.values(LoginStatus).includes(error.status) ? error : null;\n\n setLoading(false);\n\n switch (status) {\n case statusVal.CONTINUE:\n metrics.trackLoginClick(['signin_success', data?.userInfo?.hhonorsNumber]);\n sendConductricsReward(Goals.SignInSuccess);\n if (handleLogin) {\n handleLogin({ handler, data, error });\n }\n return sendMessage({ handler, data });\n case statusVal.CHALLENGE:\n if (challengeToken) {\n setLoginData(formValues);\n setCodeState({\n deliveryMethod: deliveryMethod || null,\n validated: validated || null,\n challengeToken,\n });\n setPageStep('code');\n break;\n } else return handleError(UnknownError, handler);\n case statusVal.STUCK_ON_LOGIN:\n metrics.trackLoginClick(['pagestoperror']);\n sendConductricsReward(Goals.LoginError);\n setPageStep('stopGap');\n break;\n default:\n setLoginError(safeError || UnexpectedError);\n return handleError(safeError || UnexpectedError, handler);\n }\n } catch {\n setLoading(false);\n setLoginError(UnknownError);\n logError('LOGIN_FORM', new Error(UnknownError.status));\n sendConductricsReward(Goals.LoginError);\n return handleError(UnknownError);\n }\n },\n [authClient, handleError, handleLogin, metrics, shouldSendTelemetry, showRecaptcha, sourceId]\n );\n\n const handleConfigMessage = React.useCallback(\n (event: MessageEvent<GuestLoginConfigOptions>) => {\n if (!isAllowedDomain(event.origin)) {\n return;\n }\n const { data } = event;\n\n if (data.digitalData) {\n const digitalDateObj: DigitalData = JSON.parse(data.digitalData);\n setParentDigitalData(digitalDateObj);\n }\n\n const options: Partial<GuestLoginConfigOptions> = pick(data, Object.keys(configs));\n\n if (data.username) {\n setLoginForm((s) => ({ ...s, username: data.username }));\n }\n\n if (!isEmpty(options)) {\n setConfigs({ ...options });\n }\n },\n [configs]\n );\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n if (isBrowser) {\n sendMessage({ status: 'close' });\n }\n }\n };\n\n useEventListener('keydown', handleKeyDown);\n useEventListener('message', handleConfigMessage);\n\n useEffect(() => {\n const captchaHeight = recaptchaRef?.current?.captcha?.clientHeight;\n if (showRecaptcha) {\n if (height && captchaHeight) {\n setLoading(false);\n sendMessage({ status: 'ready', height });\n }\n } else if (height) {\n setLoading(false);\n sendMessage({ status: 'ready', height });\n }\n }, [height, showRecaptcha]);\n\n const handleInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const { target } = event;\n const value = target.type === 'checkbox' ? target.checked : target.value;\n const { name } = target;\n setLoginForm({ ...loginForm, [name]: value });\n },\n [setLoginForm, loginForm]\n );\n\n const handleSubmit = useCallback(\n async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const { username, password, remember = false } = loginForm;\n const recaptcha = recaptchaRef?.current?.getValue() || null;\n if (!username || !password) {\n const formFieldsMissing =\n !username && !password ? 'username|password' : !username ? 'username' : 'password';\n return handleError(FailedLogin, undefined, formFieldsMissing);\n }\n if (showRecaptcha && !recaptcha) {\n return handleError(FailedRecaptcha);\n }\n metrics.trackLoginClick(['signin_init']);\n await doSubmit({ username, password, remember, recaptcha });\n },\n [doSubmit, handleError, loginForm, metrics, showRecaptcha]\n );\n\n const callTwoFactorApi = async (totp: string): Promise<TCodeResponse> => {\n try {\n const authorizationHeader = `Bearer ${codeState.challengeToken}`;\n\n if (loginError) setLoginError(null);\n\n const { status, challengeToken } = await twoFactorMutation.mutateAsync(\n {\n authorizationHeader,\n bodyData: { ...loginData, totp },\n sourceId,\n },\n {\n onSuccess: ({\n status,\n handler,\n data,\n deliveryMethod,\n validated,\n challengeToken,\n error,\n }) => {\n switch (status) {\n case statusVal.CONTINUE:\n sendConductricsReward(Goals.SignInSuccess);\n if (handleLogin) {\n handleLogin({ handler, data });\n }\n metrics.trackLoginClick(['signin_success', data?.userInfo?.hhonorsNumber]);\n sendMessage({ handler, data });\n break;\n case statusVal.CHALLENGE:\n if (challengeToken) {\n setCodeState({\n deliveryMethod: deliveryMethod || null,\n validated: validated || null,\n challengeToken,\n });\n }\n break;\n case statusVal.STUCK_ON_LOGIN:\n sendConductricsReward(Goals.LoginError);\n metrics.trackLoginClick(['pagestoperror']);\n setPageStep('stopGap');\n break;\n default:\n sendConductricsReward(Goals.LoginError);\n if (pageState === 'code') setLoginError(UnexpectedError);\n setErrorMetrics({ error });\n break;\n }\n },\n }\n );\n return { challengeToken, status };\n } catch {\n sendConductricsReward(Goals.LoginError);\n if (pageState === 'code') setLoginError(UnexpectedError);\n return { status: statusVal.UNEXPECTED_ERROR };\n }\n };\n\n const usernameError = Boolean(!loginForm?.username && loginError === FailedLogin);\n const passwordError = Boolean(!loginForm?.password && loginError === FailedLogin);\n const [passwordFieldType, setPasswordFieldType] = useState<'password' | 'text'>('password');\n\n const togglePasswordVisibility = () => {\n if (passwordFieldType === 'password') {\n sendConductricsReward(Goals.ShowPassword);\n setPasswordFieldType('text');\n } else {\n sendConductricsReward(Goals.HidePassword);\n setPasswordFieldType('password');\n }\n };\n\n return (\n <div ref={formWrapperRef} className=\"flex flex-col space-y-4 px-1\">\n {pageState === 'login' && (\n <form\n method=\"post\"\n ref={formRef}\n className=\"flex flex-col space-y-4 pb-1\"\n onSubmit={handleSubmit}\n >\n <ErrorHeader error={loginError} />\n <p>{t('fieldsRequired')}</p>\n <label\n className={cx('label', {\n 'text-danger': usernameError,\n })}\n data-e2e=\"usernameLabel\"\n htmlFor=\"username\"\n >\n <span>{t('username')}</span>\n <input\n className={cx('form-input', {\n 'form-error': usernameError,\n })}\n type=\"text\"\n id=\"username\"\n name=\"username\"\n autoComplete=\"username\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck={false}\n aria-label={t('usernameLabel')}\n aria-invalid={usernameError}\n aria-required=\"true\"\n data-testid=\"userNameTextField\"\n disabled={isLoading}\n ref={usernameRef}\n onChange={handleInputChange}\n value={loginForm.username}\n />\n </label>\n <label\n className={cx('label flex flex-col-reverse', {\n 'text-danger': passwordError,\n })}\n data-e2e=\"pwdLabel\"\n htmlFor=\"password\"\n >\n <input\n className={cx('form-input', {\n 'form-error': passwordError,\n })}\n id=\"password\"\n name=\"password\"\n type={passwordFieldType}\n autoComplete=\"current-password\"\n aria-invalid={passwordError}\n onChange={handleInputChange}\n data-e2e=\"passwordTextField\"\n disabled={isLoading}\n aria-required=\"true\"\n value={loginForm.password}\n aria-label={t('password')}\n />\n <div className=\"mb-1 flex w-full justify-between\">\n <span>{t('password')}</span>\n {passwordToggleVisible ? (\n <>\n <button\n type=\"button\"\n onClick={togglePasswordVisibility}\n aria-controls=\"password\"\n aria-label={\n passwordFieldType === 'password'\n ? t('showPasswordAriaLabel')\n : t('hidePasswordAriaLabel')\n }\n >\n <div className=\"flex justify-between\">\n {passwordFieldType === 'password' ? (\n <EyeIcon className=\"size-6 fill-primary\" />\n ) : (\n <EyeSlashIcon className=\"size-6 fill-primary\" />\n )}\n <span className=\"btn-primary-link -mt-0.5 min-w-10\">\n {passwordFieldType === 'password' ? t('show') : t('hide')}\n </span>\n </div>\n </button>\n <output className=\"sr-only\">\n {passwordFieldType === 'password'\n ? t('passwordHiddenAria')\n : t('passwordVisibleAria')}\n </output>\n </>\n ) : null}\n </div>\n </label>\n\n {showRecaptcha && (\n <section className={cx({ cursor: loginError })}>\n <ReCAPTCHA\n ref={recaptchaRef}\n sitekey={recaptchaSiteKey}\n size=\"normal\"\n hl={language}\n />\n </section>\n )}\n\n {!!forgetInfoLink && checkHiltonLink(forgetInfoLink.url) && (\n <div className=\"flex items-center pt-2\">\n <div className=\"ml-2\">\n <Link\n {...forgetInfoLink}\n data-e2e=\"forgotInfoLink\"\n target=\"_parent\"\n url={forgetInfoLink.url}\n onClick={(e) => {\n forgetInfoLink?.onClick?.(e);\n sendConductricsReward(Goals.ForgotInfoLinkClick);\n }}\n >\n {t('forgotInfo')}\n </Link>\n </div>\n </div>\n )}\n\n <button\n className={cx(\n 'btn btn-lg btn-primary w-full md:btn-base lg:btn-lg md:w-auto md:self-start',\n buttonClassName\n )}\n disabled={isLoading}\n type=\"submit\"\n data-e2e=\"signInButton\"\n >\n {t('signIn')}\n </button>\n {showCreatePassword && forgetInfoLink && checkHiltonLink(forgetInfoLink.url) && (\n <div className=\"flex items-center pt-2\">\n <span>{t('firstTime')}</span>\n \n <Link\n {...forgetInfoLink}\n url={checkHiltonLink(forgetInfoLink.url)}\n data-e2e=\"createPasswordLink\"\n target=\"_parent\"\n onClick={(e) => {\n forgetInfoLink?.onClick?.(e);\n sendConductricsReward(Goals.ForgotInfoLinkClick);\n }}\n >\n {t('createPassword')}\n </Link>\n </div>\n )}\n {!joinLink && !!secureInfoLink && checkHiltonLink(secureInfoLink.url) && (\n <div className=\"flex items-center gap-1 pt-2\">\n <Link\n {...secureInfoLink}\n data-e2e=\"yourInfoLink\"\n target=\"_parent\"\n url={secureInfoLink.url}\n >\n {t('secureInformation')}\n </Link>\n <Icon name=\"lock\" className=\"text-text\" />\n </div>\n )}\n </form>\n )}\n {pageState === 'login' &&\n !!joinLink &&\n !!secureInfoLink &&\n checkHiltonLink(joinLink.url) &&\n checkHiltonLink(secureInfoLink.url) && (\n <div className=\"flex-wrap justify-center bg-bg-alt pt-2\">\n <div className=\"text-center\">{t('joinMessage')}</div>\n <div className=\"my-2 text-center\">\n <Link\n {...joinLink}\n className=\"btn btn-lg btn-primary-outline w-auto md:btn-base lg:btn-lg md:self-start\"\n data-e2e=\"signInButton\"\n target=\"_parent\"\n url={joinLink.url}\n >\n {t('joinNow')}\n </Link>\n </div>\n <div className=\"my-2 flex items-center justify-center gap-1 text-center\">\n <Link\n {...secureInfoLink}\n data-e2e=\"yourInfoLink\"\n target=\"_parent\"\n url={secureInfoLink.url}\n >\n {t('secureInformation')}\n </Link>\n <Icon name=\"lock\" className=\"text-text\" />\n </div>\n </div>\n )}\n {pageState === 'code' && (\n <CodeForm isLoading={isLoading} onSubmit={callTwoFactorApi} {...codeState} />\n )}\n {pageState === 'stopGap' && <HelpBlock />}\n </div>\n );\n};\n\nexport default LoginForm;\n","import type { GetServerSidePropsContext } from 'next';\nimport { ALT_AUTH_SOURCE_ID, APP_ID_VAR_PREFIX, DEFAULT_AUTH_SOURCE_ID } from './constants';\n\nexport function getGuestLoginUrl(sourceId: string) {\n return `/en/auth2/api/guest/login/${sourceId}/`;\n}\n\nexport function getPartnerLoginCodeGenUrl() {\n return `/en/auth2/api/partner/login/codegen`;\n}\n\nexport function getSourceId(context: GetServerSidePropsContext) {\n const sourceId = context.query.sourceId;\n if (sourceId) {\n return Array.isArray(sourceId) ? sourceId[0] || DEFAULT_AUTH_SOURCE_ID : sourceId;\n }\n return DEFAULT_AUTH_SOURCE_ID;\n}\n\nexport function getAppId(sourceId: string) {\n if (!sourceId) {\n return null;\n }\n if (sourceId.toUpperCase() === ALT_AUTH_SOURCE_ID) {\n return process.env[`${APP_ID_VAR_PREFIX}_${DEFAULT_AUTH_SOURCE_ID}`];\n }\n return process.env[`${APP_ID_VAR_PREFIX}_${sourceId.toUpperCase()}`];\n}\n\n/**\n * Relies on global akamai javascript to capture telemetry data.\n */\nexport function getTelemetry() {\n try {\n return window.bmak?.get_telemetry?.();\n } catch {\n return null;\n }\n}\n"],"names":["EyeIcon","props","svg","viewBox","xmlns","height","width","aria-hidden","focusable","onClick","e","preventDefault","path","d","fill","useGuestTwoFactorLoginMutation","useMutation","mutationKey","mutationFn","authorizationHeader","bodyData","sourceId","telemetry","getTelemetry","options","method","credentials","headers","Authorization","body","JSON","stringify","response","fetch","ok","generateError","statusText","json","onError","logError","error","retry","allowedFrameAncestors","frameAncestors","map","raw","replace","passwordToggleBlacklistPaths","checkHiltonLink","url","URL","host","includes","checkPasswordToggleVisible","some","currentPath","blacklistedPath","LoginForm","showRecaptcha","shouldSendTelemetry","handleLogin","loginFormConfig","prefilledUsername","buttonClassName","t","useTranslation","router","useRouter","language","locale","recaptchaSiteKey","RECAPTCHA_PUBLIC_KEY_CN","RECAPTCHA_PUBLIC_KEY","initialGuestLoginState","React","password","remember","username","loading","setLoading","loginError","setLoginError","loginForm","setLoginForm","pageState","setPageStep","codeState","setCodeState","challengeToken","deliveryMethod","validated","parentDigitalData","setParentDigitalData","destinationURL","setDestinationURL","useState","passwordToggleVisible","pathname","metrics","useMetrics","loginData","setLoginData","recaptchaRef","usernameRef","formWrapperRef","formRef","authClient","useAuth","twoFactorMutation","isLoading","isPending","useRect","ref","configs","setConfigs","showCreatePassword","forgetInfoLink","OHW_BASE_URL","secureInfoLink","joinLink","sendMessage","message","window","parent","postMessage","useEffect","type","page","pageInfo","setLoginModalData","setErrorMetrics","useCallback","formFieldsMissing","alertHeader","status","alertBody","alertMessage","trackLoginError","source","formFields","handleError","handler","sendConductricsReward","Goals","LoginError","isBrowser","current","reset","focus","LoginHandler","doSubmit","formValues","recaptcha","getAuthorizationHeader","postOptions","Accept","getGuestLoginUrl","data","safeError","Object","values","LoginStatus","statusVal","CONTINUE","trackLoginClick","userInfo","hhonorsNumber","SignInSuccess","CHALLENGE","UnknownError","STUCK_ON_LOGIN","UnexpectedError","handleConfigMessage","origin","isAllowedDomain","endsWith","frameAncestor","event","digitalData","parse","digitalDateObj","pick","keys","s","isEmpty","useEventListener","handleKeyDown","key","stopPropagation","captchaHeight","captcha","clientHeight","handleInputChange","target","value","checked","name","handleSubmit","getValue","FailedLogin","undefined","FailedRecaptcha","callTwoFactorApi","totp","mutateAsync","onSuccess","UNEXPECTED_ERROR","usernameError","Boolean","passwordError","passwordFieldType","setPasswordFieldType","div","className","form","onSubmit","ErrorHeader","p","label","cx","data-e2e","htmlFor","span","input","id","autoComplete","autoCapitalize","autoCorrect","spellCheck","aria-label","aria-invalid","aria-required","data-testid","disabled","onChange","button","togglePasswordVisibility","ShowPassword","HidePassword","aria-controls","EyeSlashIcon","output","section","cursor","ReCAPTCHA","sitekey","size","hl","Link","ForgotInfoLinkClick","Icon","CodeForm","HelpBlock","getPartnerLoginCodeGenUrl","bmak","get_telemetry"],"sourceRoot":"","ignoreList":[]}