{"version":3,"file":"index.cjs","sources":["../src/core/activity.ts","../src/core/autocapture.ts","../src/core/errors.ts","../src/core/fingerprint.ts","../src/core/queue.ts","../src/core/utm.ts","../src/core/tracker.ts","../src/react/NohmoProvider.tsx","../src/react/usePageView.ts","../src/core/route.ts","../src/next/NohmoProvider.tsx"],"sourcesContent":["// Shared \"the app did something\" signal.\n//\n// Dead-click detection needs to know whether a click caused any work at all. DOM\n// mutations and navigations are observable from AutoCapture directly, but network\n// requests are not — and \"clicked, fired a request, request came back empty\" is one of\n// the most common silent failures there is.\n//\n// ErrorCapture already wraps fetch and XHR to catch failures, so it records every\n// request here as it passes. Keeping the signal in a module-level singleton means we\n// wrap the network stack exactly once: a second patch layered on top would make\n// teardown order-dependent and could leave a wrapped fetch behind after destroy().\n\nlet lastNetworkAt = 0\n\n/** Called by ErrorCapture on every outbound request (not just failed ones). */\nexport function markNetworkActivity(): void {\n  lastNetworkAt = Date.now()\n}\n\n/**\n * Whether any request has been issued at or after `since` (a Date.now() value).\n *\n * The comparison is `>=`, not `>`, and that matters: a click handler that calls fetch()\n * synchronously records its timestamp in the SAME millisecond the click was captured.\n * With a strict `>` that request would not count, and a perfectly working button that\n * fires exactly one request would be reported as a dead click.\n */\nexport function hadNetworkActivitySince(since: number): boolean {\n  return lastNetworkAt >= since\n}\n","import { hadNetworkActivitySince } from './activity'\n\ninterface TrackerSender {\n  send(event: string, data?: Record<string, unknown>): void\n}\n\ninterface ClickRecord {\n  count: number\n  ts: number\n}\n\ntype FormField = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n\nconst RELEVANT_TAGS = new Set(['A', 'BUTTON', 'INPUT', 'SELECT', 'TEXTAREA', 'LABEL', 'FORM'])\n\n// ── Dead-click detection ───────────────────────────────────────────────────\n// A click on something clickable that produces no navigation, no content change and no\n// network request is, from the user's point of view, broken — even though nothing threw\n// and no error monitor will ever see it.\n//\n// How long to wait before judging. Long enough for a request to start and React to\n// commit; short enough that the user has genuinely noticed nothing happened.\nconst DEAD_CLICK_WINDOW_MS = 2500\n// Don't report the same control more than once per this window (a frustrated user\n// clicks a broken button many times; that is one bug, not fifteen).\nconst DEAD_CLICK_DEDUP_MS = 10000\n// Elements a user expects to act on. Anything else is usually just the page background.\nconst ACTIONABLE_TAGS = new Set(['a', 'button'])\nconst ACTIONABLE_INPUT_TYPES = new Set(['submit', 'button'])\n\n// Attributes whose change means the app genuinely reacted, watched alongside DOM\n// content changes.\n//\n// Plenty of working controls respond without adding or removing a single node: a\n// dropdown flips aria-expanded, a submit button goes disabled while it posts, a\n// <details> gets open, a headless-UI component flips data-state. Judging on content\n// changes alone reports every one of those as broken.\n//\n// `class` and `style` are deliberately absent. They are the noisiest attributes on the\n// page — every hover, focus ring and transition writes to them — so including them\n// would mark essentially every click as alive and silently switch the detector off.\n// Everything below is semantic state that hover and focus never touch.\nconst STATE_ATTRIBUTES = [\n  'aria-expanded', 'aria-selected', 'aria-checked', 'aria-pressed',\n  'aria-hidden', 'aria-busy', 'aria-disabled', 'aria-invalid',\n  'disabled', 'open', 'hidden', 'checked', 'value', 'selected',\n  'data-state', 'data-open', 'data-loading',\n]\n\nexport class AutoCapture {\n  private tracker: TrackerSender\n  private clickCounts: Map<string, ClickRecord>\n  private cleanupFns: (() => void)[]\n  // Bumped by the MutationObserver whenever the app visibly reacts — content added or\n  // removed, text changed, or one of STATE_ATTRIBUTES toggled.\n  private contentChanges = 0\n  private observer: MutationObserver | null = null\n  // A Set, not an array: each timer removes itself when it fires, so this stays bounded\n  // by the clicks currently in flight and stop() can always clear every live one. The\n  // array version had to be sliced to stay bounded, which dropped the handles it sliced\n  // off — leaving timers stop() could no longer cancel.\n  private deadClickTimers: Set<ReturnType<typeof setTimeout>> = new Set()\n  private lastDeadReport: Map<string, number> = new Map()\n  private stopped = false\n\n  constructor(tracker: TrackerSender) {\n    this.tracker = tracker\n    this.clickCounts = new Map()\n    this.cleanupFns = []\n  }\n\n  start() {\n    if (typeof document === 'undefined') return\n    this.stopped = false\n\n    const onClick = (e: MouseEvent) => this.captureClick(e)\n    document.addEventListener('click', onClick, true)\n    this.cleanupFns.push(() => document.removeEventListener('click', onClick, true))\n\n    const onSubmit = (e: SubmitEvent) => this.captureSubmit(e)\n    document.addEventListener('submit', onSubmit, true)\n    this.cleanupFns.push(() => document.removeEventListener('submit', onSubmit, true))\n\n    const onChange = (e: Event) => this.captureInput(e)\n    document.addEventListener('change', onChange, true)\n    this.cleanupFns.push(() => document.removeEventListener('change', onChange, true))\n\n    this.startMutationWatch()\n  }\n\n  stop() {\n    this.stopped = true\n    this.deadClickTimers.forEach((t) => clearTimeout(t))\n    this.deadClickTimers.clear()\n    this.observer?.disconnect()\n    this.observer = null\n    this.cleanupFns.forEach((fn) => fn())\n    this.cleanupFns = []\n  }\n\n  private startMutationWatch() {\n    if (typeof MutationObserver === 'undefined' || !document.documentElement) return\n    this.observer = new MutationObserver((records) => {\n      for (const r of records) {\n        // A childList record that neither added nor removed anything is a reorder we\n        // can't attribute to a response; everything else here is a real reaction.\n        if (r.type === 'childList' && !r.addedNodes.length && !r.removedNodes.length) continue\n        this.contentChanges++\n        return      // one is enough — we only need to know THAT something happened\n      }\n    })\n    this.observer.observe(document.documentElement, {\n      childList: true,\n      subtree: true,\n      characterData: true,\n      attributes: true,\n      attributeFilter: STATE_ATTRIBUTES,\n    })\n  }\n\n  /**\n   * Whether this element's job is to do something OUTSIDE the current page — open a mail\n   * client, dial a number, start a download, open a new tab, or submit to another origin.\n   *\n   * All of those leave the page's URL, DOM and network untouched, so the dead-click test\n   * would call them broken every single time. They are working exactly as intended; we\n   * simply have no way to observe the outcome, so we decline to judge them.\n   */\n  private actsOutsideThePage(el: HTMLElement): boolean {\n    const anchor = el as HTMLAnchorElement\n    const rawHref = el.getAttribute?.('href') ?? ''\n    if (rawHref) {\n      const scheme = rawHref.slice(0, rawHref.indexOf(':') + 1).toLowerCase()\n      // Non-http(s) schemes hand off to the OS: mailto:, tel:, sms:, intent:, app links…\n      if (scheme && scheme !== 'http:' && scheme !== 'https:') return true\n    }\n    if (el.hasAttribute?.('download')) return true\n    const target = anchor.target || el.getAttribute?.('target') || ''\n    if (target && target !== '_self') return true\n    // A form button that posts to another origin navigates away from our observation too.\n    const formAction = (el as HTMLButtonElement).formAction || ''\n    if (formAction && !formAction.startsWith(window.location.origin)) return true\n    return false\n  }\n\n  private isActionable(el: HTMLElement): boolean {\n    const tag = el.tagName.toLowerCase()\n    if (ACTIONABLE_TAGS.has(tag)) return true\n    const type = (el as HTMLInputElement).type?.toLowerCase()\n    if (type && ACTIONABLE_INPUT_TYPES.has(type)) return true\n    if ((el as HTMLAnchorElement).href) return true\n    if (el.getAttribute('role') === 'button') return true\n    return !!(el.dataset.track || el.dataset.nohmo)\n  }\n\n  /**\n   * Watch what a click actually did. Fires DEAD_CLICK only when nothing at all happened:\n   * no navigation, no DOM content change, no network request.\n   *\n   * Deliberately biased toward silence. Every ambiguous signal is read as \"the app\n   * responded\", so this under-reports rather than crying wolf — a false dead click sends\n   * an engineer hunting for a bug that does not exist, which is worse than missing one.\n   * The server-side detector in the backend catches what this misses.\n   */\n  private watchForDeadClick(el: HTMLElement, props: Record<string, unknown>) {\n    if (typeof window === 'undefined') return\n    if (this.actsOutsideThePage(el)) return\n\n    const selector = String(props.selector ?? '')\n    const dedupKey = `${this.page()}|${selector}|${String(props.text ?? '')}`\n    const last = this.lastDeadReport.get(dedupKey)\n    const clickedAt = Date.now()\n    if (last !== undefined && clickedAt - last < DEAD_CLICK_DEDUP_MS) return\n\n    const changesAtClick = this.contentChanges\n    const urlAtClick = window.location.href\n    // A link that leaves the page entirely: the timer never runs, so nothing is reported.\n    const timer: ReturnType<typeof setTimeout> = setTimeout(() => {\n      // Drop our own handle first, so the set stays bounded by the number of clicks\n      // actually in flight rather than growing for the life of the session.\n      this.deadClickTimers.delete(timer)\n      if (this.stopped) return\n      if (window.location.href !== urlAtClick) return          // navigated\n      if (this.contentChanges > changesAtClick) return          // rendered something\n      if (hadNetworkActivitySince(clickedAt)) return            // asked the server\n      if (document.hidden) return                               // user left the tab; can't judge\n\n      // Re-check the dedup at REPORT time, not just at click time. A frustrated user\n      // jabbing a dead button three times arms three timers before any of them has fired,\n      // so the click-time check alone would let all three through and report one broken\n      // control as three separate failures.\n      const reportedAt = Date.now()\n      const already = this.lastDeadReport.get(dedupKey)\n      if (already !== undefined && reportedAt - already < DEAD_CLICK_DEDUP_MS) return\n\n      this.lastDeadReport.set(dedupKey, reportedAt)\n      if (this.lastDeadReport.size > 100) this.lastDeadReport.clear()\n      this.tracker.send('DEAD_CLICK', {\n        ...props,\n        waitedMs: DEAD_CLICK_WINDOW_MS,\n      })\n    }, DEAD_CLICK_WINDOW_MS)\n\n    this.deadClickTimers.add(timer)\n  }\n\n  private page(): string {\n    return typeof window !== 'undefined' ? window.location.pathname : ''\n  }\n\n  private captureClick(e: MouseEvent) {\n    const target = e.target as HTMLElement\n    if (!target) return\n    if (target.closest('[data-nohmo-ignore]')) return\n\n    const element = this.getRelevantElement(target)\n    if (!element) return\n\n    const props = this.extractElementProps(element)\n\n    const key = `${Math.round(e.clientX / 10)},${Math.round(e.clientY / 10)}`\n    const existing = this.clickCounts.get(key)\n    const now = Date.now()\n\n    if (existing && now - existing.ts < 1000) {\n      existing.count++\n      existing.ts = now\n      if (existing.count === 3) {\n        this.tracker.send('RAGE_CLICK', { ...props, x: e.clientX, y: e.clientY })\n      }\n    } else {\n      this.clickCounts.set(key, { count: 1, ts: now })\n    }\n\n    this.tracker.send('CLICK', { ...props, x: e.clientX, y: e.clientY })\n\n    if (this.isActionable(element)) {\n      this.watchForDeadClick(element, props)\n    }\n  }\n\n  private captureSubmit(e: SubmitEvent) {\n    const form = e.target as HTMLFormElement\n    if (!form) return\n    if (form.closest('[data-nohmo-ignore]')) return\n\n    const fields = Array.from(form.elements)\n      .filter((el): el is FormField =>\n        el instanceof HTMLInputElement ||\n        el instanceof HTMLSelectElement ||\n        el instanceof HTMLTextAreaElement\n      )\n      .filter((el) => (el as HTMLInputElement).type !== 'password')\n      .map((el) => ({\n        name: el.name || el.id || (el instanceof HTMLInputElement ? el.type : el.tagName),\n        type: el instanceof HTMLInputElement ? el.type : el.tagName.toLowerCase(),\n        required: el.required,\n      }))\n\n    this.tracker.send('FORM_SUBMIT', {\n      formId: form.id || null,\n      formName: form.getAttribute('name') || null,\n      action: form.action || null,\n      fieldCount: fields.length,\n      fields,\n    })\n  }\n\n  private captureInput(e: Event) {\n    const input = e.target as HTMLInputElement\n    if (!input) return\n    if (input.closest('[data-nohmo-ignore]')) return\n\n    if (\n      input.type === 'password' ||\n      input.type === 'hidden' ||\n      input.hasAttribute('data-sensitive') ||\n      input.autocomplete?.includes('cc') ||\n      input.autocomplete?.includes('password')\n    ) return\n\n    this.tracker.send('INPUT_CHANGE', {\n      fieldName: input.name || input.id || input.placeholder || null,\n      fieldType: input.type,\n      tag: input.tagName.toLowerCase(),\n    })\n  }\n\n  private getRelevantElement(target: HTMLElement): HTMLElement {\n    let el: HTMLElement | null = target\n\n    for (let i = 0; i < 5; i++) {\n      if (!el) return target\n      if (RELEVANT_TAGS.has(el.tagName)) return el\n      if (el.dataset.track || el.dataset.nohmo) return el\n      el = el.parentElement\n    }\n\n    return target\n  }\n\n  private extractElementProps(el: HTMLElement): Record<string, unknown> {\n    const dataAttrs: Record<string, string> = {}\n    Array.from(el.attributes)\n      .filter((a) => a.name.startsWith('data-'))\n      .forEach((a) => {\n        dataAttrs[a.name.slice(5)] = a.value\n      })\n\n    return {\n      tag: el.tagName.toLowerCase(),\n      text: this.getCleanText(el),\n      id: el.id || null,\n      name: (el as HTMLInputElement).name || null,\n      href: (el as HTMLAnchorElement).href || null,\n      classes: el.className || null,\n      type: (el as HTMLInputElement).type || null,\n      dataAttributes: dataAttrs,\n      selector: this.getSelector(el),\n    }\n  }\n\n  private getCleanText(el: HTMLElement): string {\n    return (el.innerText || el.textContent || '').trim().replace(/\\s+/g, ' ').slice(0, 100)\n  }\n\n  private getSelector(el: HTMLElement): string {\n    let selector = el.tagName.toLowerCase()\n    if (el.id) selector += `#${el.id}`\n    if (el.className) {\n      const classes = el.className\n        .split(' ')\n        .filter((c) => c.length > 0)\n        .slice(0, 3)\n        .join('.')\n      if (classes) selector += `.${classes}`\n    }\n    return selector\n  }\n}\n","// Automatic error & crash capture for the web SDK.\n// Emits JS_ERROR (uncaught exceptions + unhandled promise rejections),\n// HTTP_ERROR (failed fetch/XHR requests and resource 404s), and EMPTY_RESPONSE\n// (a request that succeeded but came back with nothing in it).\n// Mirrors the start()/stop() + cleanupFns pattern of AutoCapture.\n\nimport { markNetworkActivity } from './activity'\n\ninterface ErrorSender {\n  send(event: string, data?: Record<string, unknown>): void\n  // Crash-class events flush immediately so an error preceding a navigation\n  // (or a full page crash) isn't lost in the periodic batch.\n  flushNow?(): void\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyFn = (...args: any[]) => any\n\nconst MAX_MESSAGE = 1000\nconst MAX_STACK = 4000\nconst DEDUP_MS = 5000        // drop an identical signature seen within this window\nconst RATE_WINDOW_MS = 60000 // rolling window for the per-minute cap\nconst RATE_MAX = 25          // max errors reported per window (survives error storms)\n\n// ── Empty successful responses ─────────────────────────────────────────────\n// A 200 carrying `[]` when the user expected their orders is a total product failure\n// that no error monitor will ever report — nothing threw, and the status code says\n// everything is fine.\n//\n// Only bodies at or under this size are inspected. Anything larger is definitionally\n// not empty, and skipping them means we never buffer a big response just to look at it.\nconst EMPTY_BODY_MAX_BYTES = 2048\n// Body values that mean \"the request worked and returned nothing useful\".\nconst EMPTY_BODY_LITERALS = new Set(['', '[]', '{}', 'null', '\"\"'])\n// Common envelope keys — `{\"data\": []}` is just as empty as `[]`.\nconst ENVELOPE_KEYS = ['data', 'results', 'items', 'records', 'rows', 'list']\n// Empty responses are lower-stakes than crashes, so they get a smaller budget of their own.\nconst EMPTY_RATE_MAX = 10\n\nexport class ErrorCapture {\n  private tracker: ErrorSender\n  private cleanupFns: (() => void)[] = []\n  private recent = new Map<string, number>()\n  private windowStart = 0\n  private windowCount = 0\n  // Separate dedup/rate state so empty responses can never crowd out crash reports.\n  private recentEmpty = new Map<string, number>()\n  private emptyWindowStart = 0\n  private emptyWindowCount = 0\n  private xhrMeta = new WeakMap<XMLHttpRequest, { method: string; url: string }>()\n\n  constructor(tracker: ErrorSender) {\n    this.tracker = tracker\n  }\n\n  start() {\n    if (typeof window === 'undefined') return\n\n    const onError = (e: ErrorEvent) => this.onError(e)\n    // capture phase so resource-load failures (img/script/link 404s) are seen too\n    window.addEventListener('error', onError, true)\n    this.cleanupFns.push(() => window.removeEventListener('error', onError, true))\n\n    const onRejection = (e: PromiseRejectionEvent) => this.onRejection(e)\n    window.addEventListener('unhandledrejection', onRejection)\n    this.cleanupFns.push(() => window.removeEventListener('unhandledrejection', onRejection))\n\n    this.patchFetch()\n    this.patchXHR()\n  }\n\n  stop() {\n    this.cleanupFns.forEach((fn) => fn())\n    this.cleanupFns = []\n  }\n\n  // ── Uncaught errors & resource failures ──────────────────────────────────\n  private onError(e: ErrorEvent) {\n    const target = e.target as (HTMLElement & { src?: string; href?: string }) | null\n\n    // Resource load failure (img/script/link). For these the event target is the\n    // element, e.message is empty, and e.error is null.\n    if (target && target !== (window as unknown) && typeof target.tagName === 'string') {\n      const url = target.src || target.href || ''\n      if (!url) return\n      const tag = target.tagName.toLowerCase()\n      const clean = this.stripQuery(url)\n      if (this.isIgnored(clean)) return\n      if (!this.allow(`resource:${tag}:${clean}`)) return\n      this.tracker.send('HTTP_ERROR', {\n        kind: 'resource',\n        url: clean,\n        method: 'GET',\n        status: 0,\n        statusText: 'Resource failed to load',\n        tag,\n        page: this.page(),\n      })\n      return\n    }\n\n    const err = e.error as Error | undefined\n    // Cross-origin scripts surface as an opaque \"Script error.\" with no file,\n    // line, or stack — there's nothing actionable to report, so drop it.\n    if (!err && !e.filename && (!e.message || e.message === 'Script error.')) return\n\n    const message = this.trunc(e.message || err?.message || 'Unknown error', MAX_MESSAGE)\n    if (!this.allow(`js:${message}:${e.filename}:${e.lineno}`)) return\n    this.emitCrash('JS_ERROR', {\n      kind: 'error',\n      message,\n      stack: err?.stack ? this.trunc(String(err.stack), MAX_STACK) : '',\n      filename: e.filename || '',\n      lineno: e.lineno || 0,\n      colno: e.colno || 0,\n      page: this.page(),\n    })\n  }\n\n  // ── Unhandled promise rejections ─────────────────────────────────────────\n  private onRejection(e: PromiseRejectionEvent) {\n    const reason = e.reason\n    let message = 'Unhandled promise rejection'\n    let stack = ''\n\n    if (reason instanceof Error) {\n      message = reason.message || message\n      stack = reason.stack ? String(reason.stack) : ''\n    } else if (typeof reason === 'string') {\n      message = reason\n    } else if (reason != null) {\n      try {\n        message = JSON.stringify(reason)\n      } catch {\n        message = String(reason)\n      }\n    }\n\n    message = this.trunc(message, MAX_MESSAGE)\n    if (!this.allow(`rejection:${message}`)) return\n    this.emitCrash('JS_ERROR', {\n      kind: 'unhandledrejection',\n      message,\n      stack: this.trunc(stack, MAX_STACK),\n      page: this.page(),\n    })\n  }\n\n  // ── fetch / XHR network errors ───────────────────────────────────────────\n  private patchFetch() {\n    if (typeof window.fetch !== 'function') return\n    const originalFetch = window.fetch\n    const self = this\n\n    window.fetch = function (...args: Parameters<typeof fetch>): Promise<Response> {\n      const url = self.urlOf(args[0])\n      const method = self.methodOf(args[0], args[1])\n      // Tell dead-click detection that this click did cause work, whatever the outcome.\n      // Our OWN batch flush must not count: it fires every few seconds regardless of what\n      // the user did, and would mask every dead click behind a coincidental heartbeat.\n      self.markAppActivity(url)\n      // Always invoke the real fetch with the global as receiver to avoid\n      // \"Illegal invocation\" — never change its behaviour.\n      return originalFetch.apply(window, args).then(\n        (res: Response) => {\n          if (res && res.status >= 400) {\n            self.reportHttp('fetch', url, method, res.status, res.statusText)\n          } else if (res && res.ok) {\n            self.inspectForEmptyBody(res, url, method)\n          }\n          return res\n        },\n        (err: unknown) => {\n          self.reportHttp('fetch', url, method, 0, err instanceof Error ? err.message : 'Network error')\n          throw err\n        }\n      )\n    } as typeof fetch\n\n    this.cleanupFns.push(() => { window.fetch = originalFetch })\n  }\n\n  private patchXHR() {\n    if (typeof XMLHttpRequest === 'undefined') return\n    const proto = XMLHttpRequest.prototype\n    const originalOpen = proto.open\n    const originalSend = proto.send\n    const self = this\n\n    proto.open = function (this: XMLHttpRequest, method: string, url: string | URL, ...rest: unknown[]) {\n      self.xhrMeta.set(this, { method: (method || 'GET').toUpperCase(), url: String(url) })\n      return (originalOpen as AnyFn).apply(this, [method, url, ...rest])\n    } as typeof proto.open\n\n    proto.send = function (this: XMLHttpRequest, ...args: unknown[]) {\n      const meta = self.xhrMeta.get(this)\n      if (meta) self.markAppActivity(meta.url)\n      if (meta) {\n        this.addEventListener('load', () => {\n          if (this.status >= 400) {\n            self.reportHttp('xhr', meta.url, meta.method, this.status, this.statusText)\n            return\n          }\n          if (this.status >= 200 && this.status < 300) {\n            // XHR already holds the decoded body, so unlike fetch there is nothing to\n            // clone and no extra buffering to pay for — but ONLY for text-ish response\n            // types. Reading .responseText throws for 'blob'/'arraybuffer'/'document',\n            // and treating an unreadable body as \"\" would report every binary download\n            // as an empty response. When we cannot see the body, we say nothing.\n            const type = this.responseType\n            if (type === '' || type === 'text') {\n              let body = ''\n              try {\n                body = this.responseText || ''\n              } catch {\n                return\n              }\n              self.reportEmptyIfEmpty('xhr', meta.url, meta.method, this.status, body)\n            } else if (type === 'json') {\n              // Already parsed for us; check the value directly rather than re-serialising.\n              let parsed: unknown\n              try {\n                parsed = this.response\n              } catch {\n                return\n              }\n              if (self.isEmptyValue(parsed)) {\n                self.reportEmpty('xhr', meta.url, meta.method, this.status, 0)\n              }\n            }\n          }\n        })\n        this.addEventListener('error', () => {\n          self.reportHttp('xhr', meta.url, meta.method, 0, 'Network error')\n        })\n      }\n      return (originalSend as AnyFn).apply(this, args)\n    } as typeof proto.send\n\n    this.cleanupFns.push(() => {\n      proto.open = originalOpen\n      proto.send = originalSend\n    })\n  }\n\n  private reportHttp(kind: 'fetch' | 'xhr', url: string, method: string, status: number, statusText: string) {\n    if (!this.isTrackableUrl(url)) return // ignore extension / custom-scheme noise (e.g. properties://, chrome-extension://)\n    const clean = this.stripQuery(url)\n    if (this.isIgnored(clean)) return // never report our own tracking endpoint → no loop\n    if (!this.allow(`http:${status}:${method}:${clean}`)) return\n    this.tracker.send('HTTP_ERROR', {\n      kind,\n      url: clean,\n      method,\n      status,\n      statusText: this.trunc(statusText || '', 200),\n      page: this.page(),\n    })\n  }\n\n  private emitCrash(event: string, data: Record<string, unknown>) {\n    this.tracker.send(event, data)\n    this.tracker.flushNow?.()\n  }\n\n  // ── Empty successful responses ───────────────────────────────────────────\n  /**\n   * Look at a 2xx fetch response only when it is cheap and safe to do so.\n   *\n   * A body is inspected only if the server declared a Content-Length at or under\n   * EMPTY_BODY_MAX_BYTES. That single condition guarantees we never buffer anything\n   * large and never touch a streamed or chunked response — a response big enough to\n   * lack a length header cannot be empty anyway, so nothing worth reporting is lost.\n   */\n  private inspectForEmptyBody(res: Response, url: string, method: string) {\n    if (!this.isTrackableUrl(url)) return\n    const clean = this.stripQuery(url)\n    if (this.isIgnored(clean)) return\n\n    const type = res.headers.get('content-type') || ''\n    if (!type.includes('json') && !type.includes('text/plain')) return\n\n    const lengthHeader = res.headers.get('content-length')\n    if (lengthHeader === null) return\n    const length = Number(lengthHeader)\n    if (!Number.isFinite(length) || length > EMPTY_BODY_MAX_BYTES) return\n\n    // clone() so the caller's own res.json()/res.text() is completely unaffected.\n    let copy: Response\n    try {\n      copy = res.clone()\n    } catch {\n      return\n    }\n    copy.text().then(\n      (body) => this.reportEmptyIfEmpty('fetch', url, method, res.status, body),\n      () => undefined,\n    )\n  }\n\n  /** True when an already-parsed JSON value carries no actual content. */\n  private isEmptyValue(parsed: unknown): boolean {\n    if (parsed === null || parsed === undefined) return true\n    if (Array.isArray(parsed)) return parsed.length === 0\n    if (typeof parsed === 'object') {\n      const obj = parsed as Record<string, unknown>\n      if (Object.keys(obj).length === 0) return true\n      // `{\"data\": []}` / `{\"results\": null}` are empty in every way that matters to a user.\n      for (const key of ENVELOPE_KEYS) {\n        if (key in obj) {\n          const inner = obj[key]\n          if (inner === null || (Array.isArray(inner) && inner.length === 0)) return true\n        }\n      }\n    }\n    return false\n  }\n\n  /** True when a successful body carries no actual content. */\n  private isEmptyBody(body: string): boolean {\n    const trimmed = (body || '').trim()\n    if (EMPTY_BODY_LITERALS.has(trimmed)) return true\n    if (trimmed.length > EMPTY_BODY_MAX_BYTES) return false\n\n    let parsed: unknown\n    try {\n      parsed = JSON.parse(trimmed)\n    } catch {\n      return false      // not JSON and not blank — it carries something\n    }\n    return this.isEmptyValue(parsed)\n  }\n\n  private reportEmptyIfEmpty(\n    kind: 'fetch' | 'xhr', url: string, method: string, status: number, body: string,\n  ) {\n    if (!this.isEmptyBody(body)) return\n    this.reportEmpty(kind, url, method, status, (body || '').length)\n  }\n\n  private reportEmpty(\n    kind: 'fetch' | 'xhr', url: string, method: string, status: number, bytes: number,\n  ) {\n    const clean = this.stripQuery(url)\n    if (this.isIgnored(clean)) return\n    // Empty responses get their OWN rate budget. Sharing allow() with JS_ERROR and\n    // HTTP_ERROR would let a chatty endpoint returning [] exhaust the per-minute cap and\n    // starve real crash reporting, which is the one thing that must always get through.\n    if (!this.allowEmpty(`empty:${method}:${clean}`)) return\n    this.tracker.send('EMPTY_RESPONSE', {\n      kind,\n      url: clean,\n      method,\n      status,\n      bytes,\n      page: this.page(),\n    })\n  }\n\n  /** Record a request as evidence the app reacted — unless it is one of ours. */\n  private markAppActivity(url: string) {\n    if (this.isIgnored(this.stripQuery(url))) return\n    markNetworkActivity()\n  }\n\n  // ── helpers ──────────────────────────────────────────────────────────────\n  private allow(signature: string): boolean {\n    const now = Date.now()\n\n    const last = this.recent.get(signature)\n    if (last !== undefined && now - last < DEDUP_MS) return false\n    this.recent.set(signature, now)\n    if (this.recent.size > 200) this.recent.clear() // bound memory\n\n    if (now - this.windowStart > RATE_WINDOW_MS) {\n      this.windowStart = now\n      this.windowCount = 0\n    }\n    if (this.windowCount >= RATE_MAX) return false\n    this.windowCount++\n    return true\n  }\n\n  /** Dedup + rate limit for EMPTY_RESPONSE, on a budget of its own. */\n  private allowEmpty(signature: string): boolean {\n    const now = Date.now()\n\n    const last = this.recentEmpty.get(signature)\n    if (last !== undefined && now - last < DEDUP_MS) return false\n    this.recentEmpty.set(signature, now)\n    if (this.recentEmpty.size > 200) this.recentEmpty.clear()\n\n    if (now - this.emptyWindowStart > RATE_WINDOW_MS) {\n      this.emptyWindowStart = now\n      this.emptyWindowCount = 0\n    }\n    if (this.emptyWindowCount >= EMPTY_RATE_MAX) return false\n    this.emptyWindowCount++\n    return true\n  }\n\n  private isIgnored(url: string): boolean {\n    return url.includes('/api/tracker/')\n  }\n\n  // Only real http(s) requests belong to the app. Custom schemes like\n  // properties://, chrome-extension://, moz-extension://, data:, blob: come from\n  // browser extensions or the platform — not the user's code — so they're never\n  // reported as HTTP errors. Relative URLs resolve against the page (http/https).\n  private isTrackableUrl(url: string): boolean {\n    try {\n      const base = typeof window !== 'undefined' ? window.location.href : undefined\n      const protocol = new URL(url, base).protocol\n      return protocol === 'http:' || protocol === 'https:'\n    } catch {\n      return false\n    }\n  }\n\n  private urlOf(input: RequestInfo | URL): string {\n    if (typeof input === 'string') return input\n    if (input instanceof URL) return input.toString()\n    if (input && typeof input === 'object' && 'url' in input) return (input as Request).url\n    return String(input)\n  }\n\n  private methodOf(input: RequestInfo | URL, init?: RequestInit): string {\n    if (init?.method) return init.method.toUpperCase()\n    if (input && typeof input === 'object' && 'method' in input) return (input as Request).method.toUpperCase()\n    return 'GET'\n  }\n\n  private stripQuery(url: string): string {\n    const i = url.indexOf('?')\n    return i === -1 ? url : url.slice(0, i)\n  }\n\n  private trunc(s: string, n: number): string {\n    return s.length > n ? s.slice(0, n) : s\n  }\n\n  private page(): string {\n    return typeof window !== 'undefined' ? window.location.pathname : ''\n  }\n}\n","let cachedDeviceId: string | null = null\nlet cachedStableId: string | null = null\nlet cachedDeviceInfo: DeviceInfo | null = null\n\nexport interface DeviceInfo {\n  type: 'mobile' | 'tablet' | 'desktop'\n  os: string\n  browser: string\n  browserVersion: string\n  screenW: number\n  screenH: number\n  viewportW: number\n  viewportH: number\n  pixelRatio: number\n  language: string\n  timezone: string\n  touch: boolean\n}\n\nexport function getDeviceInfo(): DeviceInfo {\n  if (cachedDeviceInfo) return cachedDeviceInfo\n\n  const ua = navigator.userAgent\n\n  let type: DeviceInfo['type'] = 'desktop'\n  if (/iPad|Android(?!.*Mobile)/i.test(ua)) type = 'tablet'\n  else if (/Mobi|Android.*Mobile|iPhone|iPod/i.test(ua)) type = 'mobile'\n\n  let os = 'Unknown'\n  if (/Windows NT/.test(ua)) os = 'Windows'\n  else if (/iPhone|iPod/.test(ua)) os = 'iOS'\n  else if (/iPad/.test(ua)) os = 'iPadOS'\n  else if (/Android/.test(ua)) os = 'Android'\n  else if (/Mac OS X/.test(ua)) os = 'macOS'\n  else if (/CrOS/.test(ua)) os = 'ChromeOS'\n  else if (/Linux/.test(ua)) os = 'Linux'\n\n  let browser = 'Unknown'\n  let browserVersion = ''\n  const edgeM = ua.match(/Edg\\/(\\d+)/)\n  const operaM = ua.match(/OPR\\/(\\d+)/)\n  const chromeM = ua.match(/Chrome\\/(\\d+)/)\n  const firefoxM = ua.match(/Firefox\\/(\\d+)/)\n  const safariM = ua.match(/Version\\/(\\d+).*Safari/)\n  if (edgeM)    { browser = 'Edge';    browserVersion = edgeM[1] }\n  else if (operaM)   { browser = 'Opera';   browserVersion = operaM[1] }\n  else if (chromeM)  { browser = 'Chrome';  browserVersion = chromeM[1] }\n  else if (firefoxM) { browser = 'Firefox'; browserVersion = firefoxM[1] }\n  else if (safariM)  { browser = 'Safari';  browserVersion = safariM[1] }\n\n  cachedDeviceInfo = {\n    type,\n    os,\n    browser,\n    browserVersion,\n    screenW: screen.width,\n    screenH: screen.height,\n    viewportW: window.innerWidth,\n    viewportH: window.innerHeight,\n    pixelRatio: window.devicePixelRatio ?? 1,\n    language: navigator.language,\n    timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n    touch: navigator.maxTouchPoints > 0,\n  }\n  return cachedDeviceInfo\n}\n\nfunction stableSignals(): string {\n  const nav = navigator\n  const scr = screen\n  return [\n    nav.userAgent,\n    nav.language,\n    nav.platform,\n    String(nav.hardwareConcurrency ?? ''),\n    String((nav as unknown as Record<string, unknown>)['deviceMemory'] ?? ''),\n    String(nav.maxTouchPoints ?? ''),\n    String(scr.width),\n    String(scr.height),\n    String(scr.colorDepth),\n    String(window.devicePixelRatio ?? ''),\n    Intl.DateTimeFormat().resolvedOptions().timeZone,\n  ].join('|')\n}\n\nasync function hash(input: string): Promise<string> {\n  const data = new TextEncoder().encode(input)\n  const buf = await crypto.subtle.digest('SHA-256', data)\n  return Array.from(new Uint8Array(buf))\n    .map(b => b.toString(16).padStart(2, '0'))\n    .join('')\n    .slice(0, 32)\n}\n\nexport async function getStableId(): Promise<string> {\n  if (cachedStableId) return cachedStableId\n\n  const stored = localStorage.getItem('_nohmo_sid')\n  if (stored) {\n    cachedStableId = stored\n    return stored\n  }\n\n  const id = await hash(stableSignals())\n  localStorage.setItem('_nohmo_sid', id)\n  cachedStableId = id\n  return id\n}\n\nexport function getDeviceId(): string {\n  if (cachedDeviceId) return cachedDeviceId\n\n  const stored = localStorage.getItem('_nohmo_did')\n  if (stored) {\n    cachedDeviceId = stored\n    return stored\n  }\n\n  const bytes = crypto.getRandomValues(new Uint8Array(16))\n  const id = Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('')\n  localStorage.setItem('_nohmo_did', id)\n  cachedDeviceId = id\n  return id\n}\n","import type { NohmoEvent } from './types'\n\nexport class EventQueue {\n  private queue: NohmoEvent[] = []\n  private timer: ReturnType<typeof setInterval> | null = null\n  private flushFn: (events: NohmoEvent[]) => void\n  private interval: number\n\n  constructor(\n    flushFn: (events: NohmoEvent[]) => void,\n    interval: number = 3000\n  ) {\n    this.flushFn = flushFn\n    this.interval = interval\n  }\n\n  start() {\n    this.timer = setInterval(() => this.flush(), this.interval)\n\n    if (typeof document !== 'undefined') {\n      document.addEventListener('visibilitychange', () => {\n        if (document.hidden) this.flush()\n      })\n    }\n    if (typeof window !== 'undefined') {\n      window.addEventListener('pagehide', () => this.flush())\n      window.addEventListener('beforeunload', () => this.flush())\n    }\n  }\n\n  push(event: NohmoEvent) {\n    this.queue.push(event)\n  }\n\n  flush() {\n    if (!this.queue.length) return\n    const batch = [...this.queue]\n    this.queue = []\n    this.flushFn(batch)\n  }\n\n  destroy() {\n    if (this.timer) clearInterval(this.timer)\n    this.flush()\n  }\n}\n","export interface UTMParams {\n  source?: string\n  medium?: string\n  campaign?: string\n  term?: string\n  content?: string\n  _custom?: boolean\n}\n\nconst DEFAULT_ATTRIBUTION_PARAMS = ['ref']\n\nexport function getUTMParams(attributionParams: string[] = DEFAULT_ATTRIBUTION_PARAMS): UTMParams {\n  if (typeof window === 'undefined') return {}\n\n  const params = new URLSearchParams(window.location.search)\n  const fromUrl: UTMParams = {}\n\n  const s  = params.get('utm_source')\n  const m  = params.get('utm_medium')\n  const c  = params.get('utm_campaign')\n  const t  = params.get('utm_term')\n  const co = params.get('utm_content')\n\n  if (s)  fromUrl.source   = s\n  if (m)  fromUrl.medium   = m\n  if (c)  fromUrl.campaign = c\n  if (t)  fromUrl.term     = t\n  if (co) fromUrl.content  = co\n\n  // Walk the custom attribution list — if a match is found it takes priority over\n  // utm_source/utm_medium so the user-configured param always wins, even when\n  // standard UTM params are also present (e.g. Meta ads inject both).\n  // Campaign/term/content from UTM are kept; only source+medium are overridden.\n  for (const name of attributionParams) {\n    const val = params.get(name)\n    if (val) {\n      fromUrl.source = val\n      fromUrl.medium = name\n      fromUrl._custom = true\n      break\n    }\n  }\n\n  // Current URL has attribution — persist for the rest of this session\n  if (Object.keys(fromUrl).length > 0) {\n    try { sessionStorage.setItem('_nohmo_utm', JSON.stringify(fromUrl)) } catch {}\n    return fromUrl\n  }\n\n  // No attribution on this page — use what was captured on the landing page\n  try {\n    const stored = sessionStorage.getItem('_nohmo_utm')\n    if (stored) return JSON.parse(stored) as UTMParams\n  } catch {}\n\n  return {}\n}\n","import { AutoCapture } from './autocapture'\nimport { ErrorCapture } from './errors'\nimport { getDeviceId, getDeviceInfo, getStableId } from './fingerprint'\nimport { EventQueue } from './queue'\nimport type { NohmoConfig, NohmoEvent, NohmoState } from './types'\nimport { getUTMParams } from './utm'\n\n// Identifies the client library on every event. __NOHMO_VERSION__ is replaced with the\n// real package version at build time by the rollup versionPlugin.\nconst SDK_NAME = 'web'\nconst SDK_VERSION = '__NOHMO_VERSION__'\n\nconst _b = (s: string) => atob(s)\nconst _h = _b('aHR0cHM6Ly93d3cubm9obW8uaW4=')\nconst _p = {\n  i: _b('L2FwaS90cmFja2VyL2lkZW50aWZ5Lw=='),\n  t: _b('L2FwaS90cmFja2VyL3RyYWNrLw=='),\n  l: _b('L2FwaS90cmFja2VyL2xpbmstdXNlci8='),\n}\n\ntype PartialEvent = Omit<NohmoEvent, 'deviceId'>\n\nexport class NohmoTracker {\n  private config: Required<NohmoConfig>\n  private state: NohmoState\n  private queue: EventQueue\n  private pageStart: number = Date.now()\n  private autoCapture: AutoCapture | null = null\n  private errorCapture: ErrorCapture | null = null\n  // Events queued before init() resolves the canonical deviceId\n  private pendingEvents: PartialEvent[] = []\n  private initResolve: () => void = () => {}\n  private readonly initPromise: Promise<void>\n\n  constructor(config: NohmoConfig) {\n    this.config = {\n      flushInterval: 3000,\n      debug: false,\n      autoPageView: true,\n      autoScrollDepth: true,\n      autoTimeSpent: true,\n      autoCapture: true,\n      autoErrors: true,\n      release: '',\n      attributionParams: ['ref'],\n      ...config,\n    }\n\n    this.state = {\n      deviceId: null,\n      userId: null,\n      sessionId: this.generateSessionId(),\n      ready: false,\n    }\n\n    this.initPromise = new Promise(resolve => { this.initResolve = resolve })\n\n    this.queue = new EventQueue(\n      (events) => this.sendBatch(events),\n      this.config.flushInterval\n    )\n  }\n\n  async init(): Promise<void> {\n    if (typeof window === 'undefined') {\n      this.initResolve()\n      return\n    }\n\n    try {\n      const [deviceId, stableId] = [getDeviceId(), await getStableId()]\n\n      let canonicalId = deviceId\n      let userId: string | null = null\n\n      try {\n        const res = await fetch(\n          `${_h}${_p.i}`,\n          {\n            method: 'POST',\n            headers: {\n              'Content-Type': 'application/json',\n              'X-API-Key': this.config.apiKey,\n            },\n            body: JSON.stringify({\n              deviceId,\n              stableId,\n              knownUserId: localStorage.getItem('_nohmo_uid') ?? undefined,\n              page: typeof window !== 'undefined' ? window.location.pathname : '',\n              referrer: typeof document !== 'undefined' ? document.referrer : '',\n              deviceInfo: getDeviceInfo(),\n              // First sighting of a build is what seeds the deploy timeline the\n              // narrative correlates metric movements against. Omitted when unset so\n              // the backend can tell \"no release configured\" from \"release is empty\".\n              ...(this.config.release ? { release: this.config.release } : {}),\n            }),\n          }\n        )\n\n        const json = await res.json() as { success: boolean; data?: { deviceId?: string; userId?: string; attributionParams?: string[] } }\n        const respData = json.data ?? {}\n        canonicalId = respData.deviceId ?? deviceId\n        userId = respData.userId ?? null\n        if (respData.attributionParams?.length) {\n          this.config.attributionParams = respData.attributionParams\n        }\n\n        if (canonicalId !== deviceId) {\n          localStorage.setItem('_nohmo_did', canonicalId)\n        }\n      } catch {\n        // Identify failed — fall back to local deviceId. Events will be stored\n        // once the device is created on the next successful identify.\n      }\n\n      this.state.deviceId = canonicalId\n      this.state.userId = userId\n      this.state.ready = true\n\n      // Drain events that were sent before init completed\n      for (const e of this.pendingEvents) {\n        this.queue.push({ ...e, deviceId: canonicalId , sdk: SDK_NAME, sdkVersion: SDK_VERSION })\n      }\n      this.pendingEvents = []\n\n      if (this.config.autoTimeSpent) {\n        document.addEventListener('visibilitychange', () => {\n          if (document.hidden) this.trackTimeSpent()\n        })\n        window.addEventListener('pagehide', () => this.trackTimeSpent())\n      }\n\n      this.queue.start()\n      this.initResolve()\n\n      if (this.config.autoPageView) {\n        this.trackPageView()\n      }\n\n      if (this.config.autoScrollDepth) {\n        this.startScrollTracking()\n      }\n\n      if (this.config.autoCapture) {\n        this.autoCapture = new AutoCapture(this)\n        this.autoCapture.start()\n      }\n\n      if (this.config.autoErrors) {\n        this.errorCapture = new ErrorCapture(this)\n        this.errorCapture.start()\n      }\n\n      this.log('Nohmo initialized', this.state)\n    } catch (err) {\n      this.pendingEvents = []\n      this.initResolve()\n      console.error('[Nohmo] Failed to initialize:', err)\n    }\n  }\n\n  send(event: string, data: Record<string, unknown> = {}) {\n    const utm = getUTMParams(this.config.attributionParams)\n    const partial: PartialEvent = {\n      userId: this.state.userId,\n      sessionId: this.state.sessionId,\n      event,\n      data,\n      page: typeof window !== 'undefined' ? window.location.pathname : '',\n      referrer: typeof document !== 'undefined' ? document.referrer : '',\n      ts: Date.now(),\n      ...(Object.keys(utm).length > 0 ? { utm } : {}),\n    }\n\n    if (!this.state.deviceId) {\n      // init() hasn't resolved the canonical deviceId yet — buffer and drain later\n      this.pendingEvents.push(partial)\n      this.log('Buffered pre-init event:', event)\n      return\n    }\n\n    this.queue.push({ ...partial, deviceId: this.state.deviceId , sdk: SDK_NAME, sdkVersion: SDK_VERSION })\n    this.log('Event queued:', event)\n  }\n\n  async linkUser(\n    userId: string,\n    email?: string,\n    meta?: Record<string, unknown>\n  ): Promise<void> {\n    // Wait for init to complete so we have a valid deviceId and the device\n    // record exists in the backend before we try to link it.\n    await this.initPromise\n\n    this.state.userId = userId\n    this.queue.flush()\n\n    try {\n      await fetch(`${_h}${_p.l}`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'X-API-Key': this.config.apiKey,\n        },\n        body: JSON.stringify({\n          deviceId: this.state.deviceId,\n          userId,\n          email: email ?? '',\n          meta: meta ?? {},\n        }),\n      })\n\n      localStorage.setItem('_nohmo_uid', userId)\n      this.send('USER_LINKED', { userId, email })\n      this.log('User linked:', userId)\n    } catch (err) {\n      console.error('[Nohmo] Failed to link user:', err)\n    }\n  }\n\n  trackConversion(slug: string, properties: Record<string, unknown> = {}) {\n    this.send('CONVERSION', { slug, ...properties })\n  }\n\n  trackPageView(path?: string) {\n    this.send('PAGE_VIEW', {\n      path: path ?? (typeof window !== 'undefined' ? window.location.pathname : ''),\n      title: typeof document !== 'undefined' ? document.title : '',\n    })\n    this.pageStart = Date.now()\n  }\n\n  trackTimeSpent(path?: string) {\n    const seconds = Math.round((Date.now() - this.pageStart) / 1000)\n    if (seconds < 1) return\n    this.send('TIME_SPENT', {\n      path: path ?? (typeof window !== 'undefined' ? window.location.pathname : ''),\n      seconds,\n    })\n    this.pageStart = Date.now()\n  }\n\n  startScrollTracking(): () => void {\n    if (typeof window === 'undefined') return () => undefined\n\n    let maxDepth = 0\n\n    const onScroll = () => {\n      const scrolled = window.scrollY\n      const total = document.body.scrollHeight - window.innerHeight\n      if (total <= 0) return\n\n      const depth = Math.round((scrolled / total) * 100)\n      const milestone = [25, 50, 75, 100].find(\n        (m) => depth >= m && maxDepth < m\n      )\n\n      if (milestone !== undefined) {\n        maxDepth = milestone\n        this.send('SCROLL_DEPTH', {\n          depth: milestone,\n          page: window.location.pathname,\n        })\n      }\n    }\n\n    window.addEventListener('scroll', onScroll, { passive: true })\n    return () => window.removeEventListener('scroll', onScroll)\n  }\n\n  private async sendBatch(events: NohmoEvent[]) {\n    if (!events.length) return\n\n    const body = JSON.stringify({ events, apiKey: this.config.apiKey })\n    const url = `${_h}${_p.t}`\n\n    // sendBeacon returns false (not an exception) when it fails — e.g. in some\n    // incognito modes or when the browser queue is full. Always fall back to fetch.\n    const beaconSent = navigator.sendBeacon(url, new Blob([body], { type: 'application/json' }))\n    if (beaconSent) {\n      this.log(`Flushed ${events.length} events via beacon`)\n      return\n    }\n\n    try {\n      await fetch(url, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body,\n        keepalive: true,\n      })\n      this.log(`Flushed ${events.length} events via fetch`)\n    } catch (err) {\n      console.error('[Nohmo] Failed to flush events:', err)\n    }\n  }\n\n  private generateSessionId(): string {\n    if (typeof window !== 'undefined') {\n      const stored = sessionStorage.getItem('_nohmo_sess')\n      if (stored) return stored\n    }\n    const id = 'sess_' + Math.random().toString(36).slice(2, 14)\n    if (typeof window !== 'undefined') {\n      sessionStorage.setItem('_nohmo_sess', id)\n    }\n    return id\n  }\n\n  private log(...args: unknown[]) {\n    if (this.config.debug) {\n      console.log('[Nohmo]', ...args)\n    }\n  }\n\n  getState(): NohmoState {\n    return { ...this.state }\n  }\n\n  /** Flush queued events immediately. Used by error capture so a crash-class\n   *  event isn't lost to the periodic batch if the page is about to unload. */\n  flushNow() {\n    this.queue.flush()\n  }\n\n  destroy() {\n    this.autoCapture?.stop()\n    this.errorCapture?.stop()\n    this.queue.destroy()\n  }\n}\n","'use client'\n\nimport React, { createContext, useContext, useEffect, useRef } from 'react'\nimport { NohmoTracker } from '../core/tracker'\nimport type { NohmoConfig } from '../core/types'\n\ninterface NohmoContextValue {\n  send: (event: string, data?: Record<string, unknown>) => void\n  trackConversion: (slug: string, properties?: Record<string, unknown>) => void\n  trackTimeSpent: (path?: string) => void\n  linkUser: (\n    userId: string,\n    email?: string,\n    meta?: Record<string, unknown>\n  ) => Promise<void>\n}\n\nconst NohmoContext = createContext<NohmoContextValue>({\n  send: () => undefined,\n  trackConversion: () => undefined,\n  trackTimeSpent: () => undefined,\n  linkUser: async () => undefined,\n})\n\ninterface NohmoProviderProps {\n  children: React.ReactNode\n  projectId: string\n  apiKey: string\n  options?: Partial<NohmoConfig>\n}\n\nexport function NohmoProvider({\n  children,\n  projectId,\n  apiKey,\n  options = {},\n}: NohmoProviderProps) {\n  const trackerRef = useRef<NohmoTracker | null>(null)\n\n  // Queue for linkUser calls that arrive before the tracker useEffect has run.\n  // This happens when a child component calls linkUser in its own useEffect —\n  // React runs child effects before parent effects, so trackerRef.current is\n  // still null at that point. We drain this queue once the tracker is ready.\n  type PendingLink = [string, string | undefined, Record<string, unknown> | undefined]\n  const pendingLinksRef = useRef<PendingLink[]>([])\n\n  useEffect(() => {\n    const tracker = new NohmoTracker({\n      projectId,\n      apiKey,\n      ...options,\n    })\n\n    trackerRef.current = tracker\n\n    // Drain any linkUser calls that arrived before this effect ran\n    const pending = pendingLinksRef.current.splice(0)\n    if (pending.length > 0) {\n      // tracker.linkUser already awaits initPromise internally, so it's safe\n      // to call these right away — they'll wait for init to complete\n      for (const [userId, email, meta] of pending) {\n        tracker.linkUser(userId, email, meta)\n      }\n    }\n\n    tracker.init()\n\n    let cleanupScroll: (() => void) | undefined\n    if (options.autoScrollDepth !== false) {\n      cleanupScroll = tracker.startScrollTracking()\n    }\n\n    return () => {\n      cleanupScroll?.()\n      tracker.destroy()\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [])\n\n  const send = (event: string, data: Record<string, unknown> = {}) => {\n    trackerRef.current?.send(event, data)\n  }\n\n  const trackConversion = (slug: string, properties?: Record<string, unknown>) => {\n    trackerRef.current?.trackConversion(slug, properties)\n  }\n\n  const trackTimeSpent = (path?: string) => {\n    trackerRef.current?.trackTimeSpent(path)\n  }\n\n  const linkUser = async (\n    userId: string,\n    email?: string,\n    meta?: Record<string, unknown>\n  ) => {\n    if (!trackerRef.current) {\n      // Tracker not yet mounted — queue this call.\n      // The useEffect above will drain it once the tracker is initialised.\n      pendingLinksRef.current.push([userId, email, meta])\n      return\n    }\n    await trackerRef.current.linkUser(userId, email, meta)\n  }\n\n  return (\n    <NohmoContext.Provider value={{ send, trackConversion, trackTimeSpent, linkUser }}>\n      {children}\n    </NohmoContext.Provider>\n  )\n}\n\nexport function useNohmo() {\n  return useContext(NohmoContext)\n}\n","import { useEffect } from 'react'\nimport { useNohmo } from './NohmoProvider'\n\nexport function usePageView(path?: string) {\n  const { send } = useNohmo()\n\n  useEffect(() => {\n    send('PAGE_VIEW', {\n      path: path ?? (typeof window !== 'undefined' ? window.location.pathname : ''),\n      title: typeof document !== 'undefined' ? document.title : '',\n    })\n  }, [path])\n}\n","/**\n * Route-change detection that does not depend on any router.\n *\n * This exists because the Next provider used to `import { usePathname } from\n * 'next/navigation'`. That import is static and lives in the main bundle, so ANY consumer\n * of the package — a Vite app, a CRA app, a plain Node script — had to be able to resolve\n * `next/navigation` just to import `nohmo`. They cannot, and the install failed with\n * \"Cannot find module 'next/navigation'\". A whole documented platform was broken by one\n * import that only one framework needs.\n *\n * Watching the History API instead covers every client-side router, Next's App Router\n * included: its soft navigations go through history.pushState like everyone else's.\n */\n\ntype Listener = (path: string) => void\n\nconst listeners = new Set<Listener>()\nlet patched = false\n\nexport function currentPath(): string {\n  return typeof window === 'undefined' ? '' : window.location.pathname\n}\n\nfunction notify(): void {\n  const path = currentPath()\n  // Copy first: a listener may unsubscribe itself while we are iterating.\n  for (const l of [...listeners]) {\n    try {\n      l(path)\n    } catch {\n      // One bad subscriber must not stop the others, and must never surface as an app error.\n    }\n  }\n}\n\n/**\n * Patch history once, for the lifetime of the page.\n *\n * Deliberately never un-patched. Restoring the originals when the last listener leaves\n * would clobber any other library that patched on top of ours in the meantime — the\n * classic monkey-patch teardown bug. The patch is idempotent and costs one function call\n * per navigation, so leaving it is the safer trade.\n */\nfunction ensurePatched(): void {\n  if (patched || typeof window === 'undefined' || typeof history === 'undefined') return\n  patched = true\n\n  const origPush = history.pushState\n  const origReplace = history.replaceState\n\n  history.pushState = function patchedPushState(...args: Parameters<typeof origPush>) {\n    const ret = origPush.apply(this, args)\n    // After the call, so location.pathname already reflects the new route.\n    notify()\n    return ret\n  }\n  history.replaceState = function patchedReplaceState(...args: Parameters<typeof origReplace>) {\n    const ret = origReplace.apply(this, args)\n    notify()\n    return ret\n  }\n\n  // Back/forward buttons do not go through pushState.\n  window.addEventListener('popstate', notify)\n}\n\n/** Subscribe to route changes. Returns an unsubscribe function. */\nexport function onRouteChange(listener: Listener): () => void {\n  if (typeof window === 'undefined') return () => {}\n  ensurePatched()\n  listeners.add(listener)\n  return () => {\n    listeners.delete(listener)\n  }\n}\n","'use client'\n\nimport React, { useEffect, useRef, useState } from 'react'\nimport { NohmoProvider, useNohmo } from '../react/NohmoProvider'\nimport { currentPath, onRouteChange } from '../core/route'\nimport type { NohmoConfig } from '../core/types'\n\n/**\n * Route tracking for App Router apps.\n *\n * This used to read `usePathname` from 'next/navigation'. It no longer does — that static\n * import sat in the main bundle and made `import 'nohmo'` fail in any app that is not a\n * Next app, which is every Vite and CRA project. The History-based watcher in core/route\n * covers App Router soft navigation identically, and works everywhere else too.\n */\nfunction NohmoNextInner() {\n  const { trackTimeSpent, send } = useNohmo()\n  const [pathname, setPathname] = useState<string>(() => currentPath())\n  const isFirst = useRef(true)\n  const prevPath = useRef<string>(pathname)\n\n  useEffect(() => onRouteChange(setPathname), [])\n\n  useEffect(() => {\n    if (isFirst.current) {\n      isFirst.current = false\n      send('PAGE_VIEW', {\n        path: pathname,\n        title: typeof document !== 'undefined' ? document.title : '',\n      })\n      return\n    }\n\n    trackTimeSpent(prevPath.current)\n    send('PAGE_VIEW', {\n      path: pathname,\n      title: typeof document !== 'undefined' ? document.title : '',\n    })\n    prevPath.current = pathname\n  }, [pathname])\n\n  return null\n}\n\ninterface NohmoNextProviderProps {\n  children: React.ReactNode\n  projectId: string\n  apiKey: string\n  options?: Partial<NohmoConfig>\n}\n\nexport function NohmoNextProvider({\n  children,\n  projectId,\n  apiKey,\n  options = {},\n}: NohmoNextProviderProps) {\n  return (\n    <NohmoProvider\n      projectId={projectId}\n      apiKey={apiKey}\n      options={options}\n    >\n      <NohmoNextInner />\n      {children}\n    </NohmoProvider>\n  )\n}\n"],"names":["createContext","useRef","useEffect","_jsx","useContext","useState","_jsxs"],"mappings":"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"}