{"version":3,"sources":["../src/index.ts","../src/schemas.ts","../src/managers/api.ts","../src/managers/storage.ts","../src/managers/capture.ts","../src/managers/upload.ts","../src/managers/websocket.ts"],"sourcesContent":["export * from './schemas';\nexport * from './managers/api';\nexport * from './managers/storage';\nexport * from './managers/capture';\nexport * from './managers/upload';\nexport * from './managers/websocket';\n","import { z } from 'zod';\n\nexport const ViewportSchema = z.object({\n  w: z.number(),\n  h: z.number(),\n});\n\nexport const MetaSchema = z.object({\n  url: z.string(),\n  route: z.string(),\n  ts: z.number(),\n  locale: z.string().optional(),\n  viewport: ViewportSchema,\n  ua: z.string().optional(),\n  appVersion: z.string().optional(),\n  release: z.string().optional(),\n  featureFlags: z.record(z.string(), z.boolean()).optional(),\n});\n\nexport const ConsoleLogSchema = z.object({\n  level: z.enum(['error', 'warn', 'info', 'log']),\n  message: z.string(),\n  ts: z.number(),\n  stack: z.string().optional(),\n});\n\nexport const NetworkLogSchema = z.object({\n  url: z.string(),\n  method: z.string(),\n  status: z.number(),\n  durationMs: z.number(),\n  ts: z.number(),\n});\n\nexport const FormDataSchema = z.object({\n  summary: z.string().min(1, 'Summary is required'),\n  steps: z.string().optional(),\n  expected: z.string().optional(),\n  actual: z.string().optional(),\n  severity: z.enum(['low', 'medium', 'high', 'critical']).optional(),\n  category: z.string().optional(),\n  additionalInfo: z.string().optional(),\n});\n\nexport const ChatHistoryMessageSchema = z.object({\n  role: z.string().min(1, 'Role is required'),\n  content: z.string().min(1, 'Message content is required'),\n  timestamp: z.number().optional(),\n});\n\nexport const TriageRequestSchema = z.object({\n  messages: z.array(ChatHistoryMessageSchema).min(1),\n});\n\nexport const TriageFormDataSchema = z.object({\n  summary: z.string().min(1).optional(),\n  description: z.string().optional(),\n  steps: z.string().optional(),\n  expected: z.string().optional(),\n  actual: z.string().optional(),\n  severity: z.string().optional(),\n  category: z.string().optional(),\n});\n\nexport const TriageSuggestedMetaSchema = z.object({\n  message_count: z.number().optional(),\n  triage_source: z.string().optional(),\n  confidence: z.string().optional(),\n});\n\nexport const TriageResponseSchema = z.object({\n  form_data: TriageFormDataSchema,\n  suggested_meta: TriageSuggestedMetaSchema.optional(),\n});\n\nexport const AttachmentSchema = z.object({\n  name: z.string(),\n  mime: z.string(),\n  dataUrl: z.string(),\n});\n\nexport const IssueReportPayloadSchema = z.object({\n  publishableKey: z.string(),\n  user: z.string().optional(),\n  reportBy: z.string().optional(),\n  meta: MetaSchema,\n  console: z.array(ConsoleLogSchema).optional(),\n  network: z.array(NetworkLogSchema).optional(),\n  custom: z.record(z.string(), z.unknown()).optional(),\n  form: FormDataSchema,\n  // Attachments are NOT sent in JSON - they use signed URL uploads\n});\n\nexport const DiagnosticSchema = z.object({\n  headline: z.string(),\n  probableCause: z.string().optional(),\n  suggestedFix: z.string().optional(),\n  relatedIssues: z.array(z.object({\n    id: z.string(),\n    title: z.string(),\n  })).optional(),\n  tags: z.array(z.string()).optional(),\n});\n\nexport const DiagnosticResponseSchema = z.object({\n  issueId: z.string(),\n  status: z.enum(['pending', 'ready', 'error']),\n  diagnostic: DiagnosticSchema.optional(),\n  error: z.string().optional(),\n});\n\nexport const ChatAttachmentSchema = z.object({\n  url: z.string(),\n  name: z.string(),\n  mime: z.string(),\n});\n\nexport const SupportChatMessageSchema = z.object({\n  id: z.string(),\n  type: z.enum(['user', 'agent', 'system']),\n  content: z.string(),\n  timestamp: z.number(),\n  attachments: z.array(ChatAttachmentSchema).optional(),\n  agentId: z.string().optional(),\n  agentName: z.string().optional(),\n});\n\nexport const ChatSessionSchema = z.object({\n  sessionId: z.string(),\n  messages: z.array(SupportChatMessageSchema),\n  createdAt: z.number(),\n  updatedAt: z.number(),\n});\n\n// Helper types for function properties\nexport type CustomRedactorFn = (input: string) => string;\nexport type OnAfterSubmitFn = (issueId: string) => void;\nexport type OnErrorFn = (error: Error) => void;\n\nexport const BlarioConfigSchema = z.object({\n  publishableKey: z.string(),\n  apiBaseUrl: z.string().default('https://api.blar.io'),\n  reportBy: z.string().optional(),\n  locale: z.enum(['en', 'es']).default('en'),\n  capture: z.object({\n    console: z.boolean().default(true),\n    networkSample: z.boolean().default(false),\n    maxConsoleLogs: z.number().default(50),\n    maxNetworkLogs: z.number().default(20),\n  }).optional(),\n  theme: z.object({\n    mode: z.enum(['light', 'dark']).default('light'),\n    position: z.enum(['bottom-right', 'bottom-left', 'top-right', 'top-left']).default('bottom-right'),\n    accent: z.string().optional(),\n    className: z.string().optional(),\n  }).optional(),\n  redaction: z.object({\n    patterns: z.array(z.instanceof(RegExp)).optional(),\n    // Using z.custom for Zod v3/v4 compatibility\n    customRedactor: z.custom<CustomRedactorFn>((val) => typeof val === 'function').optional(),\n  }).optional(),\n  rateLimit: z.object({\n    maxRequests: z.number().default(10),\n    windowMs: z.number().default(60000),\n  }).optional(),\n  // Using z.custom for Zod v3/v4 compatibility\n  onAfterSubmit: z.custom<OnAfterSubmitFn>((val) => typeof val === 'function').optional(),\n  onError: z.custom<OnErrorFn>((val) => typeof val === 'function').optional(),\n});\n\nexport type Viewport = z.infer<typeof ViewportSchema>;\nexport type Meta = z.infer<typeof MetaSchema>;\nexport type ConsoleLog = z.infer<typeof ConsoleLogSchema>;\nexport type NetworkLog = z.infer<typeof NetworkLogSchema>;\nexport type FormData = z.infer<typeof FormDataSchema>;\nexport type ChatHistoryMessage = z.infer<typeof ChatHistoryMessageSchema>;\nexport type TriageRequest = z.infer<typeof TriageRequestSchema>;\nexport type TriageFormData = z.infer<typeof TriageFormDataSchema>;\nexport type TriageSuggestedMeta = z.infer<typeof TriageSuggestedMetaSchema>;\nexport type TriageResponse = z.infer<typeof TriageResponseSchema>;\nexport type Attachment = z.infer<typeof AttachmentSchema>;\nexport type IssueReportPayload = z.infer<typeof IssueReportPayloadSchema>;\nexport type Diagnostic = z.infer<typeof DiagnosticSchema>;\nexport type DiagnosticResponse = z.infer<typeof DiagnosticResponseSchema>;\nexport type BlarioConfig = z.infer<typeof BlarioConfigSchema>;\nexport type ChatAttachment = z.infer<typeof ChatAttachmentSchema>;\nexport type SupportChatMessage = z.infer<typeof SupportChatMessageSchema>;\nexport type ChatSession = z.infer<typeof ChatSessionSchema>;\n","import {\n  IssueReportPayloadSchema,\n  TriageRequestSchema,\n  TriageResponseSchema,\n  type ChatHistoryMessage,\n  type IssueReportPayload,\n  type TriageResponse,\n} from '../schemas';\n\nexport interface ApiClientConfig {\n  apiBaseUrl: string;\n  publishableKey: string;\n  maxRetries?: number;\n  retryDelayMs?: number;\n  timeoutMs?: number;\n  headers?: Record<string, string>;\n}\n\nexport class ApiError extends Error {\n  constructor(\n    message: string,\n    public status?: number,\n    public data?: unknown\n  ) {\n    super(message);\n    this.name = 'ApiError';\n  }\n}\n\nexport class ApiClient {\n  private config: Required<ApiClientConfig>;\n  private abortController?: AbortController;\n\n  constructor(config: ApiClientConfig) {\n    this.config = {\n      maxRetries: 3,\n      retryDelayMs: 1000,\n      timeoutMs: 30000,\n      headers: {},\n      ...config,\n    };\n  }\n\n  getConfig(): Required<ApiClientConfig> {\n    return this.config;\n  }\n\n  private async fetchWithRetry(\n    url: string,\n    options: RequestInit,\n    retries = 0\n  ): Promise<Response> {\n    try {\n      this.abortController = new AbortController();\n\n      const timeoutId = setTimeout(() => {\n        this.abortController?.abort();\n      }, this.config.timeoutMs);\n\n      const response = await fetch(url, {\n        ...options,\n        signal: this.abortController.signal,\n        headers: {\n          'Content-Type': 'application/json',\n          'X-Publishable-Key': this.config.publishableKey,\n          ...this.config.headers,\n          ...options.headers,\n        },\n      });\n\n      clearTimeout(timeoutId);\n\n      if (!response.ok && retries < this.config.maxRetries) {\n        const shouldRetry = response.status >= 500 || response.status === 429;\n\n        if (shouldRetry) {\n          const delay = this.config.retryDelayMs * Math.pow(2, retries);\n          await new Promise(resolve => setTimeout(resolve, delay));\n          return this.fetchWithRetry(url, options, retries + 1);\n        }\n      }\n\n      return response;\n    } catch (error) {\n      if (error instanceof Error) {\n        if (error.name === 'AbortError') {\n          throw new ApiError('Request timeout');\n        }\n\n        if (retries < this.config.maxRetries) {\n          const delay = this.config.retryDelayMs * Math.pow(2, retries);\n          await new Promise(resolve => setTimeout(resolve, delay));\n          return this.fetchWithRetry(url, options, retries + 1);\n        }\n      }\n\n      throw error;\n    }\n  }\n\n  async submitIssue(payload: IssueReportPayload): Promise<{ issueId: string }> {\n    const validation = IssueReportPayloadSchema.safeParse(payload);\n    if (!validation.success) {\n      console.error('Validation errors:', JSON.stringify(validation.error.errors, null, 2));\n      console.error('Payload:', JSON.stringify(payload, null, 2));\n      throw new ApiError('Invalid payload', 400, validation.error.errors);\n    }\n\n    const url = `${this.config.apiBaseUrl}/api/support/issue`;\n\n    try {\n      const response = await this.fetchWithRetry(url, {\n        method: 'POST',\n        body: JSON.stringify(validation.data),\n      });\n\n      if (!response.ok) {\n        const errorData = await response.json().catch(() => null) as { message?: string } | null;\n        throw new ApiError(\n          errorData?.message ?? `Failed to submit issue: ${response.statusText}`,\n          response.status,\n          errorData\n        );\n      }\n\n      const data = await response.json() as { issueId?: string };\n\n      if (!data.issueId) {\n        throw new ApiError('Invalid response: missing issueId');\n      }\n\n      return { issueId: data.issueId };\n    } catch (error) {\n      if (error instanceof ApiError) {\n        throw error;\n      }\n\n      throw new ApiError(\n        error instanceof Error ? error.message : 'Failed to submit issue'\n      );\n    }\n  }\n\n  async generateIssuePrefill(\n    messages: ChatHistoryMessage[]\n  ): Promise<TriageResponse> {\n    const validation = TriageRequestSchema.safeParse({ messages });\n    if (!validation.success) {\n      throw new ApiError('Invalid chat history payload', 400, validation.error.errors);\n    }\n\n    const url = `${this.config.apiBaseUrl}/api/support/triage`;\n\n    try {\n      const response = await this.fetchWithRetry(url, {\n        method: 'POST',\n        body: JSON.stringify(validation.data),\n      });\n\n      if (!response.ok) {\n        const errorData = await response.json().catch(() => null) as { message?: string } | null;\n        throw new ApiError(\n          errorData?.message ?? `Failed to generate issue prefill: ${response.statusText}`,\n          response.status,\n          errorData\n        );\n      }\n\n      const data = await response.json() as unknown;\n      const parsed = TriageResponseSchema.safeParse(data);\n\n      if (!parsed.success) {\n        throw new ApiError('Invalid response from triage endpoint', response.status, parsed.error.errors);\n      }\n\n      return parsed.data;\n    } catch (error) {\n      if (error instanceof ApiError) {\n        throw error;\n      }\n\n      throw new ApiError(\n        error instanceof Error\n          ? error.message\n          : 'Failed to generate issue prefill'\n      );\n    }\n  }\n\n\n\n  abort(): void {\n    this.abortController?.abort();\n  }\n}\n\nlet apiClientInstance: ApiClient | null = null;\n\nexport function getApiClient(config: ApiClientConfig): ApiClient {\n  if (!apiClientInstance) {\n    apiClientInstance = new ApiClient(config);\n  }\n  return apiClientInstance;\n}\n\nexport function resetApiClient(): void {\n  if (apiClientInstance) {\n    apiClientInstance.abort();\n    apiClientInstance = null;\n  }\n}\n","import type { DiagnosticResponse, ChatSession, SupportChatMessage } from '../schemas';\n\nconst STORAGE_PREFIX = 'blario_';\nconst DIAGNOSTICS_KEY = `${STORAGE_PREFIX}diagnostics`;\nconst CHAT_SESSION_KEY = `${STORAGE_PREFIX}chat_session`;\nconst CHAT_MESSAGES_KEY = `${STORAGE_PREFIX}chat_messages`;\nconst MAX_STORED_DIAGNOSTICS = 10;\nconst MAX_STORED_CHAT_MESSAGES = 100;\n\nexport interface StoredDiagnostic extends DiagnosticResponse {\n  timestamp: number;\n  viewed: boolean;\n}\n\nclass StorageManager {\n  private isAvailable: boolean = false;\n\n  constructor() {\n    this.isAvailable = this.checkStorageAvailability();\n  }\n\n  private checkStorageAvailability(): boolean {\n    if (typeof window === 'undefined') return false;\n\n    try {\n      const testKey = `${STORAGE_PREFIX}test`;\n      localStorage.setItem(testKey, 'test');\n      localStorage.removeItem(testKey);\n      return true;\n    } catch {\n      console.warn('localStorage is not available');\n      return false;\n    }\n  }\n\n  saveDiagnostic(diagnostic: DiagnosticResponse): void {\n    if (!this.isAvailable) return;\n\n    try {\n      const stored: StoredDiagnostic = {\n        ...diagnostic,\n        timestamp: Date.now(),\n        viewed: false,\n      };\n\n      const diagnostics = this.getAllDiagnostics();\n      diagnostics.unshift(stored);\n\n      if (diagnostics.length > MAX_STORED_DIAGNOSTICS) {\n        diagnostics.splice(MAX_STORED_DIAGNOSTICS);\n      }\n\n      localStorage.setItem(DIAGNOSTICS_KEY, JSON.stringify(diagnostics));\n    } catch (error) {\n      console.error('Failed to save diagnostic:', error);\n    }\n  }\n\n  getAllDiagnostics(): StoredDiagnostic[] {\n    if (!this.isAvailable) return [];\n\n    try {\n      const data = localStorage.getItem(DIAGNOSTICS_KEY);\n      if (!data) return [];\n\n      const diagnostics = JSON.parse(data);\n      return Array.isArray(diagnostics) ? diagnostics : [];\n    } catch (error) {\n      console.error('Failed to retrieve diagnostics:', error);\n      return [];\n    }\n  }\n\n  getLatestDiagnostic(): StoredDiagnostic | null {\n    const diagnostics = this.getAllDiagnostics();\n    return diagnostics[0] ?? null;\n  }\n\n  getUnviewedDiagnostics(): StoredDiagnostic[] {\n    return this.getAllDiagnostics().filter(d => !d.viewed);\n  }\n\n  markDiagnosticAsViewed(issueId: string): void {\n    if (!this.isAvailable) return;\n\n    try {\n      const diagnostics = this.getAllDiagnostics();\n      const updated = diagnostics.map(d =>\n        d.issueId === issueId ? { ...d, viewed: true } : d\n      );\n\n      localStorage.setItem(DIAGNOSTICS_KEY, JSON.stringify(updated));\n    } catch (error) {\n      console.error('Failed to mark diagnostic as viewed:', error);\n    }\n  }\n\n  clearDiagnostics(): void {\n    if (!this.isAvailable) return;\n\n    try {\n      localStorage.removeItem(DIAGNOSTICS_KEY);\n    } catch (error) {\n      console.error('Failed to clear diagnostics:', error);\n    }\n  }\n\n  saveItem(key: string, value: any): void {\n    if (!this.isAvailable) return;\n\n    try {\n      const storageKey = `${STORAGE_PREFIX}${key}`;\n      const data = JSON.stringify(value);\n      localStorage.setItem(storageKey, data);\n    } catch (error) {\n      console.error(`Failed to save ${key}:`, error);\n    }\n  }\n\n  getItem<T>(key: string): T | null {\n    if (!this.isAvailable) return null;\n\n    try {\n      const storageKey = `${STORAGE_PREFIX}${key}`;\n      const data = localStorage.getItem(storageKey);\n      return data ? JSON.parse(data) : null;\n    } catch (error) {\n      console.error(`Failed to retrieve ${key}:`, error);\n      return null;\n    }\n  }\n\n  removeItem(key: string): void {\n    if (!this.isAvailable) return;\n\n    try {\n      const storageKey = `${STORAGE_PREFIX}${key}`;\n      localStorage.removeItem(storageKey);\n    } catch (error) {\n      console.error(`Failed to remove ${key}:`, error);\n    }\n  }\n\n  clearAll(): void {\n    if (!this.isAvailable) return;\n\n    try {\n      const keys = Object.keys(localStorage);\n      keys.forEach(key => {\n        if (key.startsWith(STORAGE_PREFIX)) {\n          localStorage.removeItem(key);\n        }\n      });\n    } catch (error) {\n      console.error('Failed to clear all storage:', error);\n    }\n  }\n\n  // Chat-related storage methods\n\n  saveChatSession(session: ChatSession): void {\n    if (!this.isAvailable) return;\n\n    try {\n      localStorage.setItem(CHAT_SESSION_KEY, JSON.stringify(session));\n    } catch (error) {\n      console.error('Failed to save chat session:', error);\n    }\n  }\n\n  getChatSession(): ChatSession | null {\n    if (!this.isAvailable) return null;\n\n    try {\n      const data = localStorage.getItem(CHAT_SESSION_KEY);\n      if (!data) return null;\n\n      return JSON.parse(data) as ChatSession;\n    } catch (error) {\n      console.error('Failed to retrieve chat session:', error);\n      return null;\n    }\n  }\n\n  saveChatMessages(messages: SupportChatMessage[]): void {\n    if (!this.isAvailable) return;\n\n    try {\n      // Keep only the most recent messages\n      const messagesToStore = messages.slice(-MAX_STORED_CHAT_MESSAGES);\n      localStorage.setItem(CHAT_MESSAGES_KEY, JSON.stringify(messagesToStore));\n    } catch (error) {\n      console.error('Failed to save chat messages:', error);\n    }\n  }\n\n  getChatMessages(): SupportChatMessage[] {\n    if (!this.isAvailable) return [];\n\n    try {\n      const data = localStorage.getItem(CHAT_MESSAGES_KEY);\n      if (!data) return [];\n\n      const messages = JSON.parse(data);\n      return Array.isArray(messages) ? messages : [];\n    } catch (error) {\n      console.error('Failed to retrieve chat messages:', error);\n      return [];\n    }\n  }\n\n  addChatMessage(message: SupportChatMessage): void {\n    if (!this.isAvailable) return;\n\n    try {\n      const messages = this.getChatMessages();\n      messages.push(message);\n\n      // Keep only the most recent messages\n      const messagesToStore = messages.slice(-MAX_STORED_CHAT_MESSAGES);\n      localStorage.setItem(CHAT_MESSAGES_KEY, JSON.stringify(messagesToStore));\n    } catch (error) {\n      console.error('Failed to add chat message:', error);\n    }\n  }\n\n  clearChatHistory(): void {\n    if (!this.isAvailable) return;\n\n    try {\n      localStorage.removeItem(CHAT_SESSION_KEY);\n      localStorage.removeItem(CHAT_MESSAGES_KEY);\n    } catch (error) {\n      console.error('Failed to clear chat history:', error);\n    }\n  }\n}\n\nlet storageManagerInstance: StorageManager | null = null;\n\nexport function getStorageManager(): StorageManager {\n  if (!storageManagerInstance) {\n    storageManagerInstance = new StorageManager();\n  }\n  return storageManagerInstance;\n}\n\nexport function resetStorageManager(): void {\n    if (storageManagerInstance) {\n      storageManagerInstance.clearAll();\n      storageManagerInstance = null;\n    }\n}\n\n\n","import type { ConsoleLog, Meta, NetworkLog, Viewport } from '../schemas';\n\nexport interface CaptureConfig {\n  maxConsoleLogs: number;\n  maxNetworkLogs: number;\n  captureConsole: boolean;\n  captureNetwork: boolean;\n}\n\nexport type MetaProvider = {\n  getAppVersion?: () => string | undefined;\n  getRelease?: () => string | undefined;\n};\n\nclass RingBuffer<T> {\n  private buffer: T[] = [];\n  private maxSize: number;\n\n  constructor(maxSize: number) {\n    this.maxSize = maxSize;\n  }\n\n  push(item: T): void {\n    this.buffer.push(item);\n    if (this.buffer.length > this.maxSize) {\n      this.buffer.shift();\n    }\n  }\n\n  getAll(): T[] {\n    return [...this.buffer];\n  }\n\n  clear(): void {\n    this.buffer = [];\n  }\n}\n\nexport class CaptureManager {\n  private consoleLogs: RingBuffer<ConsoleLog>;\n  private networkLogs: RingBuffer<NetworkLog>;\n  private config: CaptureConfig;\n  private originalConsole: Record<string, any> = {};\n  private routeHistory: string[] = [];\n  private isCapturing = false;\n  private metaProvider?: MetaProvider;\n\n  constructor(config: Partial<CaptureConfig> = {}, metaProvider?: MetaProvider) {\n    this.config = {\n      maxConsoleLogs: config.maxConsoleLogs ?? 50,\n      maxNetworkLogs: config.maxNetworkLogs ?? 20,\n      captureConsole: config.captureConsole ?? true,\n      captureNetwork: config.captureNetwork ?? false,\n    };\n\n    this.consoleLogs = new RingBuffer(this.config.maxConsoleLogs);\n    this.networkLogs = new RingBuffer(this.config.maxNetworkLogs);\n    this.metaProvider = metaProvider;\n  }\n\n  startCapture(): void {\n    if (this.isCapturing) return;\n    this.isCapturing = true;\n\n    if (this.config.captureConsole) {\n      this.captureConsole();\n    }\n\n    if (this.config.captureNetwork) {\n      this.captureNetworkRequests();\n    }\n  }\n\n  stopCapture(): void {\n    if (!this.isCapturing) return;\n    this.isCapturing = false;\n\n    this.restoreConsole();\n  }\n\n  private captureConsole(): void {\n    if (typeof window === 'undefined') return;\n\n    const levels: Array<'error' | 'warn' | 'info' | 'log'> = ['error', 'warn', 'info', 'log'];\n\n    levels.forEach(level => {\n      this.originalConsole[level] = console[level];\n\n      console[level] = (...args: any[]) => {\n        const message = args\n          .map(arg => {\n            if (typeof arg === 'object') {\n              try {\n                return JSON.stringify(arg, null, 2);\n              } catch {\n                return String(arg);\n              }\n            }\n            return String(arg);\n          })\n          .join(' ');\n\n        const log: ConsoleLog = {\n          level,\n          message: this.redactSensitiveData(message),\n          ts: Date.now(),\n        };\n\n        if (level === 'error' && args[0] instanceof Error) {\n          log.stack = args[0].stack;\n        }\n\n        this.consoleLogs.push(log);\n        this.originalConsole[level](...args);\n      };\n    });\n  }\n\n  private restoreConsole(): void {\n    Object.keys(this.originalConsole).forEach(level => {\n      (console as any)[level] = this.originalConsole[level];\n    });\n  }\n\n  private captureNetworkRequests(): void {\n    if (typeof window === 'undefined' || !window.fetch) return;\n\n    const originalFetch = window.fetch;\n\n    window.fetch = async (...args: Parameters<typeof fetch>) => {\n      const startTime = Date.now();\n      const [input, init] = args;\n\n      const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;\n      const method = init?.method ?? 'GET';\n\n      try {\n        const response = await originalFetch(...args);\n\n        const log: NetworkLog = {\n          url: this.redactSensitiveData(url),\n          method,\n          status: response.status,\n          durationMs: Date.now() - startTime,\n          ts: startTime,\n        };\n\n        this.networkLogs.push(log);\n        return response;\n      } catch (error) {\n        const log: NetworkLog = {\n          url: this.redactSensitiveData(url),\n          method,\n          status: 0,\n          durationMs: Date.now() - startTime,\n          ts: startTime,\n        };\n\n        this.networkLogs.push(log);\n        throw error;\n      }\n    };\n  }\n\n  private redactSensitiveData(text: string): string {\n    const patterns = [\n      /\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b/g,\n      /\\b(?:\\d{4}[-\\s]?){3}\\d{4}\\b/g,\n      /\\b\\d{3}-\\d{2}-\\d{4}\\b/g,\n      /Bearer\\s+[A-Za-z0-9\\-._~+\\/]+=*/g,\n      /api[_-]?key[\"']?\\s*[:=]\\s*[\"']?[A-Za-z0-9\\-._~+\\/]+/gi,\n      /password[\"']?\\s*[:=]\\s*[\"']?[^\\s\"']+/gi,\n      /secret[\"']?\\s*[:=]\\s*[\"']?[^\\s\"']+/gi,\n      /token[\"']?\\s*[:=]\\s*[\"']?[A-Za-z0-9\\-._~+\\/]+/gi,\n    ];\n\n    let redacted = text;\n    patterns.forEach(pattern => {\n      redacted = redacted.replace(pattern, '[REDACTED]');\n    });\n\n    return redacted;\n  }\n\n  trackRoute(route: string): void {\n    this.routeHistory.push(route);\n    if (this.routeHistory.length > 10) {\n      this.routeHistory.shift();\n    }\n  }\n\n  getCaptureMeta(): Meta {\n    if (typeof window === 'undefined') {\n      return {\n        url: '',\n        route: '',\n        ts: Date.now(),\n        viewport: { w: 0, h: 0 },\n      };\n    }\n\n    const viewport: Viewport = {\n      w: window.innerWidth ?? 0,\n      h: window.innerHeight ?? 0,\n    };\n\n    return {\n      url: window.location.href,\n      route: this.routeHistory[this.routeHistory.length - 1] ?? window.location.pathname,\n      ts: Date.now(),\n      locale: navigator.language,\n      viewport,\n      ua: navigator.userAgent,\n      appVersion: this.metaProvider?.getAppVersion?.(),\n      release: this.metaProvider?.getRelease?.(),\n    };\n  }\n\n  getConsoleLogs(): ConsoleLog[] {\n    return this.consoleLogs.getAll();\n  }\n\n  getNetworkLogs(): NetworkLog[] {\n    return this.networkLogs.getAll();\n  }\n\n  getRouteHistory(): string[] {\n    return [...this.routeHistory];\n  }\n\n  clearAll(): void {\n    this.consoleLogs.clear();\n    this.networkLogs.clear();\n    this.routeHistory = [];\n  }\n}\n\nlet captureManagerInstance: CaptureManager | null = null;\n\nexport function getCaptureManager(config?: Partial<CaptureConfig>, metaProvider?: MetaProvider): CaptureManager {\n  if (!captureManagerInstance) {\n    captureManagerInstance = new CaptureManager(config, metaProvider);\n  }\n  return captureManagerInstance;\n}\n\nexport function resetCaptureManager(): void {\n  if (captureManagerInstance) {\n    captureManagerInstance.stopCapture();\n    captureManagerInstance = null;\n  }\n}\n\n","import type { ApiClient } from './api';\n\nexport interface FileMetadata {\n  name: string;\n  type: string;\n  size: number;\n}\n\nexport interface UploadConfig {\n  upload_url: string;\n  upload_token: string;\n  gcs_path: string;\n  expires_in: number;\n  max_size: number;\n  file_type: 'image' | 'video';\n  headers?: Record<string, string>;\n}\n\nexport interface PrepareUploadsRequest {\n  files: FileMetadata[];\n  issueId?: string;\n}\n\nexport interface PrepareUploadsResponse {\n  uploads: UploadConfig[];\n}\n\n\nexport interface VerifyAttachmentsResponse {\n  success: boolean;\n  attachments: Array<{\n    id: number;\n    name: string;\n    size: number;\n    type: string;\n    url: string;\n  }>;\n}\n\nexport class UploadManager {\n  private apiClient: ApiClient;\n\n  private readonly MAX_FILES = 5;\n  private readonly MAX_IMAGE_SIZE = 5 * 1024 * 1024;\n  private readonly MAX_VIDEO_SIZE = 50 * 1024 * 1024;\n\n  private readonly ALLOWED_IMAGE_TYPES = [\n    'image/png',\n    'image/jpeg',\n    'image/jpg',\n    'image/gif',\n    'image/webp',\n  ];\n\n  private readonly ALLOWED_VIDEO_TYPES = [\n    'video/mp4',\n    'video/webm',\n    'video/quicktime',\n    'video/x-msvideo',\n    'video/x-ms-wmv',\n  ];\n\n  constructor(apiClient: ApiClient) {\n    this.apiClient = apiClient;\n  }\n\n  async uploadFilesForIssue(\n    files: File[],\n    issueId: string,\n    onProgress?: (step: 'preparing' | 'uploading' | 'verifying' | 'complete', percent?: number) => void\n  ): Promise<string[]> {\n    if (!files || files.length === 0) {\n      return [];\n    }\n\n    this.validateFiles(files);\n\n    onProgress?.('preparing');\n    const uploadConfigs = await this.prepareUploads(files, issueId);\n\n    onProgress?.('uploading', 0);\n    const uploadTokens = await this.performUploads(files, uploadConfigs);\n    onProgress?.('uploading', 100);\n\n    onProgress?.('verifying');\n    const verificationResult = await this.verifyAttachments(issueId, uploadTokens);\n\n    if (!verificationResult.success) {\n      throw new Error('Failed to verify attachments. Files may not be properly linked to the issue.');\n    }\n\n    onProgress?.('complete');\n    return uploadTokens;\n  }\n\n  async uploadFiles(\n    files: File[],\n    onProgress?: (step: 'preparing' | 'uploading' | 'complete', percent?: number) => void\n  ): Promise<string[]> {\n    if (!files || files.length === 0) {\n      return [];\n    }\n\n    this.validateFiles(files);\n\n    onProgress?.('preparing');\n    const uploadConfigs = await this.prepareUploads(files);\n\n    onProgress?.('uploading', 0);\n    const uploadTokens = await this.performUploads(files, uploadConfigs);\n    onProgress?.('uploading', 100);\n\n    onProgress?.('complete');\n    return uploadTokens;\n  }\n\n  private async prepareUploads(files: File[], issueId?: string): Promise<UploadConfig[]> {\n    const fileMetadata: FileMetadata[] = files.map((file) => ({\n      name: file.name,\n      type: file.type,\n      size: file.size,\n    }));\n\n    const config = this.apiClient.getConfig();\n\n    const body: PrepareUploadsRequest = { files: fileMetadata };\n\n    if (issueId) {\n      body.issueId = issueId;\n    }\n\n    const response = await fetch(\n      `${config.apiBaseUrl}/api/support/attachments/prepare`,\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'X-Publishable-Key': config.publishableKey,\n        },\n        body: JSON.stringify(body),\n      }\n    );\n\n    if (!response.ok) {\n      const error = await response.json().catch(() => ({ message: 'Failed to prepare uploads' })) as { message?: string };\n      throw new Error(error?.message || `Failed to prepare uploads: ${response.status}`);\n    }\n\n    const data = await response.json() as PrepareUploadsResponse;\n    return data.uploads;\n  }\n\n  private async performUploads(\n    files: File[],\n    uploadConfigs: UploadConfig[]\n  ): Promise<string[]> {\n    const uploadPromises = uploadConfigs.map(async (config, index) => {\n      const file = files[index];\n\n      if (!file) {\n        throw new Error(`File at index ${index} is missing`);\n      }\n\n      try {\n        const additionalHeaders: Record<string, string> = {};\n\n        if (config.max_size) {\n          additionalHeaders['x-goog-content-length-range'] = `0,${config.max_size}`;\n        }\n\n        if (config.headers) {\n          Object.assign(additionalHeaders, config.headers);\n        }\n\n        const response = await this.uploadToGCS(config.upload_url, file, additionalHeaders);\n\n        if (!response.ok) {\n          throw new Error(`Upload failed with status ${response.status}`);\n        }\n\n        return config.upload_token;\n      } catch (error) {\n        throw new Error(`Failed to upload ${file.name}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n      }\n    });\n\n    return Promise.all(uploadPromises);\n  }\n\n  private async uploadToGCS(uploadUrl: string, file: File, additionalHeaders?: Record<string, string>): Promise<Response> {\n    const headers: Record<string, string> = {\n      'Content-Type': file.type || 'application/octet-stream',\n    };\n\n    if (additionalHeaders) {\n      Object.assign(headers, additionalHeaders);\n    }\n\n    return fetch(uploadUrl, {\n      method: 'PUT',\n      headers,\n      body: file,\n    });\n  }\n\n  async uploadWithProgress(\n    uploadUrl: string,\n    file: File,\n    onProgress?: (percent: number) => void\n  ): Promise<void> {\n    return new Promise((resolve, reject) => {\n      const xhr = new XMLHttpRequest();\n\n      if (onProgress) {\n        xhr.upload.addEventListener('progress', (event) => {\n          if (event.lengthComputable) {\n            const percentComplete = (event.loaded / event.total) * 100;\n            onProgress(percentComplete);\n          }\n        });\n      }\n\n      xhr.addEventListener('load', () => {\n        if (xhr.status === 200 || xhr.status === 201) {\n          resolve();\n        } else {\n          reject(new Error(`Upload failed with status ${xhr.status}`));\n        }\n      });\n\n      xhr.addEventListener('error', () => {\n        reject(new Error('Upload failed due to network error'));\n      });\n\n      xhr.addEventListener('abort', () => {\n        reject(new Error('Upload was cancelled'));\n      });\n\n      xhr.open('PUT', uploadUrl);\n      xhr.setRequestHeader('Content-Type', file.type);\n      xhr.send(file);\n    });\n  }\n\n  async verifyAttachments(issueId: string, uploadTokens: string[]): Promise<VerifyAttachmentsResponse> {\n    const config = this.apiClient.getConfig();\n\n    const response = await fetch(\n      `${config.apiBaseUrl}/api/support/attachments/verify`,\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'X-Publishable-Key': config.publishableKey,\n        },\n        body: JSON.stringify({\n          issue_id: issueId,\n          upload_tokens: uploadTokens,\n        }),\n      }\n    );\n\n    if (!response.ok) {\n      console.warn('Failed to verify some attachments');\n      return { success: false, attachments: [] };\n    }\n\n    return response.json() as Promise<VerifyAttachmentsResponse>;\n  }\n\n  private validateFiles(files: File[]): void {\n    if (files.length > this.MAX_FILES) {\n      throw new Error(`Maximum ${this.MAX_FILES} files allowed`);\n    }\n\n    for (const file of files) {\n      const isImage = this.ALLOWED_IMAGE_TYPES.includes(file.type);\n      const isVideo = this.ALLOWED_VIDEO_TYPES.includes(file.type);\n\n      if (!isImage && !isVideo) {\n        throw new Error(\n          `File type ${file.type} is not allowed. Supported types: images (PNG, JPEG, GIF, WebP) and videos (MP4, WebM, MOV, AVI, WMV)`\n        );\n      }\n\n      const maxSize = isVideo ? this.MAX_VIDEO_SIZE : this.MAX_IMAGE_SIZE;\n      const maxSizeLabel = isVideo ? '50MB' : '5MB';\n\n      if (file.size > maxSize) {\n        throw new Error(`File \"${file.name}\" exceeds the ${maxSizeLabel} limit`);\n      }\n    }\n  }\n\n  async uploadWithRetry(\n    uploadUrl: string,\n    file: File,\n    maxRetries: number = 3,\n    additionalHeaders?: Record<string, string>\n  ): Promise<Response> {\n    let lastError: Error | null = null;\n\n    for (let attempt = 0; attempt < maxRetries; attempt++) {\n      try {\n        const response = await this.uploadToGCS(uploadUrl, file, additionalHeaders);\n\n        if (response.ok) {\n          return response;\n        }\n\n        if (response.status === 401 || response.status === 403) {\n          throw new Error(`Upload authorization failed: ${response.status}`);\n        }\n\n        lastError = new Error(`Upload failed with status ${response.status}`);\n      } catch (error) {\n        lastError = error instanceof Error ? error : new Error('Upload failed');\n\n        if (lastError.message.includes('authorization')) {\n          throw lastError;\n        }\n      }\n\n      if (attempt < maxRetries - 1) {\n        const delay = Math.min(1000 * Math.pow(2, attempt), 10000);\n        await new Promise(resolve => setTimeout(resolve, delay));\n      }\n    }\n\n    throw lastError || new Error('Upload failed after retries');\n  }\n}\n\nlet uploadManagerInstance: UploadManager | null = null;\n\nexport function getUploadManager(apiClient: ApiClient): UploadManager {\n  if (!uploadManagerInstance) {\n    uploadManagerInstance = new UploadManager(apiClient);\n  }\n  return uploadManagerInstance;\n}\n\nexport function resetUploadManager(): void {\n  uploadManagerInstance = null;\n}\n\n","// Messages received from backend\nexport type WebSocketMessage =\n  | { type: 'info'; message: string }\n  | { type: 'user_message'; message: string; user_id?: string }\n  | { type: 'agent_typing'; is_typing: boolean }\n  | { type: 'agent_message_chunk'; content: Array<{ type: 'text'; text: string; annotations?: unknown[] }> }\n  | { type: 'agent_message_complete'; message: string }\n  | { type: 'error'; message: string; details?: string };\n\n// Messages sent to backend\nexport type OutgoingWebSocketMessage =\n  | { type: 'chat_message'; message: string; user_id?: string };\n\nexport type WebSocketEventType = 'open' | 'close' | 'error' | 'message';\n\nexport type WebSocketEventHandler = (event: WebSocketMessage | Event) => void;\n\nexport interface WebSocketManagerConfig {\n  baseUrl: string; // e.g., \"wss://api.blar.io\"\n  publishableKey: string;\n  chatRoomId?: string; // Optional - will generate UUID if not provided\n  userId?: string; // Optional user identifier\n  maxReconnectAttempts?: number;\n  reconnectDelayMs?: number;\n  heartbeatIntervalMs?: number;\n}\n\nexport type ConnectionState = 'connecting' | 'connected' | 'disconnected' | 'reconnecting' | 'failed';\n\n/**\n * WebSocket manager with auto-reconnect functionality\n */\nexport class WebSocketManager {\n  private config: Required<Omit<WebSocketManagerConfig, 'chatRoomId' | 'userId'>> & { chatRoomId: string; userId?: string };\n  private ws: WebSocket | null = null;\n  private reconnectAttempts = 0;\n  private reconnectTimeout: NodeJS.Timeout | null = null;\n  private eventHandlers: Map<WebSocketEventType, Set<WebSocketEventHandler>> = new Map();\n  private messageQueue: OutgoingWebSocketMessage[] = [];\n  private connectionState: ConnectionState = 'disconnected';\n\n  constructor(config: WebSocketManagerConfig) {\n    // Generate UUID for chat room if not provided\n    const chatRoomId = config.chatRoomId || this.generateUUID();\n\n    this.config = {\n      maxReconnectAttempts: 5,\n      reconnectDelayMs: 1000,\n      heartbeatIntervalMs: 30000,\n      baseUrl: config.baseUrl,\n      publishableKey: config.publishableKey,\n      chatRoomId,\n      userId: config.userId,\n    };\n\n    // Initialize event handler sets\n    this.eventHandlers.set('open', new Set());\n    this.eventHandlers.set('close', new Set());\n    this.eventHandlers.set('error', new Set());\n    this.eventHandlers.set('message', new Set());\n  }\n\n  private generateUUID(): string {\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n      const r = (Math.random() * 16) | 0;\n      const v = c === 'x' ? r : (r & 0x3) | 0x8;\n      return v.toString(16);\n    });\n  }\n\n  /**\n   * Connect to WebSocket server\n   */\n  connect(): void {\n    if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n      console.warn('WebSocket is already connected');\n      return;\n    }\n\n    this.connectionState = this.reconnectAttempts > 0 ? 'reconnecting' : 'connecting';\n    this.notifyStateChange();\n\n    // Build WebSocket URL: ws://domain/ws/support/chat/<chat_room_id>/?publishable_key=<key>\n    const baseUrl = this.config.baseUrl.replace(/^http/, 'ws'); // Convert http(s) to ws(s)\n    const wsUrl = `${baseUrl}/ws/support/chat/${this.config.chatRoomId}/?publishable_key=${this.config.publishableKey}`;\n\n    try {\n      this.ws = new WebSocket(wsUrl);\n\n      this.ws.onopen = this.handleOpen.bind(this);\n      this.ws.onclose = this.handleClose.bind(this);\n      this.ws.onerror = this.handleError.bind(this);\n      this.ws.onmessage = this.handleMessage.bind(this);\n    } catch (error) {\n      console.error('Failed to create WebSocket connection:', error);\n      this.scheduleReconnect();\n    }\n  }\n\n  /**\n   * Disconnect from WebSocket server\n   */\n  disconnect(): void {\n    this.clearReconnectTimeout();\n\n    if (this.ws) {\n      this.ws.onclose = null;\n      this.ws.close();\n      this.ws = null;\n    }\n\n    this.connectionState = 'disconnected';\n    this.notifyStateChange();\n  }\n\n  /**\n   * Send a message through WebSocket\n   */\n  sendMessage(message: OutgoingWebSocketMessage): void {\n    if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n      this.ws.send(JSON.stringify(message));\n    } else {\n      // Queue message if not connected\n      this.messageQueue.push(message);\n      console.warn('WebSocket not connected, message queued');\n    }\n  }\n\n  /**\n   * Send text message\n   */\n  sendTextMessage(content: string): void {\n    const message: OutgoingWebSocketMessage = {\n      type: 'chat_message',\n      message: content,\n    };\n\n    if (this.config.userId) {\n      message.user_id = this.config.userId;\n    }\n\n    this.sendMessage(message);\n  }\n\n  /**\n   * Subscribe to WebSocket events\n   */\n  on(event: WebSocketEventType, handler: WebSocketEventHandler): () => void {\n    const handlers = this.eventHandlers.get(event);\n    if (handlers) {\n      handlers.add(handler);\n    }\n\n    // Return unsubscribe function\n    return () => {\n      const handlers = this.eventHandlers.get(event);\n      if (handlers) {\n        handlers.delete(handler);\n      }\n    };\n  }\n\n  /**\n   * Get current connection state\n   */\n  getConnectionState(): ConnectionState {\n    return this.connectionState;\n  }\n\n  /**\n   * Get chat room ID\n   */\n  getChatRoomId(): string {\n    return this.config.chatRoomId;\n  }\n\n  private handleOpen(event: Event): void {\n    console.log('WebSocket connected');\n    this.connectionState = 'connected';\n    this.reconnectAttempts = 0;\n    this.notifyStateChange();\n\n    // Flush queued messages\n    this.flushMessageQueue();\n\n    // Notify handlers\n    const handlers = this.eventHandlers.get('open');\n    if (handlers) {\n      handlers.forEach(handler => handler(event));\n    }\n  }\n\n  private handleClose(event: CloseEvent): void {\n    console.log('WebSocket closed:', event.code, event.reason);\n\n    // Notify handlers\n    const handlers = this.eventHandlers.get('close');\n    if (handlers) {\n      handlers.forEach(handler => handler(event));\n    }\n\n    // Attempt to reconnect unless it was a clean close\n    if (!event.wasClean) {\n      this.scheduleReconnect();\n    } else {\n      this.connectionState = 'disconnected';\n      this.notifyStateChange();\n    }\n  }\n\n  private handleError(event: Event): void {\n    console.error('WebSocket error:', event);\n\n    // Notify handlers\n    const handlers = this.eventHandlers.get('error');\n    if (handlers) {\n      handlers.forEach(handler => handler(event));\n    }\n  }\n\n  private handleMessage(event: MessageEvent): void {\n    try {\n      const message = JSON.parse(event.data) as WebSocketMessage;\n\n      // Notify handlers\n      const handlers = this.eventHandlers.get('message');\n      if (handlers) {\n        handlers.forEach(handler => handler(message));\n      }\n    } catch (error) {\n      console.error('Failed to parse WebSocket message:', error);\n    }\n  }\n\n  private scheduleReconnect(): void {\n    if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {\n      console.error('Max reconnect attempts reached');\n      this.connectionState = 'failed';\n      this.notifyStateChange();\n      return;\n    }\n\n    this.clearReconnectTimeout();\n\n    const delay = this.config.reconnectDelayMs * Math.pow(2, this.reconnectAttempts);\n    console.log(`Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts + 1}/${this.config.maxReconnectAttempts})`);\n\n    this.reconnectTimeout = setTimeout(() => {\n      this.reconnectAttempts++;\n      this.connect();\n    }, delay);\n  }\n\n  private clearReconnectTimeout(): void {\n    if (this.reconnectTimeout) {\n      clearTimeout(this.reconnectTimeout);\n      this.reconnectTimeout = null;\n    }\n  }\n\n  private flushMessageQueue(): void {\n    while (this.messageQueue.length > 0) {\n      const message = this.messageQueue.shift();\n      if (message) {\n        this.sendMessage(message);\n      }\n    }\n  }\n\n  private notifyStateChange(): void {\n    // This could emit a state change event if needed\n    // For now, we rely on polling getConnectionState()\n  }\n}\n\n// Singleton instance\nlet wsManagerInstance: WebSocketManager | null = null;\n\nexport function getWebSocketManager(config: WebSocketManagerConfig): WebSocketManager {\n  if (!wsManagerInstance) {\n    wsManagerInstance = new WebSocketManager(config);\n  }\n  return wsManagerInstance;\n}\n\nexport function resetWebSocketManager(): void {\n  if (wsManagerInstance) {\n    wsManagerInstance.disconnect();\n    wsManagerInstance = null;\n  }\n}\n"],"mappings":"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","names":["handlers"]}