{"version":3,"sources":["../src/core.ts","../src/beacon.ts","../src/index.ts"],"names":["flush"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { TelemetryProperties } from './types';\n\nexport interface ParsedConnectionString {\n  instrumentationKey: string;\n  /** Ingestion endpoint with any trailing slash removed. */\n  ingestionEndpoint: string;\n}\n\n/** Parse an Application Insights connection string into its key + ingestion endpoint. */\nexport function parseConnectionString(cs: string | undefined | null): ParsedConnectionString | null {\n  if (!cs) return null;\n  const parts: Record<string, string> = {};\n  for (const kv of cs.split(';')) {\n    const i = kv.indexOf('=');\n    if (i > 0) parts[kv.slice(0, i).trim().toLowerCase()] = kv.slice(i + 1).trim();\n  }\n  const instrumentationKey = parts['instrumentationkey'];\n  if (!instrumentationKey) return null;\n  const endpoint = parts['ingestionendpoint'] || 'https://dc.services.visualstudio.com';\n  return { instrumentationKey, ingestionEndpoint: endpoint.replace(/\\/+$/, '') };\n}\n\n/** True only in a real browser context (guards SSR / Node / test environments). */\nexport function isBrowser(): boolean {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/** RFC-4122-ish id; prefers `crypto.randomUUID` and falls back to Math.random. */\nexport function uuid(): string {\n  const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n  if (c?.randomUUID) return c.randomUUID();\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (ch) => {\n    const r = (Math.random() * 16) | 0;\n    return (ch === 'x' ? r : (r & 0x3) | 0x8).toString(16);\n  });\n}\n\nexport function clamp01(n: number): number {\n  return Number.isFinite(n) ? Math.max(0, Math.min(1, n)) : 1;\n}\n\n/** Drop nullish props and coerce values to strings (Application Insights properties are strings). */\nexport function cleanProperties(props?: TelemetryProperties): Record<string, string> | undefined {\n  if (!props) return undefined;\n  const out: Record<string, string> = {};\n  for (const [k, v] of Object.entries(props)) {\n    if (v !== undefined && v !== null) out[k] = String(v);\n  }\n  return Object.keys(out).length ? out : undefined;\n}\n\n/** Create a per-client debouncer keyed by an id. */\nexport function createDebouncer(): (id: string, fn: () => void, delayMs: number) => void {\n  const timers = new Map<string, ReturnType<typeof setTimeout>>();\n  return (id, fn, delayMs) => {\n    const existing = timers.get(id);\n    if (existing) clearTimeout(existing);\n    timers.set(id, setTimeout(() => {\n      timers.delete(id);\n      fn();\n    }, delayMs));\n  };\n}\n","import type { Analytics, InitOptions, TelemetryMeasurements, TelemetryProperties } from './types';\nimport { clamp01, cleanProperties, createDebouncer, isBrowser, parseConnectionString, uuid } from './core';\n\nconst SDK_VERSION = 'cookieless-insights-beacon:0.1.0';\n\ninterface Envelope {\n  name: string;\n  time: string;\n  iKey: string;\n  tags: Record<string, string>;\n  data: { baseType: string; baseData: Record<string, unknown> };\n}\n\n/**\n * Ultra-lite, dependency-free transport. Builds Application Insights envelopes\n * and posts them to the ingestion endpoint via `navigator.sendBeacon` (or\n * `fetch` with `keepalive`). Cookieless by construction: it never reads or\n * writes cookies, localStorage, or sessionStorage, and keeps only an in-memory\n * session id — so no consent banner is required.\n */\nexport function createBeaconClient(options: InitOptions): Analytics {\n  const parsed = parseConnectionString(options.connectionString);\n  const samplingRate = clamp01(options.samplingRate ?? 1);\n  const flushIntervalMs = options.flushIntervalMs ?? 5000;\n  const maxBatchSize = options.maxBatchSize ?? 50;\n\n  const ikey = parsed?.instrumentationKey ?? '';\n  const normalizedIkey = ikey.replace(/-/g, '');\n  const trackUrl = parsed ? `${parsed.ingestionEndpoint}/v2.1/track` : '';\n  const sessionId = uuid();\n  const debounce = createDebouncer();\n\n  let enabled = options.enabled !== false && !!parsed && isBrowser();\n  let buffer: Envelope[] = [];\n  let timer: ReturnType<typeof setTimeout> | null = null;\n\n  const baseTags = (): Record<string, string> => {\n    const tags: Record<string, string> = {\n      'ai.session.id': sessionId,\n      'ai.device.type': 'Browser',\n      'ai.internal.sdkVersion': SDK_VERSION,\n    };\n    if (options.cloudRole) tags['ai.cloud.role'] = options.cloudRole;\n    if (isBrowser()) tags['ai.operation.name'] = document.title || location.pathname;\n    return tags;\n  };\n\n  const envelope = (typeName: string, baseType: string, baseData: Record<string, unknown>): Envelope => ({\n    name: `Microsoft.ApplicationInsights.${normalizedIkey}.${typeName}`,\n    time: new Date().toISOString(),\n    iKey: ikey,\n    tags: baseTags(),\n    data: { baseType, baseData },\n  });\n\n  // text/plain avoids a CORS preflight and lets sendBeacon carry the payload.\n  const post = (body: string): void => {\n    const nav = (globalThis as { navigator?: Navigator }).navigator;\n    if (nav && typeof nav.sendBeacon === 'function') {\n      try {\n        if (nav.sendBeacon(trackUrl, body)) return;\n      } catch {\n        /* fall through to fetch */\n      }\n    }\n    try {\n      void fetch(trackUrl, {\n        method: 'POST',\n        headers: { 'Content-Type': 'text/plain' },\n        body,\n        keepalive: true,\n        credentials: 'omit',\n        mode: 'cors',\n      }).catch(() => {\n        /* analytics must never throw */\n      });\n    } catch {\n      /* ignore */\n    }\n  };\n\n  const flush = (): void => {\n    if (!buffer.length || !trackUrl) return;\n    const items = buffer;\n    buffer = [];\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    post(JSON.stringify(items));\n  };\n\n  const scheduleFlush = (): void => {\n    if (timer) return;\n    timer = setTimeout(() => {\n      timer = null;\n      flush();\n    }, flushIntervalMs);\n  };\n\n  const enqueue = (e: Envelope): void => {\n    if (!enabled) return;\n    if (samplingRate < 1 && Math.random() > samplingRate) return;\n    buffer.push(e);\n    if (buffer.length >= maxBatchSize) flush();\n    else scheduleFlush();\n  };\n\n  // Flush on tab hide / page unload so short visits aren't lost.\n  if (enabled && isBrowser()) {\n    document.addEventListener('visibilitychange', () => {\n      if (document.visibilityState === 'hidden') flush();\n    });\n    window.addEventListener('pagehide', flush);\n  }\n\n  const api: Analytics = {\n    get enabled() {\n      return enabled;\n    },\n    setEnabled(next: boolean) {\n      enabled = next && !!parsed && isBrowser();\n      if (!enabled) buffer = [];\n    },\n    trackEvent(name: string, properties?: TelemetryProperties, measurements?: TelemetryMeasurements) {\n      enqueue(envelope('Event', 'EventData', {\n        ver: 2,\n        name,\n        properties: cleanProperties(properties),\n        measurements,\n      }));\n    },\n    trackPageView(name?: string, uri?: string, properties?: TelemetryProperties) {\n      enqueue(envelope('PageView', 'PageViewData', {\n        ver: 2,\n        name: name ?? (isBrowser() ? document.title : 'page'),\n        url: uri ?? (isBrowser() ? location.href : undefined),\n        id: uuid(),\n        properties: cleanProperties(properties),\n      }));\n    },\n    trackChangeDebounced(name: string, key: string, delayMs = 700) {\n      if (!enabled) return;\n      debounce(`${name}::${key}`, () => api.trackEvent(name, { key }), delayMs);\n    },\n    flush,\n  };\n\n  if (options.autoPageView !== false) api.trackPageView();\n  return api;\n}\n","import { createBeaconClient } from './beacon';\nimport type { Analytics, InitOptions, TelemetryMeasurements, TelemetryProperties } from './types';\n\nexport type { Analytics, InitOptions, TelemetryMeasurements, TelemetryProperties } from './types';\nexport { createBeaconClient } from './beacon';\nexport { parseConnectionString } from './core';\nexport type { ParsedConnectionString } from './core';\n\nlet singleton: Analytics | null = null;\n\n/**\n * Initialize the default (beacon) analytics client once. Safe to call\n * repeatedly — subsequent calls return the existing client. The returned client\n * is a safe no-op when disabled or outside a browser.\n */\nexport function init(options: InitOptions): Analytics {\n  if (!singleton) singleton = createBeaconClient(options);\n  return singleton;\n}\n\n/** The active client, or `null` if {@link init} hasn't been called yet. */\nexport function getClient(): Analytics | null {\n  return singleton;\n}\n\nexport function trackEvent(\n  name: string,\n  properties?: TelemetryProperties,\n  measurements?: TelemetryMeasurements,\n): void {\n  singleton?.trackEvent(name, properties, measurements);\n}\n\nexport function trackPageView(name?: string, uri?: string, properties?: TelemetryProperties): void {\n  singleton?.trackPageView(name, uri, properties);\n}\n\nexport function trackChangeDebounced(name: string, key: string, delayMs?: number): void {\n  singleton?.trackChangeDebounced(name, key, delayMs);\n}\n\nexport function flush(): void {\n  singleton?.flush();\n}\n\nexport function setEnabled(enabled: boolean): void {\n  singleton?.setEnabled(enabled);\n}\n"]}