{
  "version": 3,
  "sources": ["/cdn/shop/t/7/assets/idp-access-gate.js?idp=access-v5"],
  "sourcesContent": ["(() => {\r\n  const STORAGE_KEY = \"idp_access_granted_v2\";\r\n  const ACTION_KEY = \"idp_access_pending_action_v2\";\r\n  const SHOPIFY_PENDING_KEY = \"idp_shopify_access_pending_v1\";\r\n  const PDF_SELECTORS = \"[data-generate-pdf], [data-idp-pdf], [data-idp-color-pdf], [data-idp-technical-sheet]\";\r\n\r\n  const start = () => {\r\n    const gate = document.querySelector(\"[data-idp-access-gate]\");\r\n    if (!gate) return;\r\n\r\n    const apiBase = (gate.dataset.accessApiBase || \"\").replace(/\\/$/, \"\");\r\n    const dialog = gate.querySelector(\".idp-access-gate__dialog\");\r\n    const form = gate.querySelector(\"[data-idp-access-form]\");\r\n    const title = gate.querySelector(\"[data-idp-access-title]\");\r\n    const description = gate.querySelector(\"[data-idp-access-description]\");\r\n    const status = gate.querySelector(\"[data-idp-access-status]\");\r\n    const submit = gate.querySelector(\"[data-idp-access-submit]\");\r\n    const channelGroup = gate.querySelector(\"[data-idp-access-channel-group]\");\r\n    const emailField = gate.querySelector(\"[data-idp-email-field]\");\r\n    const phoneField = gate.querySelector(\"[data-idp-phone-field]\");\r\n    const marketingConsent = gate.querySelector(\"[data-idp-marketing-consent]\");\r\n    const emailInput = form?.elements.email;\r\n    const phoneInput = form?.elements.phone;\r\n    const customerAuthenticated = gate.dataset.customerAuthenticated === \"true\";\r\n    const customerEmail = (gate.dataset.customerEmail || \"\").trim().toLowerCase();\r\n    const storefrontLoginUrl = gate.dataset.storefrontLoginUrl || \"/customer_authentication/login\";\r\n    if (customerAuthenticated && customerEmail && emailInput) emailInput.value = customerEmail;\r\n    let reason = \"price\";\r\n    let previousFocus = null;\r\n\r\n    const isTechnicalSheetLink = (link) => {\r\n      if (!link?.matches?.(\"a[href*='.pdf']\")) return false;\r\n      const label = [link.textContent, link.getAttribute(\"title\"), link.getAttribute(\"aria-label\")]\r\n        .filter(Boolean)\r\n        .join(\" \");\r\n      return /ficha\\s+t[e\u00E9]cnica|descargar\\s+ficha|ver\\s+ficha/i.test(label);\r\n    };\r\n\r\n    const markTechnicalSheetLinks = (scope = document) => {\r\n      scope.querySelectorAll?.(\"a[href*='.pdf']\").forEach((link) => {\r\n        if (isTechnicalSheetLink(link)) link.setAttribute(\"data-idp-technical-sheet\", \"\");\r\n      });\r\n    };\r\n\r\n    markTechnicalSheetLinks(document);\r\n    new MutationObserver((records) => records.forEach((record) => record.addedNodes.forEach((node) => {\r\n      if (node.nodeType === 1) markTechnicalSheetLinks(node);\r\n    }))).observe(document.body, { childList: true, subtree: true });\r\n\r\n    const readStoredAccess = () => {\r\n      try {\r\n        return JSON.parse(window.localStorage.getItem(STORAGE_KEY) || \"null\");\r\n      } catch (error) {\r\n        return null;\r\n      }\r\n    };\r\n\r\n    const hasPriceAccess = () => Boolean(readStoredAccess());\r\n    const hasPdfAccess = () => {\r\n      const stored = readStoredAccess();\r\n      return stored?.channel === \"email\" || stored?.channel === \"customer\";\r\n    };\r\n\r\n    const storeAccess = (channel, token = \"\") => {\r\n      try {\r\n        window.localStorage.setItem(STORAGE_KEY, JSON.stringify({\r\n          grantedAt: new Date().toISOString(),\r\n          channel,\r\n          token\r\n        }));\r\n      } catch (error) {\r\n        // Authenticated customers remain authorized when local storage is unavailable.\r\n      }\r\n    };\r\n\r\n    const applyAccessState = () => {\r\n      const unlocked = hasPriceAccess();\r\n      document.documentElement.classList.toggle(\"idp-access-granted\", unlocked);\r\n      // Precios p\u00FAblicos por autorizaci\u00F3n del 07/09/2026; el acceso a PDF no cambia.\n      document.querySelectorAll(\"[data-idp-price-value]\").forEach((node) => { node.hidden = false; });\n      document.querySelectorAll(\"[data-idp-price-trigger]\").forEach((node) => { node.hidden = true; });\n      document.querySelectorAll(\"[data-idp-price-detail]\").forEach((node) => { node.hidden = false; });\n      window.dispatchEvent(new CustomEvent(\"idp:access-state\", { detail: { granted: unlocked, pdfGranted: hasPdfAccess() } }));\r\n      return unlocked;\r\n    };\r\n\r\n    const actionDescriptor = (button) => {\r\n      if (!button) return null;\r\n      const selector = button.matches(\"[data-idp-technical-sheet]\")\r\n        ? \"[data-idp-technical-sheet]\"\r\n        : button.matches(\"[data-generate-pdf]\")\r\n        ? \"[data-generate-pdf]\"\r\n        : button.matches(\"[data-idp-color-pdf]\")\r\n          ? \"[data-idp-color-pdf]\"\r\n          : \"[data-idp-pdf]\";\r\n      const index = [...document.querySelectorAll(selector)].indexOf(button);\r\n      return { selector, index: Math.max(0, index) };\r\n    };\r\n\r\n    const rememberAction = (action) => {\r\n      if (!action) return;\r\n      try { window.sessionStorage.setItem(ACTION_KEY, JSON.stringify(action)); } catch (error) {}\r\n    };\r\n\r\n    const readPendingAction = () => {\r\n      try { return JSON.parse(window.sessionStorage.getItem(ACTION_KEY) || \"null\"); } catch (error) { return null; }\r\n    };\r\n\r\n    const resumeAction = (action = readPendingAction()) => {\r\n      if (!action?.selector) return;\r\n      let attempts = 0;\r\n      const resume = () => {\r\n        markTechnicalSheetLinks(document);\r\n        const target = [...document.querySelectorAll(action.selector)][Number(action.index) || 0];\r\n        if (!target && attempts < 20) {\r\n          attempts += 1;\r\n          window.setTimeout(resume, 250);\r\n          return;\r\n        }\r\n        if (!target) return;\r\n        try { window.sessionStorage.removeItem(ACTION_KEY); } catch (error) {}\r\n        if (target.matches(\"a[href]\")) window.location.assign(target.href);\r\n        else target.click();\r\n      };\r\n      window.setTimeout(resume, 450);\r\n    };\r\n\r\n    const setStatus = (message = \"\", type = \"\") => {\r\n      if (!status) return;\r\n      status.textContent = message;\r\n      status.classList.toggle(\"is-error\", type === \"error\");\r\n      status.classList.toggle(\"is-success\", type === \"success\");\r\n    };\r\n\r\n    const setChannel = (channel) => {\r\n      const usePhone = channel === \"phone\" && reason !== \"pdf\";\r\n      const isPdf = reason === \"pdf\";\r\n      emailField.hidden = usePhone;\r\n      phoneField.hidden = !usePhone && !isPdf;\r\n      marketingConsent.hidden = usePhone;\r\n      emailInput.required = !usePhone;\r\n      phoneInput.required = usePhone || isPdf;\r\n      submit.textContent = usePhone ? \"Registrar y continuar\" : \"Continuar con IDP\";\r\n      setStatus();\r\n    };\r\n\r\n    const configureGate = (nextReason) => {\r\n      reason = nextReason || \"price\";\r\n      const isPdf = reason === \"pdf\";\r\n      channelGroup.hidden = isPdf;\r\n      form.querySelector(\"input[name='idp_access_channel'][value='email']\").checked = true;\r\n      setChannel(\"email\");\r\n      title.textContent = isPdf ? \"Confirma tu correo para generar el PDF\" : \"Reg\u00EDstrate una sola vez\";\r\n      description.textContent = isPdf\r\n        ? \"Introduce tu correo y tel\u00E9fono. Recibir\u00E1s un c\u00F3digo seguro de un solo uso y volver\u00E1s a esta herramienta para generar autom\u00E1ticamente el documento. Solo te lo pediremos una vez.\"\r\n        : \"Los precios de venta son p\u00FAblicos. Identif\u00EDcate para gestionar el acceso a los servicios de IDP.\";\n    };\r\n\r\n    const closeGate = () => {\r\n      gate.hidden = true;\r\n      document.documentElement.classList.remove(\"idp-access-gate-open\");\r\n      previousFocus?.focus?.();\r\n    };\r\n\r\n    const openGate = (nextReason, action = null) => {\r\n      if (nextReason === \"pdf\" ? hasPdfAccess() : hasPriceAccess()) return false;\r\n      previousFocus = document.activeElement;\r\n      if (action) rememberAction(action);\r\n      configureGate(nextReason);\r\n      gate.hidden = false;\r\n      document.documentElement.classList.add(\"idp-access-gate-open\");\r\n      window.requestAnimationFrame(() => dialog?.focus());\r\n      return true;\r\n    };\r\n\r\n    const currentReturnUrl = () => {\r\n      const url = new URL(window.location.href);\r\n      [\"idp_access\", \"idp_access_token\"].forEach((key) => url.searchParams.delete(key));\r\n      return url.toString();\r\n    };\r\n\r\n    const shopifyLoginUrl = (email) => {\r\n      const returnUrl = new URL(window.location.href);\r\n      returnUrl.searchParams.delete(\"idp_access_token\");\r\n      returnUrl.searchParams.set(\"idp_access\", \"shopify\");\r\n      const relativeReturn = `${returnUrl.pathname}${returnUrl.search}${returnUrl.hash}`;\r\n      const loginUrl = new URL(storefrontLoginUrl, window.location.origin);\r\n      loginUrl.searchParams.set(\"return_to\", relativeReturn);\r\n      loginUrl.searchParams.set(\"login_hint\", email);\r\n      return loginUrl.toString();\r\n    };\r\n\r\n    const cleanVerificationParams = () => {\r\n      const cleanUrl = new URL(window.location.href);\r\n      cleanUrl.searchParams.delete(\"idp_access\");\r\n      cleanUrl.searchParams.delete(\"idp_access_token\");\r\n      window.history.replaceState({}, \"\", cleanUrl.toString());\r\n    };\r\n\r\n    const completeShopifyVerification = async (pendingToken, pendingAction = readPendingAction()) => {\r\n      const response = await fetch(`${apiBase}/api/assistant/access-complete`, {\r\n        method: \"POST\",\r\n        headers: { \"Content-Type\": \"application/json\" },\r\n        body: JSON.stringify({ token: pendingToken, customerEmail })\r\n      });\r\n      const result = await response.json().catch(() => ({}));\r\n      if (!response.ok || !result.ok) throw new Error(result.error || \"No se ha podido confirmar el acceso.\");\r\n      storeAccess(result.channel || \"email\", result.accessToken || \"\");\r\n      try { window.sessionStorage.removeItem(SHOPIFY_PENDING_KEY); } catch (error) {}\r\n      cleanVerificationParams();\r\n      applyAccessState();\r\n      closeGate();\r\n      resumeAction(result.action || pendingAction);\r\n      return true;\r\n    };\r\n\r\n    const restoreKnownCustomer = async () => {\r\n      if (!customerAuthenticated || !customerEmail || readStoredAccess() || !apiBase) return false;\r\n      try {\r\n        const response = await fetch(`${apiBase}/api/assistant/access-customer-status`, {\r\n          method: \"POST\",\r\n          headers: { \"Content-Type\": \"application/json\" },\r\n          body: JSON.stringify({ email: customerEmail })\r\n        });\r\n        const result = await response.json().catch(() => ({}));\r\n        if (!response.ok || !result.ok || !result.known) return false;\r\n        storeAccess(result.channel || \"email\", result.accessToken || \"\");\r\n        applyAccessState();\r\n        return true;\r\n      } catch (error) {\r\n        return false;\r\n      }\r\n    };\r\n\r\n    gate.querySelectorAll(\"input[name='idp_access_channel']\").forEach((radio) => {\r\n      radio.addEventListener(\"change\", () => setChannel(radio.value));\r\n    });\r\n\r\n    gate.querySelectorAll(\"[data-idp-access-close]\").forEach((button) => button.addEventListener(\"click\", closeGate));\r\n    document.addEventListener(\"keydown\", (event) => {\r\n      if (event.key === \"Escape\" && !gate.hidden) closeGate();\r\n    });\r\n\r\n    form?.addEventListener(\"submit\", async (event) => {\r\n      event.preventDefault();\r\n      setStatus();\r\n      if (!form.reportValidity()) return;\r\n      if (!apiBase) {\r\n        setStatus(\"El servicio de verificaci\u00F3n todav\u00EDa no est\u00E1 conectado.\", \"error\");\r\n        return;\r\n      }\r\n\r\n      const channel = form.elements.idp_access_channel.value;\r\n      const pendingAction = readPendingAction();\r\n      const payload = {\r\n        reason,\r\n        channel,\r\n        email: channel === \"email\" ? emailInput.value.trim() : \"\",\r\n        phone: channel === \"phone\" || reason === \"pdf\" ? phoneInput.value.trim() : \"\",\r\n        serviceConsent: form.elements.service_consent.checked,\r\n        marketingConsent: channel === \"email\" && form.elements.marketing_consent.checked,\r\n        returnUrl: currentReturnUrl(),\r\n        action: pendingAction,\r\n        verificationProvider: \"shopify\",\r\n        consentVersion: \"IDP-ACCESS-2026-08-24\"\r\n      };\r\n\r\n      submit.disabled = true;\r\n      submit.textContent = \"Procesando...\";\r\n      try {\r\n        const response = await fetch(`${apiBase}/api/assistant/access-request`, {\r\n          method: \"POST\",\r\n          headers: { \"Content-Type\": \"application/json\" },\r\n          body: JSON.stringify(payload)\r\n        });\r\n        const result = await response.json().catch(() => ({}));\r\n        if (!response.ok || !result.ok) throw new Error(result.error || \"No se ha podido completar el registro.\");\r\n        if (result.verificationProvider === \"shopify\" && result.pendingToken) {\r\n          try { window.sessionStorage.setItem(SHOPIFY_PENDING_KEY, result.pendingToken); } catch (error) {}\r\n          if (customerAuthenticated && customerEmail === payload.email.toLowerCase()) {\r\n            await completeShopifyVerification(result.pendingToken, result.action || pendingAction);\r\n            return;\r\n          }\r\n          setStatus(\"Te llevamos a la verificaci\u00F3n segura de IDP. Recibir\u00E1s un c\u00F3digo de seis cifras por correo.\", \"success\");\r\n          window.setTimeout(() => window.location.assign(shopifyLoginUrl(payload.email)), 250);\r\n          return;\r\n        }\r\n        if (result.verified) {\r\n          storeAccess(channel, result.accessToken || \"\");\r\n          applyAccessState();\r\n          closeGate();\r\n          resumeAction(result.action || pendingAction);\r\n          return;\r\n        }\r\n        setStatus(\"Correo enviado. Confirma el mensaje para volver y completar la acci\u00F3n.\", \"success\");\r\n        submit.textContent = \"Reenviar verificaci\u00F3n\";\r\n      } catch (error) {\r\n        setStatus(error.message || \"No se ha podido enviar la verificaci\u00F3n.\", \"error\");\r\n      } finally {\r\n        submit.disabled = false;\r\n        if (!status?.classList.contains(\"is-success\")) {\r\n          submit.textContent = channel === \"phone\" ? \"Registrar y continuar\" : \"Continuar con IDP\";\r\n        }\r\n      }\r\n    });\r\n\r\n    document.addEventListener(\"click\", (event) => {\r\n      const priceTrigger = event.target.closest(\"[data-idp-price-trigger]\");\r\n      if (priceTrigger && openGate(\"price\")) {\r\n        event.preventDefault();\r\n        event.stopImmediatePropagation();\r\n        return;\r\n      }\r\n\r\n      const technicalSheetLink = event.target.closest(\"a[href]\");\r\n      if (isTechnicalSheetLink(technicalSheetLink)) technicalSheetLink.setAttribute(\"data-idp-technical-sheet\", \"\");\r\n\r\n      const pdfButton = event.target.closest(PDF_SELECTORS);\r\n      if (pdfButton && !hasPdfAccess()) {\r\n        openGate(\"pdf\", actionDescriptor(pdfButton));\r\n        event.preventDefault();\r\n        event.stopImmediatePropagation();\r\n        return;\r\n      }\r\n\r\n      const protectedPurchase = event.target.closest(\"[data-idp-add-button], [name='checkout'], .shopify-payment-button button\");\r\n      if (protectedPurchase && openGate(\"purchase\")) {\r\n        event.preventDefault();\r\n        event.stopImmediatePropagation();\r\n      }\r\n    }, true);\r\n\r\n    const verifyReturn = async () => {\r\n      const params = new URLSearchParams(window.location.search);\r\n      const token = params.get(\"idp_access_token\");\r\n      if (params.get(\"idp_access\") !== \"verified\" || !token || !apiBase) return false;\r\n      try {\r\n        const response = await fetch(`${apiBase}/api/assistant/access-status?token=${encodeURIComponent(token)}`);\r\n        const result = await response.json();\r\n        if (!response.ok || !result.ok) throw new Error();\r\n        storeAccess(result.channel || \"email\", token);\r\n        const cleanUrl = new URL(window.location.href);\r\n        cleanUrl.searchParams.delete(\"idp_access\");\r\n        cleanUrl.searchParams.delete(\"idp_access_token\");\r\n        window.history.replaceState({}, \"\", cleanUrl.toString());\r\n        applyAccessState();\r\n        resumeAction(result.action || readPendingAction());\r\n        return true;\r\n      } catch (error) {\r\n        openGate(\"pdf\", readPendingAction());\r\n        setStatus(\"El enlace no es v\u00E1lido o ha caducado. Solicita uno nuevo.\", \"error\");\r\n        return false;\r\n      }\r\n    };\r\n\r\n\r\n    const verifyShopifyReturn = async () => {\r\n      const params = new URLSearchParams(window.location.search);\r\n      if (params.get(\"idp_access\") !== \"shopify\") return false;\r\n      let pendingToken = \"\";\r\n      try { pendingToken = window.sessionStorage.getItem(SHOPIFY_PENDING_KEY) || \"\"; } catch (error) {}\r\n      if (!customerAuthenticated || !customerEmail || !pendingToken || !apiBase) {\r\n        cleanVerificationParams();\r\n        openGate(\"pdf\", readPendingAction());\r\n        setStatus(\"No se ha completado la verificaci\u00F3n. Inicia sesi\u00F3n con el mismo correo y vuelve a intentarlo.\", \"error\");\r\n        return true;\r\n      }\r\n      try {\r\n        return await completeShopifyVerification(pendingToken, readPendingAction());\r\n      } catch (error) {\r\n        cleanVerificationParams();\r\n        openGate(\"pdf\", readPendingAction());\r\n        setStatus(error.message || \"No se ha podido confirmar el acceso.\", \"error\");\r\n        return true;\r\n      }\r\n    };\r\n    applyAccessState();\r\n    (async () => {\r\n      const params = new URLSearchParams(window.location.search);\r\n      if (params.get(\"idp_access\") === \"shopify\") {\r\n        await verifyShopifyReturn();\r\n        return;\r\n      }\r\n      if (params.get(\"idp_access\") === \"verified\") {\r\n        await verifyReturn();\r\n        return;\r\n      }\r\n      await restoreKnownCustomer();\r\n    })();\r\n\r\n    window.IDPAccessGate = { hasAccess: hasPriceAccess, hasPdfAccess, open: openGate, refresh: applyAccessState };\r\n  };\r\n\r\n  if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", start, { once: true });\r\n  else start();\r\n})();\n"],
  "mappings": "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",
  "names": []
}
