{"version":3,"sources":["../src/index.ts","../package.json","../src/context.ts","../src/integrations/console-breadcrumbs.ts","../src/integrations/fetch-breadcrumbs.ts","../src/integrations/log-flush.ts","../src/integrations/navigation-breadcrumbs.ts","../src/integrations/unhandled-rejection.ts","../src/integrations/window-error.ts"],"sourcesContent":["// Copyright 2026 Bitech.id. Licensed under the MIT License.\n\nimport { BiwaveClient, setCurrentClient } from '@biwave/core';\nimport type { BiwaveEvent } from '@biwave/core';\nimport pkg from '../package.json' with { type: 'json' };\nimport { setBrowserContext, setDeviceContext, setPageContext } from './context.js';\nimport { installConsoleBreadcrumbs } from './integrations/console-breadcrumbs.js';\nimport { installFetchBreadcrumbs } from './integrations/fetch-breadcrumbs.js';\nimport { installLogFlushOnUnload } from './integrations/log-flush.js';\nimport { installNavigationBreadcrumbs } from './integrations/navigation-breadcrumbs.js';\nimport { installUnhandledRejectionHandler } from './integrations/unhandled-rejection.js';\nimport { installWindowErrorHandler } from './integrations/window-error.js';\nimport { getReplaySessionId, notifyErrorCaptured } from './stream/session-ref.js';\nimport type { StreamOptions } from './stream/types.js';\nimport { DEFAULT_STREAM_OPTIONS } from './stream/types.js';\n\nexport type { BiwaveClient, UserInfo } from '@biwave/core';\nexport type { StreamOptions } from './stream/types.js';\n/** Ends the active Biwave Stream session early, e.g. on user consent withdrawal. A no-op if Stream isn't active. */\nexport { requestStreamStop } from './stream/session-ref.js';\n\nexport interface BiwaveBrowserOptions {\n  clientId: string;\n  endpoint?: string;\n  environment?: string;\n  release?: string;\n  dist?: string;\n  maxBreadcrumbs?: number;\n  logBatchSize?: number;\n  logFlushInterval?: number;\n  logMaxMemoryEvents?: number;\n  pulseBatchSize?: number;\n  pulseFlushInterval?: number;\n  pulseMaxMemoryEvents?: number;\n  beforeSend?: (event: BiwaveEvent) => BiwaveEvent | null;\n  /** Biwave Stream (session replay) — off by default. Lazy-loaded: apps that don't enable this never load rrweb. */\n  stream?: StreamOptions;\n}\n\nexport function init(options: BiwaveBrowserOptions): BiwaveClient {\n  const client = new BiwaveClient({\n    clientId: options.clientId,\n    endpoint: options.endpoint,\n    platform: 'browser',\n    sdk: { name: '@biwave/browser', version: pkg.version },\n    environment: options.environment,\n    release: options.release,\n    dist: options.dist,\n    maxBreadcrumbs: options.maxBreadcrumbs,\n    logBatchSize: options.logBatchSize,\n    logFlushInterval: options.logFlushInterval,\n    logMaxMemoryEvents: options.logMaxMemoryEvents,\n    pulseBatchSize: options.pulseBatchSize,\n    pulseFlushInterval: options.pulseFlushInterval,\n    pulseMaxMemoryEvents: options.pulseMaxMemoryEvents,\n    beforeSend: (event) => {\n      // Correlates this Trace event with the active Stream session, if any.\n      // No dedicated field on BiwaveEvent yet — tags.session_id is the\n      // agreed interim slot (see docs/docs.md's Stream section).\n      const sessionId = getReplaySessionId();\n      if (sessionId) {\n        event.tags = { ...event.tags, session_id: sessionId };\n      }\n      notifyErrorCaptured();\n      return options.beforeSend ? options.beforeSend(event) : event;\n    },\n  });\n\n  setBrowserContext(client);\n  setPageContext(client);\n  setDeviceContext(client);\n  setCurrentClient(client);\n\n  installWindowErrorHandler(client);\n  installUnhandledRejectionHandler(client);\n  installConsoleBreadcrumbs(client);\n  installFetchBreadcrumbs(client);\n  installNavigationBreadcrumbs(client);\n  installLogFlushOnUnload(client);\n\n  if (options.stream?.enabled) {\n    initStream(client, options).catch((err: unknown) => {\n      console.debug('[Biwave Stream] failed to load', err);\n    });\n  }\n\n  return client;\n}\n\nasync function initStream(client: BiwaveClient, options: BiwaveBrowserOptions): Promise<void> {\n  const { StreamController } = await import('./stream/stream.js');\n  const resolved = { ...DEFAULT_STREAM_OPTIONS, ...options.stream };\n\n  new StreamController({\n    client,\n    clientId: options.clientId,\n    endpoint: client.target.endpoint,\n    environment: options.environment,\n    sdkVersion: pkg.version,\n    options: resolved,\n  }).start();\n}\n","{\n  \"name\": \"@biwave/browser\",\n  \"version\": \"0.5.2\",\n  \"description\": \"Biwave Browser SDK — unhandled exception & rejection capture, browser/page context, auto breadcrumbs, and session replay\",\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/bitech-dev/biwave-js.git\",\n    \"directory\": \"packages/browser\"\n  },\n  \"homepage\": \"https://github.com/bitech-dev/biwave-js/tree/main/packages/browser#readme\",\n  \"bugs\": {\n    \"url\": \"https://github.com/bitech-dev/biwave-js/issues\"\n  },\n  \"keywords\": [\n    \"biwave\",\n    \"browser\",\n    \"sdk\",\n    \"error-tracking\",\n    \"breadcrumbs\",\n    \"session-replay\",\n    \"stream\",\n    \"rrweb\"\n  ],\n  \"main\": \"./dist/index.js\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.js\"\n    }\n  },\n  \"files\": [\n    \"dist\",\n    \"README.md\"\n  ],\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"dev\": \"tsup --watch\",\n    \"lint\": \"eslint .\",\n    \"test\": \"vitest run\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"clean\": \"rimraf dist\"\n  },\n  \"peerDependencies\": {\n    \"@biwave/core\": \"workspace:^\"\n  },\n  \"dependencies\": {\n    \"rrweb\": \"^2.1.0\"\n  },\n  \"devDependencies\": {\n    \"@biwave/core\": \"workspace:^\",\n    \"jsdom\": \"^29.1.1\",\n    \"tsup\": \"^8.5.1\",\n    \"typescript\": \"^5.9.3\",\n    \"vitest\": \"^4.1.10\"\n  }\n}\n","// Copyright 2026 Bitech.id. Licensed under the MIT License.\n\nimport type { BiwaveClient } from '@biwave/core';\n\nexport function setBrowserContext(client: BiwaveClient): void {\n  client.setContext('browser', {\n    user_agent: navigator.userAgent,\n    language: navigator.language,\n    languages: navigator.languages ? [...navigator.languages] : undefined,\n    platform: navigator.platform,\n    cookie_enabled: navigator.cookieEnabled,\n    online: navigator.onLine,\n  });\n}\n\nexport function setPageContext(client: BiwaveClient): void {\n  client.setContext('page', {\n    url: window.location.href,\n    title: document.title || undefined,\n    referrer: document.referrer || undefined,\n    viewport: `${window.innerWidth}x${window.innerHeight}`,\n  });\n}\n\nexport function setDeviceContext(client: BiwaveClient): void {\n  client.setContext('device', {\n    screen_resolution: `${window.screen.width}x${window.screen.height}`,\n    pixel_ratio: window.devicePixelRatio,\n    color_depth: window.screen.colorDepth,\n    timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n  });\n}\n","// Copyright 2026 Bitech.id. Licensed under the MIT License.\n\nimport type { BiwaveClient, BreadcrumbLevel } from '@biwave/core';\n\ntype OriginalFn = (...args: unknown[]) => void;\n\nconst LEVEL_MAP: Record<string, BreadcrumbLevel> = {\n  log: 'info',\n  info: 'info',\n  warn: 'warning',\n  error: 'error',\n  debug: 'info',\n};\n\nexport function installConsoleBreadcrumbs(client: BiwaveClient): () => void {\n  const methods = ['log', 'info', 'warn', 'error', 'debug'] as const;\n  const originals = new Map<string, OriginalFn>();\n\n  for (const method of methods) {\n    const original = (console as unknown as Record<string, OriginalFn>)[method]?.bind(console);\n    if (!original) continue;\n    originals.set(method, original);\n\n    (console as unknown as Record<string, OriginalFn>)[method] = (...args: unknown[]) => {\n      // Don't breadcrumb the SDK's own internal logging (transport\n      // warnings, etc.) — that's noise about the SDK, not the app.\n      const isOwnLog = typeof args[0] === 'string' && args[0].startsWith('[Biwave]');\n      if (!isOwnLog) {\n        client.addBreadcrumb({\n          type: 'console',\n          category: `console.${method}`,\n          level: LEVEL_MAP[method] ?? 'info',\n          message: args.map((a) => stringify(a)).join(' '),\n        });\n      }\n      original(...args);\n    };\n  }\n\n  return () => {\n    for (const [method, original] of originals) {\n      (console as unknown as Record<string, OriginalFn>)[method] = original;\n    }\n  };\n}\n\nfunction stringify(value: unknown): string {\n  if (typeof value === 'string') return value;\n  try {\n    return JSON.stringify(value) ?? String(value);\n  } catch {\n    return String(value);\n  }\n}\n","// Copyright 2026 Bitech.id. Licensed under the MIT License.\n\nimport type { BiwaveClient } from '@biwave/core';\n\nfunction resolveUrl(input: RequestInfo | URL): string {\n  if (typeof input === 'string') return input;\n  if (input instanceof URL) return input.href;\n  return input.url;\n}\n\nfunction resolveMethod(input: RequestInfo | URL, init: RequestInit | undefined): string {\n  if (init?.method) return init.method;\n  if (input instanceof Request) return input.method;\n  return 'GET';\n}\n\nexport function installFetchBreadcrumbs(client: BiwaveClient): () => void {\n  if (typeof window.fetch !== 'function') return () => {};\n\n  const original = window.fetch.bind(window);\n  // Never breadcrumb the SDK's own requests to its ingest endpoint — that's\n  // noise, not app behavior, and Sentry's own SDKs exclude their DSN host too.\n  const ingestOrigin = new URL(client.target.endpoint).origin;\n\n  window.fetch = ((input: RequestInfo | URL, init?: RequestInit) => {\n    const url = resolveUrl(input);\n    if (url.startsWith(ingestOrigin)) {\n      return original(input, init);\n    }\n\n    const method = resolveMethod(input, init);\n    const startTime = Date.now();\n\n    return original(input, init).then(\n      (response) => {\n        client.addBreadcrumb({\n          type: 'http',\n          category: 'fetch',\n          level: response.status >= 400 ? 'error' : 'info',\n          data: {\n            url,\n            method,\n            status_code: response.status,\n            duration_ms: Date.now() - startTime,\n          },\n        });\n        return response;\n      },\n      (error: unknown) => {\n        client.addBreadcrumb({\n          type: 'http',\n          category: 'fetch',\n          level: 'error',\n          data: { url, method, status_code: 0, duration_ms: Date.now() - startTime },\n        });\n        throw error;\n      },\n    );\n  }) as typeof fetch;\n\n  return () => {\n    window.fetch = original;\n  };\n}\n","// Copyright 2026 Bitech.id. Licensed under the MIT License.\n\nimport type { BiwaveClient } from '@biwave/core';\n\n/**\n * Best-effort log/pulse flush when the page is being hidden/unloaded — not\n * guaranteed (a hard crash or the tab being killed can still lose whatever's\n * buffered). Browsers don't have process.on(), so this uses\n * visibilitychange/pagehide instead. client.flush() already covers both\n * buffers, so no Pulse-specific wiring is needed here.\n *\n * TODO: for the very last flush on unload, navigator.sendBeacon() would be\n * more reliable than fetch() (which browsers may cancel once the page is\n * gone) — not implemented in this pass.\n */\nexport function installLogFlushOnUnload(client: BiwaveClient): () => void {\n  const flush = (): void => {\n    void client.flush();\n  };\n\n  const handleVisibilityChange = (): void => {\n    if (document.visibilityState === 'hidden') flush();\n  };\n\n  document.addEventListener('visibilitychange', handleVisibilityChange);\n  window.addEventListener('pagehide', flush);\n\n  return () => {\n    document.removeEventListener('visibilitychange', handleVisibilityChange);\n    window.removeEventListener('pagehide', flush);\n  };\n}\n","// Copyright 2026 Bitech.id. Licensed under the MIT License.\n\nimport type { BiwaveClient } from '@biwave/core';\n\nexport function installNavigationBreadcrumbs(client: BiwaveClient): () => void {\n  let lastUrl = window.location.href;\n\n  const recordNavigation = (): void => {\n    const currentUrl = window.location.href;\n    if (currentUrl === lastUrl) return;\n\n    client.addBreadcrumb({\n      type: 'navigation',\n      category: 'navigation',\n      level: 'info',\n      data: { from: lastUrl, to: currentUrl },\n    });\n    lastUrl = currentUrl;\n  };\n\n  const originalPushState = history.pushState.bind(history);\n  const originalReplaceState = history.replaceState.bind(history);\n\n  history.pushState = function patchedPushState(...args: Parameters<typeof history.pushState>) {\n    originalPushState(...args);\n    recordNavigation();\n  };\n\n  history.replaceState = function patchedReplaceState(\n    ...args: Parameters<typeof history.replaceState>\n  ) {\n    originalReplaceState(...args);\n    recordNavigation();\n  };\n\n  window.addEventListener('popstate', recordNavigation);\n\n  return () => {\n    history.pushState = originalPushState;\n    history.replaceState = originalReplaceState;\n    window.removeEventListener('popstate', recordNavigation);\n  };\n}\n","// Copyright 2026 Bitech.id. Licensed under the MIT License.\n\nimport type { BiwaveClient } from '@biwave/core';\n\nexport function installUnhandledRejectionHandler(client: BiwaveClient): () => void {\n  const handler = (event: PromiseRejectionEvent) => {\n    client.captureException(event.reason, 'error', undefined, {\n      type: 'onunhandledrejection',\n      handled: false,\n    });\n  };\n\n  window.addEventListener('unhandledrejection', handler);\n\n  return () => {\n    window.removeEventListener('unhandledrejection', handler);\n  };\n}\n","// Copyright 2026 Bitech.id. Licensed under the MIT License.\n\nimport type { BiwaveClient } from '@biwave/core';\n\nexport function installWindowErrorHandler(client: BiwaveClient): () => void {\n  const handler = (event: ErrorEvent) => {\n    // event.error is null for cross-origin \"Script error.\" and resource-load\n    // failures (failed <img>/<script> tags also dispatch 'error') — nothing\n    // useful to capture in either case.\n    if (!event.error) return;\n\n    client.captureException(event.error, 'fatal', undefined, {\n      type: 'onerror',\n      handled: false,\n    });\n  };\n\n  window.addEventListener('error', handler);\n\n  return () => {\n    window.removeEventListener('error', handler);\n  };\n}\n"],"mappings":"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","names":["init"]}