{"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              &nbsp;\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":[]}