{"version":3,"file":"index.cjs","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../src/types/analytics.ts","../src/types/events.ts","../src/types/position.ts","../src/types/hooks/EventStore.ts","../src/types/hooks/AfterTrackHook.ts","../src/types/hooks/AfterIdentifyHook.ts","../src/types/hooks/AfterEvaluationHook.ts","../src/types/plugins/eventInterceptionPlugin.ts","../src/types/plugins/flagOverridePlugin.ts","../src/react/lazyLoadToolbar.ts","../src/react/useLaunchDarklyToolbar.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n        if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n            Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n        }\n    }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export const ANALYTICS_EVENT_PREFIX = 'ld.toolbar';\n\nexport type FeedbackSentiment = 'positive' | 'negative';\n","export interface LDEvaluationReason {\n  readonly kind?: string;\n  readonly errorKind?: string;\n}\n\nexport interface SyntheticEventContext {\n  readonly kind: EventKind;\n  readonly key?: string;\n  readonly context?: object;\n  readonly creationDate: number;\n  readonly data?: unknown;\n  readonly metricValue?: number;\n  readonly url?: string;\n  readonly value?: any;\n  readonly variation?: number | null;\n  readonly default?: any;\n  readonly reason?: LDEvaluationReason;\n  readonly version?: number;\n  readonly trackEvents?: boolean;\n  readonly debugEventsUntilDate?: number;\n  readonly contextKind?: string;\n}\n\n/**\n * Valid event kinds that can be emitted by the LaunchDarkly SDK\n */\nconst VALID_EVENT_KINDS = ['identify', 'feature', 'custom', 'debug', 'summary', 'diagnostic'] as const;\n\n/**\n * Valid event categories used for organizing events\n */\nconst VALID_EVENT_CATEGORIES = ['flag', 'custom', 'identify', 'debug'] as const;\n\n/**\n * Strict typing for event kinds based on LaunchDarkly's event system\n */\nexport type EventKind = (typeof VALID_EVENT_KINDS)[number];\n\n/**\n * Event categories for UI organization\n */\nexport type EventCategory = (typeof VALID_EVENT_CATEGORIES)[number];\n\n/**\n * Enhanced processed event\n */\nexport interface ProcessedEvent {\n  readonly id: string;\n  readonly kind: EventKind;\n  readonly key?: string;\n  readonly timestamp: number;\n  readonly context: SyntheticEventContext;\n  readonly displayName: string;\n  readonly category: EventCategory;\n  readonly metadata?: Readonly<Record<string, unknown>>;\n}\n\n/**\n * Event filter configuration\n */\nexport interface EventFilter {\n  readonly kinds?: ReadonlyArray<EventKind>;\n  readonly categories?: ReadonlyArray<EventCategory>;\n  readonly flagKeys?: ReadonlyArray<string>;\n  readonly timeRange?: {\n    readonly start: number;\n    readonly end: number;\n  };\n}\n\n/**\n * Type guards for event validation\n */\nexport function isValidEventKind(kind: string): kind is EventKind {\n  return VALID_EVENT_KINDS.includes(kind as EventKind);\n}\n\nexport function isValidEventCategory(category: string): category is EventCategory {\n  return VALID_EVENT_CATEGORIES.includes(category as EventCategory);\n}\n","export const TOOLBAR_POSITIONS = ['top-left', 'top-right', 'bottom-left', 'bottom-right'] as const;\nexport type ToolbarPosition = (typeof TOOLBAR_POSITIONS)[number];\n","import type { ProcessedEvent } from '../events';\n\nconst DEFAULT_MAX_EVENTS = 100;\nexport interface EventStoreConfig {\n  /** Maximum number of events to store */\n  maxEvents?: number;\n}\n\nexport class EventStore {\n  private events: ProcessedEvent[] = [];\n  private listeners: Set<() => void> = new Set();\n  private maxEvents: number;\n\n  constructor(config: EventStoreConfig = {}) {\n    this.maxEvents = config.maxEvents ?? DEFAULT_MAX_EVENTS;\n  }\n\n  addEvent(event: ProcessedEvent): void {\n    try {\n      this.events.push(event);\n      if (this.events.length > this.maxEvents) {\n        // Remove oldest events to maintain the limit\n        this.events.splice(0, this.events.length - this.maxEvents);\n      }\n      this.notifyListeners();\n    } catch (error) {\n      console.warn('Event store error:', error);\n    }\n  }\n\n  getEvents(): ProcessedEvent[] {\n    return [...this.events];\n  }\n\n  subscribe(listener: () => void): () => void {\n    this.listeners.add(listener);\n    listener(); // Send initial notification\n    return () => this.listeners.delete(listener);\n  }\n\n  clear(): void {\n    this.events = [];\n    this.notifyListeners();\n  }\n\n  destroy(): void {\n    this.listeners.clear();\n    this.events = [];\n  }\n\n  private notifyListeners(): void {\n    this.listeners.forEach((listener) => {\n      try {\n        listener();\n      } catch (error) {\n        console.warn('Listener error:', error);\n      }\n    });\n  }\n}\n","import type { Hook } from 'launchdarkly-js-client-sdk';\nimport type { HookMetadata, TrackSeriesContext } from 'launchdarkly-js-sdk-common';\nimport type { EventFilter, ProcessedEvent, SyntheticEventContext } from '../events';\n\nexport type AfterTrackHookConfig = {\n  onNewEvent?: (event: ProcessedEvent) => void;\n  filter?: EventFilter;\n};\n\nexport class AfterTrackHook implements Hook {\n  private config: AfterTrackHookConfig;\n  private idCounter = 0;\n\n  constructor(config: AfterTrackHookConfig = {}) {\n    this.config = {\n      filter: config.filter,\n      onNewEvent: config.onNewEvent,\n    };\n  }\n\n  getMetadata(): HookMetadata {\n    return {\n      name: 'AfterTrackHook',\n    };\n  }\n\n  afterTrack(hookContext: TrackSeriesContext): void {\n    try {\n      const syntheticContext: SyntheticEventContext = {\n        kind: 'custom',\n        key: hookContext.key,\n        context: hookContext.context,\n        data: hookContext.data,\n        metricValue: hookContext.metricValue,\n        creationDate: Date.now(),\n        url: typeof window !== 'undefined' ? window.location.href : undefined,\n      };\n\n      if (!this.shouldProcessEvent()) {\n        return;\n      }\n\n      const processedEvent = this.processEvent(syntheticContext);\n\n      this.config.onNewEvent?.(processedEvent);\n    } catch (error) {\n      // Simple error handling - just log and continue\n      console.warn('Event processing error in AfterTrackHook:', error);\n    }\n  }\n\n  private shouldProcessEvent(): boolean {\n    const filter = this.config.filter;\n    if (!filter) return true;\n\n    // AfterTrackHook only handles custom events\n    return (\n      !(filter.kinds && !filter.kinds.includes('custom')) &&\n      !(filter.categories && !filter.categories.includes('custom'))\n    );\n  }\n\n  private processEvent(context: SyntheticEventContext): ProcessedEvent {\n    const timestamp = Date.now();\n    // Create a guaranteed unique ID using timestamp + counter + random\n    this.idCounter = (this.idCounter + 1) % 999999; // Reset counter at 999999\n    const randomPart = Math.random().toString(36).substring(2, 8);\n    const id = `${context.kind}-${timestamp}-${this.idCounter.toString().padStart(6, '0')}-${randomPart}`;\n\n    return {\n      id,\n      kind: context.kind,\n      key: context.key,\n      timestamp,\n      context,\n      displayName: `Custom: ${context.key || 'unknown'}`,\n      category: 'custom',\n      metadata: this.extractMetadata(context),\n    };\n  }\n\n  private extractMetadata(context: SyntheticEventContext): Record<string, unknown> {\n    // AfterTrackHook only handles custom events\n    return {\n      data: context.data,\n      metricValue: context.metricValue,\n      url: context.url,\n    };\n  }\n}\n","import type { Hook } from 'launchdarkly-js-client-sdk';\nimport type {\n  HookMetadata,\n  IdentifySeriesContext,\n  IdentifySeriesData,\n  IdentifySeriesResult,\n  LDContext,\n} from 'launchdarkly-js-sdk-common';\nimport type { EventFilter, ProcessedEvent, SyntheticEventContext } from '../events';\n\nexport type AfterIdentifyHookConfig = {\n  onNewEvent?: (event: ProcessedEvent) => void;\n  filter?: EventFilter;\n};\n\nexport class AfterIdentifyHook implements Hook {\n  private config: AfterIdentifyHookConfig;\n  private idCounter = 0;\n\n  constructor(config: AfterIdentifyHookConfig = {}) {\n    this.config = {\n      filter: config.filter,\n      onNewEvent: config.onNewEvent,\n    };\n  }\n\n  getMetadata(): HookMetadata {\n    return {\n      name: 'AfterIdentifyHook',\n    };\n  }\n\n  afterIdentify(\n    hookContext: IdentifySeriesContext,\n    data: IdentifySeriesData,\n    result: IdentifySeriesResult,\n  ): IdentifySeriesData {\n    try {\n      // Only process successful identify operations\n      if (result.status !== 'completed') {\n        return data;\n      }\n\n      const syntheticContext: SyntheticEventContext = {\n        kind: 'identify',\n        context: hookContext.context,\n        creationDate: Date.now(),\n        contextKind: this.determineContextKind(hookContext.context),\n      };\n\n      if (!this.shouldProcessEvent()) {\n        return data;\n      }\n\n      const processedEvent = this.processEvent(syntheticContext);\n\n      this.config.onNewEvent?.(processedEvent);\n    } catch (error) {\n      // Simple error handling - just log and continue\n      console.warn('Event processing error in AfterIdentifyHook:', error);\n    }\n\n    return data;\n  }\n\n  private determineContextKind(context: LDContext): string {\n    if (context && typeof context === 'object') {\n      if ('kind' in context && context.kind) {\n        return context.kind;\n      }\n      // Legacy user context\n      if (context.anonymous) {\n        return 'anonymousUser';\n      }\n      return 'user';\n    }\n    return 'user';\n  }\n\n  private shouldProcessEvent(): boolean {\n    const filter = this.config.filter;\n    if (!filter) return true;\n\n    // AfterIdentifyHook only handles identify events\n    return (\n      !(filter.kinds && !filter.kinds.includes('identify')) &&\n      !(filter.categories && !filter.categories.includes('identify'))\n    );\n  }\n\n  private processEvent(context: SyntheticEventContext): ProcessedEvent {\n    const timestamp = Date.now();\n    // Create a guaranteed unique ID using timestamp + counter + random\n    this.idCounter = (this.idCounter + 1) % 999999; // Reset counter at 999999\n    const randomPart = Math.random().toString(36).substring(2, 8);\n    const id = `${context.kind}-${timestamp}-${this.idCounter.toString().padStart(6, '0')}-${randomPart}`;\n\n    return {\n      id,\n      kind: context.kind,\n      key: context.key,\n      timestamp,\n      context,\n      displayName: `Identify: ${(context.context as any)?.key || 'anonymous'}`,\n      category: 'identify',\n      metadata: this.extractMetadata(context),\n    };\n  }\n\n  private extractMetadata(context: SyntheticEventContext): Record<string, unknown> {\n    // AfterIdentifyHook only handles identify events\n    return {\n      contextKind: context.contextKind,\n    };\n  }\n}\n","import type { Hook } from 'launchdarkly-js-client-sdk';\nimport type {\n  HookMetadata,\n  EvaluationSeriesData,\n  LDEvaluationDetail,\n  EvaluationSeriesContext,\n} from 'launchdarkly-js-sdk-common';\nimport type { EventFilter, ProcessedEvent, SyntheticEventContext } from '../events';\n\nexport type AfterEvaluationHookConfig = {\n  onNewEvent?: (event: ProcessedEvent) => void;\n  filter?: EventFilter;\n};\n\nexport class AfterEvaluationHook implements Hook {\n  private config: AfterEvaluationHookConfig;\n  private idCounter = 0;\n\n  constructor(config: AfterEvaluationHookConfig = {}) {\n    this.config = {\n      filter: config.filter,\n      onNewEvent: config.onNewEvent,\n    };\n  }\n\n  getMetadata(): HookMetadata {\n    return {\n      name: 'AfterEvaluationHook',\n    };\n  }\n\n  afterEvaluation(\n    hookContext: EvaluationSeriesContext,\n    data: EvaluationSeriesData,\n    detail: LDEvaluationDetail,\n  ): EvaluationSeriesData {\n    try {\n      const syntheticContext: SyntheticEventContext = {\n        kind: 'feature',\n        key: hookContext.flagKey,\n        context: hookContext.context,\n        value: detail.value,\n        variation: detail.variationIndex,\n        default: hookContext.defaultValue,\n        reason: detail.reason,\n        creationDate: Date.now(),\n        // Note: We don't have access to version, trackEvents, or debugEventsUntilDate\n        // from the afterEvaluation hook, so these will be undefined\n      };\n\n      if (!this.shouldProcessEvent(syntheticContext)) {\n        return data;\n      }\n\n      const processedEvent = this.processEvent(syntheticContext);\n\n      this.config.onNewEvent?.(processedEvent);\n    } catch (error) {\n      // Simple error handling - just log and continue\n      console.warn('Event processing error in AfterEvaluationHook:', error);\n    }\n\n    return data;\n  }\n\n  private shouldProcessEvent(context: SyntheticEventContext): boolean {\n    const filter = this.config.filter;\n    if (!filter) return true;\n\n    // AfterEvaluationHook only handles feature events\n    return (\n      !(filter.kinds && !filter.kinds.includes('feature')) &&\n      !(filter.categories && !filter.categories.includes('flag')) &&\n      !(filter.flagKeys && context.key && !filter.flagKeys.includes(context.key))\n    );\n  }\n\n  private processEvent(context: SyntheticEventContext): ProcessedEvent {\n    const timestamp = Date.now();\n    // Create a guaranteed unique ID using timestamp + counter + random\n    this.idCounter = (this.idCounter + 1) % 999999; // Reset counter at 999999\n    const randomPart = Math.random().toString(36).substring(2, 8);\n    const id = `${context.kind}-${timestamp}-${this.idCounter.toString().padStart(6, '0')}-${randomPart}`;\n\n    return {\n      id,\n      kind: context.kind,\n      key: context.key,\n      timestamp,\n      context,\n      displayName: `Flag: ${context.key || 'unknown'}`,\n      category: 'flag',\n      metadata: this.extractMetadata(context),\n    };\n  }\n\n  private extractMetadata(context: SyntheticEventContext): Record<string, unknown> {\n    // AfterEvaluationHook only handles feature events\n    return {\n      flagVersion: context.version,\n      variation: context.variation,\n      trackEvents: context.trackEvents,\n      reason: context.reason,\n      defaultValue: context.default,\n    };\n  }\n}\n","import type { Hook, LDClient, LDPluginEnvironmentMetadata, LDPluginMetadata } from 'launchdarkly-js-client-sdk';\nimport { AfterTrackHook, AfterIdentifyHook, AfterEvaluationHook, EventStore } from '../hooks';\nimport type { EventFilter, ProcessedEvent } from '../events';\nimport type { IEventInterceptionPlugin } from './plugins';\nimport { ANALYTICS_EVENT_PREFIX } from '../analytics';\n\n/**\n * Configuration options for the EventInterceptionPlugin\n */\nexport interface EventInterceptionPluginConfig {\n  /** Configuration for event filtering */\n  filter?: EventFilter;\n  /** Enable console logging for debugging */\n  enableLogging?: boolean;\n  /** Maximum number of events to store. The default value is 100. */\n  eventCapacity?: number;\n}\n\n/**\n * Plugin dedicated to intercepting and processing LaunchDarkly events\n */\nexport class EventInterceptionPlugin implements IEventInterceptionPlugin {\n  private afterTrackHook: AfterTrackHook;\n  private afterIdentifyHook: AfterIdentifyHook;\n  private afterEvaluationHook: AfterEvaluationHook;\n  private eventStore: EventStore;\n  private config: EventInterceptionPluginConfig;\n  private ldClient: LDClient | null = null;\n\n  constructor(config: EventInterceptionPluginConfig = {}) {\n    this.config = {\n      enableLogging: false,\n      eventCapacity: 100,\n      ...config,\n    };\n\n    this.eventStore = new EventStore({ maxEvents: this.config.eventCapacity });\n\n    const onNewEvent = (event: ProcessedEvent) => {\n      const isToolbarEvent = this.isToolbarEvent(event);\n      if (isToolbarEvent) {\n        return;\n      }\n\n      if (this.config.enableLogging) {\n        console.log('🎯 Event intercepted:', {\n          kind: event.kind,\n          key: event.key,\n          category: event.category,\n          displayName: event.displayName,\n        });\n      }\n\n      this.eventStore.addEvent(event);\n    };\n\n    this.afterTrackHook = new AfterTrackHook({\n      filter: config.filter,\n      onNewEvent,\n    });\n\n    this.afterIdentifyHook = new AfterIdentifyHook({\n      filter: config.filter,\n      onNewEvent,\n    });\n\n    this.afterEvaluationHook = new AfterEvaluationHook({\n      filter: config.filter,\n      onNewEvent,\n    });\n  }\n\n  isToolbarEvent(event: ProcessedEvent): boolean {\n    return event.key?.startsWith(ANALYTICS_EVENT_PREFIX) ?? false;\n  }\n\n  getMetadata(): LDPluginMetadata {\n    return {\n      name: 'EventInterceptionPlugin',\n    };\n  }\n\n  getHooks(_metadata: LDPluginEnvironmentMetadata): Hook[] {\n    return [this.afterTrackHook, this.afterIdentifyHook, this.afterEvaluationHook];\n  }\n\n  register(ldClient: LDClient): void {\n    this.ldClient = ldClient;\n  }\n\n  getClient(): LDClient | null {\n    return this.ldClient;\n  }\n\n  getEvents(): ProcessedEvent[] {\n    return this.eventStore.getEvents();\n  }\n\n  subscribe(listener: () => void): () => void {\n    return this.eventStore.subscribe(listener);\n  }\n\n  clearEvents(): void {\n    this.eventStore.clear();\n  }\n\n  destroy(): void {\n    this.eventStore.destroy();\n  }\n}\n","import type {\n  LDClient,\n  LDDebugOverride,\n  LDPluginMetadata,\n  LDFlagSet,\n  Hook,\n  LDPluginEnvironmentMetadata,\n} from 'launchdarkly-js-client-sdk';\nimport type { IFlagOverridePlugin } from './plugins';\n\n/**\n * Configuration options for the FlagOverridePlugin\n */\nexport type FlagOverridePluginConfig = {\n  /** Namespace for localStorage keys. Defaults to 'ld-flag-override' */\n  storageNamespace?: string;\n};\n\nconst DEFAULT_STORAGE_NAMESPACE = 'ld-flag-override';\n\nexport class FlagOverridePlugin implements IFlagOverridePlugin {\n  private debugOverride?: LDDebugOverride;\n  private config: Required<FlagOverridePluginConfig>;\n  private ldClient: LDClient | null = null;\n\n  constructor(config: FlagOverridePluginConfig = {}) {\n    this.config = {\n      storageNamespace: config.storageNamespace ?? DEFAULT_STORAGE_NAMESPACE,\n    };\n  }\n\n  /**\n   * Returns plugin metadata\n   */\n  getMetadata(): LDPluginMetadata {\n    return {\n      name: 'FlagOverridePlugin',\n    };\n  }\n\n  /**\n   * Returns the hooks for the plugin\n   */\n  getHooks(_metadata: LDPluginEnvironmentMetadata): Hook[] {\n    return [];\n  }\n\n  /**\n   * Called when the plugin is registered with the LaunchDarkly client\n   */\n  register(ldClient: LDClient): void {\n    this.ldClient = ldClient;\n  }\n\n  /**\n   * Called when the debug interface is available\n   * Loads any existing overrides from localStorage\n   */\n  registerDebug(debugOverride: LDDebugOverride): void {\n    this.debugOverride = debugOverride;\n    this.loadExistingOverrides();\n  }\n\n  private loadExistingOverrides(): void {\n    if (!this.debugOverride) return;\n\n    const storage = this.getStorage();\n    if (!storage) return;\n\n    try {\n      for (let i = 0; i < storage.length; i++) {\n        const key = storage.key(i);\n        if (!key?.startsWith(this.config.storageNamespace + ':')) continue;\n\n        const storedValue = storage.getItem(key);\n        if (storedValue) {\n          try {\n            const value = JSON.parse(storedValue);\n            const flagKey = key.replace(this.config.storageNamespace + ':', '');\n\n            this.debugOverride.setOverride(flagKey, value);\n          } catch {\n            console.warn('flagOverridePlugin: Invalid stored value for', key);\n            storage.removeItem(key);\n          }\n        }\n      }\n    } catch (error) {\n      console.error('flagOverridePlugin: Error loading existing overrides:', error);\n    }\n  }\n\n  /**\n   * Sets an override value for a feature flag and persists it to localStorage\n   * @param flagKey - The key of the flag to override\n   * @param value - The value to set for the flag\n   */\n  setOverride(flagKey: string, value: unknown): void {\n    if (!this.debugOverride) {\n      console.warn('flagOverridePlugin: Debug interface not available');\n      return;\n    }\n\n    if (!flagKey || typeof flagKey !== 'string') {\n      console.error('flagOverridePlugin: Invalid flag key:', flagKey);\n      return;\n    }\n\n    if (value === undefined) {\n      console.error('flagOverridePlugin: Cannot set undefined value for flag override');\n      return;\n    }\n\n    try {\n      this.persistOverride(flagKey, value);\n      this.debugOverride.setOverride(flagKey, value);\n    } catch (error) {\n      console.error('flagOverridePlugin: Failed to set override:', error);\n    }\n  }\n\n  /**\n   * Removes an override for a specific feature flag\n   * @param flagKey - The key of the flag to remove the override for\n   */\n  removeOverride(flagKey: string): void {\n    if (!this.debugOverride) {\n      console.warn('flagOverridePlugin: Debug interface not available');\n      return;\n    }\n\n    if (!flagKey || typeof flagKey !== 'string') {\n      console.error('flagOverridePlugin: Invalid flag key:', flagKey);\n      return;\n    }\n\n    try {\n      this.removePersistedOverride(flagKey);\n      this.debugOverride.removeOverride(flagKey);\n    } catch (error) {\n      console.error('flagOverridePlugin: Failed to remove override:', error);\n    }\n  }\n\n  /**\n   * Clears all feature flag overrides from both memory and localStorage\n   */\n  clearAllOverrides(): void {\n    if (!this.debugOverride) {\n      console.warn('flagOverridePlugin: Debug interface not available');\n      return;\n    }\n\n    try {\n      this.clearPersistedOverrides();\n      this.debugOverride.clearAllOverrides();\n    } catch (error) {\n      console.error('flagOverridePlugin: Failed to clear overrides:', error);\n    }\n  }\n\n  /**\n   * Returns all currently active feature flag overrides\n   * @returns Record of flag keys to their override values\n   */\n  getAllOverrides(): LDFlagSet {\n    if (!this.debugOverride) {\n      console.warn('flagOverridePlugin: Debug interface not available');\n      return {};\n    }\n\n    try {\n      return this.debugOverride.getAllOverrides();\n    } catch (error) {\n      console.error('flagOverridePlugin: Failed to get overrides:', error);\n      return {};\n    }\n  }\n\n  /**\n   * Returns the LaunchDarkly client instance\n   * @returns The LaunchDarkly client\n   */\n  getClient(): LDClient | null {\n    return this.ldClient;\n  }\n\n  private getStorage(): Storage | null {\n    if (typeof window === 'undefined') return null;\n    return window.localStorage;\n  }\n\n  private persistOverride(flagKey: string, value: unknown): void {\n    const storage = this.getStorage();\n    if (!storage) return;\n\n    try {\n      const storageKey = `${this.config.storageNamespace}:${flagKey}`;\n      storage.setItem(storageKey, JSON.stringify(value));\n    } catch (error) {\n      console.error('flagOverridePlugin: Failed to persist override:', error);\n    }\n  }\n\n  private removePersistedOverride(flagKey: string): void {\n    const storage = this.getStorage();\n    if (!storage) return;\n\n    try {\n      const storageKey = `${this.config.storageNamespace}:${flagKey}`;\n      storage.removeItem(storageKey);\n    } catch (error) {\n      console.error('flagOverridePlugin: Failed to remove persisted override:', error);\n    }\n  }\n\n  private clearPersistedOverrides(): void {\n    const storage = this.getStorage();\n    if (!storage) return;\n\n    try {\n      const keysToRemove: string[] = [];\n      const prefix = this.config.storageNamespace + ':';\n\n      for (let i = 0; i < storage.length; i++) {\n        const key = storage.key(i);\n        if (key?.startsWith(prefix)) {\n          keysToRemove.push(key);\n        }\n      }\n\n      keysToRemove.forEach((key) => storage.removeItem(key));\n    } catch (error) {\n      console.error('flagOverridePlugin: Failed to clear persisted overrides:', error);\n    }\n  }\n}\n","import type { LaunchDarklyToolbar } from '../index';\n\ninterface WindowWithMaybeToolbar extends Window {\n  LaunchDarklyToolbar?: LaunchDarklyToolbar;\n}\n\nfunction getWindow(): WindowWithMaybeToolbar {\n  return window;\n}\n\nexport default async function lazyLoadToolbar(signal: AbortSignal, url: string): Promise<LaunchDarklyToolbar> {\n  const existing = getWindow().LaunchDarklyToolbar;\n\n  if (existing) {\n    return Promise.resolve(existing);\n  }\n\n  await lazyLoad(signal, url);\n\n  const toolbarModule = getWindow().LaunchDarklyToolbar;\n  if (!toolbarModule) {\n    throw new Error(`Unable to detect LaunchDarklyToolbar global from ${url}`);\n  }\n\n  return toolbarModule;\n}\n\nasync function lazyLoad(signal: AbortSignal, url: string): Promise<void> {\n  // Check if a script with this URL already exists\n  const existingScript = document.querySelector(`script[src=\"${url}\"]`) as HTMLScriptElement | null;\n\n  if (existingScript) {\n    // If script already exists and is loaded, return immediately\n    if (existingScript.dataset.loaded === 'true') {\n      return Promise.resolve();\n    }\n\n    // If script exists but is still loading, wait for it to complete\n    return new Promise<void>((resolve, reject) => {\n      existingScript.addEventListener('load', () => {\n        if (!signal.aborted) {\n          existingScript.dataset.loaded = 'true';\n          resolve();\n        }\n      });\n      existingScript.addEventListener('error', (error) => {\n        if (!signal.aborted) {\n          reject(error);\n        }\n      });\n    });\n  }\n\n  // Create new script element\n  const script = document.createElement('script');\n  script.src = url;\n  script.crossOrigin = 'anonymous';\n  script.referrerPolicy = 'origin';\n\n  const waitForLoad = new Promise<void>((resolve, reject) => {\n    script.addEventListener('load', () => {\n      if (!signal.aborted) {\n        script.dataset.loaded = 'true';\n        resolve();\n      }\n    });\n    script.addEventListener('error', (error) => {\n      if (!signal.aborted) {\n        reject(error);\n      }\n    });\n  });\n\n  document.body.appendChild(script);\n\n  try {\n    await waitForLoad;\n  } catch (error) {\n    console.log(error);\n    throw new Error(`Could not load LaunchDarkly developer toolbar bundle from ${url}`);\n  }\n}\n","import { useEffect, useRef } from 'react';\n\nimport lazyLoadToolbar from './lazyLoadToolbar';\nimport type { InitializationConfig } from '../types';\nimport packageJson from '../../package.json';\n\ninterface UseLaunchDarklyToolbarConfig extends InitializationConfig {\n  /**\n   * URL to load the toolbar bundle from.\n   * Use this when developing the toolbar itself locally.\n   *\n   * Example: `'http://localhost:8080/toolbar.min.js'`\n   *\n   * Default: CDN URL based on package version\n   */\n  toolbarBundleUrl?: string;\n\n  /**\n   * Whether the toolbar should be loaded and displayed.\n   *\n   * Default: `true`\n   */\n  enabled?: boolean;\n}\n\nexport default function useLaunchDarklyToolbar(args: UseLaunchDarklyToolbarConfig) {\n  const { toolbarBundleUrl, enabled, ...initConfig } = args;\n  const configRef = useRef<InitializationConfig | null>(null);\n  const url = toolbarBundleUrl ?? versionToCdn(packageJson.version);\n\n  useEffect(() => {\n    if (enabled === false) {\n      return;\n    }\n\n    if (configRef.current === null) {\n      configRef.current = initConfig;\n    }\n  }, [enabled, initConfig]);\n\n  useEffect(() => {\n    if (enabled === false || configRef.current === null) {\n      return;\n    }\n\n    const controller = new AbortController();\n\n    let cleanup: () => void = () => {};\n    lazyLoadToolbar(controller.signal, url).then((importedToolbar) => {\n      if (configRef.current === null) {\n        return;\n      }\n\n      cleanup = importedToolbar.init(configRef.current);\n    });\n\n    return () => {\n      controller.abort();\n      cleanup();\n    };\n  }, [enabled, url]);\n}\n\nfunction versionToCdn(version = 'latest'): string {\n  return `https://unpkg.com/@launchdarkly/toolbar@${version}/cdn/toolbar.min.js`;\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","ANALYTICS_EVENT_PREFIX","VALID_EVENT_KINDS","VALID_EVENT_CATEGORIES","isValidEventKind","kind","isValidEventCategory","category","TOOLBAR_POSITIONS","DEFAULT_MAX_EVENTS","EventStore","Set","config","event","error","console","listener","AfterTrackHook","hookContext","syntheticContext","Date","window","undefined","processedEvent","filter","context","timestamp","randomPart","Math","id","AfterIdentifyHook","data","result","AfterEvaluationHook","detail","EventInterceptionPlugin","onNewEvent","isToolbarEvent","_metadata","ldClient","DEFAULT_STORAGE_NAMESPACE","FlagOverridePlugin","debugOverride","storage","i","storedValue","value","JSON","flagKey","storageKey","keysToRemove","prefix","getWindow","lazyLoadToolbar","signal","url","existing","Promise","lazyLoad","toolbarModule","Error","existingScript","document","resolve","reject","script","waitForLoad","useLaunchDarklyToolbar","args","toolbarBundleUrl","enabled","initConfig","configRef","useRef","versionToCdn","packageJson","useEffect","controller","AbortController","cleanup","importedToolbar","version"],"mappings":"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"}