{"version":3,"file":"react-native.cjs","sources":["../src/react-native/tracker.ts","../src/react-native/autocapture.ts","../src/react-native/NohmoProvider.tsx","../src/react-native/useScreenView.ts"],"sourcesContent":["import { AppState, Platform, Dimensions, Linking, NativeModules } from 'react-native'\nimport type { NohmoRNConfig, NohmoRNEvent, NohmoStorage } from './types'\n\n// Identifies the client library on every event, so a Flutter app and a React Native app\n// both reporting platform 'android' can still be told apart server-side.\nconst SDK_NAME = 'react-native'\nconst SDK_VERSION = '__NOHMO_VERSION__'\n\n\nfunction makeMemoryStorage(): NohmoStorage {\n  const store: Record<string, string> = {}\n  return {\n    getItem: async (key) => store[key] ?? null,\n    setItem: async (key, value) => { store[key] = value },\n  }\n}\n\nconst DEFAULT_HOST = 'https://www.nohmo.in'\nconst _p = {\n  i:   '/api/tracker/identify/',\n  t:   '/api/tracker/track/',\n  l:   '/api/tracker/link-user/',\n  pt:  '/api/tracker/push-token/',\n  a:   '/api/tracker/attribute/',\n  inv: '/api/tracker/invite-link/',\n}\n\nconst KEYS = {\n  deviceId:     '@nohmo_did',\n  userId:       '@nohmo_uid',\n  firstOpen:    '@nohmo_first',\n  installAttr:  '@nohmo_install_attr',\n  deepLink:     '@nohmo_deeplink',\n  pendingCrash: '@nohmo_pending_crash',\n  // Undelivered events, so a batch survives the process being killed. Without this the\n  // queue was memory-only: an APP_INSTALL sat there for up to flushInterval ms and was\n  // lost for good if the app closed first — and because the firstOpen flag had already\n  // been written, it was never re-sent. First launch is exactly when that happens most\n  // (cold start, cold network, highest chance the user bounces), so the loss landed\n  // squarely on installs.\n  queue:        '@nohmo_queue',\n}\n\n// Cap on events held in persistent storage. Bounds how much a long offline stretch can\n// write; the newest are kept, since an ancient un-flushed event is the least useful.\nconst MAX_PERSISTED_EVENTS = 500\n\nfunction genId(prefix: string) {\n  return `${prefix}_` + Math.random().toString(36).slice(2, 14) + Date.now().toString(36)\n}\n\n/**\n * Attribution exactly as it appeared in the URL — `utm_source`, `ref`, … — with\n * no renaming. This shape is what the INSTALL_ATTRIBUTED event body and\n * `install_utm` carry, because the dashboard's journey view renders that event\n * by reading `data.utm_source` directly.\n */\nfunction parseRawUtmParams(url: string | null): Record<string, string> {\n  if (!url) return {}\n  try {\n    const params = new URLSearchParams(url.includes('?') ? url.split('?')[1] : '')\n    const utm: Record<string, string> = {}\n    params.forEach((v, k) => {\n      if (k.startsWith('utm_') || k === 'ref') utm[k] = v\n    })\n    return utm\n  } catch {\n    return {}\n  }\n}\n\n/**\n * Session attribution, in the shape ingestion actually reads: `source`,\n * `medium`, `campaign`, `term`, `content` — not the raw `utm_*` query names.\n *\n * This used to return the raw names, which meant process_events read\n * `utm.source` off an object that only had `utm_source` and quietly wrote a\n * blank source onto every mobile session. The web SDK has always sent the bare\n * shape (see core/utm.ts); this brings React Native in line with it.\n *\n * A custom attribution param (`?ref=partner`) wins over utm_source/utm_medium,\n * matching the web SDK; campaign, term and content are kept either way.\n */\nfunction parseDeepLinkUtm(url: string | null): Record<string, string> {\n  const raw = parseRawUtmParams(url)\n  if (Object.keys(raw).length === 0) return {}\n\n  const utm: Record<string, string> = {}\n  const put = (key: string, value?: string) => { if (value) utm[key] = value }\n  put('source', raw.utm_source)\n  put('medium', raw.utm_medium)\n  put('campaign', raw.utm_campaign)\n  put('term', raw.utm_term)\n  put('content', raw.utm_content)\n\n  if (raw.ref) {\n    utm.source = raw.ref\n    utm.medium = 'ref'\n    // Only ever set when true — the backend coerces this with a plain\n    // truthiness check, so a literal 'false' would read as true.\n    utm._custom = '1'\n  }\n  return utm\n}\n\n// Pull the deep-link destination out of an incoming link URL — either an explicit\n// ?dlv=<value> param (what Nohmo Smart Links carry) or the path of a custom-scheme\n// URL (e.g. yourapp://product/123 → \"product/123\"). Used for DIRECT deep linking\n// when the app is already installed and opened via a link.\nfunction parseDeepLinkValue(url: string | null): string {\n  if (!url) return ''\n  try {\n    const qs = url.includes('?') ? url.split('?')[1] : ''\n    const dlv = new URLSearchParams(qs).get('dlv')\n    if (dlv) return dlv\n    const schemeMatch = url.match(/^[a-z][a-z0-9+.-]*:\\/\\/(.*)$/i)\n    if (schemeMatch) return schemeMatch[1].split('?')[0].replace(/\\/+$/, '')\n    return ''\n  } catch {\n    return ''\n  }\n}\n\ntype PartialEvent = Omit<NohmoRNEvent, 'deviceId'>\n\nexport class NohmoRNTracker {\n  private config: Required<NohmoRNConfig>\n  private storage: NohmoStorage\n  private deviceId: string | null = null\n  private userId: string | null = null\n  private sessionId: string\n  private currentScreen = ''\n  private sessionStart = Date.now()\n  private queue: NohmoRNEvent[] = []\n  private pendingEvents: PartialEvent[] = []\n  private flushTimer: ReturnType<typeof setInterval> | null = null\n  private appStateSubscription: ReturnType<typeof AppState.addEventListener> | null = null\n  private initResolve: () => void = () => {}\n  private readonly initPromise: Promise<void>\n  private initStarted = false\n  private persistTimer: ReturnType<typeof setTimeout> | null = null\n  private deepLinkUtm: Record<string, string> = {}\n  private installAttr: Record<string, string> = {}\n  private installAttrAttempted = false\n  // Distinct from installAttrAttempted: that one is set even when the auto-read\n  // found nothing, to stop the empty probabilistic ping repeating. This one only\n  // becomes true once a real referrer string has been forwarded.\n  private installReferrerSent = false\n  // Whether we have actually been backgrounded. Without this, the 'active'\n  // AppState event that fires right after launch is treated as a return from\n  // background: every cold start minted a second session and a second APP_OPEN,\n  // stranding APP_INSTALL alone in a session with no other activity.\n  private backgrounded = false\n  private inviteCache: Record<string, string> = {}\n  // Resolved deep-link destination (OneLink-style) — from a direct link when the app\n  // is already installed, or restored from the install match (deferred deep linking).\n  private deepLink: string | null = null\n  private deepLinkListeners: ((value: string) => void)[] = []\n  private linkingSub: { remove: () => void } | null = null\n  private prevErrorHandler: ((error: Error, isFatal?: boolean) => void) | null = null\n\n  constructor(config: NohmoRNConfig) {\n    this.config = {\n      flushInterval: 5000,\n      debug: false,\n      autoAppLifecycle: true,\n      autoErrors: true,\n      appVersion: '',\n      storage: makeMemoryStorage(),\n      host: DEFAULT_HOST,\n      ...config,\n    }\n    this.storage = this.config.storage\n    this.sessionId = genId('sess')\n    this.initPromise = new Promise(r => { this.initResolve = r })\n  }\n\n  /**\n   * Idempotent. A second call returns the first call's promise instead of running again.\n   *\n   * Without this guard two concurrent init()s — a double-mounted provider, StrictMode, a\n   * host app calling init twice — both read firstOpen as null across the await below,\n   * both wrote it, and both sent APP_INSTALL. That produced duplicate installs\n   * milliseconds apart (and duplicate /identify calls, duplicate APP_OPEN, and a leaked\n   * flush timer, since the second setInterval overwrote the handle the first one needed\n   * to be cleared).\n   */\n  async init(): Promise<void> {\n    if (this.initStarted) return this.initPromise\n    this.initStarted = true\n    try {\n      // Read persisted IDs\n      const [storedDeviceId, storedUserId, firstOpenDone, initialUrl, storedInstallAttr, storedCrash, storedQueue] = await Promise.all([\n        this.storage.getItem(KEYS.deviceId),\n        this.storage.getItem(KEYS.userId),\n        this.storage.getItem(KEYS.firstOpen),\n        Linking.getInitialURL(),\n        this.storage.getItem(KEYS.installAttr),\n        this.storage.getItem(KEYS.pendingCrash),\n        this.storage.getItem(KEYS.queue),\n      ])\n\n      // Events that outlived a previous process. Restored first so they keep their\n      // place at the front of the queue and their original timestamps.\n      if (storedQueue) {\n        try {\n          const restored = JSON.parse(storedQueue) as NohmoRNEvent[]\n          if (Array.isArray(restored) && restored.length) {\n            this.queue.unshift(...restored)\n            this._log(`Restored ${restored.length} unsent events`)\n          }\n        } catch { /* corrupt payload — drop it rather than fail init */ }\n      }\n\n      this.deepLinkUtm = parseDeepLinkUtm(initialUrl)\n      // DIRECT deep link: the app was opened via a link that carries a destination\n      // (universal/app link or custom scheme) — resolve it immediately.\n      const directValue = parseDeepLinkValue(initialUrl)\n      if (directValue) this._resolveDeepLink(directValue, 'direct')\n      // Restore a destination resolved on a previous run (e.g. a deferred deep link\n      // that hadn't been consumed by a listener yet).\n      const storedDeepLink = await this.storage.getItem(KEYS.deepLink)\n      if (storedDeepLink && !this.deepLink) this.deepLink = storedDeepLink\n      // Keep resolving destinations from links opened while the app is running.\n      this.linkingSub = Linking.addEventListener('url', ({ url }) => {\n        const v = parseDeepLinkValue(url)\n        if (v) this._resolveDeepLink(v, 'direct')\n      })\n      if (storedInstallAttr) {\n        try { this.installAttr = JSON.parse(storedInstallAttr) } catch { /* ignore */ }\n      }\n\n      // Device ID — generate once, persist forever\n      let deviceId = storedDeviceId ?? genId('did')\n      if (!storedDeviceId) await this.storage.setItem(KEYS.deviceId, deviceId)\n\n      this.userId = storedUserId ?? null\n\n      // Identify with backend\n      try {\n        const screen = Dimensions.get('screen')\n        const res = await fetch(`${this.config.host}${_p.i}`, {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json', 'X-API-Key': this.config.apiKey },\n          body: JSON.stringify({\n            deviceId,\n            knownUserId: this.userId ?? undefined,\n            platform: Platform.OS,\n            appVersion: this.config.appVersion,\n            osVersion: `${Platform.OS} ${Platform.Version}`,\n            deviceInfo: {\n              type: 'mobile',\n              os: Platform.OS,\n              browser: 'native',\n              browserVersion: this.config.appVersion,\n              screenW: screen.width,\n              screenH: screen.height,\n              viewportW: screen.width,\n              viewportH: screen.height,\n              pixelRatio: screen.scale,\n              language: 'en',\n              timezone: (typeof Intl !== 'undefined' && typeof Intl.DateTimeFormat === 'function')\n                ? Intl.DateTimeFormat().resolvedOptions().timeZone\n                : 'UTC',\n              touch: true,\n              platform: Platform.OS,\n              appVersion: this.config.appVersion,\n            },\n          }),\n        })\n        const json = await res.json() as { success: boolean; data?: { deviceId?: string; userId?: string } }\n        const data = json.data ?? {}\n        deviceId = data.deviceId ?? deviceId\n        if (data.userId) this.userId = data.userId\n      } catch {\n        // fallback to local deviceId\n      }\n\n      this.deviceId = deviceId\n      await this.storage.setItem(KEYS.deviceId, deviceId)\n\n      // Drain buffered pre-init events\n      for (const e of this.pendingEvents) {\n        this.queue.push({ ...e, deviceId , sdk: SDK_NAME, sdkVersion: SDK_VERSION })\n      }\n      this.pendingEvents = []\n      if (this.queue.length) this._schedulePersist()\n\n      // Report a fatal crash recorded on the previous run, attributed back to the\n      // session/time it actually happened in (so it lands in the right journey).\n      // A fatal JS crash in a release build also aborts the native process, so we\n      // remember its (session, ts) to suppress the duplicate native record below.\n      let jsCrashHint: { ts?: number; sessionId?: string } | null = null\n      if (storedCrash) {\n        try {\n          const c = JSON.parse(storedCrash) as {\n            message?: string; stack?: string; screen?: string; sessionId?: string; ts?: number\n          }\n          jsCrashHint = { ts: c.ts, sessionId: c.sessionId }\n          this._enqueueRaw('APP_CRASH', {\n            kind: 'fatal',\n            message: c.message ?? 'Unknown crash',\n            stack: c.stack ?? '',\n            isFatal: true,\n            screen: c.screen ?? '',\n            crashedAt: c.ts ?? null,\n          }, { sessionId: c.sessionId, ts: c.ts, screen: c.screen })\n        } catch { /* corrupt payload — ignore */ }\n        await this.storage.setItem(KEYS.pendingCrash, '') // clear (shim has no removeItem)\n      }\n\n      // Native (Android/iOS) crashes captured by the NohmoCrash module on a\n      // previous run — drain and report, attributed to the run they happened in.\n      if (this.config.autoErrors) {\n        await this._drainNativeCrashes(jsCrashHint)\n      }\n\n      // Track install (only on very first open).\n      //\n      // Ordering matters and used to be wrong: the flag was written first, and the event\n      // went into a memory-only queue. Anything that ended the process before the next\n      // flush lost the install permanently, because the flag said it had been reported.\n      // Now the event is made durable FIRST and the flag is written only once it is\n      // safely on disk, so the worst case is a duplicate-on-retry (which the backend\n      // de-duplicates) rather than a silent loss.\n      if (!firstOpenDone) {\n        this.send('APP_INSTALL', {\n          platform: Platform.OS,\n          appVersion: this.config.appVersion,\n          osVersion: String(Platform.Version),\n        })\n        await this._persistQueue()\n        await this.storage.setItem(KEYS.firstOpen, '1')\n\n        // Attempt attribution on all platforms:\n        //   Android — reads Play Store referrer via native module (deterministic)\n        //   iOS     — reads pasteboard token written by the Nohmo click-link page (deterministic)\n        //   Both    — fall back to a backend attribution ping for probabilistic IP matching\n        await this._autoReadInstallReferrer()\n      }\n\n      // Track open\n      this.send('APP_OPEN', {\n        platform: Platform.OS,\n        appVersion: this.config.appVersion,\n      })\n\n      // App lifecycle\n      if (this.config.autoAppLifecycle) {\n        this.appStateSubscription = AppState.addEventListener('change', this._onAppStateChange)\n      }\n\n      // JS error / crash capture via the RN global error handler\n      if (this.config.autoErrors && typeof ErrorUtils !== 'undefined') {\n        this.prevErrorHandler = ErrorUtils.getGlobalHandler()\n        ErrorUtils.setGlobalHandler(this._onGlobalError)\n      }\n\n      // Native crash capture (Android Java/Kotlin, iOS Obj-C + signals):\n      // install the native handlers and seed the current session/screen so a\n      // native crash can be tied back to the journey that led to it.\n      if (this.config.autoErrors) {\n        try { this._nativeCrash?.installCrashHandler?.() } catch { /* native module absent */ }\n        this._syncCrashContext()\n      }\n\n      // Flush timer\n      this.flushTimer = setInterval(() => this._flush(), this.config.flushInterval)\n\n      this.initResolve()\n      this._log('Nohmo RN initialized', { deviceId, userId: this.userId })\n    } catch (err) {\n      this.initResolve()\n      console.error('[Nohmo RN] Init failed:', err)\n    }\n  }\n\n  send(event: string, data: Record<string, unknown> = {}) {\n    const partial: PartialEvent = {\n      userId: this.userId,\n      sessionId: this.sessionId,\n      event,\n      data,\n      screen: this.currentScreen,\n      referrer: '',\n      ts: Date.now(),\n      platform: Platform.OS as 'ios' | 'android',\n      appVersion: this.config.appVersion,\n      ...(Object.keys(this.deepLinkUtm).length > 0 ? { utm: this.deepLinkUtm } : {}),\n      ...(Object.keys(this.installAttr).length > 0 ? { install_utm: this.installAttr } : {}),\n    }\n\n    if (!this.deviceId) {\n      this.pendingEvents.push(partial)\n      this._log('Buffered pre-init event:', event)\n      return\n    }\n\n    this.queue.push({ ...partial, deviceId: this.deviceId , sdk: SDK_NAME, sdkVersion: SDK_VERSION })\n    this._schedulePersist()\n    this._log('Event queued:', event)\n  }\n\n  trackScreenView(screenName: string) {\n    const prev = this.currentScreen\n    if (prev && prev !== screenName) {\n      const secs = Math.round((Date.now() - this.sessionStart) / 1000)\n      if (secs > 0) {\n        this.send('TIME_SPENT', { screen: prev, seconds: secs })\n      }\n    }\n    this.currentScreen = screenName\n    this.sessionStart = Date.now()\n    this._syncCrashContext()\n    this.send('SCREEN_VIEW', { screen: screenName })\n  }\n\n  trackConversion(slug: string, properties: Record<string, unknown> = {}) {\n    this.send('CONVERSION', { slug, ...properties })\n  }\n\n  /**\n   * Build a short, shareable Nohmo attribution link for \"invite a friend\" flows.\n   * Share THIS (not the raw store URL) so installs are attributed back to the\n   * sharer: the current linked user id rides along as utm_content, so you can\n   * see who referred whom. Returns a tidy short URL (https://www.nohmo.in/api/l/\n   * <code>); the same user + options always resolves to the same code. Falls back\n   * to the full click URL if the device is offline. Call linkUser first so the\n   * referrer is captured.\n   *\n   * @example\n   *   const link = await nohmo.buildInviteLink({ channel: 'whatsapp' })\n   *   Share.share({ message: `Join me! ${link}` })\n   */\n  async buildInviteLink(opts: { channel?: string; campaign?: string; source?: string } = {}): Promise<string> {\n    const source = opts.source || 'referral'\n    const key = `${source}|${opts.channel || ''}|${opts.campaign || ''}|${this.userId || ''}`\n    if (this.inviteCache[key]) return this.inviteCache[key]\n\n    try {\n      const res = await fetch(`${this.config.host}${_p.inv}`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', 'X-API-Key': this.config.apiKey },\n        body: JSON.stringify({\n          source,\n          medium: opts.channel || '',\n          campaign: opts.campaign || '',\n          content: this.userId || '',\n        }),\n      })\n      const data = await res.json()\n      if (data && data.shortCode) {\n        const url = `${this.config.host}/api/l/${data.shortCode}/`\n        this.inviteCache[key] = url\n        return url\n      }\n    } catch (err) {\n      this._log('buildInviteLink: short link unavailable, using full URL:', err)\n    }\n\n    // Offline / error fallback — the long but always-working click URL\n    return this._fullInviteLink(opts)\n  }\n\n  private _fullInviteLink(opts: { channel?: string; campaign?: string; source?: string }): string {\n    const parts: string[] = []\n    const add = (key: string, value?: string | null) => {\n      if (value) parts.push(`${key}=${encodeURIComponent(value)}`)\n    }\n    add('utm_source', opts.source || 'referral')\n    add('utm_medium', opts.channel)\n    add('utm_campaign', opts.campaign)\n    add('utm_content', this.userId)\n    const qs = parts.length ? `?${parts.join('&')}` : ''\n    return `${this.config.host}/api/click/${this.config.projectId}/${qs}`\n  }\n\n  async linkUser(userId: string, email?: string, meta?: Record<string, unknown>): Promise<void> {\n    await this.initPromise\n    this.userId = userId\n    await this.storage.setItem(KEYS.userId, userId)\n    this._flush()\n\n    try {\n      await fetch(`${this.config.host}${_p.l}`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', 'X-API-Key': this.config.apiKey },\n        body: JSON.stringify({\n          deviceId: this.deviceId,\n          userId,\n          email: email ?? '',\n          meta: meta ?? {},\n        }),\n      })\n      this.send('USER_LINKED', { userId, email })\n      this._log('User linked:', userId)\n    } catch (err) {\n      console.error('[Nohmo RN] linkUser failed:', err)\n    }\n  }\n\n  async setInstallReferrer(referrerString: string): Promise<void> {\n    // Skip the await when deviceId is already set — avoids a deadlock when this\n    // is called from within init() via _autoReadInstallReferrer (initResolve()\n    // hasn't fired yet at that point, so awaiting initPromise would hang forever).\n    if (!this.deviceId) await this.initPromise\n    if (!referrerString) return\n    // Guard on whether a REAL referrer has already gone out, not on whether the\n    // auto-read merely ran. On first open _autoReadInstallReferrer sets\n    // installAttrAttempted even when it found nothing, which silently swallowed\n    // every manual setInstallReferrer() call on the one launch where install\n    // attribution is still possible. Re-sending is safe: the backend returns the\n    // cached attribution once a device already has one.\n    if (this.installReferrerSent) return\n    this.installReferrerSent = true\n    this.installAttrAttempted = true\n\n    // Raw `utm_*` names here, not the normalised ones: this map becomes the\n    // INSTALL_ATTRIBUTED body and `install_utm`, and the dashboard reads\n    // `data.utm_source` off it.\n    const parsed = parseRawUtmParams('?' + referrerString)\n    if (Object.keys(parsed).length > 0) {\n      this.installAttr = parsed\n      await this.storage.setItem(KEYS.installAttr, JSON.stringify(parsed))\n      this.send('INSTALL_ATTRIBUTED', { ...parsed })\n      this._log('Install attributed:', parsed)\n    }\n\n    // Always forward the raw string — backend extracts nohmo_click for deterministic matching\n    // even when the referrer contains no utm_* params. The response carries the\n    // deferred deep-link destination (if the matched click had one).\n    try {\n      const res = await fetch(`${this.config.host}${_p.a}`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', 'X-API-Key': this.config.apiKey },\n        body: JSON.stringify({\n          deviceId: this.deviceId,\n          installReferrer: referrerString,\n          platform: Platform.OS,\n        }),\n      })\n      const dlv = (await res.json())?.data?.deepLinkValue\n      if (dlv && !this.deepLink) this._resolveDeepLink(dlv, 'deferred')\n    } catch { /* non-critical */ }\n  }\n\n  // Record a resolved destination, persist it, emit a DEEP_LINK event, and notify\n  // any onDeepLink listeners. `source` is 'direct' (app already installed) or\n  // 'deferred' (restored after install).\n  private _resolveDeepLink(value: string, source: 'direct' | 'deferred') {\n    if (!value || this.deepLink === value) return\n    this.deepLink = value\n    this.storage.setItem(KEYS.deepLink, value).catch(() => {})\n    this.send('DEEP_LINK', { value, source })\n    for (const cb of this.deepLinkListeners) {\n      try { cb(value) } catch { /* listener threw */ }\n    }\n    this._log('Deep link resolved:', { value, source })\n  }\n\n  /** The resolved deep-link destination (e.g. \"product/123\"), or null if none. */\n  getDeepLink(): string | null {\n    return this.deepLink\n  }\n\n  /**\n   * Route users to the screen a Smart Link points at — for both an installed app\n   * opened via a link (direct) and a new user restored after install (deferred).\n   * Fires immediately if a destination is already resolved, then on every future\n   * one. Returns an unsubscribe function.\n   *\n   * @example\n   *   nohmo.onDeepLink(dest => navigation.navigate(...routeFor(dest)))\n   */\n  onDeepLink(cb: (value: string) => void): () => void {\n    this.deepLinkListeners.push(cb)\n    if (this.deepLink) { try { cb(this.deepLink) } catch { /* listener threw */ } }\n    return () => {\n      const i = this.deepLinkListeners.indexOf(cb)\n      if (i >= 0) this.deepLinkListeners.splice(i, 1)\n    }\n  }\n\n  /** Manually resolve a destination from an incoming link URL (if you handle Linking yourself). */\n  handleUrl(url: string): void {\n    const v = parseDeepLinkValue(url)\n    if (v) this._resolveDeepLink(v, 'direct')\n  }\n\n  private async _autoReadInstallReferrer(): Promise<void> {\n    // Android: Play Store preserves the referrer query string set by ClickView.\n    // iOS: pasteboard token written by the Nohmo click-link interstitial page.\n    // Both expose the same NativeModules.NohmoInstallReferrer.getReferrer() API.\n    try {\n      const mod = NativeModules.NohmoInstallReferrer\n      if (mod?.getReferrer) {\n        const referrer: string = await mod.getReferrer()\n        if (referrer) {\n          await this.setInstallReferrer(referrer)\n          return\n        }\n      }\n    } catch { /* native module unavailable */ }\n\n    // Fallback: ping the attribution endpoint with no referrer string so the\n    // backend can attempt probabilistic IP matching (covers iOS users who didn't\n    // tap the interstitial button, or any platform without the native module).\n    if (this.installAttrAttempted) return\n    this.installAttrAttempted = true\n    try {\n      const res = await fetch(`${this.config.host}${_p.a}`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', 'X-API-Key': this.config.apiKey },\n        body: JSON.stringify({\n          deviceId: this.deviceId,\n          installReferrer: '',\n          platform: Platform.OS,\n        }),\n      })\n      // A probabilistic match can still carry a deferred deep-link destination.\n      const dlv = (await res.json())?.data?.deepLinkValue\n      if (dlv && !this.deepLink) this._resolveDeepLink(dlv, 'deferred')\n    } catch { /* non-critical */ }\n  }\n\n  async registerPushToken(token: string): Promise<void> {\n    await this.initPromise\n    if (!token || !this.deviceId) return\n    try {\n      await fetch(`${this.config.host}${_p.pt}`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', 'X-API-Key': this.config.apiKey },\n        body: JSON.stringify({ deviceId: this.deviceId, pushToken: token }),\n      })\n      this._log('Push token registered')\n    } catch (err) {\n      this._log('registerPushToken failed:', err)\n    }\n  }\n\n  // RN global error handler. Fires for both caught-by-RN and fatal JS errors.\n  // Fatal → persist for next-launch reporting (a fetch won't finish as the app\n  // dies). Non-fatal → send immediately. Always defer to the previous handler\n  // so the app still red-boxes / crashes normally.\n  private _onGlobalError = (error: Error, isFatal?: boolean) => {\n    try {\n      const message = error?.message ? String(error.message).slice(0, 1000) : 'Unknown error'\n      const stack = error?.stack ? String(error.stack).slice(0, 4000) : ''\n      if (isFatal) {\n        this.storage.setItem(KEYS.pendingCrash, JSON.stringify({\n          message, stack, screen: this.currentScreen, sessionId: this.sessionId, ts: Date.now(),\n        })).catch(() => { /* best effort */ })\n      } else {\n        this.send('JS_ERROR', { kind: 'error', message, stack, isFatal: false, screen: this.currentScreen })\n      }\n    } catch { /* our handler must never throw */ }\n    this.prevErrorHandler?.(error, isFatal)\n  }\n\n  // Enqueue an event with explicit session/ts/screen overrides — used to replay a\n  // persisted crash so it's attributed to the run it happened in, not this launch.\n  private _enqueueRaw(\n    event: string,\n    data: Record<string, unknown>,\n    opts: { sessionId?: string; ts?: number; screen?: string },\n  ) {\n    const partial: PartialEvent = {\n      userId: this.userId,\n      sessionId: opts.sessionId || this.sessionId,\n      event,\n      data,\n      screen: opts.screen ?? this.currentScreen,\n      referrer: '',\n      ts: opts.ts || Date.now(),\n      platform: Platform.OS as 'ios' | 'android',\n      appVersion: this.config.appVersion,\n      ...(Object.keys(this.deepLinkUtm).length > 0 ? { utm: this.deepLinkUtm } : {}),\n      ...(Object.keys(this.installAttr).length > 0 ? { install_utm: this.installAttr } : {}),\n    }\n    if (!this.deviceId) { this.pendingEvents.push(partial); return }\n    this.queue.push({ ...partial, deviceId: this.deviceId , sdk: SDK_NAME, sdkVersion: SDK_VERSION })\n    this._schedulePersist()\n  }\n\n  // The optional NohmoCrash native module (absent on web / Expo Go / older hosts).\n  private get _nativeCrash() {\n    return (NativeModules as Record<string, unknown>).NohmoCrash as {\n      installCrashHandler?: () => void\n      setSessionContext?: (sessionId: string, screen: string) => void\n      getStoredCrashes?: () => Promise<Array<Record<string, unknown>>>\n    } | undefined\n  }\n\n  // Push the current JS session/screen to native so a native crash record can be\n  // attributed to the session it happened in. Fire-and-forget, never throws.\n  private _syncCrashContext() {\n    try { this._nativeCrash?.setSessionContext?.(this.sessionId, this.currentScreen) } catch { /* ignore */ }\n  }\n\n  // Read native crashes recorded on a previous run and emit them as APP_CRASH,\n  // attributed to the original session/time. The native call consumes (deletes)\n  // the records. `jsCrashHint` is the (session, ts) of a JS fatal crash already\n  // reported this launch — a native record within ~4s of it is the same crash's\n  // process-abort, so we skip it (the JS record has the richer stack).\n  private async _drainNativeCrashes(jsCrashHint?: { ts?: number; sessionId?: string } | null) {\n    let list: Array<Record<string, unknown>> | undefined\n    try {\n      list = await this._nativeCrash?.getStoredCrashes?.()\n    } catch {\n      return\n    }\n    if (!Array.isArray(list)) return\n    for (const r of list) {\n      const ts = typeof r.ts === 'number' && r.ts > 0 ? r.ts : Date.now()\n      const screen = typeof r.screen === 'string' ? r.screen : ''\n\n      // Skip the native duplicate of an already-reported fatal JS crash.\n      if (jsCrashHint?.ts && Math.abs(ts - jsCrashHint.ts) < 4000) {\n        const sameSession = !jsCrashHint.sessionId || !r.sessionId || r.sessionId === jsCrashHint.sessionId\n        if (sameSession) continue\n      }\n      this._enqueueRaw('APP_CRASH', {\n        kind: 'native',\n        platform: r.platform ?? Platform.OS,\n        nativeType: r.type ?? '',\n        signal: r.signal ?? '',\n        message: r.message ?? 'Native crash',\n        stack: r.stack ?? '',\n        thread: r.thread ?? '',\n        screen,\n        crashedAt: ts,\n      }, {\n        sessionId: typeof r.sessionId === 'string' && r.sessionId ? r.sessionId : undefined,\n        ts,\n        screen,\n      })\n    }\n  }\n\n  private _onAppStateChange = (nextState: string) => {\n    // 'inactive' is deliberately not treated as backgrounding. On iOS it fires\n    // transiently — Control Centre, the notification shade, a permission sheet —\n    // and acting on it mints a new session every time the user glances away,\n    // shredding real sessions into one-event fragments. 'background' is the\n    // state that actually means backgrounded, and it fires on both platforms.\n    if (nextState === 'background') {\n      if (this.backgrounded) return\n      this.backgrounded = true\n      const secs = Math.round((Date.now() - this.sessionStart) / 1000)\n      if (secs > 0) {\n        this.send('APP_BACKGROUND', {\n          platform: Platform.OS,\n          sessionDurationSecs: secs,\n          screen: this.currentScreen,\n        })\n      }\n      // Persist before flushing: backgrounding is the last moment we are reliably given\n      // before the OS may kill the process, and the flush might not complete.\n      void this._persistQueue().then(() => this._flush())\n    } else if (nextState === 'active') {\n      // Only a genuine return from background starts a new session; the\n      // 'active' that arrives moments after launch is not one.\n      if (!this.backgrounded) return\n      this.backgrounded = false\n      this.sessionId = genId('sess')\n      this.sessionStart = Date.now()\n      this._syncCrashContext()\n      this.send('APP_OPEN', { platform: Platform.OS, appVersion: this.config.appVersion })\n    }\n  }\n\n  /**\n   * Write the pending queue to storage so it survives the process ending.\n   *\n   * Throttled: enqueueing is hot (every screen view, every tap) and a storage write per\n   * event would be wasteful. `immediate` skips the throttle for the cases that must not\n   * be lost — the install, and going to background.\n   */\n  private _schedulePersist() {\n    if (this.persistTimer) return\n    this.persistTimer = setTimeout(() => {\n      this.persistTimer = null\n      void this._persistQueue()\n    }, 1000)\n  }\n\n  private async _persistQueue(): Promise<void> {\n    if (this.persistTimer) {\n      clearTimeout(this.persistTimer)\n      this.persistTimer = null\n    }\n    try {\n      const tail = this.queue.slice(-MAX_PERSISTED_EVENTS)\n      await this.storage.setItem(KEYS.queue, tail.length ? JSON.stringify(tail) : '')\n    } catch { /* storage full or unavailable — in-memory delivery still works */ }\n  }\n\n  private async _flush() {\n    if (!this.queue.length) return\n    const batch = this.queue.splice(0)\n\n    const body = JSON.stringify({\n      events: batch.map(e => ({\n        deviceId: e.deviceId,\n        userId: e.userId,\n        sessionId: e.sessionId,\n        event: e.event,\n        data: e.data,\n        page: e.screen,\n        referrer: e.referrer,\n        ts: e.ts,\n        // The queued event has always carried this; it was dropped here, on the way out.\n        // Ingestion needs it: when /track arrives before a Device row exists — the very\n        // first launch, or any launch where /identify failed — the backend seeds the\n        // device from the model default 'web'. It then denormalises 'web' onto these\n        // events, and an APP_INSTALL stamped 'web' is invisible to every mobile install\n        // metric. Sending the platform lets the device be created correctly the first\n        // time, instead of relying on a later /identify to come back and repair it.\n        platform: e.platform,\n        // Also stamped on the queued event and also dropped here until now.\n        // Ingestion reads the SDK name off the event batch (not off /identify),\n        // so without these every React Native device was indistinguishable from\n        // a Flutter one and `sdk` stayed empty on every Device row.\n        sdk: e.sdk,\n        sdkVersion: e.sdkVersion,\n        ...(e.utm ? { utm: e.utm } : {}),\n        ...(e.install_utm ? { install_utm: e.install_utm } : {}),\n      })),\n      apiKey: this.config.apiKey,\n    })\n\n    try {\n      const res = await fetch(`${this.config.host}${_p.t}`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body,\n      })\n      // A 5xx means the server never took the batch, so treat it like a network failure\n      // and keep the events. Only a response the server actually accepted clears them.\n      // Previously any response at all — including a 502 from a proxy — was treated as\n      // success and the batch was dropped.\n      if (!res.ok && res.status >= 500) throw new Error(`HTTP ${res.status}`)\n      this._log(`Flushed ${batch.length} events`)\n      await this._persistQueue()   // delivered — drop them from durable storage too\n    } catch (err) {\n      // Re-queue on failure, and persist so the retry survives the process ending.\n      this.queue.unshift(...batch)\n      this._log('Flush failed, re-queued:', err)\n      await this._persistQueue()\n    }\n  }\n\n  private _log(...args: unknown[]) {\n    if (this.config.debug) console.log('[Nohmo RN]', ...args)\n  }\n\n  destroy() {\n    if (this.flushTimer) clearInterval(this.flushTimer)\n    if (this.persistTimer) { clearTimeout(this.persistTimer); this.persistTimer = null }\n    void this._persistQueue()\n    this.appStateSubscription?.remove()\n    this.linkingSub?.remove()\n    this.deepLinkListeners = []\n    if (this.prevErrorHandler && typeof ErrorUtils !== 'undefined') {\n      ErrorUtils.setGlobalHandler(this.prevErrorHandler)\n    }\n    this._flush()\n  }\n}\n","type Sender = {\n  send: (event: string, data: Record<string, unknown>) => void\n  trackScreenView: (screenName: string) => void\n}\n\n// Store the sender on globalThis so both the react-native bundle (which inlines this module)\n// and the separately-loaded autocapture bundle (imported by the Babel plugin) share one instance.\n// Module-level variables don't work here because Metro/Rollup can create two separate copies.\nconst _g = globalThis as unknown as Record<string, unknown>\nconst _KEY = '__nohmo_sender__'\n\nexport function setAutoCaptureTracker(sender: Sender): void {\n  _g[_KEY] = sender\n}\n\nfunction _getSender(): Sender | null {\n  return (_g[_KEY] as Sender | undefined) ?? null\n}\n\n// ── Screen tracking ────────────────────────────────────────────────────────\n\nfunction getActiveRouteName(state: any): string | undefined {\n  if (!state?.routes) return undefined\n  const route = state.routes[state.index ?? state.routes.length - 1]\n  if (!route) return undefined\n  // Nested navigators — recurse into the active child state\n  if (route.state) return getActiveRouteName(route.state)\n  return route.name as string\n}\n\n/**\n * Pass directly to NavigationContainer's onStateChange prop.\n * Fires SCREEN_VIEW + TIME_SPENT automatically on every navigation.\n *\n * @example\n * import { onNohmoStateChange } from 'nohmo/react-native/autocapture'\n * <NavigationContainer onStateChange={onNohmoStateChange}>\n */\nexport function onNohmoStateChange(state: any): void {\n  const s = _getSender()\n  if (!s) return\n  const name = getActiveRouteName(state)\n  if (name) s.trackScreenView(name)\n}\n\n/**\n * Pass to NavigationContainer's onReady prop to also capture the initial screen.\n * Requires passing your navigationRef so the current route can be read.\n *\n * @example\n * import { onNohmoStateChange, makeNohmoReadyHandler } from 'nohmo/react-native/autocapture'\n * <NavigationContainer\n *   onStateChange={onNohmoStateChange}\n *   onReady={makeNohmoReadyHandler(navigationRef)}\n * >\n */\nexport function makeNohmoReadyHandler(\n  navigationRef: { current: { getCurrentRoute: () => { name: string } | undefined } | null }\n): () => void {\n  return () => {\n    const s = _getSender()\n    if (!s) return\n    const route = navigationRef.current?.getCurrentRoute()\n    if (route?.name) s.trackScreenView(route.name)\n  }\n}\n\n// ── Press autocapture (injected by babel-plugin) ───────────────────────────\n\n/**\n * Coerce a captured label to clean text. A dynamic label expression can resolve\n * at runtime to a React element or object (e.g. `label={icon}`, or a template\n * fragment that is itself an element) — `String()` would turn that into the\n * useless \"[object Object]\". So: drop non-string/object values entirely, and\n * strip any \"[object Object]\" that leaked into an otherwise-good string before\n * trimming and capping. Returns null when nothing meaningful remains.\n */\nfunction _coerceLabel(v: unknown): string | null {\n  let s: string\n  if (typeof v === 'string') s = v\n  else if (typeof v === 'number' || typeof v === 'boolean') s = String(v)\n  else return null // null/undefined, objects, React elements, arrays, functions\n  s = s.replace(/\\[object Object\\]/g, '').replace(/\\s+/g, ' ').trim().slice(0, 80)\n  return s || null\n}\n\n// Marks a function as already wrapped, so nested wraps can de-duplicate.\nconst _WRAPPED = '__nohmoWrapped__'\n\n// ── Rage presses ───────────────────────────────────────────────────────────\n// The web SDK emits RAGE_CLICK when someone jabs the same spot three times in a\n// second. Mobile users do exactly the same thing to an unresponsive button, and\n// without this the whole signal was web-only. Keyed by the press target rather than\n// by coordinates — RN gives us the component identity, which is more precise than a\n// screen position and survives scrolling.\nconst RAGE_WINDOW_MS = 1000\nconst RAGE_THRESHOLD = 3\nconst _rageCounts = new Map<string, { count: number; ts: number }>()\n\nfunction _trackRage(sender: Sender, key: string, payload: Record<string, unknown>): void {\n  const now = Date.now()\n  const prev = _rageCounts.get(key)\n  if (prev && now - prev.ts < RAGE_WINDOW_MS) {\n    prev.count++\n    prev.ts = now\n    // Fire once on crossing the threshold, not on every press after it.\n    if (prev.count === RAGE_THRESHOLD) sender.send('RAGE_CLICK', payload)\n    return\n  }\n  _rageCounts.set(key, { count: 1, ts: now })\n  // A long session touching many controls would otherwise grow this map without\n  // bound; the entries are only meaningful for a second anyway.\n  if (_rageCounts.size > 100) {\n    for (const [k, v] of _rageCounts) {\n      if (now - v.ts > RAGE_WINDOW_MS) _rageCounts.delete(k)\n    }\n  }\n}\n\n/**\n * Injected by the Nohmo Babel plugin around every onPress / onLongPress.\n * Fires a PRESS or LONG_PRESS event then calls the original handler.\n *\n * De-duplication: design-system buttons (e.g. <Button> → internal <Pressable\n * onPress={onPress}/>) thread the app's handler down, so the plugin wraps the\n * SAME handler at two levels. To avoid a double press (and the inner component's\n * \"[object Object]\" label), a wrapper whose handler is ITSELF a wrapper stays\n * silent — the app-level wrapper it delegates to carries the real label.\n */\nexport function __nohmoWrap<T extends ((...args: unknown[]) => unknown) | null | undefined>(\n  handler: T,\n  meta: {\n    c?: string | null  // component name\n    p?: string         // prop name (onPress | onLongPress)\n    t?: unknown        // text — static (children/prop) or a runtime prop value\n    f?: string | null  // filename (without extension)\n    l?: number         // line number\n  }\n): (...args: unknown[]) => unknown {\n  const wrapped = (...args: unknown[]) => {\n    const s = _getSender()\n    const handlerIsWrapped =\n      typeof handler === 'function' && (handler as unknown as Record<string, unknown>)[_WRAPPED] === true\n    if (s && !handlerIsWrapped) {\n      const isLong = meta.p === 'onLongPress'\n      const payload = {\n        component: meta.c ?? null,\n        text: _coerceLabel(meta.t),\n        file: meta.f ?? null,\n        line: meta.l ?? null,\n      }\n      s.send(isLong ? 'LONG_PRESS' : 'PRESS', payload)\n      // Repeated jabs at the same control are the mobile equivalent of a rage click.\n      // Long-presses are excluded: holding a control is intentional, not frustration.\n      if (!isLong) {\n        _trackRage(s, `${meta.f ?? ''}:${meta.l ?? ''}:${meta.c ?? ''}`, payload)\n      }\n    }\n    return (handler as ((...a: unknown[]) => unknown) | null | undefined)?.(...args)\n  }\n  ;(wrapped as unknown as Record<string, unknown>)[_WRAPPED] = true\n  return wrapped\n}\n","import React, { createContext, useContext, useEffect, useRef } from 'react'\nimport { NohmoRNTracker } from './tracker'\nimport { setAutoCaptureTracker } from './autocapture'\nimport type { NohmoRNConfig, NohmoRNContextValue } from './types'\n\nconst NohmoRNContext = createContext<NohmoRNContextValue>({\n  send: () => undefined,\n  trackScreenView: () => undefined,\n  trackConversion: () => undefined,\n  buildInviteLink: async () => '',\n  linkUser: async () => undefined,\n  registerPushToken: async () => undefined,\n  setInstallReferrer: async () => undefined,\n  getDeepLink: () => null,\n  onDeepLink: () => () => undefined,\n})\n\ninterface NohmoProviderProps {\n  children: React.ReactNode\n  projectId: string\n  apiKey: string\n  options?: Partial<Omit<NohmoRNConfig, 'projectId' | 'apiKey'>>\n}\n\nexport function NohmoProvider({\n  children,\n  projectId,\n  apiKey,\n  options = {},\n}: NohmoProviderProps) {\n  const trackerRef = useRef<NohmoRNTracker | null>(null)\n  type PendingLink = [string, string | undefined, Record<string, unknown> | undefined]\n  const pendingLinksRef = useRef<PendingLink[]>([])\n  // Deep-link listeners registered by children before the tracker exists (child\n  // effects run before the provider's), replayed once the tracker is created.\n  const pendingDeepLinkRef = useRef<((value: string) => void)[]>([])\n\n  useEffect(() => {\n    const tracker = new NohmoRNTracker({ projectId, apiKey, ...options })\n    trackerRef.current = tracker\n\n    const pending = pendingLinksRef.current.splice(0)\n    if (pending.length) {\n      for (const [userId, email, meta] of pending) {\n        tracker.linkUser(userId, email, meta)\n      }\n    }\n    for (const cb of pendingDeepLinkRef.current.splice(0)) tracker.onDeepLink(cb)\n\n    tracker.init()\n    setAutoCaptureTracker(tracker)\n\n    return () => { tracker.destroy() }\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 trackScreenView = (screenName: string) => {\n    trackerRef.current?.trackScreenView(screenName)\n  }\n\n  const trackConversion = (slug: string, properties?: Record<string, unknown>) => {\n    trackerRef.current?.trackConversion(slug, properties)\n  }\n\n  const buildInviteLink = async (opts?: { channel?: string; campaign?: string; source?: string }) => {\n    return (await trackerRef.current?.buildInviteLink(opts)) ?? ''\n  }\n\n  const linkUser = async (userId: string, email?: string, meta?: Record<string, unknown>) => {\n    if (!trackerRef.current) {\n      pendingLinksRef.current.push([userId, email, meta])\n      return\n    }\n    await trackerRef.current.linkUser(userId, email, meta)\n  }\n\n  const registerPushToken = async (token: string) => {\n    await trackerRef.current?.registerPushToken(token)\n  }\n\n  const setInstallReferrer = async (referrerString: string) => {\n    await trackerRef.current?.setInstallReferrer(referrerString)\n  }\n\n  const getDeepLink = () => trackerRef.current?.getDeepLink() ?? null\n\n  const onDeepLink = (cb: (value: string) => void) => {\n    if (trackerRef.current) return trackerRef.current.onDeepLink(cb)\n    // Tracker not ready yet — buffer, and allow unsubscribing before it's created.\n    pendingDeepLinkRef.current.push(cb)\n    return () => {\n      const i = pendingDeepLinkRef.current.indexOf(cb)\n      if (i >= 0) pendingDeepLinkRef.current.splice(i, 1)\n    }\n  }\n\n  return (\n    <NohmoRNContext.Provider value={{ send, trackScreenView, trackConversion, buildInviteLink, linkUser, registerPushToken, setInstallReferrer, getDeepLink, onDeepLink }}>\n      {children}\n    </NohmoRNContext.Provider>\n  )\n}\n\nexport function useNohmo(): NohmoRNContextValue {\n  return useContext(NohmoRNContext)\n}\n","import { useEffect } from 'react'\nimport { useNohmo } from './NohmoProvider'\n\nexport function useScreenView(screenName: string) {\n  const { trackScreenView } = useNohmo()\n  useEffect(() => {\n    trackScreenView(screenName)\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [screenName])\n}\n"],"names":["Platform","Linking","Dimensions","AppState","NativeModules","createContext","useRef","useEffect","_jsx","useContext"],"mappings":"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"}