{"version":3,"file":"index.cjs","sources":["../src/lib/config/meta-pixel.ts","../src/lib/utils/logger.ts","../src/lib/facebook-pixel-init.ts","../__vite-browser-external","../node_modules/crypto-js/core.js","../node_modules/crypto-js/sha256.js","../src/lib/utils/hash.ts","../src/lib/utils/cookies.ts","../src/lib/hooks/use-meta-pixel.ts","../src/components/providers/meta-pixel-provider.tsx","../src/lib/hooks/use-scroll-tracking.ts","../src/components/analytics/meta-pixel.tsx"],"sourcesContent":["// Tipagem da configuração\nexport interface MetaPixelConfig {\n  PIXEL_ID: string;\n  ACCESS_TOKEN: string;\n  TEST_EVENT_CODE?: string;\n  DEDUPLICATION?: {\n    MAX_AGE_HOURS: number;\n  };\n  UNIVERSAL_PARAMETERS: string[];\n  STANDARD_EVENTS: string[];\n  VERBOSE?: boolean;\n}\n\n// Flag para controlar se já foi configurado\nlet isConfigured = false;\n\n/**\n * Detecta se está em ambiente Vercel e ativa debug automaticamente\n */\nfunction detectVercelAndEnableDebug(): boolean {\n  if (typeof window === 'undefined') return false;\n  \n  const url = window.location.href;\n  const isVercel = url.includes('vercel.app') || url.includes('vercel.com');\n  \n  if (isVercel) {\n    console.log('[META PIXEL] 🚀 Detectado ambiente Vercel, ativando debug automático');\n    return true;\n  }\n  \n  return false;\n}\n\n// Configuração padrão\nexport let META_PIXEL_CONFIG: MetaPixelConfig = {\n  PIXEL_ID: '',\n  ACCESS_TOKEN: '',\n  TEST_EVENT_CODE: '',\n  DEDUPLICATION: {\n    MAX_AGE_HOURS: 24,\n  },\n  UNIVERSAL_PARAMETERS: [\n    'event_time',\n    'event_source_url',\n    'page_title',\n    'page_path',\n    'browser_language',\n    'screen_width',\n    'screen_height',\n    'viewport_width',\n    'viewport_height',\n    'timezone',\n    'referrer',\n  ],\n  STANDARD_EVENTS: [\n    'PageView',\n      'Lead',\n  'LeadQualificado',\n  ],\n  VERBOSE: false,\n};\n\n// Função para verificar se está configurado\nexport function isMetaPixelConfigured(): boolean {\n  return isConfigured && !!META_PIXEL_CONFIG.PIXEL_ID && !!META_PIXEL_CONFIG.ACCESS_TOKEN;\n}\n\n// Função para validar configuração obrigatória\nexport function validateConfiguration(): void {\n  if (!META_PIXEL_CONFIG.PIXEL_ID) {\n    throw new Error('PIXEL_ID é obrigatório. Configure usando configureMetaPixel()');\n  }\n  if (!META_PIXEL_CONFIG.ACCESS_TOKEN) {\n    throw new Error('ACCESS_TOKEN é obrigatório. Configure usando configureMetaPixel()');\n  }\n}\n\n// Função para configurar o Meta Pixel\nexport function configureMetaPixel(config: Partial<MetaPixelConfig>) {\n  META_PIXEL_CONFIG = { ...META_PIXEL_CONFIG, ...config };\n  isConfigured = true;\n  \n  // Detectar Vercel e ativar debug automaticamente\n  const isVercel = detectVercelAndEnableDebug();\n  \n  // Ativar debug se estiver em Vercel ou development/preview\n  if (isVercel || (typeof window !== 'undefined' && (import.meta.env.MODE === 'development' || import.meta.env.MODE === 'preview'))) {\n    META_PIXEL_CONFIG.VERBOSE = true;\n    console.log('[META PIXEL] 🔍 Debug ativado automaticamente');\n  }\n  \n  // Validar configuração\n  if (!config.PIXEL_ID) {\n    console.error('⚠️ PIXEL_ID não fornecido na configuração');\n  }\n  if (!config.ACCESS_TOKEN) {\n    console.error('⚠️ ACCESS_TOKEN não fornecido na configuração');\n  }\n  \n  // Debug simplificado após configuração\n  if (META_PIXEL_CONFIG.VERBOSE) {\n    console.log('[META PIXEL CONFIGURADO]', {\n      PIXEL_ID: META_PIXEL_CONFIG.PIXEL_ID ? 'Configurado' : 'Não configurado',\n      ACCESS_TOKEN: META_PIXEL_CONFIG.ACCESS_TOKEN ? 'Configurado' : 'Não configurado',\n      TEST_EVENT_CODE: META_PIXEL_CONFIG.TEST_EVENT_CODE || 'Não configurado',\n      VERBOSE: META_PIXEL_CONFIG.VERBOSE,\n      ENVIRONMENT: isVercel ? 'Vercel' : import.meta.env.MODE\n    });\n  }\n  \n  if (typeof window !== 'undefined') {\n    (window as any)._metaPixelDebug = {\n      getConfig: () => META_PIXEL_CONFIG,\n      isConfigured: () => isMetaPixelConfigured(),\n      validate: validateConfiguration\n    };\n  }\n}\n\n  // Debug imediato para desenvolvedores (apenas se não configurado)\n  if (typeof window !== 'undefined' && (import.meta.env.MODE === 'development' || import.meta.env.MODE === 'preview')) {\n    // Aguardar um microtask para dar tempo de configuração\n    Promise.resolve().then(() => {\n      if (!isMetaPixelConfigured()) {\n        console.warn('[META PIXEL NÃO CONFIGURADO] Package não configurado. Use configureMetaPixel() antes de usar o hook.');\n      }\n    });\n  \n  (window as any)._metaPixelDebug = {\n    getConfig: () => META_PIXEL_CONFIG,\n    isConfigured: () => isMetaPixelConfigured(),\n    validate: validateConfiguration\n  };\n}\n\nexport type StandardEvent = (typeof META_PIXEL_CONFIG.STANDARD_EVENTS)[number]; ","// Sistema de logging para o Meta Pixel\n\nexport enum LogCategory {\n  INIT = 'INIT',\n  META_PIXEL = 'META_PIXEL',\n  CONVERSION_API = 'CONVERSION_API',\n  PAGE_VIEW = 'PAGE_VIEW',\n  SCROLL = 'SCROLL',\n  LEAD = 'LEAD',\n  QUALIFIED_LEAD = 'QUALIFIED_LEAD',\n  VIDEO = 'VIDEO',\n  ERROR = 'ERROR',\n  DEBUG = 'DEBUG'\n}\n\nexport enum LogLevel {\n  DEBUG = 0,\n  INFO = 1,\n  WARN = 2,\n  ERROR = 3\n}\n\ninterface LogEntry {\n  timestamp: number\n  level: LogLevel\n  category: LogCategory\n  message: string\n  data?: any\n}\n\nclass Logger {\n  private logs: LogEntry[] = []\n  private maxLogs = 1000\n\n  // Função para detectar se deve mostrar logs\n  private shouldShowLogs(): boolean {\n    // Verificar se estamos no navegador\n    if (typeof window === 'undefined') return false\n    \n    // Verificar configuração VERBOSE do Meta Pixel\n    try {\n      // Verificar se há configuração VERBOSE no window\n      if ((window as any)._metaPixelDebug?.getConfig?.()?.VERBOSE) {\n        return true;\n      }\n    } catch (error) {\n      // Se não conseguir verificar, continuar com outras verificações\n    }\n    \n    // Verificar se estamos em desenvolvimento\n    const isDev = \n      // Vite development\n      (typeof import.meta !== 'undefined' && import.meta.env?.MODE === 'development') ||\n      // Vite preview\n      (typeof import.meta !== 'undefined' && import.meta.env?.MODE === 'preview') ||\n      // Node.js development\n      process.env.NODE_ENV === 'development' ||\n      // Verificar se há debug ativo\n      window.location.hostname === 'localhost' ||\n      window.location.hostname === '127.0.0.1' ||\n      // Verificar se há parâmetro de debug na URL\n      window.location.search.includes('debug=true') ||\n      // Verificar se há localStorage com debug ativo\n      localStorage.getItem('meta-pixel-debug') === 'true' ||\n      // Verificar se há console aberto (método simples)\n      window.outerHeight - window.innerHeight > 200\n\n    return isDev\n  }\n\n  private addLog(level: LogLevel, category: LogCategory, message: string, data?: any) {\n    const entry: LogEntry = {\n      timestamp: Date.now(),\n      level,\n      category,\n      message,\n      data\n    }\n\n    this.logs.push(entry)\n\n    // Manter apenas os últimos logs\n    if (this.logs.length > this.maxLogs) {\n      this.logs = this.logs.slice(-this.maxLogs)\n    }\n\n    // Expor logs no console em desenvolvimento\n    if (this.shouldShowLogs()) {\n      const prefix = `[META PIXEL - ${category}]`\n      const timestamp = new Date().toLocaleTimeString()\n\n      switch (level) {\n        case LogLevel.DEBUG:\n          console.debug(`${prefix} ${timestamp} - ${message}`, data || '')\n          break\n        case LogLevel.INFO:\n          console.info(`${prefix} ${timestamp} - ${message}`, data || '')\n          break\n        case LogLevel.WARN:\n          console.warn(`${prefix} ${timestamp} - ${message}`, data || '')\n          break\n        case LogLevel.ERROR:\n          console.error(`${prefix} ${timestamp} - ${message}`, data || '')\n          break\n      }\n    }\n\n    // Expor logs globalmente para debug (sempre disponível)\n    if (typeof window !== 'undefined') {\n      if (!window._metaPixelLogs) {\n        window._metaPixelLogs = {\n          getLogs: () => this.logs,\n          getLogsByCategory: (category: string) => this.logs.filter(log => log.category === category),\n          clear: () => { this.logs = [] },\n          enable: () => { localStorage.setItem('meta-pixel-debug', 'true') },\n          disable: () => { localStorage.removeItem('meta-pixel-debug') },\n          isEnabled: () => this.shouldShowLogs()\n        }\n      }\n    }\n  }\n\n  debug(category: LogCategory, message: string, data?: any) {\n    this.addLog(LogLevel.DEBUG, category, message, data)\n  }\n\n  info(category: LogCategory, message: string, data?: any) {\n    this.addLog(LogLevel.INFO, category, message, data)\n  }\n\n  warn(category: LogCategory, message: string, data?: any) {\n    this.addLog(LogLevel.WARN, category, message, data)\n  }\n\n  error(category: LogCategory, message: string, data?: any) {\n    this.addLog(LogLevel.ERROR, category, message, data)\n  }\n\n  // Métodos específicos para eventos principais\n  pageView(eventId: string, params: any) {\n    this.info(LogCategory.PAGE_VIEW, 'PageView enviado', {\n      eventId,\n      pageTitle: params.page_title,\n      pagePath: params.page_path,\n      hasUserData: !!params.user_data,\n      userData: {\n        hasEmail: !!params.user_data?.em,\n        hasPhone: !!params.user_data?.ph,\n        hasName: !!(params.user_data?.fn || params.user_data?.ln),\n        hasFbc: !!params.user_data?.fbc,\n        hasFbp: !!params.user_data?.fbp\n      }\n    })\n  }\n\n  scroll(depth: number, eventId: string, params: any) {\n    this.info(LogCategory.SCROLL, `Scroll atingiu ${depth}%`, {\n      eventId,\n      depth,\n      scrollPercentage: params.scroll_percentage,\n      scrollY: params.scroll_y,\n      pageTitle: params.page_title,\n      pagePath: params.page_path\n    })\n  }\n\n  lead(eventId: string, params: any, userData: any) {\n    this.info(LogCategory.LEAD, 'Lead enviado', {\n      eventId,\n      value: params.value,\n      currency: params.currency,\n      contentName: params.content_name,\n      hasUserData: true,\n      userData: {\n        hasEmail: !!userData?.em,\n        hasPhone: !!userData?.ph,\n        hasName: !!(userData?.fn || userData?.ln),\n        hasFbc: !!userData?.fbc,\n        hasFbp: !!userData?.fbp\n      },\n      processedUserData: {\n        hasEmailHash: !!userData?.em,\n        hasPhoneHash: !!userData?.ph,\n        hasNameHash: !!(userData?.fn || userData?.ln)\n      }\n    })\n  }\n\n  leadQualificado(eventId: string, params: any, userData: any) {\n    this.info(LogCategory.QUALIFIED_LEAD, 'LeadQualificado enviado', {\n      eventId,\n      value: params.value,\n      currency: params.currency,\n      contentName: params.content_name,\n      leadScore: params.lead_score,\n      qualificationStatus: params.qualification_status,\n      hasUserData: true,\n      userData: {\n        hasEmail: !!userData?.em,\n        hasPhone: !!userData?.ph,\n        hasName: !!(userData?.fn || userData?.ln),\n        hasFbc: !!userData?.fbc,\n        hasFbp: !!userData?.fbp\n      }\n    })\n  }\n\n  pixelEvent(eventName: string, eventId: string, method: 'track' | 'trackCustom', success: boolean) {\n    this.info(LogCategory.META_PIXEL, `Evento enviado via Pixel: ${eventName}`, {\n      eventId,\n      method,\n      success\n    })\n  }\n\n  conversionApiEvent(eventName: string, eventId: string, success: boolean, responseTime?: number) {\n    this.info(LogCategory.CONVERSION_API, `Evento enviado via API: ${eventName}`, {\n      eventId,\n      success,\n      responseTime: responseTime ? `${Math.round(responseTime)}ms` : undefined\n    })\n  }\n\n  getLogs(): LogEntry[] {\n    return [...this.logs]\n  }\n\n  getLogsByCategory(category: LogCategory): LogEntry[] {\n    return this.logs.filter(log => log.category === category)\n  }\n\n  clear(): void {\n    this.logs = []\n  }\n}\n\nconst logger = new Logger()\nexport default logger ","// Inicialização do Facebook Pixel para Vite com proteção anti-adblock\n\nimport { META_PIXEL_CONFIG } from './config/meta-pixel'\nimport logger, { LogCategory } from './utils/logger'\n\nlet isInitialized = false\n\n// Lista de eventos padrão do Facebook Pixel\nconst STANDARD_EVENTS = [\n  \"PageView\",\n  \"Lead\",\n  \"LeadQualificado\",\n]\n\n// Configuração anti-adblock (para futuras expansões)\n// const ANTI_ADBLOCK_CONFIG = {\n//   // Nomes ofuscados para evitar detecção\n//   scriptNames: ['analytics.js', 'stats.js', 'metrics.js', 'tracking.js'],\n//   functionNames: ['analytics', 'stats', 'metrics', 'track'],\n//   // URLs de proxy local para o script do Facebook\n//   proxyUrls: [\n//     '/assets/fb-pixel.js',\n//     '/public/analytics.js',\n//     '/static/tracking.js'\n//   ]\n// }\n\n/**\n * Cria um proxy local para o script do Facebook\n */\nfunction createFacebookPixelProxy(): void {\n  if (typeof window === 'undefined') return\n\n  // Criar conteúdo do script ofuscado\n  const fbPixelCode = `\n    !function(f,b,e,v,n,t,s)\n    {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n    n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n    if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n    n.queue=[];}(window,document,'script','');\n    \n    // Carregar o script real do Facebook de forma assíncrona\n    (function() {\n      var script = document.createElement('script');\n      script.async = true;\n      script.src = 'https://connect.facebook.net/en_US/fbevents.js';\n      script.onerror = function() {\n        // Fallback: tentar outros CDNs\n        var fallbackScript = document.createElement('script');\n        fallbackScript.async = true;\n        fallbackScript.src = 'https://cdn.fbsbx.com/en_US/fbevents.js';\n        document.head.appendChild(fallbackScript);\n      };\n      document.head.appendChild(script);\n    })();\n  `\n\n  // Criar blob e URL para o script\n  const blob = new Blob([fbPixelCode], { type: 'application/javascript' })\n  const scriptUrl = URL.createObjectURL(blob)\n\n  // Carregar o script proxy\n  const script = document.createElement('script')\n  script.async = true\n  script.src = scriptUrl\n  script.onload = () => {\n    logger.info(LogCategory.INIT, \"Script do Facebook carregado via proxy anti-adblock\")\n    window._fbPixelScriptLoaded = true\n    // Limpar URL do blob após carregar\n    URL.revokeObjectURL(scriptUrl)\n  }\n  script.onerror = () => {\n    logger.warn(LogCategory.INIT, \"Proxy falhou, tentando método direto\")\n    loadFacebookPixelScriptDirect()\n  }\n  \n  document.head.appendChild(script)\n}\n\n/**\n * Carrega o script do Facebook diretamente (fallback)\n */\nfunction loadFacebookPixelScriptDirect(): void {\n  if (typeof window === 'undefined') return\n  \n  const script = document.createElement('script')\n  script.async = true\n  script.src = 'https://connect.facebook.net/en_US/fbevents.js'\n  script.onload = () => {\n    logger.info(LogCategory.INIT, \"Script do Facebook carregado diretamente\")\n    window._fbPixelScriptLoaded = true\n  }\n  script.onerror = (error) => {\n    logger.error(LogCategory.INIT, \"Erro ao carregar script do Facebook\", { error })\n    // Último recurso: tentar CDN alternativo\n    loadFacebookPixelAlternativeCDN()\n  }\n  \n  document.head.appendChild(script)\n}\n\n/**\n * Tenta CDN alternativo do Facebook (último recurso)\n */\nfunction loadFacebookPixelAlternativeCDN(): void {\n  if (typeof window === 'undefined') return\n  \n  const script = document.createElement('script')\n  script.async = true\n  script.src = 'https://cdn.fbsbx.com/en_US/fbevents.js'\n  script.onload = () => {\n    logger.info(LogCategory.INIT, \"Script do Facebook carregado via CDN alternativo\")\n    window._fbPixelScriptLoaded = true\n  }\n  script.onerror = (error) => {\n    logger.error(LogCategory.INIT, \"Todos os métodos de carregamento falharam\", { error })\n  }\n  \n  document.head.appendChild(script)\n}\n\n/**\n * Inicializa o fbq mesmo se o script não carregar (modo offline)\n */\nfunction initFacebookPixelOffline(): void {\n  if (typeof window === 'undefined') return\n\n  // Criar implementação mínima do fbq para casos onde o script é bloqueado\n  if (!window.fbq) {\n    window.fbq = function(...args: any[]) {\n      // Armazenar eventos para envio posterior via API\n      if (!window._fbq_calls) window._fbq_calls = []\n      window._fbq_calls.push(args)\n      \n      // Log dos eventos mesmo quando bloqueado\n      if (args.length >= 2) {\n        const [command, eventName] = args\n        logger.info(LogCategory.META_PIXEL, `Evento ${eventName} armazenado (script bloqueado)`, {\n          command,\n          args: args.slice(2)\n        })\n      }\n    }\n\n    if (!window._fbq) window._fbq = window.fbq\n    ;(window.fbq as any).push = window.fbq\n    ;(window.fbq as any).loaded = true\n    ;(window.fbq as any).version = \"2.0-offline\"\n    ;(window.fbq as any).queue = []\n\n    logger.warn(LogCategory.INIT, \"Facebook Pixel inicializado em modo offline (script bloqueado)\")\n  }\n}\n\n// Função para inicializar o Facebook Pixel\nexport function initFacebookPixel(): void {\n  // Verificar se estamos no lado do cliente\n  if (typeof window === \"undefined\") return\n\n  // Debug simplificado para identificar conflitos\n  if (import.meta.env.MODE === 'development' || import.meta.env.MODE === 'preview') {\n    console.log('[META PIXEL INIT] Status:', {\n      isInitialized,\n      fbPixelInitialized: window._fbPixelInitialized,\n      fbqExists: !!window.fbq,\n      pixelId: META_PIXEL_CONFIG.PIXEL_ID ? 'Configurado' : 'Não configurado'\n    });\n  }\n\n  // Verificar se já foi inicializado globalmente\n  if (isInitialized || window._fbPixelInitialized) {\n    logger.debug(LogCategory.INIT, \"Facebook Pixel já inicializado, pulando...\")\n    isInitialized = true\n    return\n  }\n\n  // Marcar como inicializado\n  isInitialized = true\n  window._fbPixelInitialized = true\n\n  logger.info(LogCategory.INIT, \"Iniciando Facebook Pixel com proteção anti-adblock...\")\n\n  // Tentar carregar script com proteção anti-adblock primeiro\n  if (!window._fbPixelScriptLoaded) {\n    createFacebookPixelProxy()\n    \n    // Timeout para detectar se o script foi bloqueado\n    setTimeout(() => {\n      if (!window.fbq || typeof window.fbq !== 'function') {\n        logger.warn(LogCategory.INIT, \"Script detectado como bloqueado, inicializando modo offline\")\n        initFacebookPixelOffline()\n      }\n    }, 3000)\n  }\n\n  // Inicializar o objeto fbq se ainda não existe\n  if (!window.fbq) {\n  window.fbq = function(...args: any[]) {\n    // Verificar se há argumentos\n    if (args.length === 0) {\n      logger.warn(LogCategory.META_PIXEL, \"Tentativa de chamar fbq() sem argumentos\")\n      return\n    }\n\n    if ((window.fbq as any).callMethod) {\n      (window.fbq as any).callMethod.apply(window.fbq, args)\n    } else {\n      (window.fbq as any).queue.push(args)\n    }\n  }\n\n  if (!window._fbq) window._fbq = window.fbq\n  ;(window.fbq as any).push = window.fbq\n  ;(window.fbq as any).loaded = true\n  ;(window.fbq as any).version = \"2.0\"\n  ;(window.fbq as any).queue = []\n  }\n\n  // Obter o ID do Pixel da configuração\n  const pixelId = META_PIXEL_CONFIG.PIXEL_ID\n  \n  // Debug simplificado da inicialização\n  if (import.meta.env.MODE === 'development' || import.meta.env.MODE === 'preview') {\n    console.log('[META PIXEL INIT] Inicializando com Pixel ID:', pixelId ? 'Configurado' : 'Não configurado');\n  }\n  \n  // Registrar um evento para garantir que o script seja utilizado\n  window.fbq(\"init\", pixelId)\n\n  // Não rastrear PageView automaticamente, isso será feito pelo componente\n  logger.info(LogCategory.INIT, `Facebook Pixel inicializado ${pixelId} com proteção anti-adblock`)\n\n  // Definir a função global de rastreamento\n  if (!window.trackFBEvent) {\n    window.trackFBEvent = (event, params) => {\n      if (window.fbq) {\n        // Extrair event_id dos parâmetros se presente\n        const { event_id, ...otherParams } = params || {}\n        \n        // Preparar opções com eventID no formato correto\n        const options = event_id ? { eventID: event_id } : {}\n        \n        // Verificar se é um evento padrão ou personalizado\n        if (STANDARD_EVENTS.includes(event)) {\n          window.fbq(\"track\", event, otherParams, options)\n        } else {\n          window.fbq(\"trackCustom\", event, otherParams, options)\n        }\n        return true\n      }\n      return false\n    }\n    logger.info(LogCategory.INIT, \"Função global de rastreamento registrada\")\n  }\n}\n\n// Função para rastrear eventos\nexport function trackPixelEvent(eventName: string, params?: any, leadData?: any): boolean {\n  // Verificar se estamos no lado do cliente\n  if (typeof window === \"undefined\") return false\n\n  // Inicializar o pixel se ainda não foi feito\n  if (!isInitialized) {\n    initFacebookPixel()\n  }\n\n  // Gerar um ID de evento único para deduplicação\n  const eventId = `evt_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n\n  // Obter FBC e FBP para incluir nos parâmetros\n  const fbc = document.cookie.match(/_fbc=([^;]+)/)?.pop() || null\n  const fbp = document.cookie.match(/_fbp=([^;]+)/)?.pop() || null\n\n  // Adicionar FBC, FBP e eventId aos parâmetros\n  const enhancedParams = {\n    ...params,\n    _fbc: fbc || undefined,\n    _fbp: fbp || undefined,\n    event_id: eventId,\n  }\n\n  logger.info(LogCategory.META_PIXEL, `Rastreando evento: ${eventName}`, {\n    eventId,\n    hasParams: !!params,\n    hasLeadData: !!leadData,\n    fbqAvailable: !!window.fbq\n  })\n\n  // Usar a função global de rastreamento\n  if (window.trackFBEvent) {\n    return window.trackFBEvent(eventName, enhancedParams)\n  } else if (window.fbq) {\n    // Extrair o event_id dos parâmetros para usar no formato correto\n    const { event_id, ...otherParams } = enhancedParams\n\n    // Preparar opções com eventID no formato correto\n    const options = event_id ? { eventID: event_id } : {}\n\n    // Verificar se é um evento padrão ou personalizado\n    if (STANDARD_EVENTS.includes(eventName)) {\n      window.fbq(\"track\", eventName, otherParams, options)\n    } else {\n      window.fbq(\"trackCustom\", eventName, otherParams, options)\n    }\n    return true\n  }\n\n  // Se chegou aqui, o fbq não está disponível (bloqueado)\n  logger.warn(LogCategory.META_PIXEL, `Evento ${eventName} não pôde ser enviado via pixel (bloqueado)`, {\n    eventId,\n    willSendViaAPI: true\n  })\n\n  return false\n}\n\n// Função para verificar se o pixel está inicializado\nexport function isPixelInitialized(): boolean {\n  return isInitialized && !!window.fbq\n}\n\n// Função para carregar o script do Facebook com proteção anti-adblock\nexport function loadFacebookPixelScript(): void {\n  if (typeof window === \"undefined\") return\n  \n  // Verificar se o script já foi carregado\n  if (window._fbPixelScriptLoaded) {\n    logger.debug(LogCategory.INIT, \"Script do Facebook já carregado\")\n    return\n  }\n\n  logger.info(LogCategory.INIT, \"Carregando script do Facebook com proteção anti-adblock\")\n  \n  // Tentar método anti-adblock primeiro\n  createFacebookPixelProxy()\n}\n\n// Função para verificar se o pixel está sendo bloqueado\nexport function isPixelBlocked(): boolean {\n  if (typeof window === 'undefined') return false\n  \n  // Verificar se o fbq existe e funciona\n  if (!window.fbq) return true\n  \n  // Verificar se é a versão offline (bloqueada)\n  return (window.fbq as any).version === \"2.0-offline\"\n}\n\n// Função para obter estatísticas de bloqueio\nexport function getPixelBlockingStats(): {\n  isBlocked: boolean;\n  method: string;\n  fallbackActive: boolean;\n} {\n  return {\n    isBlocked: isPixelBlocked(),\n    method: window._fbPixelScriptLoaded ? 'script_loaded' : 'script_blocked',\n    fallbackActive: !window._fbPixelScriptLoaded && !!window.fbq\n  }\n} ","export default {}",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t    var crypto;\n\n\t    // Native crypto from window (Browser)\n\t    if (typeof window !== 'undefined' && window.crypto) {\n\t        crypto = window.crypto;\n\t    }\n\n\t    // Native crypto in web worker (Browser)\n\t    if (typeof self !== 'undefined' && self.crypto) {\n\t        crypto = self.crypto;\n\t    }\n\n\t    // Native crypto from worker\n\t    if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t        crypto = globalThis.crypto;\n\t    }\n\n\t    // Native (experimental IE 11) crypto from window (Browser)\n\t    if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t        crypto = window.msCrypto;\n\t    }\n\n\t    // Native crypto from global (NodeJS)\n\t    if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t        crypto = global.crypto;\n\t    }\n\n\t    // Native crypto import via require (NodeJS)\n\t    if (!crypto && typeof require === 'function') {\n\t        try {\n\t            crypto = require('crypto');\n\t        } catch (err) {}\n\t    }\n\n\t    /*\n\t     * Cryptographically secure pseudorandom number generator\n\t     *\n\t     * As Math.random() is cryptographically not safe to use\n\t     */\n\t    var cryptoSecureRandomInt = function () {\n\t        if (crypto) {\n\t            // Use getRandomValues method (Browser)\n\t            if (typeof crypto.getRandomValues === 'function') {\n\t                try {\n\t                    return crypto.getRandomValues(new Uint32Array(1))[0];\n\t                } catch (err) {}\n\t            }\n\n\t            // Use randomBytes method (NodeJS)\n\t            if (typeof crypto.randomBytes === 'function') {\n\t                try {\n\t                    return crypto.randomBytes(4).readInt32LE();\n\t                } catch (err) {}\n\t            }\n\t        }\n\n\t        throw new Error('Native crypto module could not be used to get secure random number.');\n\t    };\n\n\t    /*\n\t     * Local polyfill of Object.create\n\n\t     */\n\t    var create = Object.create || (function () {\n\t        function F() {}\n\n\t        return function (obj) {\n\t            var subtype;\n\n\t            F.prototype = obj;\n\n\t            subtype = new F();\n\n\t            F.prototype = null;\n\n\t            return subtype;\n\t        };\n\t    }());\n\n\t    /**\n\t     * CryptoJS namespace.\n\t     */\n\t    var C = {};\n\n\t    /**\n\t     * Library namespace.\n\t     */\n\t    var C_lib = C.lib = {};\n\n\t    /**\n\t     * Base object for prototypal inheritance.\n\t     */\n\t    var Base = C_lib.Base = (function () {\n\n\n\t        return {\n\t            /**\n\t             * Creates a new object that inherits from this object.\n\t             *\n\t             * @param {Object} overrides Properties to copy into the new object.\n\t             *\n\t             * @return {Object} The new object.\n\t             *\n\t             * @static\n\t             *\n\t             * @example\n\t             *\n\t             *     var MyType = CryptoJS.lib.Base.extend({\n\t             *         field: 'value',\n\t             *\n\t             *         method: function () {\n\t             *         }\n\t             *     });\n\t             */\n\t            extend: function (overrides) {\n\t                // Spawn\n\t                var subtype = create(this);\n\n\t                // Augment\n\t                if (overrides) {\n\t                    subtype.mixIn(overrides);\n\t                }\n\n\t                // Create default initializer\n\t                if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t                    subtype.init = function () {\n\t                        subtype.$super.init.apply(this, arguments);\n\t                    };\n\t                }\n\n\t                // Initializer's prototype is the subtype object\n\t                subtype.init.prototype = subtype;\n\n\t                // Reference supertype\n\t                subtype.$super = this;\n\n\t                return subtype;\n\t            },\n\n\t            /**\n\t             * Extends this object and runs the init method.\n\t             * Arguments to create() will be passed to init().\n\t             *\n\t             * @return {Object} The new object.\n\t             *\n\t             * @static\n\t             *\n\t             * @example\n\t             *\n\t             *     var instance = MyType.create();\n\t             */\n\t            create: function () {\n\t                var instance = this.extend();\n\t                instance.init.apply(instance, arguments);\n\n\t                return instance;\n\t            },\n\n\t            /**\n\t             * Initializes a newly created object.\n\t             * Override this method to add some logic when your objects are created.\n\t             *\n\t             * @example\n\t             *\n\t             *     var MyType = CryptoJS.lib.Base.extend({\n\t             *         init: function () {\n\t             *             // ...\n\t             *         }\n\t             *     });\n\t             */\n\t            init: function () {\n\t            },\n\n\t            /**\n\t             * Copies properties into this object.\n\t             *\n\t             * @param {Object} properties The properties to mix in.\n\t             *\n\t             * @example\n\t             *\n\t             *     MyType.mixIn({\n\t             *         field: 'value'\n\t             *     });\n\t             */\n\t            mixIn: function (properties) {\n\t                for (var propertyName in properties) {\n\t                    if (properties.hasOwnProperty(propertyName)) {\n\t                        this[propertyName] = properties[propertyName];\n\t                    }\n\t                }\n\n\t                // IE won't copy toString using the loop above\n\t                if (properties.hasOwnProperty('toString')) {\n\t                    this.toString = properties.toString;\n\t                }\n\t            },\n\n\t            /**\n\t             * Creates a copy of this object.\n\t             *\n\t             * @return {Object} The clone.\n\t             *\n\t             * @example\n\t             *\n\t             *     var clone = instance.clone();\n\t             */\n\t            clone: function () {\n\t                return this.init.prototype.extend(this);\n\t            }\n\t        };\n\t    }());\n\n\t    /**\n\t     * An array of 32-bit words.\n\t     *\n\t     * @property {Array} words The array of 32-bit words.\n\t     * @property {number} sigBytes The number of significant bytes in this word array.\n\t     */\n\t    var WordArray = C_lib.WordArray = Base.extend({\n\t        /**\n\t         * Initializes a newly created word array.\n\t         *\n\t         * @param {Array} words (Optional) An array of 32-bit words.\n\t         * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.lib.WordArray.create();\n\t         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t         */\n\t        init: function (words, sigBytes) {\n\t            words = this.words = words || [];\n\n\t            if (sigBytes != undefined) {\n\t                this.sigBytes = sigBytes;\n\t            } else {\n\t                this.sigBytes = words.length * 4;\n\t            }\n\t        },\n\n\t        /**\n\t         * Converts this word array to a string.\n\t         *\n\t         * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t         *\n\t         * @return {string} The stringified word array.\n\t         *\n\t         * @example\n\t         *\n\t         *     var string = wordArray + '';\n\t         *     var string = wordArray.toString();\n\t         *     var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t         */\n\t        toString: function (encoder) {\n\t            return (encoder || Hex).stringify(this);\n\t        },\n\n\t        /**\n\t         * Concatenates a word array to this word array.\n\t         *\n\t         * @param {WordArray} wordArray The word array to append.\n\t         *\n\t         * @return {WordArray} This word array.\n\t         *\n\t         * @example\n\t         *\n\t         *     wordArray1.concat(wordArray2);\n\t         */\n\t        concat: function (wordArray) {\n\t            // Shortcuts\n\t            var thisWords = this.words;\n\t            var thatWords = wordArray.words;\n\t            var thisSigBytes = this.sigBytes;\n\t            var thatSigBytes = wordArray.sigBytes;\n\n\t            // Clamp excess bits\n\t            this.clamp();\n\n\t            // Concat\n\t            if (thisSigBytes % 4) {\n\t                // Copy one byte at a time\n\t                for (var i = 0; i < thatSigBytes; i++) {\n\t                    var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t                    thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t                }\n\t            } else {\n\t                // Copy one word at a time\n\t                for (var j = 0; j < thatSigBytes; j += 4) {\n\t                    thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t                }\n\t            }\n\t            this.sigBytes += thatSigBytes;\n\n\t            // Chainable\n\t            return this;\n\t        },\n\n\t        /**\n\t         * Removes insignificant bits.\n\t         *\n\t         * @example\n\t         *\n\t         *     wordArray.clamp();\n\t         */\n\t        clamp: function () {\n\t            // Shortcuts\n\t            var words = this.words;\n\t            var sigBytes = this.sigBytes;\n\n\t            // Clamp\n\t            words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t            words.length = Math.ceil(sigBytes / 4);\n\t        },\n\n\t        /**\n\t         * Creates a copy of this word array.\n\t         *\n\t         * @return {WordArray} The clone.\n\t         *\n\t         * @example\n\t         *\n\t         *     var clone = wordArray.clone();\n\t         */\n\t        clone: function () {\n\t            var clone = Base.clone.call(this);\n\t            clone.words = this.words.slice(0);\n\n\t            return clone;\n\t        },\n\n\t        /**\n\t         * Creates a word array filled with random bytes.\n\t         *\n\t         * @param {number} nBytes The number of random bytes to generate.\n\t         *\n\t         * @return {WordArray} The random word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.lib.WordArray.random(16);\n\t         */\n\t        random: function (nBytes) {\n\t            var words = [];\n\n\t            for (var i = 0; i < nBytes; i += 4) {\n\t                words.push(cryptoSecureRandomInt());\n\t            }\n\n\t            return new WordArray.init(words, nBytes);\n\t        }\n\t    });\n\n\t    /**\n\t     * Encoder namespace.\n\t     */\n\t    var C_enc = C.enc = {};\n\n\t    /**\n\t     * Hex encoding strategy.\n\t     */\n\t    var Hex = C_enc.Hex = {\n\t        /**\n\t         * Converts a word array to a hex string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The hex string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\n\t            // Convert\n\t            var hexChars = [];\n\t            for (var i = 0; i < sigBytes; i++) {\n\t                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t                hexChars.push((bite >>> 4).toString(16));\n\t                hexChars.push((bite & 0x0f).toString(16));\n\t            }\n\n\t            return hexChars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a hex string to a word array.\n\t         *\n\t         * @param {string} hexStr The hex string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t         */\n\t        parse: function (hexStr) {\n\t            // Shortcut\n\t            var hexStrLength = hexStr.length;\n\n\t            // Convert\n\t            var words = [];\n\t            for (var i = 0; i < hexStrLength; i += 2) {\n\t                words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t            }\n\n\t            return new WordArray.init(words, hexStrLength / 2);\n\t        }\n\t    };\n\n\t    /**\n\t     * Latin1 encoding strategy.\n\t     */\n\t    var Latin1 = C_enc.Latin1 = {\n\t        /**\n\t         * Converts a word array to a Latin1 string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The Latin1 string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\n\t            // Convert\n\t            var latin1Chars = [];\n\t            for (var i = 0; i < sigBytes; i++) {\n\t                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t                latin1Chars.push(String.fromCharCode(bite));\n\t            }\n\n\t            return latin1Chars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a Latin1 string to a word array.\n\t         *\n\t         * @param {string} latin1Str The Latin1 string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t         */\n\t        parse: function (latin1Str) {\n\t            // Shortcut\n\t            var latin1StrLength = latin1Str.length;\n\n\t            // Convert\n\t            var words = [];\n\t            for (var i = 0; i < latin1StrLength; i++) {\n\t                words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t            }\n\n\t            return new WordArray.init(words, latin1StrLength);\n\t        }\n\t    };\n\n\t    /**\n\t     * UTF-8 encoding strategy.\n\t     */\n\t    var Utf8 = C_enc.Utf8 = {\n\t        /**\n\t         * Converts a word array to a UTF-8 string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The UTF-8 string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            try {\n\t                return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t            } catch (e) {\n\t                throw new Error('Malformed UTF-8 data');\n\t            }\n\t        },\n\n\t        /**\n\t         * Converts a UTF-8 string to a word array.\n\t         *\n\t         * @param {string} utf8Str The UTF-8 string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t         */\n\t        parse: function (utf8Str) {\n\t            return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t        }\n\t    };\n\n\t    /**\n\t     * Abstract buffered block algorithm template.\n\t     *\n\t     * The property blockSize must be implemented in a concrete subtype.\n\t     *\n\t     * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t     */\n\t    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t        /**\n\t         * Resets this block algorithm's data buffer to its initial state.\n\t         *\n\t         * @example\n\t         *\n\t         *     bufferedBlockAlgorithm.reset();\n\t         */\n\t        reset: function () {\n\t            // Initial values\n\t            this._data = new WordArray.init();\n\t            this._nDataBytes = 0;\n\t        },\n\n\t        /**\n\t         * Adds new data to this block algorithm's buffer.\n\t         *\n\t         * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t         *\n\t         * @example\n\t         *\n\t         *     bufferedBlockAlgorithm._append('data');\n\t         *     bufferedBlockAlgorithm._append(wordArray);\n\t         */\n\t        _append: function (data) {\n\t            // Convert string to WordArray, else assume WordArray already\n\t            if (typeof data == 'string') {\n\t                data = Utf8.parse(data);\n\t            }\n\n\t            // Append\n\t            this._data.concat(data);\n\t            this._nDataBytes += data.sigBytes;\n\t        },\n\n\t        /**\n\t         * Processes available data blocks.\n\t         *\n\t         * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t         *\n\t         * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t         *\n\t         * @return {WordArray} The processed data.\n\t         *\n\t         * @example\n\t         *\n\t         *     var processedData = bufferedBlockAlgorithm._process();\n\t         *     var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t         */\n\t        _process: function (doFlush) {\n\t            var processedWords;\n\n\t            // Shortcuts\n\t            var data = this._data;\n\t            var dataWords = data.words;\n\t            var dataSigBytes = data.sigBytes;\n\t            var blockSize = this.blockSize;\n\t            var blockSizeBytes = blockSize * 4;\n\n\t            // Count blocks ready\n\t            var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t            if (doFlush) {\n\t                // Round up to include partial blocks\n\t                nBlocksReady = Math.ceil(nBlocksReady);\n\t            } else {\n\t                // Round down to include only full blocks,\n\t                // less the number of blocks that must remain in the buffer\n\t                nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t            }\n\n\t            // Count words ready\n\t            var nWordsReady = nBlocksReady * blockSize;\n\n\t            // Count bytes ready\n\t            var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t            // Process blocks\n\t            if (nWordsReady) {\n\t                for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t                    // Perform concrete-algorithm logic\n\t                    this._doProcessBlock(dataWords, offset);\n\t                }\n\n\t                // Remove processed words\n\t                processedWords = dataWords.splice(0, nWordsReady);\n\t                data.sigBytes -= nBytesReady;\n\t            }\n\n\t            // Return processed words\n\t            return new WordArray.init(processedWords, nBytesReady);\n\t        },\n\n\t        /**\n\t         * Creates a copy of this object.\n\t         *\n\t         * @return {Object} The clone.\n\t         *\n\t         * @example\n\t         *\n\t         *     var clone = bufferedBlockAlgorithm.clone();\n\t         */\n\t        clone: function () {\n\t            var clone = Base.clone.call(this);\n\t            clone._data = this._data.clone();\n\n\t            return clone;\n\t        },\n\n\t        _minBufferSize: 0\n\t    });\n\n\t    /**\n\t     * Abstract hasher template.\n\t     *\n\t     * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t     */\n\t    var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t        /**\n\t         * Configuration options.\n\t         */\n\t        cfg: Base.extend(),\n\n\t        /**\n\t         * Initializes a newly created hasher.\n\t         *\n\t         * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hasher = CryptoJS.algo.SHA256.create();\n\t         */\n\t        init: function (cfg) {\n\t            // Apply config defaults\n\t            this.cfg = this.cfg.extend(cfg);\n\n\t            // Set initial values\n\t            this.reset();\n\t        },\n\n\t        /**\n\t         * Resets this hasher to its initial state.\n\t         *\n\t         * @example\n\t         *\n\t         *     hasher.reset();\n\t         */\n\t        reset: function () {\n\t            // Reset data buffer\n\t            BufferedBlockAlgorithm.reset.call(this);\n\n\t            // Perform concrete-hasher logic\n\t            this._doReset();\n\t        },\n\n\t        /**\n\t         * Updates this hasher with a message.\n\t         *\n\t         * @param {WordArray|string} messageUpdate The message to append.\n\t         *\n\t         * @return {Hasher} This hasher.\n\t         *\n\t         * @example\n\t         *\n\t         *     hasher.update('message');\n\t         *     hasher.update(wordArray);\n\t         */\n\t        update: function (messageUpdate) {\n\t            // Append\n\t            this._append(messageUpdate);\n\n\t            // Update the hash\n\t            this._process();\n\n\t            // Chainable\n\t            return this;\n\t        },\n\n\t        /**\n\t         * Finalizes the hash computation.\n\t         * Note that the finalize operation is effectively a destructive, read-once operation.\n\t         *\n\t         * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t         *\n\t         * @return {WordArray} The hash.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hash = hasher.finalize();\n\t         *     var hash = hasher.finalize('message');\n\t         *     var hash = hasher.finalize(wordArray);\n\t         */\n\t        finalize: function (messageUpdate) {\n\t            // Final message update\n\t            if (messageUpdate) {\n\t                this._append(messageUpdate);\n\t            }\n\n\t            // Perform concrete-hasher logic\n\t            var hash = this._doFinalize();\n\n\t            return hash;\n\t        },\n\n\t        blockSize: 512/32,\n\n\t        /**\n\t         * Creates a shortcut function to a hasher's object interface.\n\t         *\n\t         * @param {Hasher} hasher The hasher to create a helper for.\n\t         *\n\t         * @return {Function} The shortcut function.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t         */\n\t        _createHelper: function (hasher) {\n\t            return function (message, cfg) {\n\t                return new hasher.init(cfg).finalize(message);\n\t            };\n\t        },\n\n\t        /**\n\t         * Creates a shortcut function to the HMAC's object interface.\n\t         *\n\t         * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t         *\n\t         * @return {Function} The shortcut function.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t         */\n\t        _createHmacHelper: function (hasher) {\n\t            return function (message, key) {\n\t                return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t            };\n\t        }\n\t    });\n\n\t    /**\n\t     * Algorithm namespace.\n\t     */\n\t    var C_algo = C.algo = {};\n\n\t    return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var Hasher = C_lib.Hasher;\n\t    var C_algo = C.algo;\n\n\t    // Initialization and round constants tables\n\t    var H = [];\n\t    var K = [];\n\n\t    // Compute constants\n\t    (function () {\n\t        function isPrime(n) {\n\t            var sqrtN = Math.sqrt(n);\n\t            for (var factor = 2; factor <= sqrtN; factor++) {\n\t                if (!(n % factor)) {\n\t                    return false;\n\t                }\n\t            }\n\n\t            return true;\n\t        }\n\n\t        function getFractionalBits(n) {\n\t            return ((n - (n | 0)) * 0x100000000) | 0;\n\t        }\n\n\t        var n = 2;\n\t        var nPrime = 0;\n\t        while (nPrime < 64) {\n\t            if (isPrime(n)) {\n\t                if (nPrime < 8) {\n\t                    H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t                }\n\t                K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t                nPrime++;\n\t            }\n\n\t            n++;\n\t        }\n\t    }());\n\n\t    // Reusable object\n\t    var W = [];\n\n\t    /**\n\t     * SHA-256 hash algorithm.\n\t     */\n\t    var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t        _doReset: function () {\n\t            this._hash = new WordArray.init(H.slice(0));\n\t        },\n\n\t        _doProcessBlock: function (M, offset) {\n\t            // Shortcut\n\t            var H = this._hash.words;\n\n\t            // Working variables\n\t            var a = H[0];\n\t            var b = H[1];\n\t            var c = H[2];\n\t            var d = H[3];\n\t            var e = H[4];\n\t            var f = H[5];\n\t            var g = H[6];\n\t            var h = H[7];\n\n\t            // Computation\n\t            for (var i = 0; i < 64; i++) {\n\t                if (i < 16) {\n\t                    W[i] = M[offset + i] | 0;\n\t                } else {\n\t                    var gamma0x = W[i - 15];\n\t                    var gamma0  = ((gamma0x << 25) | (gamma0x >>> 7))  ^\n\t                                  ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t                                   (gamma0x >>> 3);\n\n\t                    var gamma1x = W[i - 2];\n\t                    var gamma1  = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t                                  ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t                                   (gamma1x >>> 10);\n\n\t                    W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t                }\n\n\t                var ch  = (e & f) ^ (~e & g);\n\t                var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t                var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t                var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7)  | (e >>> 25));\n\n\t                var t1 = h + sigma1 + ch + K[i] + W[i];\n\t                var t2 = sigma0 + maj;\n\n\t                h = g;\n\t                g = f;\n\t                f = e;\n\t                e = (d + t1) | 0;\n\t                d = c;\n\t                c = b;\n\t                b = a;\n\t                a = (t1 + t2) | 0;\n\t            }\n\n\t            // Intermediate hash value\n\t            H[0] = (H[0] + a) | 0;\n\t            H[1] = (H[1] + b) | 0;\n\t            H[2] = (H[2] + c) | 0;\n\t            H[3] = (H[3] + d) | 0;\n\t            H[4] = (H[4] + e) | 0;\n\t            H[5] = (H[5] + f) | 0;\n\t            H[6] = (H[6] + g) | 0;\n\t            H[7] = (H[7] + h) | 0;\n\t        },\n\n\t        _doFinalize: function () {\n\t            // Shortcuts\n\t            var data = this._data;\n\t            var dataWords = data.words;\n\n\t            var nBitsTotal = this._nDataBytes * 8;\n\t            var nBitsLeft = data.sigBytes * 8;\n\n\t            // Add padding\n\t            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t            data.sigBytes = dataWords.length * 4;\n\n\t            // Hash final blocks\n\t            this._process();\n\n\t            // Return final computed hash\n\t            return this._hash;\n\t        },\n\n\t        clone: function () {\n\t            var clone = Hasher.clone.call(this);\n\t            clone._hash = this._hash.clone();\n\n\t            return clone;\n\t        }\n\t    });\n\n\t    /**\n\t     * Shortcut function to the hasher's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     *\n\t     * @return {WordArray} The hash.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hash = CryptoJS.SHA256('message');\n\t     *     var hash = CryptoJS.SHA256(wordArray);\n\t     */\n\t    C.SHA256 = Hasher._createHelper(SHA256);\n\n\t    /**\n\t     * Shortcut function to the HMAC's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     * @param {WordArray|string} key The secret key.\n\t     *\n\t     * @return {WordArray} The HMAC.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hmac = CryptoJS.HmacSHA256(message, key);\n\t     */\n\t    C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","import SHA256 from 'crypto-js/sha256';\n\n/**\n * Gera hash SHA-256 de uma string conforme requisitos do Meta\n */\nexport function hashValue(value: string): string {\n  if (!value) return '';\n  return SHA256(value).toString();\n}\n\n/**\n * Normaliza e faz hash de email conforme requisitos do Meta\n * - Remove espaços\n * - Converte para minúsculas\n * - Aplica SHA-256\n */\nexport function hashEmail(email: string): string {\n  if (!email) return '';\n  const normalized = email.trim().toLowerCase();\n  return hashValue(normalized);\n}\n\n/**\n * Normaliza e faz hash de telefone conforme requisitos do Meta\n * - Remove caracteres não numéricos\n * - Adiciona código do país se não presente\n * - Aplica SHA-256\n */\nexport function hashPhone(phone: string, countryCode: string = '55'): string {\n  if (!phone) return '';\n  \n  // Remove todos os caracteres não numéricos\n  let normalized = phone.replace(/\\D/g, '');\n  \n  // Adiciona código do país se não estiver presente\n  if (!normalized.startsWith(countryCode) && normalized.length <= 11) {\n    normalized = countryCode + normalized;\n  }\n  \n  return hashValue(normalized);\n}\n\n/**\n * Normaliza e faz hash de nome conforme requisitos do Meta\n * - Remove espaços extras\n * - Converte para minúsculas\n * - Remove acentos\n * - Aplica SHA-256\n */\nexport function hashName(name: string): string {\n  if (!name) return '';\n  \n  // Remove acentos\n  const normalized = name\n    .trim()\n    .toLowerCase()\n    .normalize('NFD')\n    .replace(/[\\u0300-\\u036f]/g, '');\n    \n  return hashValue(normalized);\n}\n\n/**\n * Extrai primeiro e último nome e retorna hasheados\n */\nexport function hashFirstLastName(fullName: string): { fn?: string; ln?: string } {\n  if (!fullName) return {};\n  \n  const parts = fullName.trim().split(/\\s+/);\n  const result: { fn?: string; ln?: string } = {};\n  \n  if (parts.length > 0) {\n    result.fn = hashName(parts[0]);\n  }\n  \n  if (parts.length > 1) {\n    result.ln = hashName(parts[parts.length - 1]);\n  }\n  \n  return result;\n} ","/**\n * Obtém valor de um cookie pelo nome\n */\nexport function getCookie(name: string): string | null {\n  if (typeof document === 'undefined') return null;\n  \n  const value = `; ${document.cookie}`;\n  const parts = value.split(`; ${name}=`);\n  \n  if (parts.length === 2) {\n    return parts.pop()?.split(';').shift() || null;\n  }\n  \n  return null;\n}\n\n/**\n * Obtém o FBP (Facebook Browser ID) do cookie\n */\nexport function getFbp(): string | null {\n  return getCookie('_fbp');\n}\n\n/**\n * Obtém o FBC (Facebook Click ID) do cookie\n */\nexport function getFbc(): string | null {\n  return getCookie('_fbc');\n}\n\n/**\n * Gera um Event ID único para deduplicação\n */\nexport function generateEventId(prefix: string = 'evt'): string {\n  const timestamp = Date.now();\n  const random = Math.random().toString(36).substring(2, 15);\n  return `${prefix}_${timestamp}_${random}`;\n} ","\"use client\"\n\nimport { useState, useCallback, useEffect } from 'react'\nimport { MetaPixelEvent, MetaPixelOptions, MetaPixelHook } from '../types/meta-pixel.d'\nimport { META_PIXEL_CONFIG, isMetaPixelConfigured } from '../config/meta-pixel'\nimport { loadFacebookPixelScript, initFacebookPixel, isPixelBlocked, getPixelBlockingStats } from '../facebook-pixel-init'\nimport logger, { LogCategory } from '../utils/logger'\nimport { hashEmail, hashPhone, hashFirstLastName, hashValue } from '../utils/hash'\nimport { getFbp, getFbc, generateEventId } from '../utils/cookies'\n\n// Armazenamento de eventos enviados para deduplicação\nconst STORAGE_KEY = '_meta_events_sent';\n\n/**\n * Prepara dados do usuário para advanced matching\n */\nfunction prepareUserData(userData?: Record<string, any>): Record<string, any> {\n  const prepared: Record<string, any> = {\n    client_user_agent: navigator.userAgent,\n    client_ip_address: 'SERÁ_PREENCHIDO_PELO_BACKEND', // Placeholder para IP\n    // ✅ SEMPRE incluir cookies do Facebook para melhor advanced matching\n    fbp: getFbp(),\n    fbc: getFbc(),\n  };\n\n  if (!userData) return prepared;\n\n  // Email - ✅ Formato correto do Meta: array com hash\n  if (userData.email) {\n    prepared.em = [hashEmail(userData.email)];\n  }\n  \n  // Telefone - ✅ Formato correto do Meta: array com hash\n  if (userData.phone || userData.telefone) {\n    prepared.ph = [hashPhone(userData.phone || userData.telefone)];\n  }\n\n  // Nome - ✅ Formato correto do Meta: arrays com hash\n  if (userData.name || userData.nome) {\n    const fullName = userData.name || userData.nome;\n    const { fn, ln } = hashFirstLastName(fullName);\n    if (fn) prepared.fn = [fn];\n    if (ln) prepared.ln = [ln];\n  }\n\n  // Cidade - ✅ Formato correto do Meta: array com hash\n  if (userData.city || userData.cidade) {\n    const normalizedCity = (userData.city || userData.cidade).trim().toLowerCase();\n    prepared.ct = [hashValue(normalizedCity)];\n  }\n\n  // Estado - ✅ Formato correto do Meta: array com hash\n  if (userData.state || userData.estado) {\n    const normalizedState = (userData.state || userData.estado).trim().toLowerCase();\n    prepared.st = [hashValue(normalizedState)];\n  }\n\n  // CEP - ✅ Formato correto do Meta: array com hash\n  if (userData.zip || userData.cep) {\n    const normalizedZip = (userData.zip || userData.cep).replace(/\\D/g, '');\n    prepared.zp = [hashValue(normalizedZip)];\n  }\n\n  // País - ✅ Formato correto do Meta: array com hash\n  if (userData.country || userData.pais) {\n    const normalizedCountry = (userData.country || userData.pais).trim().toLowerCase();\n    prepared.country = [hashValue(normalizedCountry)];\n  }\n\n  // External ID - ✅ Formato correto do Meta: array com valor string\n  if (userData.external_id) {\n    prepared.external_id = [String(userData.external_id)];\n  }\n\n  return prepared;\n}\n\n/**\n * Adiciona parâmetros universais aos eventos\n */\nfunction addUniversalParameters(params: Record<string, any>): Record<string, any> {\n  if (typeof window === 'undefined') return params;\n\n  return {\n    ...params,\n    event_time: Math.floor(Date.now() / 1000),\n    event_source_url: window.location.href,\n    page_title: document.title || '',\n    page_path: window.location.pathname,\n    page_url: window.location.href,\n    browser_language: navigator.language || '',\n    screen_width: window.screen.width,\n    screen_height: window.screen.height,\n    viewport_width: window.innerWidth,\n    viewport_height: window.innerHeight,\n    referrer: document.referrer || undefined\n  };\n}\n\n/**\n * Verifica se um evento já foi enviado (deduplicação)\n */\nfunction isEventAlreadySent(eventName: string, eventId: string): boolean {\n  if (typeof window === 'undefined') return false;\n  \n  try {\n    const stored = localStorage.getItem(STORAGE_KEY);\n    if (!stored) return false;\n    \n    const events = JSON.parse(stored);\n    const key = `${eventName}_${eventId}`;\n    \n    // Verifica se o evento existe e não expirou (24 horas)\n    if (events[key]) {\n      const now = Date.now();\n      const maxAge = 24 * 60 * 60 * 1000; // 24 horas\n      \n      if (now - events[key] < maxAge) {\n        logger.info(LogCategory.META_PIXEL, `Evento duplicado ignorado: ${eventName}`, { eventId });\n        return true;\n      }\n    }\n    \n    return false;\n  } catch (error) {\n    logger.error(LogCategory.META_PIXEL, 'Erro ao verificar duplicação', { error });\n    return false;\n  }\n}\n\n/**\n * Marca um evento como enviado\n */\nfunction markEventAsSent(eventName: string, eventId: string): void {\n  if (typeof window === 'undefined') return;\n  \n  try {\n    const stored = localStorage.getItem(STORAGE_KEY) || '{}';\n    const events = JSON.parse(stored);\n    \n    // Adiciona o novo evento\n    events[`${eventName}_${eventId}`] = Date.now();\n    \n    // Remove eventos expirados (mais de 24 horas)\n    const now = Date.now();\n    const maxAge = 24 * 60 * 60 * 1000;\n    \n    Object.keys(events).forEach(key => {\n      if (now - events[key] > maxAge) {\n        delete events[key];\n      }\n    });\n    \n    localStorage.setItem(STORAGE_KEY, JSON.stringify(events));\n  } catch (error) {\n    logger.error(LogCategory.META_PIXEL, 'Erro ao marcar evento como enviado', { error });\n  }\n}\n\n/**\n * Envia evento para o Pixel do navegador\n */\nasync function sendPixelEvent(event: MetaPixelEvent): Promise<boolean> {\n  if (typeof window === 'undefined' || !window.fbq) return false;\n\n  try {\n    const { event_name, event_id, custom_data } = event;\n    \n    // Prepara os parâmetros do evento\n    const params = { ...custom_data };\n    \n    // Remove user_data dos parâmetros (não é enviado no pixel)\n    delete params.user_data;\n    \n    // Opções com eventID para deduplicação\n    const options = event_id ? { eventID: event_id } : {};\n    \n    // Verifica se é evento padrão ou customizado\n    const isStandardEvent = ['PageView', 'Lead', 'Purchase', 'CompleteRegistration', 'Contact'].includes(event_name);\n    \n    if (isStandardEvent) {\n      window.fbq('track', event_name, params, options);\n    } else {\n      window.fbq('trackCustom', event_name, params, options);\n    }\n    \n    logger.pixelEvent(event_name, event_id || 'unknown', isStandardEvent ? 'track' : 'trackCustom', true);\n    return true;\n  } catch (error) {\n    logger.error(LogCategory.META_PIXEL, `Erro ao enviar evento via Pixel: ${event.event_name}`, { error });\n    return false;\n  }\n}\n\n/**\n * Envia evento para a API de Conversões com IP real\n */\nasync function sendConversionAPI(event: MetaPixelEvent): Promise<boolean> {\n  try {\n    // Determinar URL da API baseada no ambiente\n    const apiUrl = getApiUrl();\n    \n    const payload = {\n      event_name: event.event_name,\n      event_time: event.event_time || Math.floor(Date.now() / 1000),\n      event_id: event.event_id,\n      event_source_url: window.location.href, // ✅ URL correta sem duplicação\n      action_source: event.action_source || 'website',\n      user_data: event.user_data || {},\n      custom_data: event.custom_data || {}\n    };\n\n    // Tentar usar a API route primeiro\n    try {\n      const response = await fetch(`${apiUrl}/api/meta/conversions`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify(payload)\n      });\n\n      if (response.ok) {\n        const result = await response.json();\n        logger.conversionApiEvent(event.event_name, event.event_id || 'unknown', true);\n        \n        // Log adicional com IP capturado\n        if (result.clientIP) {\n          logger.info(LogCategory.CONVERSION_API, `IP capturado: ${result.clientIP}`, {\n            event: event.event_name,\n            eventId: event.event_id\n          });\n        }\n        \n        return true;\n      } else {\n        const error = await response.text();\n        logger.warn(LogCategory.CONVERSION_API, `API route não disponível, tentando Meta API direta: ${event.event_name}`, { \n          status: response.status,\n          error \n        });\n        // Continuar para tentar Meta API direta\n      }\n    } catch (apiRouteError) {\n      logger.warn(LogCategory.CONVERSION_API, `API route não disponível, tentando Meta API direta: ${event.event_name}`, { error: apiRouteError });\n      // Continuar para tentar Meta API direta\n    }\n\n    // Fallback: Enviar diretamente para Meta API (sem captura de IP)\n    return await sendDirectToMetaAPI(event);\n    \n  } catch (error) {\n    logger.error(LogCategory.CONVERSION_API, `Erro ao enviar para API: ${event.event_name}`, { error });\n    return false;\n  }\n}\n\n/**\n * Determina a URL da API baseada no ambiente\n */\nfunction getApiUrl(): string {\n  // Em desenvolvimento, usa a mesma origem ou localhost\n  if (import.meta.env.DEV) {\n    return 'http://localhost:3000'; // Ajuste a porta do seu servidor local\n  }\n  \n  // Em produção, usa a mesma origem (relativo)\n  return '';\n}\n\n\n\n/**\n * Envia evento diretamente para Meta API (fallback quando API route não está disponível)\n */\nasync function sendDirectToMetaAPI(event: MetaPixelEvent): Promise<boolean> {\n  try {\n    // Obter configuração do Meta via configureMetaPixel\n    const accessToken = META_PIXEL_CONFIG.ACCESS_TOKEN;\n    const pixelId = META_PIXEL_CONFIG.PIXEL_ID;\n    const testEventCode = META_PIXEL_CONFIG.TEST_EVENT_CODE;\n\n    if (!accessToken || !pixelId) {\n      logger.error(LogCategory.CONVERSION_API, 'Configuração do Meta Pixel incompleta para envio direto', {\n        hasAccessToken: !!accessToken,\n        hasPixelId: !!pixelId\n      });\n      return false;\n    }\n\n    // Preparar dados do usuário (sem IP real)\n    // ✅ Os dados já vêm no formato correto (arrays) da função prepareUserData\n    const userData: any = {\n      ...event.user_data,\n      // ✅ Dados não hasheados - SEMPRE incluir cookies do Facebook\n      fbc: event.user_data?.fbc || getFbc() || undefined,\n      fbp: event.user_data?.fbp || getFbp() || undefined,\n      client_user_agent: event.user_data?.client_user_agent || navigator.userAgent || 'unknown'\n    };\n\n    // ✅ Remover placeholder do IP se existir (será preenchido pelo Meta automaticamente)\n    if (userData.client_ip_address === 'SERÁ_PREENCHIDO_PELO_BACKEND') {\n      delete userData.client_ip_address;\n    }\n\n    // Log dos dados de usuário para debug\n    logger.info(LogCategory.CONVERSION_API, 'Dados de usuário preparados:', {\n      event: event.event_name,\n      eventId: event.event_id,\n      userDataKeys: Object.keys(userData).filter(key => (userData as any)[key] !== undefined),\n      hasEmail: !!userData.em,\n      hasPhone: !!userData.ph,\n      hasName: !!userData.fn || !!userData.ln,\n      hasLocation: !!userData.ct || !!userData.st || !!userData.zp || !!userData.country,\n      hasExternalId: !!userData.external_id\n    });\n\n    // Construir payload para Meta\n    const payload: any = {\n      data: [{\n        event_name: event.event_name,\n        event_time: event.event_time,\n        event_id: event.event_id,\n        event_source_url: event.event_source_url,\n        action_source: event.action_source || 'website',\n        user_data: userData,\n        custom_data: event.custom_data || {}\n      }]\n    };\n\n    // Adicionar test_event_code se estiver em modo de teste\n    if (testEventCode) {\n      payload.test_event_code = testEventCode;\n    }\n\n    // Enviar para Meta Conversions API (v23)\n    const metaResponse = await fetch(\n      `https://graph.facebook.com/v23.0/${pixelId}/events?access_token=${accessToken}`,\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify(payload)\n      }\n    );\n\n    const result = await metaResponse.json();\n\n    if (!metaResponse.ok) {\n      logger.error(LogCategory.CONVERSION_API, 'Erro na Meta API direta:', {\n        event: event.event_name,\n        eventId: event.event_id,\n        status: metaResponse.status,\n        error: result\n      });\n      return false;\n    }\n\n    // Log de sucesso\n    logger.info(LogCategory.CONVERSION_API, 'Evento enviado diretamente para Meta:', {\n      event: event.event_name,\n      eventId: event.event_id,\n      method: 'direct_api',\n      success: true\n    });\n\n    return true;\n\n  } catch (error) {\n    logger.error(LogCategory.CONVERSION_API, 'Erro ao enviar diretamente para Meta API:', { error });\n    return false;\n  }\n}\n\nexport function useMetaPixel(): MetaPixelHook {\n  const [isInitialized, setIsInitialized] = useState(false);\n\n  // Inicializar o pixel\n  const initializePixel = useCallback((pixelId: string) => {\n    if (typeof window === 'undefined') return;\n\n    if (!isMetaPixelConfigured()) {\n      console.error('[META PIXEL] Package não configurado. Use configureMetaPixel()');\n      return;\n    }\n\n    logger.info(LogCategory.INIT, 'Inicializando Meta Pixel', { pixelId });\n\n    // Carregar script do Facebook\n    loadFacebookPixelScript();\n\n    // Inicializar o pixel\n    initFacebookPixel();\n\n    // Marcar como inicializado\n    setIsInitialized(true);\n  }, []);\n\n  // Função principal para rastrear eventos\n  const trackEvent = useCallback(async (\n    eventName: string,\n    params: Record<string, any> = {},\n    options: MetaPixelOptions = {}\n  ): Promise<void> => {\n    if (typeof window === 'undefined') return;\n\n    try {\n      // Gerar Event ID para deduplicação\n      const eventId = options.eventID || generateEventId(eventName.toLowerCase());\n\n      // Verificar duplicação\n      if (isEventAlreadySent(eventName, eventId)) {\n        return;\n      }\n\n      // Adicionar parâmetros universais\n      const enhancedParams = addUniversalParameters(params);\n\n      // Preparar dados do usuário para advanced matching\n      // ✅ CRÍTICO: Usar options.user_data se disponível, senão preparar de params\n      const userData = options.user_data || prepareUserData(params);\n\n      // Criar objeto do evento\n      const event: MetaPixelEvent = {\n        event_name: eventName,\n        event_id: eventId,\n        event_time: Math.floor(Date.now() / 1000),\n        event_source_url: window.location.href,\n        action_source: 'website',\n        user_data: userData,\n        custom_data: enhancedParams\n      };\n\n      // Enviar para o Pixel\n      const pixelSuccess = await sendPixelEvent(event);\n\n      // Enviar para a API de Conversões\n      const apiSuccess = await sendConversionAPI(event);\n\n      // Marcar como enviado se pelo menos um método funcionou\n      if (pixelSuccess || apiSuccess) {\n        markEventAsSent(eventName, eventId);\n      }\n\n      // Logs específicos por tipo de evento\n      switch (eventName) {\n        case 'PageView':\n          logger.pageView(eventId, enhancedParams);\n          break;\n        case 'Lead':\n          logger.lead(eventId, enhancedParams, userData);\n          break;\n        case 'LeadQualificado':\n          logger.leadQualificado(eventId, enhancedParams, userData);\n          break;\n        case 'Scroll':\n          logger.scroll(params.scroll_depth || 0, eventId, enhancedParams);\n          break;\n        default:\n          logger.info(LogCategory.META_PIXEL, `Evento processado: ${eventName}`, {\n            eventId,\n            pixelSuccess,\n            apiSuccess\n          });\n      }\n    } catch (error) {\n      logger.error(LogCategory.META_PIXEL, `Erro ao processar evento: ${eventName}`, { error });\n    }\n  }, []);\n\n  // Função específica para PageView\n  const trackPageView = useCallback(async (userData?: Record<string, any>): Promise<void> => {\n    await trackEvent('PageView', {}, { user_data: userData });\n  }, [trackEvent]);\n\n  // Função para PageView com dados de usuário (para melhor advanced matching)\n  const trackPageViewWithUserData = useCallback(async (userData?: Record<string, any>): Promise<void> => {\n    // Sempre incluir cookies do Facebook para melhor advanced matching\n    const enhancedUserData = {\n      ...userData,\n      fbp: getFbp(),\n      fbc: getFbc(),\n    };\n    await trackEvent('PageView', {}, { user_data: enhancedUserData });\n  }, [trackEvent]);\n\n  // Função específica para Lead\n  const trackLead = useCallback(async (\n    leadData: {\n      email?: string;\n      phone?: string;\n      name?: string;\n      value?: number;\n      currency?: string;\n      content_name?: string;\n      [key: string]: any;\n    }\n  ): Promise<void> => {\n    const { email, phone, name, city, state, zip, country, ...customData } = leadData;\n    \n    // Debug para verificar dados recebidos\n    logger.info(LogCategory.META_PIXEL, 'trackLead - Dados recebidos:', {\n      email: email || 'não fornecido',\n      phone: phone || 'não fornecido',\n      name: name || 'não fornecido',\n      city: city || 'não fornecido',\n      state: state || 'não fornecido'\n    });\n    \n    // Preparar user_data corretamente\n    const userData = prepareUserData({ email, phone, name, city, state, zip, country });\n    \n    await trackEvent('Lead', customData, {\n      user_data: userData\n    });\n  }, [trackEvent]);\n\n  // Função específica para Lead Qualificado\n  const trackLeadQualificado = useCallback(async (\n    leadData: {\n      email?: string;\n      phone?: string;\n      name?: string;\n      value?: number;\n      currency?: string;\n      lead_score?: number;\n      qualification_reason?: string;\n      [key: string]: any;\n    }\n  ): Promise<void> => {\n    const { email, phone, name, city, state, zip, country, ...customData } = leadData;\n    \n    // Debug para verificar dados recebidos\n    logger.info(LogCategory.META_PIXEL, 'trackLeadQualificado - Dados recebidos:', {\n      email: email || 'não fornecido',\n      phone: phone || 'não fornecido',\n      name: name || 'não fornecido',\n      city: city || 'não fornecido',\n      state: state || 'não fornecido'\n    });\n    \n    // Preparar user_data corretamente\n    const userData = prepareUserData({ email, phone, name, city, state, zip, country });\n    \n    await trackEvent('LeadQualificado', customData, {\n      user_data: userData\n    });\n  }, [trackEvent]);\n\n  // Função para eventos customizados\n  const trackCustomEvent = useCallback(async (\n    eventName: string,\n    params: Record<string, any> = {}\n  ): Promise<void> => {\n    await trackEvent(eventName, params);\n  }, [trackEvent]);\n\n  // Inicializar automaticamente\n  useEffect(() => {\n    if (typeof window === 'undefined') return;\n\n    if (!isInitialized && !window._fbPixelInitialized) {\n      initializePixel(META_PIXEL_CONFIG.PIXEL_ID);\n    }\n  }, [isInitialized, initializePixel]);\n\n  return {\n    trackEvent,\n    trackPageView,\n    trackPageViewWithUserData,\n    trackLead,\n    trackLeadQualificado,\n    trackCustomEvent,\n    initializePixel,\n    isInitialized: isInitialized || !!window._fbPixelInitialized,\n    // Funções anti-adblock\n    isPixelBlocked: () => isPixelBlocked(),\n    getBlockingStats: () => getPixelBlockingStats()\n  };\n} ","\"use client\"\n\nimport { useEffect, useState } from \"react\"\nimport { useMetaPixel } from \"@/lib/hooks/use-meta-pixel\"\nimport { META_PIXEL_CONFIG } from \"@/lib/config/meta-pixel\"\nimport logger, { LogCategory } from \"@/lib/utils/logger\"\n\ninterface MetaPixelProviderProps {\n  children: React.ReactNode\n  userData?: Record<string, any> // Dados do usuário para advanced matching\n}\n\n/**\n * Meta Pixel Provider\n * \n * IMPORTANTE: Este componente é responsável por:\n * 1. Inicializar o Facebook Pixel (fbq('init')) uma única vez na aplicação\n * 2. Garantir que o PageView inicial seja disparado após a inicialização\n * 3. Gerenciar estado de inicialização e evitar duplicações\n * 4. Recarregar eventos PageView em mudanças de rota\n * 5. Disponibilizar a função global window.sendMetaEvent para todos os componentes\n * 6. Incluir advanced matching em todos os PageViews\n */\nexport function MetaPixelProvider({ children, userData }: MetaPixelProviderProps) {\n  const { initializePixel, trackEvent, trackPageView, isInitialized } = useMetaPixel()\n  const [pageViewSent, setPageViewSent] = useState(false)\n  const [initializationCompleted, setInitializationCompleted] = useState(false)\n\n  // Efeito para definir a função global sendMetaEvent\n  useEffect(() => {\n    if (typeof window === 'undefined') return;\n    \n    // Definir a função sendMetaEvent no objeto window se ainda não existir\n    if (!window.sendMetaEvent) {\n      window.sendMetaEvent = (eventName, params = {}, options = {}) => {\n        logger.info(\n          LogCategory.META_PIXEL,\n          `Enviando evento ${eventName} via window.sendMetaEvent`,\n          { \n            hasParams: Object.keys(params).length > 0, \n            hasOptions: Object.keys(options).length > 0\n          }\n        );\n        \n        return trackEvent(eventName, params, options);\n      };\n      \n      logger.info(\n        LogCategory.INIT,\n        'Função window.sendMetaEvent definida globalmente',\n        { timestamp: Date.now() }\n      );\n    }\n  }, [trackEvent]);\n\n  // Efeito para inicializar o Meta Pixel uma vez\n  useEffect(() => {\n    if (typeof window === \"undefined\") return\n    \n    // Evita múltiplas inicializações\n    if (window._fbPixelInitialized) {\n      logger.debug(LogCategory.INIT, \"Meta Pixel já inicializado anteriormente\", {\n        pixelId: META_PIXEL_CONFIG.PIXEL_ID\n      })\n      setInitializationCompleted(true)\n      return\n    }\n\n    // Validar se o Pixel ID está configurado\n    if (!META_PIXEL_CONFIG.PIXEL_ID || META_PIXEL_CONFIG.PIXEL_ID.trim() === '') {\n      logger.error(\n        LogCategory.INIT,\n        \"Invalid PixelID: Pixel ID está vazio ou não configurado\",\n        { \n          pixelId: META_PIXEL_CONFIG.PIXEL_ID,\n          configValues: {\n            PIXEL_ID: META_PIXEL_CONFIG.PIXEL_ID,\n            ACCESS_TOKEN: META_PIXEL_CONFIG.ACCESS_TOKEN ? 'Configurado' : 'Não configurado',\n            TEST_EVENT_CODE: META_PIXEL_CONFIG.TEST_EVENT_CODE || 'Não configurado'\n          }\n        }\n      )\n      return\n    }\n\n    // Log de inicialização\n    logger.info(\n      LogCategory.INIT, \n      \"Iniciando provider do Meta Pixel\", \n      { \n        pixelId: META_PIXEL_CONFIG.PIXEL_ID,\n        userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n        url: typeof window !== 'undefined' ? window.location.href : 'unknown',\n        hasUserData: !!userData\n      }\n    )\n\n    // Iniciar rastreamento dos eventos do Facebook\n    // Coloca um pequeno delay para garantir que o script base foi carregado\n    setTimeout(() => {\n      initializePixel(META_PIXEL_CONFIG.PIXEL_ID)\n      \n      // Marca como inicializado globalmente para evitar dupla inicialização\n      window._fbPixelInitialized = true\n      setInitializationCompleted(true)\n      \n      // Log para confirmar inicio\n      if (typeof window !== 'undefined' && (import.meta.env.MODE === 'development' || import.meta.env.MODE === 'preview')) {\n        console.info(\n          '[Meta Pixel] Sistema de tracking ativado. Use window._metaPixelLogs no console para acessar os logs.'\n        )\n      }\n    }, 200)\n  }, [initializePixel])\n\n  // Efeito para enviar PageView após a inicialização\n  useEffect(() => {\n    if (typeof window === \"undefined\") return\n    if (!initializationCompleted || !isInitialized) return\n    if (pageViewSent) return\n\n    // Garantir que o PageView seja chamado após o carregamento completo da página\n    // Usamos um timer com mais delay (500ms) para garantir que todos os cookies estejam configurados\n    const timer = setTimeout(() => {\n      logger.info(\n        LogCategory.PAGE_VIEW, \n        \"Enviando PageView inicial após inicialização do Meta Pixel\",\n        { \n          url: window.location.href,\n          title: document.title,\n          timestamp: Date.now(),\n          hasUserData: !!userData\n        }\n      )\n      \n      // Aguardar mais 100ms para garantir que o cookie _fbp tenha sido configurado\n      setTimeout(() => {\n        // Enviar PageView com dados do usuário para advanced matching\n        trackPageView(userData)\n        setPageViewSent(true)\n        \n        logger.debug(\n          LogCategory.PAGE_VIEW, \n          \"PageView inicial enviado com advanced matching\",\n          { \n            timestamp: Date.now(),\n            url: window.location.href,\n            hasUserData: !!userData\n          }\n        )\n      }, 100)\n    }, 500) // Pequeno delay para garantir que tudo está carregado\n    \n    return () => clearTimeout(timer)\n  }, [isInitialized, trackPageView, pageViewSent, initializationCompleted, userData])\n\n  // Efeito para enviar PageView em mudanças de rota\n  useEffect(() => {\n    if (typeof window === \"undefined\") return\n    \n    const handleRouteChange = () => {\n      // Resetar o estado em mudanças de rota\n      setPageViewSent(false)\n    }\n    \n    // Adicionar listener para mudanças de URL\n    window.addEventListener('popstate', handleRouteChange)\n    \n    // Observar mudanças na URL para SPAs\n    let lastUrl = window.location.href\n    const observer = new MutationObserver(() => {\n      const currentUrl = window.location.href\n      if (currentUrl !== lastUrl) {\n        lastUrl = currentUrl\n        handleRouteChange()\n      }\n    })\n    \n    observer.observe(document, { subtree: true, childList: true })\n    \n    return () => {\n      window.removeEventListener('popstate', handleRouteChange)\n      observer.disconnect()\n    }\n  }, [])\n\n  return <>{children}</>\n} ","\"use client\"\n\nimport { useEffect, useRef } from \"react\"\nimport { useMetaPixel } from \"./use-meta-pixel\"\nimport logger, { LogCategory } from \"@/lib/utils/logger\"\n\n/**\n * Hook para rastrear scroll progressivo\n * Dispara eventos de scroll em diferentes profundidades (25%, 50%, 75%, 100%)\n */\nexport function useScrollTracking(userData?: Record<string, any>) {\n  const { trackEvent } = useMetaPixel()\n  const scrollDepths = useRef<Set<number>>(new Set())\n  const lastScrollY = useRef(0)\n\n  useEffect(() => {\n    if (typeof window === \"undefined\") return\n\n    const handleScroll = () => {\n      const scrollY = window.scrollY\n      const windowHeight = window.innerHeight\n      const documentHeight = document.documentElement.scrollHeight\n      const maxScroll = documentHeight - windowHeight\n\n      if (maxScroll <= 0) return\n\n      // Calcular porcentagem de scroll\n      const scrollPercentage = Math.round((scrollY / maxScroll) * 100)\n\n      // Definir profundidades de scroll para rastrear\n      const depths = [25, 50, 75, 100]\n\n      // Verificar se atingiu alguma nova profundidade\n      depths.forEach(depth => {\n        if (scrollPercentage >= depth && !scrollDepths.current.has(depth)) {\n          scrollDepths.current.add(depth)\n\n          // Enviar evento de scroll com dados completos\n          trackEvent('Scroll', {\n            scroll_depth: depth,\n            scroll_percentage: scrollPercentage,\n            scroll_y: scrollY,\n            page_url: window.location.href,\n            page_title: document.title,\n            page_path: window.location.pathname,\n            window_height: windowHeight,\n            document_height: documentHeight,\n            max_scroll: maxScroll,\n          }, {\n            user_data: userData\n          }).then(() => {\n            // Log será feito automaticamente no hook principal\n          }).catch((error) => {\n            logger.error(\n              LogCategory.SCROLL,\n              `Erro ao enviar evento Scroll ${depth}%`,\n              { error: error instanceof Error ? error.message : String(error) }\n            );\n          });\n        }\n      })\n\n      lastScrollY.current = scrollY\n    }\n\n    // Adicionar listener com throttling\n    let ticking = false\n    const throttledHandleScroll = () => {\n      if (!ticking) {\n        requestAnimationFrame(() => {\n          handleScroll()\n          ticking = false\n        })\n        ticking = true\n      }\n    }\n\n    window.addEventListener('scroll', throttledHandleScroll, { passive: true })\n\n    return () => {\n      window.removeEventListener('scroll', throttledHandleScroll)\n    }\n  }, [trackEvent, userData])\n\n  return null\n} ","\"use client\"\n\nimport { useEffect } from \"react\"\nimport { useMetaPixel } from \"@/lib/hooks/use-meta-pixel\"\nimport { useScrollTracking } from \"@/lib/hooks/use-scroll-tracking\"\nimport { loadFacebookPixelScript } from '@/lib/facebook-pixel-init'\n\ninterface MetaPixelProps {\n  pixelId: string\n}\n\nexport function MetaPixel({ pixelId }: MetaPixelProps) {\n  const { isInitialized, trackPageView } = useMetaPixel()\n\n  useEffect(() => {\n    if (isInitialized) {\n      trackPageView()\n    }\n  }, [isInitialized, trackPageView])\n\n  useScrollTracking();\n\n  useEffect(() => {\n    loadFacebookPixelScript()\n  }, [])\n\n  return (\n    <>\n      {/* Fallback para navegadores sem JavaScript */}\n      <noscript>\n        <img\n          height=\"1\"\n          width=\"1\"\n          style={{ display: 'none' }}\n          src={`https://www.facebook.com/tr?id=${pixelId}&ev=PageView&noscript=1`}\n          alt=\"\"\n          fetchPriority=\"low\"\n        />\n      </noscript>\n    </>\n  )\n} "],"names":["META_PIXEL_CONFIG","LogCategory","LogLevel","category","module","this","Math","undefined","global","require","require$$0","n","SHA256","H","isInitialized","useState","useCallback","useEffect","useRef","jsx","Fragment"],"mappings":"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","x_google_ignoreList":[4,5]}