{
  "version": 3,
  "sources": ["../../static_src/js/recaptcha_v3_forms.js"],
  "sourcesContent": ["const RECAPTCHA_CONFIG = window.CONVERSSO_RECAPTCHA || { enabled: false, siteKey: \"\" };\nconst RECAPTCHA_EXECUTION_TIMEOUT_MS = 12000;\n\nconst RECAPTCHA_ACTION_BY_FORM_SOURCE = {\n    landing_demo: \"landing_submit\",\n    website_request_demo: \"request_demo_submit\",\n    website_contact_sales: \"contact_sales_submit\",\n};\n\nfunction isRecaptchaEnabled() {\n    return Boolean(RECAPTCHA_CONFIG.enabled && RECAPTCHA_CONFIG.siteKey);\n}\n\nfunction getRecaptchaMessages(form) {\n    const data = form ? form.dataset : {};\n    return {\n        processing: data.recaptchaMsgProcessing || \"\",\n        unavailable: data.recaptchaMsgUnavailable || \"\",\n        invalidKey: data.recaptchaMsgInvalidKey || \"\",\n        timeout: data.recaptchaMsgTimeout || \"\",\n        genericError: data.recaptchaMsgGenericError || \"\",\n    };\n}\n\nfunction getExpectedAction(form) {\n    const sourceInput = form.querySelector(\"input[name='form_source']\");\n    const source = (sourceInput ? sourceInput.value : \"\").trim().toLowerCase();\n    return RECAPTCHA_ACTION_BY_FORM_SOURCE[source] || \"landing_submit\";\n}\n\nfunction ensureRecaptchaTokenInput(form) {\n    let tokenInput = form.querySelector(\"input[name='g-recaptcha-response']\");\n    if (!tokenInput) {\n        tokenInput = document.createElement(\"input\");\n        tokenInput.type = \"hidden\";\n        tokenInput.name = \"g-recaptcha-response\";\n        form.appendChild(tokenInput);\n    }\n\n    return tokenInput;\n}\n\nfunction getInlineErrorElement(form) {\n    let messageElement = form.querySelector(\"[data-recaptcha-inline-status='true']\");\n    if (!messageElement) {\n        messageElement = document.createElement(\"p\");\n        messageElement.dataset.recaptchaInlineStatus = \"true\";\n\n        if (form.classList.contains(\"hero__form\")) {\n            messageElement.className = \"hero__form-status hero__form-status--error\";\n            messageElement.dataset.status = \"captcha_invalid\";\n        } else if (form.classList.contains(\"website-request-demo__form\")) {\n            messageElement.className = \"website-request-demo__status website-request-demo__status--error\";\n        } else {\n            messageElement.className = \"website-contact-sales__status website-contact-sales__status--error\";\n        }\n\n        const submitButton = form.querySelector(\"button[type='submit'], input[type='submit']\");\n        if (submitButton && submitButton.parentElement === form) {\n            form.insertBefore(messageElement, submitButton);\n        } else {\n            form.appendChild(messageElement);\n        }\n    }\n\n    return messageElement;\n}\n\nfunction getSubmitButton(form) {\n    return form.querySelector(\"button[type='submit'], input[type='submit']\");\n}\n\nfunction setSubmitState(form, isProcessing, messages) {\n    const submitButton = getSubmitButton(form);\n    if (!submitButton) return;\n\n    if (isProcessing) {\n        submitButton.disabled = true;\n        submitButton.dataset.recaptchaOriginalLabel = submitButton.tagName === \"INPUT\" ? submitButton.value : submitButton.textContent || \"\";\n\n        if (submitButton.tagName === \"INPUT\") {\n            submitButton.value = messages.processing;\n        } else {\n            submitButton.textContent = messages.processing;\n        }\n        return;\n    }\n\n    submitButton.disabled = false;\n    const original = submitButton.dataset.recaptchaOriginalLabel;\n    if (typeof original === \"string\" && original.length > 0) {\n        if (submitButton.tagName === \"INPUT\") {\n            submitButton.value = original;\n        } else {\n            submitButton.textContent = original;\n        }\n    }\n}\n\nfunction clearInlineError(form) {\n    const messageElement = form.querySelector(\"[data-recaptcha-inline-status='true']\");\n    if (messageElement) {\n        messageElement.remove();\n    }\n}\n\nfunction showInlineError(form, message) {\n    const messageElement = getInlineErrorElement(form);\n    messageElement.textContent = message || \"\";\n}\n\nfunction resolveErrorMessage(error, messages) {\n    const raw = String(error?.message || \"\").toLowerCase();\n    if (raw.includes(\"invalid site key\")) {\n        return messages.invalidKey;\n    }\n    if (raw.includes(\"grecaptcha_not_available\")) {\n        return messages.unavailable;\n    }\n    if (raw.includes(\"recaptcha_timeout\")) {\n        return messages.timeout;\n    }\n    return messages.genericError;\n}\n\nfunction executeRecaptcha(action) {\n    return new Promise((resolve, reject) => {\n        let settled = false;\n\n        const settleResolve = (token) => {\n            if (settled) return;\n            settled = true;\n            clearTimeout(timeoutId);\n            resolve(token);\n        };\n\n        const settleReject = (error) => {\n            if (settled) return;\n            settled = true;\n            clearTimeout(timeoutId);\n            reject(error);\n        };\n\n        const timeoutId = window.setTimeout(() => {\n            settleReject(new Error(\"recaptcha_timeout\"));\n        }, RECAPTCHA_EXECUTION_TIMEOUT_MS);\n\n        if (!window.grecaptcha || typeof window.grecaptcha.ready !== \"function\" || typeof window.grecaptcha.execute !== \"function\") {\n            settleReject(new Error(\"grecaptcha_not_available\"));\n            return;\n        }\n\n        window.grecaptcha.ready(() => {\n            try {\n                Promise.resolve(window.grecaptcha.execute(RECAPTCHA_CONFIG.siteKey, { action }))\n                    .then((token) => settleResolve(token))\n                    .catch((error) => settleReject(error));\n            } catch (error) {\n                settleReject(error);\n            }\n        });\n    });\n}\n\nasync function onProtectedFormSubmit(event) {\n    if (!isRecaptchaEnabled()) return;\n\n    const form = event.currentTarget;\n    if (form.dataset.recaptchaSubmitting === \"true\") return;\n\n    event.preventDefault();\n    const messages = getRecaptchaMessages(form);\n    clearInlineError(form);\n    setSubmitState(form, true, messages);\n\n    try {\n        const action = getExpectedAction(form);\n        const token = await executeRecaptcha(action);\n        if (!token) {\n            throw new Error(\"empty_recaptcha_token\");\n        }\n\n        const tokenInput = ensureRecaptchaTokenInput(form);\n        tokenInput.value = token;\n\n        form.dataset.recaptchaSubmitting = \"true\";\n        form.submit();\n    } catch (error) {\n        showInlineError(form, resolveErrorMessage(error, messages));\n        setSubmitState(form, false, messages);\n    }\n}\n\nfunction initRecaptchaV3Forms() {\n    const forms = document.querySelectorAll(\".hero__form, .website-request-demo__form, .website-contact-sales__form\");\n    forms.forEach((form) => {\n        form.addEventListener(\"submit\", onProtectedFormSubmit);\n    });\n}\n\nif (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", initRecaptchaV3Forms);\n} else {\n    initRecaptchaV3Forms();\n}\n"],
  "mappings": "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",
  "names": ["RECAPTCHA_CONFIG", "RECAPTCHA_EXECUTION_TIMEOUT_MS", "RECAPTCHA_ACTION_BY_FORM_SOURCE", "isRecaptchaEnabled", "getRecaptchaMessages", "form", "data", "getExpectedAction", "sourceInput", "source", "ensureRecaptchaTokenInput", "tokenInput", "getInlineErrorElement", "messageElement", "submitButton", "getSubmitButton", "setSubmitState", "isProcessing", "messages", "original", "clearInlineError", "showInlineError", "message", "resolveErrorMessage", "error", "raw", "executeRecaptcha", "action", "resolve", "reject", "settled", "settleResolve", "token", "timeoutId", "settleReject", "onProtectedFormSubmit", "event", "initRecaptchaV3Forms"]
}
