{"version":3,"sources":["../src/utils.ts","../src/TopAnalyzeSDK.ts","../src/index.ts"],"names":["getTelegramUserData","tg","user","isTelegramWebAppAvailable","BASE_URL","API_URL","MAX_PAYLOAD_SIZE","MAX_STRING_LENGTH","MAX_ARRAY_LENGTH","ALLOWED_TELEGRAM_EVENTS","TopAnalyzeSDK","config","tonConnectInstance","eventName","payload","error","timestamp","random","event","importantClicks","target","clickData","originalPushState","originalReplaceState","state","title","url","uiInstance","originalOpenModal","address","client","result","originalSendTransaction","transaction","originalConnect","wallet","type","data","category","walletOverride","platformOverride","fallbackPlatform","device","app","platform","transport","version","walletCandidate","eventData","batch","events","mainEvents","sanitizedEvents","eventType","eventProperties","props","item","sanitized","key","value","sanitizedKey","handleUnload","index_default"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { UserData } from './types';\n\n/**\n * Получить данные пользователя из Telegram WebApp API\n */\nexport function getTelegramUserData(): UserData {\n  const tg = (window as any).Telegram?.WebApp;\n\n  if (tg?.initDataUnsafe?.user) {\n    const user = tg.initDataUnsafe.user;\n    return {\n      telegramId: user.id,\n      locale: user.language_code,\n      premium: user.is_premium || false,\n      telegramUsername: user.username,\n      telegramFirstname: user.first_name,\n      telegramLastname: user.last_name,\n      telegramPlatform: tg.platform,\n      startapp: tg.initDataUnsafe.start_param,\n      userProperties: {},\n    };\n  }\n\n  throw new Error('Telegram WebApp API недоступен');\n}\n\n/**\n * Проверить, доступен ли Telegram WebApp API\n */\nexport function isTelegramWebAppAvailable(): boolean {\n  return !!(window as any).Telegram?.WebApp;\n}\n","import {\n  type TopAnalyzeConfig,\n  type UserData,\n  type AnalyticsEvent,\n  type TonConnectInstance,\n  type TonConnectUI,\n  type TelegramEventNames,\n  EventNames,\n  EVENT_CATEGORY,\n  type MainEventSchema,\n} from './types';\nimport { getTelegramUserData, isTelegramWebAppAvailable } from './utils';\n\nconst BASE_URL = 'https://analyze.playdeck.io';\nconst API_URL = `${BASE_URL}/v1/e`;\n\n// Limits for validation\nconst MAX_PAYLOAD_SIZE = 100000; // 100KB\nconst MAX_STRING_LENGTH = 1000;\nconst MAX_ARRAY_LENGTH = 100;\n\n// Allowed Telegram events for analytics\nconst ALLOWED_TELEGRAM_EVENTS: TelegramEventNames[] = [\n  'invoiceClosed',\n  'settingsButtonClicked',\n  'backButtonClicked',\n  'mainButtonClicked',\n  'secondaryButtonClicked',\n  'popupClosed',\n  'qrTextReceived',\n  'clipboardTextReceived',\n  'writeAccessRequested',\n  'contactRequested',\n  'scanQrPopupClosed',\n  'activated',\n  'deactivated',\n  'fullscreenChanged',\n  'fullscreenFailed',\n  'homeScreenAdded',\n  'homeScreenChecked',\n  'locationManagerUpdated',\n  'locationRequested',\n  'shareMessageSent',\n  'shareMessageFailed',\n  'emojiStatusSet',\n  'emojiStatusFailed',\n  'emojiStatusAccessRequested',\n  'fileDownloadRequested',\n];\n\nexport class TopAnalyzeSDK {\n  private readonly appName: string;\n  private readonly userData: UserData | null;\n  private readonly debug: boolean;\n  private readonly maxBatchSize = 10;\n  private readonly batchInterval = 5000;\n  private readonly onlyImportantClicks: boolean;\n  private readonly apiToken: string;\n\n  private sessionId: string;\n  private sessionStartTime: number;\n  private isStarted = false;\n  private events: AnalyticsEvent[] = [];\n  private batchTimer: ReturnType<typeof setTimeout> | null = null;\n  private tonConnectInstance: TonConnectInstance | null = null;\n  private tonConnectUIOriginal: TonConnectUI | null = null;\n  private lastWalletInfo: { client?: string; address?: string } | null = null;\n\n  constructor(config: TopAnalyzeConfig) {\n    this.appName = config.appName;\n    this.userData = this.initUserData();\n    this.debug = config.debug ?? false;\n    this.sessionId = this.generateSessionId();\n    this.sessionStartTime = Date.now();\n    this.onlyImportantClicks = config.onlyImportantClicks ?? false;\n    this.apiToken = config.apiToken;\n\n    this.setupPageUnloadHandlers();\n  }\n\n  /**\n   * Start tracking\n   */\n  start(): void {\n    if (this.isStarted) return;\n\n    this.isStarted = true;\n    this.setupEventListeners();\n    this.setupTelegramEventListeners();\n    this.sendEvent(\n      EventNames.SESSION_START,\n      {\n        pageUrl: window.location.href,\n        userAgent: navigator.userAgent,\n      },\n      EVENT_CATEGORY.WEB\n    );\n    this.sendEvent(\n      EventNames.PAGE_VIEW,\n      {\n        pageUrl: window.location.href,\n        userAgent: navigator.userAgent,\n      },\n      EVENT_CATEGORY.WEB\n    );\n\n    if (this.debug) {\n      console.log('🚀 Top Analyze SDK started', {\n        sessionId: this.sessionId,\n        appName: this.appName,\n      });\n    }\n  }\n\n  /**\n   * Stop tracking\n   */\n  stop(): void {\n    if (!this.isStarted) return;\n\n    this.isStarted = false;\n    this.removeEventListeners();\n    this.flushEvents();\n    if (this.debug) {\n      console.log('🚀 Top Analyze SDK stopped', {\n        sessionId: this.sessionId,\n        appName: this.appName,\n      });\n    }\n  }\n\n  /**\n   * Attach TON Connect\n   */\n  attachTonConnect(tonConnectInstance: TonConnectInstance | TonConnectUI): void {\n    // Convert TonConnectUI to TonConnectInstance if needed\n    if ('connector' in tonConnectInstance) {\n      // It's TonConnectUI - сохраняем оригинал для проксирования\n      this.tonConnectUIOriginal = tonConnectInstance;\n\n      // Создаем обертку для совместимости\n      this.tonConnectInstance = {\n        sendTransaction: tonConnectInstance.sendTransaction.bind(tonConnectInstance),\n        connect: tonConnectInstance.connector.connect.bind(tonConnectInstance.connector),\n        disconnect: tonConnectInstance.disconnect.bind(tonConnectInstance),\n        onStatusChange: tonConnectInstance.onStatusChange.bind(tonConnectInstance),\n        get wallet() {\n          return tonConnectInstance.wallet;\n        },\n      };\n    } else {\n      // It's already TonConnectInstance\n      this.tonConnectInstance = tonConnectInstance;\n      this.tonConnectUIOriginal = null;\n    }\n\n    this.setupTonConnectProxies();\n    this.setupTonConnectStatusListener();\n\n    // Инициализируем информацию о кошельке, если он уже подключен\n    if (this.tonConnectInstance.wallet) {\n      this.updateWalletInfo();\n    }\n\n    if (this.debug) {\n      console.log('🚀 Top Analyze SDK attached TON Connect', {\n        sessionId: this.sessionId,\n        appName: this.appName,\n      });\n    }\n  }\n\n  /**\n   * Send custom event\n   */\n  track(eventName: string, payload: Record<string, any> = {}): void {\n    this.sendEvent(\n      EventNames.CUSTOM,\n      { eventName, payload: payload ?? {} },\n      EVENT_CATEGORY.CUSTOM\n    );\n  }\n\n  /**\n   * Get session info\n   */\n  getSessionInfo() {\n    return {\n      sessionId: this.sessionId,\n      duration: Date.now() - this.sessionStartTime,\n      isActive: this.isStarted,\n    };\n  }\n\n  /**\n   * Получить статус SDK\n   */\n  getStatus() {\n    return {\n      isInitialized: true,\n      isStarted: this.isStarted,\n      isTonConnectAttached: this.tonConnectInstance !== null,\n      appName: this.appName,\n    };\n  }\n\n  /**\n   * Получить информацию о TON кошельке\n   */\n  getTonWalletInfo(): { client?: string; address?: string } | null {\n    if (!this.tonConnectInstance?.wallet) return null;\n\n    try {\n      return {\n        client: this.formatWalletClient(),\n        address: this.tonConnectInstance.wallet.account?.address,\n      };\n    } catch (error) {\n      if (this.debug) console.log('Error getting wallet info:', error);\n      return null;\n    }\n  }\n\n  // Приватные методы\n\n  private initUserData(): UserData | null {\n    try {\n      if (isTelegramWebAppAvailable()) {\n        return getTelegramUserData();\n      }\n    } catch (error) {\n      if (this.debug) console.log('Error getting Telegram user data:', error);\n    }\n\n    return null;\n  }\n\n  private generateSessionId(): string {\n    const timestamp = Date.now().toString(36);\n    const random = Math.random().toString(36).substr(2, 9);\n    return `session_${timestamp}_${random}`;\n  }\n\n  private setupEventListeners(): void {\n    if (typeof window === 'undefined') return;\n\n    // Клики\n    document.addEventListener('click', this.handleClick.bind(this), true);\n\n    // Смена страницы\n    window.addEventListener('popstate', this.handlePageView.bind(this));\n\n    // Отслеживание изменений URL через History API\n    this.setupHistoryTracking();\n  }\n\n  private removeEventListeners(): void {\n    if (typeof window === 'undefined') return;\n\n    document.removeEventListener('click', this.handleClick.bind(this), true);\n    window.removeEventListener('popstate', this.handlePageView.bind(this));\n  }\n\n  private handleClick(event: MouseEvent): void {\n    const importantClicks = ['button', 'input', 'textarea', 'select', 'a', 'img'];\n    if (\n      this.onlyImportantClicks &&\n      !importantClicks.includes((event.target as Element).tagName.toLowerCase())\n    ) {\n      return;\n    }\n\n    const target = event.target as Element;\n    if (!target) return;\n\n    const clickData = {\n      element_tag: target.tagName.toLowerCase(),\n      element_text: target.textContent?.trim()?.slice(0, 100),\n      element_slug:\n        target.getAttribute('data-analytics-slug') ||\n        target.id ||\n        (typeof target.className === 'string'\n          ? target.className.split(' ')[0]\n          : target.className?.[0]),\n      coordinates: {\n        clientX: event.clientX,\n        clientY: event.clientY,\n        pageX: event.pageX,\n        pageY: event.pageY,\n      },\n      pageUrl: window.location.href,\n    };\n\n    this.sendEvent(EventNames.CLICK, clickData, EVENT_CATEGORY.WEB);\n  }\n\n  private handlePageView(): void {\n    this.sendEvent(\n      EventNames.PAGE_VIEW,\n      {\n        pageUrl: window.location.href,\n        userAgent: navigator.userAgent,\n      },\n      EVENT_CATEGORY.WEB\n    );\n  }\n\n  private setupHistoryTracking(): void {\n    if (typeof window === 'undefined') return;\n\n    // Сохраняем оригинальные методы History API\n    const originalPushState = history.pushState;\n    const originalReplaceState = history.replaceState;\n\n    // Перехватываем pushState\n    history.pushState = function (state, title, url) {\n      originalPushState.call(history, state, title, url);\n      // Отправляем событие смены страницы\n      window.dispatchEvent(new PopStateEvent('popstate', { state }));\n    };\n\n    // Перехватываем replaceState\n    history.replaceState = function (state, title, url) {\n      originalReplaceState.call(history, state, title, url);\n      // Отправляем событие смены страницы\n      window.dispatchEvent(new PopStateEvent('popstate', { state }));\n    };\n  }\n\n  private setupTonConnectProxies(): void {\n    if (!this.tonConnectInstance) return;\n\n    // Если это TonConnectUI, проксируем openModal и sendTransaction\n    if (this.tonConnectUIOriginal) {\n      const uiInstance = this.tonConnectUIOriginal;\n\n      // Проксирование openModal для отслеживания начала подключения\n      if (uiInstance.openModal) {\n        const originalOpenModal = uiInstance.openModal.bind(uiInstance);\n        uiInstance.openModal = () => {\n          if (this.debug) {\n            console.log('🔵 [TON CONNECT] openModal() called');\n          }\n          // Отправляем событие начала подключения\n          const { address, client } = this.buildWalletConnectStartInfo();\n          this.sendTonWalletEvent(EventNames.WALLET_CONNECT_START, {\n            ton_wallet_address: address,\n            ton_wallet_client: client,\n          });\n\n          try {\n            const result = originalOpenModal();\n            if (this.debug) {\n              console.log('🟢 [TON CONNECT] openModal() completed');\n            }\n            return result;\n          } catch (error) {\n            if (this.debug) {\n              console.error('🔴 [TON CONNECT] openModal() error:', error);\n            }\n            throw error;\n          }\n        };\n      }\n\n      // Проксирование sendTransaction для TonConnectUI\n      const originalSendTransaction = uiInstance.sendTransaction.bind(uiInstance);\n      uiInstance.sendTransaction = async (transaction: any) => {\n        if (this.debug) {\n          console.log('🔵 [TON CONNECT] sendTransaction() called:', transaction);\n        }\n        try {\n          this.sendTonWalletEvent(EventNames.TRANSACTION_SENT_FOR_SIGNATURE, {\n            transaction,\n          });\n          const result = await originalSendTransaction(transaction);\n          if (this.debug) {\n            console.log('🟢 [TON CONNECT] sendTransaction() completed:', result);\n          }\n          this.sendTonWalletEvent(EventNames.TRANSACTION_SIGNED, { transaction, result });\n          return result;\n        } catch (error) {\n          if (this.debug) {\n            console.error('🔴 [TON CONNECT] sendTransaction() error:', error);\n          }\n          this.sendTonWalletEvent(EventNames.TRANSACTION_SIGNING_FAILED, {\n            transaction,\n            error: String(error),\n          });\n          throw error;\n        }\n      };\n    } else {\n      // Для обычного TonConnectInstance проксируем обертку\n      const originalConnect = this.tonConnectInstance.connect;\n      this.tonConnectInstance.connect = async (wallet?: any) => {\n        // Отправляем событие начала подключения\n        const { address, client } = this.buildWalletConnectStartInfo(wallet);\n        this.sendTonWalletEvent(EventNames.WALLET_CONNECT_START, {\n          ton_wallet_address: address,\n          ton_wallet_client: client,\n        });\n\n        try {\n          const result = await originalConnect.call(this.tonConnectInstance, wallet);\n          return result;\n        } catch (error) {\n          // Отправляем событие при ошибке\n          this.sendTonWalletEvent(EventNames.WALLET_CONNECT_ERROR, {\n            error: String(error),\n            error_code: (error as any)?.code || (error as any)?.message || 'unknown',\n          });\n          throw error;\n        }\n      };\n\n      // Проксирование sendTransaction\n      const originalSendTransaction = this.tonConnectInstance.sendTransaction;\n      this.tonConnectInstance.sendTransaction = async (transaction: any) => {\n        try {\n          this.sendTonWalletEvent(EventNames.TRANSACTION_SENT_FOR_SIGNATURE, {\n            transaction,\n          });\n          const result = await originalSendTransaction.call(\n            this.tonConnectInstance,\n            transaction\n          );\n          this.sendTonWalletEvent(EventNames.TRANSACTION_SIGNED, { transaction, result });\n          return result;\n        } catch (error) {\n          this.sendTonWalletEvent(EventNames.TRANSACTION_SIGNING_FAILED, {\n            transaction,\n            error: String(error),\n          });\n          throw error;\n        }\n      };\n    }\n  }\n\n  private setupTonConnectStatusListener(): void {\n    if (!this.tonConnectInstance?.onStatusChange) return;\n\n    this.tonConnectInstance.onStatusChange((wallet: any) => {\n      if (wallet) {\n        // Обновляем информацию о кошельке при подключении\n        this.updateWalletInfo();\n        this.sendTonWalletEvent(EventNames.WALLET_CONNECTED);\n      } else {\n        // При отключении сначала отправляем событие с текущими данными\n        this.sendTonWalletEvent(EventNames.WALLET_DISCONNECTED);\n        // Затем очищаем информацию\n        this.lastWalletInfo = null;\n      }\n    });\n  }\n\n  private sendEvent(\n    type: EventNames | TelegramEventNames,\n    data: any,\n    category: EVENT_CATEGORY\n  ): void {\n    if (!this.isStarted) return;\n\n    const event: AnalyticsEvent = {\n      type,\n      timestamp: Date.now(),\n      sessionId: this.sessionId,\n      appName: this.appName,\n      data,\n      eventCategory: category,\n    };\n\n    this.events.push(event);\n\n    if (this.events.length >= this.maxBatchSize) {\n      this.flushEvents();\n    } else {\n      this.startBatchTimer();\n    }\n  }\n\n  private updateWalletInfo(): void {\n    this.lastWalletInfo = this.getTonWalletInfo();\n  }\n\n  /**\n   * Определение типа транспорта на основе косвенных факторов\n   */\n  private detectWalletTransport(walletOverride?: any): string {\n    const wallet = walletOverride ?? this.tonConnectInstance?.wallet;\n\n    if (!wallet) return 'unknown';\n\n    try {\n      // Проверяем наличие bridge\n      if (wallet.connectItems?.tonProof || wallet.provider) {\n        // HTTP Bridge - обычно используется когда есть provider\n        if (wallet.provider || wallet.device?.features?.includes('SendTransaction')) {\n          return 'http';\n        }\n      }\n\n      // JS Bridge - обычно для embedded кошельков или расширений\n      if (wallet.embedded || wallet.injected) {\n        return 'js';\n      }\n\n      // SSE (Server-Sent Events) - используется некоторыми bridge-решениями\n      if (wallet.device?.features?.includes('SSE')) {\n        return 'sse';\n      }\n\n      // По умолчанию предполагаем HTTP для большинства кошельков\n      return 'http';\n    } catch (error) {\n      if (this.debug) console.log('Error detecting transport:', error);\n      return 'unknown';\n    }\n  }\n\n  private formatWalletClientFromWallet(wallet: any, platformOverride?: string): string {\n    const fallbackPlatform = platformOverride || 'unknown';\n\n    if (!wallet) {\n      return `unknown/${fallbackPlatform}/unknown/unknown`;\n    }\n\n    try {\n      const device = wallet.device || {};\n\n      const app = device.appName || device.name || 'unknown';\n      const platform = platformOverride || device.platform || 'unknown';\n      const transport = this.detectWalletTransport(wallet);\n      const version = device.appVersion || 'unknown';\n\n      return `${app}/${platform}/${transport}/${version}`;\n    } catch (error) {\n      if (this.debug) console.log('Error formatting wallet client:', error);\n      return `unknown/${fallbackPlatform}/unknown/unknown`;\n    }\n  }\n\n  /**\n   * Форматирование информации о кошельке в строку App/Platform/Transport/Version\n   */\n  private formatWalletClient(): string {\n    return this.formatWalletClientFromWallet(this.tonConnectInstance?.wallet);\n  }\n\n  private buildWalletConnectStartInfo(walletCandidate?: any): {\n    address: string | null;\n    client: string;\n  } {\n    const wallet = walletCandidate ?? this.tonConnectInstance?.wallet;\n    const platform = this.userData?.telegramPlatform || 'unknown';\n\n    return {\n      address: wallet?.account?.address ?? null,\n      client: this.formatWalletClientFromWallet(wallet, platform),\n    };\n  }\n\n  private sendTonWalletEvent(type: EventNames, data: any = {}): void {\n    const eventData = {\n      ...data,\n      ton_wallet_address:\n        data?.ton_wallet_address ?? this.lastWalletInfo?.address ?? null,\n      ton_wallet_client: data?.ton_wallet_client ?? this.lastWalletInfo?.client ?? null,\n    };\n\n    this.sendEvent(type, eventData, EVENT_CATEGORY.WALLET);\n  }\n\n  private startBatchTimer(): void {\n    if (this.batchTimer) return;\n\n    this.batchTimer = setTimeout(() => {\n      this.flushEvents();\n    }, this.batchInterval);\n  }\n\n  private flushEvents(): void {\n    if (this.events.length === 0) return;\n\n    const batch = [...this.events];\n    this.events = [];\n\n    if (this.batchTimer) {\n      clearTimeout(this.batchTimer);\n      this.batchTimer = null;\n    }\n\n    this.sendBatchToAPI(batch);\n  }\n\n  private async sendBatchToAPI(events: AnalyticsEvent[]): Promise<void> {\n    try {\n      const mainEvents: MainEventSchema[] = events.map((event) =>\n        this.normalizeSchema(event)\n      );\n\n      // Валидация размера payload\n      if (!this.validatePayloadSize(mainEvents)) {\n        if (this.debug) {\n          console.warn('⚠️ Top Analyze: payload is too large, skipping send');\n        }\n        return;\n      }\n\n      // Санитизация данных\n      const sanitizedEvents = this.sanitizeData(mainEvents);\n\n      if (this.debug) {\n        console.group(`📊 Top Analyze: sending ${sanitizedEvents.length} events`);\n        sanitizedEvents.forEach((event: any) =>\n          console.log(`${event.type} [${event.ts}]`, event)\n        );\n        console.groupEnd();\n      }\n\n      await fetch(API_URL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', 'X-Auth-TAS': this.apiToken },\n        body: JSON.stringify(sanitizedEvents),\n      });\n    } catch (error) {\n      console.error('❌ Top Analyze: error sending batch:', error);\n    }\n  }\n\n  private normalizeSchema(event: AnalyticsEvent): MainEventSchema {\n    const eventType = event.type === 'custom' ? 'CUSTOM' : 'AUTO';\n    const eventName = event.type === 'custom' ? event.data.eventName : event.type;\n    const eventProperties =\n      event.type === 'custom'\n        ? event.data.payload\n        : this.extractEventProperties(event.data);\n\n    return {\n      type: eventType,\n      source: this.appName,\n      ts: new Date(event.timestamp).toISOString(),\n      pagePath: event.data.pageUrl || window.location.href,\n      pageReferrer: document.referrer || '',\n      name: eventName,\n      telegramId: this.userData?.telegramId || null,\n      locale: this.userData?.locale || 'unknown',\n      premium: this.userData?.premium || false,\n      userAgent: event.data.userAgent || navigator.userAgent,\n      sessionId: event.sessionId,\n      startapp: this.userData?.startapp || null,\n      telegramUsername: this.userData?.telegramUsername || null,\n      telegramFirstname: this.userData?.telegramFirstname || null,\n      telegramLastname: this.userData?.telegramLastname || null,\n      telegramPlatform: this.userData?.telegramPlatform || null,\n      eventCategory: event.eventCategory as EVENT_CATEGORY,\n      eventProperties,\n      userProperties: {},\n    };\n  }\n\n  private extractEventProperties(data: any): any {\n    const props: any = {};\n\n    if (data.element_tag) props.element_tag = data.element_tag;\n    if (data.element_text) props.element_text = data.element_text;\n    if (data.element_slug) props.element_slug = data.element_slug;\n    if (data.coordinates) props.coordinates = data.coordinates;\n    if (data.ton_wallet_address) props.ton_wallet_address = data.ton_wallet_address;\n    if (data.ton_wallet_client) props.ton_wallet_client = data.ton_wallet_client;\n    if (data.ton_tx_amount_nano) props.ton_tx_amount_nano = data.ton_tx_amount_nano;\n    if (data.ton_tx_request_id) props.ton_tx_request_id = data.ton_tx_request_id;\n    if (data.error) props.error = data.error;\n    if (data.error_code) props.error_code = data.error_code;\n    if (data.telegram_event_name) props.telegram_event_name = data.telegram_event_name;\n    if (data.telegram_event_data) props.telegram_event_data = data.telegram_event_data;\n\n    return props;\n  }\n\n  private validatePayloadSize(data: any): boolean {\n    try {\n      const jsonString = JSON.stringify(data);\n      return jsonString.length <= MAX_PAYLOAD_SIZE;\n    } catch (error) {\n      if (this.debug) console.log('Error validating payload size:', error);\n      return false;\n    }\n  }\n\n  private sanitizeData(data: any): any {\n    if (data === null || data === undefined) return data;\n\n    if (typeof data === 'string') {\n      // Trim too long strings\n      return data.length > MAX_STRING_LENGTH ? data.slice(0, MAX_STRING_LENGTH) : data;\n    }\n\n    if (Array.isArray(data)) {\n      // Limit array length\n      const limitedArray = data.slice(0, MAX_ARRAY_LENGTH);\n      return limitedArray.map((item) => this.sanitizeData(item));\n    }\n\n    if (typeof data === 'object') {\n      const sanitized: any = {};\n      for (const [key, value] of Object.entries(data)) {\n        // Limit key length\n        const sanitizedKey = key.length > 100 ? key.slice(0, 100) : key;\n        sanitized[sanitizedKey] = this.sanitizeData(value);\n      }\n      return sanitized;\n    }\n\n    return data;\n  }\n\n  private setupTelegramEventListeners(): void {\n    if (typeof window === 'undefined') return;\n    if (!isTelegramWebAppAvailable()) return;\n\n    const tg = (window as any).Telegram?.WebApp;\n    if (!tg?.onEvent) return;\n\n    // Подписываемся на все разрешенные события Telegram\n    ALLOWED_TELEGRAM_EVENTS.forEach((eventName) => {\n      tg.onEvent(eventName, (eventData: any) => {\n        this.handleTelegramEvent(eventName, eventData);\n      });\n    });\n\n    if (this.debug) {\n      console.log('🚀 Top Analyze SDK: Telegram event listeners setup completed', {\n        eventsCount: ALLOWED_TELEGRAM_EVENTS.length,\n      });\n    }\n  }\n\n  private handleTelegramEvent(eventName: TelegramEventNames, eventData: any): void {\n    if (!this.isStarted) return;\n\n    this.sendEvent(\n      eventName,\n      {\n        telegram_event_data: eventData,\n        pageUrl: window.location.href,\n      },\n      EVENT_CATEGORY.TELEGRAM\n    );\n\n    if (this.debug) {\n      console.log('📱 Telegram Event:', eventName, eventData);\n    }\n  }\n\n  private setupPageUnloadHandlers(): void {\n    if (typeof window === 'undefined') return;\n\n    const handleUnload = () => this.flushEvents();\n    window.addEventListener('beforeunload', handleUnload);\n    window.addEventListener('pagehide', handleUnload);\n    document.addEventListener('visibilitychange', () => {\n      if (document.visibilityState === 'hidden') this.flushEvents();\n    });\n  }\n}\n","/**\n * Top Analyze SDK - упрощенная аналитика для TON Mini Apps\n *\n * @example\n * ```typescript\n * import { TopAnalyzeSDK } from '@top/analyze-sdk'\n *\n * const analytics = new TopAnalyzeSDK({\n *   appName: 'MyTonApp',\n *   debug: true\n * })\n * analytics.start()\n *\n * // TON Connect\n * analytics.attachTonConnect(tonConnectInstance)\n *\n * // Кастомные события\n * analytics.track('game_score', { score: 1500, level: 3 })\n * ```\n */\n\nimport { TopAnalyzeSDK } from './TopAnalyzeSDK';\nimport type { TopAnalyzeConfig, TonConnectInstance } from './types';\n\nexport { TopAnalyzeSDK };\nexport type { TopAnalyzeConfig, TonConnectInstance };\n\n// Дефолтный экспорт\nexport default TopAnalyzeSDK;\n"]}