@edraj/sauron-browser 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/LICENSE +661 -0
- package/README.md +109 -0
- package/dist/index.cjs +1953 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +493 -0
- package/dist/index.d.ts +493 -0
- package/dist/index.js +1922 -0
- package/dist/index.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/identity.ts","../src/context.ts","../src/dsn.ts","../src/envelope.ts","../src/integrations/instrument.ts","../src/integrations/console.ts","../src/integrations/dom.ts","../src/integrations/fetch.ts","../src/screen.ts","../src/stacktrace/parse.ts","../src/api/capture.ts","../src/integrations/globalHandlers.ts","../src/integrations/history.ts","../src/scope.ts","../src/api/product.ts","../src/integrations/performance.ts","../src/integrations/xhr.ts","../src/transport/beacon.ts","../src/transport/compress.ts","../src/transport/queue.ts","../src/transport/transport.ts","../src/client.ts","../src/api/breadcrumbs.ts","../src/index.ts"],"names":["g","init","sessionId","resolveUrl","resolveMethod","flush","captureException","captureMessage","track","identify","trackTransaction","setScreen","getScreen","addBreadcrumb"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Small dependency-free helpers shared across the SDK. */\n\n/** SDK identity, embedded in every envelope header. */\nexport const SDK_NAME = 'sauron.javascript';\nexport const SDK_VERSION = '1.0.0';\n\n/** The ambient global, regardless of environment (window / self / global). */\nexport function getGlobal(): typeof globalThis {\n return globalThis;\n}\n\ninterface CryptoLike {\n randomUUID?: () => string;\n getRandomValues?: <T extends ArrayBufferView | null>(array: T) => T;\n}\n\nfunction getCrypto(): CryptoLike | undefined {\n const g = getGlobal() as { crypto?: CryptoLike };\n return g.crypto;\n}\n\n/** RFC-4122 v4 UUID, using Web Crypto when available. */\nexport function uuidv4(): string {\n const c = getCrypto();\n if (c && typeof c.randomUUID === 'function') {\n return c.randomUUID();\n }\n const bytes = new Uint8Array(16);\n if (c && typeof c.getRandomValues === 'function') {\n c.getRandomValues(bytes);\n } else {\n for (let i = 0; i < 16; i++) bytes[i] = Math.floor(Math.random() * 256);\n }\n // Set version (4) and variant (10xx) bits.\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex: string[] = [];\n for (let i = 0; i < 16; i++) hex.push(bytes[i].toString(16).padStart(2, '0'));\n const s = hex.join('');\n return `${s.slice(0, 8)}-${s.slice(8, 12)}-${s.slice(12, 16)}-${s.slice(16, 20)}-${s.slice(20)}`;\n}\n\n/** Current time as an ISO-8601 UTC string, e.g. `2026-07-12T10:30:00.123Z`. */\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\n/**\n * `JSON.stringify` that never throws: strips circular references, functions and\n * coerces bigint to string. Returns `\"{}\"` on catastrophic failure.\n */\nexport function safeStringify(value: unknown): string {\n const seen = new WeakSet<object>();\n try {\n return JSON.stringify(value, (_key, val) => {\n if (typeof val === 'bigint') return val.toString();\n if (typeof val === 'function') return undefined;\n if (typeof val === 'object' && val !== null) {\n if (seen.has(val)) return '[Circular]';\n seen.add(val);\n }\n return val;\n });\n } catch {\n return '{}';\n }\n}\n\n/** UTF-8 byte length of a string. */\nexport function byteLength(s: string): number {\n if (typeof TextEncoder !== 'undefined') {\n return new TextEncoder().encode(s).length;\n }\n let len = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) len += 1;\n else if (c < 0x800) len += 2;\n else if (c >= 0xd800 && c <= 0xdbff) {\n len += 4;\n i++; // surrogate pair\n } else len += 3;\n }\n return len;\n}\n\n/**\n * Full-jitter exponential backoff, capped. Attempt 0 => up to `baseMs`,\n * attempt n => up to `min(capMs, baseMs * 2^n)`, then a uniform random point\n * in `[0, that]`.\n */\nexport function computeBackoff(attempt: number, baseMs = 1000, capMs = 30000): number {\n const ceiling = Math.min(capMs, baseMs * Math.pow(2, Math.max(0, attempt)));\n return Math.round(Math.random() * ceiling);\n}\n\n/** Clamp a number into `[min, max]`. */\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\n/** A tiny logger gated on `debug`. */\nexport function makeLogger(debug: boolean): {\n log: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n} {\n const noop = (): void => {};\n if (!debug || typeof console === 'undefined') {\n return { log: noop, warn: noop };\n }\n return {\n log: (...args: unknown[]) => console.log('[sauron]', ...args),\n warn: (...args: unknown[]) => console.warn('[sauron]', ...args),\n };\n}\n","/**\n * Stable device + session identity.\n *\n * - `device_id` is persisted in `localStorage` (`sauron.device_id`) so it\n * survives reloads and tabs — the backend uses it as the durable device\n * identity (`context.device.device_id`).\n * - `session_id` is persisted in `sessionStorage` (`sauron.session_id`) so it is\n * shared across a tab's page loads but starts fresh for a new browsing\n * session. It is attached to every event, error and transaction item.\n *\n * Both degrade gracefully: with no writable Web Storage (SSR, private mode,\n * blocked cookies) we fall back to a per-process id generated once in memory.\n */\n\nimport { uuidv4 } from './utils.js';\n\n/** localStorage key holding the durable device id. */\nexport const DEVICE_ID_KEY = 'sauron.device_id';\n/** sessionStorage key holding the per-session id. */\nexport const SESSION_ID_KEY = 'sauron.session_id';\n\n/** The minimal Web Storage surface we need (a subset of `Storage`). */\ninterface WebStorageLike {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\n/** Return a named Web Storage area if present and writable, else `null`. */\nfunction webStorage(name: 'localStorage' | 'sessionStorage'): WebStorageLike | null {\n try {\n const s = (globalThis as Record<string, unknown>)[name] as WebStorageLike | undefined;\n if (!s) return null;\n const probe = '__sauron_probe__';\n s.setItem(probe, '1');\n s.removeItem(probe);\n return s;\n } catch {\n // Storage disabled (private mode, blocked cookies, SSR, ...).\n return null;\n }\n}\n\n/**\n * Return the persisted id under `key`, generating and persisting a fresh v4\n * uuid when absent. `cached` short-circuits repeated lookups and doubles as the\n * in-memory fallback when no storage is available.\n */\nfunction persistentId(cached: string | null, storage: WebStorageLike | null, key: string): string {\n if (cached) return cached;\n if (storage) {\n try {\n const existing = storage.getItem(key);\n if (existing) return existing;\n } catch {\n /* fall through and generate */\n }\n }\n const fresh = uuidv4();\n if (storage) {\n try {\n storage.setItem(key, fresh);\n } catch {\n /* best effort — degrade to the in-memory value returned below */\n }\n }\n return fresh;\n}\n\nlet deviceId: string | null = null;\nlet sessionId: string | null = null;\n\n/** The stable device id (persisted in localStorage; per-process fallback). */\nexport function getDeviceId(): string {\n deviceId = persistentId(deviceId, webStorage('localStorage'), DEVICE_ID_KEY);\n return deviceId;\n}\n\n/** The current session id (persisted in sessionStorage; in-memory fallback). */\nexport function getSessionId(): string {\n sessionId = persistentId(sessionId, webStorage('sessionStorage'), SESSION_ID_KEY);\n return sessionId;\n}\n\n/** Drop the in-memory memoization (used by tests and teardown). */\nexport function resetIdentity(): void {\n deviceId = null;\n sessionId = null;\n}\n","import { getDeviceId } from './identity.js';\nimport type { AppContext, Context, DeviceContext, OsContext, RuntimeContext, UserContext } from './types.js';\n\n/**\n * Best-effort environment detection from `navigator`. All of this is fuzzy by\n * nature (UA freezing, spoofing, non-browser hosts) so every field degrades to\n * `null` rather than guessing wrong in a way that breaks the wire contract.\n */\n\ninterface NavigatorLike {\n userAgent?: string;\n platform?: string;\n userAgentData?: { platform?: string };\n}\n\nfunction getNavigator(): NavigatorLike | undefined {\n const g = globalThis as { navigator?: NavigatorLike };\n return g.navigator;\n}\n\nfunction detectOs(ua: string): OsContext {\n // Windows\n let m = ua.match(/Windows NT ([\\d.]+)/);\n if (m) return { name: 'Windows', version: m[1] };\n // iOS (before macOS, since iPad UAs can contain \"Mac OS X\")\n m = ua.match(/iPhone OS (\\d+[_\\d]*)/) || ua.match(/CPU OS (\\d+[_\\d]*) like Mac/);\n if (m) return { name: 'iOS', version: m[1].replace(/_/g, '.') };\n // macOS\n m = ua.match(/Mac OS X (\\d+[_\\d]*)/);\n if (m) return { name: 'macOS', version: m[1].replace(/_/g, '.') };\n // Android\n m = ua.match(/Android ([\\d.]+)/);\n if (m) return { name: 'Android', version: m[1] };\n if (/Linux/.test(ua)) return { name: 'Linux', version: null };\n if (/CrOS/.test(ua)) return { name: 'Chrome OS', version: null };\n return { name: null, version: null };\n}\n\nfunction detectRuntime(ua: string): RuntimeContext {\n // Order matters: Edge/Opera masquerade as Chrome; Chrome masquerades as Safari.\n let m = ua.match(/Edg(?:e|A|iOS)?\\/([\\d.]+)/);\n if (m) return { name: 'Edge', version: major(m[1]) };\n m = ua.match(/OPR\\/([\\d.]+)/) || ua.match(/Opera\\/([\\d.]+)/);\n if (m) return { name: 'Opera', version: major(m[1]) };\n m = ua.match(/Firefox\\/([\\d.]+)/);\n if (m) return { name: 'Firefox', version: major(m[1]) };\n m = ua.match(/Chrome\\/([\\d.]+)/);\n if (m) return { name: 'Chrome', version: major(m[1]) };\n m = ua.match(/Version\\/([\\d.]+).*Safari/);\n if (m) return { name: 'Safari', version: major(m[1]) };\n if (/Safari/.test(ua)) return { name: 'Safari', version: null };\n return { name: null, version: null };\n}\n\nfunction detectDevice(nav: NavigatorLike | undefined, ua: string): DeviceContext {\n const platform = nav?.userAgentData?.platform ?? nav?.platform ?? '';\n let family: string | null = null;\n if (/Mac|iPhone|iPad|iPod/.test(platform) || /iPhone|iPad|Macintosh/.test(ua)) {\n family = 'Apple';\n } else if (/Win/.test(platform) || /Windows/.test(ua)) {\n family = 'Microsoft';\n } else if (/Android/.test(ua)) {\n family = 'Google';\n } else if (/Linux/.test(platform) || /Linux/.test(ua)) {\n family = 'Linux';\n }\n return { device_id: getDeviceId(), family, model: null, arch: null };\n}\n\n/** Take the leading major version component of a dotted version string. */\nfunction major(version: string): string {\n const dot = version.indexOf('.');\n return dot === -1 ? version : version.slice(0, dot);\n}\n\n/** Derive `app.version` from a `name@version` release string. */\nfunction appFromRelease(release: string | null): AppContext {\n if (!release) return { version: null, build: null };\n const at = release.lastIndexOf('@');\n const version = at === -1 ? release : release.slice(at + 1);\n return { version: version || null, build: null };\n}\n\n/**\n * Build the environment portion of the context (everything except the user).\n * The user is merged in by the client from its `Scope`.\n */\nexport function detectContext(release: string | null): Omit<Context, 'user'> {\n const nav = getNavigator();\n const ua = nav?.userAgent ?? '';\n return {\n device: detectDevice(nav, ua),\n os: detectOs(ua),\n app: appFromRelease(release),\n runtime: detectRuntime(ua),\n };\n}\n\n/** Combine the detected environment context with the current user. */\nexport function buildContext(release: string | null, user: UserContext): Context {\n return { ...detectContext(release), user };\n}\n","/**\n * DSN parsing.\n *\n * A DSN looks like `https://<public_key>@<host>/<project_id>`. The public key\n * is a non-secret, write-only credential — it is safe to ship in client code.\n */\n\nexport interface Dsn {\n /** The raw DSN string (embedded verbatim into the envelope header). */\n raw: string;\n publicKey: string;\n /** `host:port` — used for the infinite-loop denylist. */\n host: string;\n /** Hostname without port. */\n hostname: string;\n /** `https` or `http` (no trailing colon). */\n protocol: string;\n projectId: string;\n /** `POST` target for the primary transport. */\n envelopeUrl: string;\n /** `POST` target for the `sendBeacon` fallback (key in query string). */\n beaconUrl: string;\n}\n\nexport class DsnError extends Error {\n constructor(message: string) {\n super(`[sauron] invalid DSN: ${message}`);\n this.name = 'DsnError';\n }\n}\n\n/** Parse and validate a DSN, deriving the transport URLs. */\nexport function parseDsn(dsn: string): Dsn {\n if (typeof dsn !== 'string' || dsn.length === 0) {\n throw new DsnError('DSN must be a non-empty string');\n }\n\n let url: URL;\n try {\n url = new URL(dsn);\n } catch {\n throw new DsnError(`could not parse \"${dsn}\"`);\n }\n\n const protocol = url.protocol.replace(/:$/, '');\n if (protocol !== 'http' && protocol !== 'https') {\n throw new DsnError(`unsupported protocol \"${protocol}\"`);\n }\n\n const publicKey = url.username;\n if (!publicKey) {\n throw new DsnError('missing public key (the \"user\" part of the URL)');\n }\n if (url.password) {\n throw new DsnError('DSN must not contain a secret (password component)');\n }\n\n const host = url.host; // includes port when present\n const hostname = url.hostname;\n if (!host) {\n throw new DsnError('missing host');\n }\n\n const projectId = url.pathname.replace(/^\\/+/, '').replace(/\\/+$/, '');\n if (!projectId) {\n throw new DsnError('missing project id (the path segment)');\n }\n\n const base = `${protocol}://${host}/api/${projectId}/envelope`;\n const beaconUrl = `${base}?k=${encodeURIComponent(publicKey)}`;\n\n return {\n raw: dsn,\n publicKey,\n host,\n hostname,\n protocol,\n projectId,\n envelopeUrl: base,\n beaconUrl,\n };\n}\n","import type { Context, Envelope, EnvelopeHeader, EnvelopeItem } from './types.js';\n\n/**\n * Assemble a canonical envelope. This is intentionally trivial — the shape is\n * the contract, so keep it a pure, side-effect-free constructor that mirrors\n * the golden JSON exactly (header, context, items, in that order).\n */\nexport function buildEnvelope(\n header: EnvelopeHeader,\n context: Context,\n items: EnvelopeItem[],\n): Envelope {\n return {\n header,\n context,\n items,\n };\n}\n","/**\n * Instrumentation primitives shared by every integration:\n *\n * - a reentrancy guard so SDK-internal work never triggers its own breadcrumbs\n * (e.g. the transport's own `fetch` must not create a \"fetch\" breadcrumb that\n * schedules another send — an infinite loop),\n * - a DSN-host denylist (belt-and-suspenders alongside the guard),\n * - an idempotent \"already wrapped\" tag so double-`init` doesn't stack wrappers,\n * - a patch registry so `close()` can restore every original.\n */\n\nconst WRAPPED = '__sauron_wrapped__';\n\nlet internalDepth = 0;\n\n/** Enter SDK-internal execution (breadcrumb capture is suppressed while > 0). */\nexport function beginInternal(): void {\n internalDepth++;\n}\n\n/** Leave SDK-internal execution. */\nexport function endInternal(): void {\n internalDepth = Math.max(0, internalDepth - 1);\n}\n\n/** Run `fn` with the reentrancy guard held (synchronous scope only). */\nexport function withInternal<T>(fn: () => T): T {\n beginInternal();\n try {\n return fn();\n } finally {\n endInternal();\n }\n}\n\n/** True while SDK-internal code is running. */\nexport function isInternal(): boolean {\n return internalDepth > 0;\n}\n\nlet dsnHost: string | null = null;\n\n/** Register the DSN host (`host:port`) used for the request denylist. */\nexport function setDsnHost(host: string | null): void {\n dsnHost = host;\n}\n\n/** True when `rawUrl` targets the DSN host — such requests must be ignored. */\nexport function isDsnRequest(rawUrl: string): boolean {\n if (!dsnHost || !rawUrl) return false;\n try {\n const base = (globalThis as { location?: { href?: string } }).location?.href;\n const u = new URL(rawUrl, base);\n return u.host === dsnHost;\n } catch {\n return false;\n }\n}\n\n/** Tag a wrapper function so we never wrap it twice. */\nexport function markWrapped<T>(fn: T): T {\n try {\n (fn as Record<string, unknown>)[WRAPPED] = true;\n } catch {\n /* frozen function — best effort */\n }\n return fn;\n}\n\n/** True when `fn` was produced by {@link markWrapped}. */\nexport function isWrapped(fn: unknown): boolean {\n if (fn === null || (typeof fn !== 'function' && typeof fn !== 'object')) return false;\n return (fn as Record<string, unknown>)[WRAPPED] === true;\n}\n\ntype Unpatch = () => void;\n\nconst patches: Array<{ name: string; unpatch: Unpatch }> = [];\n\n/** Register an undo function to be run by {@link unpatchAll}. */\nexport function registerPatch(name: string, unpatch: Unpatch): void {\n patches.push({ name, unpatch });\n}\n\n/** Restore every patched global to its original, in reverse order. */\nexport function unpatchAll(): void {\n while (patches.length) {\n const p = patches.pop();\n try {\n p?.unpatch();\n } catch {\n /* ignore restore failures */\n }\n }\n}\n","import { addBreadcrumb } from '../api/breadcrumbs.js';\nimport type { Level } from '../types.js';\nimport { isInternal, isWrapped, markWrapped, registerPatch, withInternal } from './instrument.js';\n\ntype ConsoleMethod = 'log' | 'info' | 'warn' | 'error' | 'debug';\nconst METHODS: ConsoleMethod[] = ['log', 'info', 'warn', 'error', 'debug'];\n\nfunction toLevel(method: ConsoleMethod): Level {\n switch (method) {\n case 'warn':\n return 'warning';\n case 'error':\n return 'error';\n case 'debug':\n return 'debug';\n default:\n return 'info';\n }\n}\n\nfunction argToString(arg: unknown): string {\n if (typeof arg === 'string') return arg;\n if (arg instanceof Error) return `${arg.name}: ${arg.message}`;\n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n}\n\n/** Record a breadcrumb for each `console.*` call while leaving output intact. */\nexport function installConsole(): void {\n const consoleObj = (globalThis as { console?: Console }).console;\n if (!consoleObj) return;\n const c = consoleObj as unknown as Record<string, unknown>;\n\n for (const method of METHODS) {\n const original = c[method];\n if (typeof original !== 'function' || isWrapped(original)) continue;\n const originalFn = original as (...args: unknown[]) => unknown;\n\n const wrapped = markWrapped(function sauronConsole(this: unknown, ...args: unknown[]): unknown {\n if (!isInternal()) {\n withInternal(() => {\n try {\n addBreadcrumb({\n type: 'default',\n category: 'console',\n level: toLevel(method),\n message: args.map(argToString).join(' ').slice(0, 512),\n data: { arguments: args.length },\n });\n } catch {\n /* never break the app's console */\n }\n });\n }\n return originalFn.apply(this, args);\n });\n\n c[method] = wrapped;\n registerPatch(`console.${method}`, () => {\n c[method] = originalFn;\n });\n }\n}\n","import { addBreadcrumb } from '../api/breadcrumbs.js';\nimport { isInternal, registerPatch, withInternal } from './instrument.js';\n\n/**\n * Build a stable CSS-ish selector `tag#id.class` for a clicked element.\n * NEVER serializes `innerText`/attribute values — that would leak PII.\n */\nexport function domSelector(el: unknown): string | null {\n try {\n const node = el as { tagName?: string; id?: string; className?: unknown } | null;\n if (!node || typeof node.tagName !== 'string') return null;\n\n let selector = node.tagName.toLowerCase();\n if (node.id && typeof node.id === 'string') {\n selector += `#${node.id}`;\n }\n if (typeof node.className === 'string' && node.className.trim()) {\n const classes = node.className.trim().split(/\\s+/).slice(0, 3);\n if (classes.length) selector += `.${classes.join('.')}`;\n }\n return selector;\n } catch {\n return null;\n }\n}\n\n/** Record a `ui.click` breadcrumb (selector only, never text) for each click. */\nexport function installDom(): void {\n const doc = (globalThis as { document?: Document }).document;\n if (!doc || typeof doc.addEventListener !== 'function') return;\n\n const handler = (event: Event): void => {\n if (isInternal()) return;\n const selector = domSelector(event.target);\n if (!selector) return;\n withInternal(() => {\n addBreadcrumb({\n type: 'default',\n category: 'ui.click',\n level: 'info',\n message: selector,\n data: null,\n });\n });\n };\n\n const options = { capture: true, passive: true } as AddEventListenerOptions;\n doc.addEventListener('click', handler, options);\n registerPatch('dom.click', () => {\n try {\n doc.removeEventListener('click', handler, options);\n } catch {\n /* ignore */\n }\n });\n}\n","import { addBreadcrumb } from '../api/breadcrumbs.js';\nimport { nowIso } from '../utils.js';\nimport { isDsnRequest, isInternal, isWrapped, markWrapped, registerPatch, withInternal } from './instrument.js';\n\nfunction resolveUrl(input: unknown): string {\n if (typeof input === 'string') return input;\n if (input && typeof input === 'object') {\n const withUrl = input as { url?: string; href?: string };\n if (typeof withUrl.url === 'string') return withUrl.url;\n if (typeof withUrl.href === 'string') return withUrl.href;\n }\n return String(input);\n}\n\nfunction resolveMethod(input: unknown, init: unknown): string {\n const fromInit = (init as { method?: string } | undefined)?.method;\n const fromReq = (input as { method?: string } | null)?.method;\n return String(fromInit ?? fromReq ?? 'GET').toUpperCase();\n}\n\nfunction addFetchBreadcrumb(\n method: string,\n url: string,\n status: number | null,\n startedAt: string,\n): void {\n withInternal(() => {\n addBreadcrumb({\n type: 'default',\n category: 'fetch',\n level: status !== null && status >= 400 ? 'warning' : 'info',\n message: `${method} ${url}`,\n timestamp: startedAt,\n data: { method, url, status_code: status },\n });\n });\n}\n\n/**\n * Wrap `fetch` to leave a breadcrumb per request. Requests to the DSN host (our\n * own ingest traffic) and requests made while SDK code runs are skipped — this\n * is what prevents an infinite send→breadcrumb→send loop.\n */\nexport function installFetch(): void {\n const g = globalThis as { fetch?: typeof fetch };\n const original = g.fetch;\n if (typeof original !== 'function' || isWrapped(original)) return;\n\n const wrapped = markWrapped(function sauronFetch(\n this: unknown,\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n const url = resolveUrl(input);\n const shouldRecord = !isInternal() && !isDsnRequest(url);\n const method = resolveMethod(input, init);\n const startedAt = nowIso();\n\n const promise = original.call(this, input as RequestInfo, init);\n\n if (shouldRecord) {\n promise.then(\n (res) => addFetchBreadcrumb(method, url, res?.status ?? null, startedAt),\n () => addFetchBreadcrumb(method, url, null, startedAt),\n );\n }\n return promise;\n });\n\n g.fetch = wrapped;\n registerPatch('fetch', () => {\n g.fetch = original;\n });\n}\n","/**\n * Current-screen state. The SDK stamps this on every event/exception and\n * auto-emits a `$screen` view event when it changes (see api/product.ts).\n */\nlet currentScreen: string | null = null;\n\n/** The current screen name, or null if none set. */\nexport function getScreen(): string | null {\n return currentScreen;\n}\n\n/** Set the current screen. Returns true iff the value actually changed. */\nexport function setScreenState(name: string | null): boolean {\n if (name === currentScreen) return false;\n currentScreen = name;\n return true;\n}\n\n/** Drop the in-memory value (tests + teardown). */\nexport function resetScreen(): void {\n currentScreen = null;\n}\n","import type { Frame } from '../types.js';\n\n/**\n * Cross-browser `Error.stack` parser.\n *\n * Produces neutral frames with the CRASHING FRAME LAST (raw stacks list the\n * crash site first, so the parsed list is reversed). Depth is capped at\n * {@link MAX_FRAMES}, keeping the frames nearest the crash. No symbolication is\n * performed — line/column/filename are passed through verbatim.\n */\n\nexport const MAX_FRAMES = 50;\n\n/** V8 / Chrome / Node / Edge: ` at fn (file:line:col)` or ` at file:line:col`. */\nconst V8_RE =\n /^\\s*at (?:(.+?) )?\\(?((?:[a-z][\\w.+-]*:\\/\\/)?[^\\s()]+?):(\\d+):(\\d+)\\)?\\s*$/i;\n\n/**\n * Firefox / Safari: `fn@file:line:col`, `@file:line:col`, `fn/<@file:line:col`.\n * The function name may contain spaces (Safari's `global code`, `module code`).\n */\nconst GECKO_RE =\n /^\\s*(?:([^@]*?)@)?((?:[a-z][\\w.+-]*:\\/\\/)?[^@\\s]+?):(\\d+):(\\d+)\\s*$/i;\n\nfunction cleanFunction(fn: string | undefined): string | null {\n if (!fn) return null;\n let name = fn.trim();\n // V8 async / constructor prefixes and Safari's trailing markers.\n name = name.replace(/^async\\s+/, '').replace(/^new\\s+/, 'new ');\n name = name.replace(/\\s+\\[as .+\\]$/, '');\n if (name === '<anonymous>' || name === '') return null;\n return name;\n}\n\n/**\n * Heuristic for whether a frame belongs to first-party (\"in app\") code:\n * same-origin URLs and bare/relative paths are in-app; cross-origin URLs\n * (typically CDN or third-party scripts) and internal frames are not.\n */\nexport function isInAppFrame(filename: string | null): boolean {\n if (!filename) return false;\n if (filename === '<anonymous>' || filename.startsWith('node:') || filename.startsWith('internal/')) {\n return false;\n }\n const hasProtocol = /^[a-z][\\w.+-]*:\\/\\//i.test(filename);\n if (!hasProtocol) {\n // A bare or relative path (e.g. \"app.js\", \"/static/app.js\").\n return true;\n }\n const origin = getOrigin();\n if (origin && filename.startsWith(origin)) {\n return true;\n }\n // Cross-origin absolute URL — treat as third-party / vendor.\n return false;\n}\n\nfunction getOrigin(): string {\n const loc = (globalThis as { location?: { origin?: string } }).location;\n return loc?.origin ?? '';\n}\n\nfunction parseLine(line: string): Frame | null {\n let m = V8_RE.exec(line);\n if (!m) m = GECKO_RE.exec(line);\n if (!m) return null;\n\n const filename = m[2] || null;\n const lineno = m[3] ? parseInt(m[3], 10) : null;\n const colno = m[4] ? parseInt(m[4], 10) : null;\n\n return {\n function: cleanFunction(m[1]),\n filename,\n lineno: Number.isNaN(lineno) ? null : lineno,\n colno: Number.isNaN(colno) ? null : colno,\n in_app: isInAppFrame(filename),\n };\n}\n\n/**\n * Parse a raw `Error.stack` string into normalized frames (crash frame last).\n * Non-frame lines (the `Error: message` header, `[native code]`, etc.) are\n * skipped.\n */\nexport function parseStackString(stack: string | undefined | null): Frame[] {\n if (!stack) return [];\n const frames: Frame[] = [];\n const lines = stack.split('\\n');\n for (const raw of lines) {\n const line = raw.replace(/\\r$/, '');\n if (!line.trim()) continue;\n const frame = parseLine(line);\n if (frame) {\n frames.push(frame);\n if (frames.length >= MAX_FRAMES) break; // keep the frames nearest the crash\n }\n }\n // Raw stacks are crash-first; the wire contract wants crash-last.\n frames.reverse();\n return frames;\n}\n\n/** Parse an `Error`-like object's `.stack`. */\nexport function parseError(err: unknown): Frame[] {\n if (err && typeof err === 'object' && 'stack' in err) {\n const stack = (err as { stack?: unknown }).stack;\n if (typeof stack === 'string') return parseStackString(stack);\n }\n return [];\n}\n","import { getClient } from '../client.js';\nimport { getSessionId } from '../identity.js';\nimport { getScreen } from '../screen.js';\nimport { parseError } from '../stacktrace/parse.js';\nimport type { Breadcrumb, ErrorItem, ExceptionValue, Frame, Hint, Level, Mechanism } from '../types.js';\nimport { nowIso, safeStringify } from '../utils.js';\n\nconst DEFAULT_MECHANISM: Mechanism = { type: 'generic', handled: true };\n\n/** Copy any NON-EMPTY per-call tags/contexts/extra off the hint onto the item. */\nfunction attachCallMeta(item: ErrorItem, hint?: Hint): void {\n if (hint?.tags && Object.keys(hint.tags).length > 0) item.tags = { ...hint.tags };\n if (hint?.contexts && Object.keys(hint.contexts).length > 0) item.contexts = { ...hint.contexts };\n if (hint?.extra && Object.keys(hint.extra).length > 0) item.extra = { ...hint.extra };\n}\n\ninterface ExtractedError {\n type: string | null;\n value: string | null;\n stacktrace: Frame[];\n}\n\nfunction isErrorLike(err: unknown): err is Error {\n return (\n err instanceof Error ||\n (typeof err === 'object' &&\n err !== null &&\n 'name' in err &&\n 'message' in err &&\n typeof (err as { message?: unknown }).message === 'string')\n );\n}\n\n/** Reduce any thrown value into `{type, value, stacktrace}`. */\nfunction extractError(err: unknown): ExtractedError {\n if (isErrorLike(err)) {\n const e = err as Error;\n return {\n type: e.name || 'Error',\n value: e.message ?? '',\n stacktrace: parseError(e),\n };\n }\n if (typeof err === 'string') {\n return { type: 'Error', value: err, stacktrace: [] };\n }\n if (typeof err === 'object' && err !== null) {\n const ctor = (err as { constructor?: { name?: string } }).constructor;\n return {\n type: ctor?.name ?? 'Object',\n value: safeStringify(err),\n stacktrace: [],\n };\n }\n return { type: typeof err, value: String(err), stacktrace: [] };\n}\n\n/** Build an error item from a thrown value plus the current breadcrumb trail. */\nexport function buildErrorItem(err: unknown, breadcrumbs: Breadcrumb[], hint?: Hint): ErrorItem {\n const extracted = extractError(err);\n const mechanism = (hint?.mechanism as Mechanism | undefined) ?? DEFAULT_MECHANISM;\n const level = (hint?.level as Level | undefined) ?? 'error';\n const fingerprint = (hint?.fingerprint as string[] | null | undefined) ?? null;\n\n const exception: ExceptionValue = {\n type: extracted.type,\n value: extracted.value,\n mechanism,\n stacktrace: extracted.stacktrace,\n };\n\n const item: ErrorItem = {\n type: 'error',\n timestamp: nowIso(),\n level,\n exception,\n breadcrumbs,\n fingerprint,\n session_id: getSessionId(),\n screen: (hint?.screen as string | undefined) ?? getScreen(),\n };\n attachCallMeta(item, hint);\n return item;\n}\n\n/** Capture an exception (or any thrown value) as an error item. */\nexport function captureException(err: unknown, hint?: Hint): void {\n const client = getClient();\n if (!client) return;\n const breadcrumbs = client.getScope().getBreadcrumbs();\n const fullHint: Hint = { ...hint, originalException: err };\n const item = buildErrorItem(err, breadcrumbs, fullHint);\n client.captureItem(item, fullHint);\n}\n\n/** Capture a plain message as an error item at the given `level` (default info). */\nexport function captureMessage(message: string, level: Level = 'info', hint?: Hint): void {\n const client = getClient();\n if (!client) return;\n const breadcrumbs = client.getScope().getBreadcrumbs();\n const item: ErrorItem = {\n type: 'error',\n timestamp: nowIso(),\n level,\n exception: {\n type: null,\n value: message,\n mechanism: { type: 'message', handled: true },\n stacktrace: [],\n },\n breadcrumbs,\n fingerprint: (hint?.fingerprint as string[] | null | undefined) ?? null,\n session_id: getSessionId(),\n screen: getScreen(),\n };\n attachCallMeta(item, hint);\n client.captureItem(item, hint);\n}\n","import { captureException } from '../api/capture.js';\nimport { getClient } from '../client.js';\nimport { isWrapped, markWrapped, registerPatch } from './instrument.js';\n\n/**\n * Install `window.onerror` and `window.onunhandledrejection`, chaining any\n * previously-registered handler so we never clobber the host app's own logging.\n */\nexport function installGlobalHandlers(): void {\n const win = globalThis as typeof globalThis & {\n onerror?: OnErrorEventHandler;\n onunhandledrejection?: ((event: PromiseRejectionEvent) => unknown) | null;\n };\n\n installOnError(win);\n installOnUnhandledRejection(win);\n}\n\nfunction installOnError(win: typeof globalThis & { onerror?: OnErrorEventHandler }): void {\n const previous = win.onerror;\n if (isWrapped(previous)) return;\n\n const handler = markWrapped(function sauronOnError(\n this: unknown,\n message: Event | string,\n source?: string,\n lineno?: number,\n colno?: number,\n error?: unknown,\n ): boolean {\n if (getClient()) {\n const err = error ?? syntheticError(message, source, lineno, colno);\n captureException(err, { mechanism: { type: 'onerror', handled: false }, level: 'error' });\n }\n if (typeof previous === 'function') {\n return Boolean(\n previous.call(this, message, source, lineno, colno, error as Error | undefined),\n );\n }\n return false;\n });\n\n win.onerror = handler as OnErrorEventHandler;\n registerPatch('onerror', () => {\n win.onerror = (previous ?? null) as OnErrorEventHandler;\n });\n}\n\nfunction installOnUnhandledRejection(\n win: typeof globalThis & {\n onunhandledrejection?: ((event: PromiseRejectionEvent) => unknown) | null;\n },\n): void {\n const previous = win.onunhandledrejection;\n if (isWrapped(previous)) return;\n\n const handler = markWrapped(function sauronOnRejection(\n this: unknown,\n event: PromiseRejectionEvent,\n ): unknown {\n if (getClient()) {\n const reason =\n event && typeof event === 'object' && 'reason' in event ? event.reason : event;\n captureException(reason, {\n mechanism: { type: 'onunhandledrejection', handled: false },\n level: 'error',\n });\n }\n if (typeof previous === 'function') {\n return previous.call(this, event);\n }\n return undefined;\n });\n\n win.onunhandledrejection = handler as (event: PromiseRejectionEvent) => unknown;\n registerPatch('onunhandledrejection', () => {\n win.onunhandledrejection = previous ?? null;\n });\n}\n\n/** Build an Error carrying a best-effort stack from `onerror` positional args. */\nfunction syntheticError(\n message: Event | string,\n source?: string,\n lineno?: number,\n colno?: number,\n): Error {\n const msg = typeof message === 'string' ? message : 'Unknown error';\n const err = new Error(msg);\n if (source) {\n err.stack = `Error: ${msg}\\n at ${source}:${lineno ?? 0}:${colno ?? 0}`;\n }\n return err;\n}\n","import { addNavigationBreadcrumb } from '../api/breadcrumbs.js';\nimport { isInternal, isWrapped, markWrapped, registerPatch, withInternal } from './instrument.js';\n\nlet navHandler: ((path: string) => void) | null = null;\n\n/** Register (or clear) a callback fired with the new path on each SPA navigation. */\nexport function onNavigation(cb: ((path: string) => void) | null): void {\n navHandler = cb;\n}\n\n/** Reduce a URL to its path portion (relative to the current origin). */\nfunction toPath(url: string | null, base: string | undefined): string | null {\n if (url === null || url === undefined) return url;\n try {\n const parsed = new URL(url, base);\n return parsed.pathname + parsed.search + parsed.hash;\n } catch {\n return url;\n }\n}\n\n/**\n * Patch `history.pushState`/`replaceState` and listen for `popstate` to emit\n * `{from, to}` navigation breadcrumbs for SPA route changes.\n */\nexport function installHistory(): void {\n const g = globalThis as typeof globalThis & {\n history?: History;\n location?: Location;\n addEventListener?: (t: string, h: () => void) => void;\n removeEventListener?: (t: string, h: () => void) => void;\n };\n const hist = g.history;\n const loc = g.location;\n if (!hist) return;\n\n let lastPath = toPath(loc?.href ?? null, loc?.href);\n\n const emit = (toHref: string | null): void => {\n const to = toPath(toHref, loc?.href);\n const from = lastPath;\n lastPath = to;\n if (from === to) return;\n withInternal(() => addNavigationBreadcrumb(from, to));\n if (to && navHandler) {\n try {\n navHandler(to);\n } catch {\n /* never let screen tracking break navigation */\n }\n }\n };\n\n const wrap = (name: 'pushState' | 'replaceState'): void => {\n const original = hist[name];\n if (typeof original !== 'function' || isWrapped(original)) return;\n\n hist[name] = markWrapped(function sauronHistory(this: History, ...args: unknown[]) {\n const result = (original as (...a: unknown[]) => unknown).apply(this, args);\n if (!isInternal()) {\n const urlArg = args[2];\n emit(urlArg != null ? String(urlArg) : (loc?.href ?? null));\n }\n return result;\n }) as History[typeof name];\n\n registerPatch(`history.${name}`, () => {\n hist[name] = original;\n });\n };\n\n wrap('pushState');\n wrap('replaceState');\n\n if (typeof g.addEventListener === 'function') {\n const onPopState = (): void => {\n if (!isInternal()) emit(loc?.href ?? null);\n };\n g.addEventListener('popstate', onPopState);\n registerPatch('popstate', () => {\n g.removeEventListener?.('popstate', onPopState);\n });\n }\n}\n","import type { Breadcrumb, UserContext, UserInput } from './types.js';\n\n/** An empty user context (all fields null, no traits). */\nexport function emptyUser(): UserContext {\n return { id: null, email: null, traits: {} };\n}\n\n/**\n * Shallow-merge a per-call override map over a base map. The override wins per\n * top-level key — tags/extra merge by key, contexts merge by block name (a\n * per-call block replaces the same-named base block). Returns a fresh object;\n * callers OMIT the field entirely when the result is empty (emit convention).\n */\nexport function mergeMeta(\n base: Record<string, unknown>,\n override?: Record<string, unknown>,\n): Record<string, unknown> {\n return override ? { ...base, ...override } : { ...base };\n}\n\n/**\n * Mutable per-client state: the current user, a ring buffer of breadcrumbs and\n * free-form tags. The breadcrumb buffer is capped at `maxBreadcrumbs`; the\n * oldest entries fall off the front (FIFO).\n */\nexport class Scope {\n private user: UserContext | null = null;\n private breadcrumbs: Breadcrumb[] = [];\n private maxBreadcrumbs: number;\n readonly tags: Record<string, string> = {};\n readonly contexts: Record<string, unknown> = {};\n readonly extra: Record<string, unknown> = {};\n\n constructor(maxBreadcrumbs = 50) {\n this.maxBreadcrumbs = Math.max(0, maxBreadcrumbs);\n }\n\n setMaxBreadcrumbs(max: number): void {\n this.maxBreadcrumbs = Math.max(0, max);\n this.trim();\n }\n\n setUser(user: UserInput): void {\n if (user === null) {\n this.user = null;\n return;\n }\n this.user = {\n id: user.id ?? null,\n email: user.email ?? null,\n traits: user.traits ?? {},\n };\n }\n\n /** The user context for an envelope. Never null — defaults to an empty user. */\n getUser(): UserContext {\n return this.user ? { ...this.user, traits: { ...this.user.traits } } : emptyUser();\n }\n\n /** True when an identifiable user has been set. */\n hasUser(): boolean {\n return this.user !== null;\n }\n\n setTag(key: string, value: string): void {\n this.tags[key] = value;\n }\n\n /** Merge a batch of tags into the scope (last-write-wins per key). */\n setTags(tags: Record<string, string>): void {\n Object.assign(this.tags, tags);\n }\n\n /** Set (replace) a named context block on the scope. */\n setContext(name: string, block: Record<string, unknown>): void {\n this.contexts[name] = block;\n }\n\n /** Set a single freeform extra value on the scope. */\n setExtra(key: string, value: unknown): void {\n this.extra[key] = value;\n }\n\n addBreadcrumb(breadcrumb: Breadcrumb): void {\n if (this.maxBreadcrumbs <= 0) return;\n this.breadcrumbs.push(breadcrumb);\n this.trim();\n }\n\n /** A defensive copy of the current breadcrumb trail. */\n getBreadcrumbs(): Breadcrumb[] {\n return this.breadcrumbs.slice();\n }\n\n clearBreadcrumbs(): void {\n this.breadcrumbs = [];\n }\n\n private trim(): void {\n const overflow = this.breadcrumbs.length - this.maxBreadcrumbs;\n if (overflow > 0) {\n this.breadcrumbs.splice(0, overflow);\n }\n }\n}\n","import { getClient } from '../client.js';\nimport { getSessionId } from '../identity.js';\nimport { getScreen, setScreenState } from '../screen.js';\nimport { mergeMeta } from '../scope.js';\nimport type { EventItem, IdentifyItem, TrackOptions, TransactionItem, TransactionOp } from '../types.js';\nimport { nowIso } from '../utils.js';\n\n/**\n * Record a product-analytics event (PostHog-style). The `distinct_id` is the\n * current user id when identified, otherwise a stable anonymous id.\n */\nexport function track(\n name: string,\n properties: Record<string, unknown> = {},\n options: TrackOptions = {},\n): void {\n const client = getClient();\n if (!client) return;\n const scope = client.getScope();\n const item: EventItem = {\n type: 'event',\n name,\n distinct_id: client.getDistinctId(),\n session_id: getSessionId(),\n screen: options.screen ?? getScreen(),\n timestamp: nowIso(),\n properties: properties ?? {},\n };\n const tags = mergeMeta(scope.tags, options.tags);\n if (Object.keys(tags).length > 0) item.tags = tags;\n const contexts = mergeMeta(scope.contexts, options.contexts);\n if (Object.keys(contexts).length > 0) item.contexts = contexts;\n const extra = mergeMeta(scope.extra, options.extra);\n if (Object.keys(extra).length > 0) item.extra = extra;\n client.captureItem(item);\n}\n\n/**\n * Set the current screen. On an actual change, emits a `$screen` view event\n * (carrying the new screen) so dwell can be computed server-side.\n */\nexport function setScreen(name: string): void {\n if (!setScreenState(name)) return;\n track('$screen', { screen: name });\n}\n\n/**\n * Associate the current session with a known user. Emits an identify item that\n * links the prior anonymous id (if any) to the new distinct id.\n */\nexport function identify(id: string, traits: Record<string, unknown> = {}): void {\n const client = getClient();\n if (!client) return;\n const anonymousId = client.getAnonymousId();\n client.getScope().setUser({ id, traits });\n const item: IdentifyItem = {\n type: 'identify',\n distinct_id: id,\n anonymous_id: anonymousId,\n traits: traits ?? {},\n };\n client.captureItem(item);\n}\n\n/** Loose (camelCase) input accepted by {@link trackTransaction}. */\nexport interface TransactionInput {\n name: string;\n op?: string;\n durationMs: number;\n status?: string | null;\n httpMethod?: string | null;\n httpStatus?: number | null;\n url?: string | null;\n}\n\nconst TRANSACTION_OPS: readonly TransactionOp[] = [\n 'navigation',\n 'http',\n 'resource',\n 'screen_load',\n 'custom',\n];\n\n/** Coerce a free-form op string to a known {@link TransactionOp}, else `custom`. */\nfunction normalizeOp(op: string | undefined): TransactionOp {\n return op && (TRANSACTION_OPS as readonly string[]).includes(op)\n ? (op as TransactionOp)\n : 'custom';\n}\n\n/**\n * Build a wire-shaped transaction item from camelCase input. Pure — the caller\n * supplies the current identity so this stays testable without a client.\n */\nexport function buildTransactionItem(\n input: TransactionInput,\n distinctId: string | null,\n sessionId: string | null,\n): TransactionItem {\n return {\n type: 'transaction',\n name: input.name,\n op: normalizeOp(input.op),\n duration_ms: input.durationMs,\n status: input.status ?? null,\n http_method: input.httpMethod ?? null,\n http_status: input.httpStatus ?? null,\n url: input.url ?? null,\n distinct_id: distinctId,\n session_id: sessionId,\n timestamp: nowIso(),\n };\n}\n\n/** Enqueue a performance transaction item. */\nexport function trackTransaction(input: TransactionInput): void {\n const client = getClient();\n if (!client) return;\n const item = buildTransactionItem(input, client.getDistinctId(), getSessionId());\n client.captureItem(item);\n}\n","/**\n * Performance auto-instrumentation. In a browser this captures:\n *\n * - one `navigation` transaction for the initial page load (navigation timing),\n * - one `http` transaction per instrumented `fetch` call,\n * - a `navigation` transaction on each SPA route change (History API).\n *\n * Everything here is strictly best-effort: instrumentation errors are swallowed\n * so an app `fetch` never breaks, and the original fetch rejection is re-thrown\n * unchanged to the caller. Opt in with `init({ performance: true })`.\n */\n\nimport { trackTransaction } from '../api/product.js';\nimport { isDsnRequest, isInternal, registerPatch } from './instrument.js';\n\n/** Dedicated markers so we layer on top of the breadcrumb integrations without\n * colliding with their generic \"wrapped\" tag. */\nconst PERF_FETCH = '__sauron_perf_fetch__';\nconst PERF_HISTORY = '__sauron_perf_history__';\n\ninterface GlobalLike {\n fetch?: typeof fetch;\n history?: History;\n location?: Location;\n document?: Document;\n performance?: Performance;\n requestAnimationFrame?: (cb: () => void) => number;\n addEventListener?: (type: string, handler: () => void) => void;\n removeEventListener?: (type: string, handler: () => void) => void;\n}\n\nfunction g(): GlobalLike {\n return globalThis as GlobalLike;\n}\n\n/** Tag a wrapper function with a marker so we never wrap it twice. */\nfunction mark(fn: object, key: string): void {\n (fn as unknown as Record<string, unknown>)[key] = true;\n}\n\n/** True when `fn` was tagged with {@link mark}. */\nfunction isMarked(fn: unknown, key: string): boolean {\n return typeof fn === 'function' && (fn as unknown as Record<string, unknown>)[key] === true;\n}\n\n/** High-resolution clock, degrading to `Date.now()` when `performance` is absent. */\nfunction clock(): () => number {\n const perf = g().performance;\n if (perf && typeof perf.now === 'function') return () => perf.now();\n return () => Date.now();\n}\n\nfunction resolveUrl(input: unknown): string {\n if (typeof input === 'string') return input;\n if (input && typeof input === 'object') {\n const withUrl = input as { url?: string; href?: string };\n if (typeof withUrl.url === 'string') return withUrl.url;\n if (typeof withUrl.href === 'string') return withUrl.href;\n }\n return String(input);\n}\n\nfunction resolveMethod(input: unknown, init: unknown): string {\n const fromInit = (init as { method?: string } | undefined)?.method;\n const fromReq = (input as { method?: string } | null)?.method;\n return String(fromInit ?? fromReq ?? 'GET').toUpperCase();\n}\n\n/** Reduce a URL to its path portion (relative to the current origin). */\nfunction pathOf(url: string | null | undefined): string {\n if (!url) return '/';\n try {\n const base = g().location?.href;\n return new URL(url, base).pathname;\n } catch {\n return url;\n }\n}\n\n/* ------------------------------------------------------- navigation timing */\n\n/** Prefer the modern `PerformanceNavigationTiming.duration`, else the legacy\n * `timing.loadEventEnd - navigationStart`. Returns `null` when unavailable. */\nfunction navigationDuration(perf: Performance): number | null {\n try {\n const entries = perf.getEntriesByType?.('navigation') as\n | PerformanceNavigationTiming[]\n | undefined;\n if (entries && entries.length > 0) {\n const d = entries[0].duration;\n if (typeof d === 'number' && d > 0) return d;\n }\n } catch {\n /* getEntriesByType unsupported — fall through */\n }\n const timing = (perf as { timing?: PerformanceTiming }).timing;\n if (timing && timing.loadEventEnd && timing.navigationStart) {\n const d = timing.loadEventEnd - timing.navigationStart;\n if (d > 0) return d;\n }\n return null;\n}\n\nfunction installNavigationTiming(): void {\n const perf = g().performance;\n if (!perf) return;\n\n const capture = (): void => {\n try {\n const durationMs = navigationDuration(perf);\n if (durationMs === null) return;\n trackTransaction({ name: pathOf(g().location?.pathname), op: 'navigation', durationMs });\n } catch {\n /* swallow */\n }\n };\n\n // Timing is only final once `load` has fired; capture now if it already has.\n const doc = g().document;\n if (doc && doc.readyState === 'complete') {\n capture();\n } else if (typeof g().addEventListener === 'function') {\n const onLoad = (): void => {\n capture();\n g().removeEventListener?.('load', onLoad);\n };\n g().addEventListener?.('load', onLoad);\n registerPatch('perf.load', () => g().removeEventListener?.('load', onLoad));\n } else {\n capture();\n }\n}\n\n/* -------------------------------------------------------------- fetch timing */\n\nfunction emitHttp(\n method: string,\n url: string,\n start: number,\n end: number,\n status: number | null,\n ok: boolean,\n): void {\n try {\n trackTransaction({\n name: `${method} ${pathOf(url)}`,\n op: 'http',\n durationMs: Math.max(0, end - start),\n status: ok ? 'ok' : 'error',\n httpMethod: method,\n httpStatus: status ?? undefined,\n url,\n });\n } catch {\n /* never throw into user code */\n }\n}\n\nfunction installFetchTiming(): void {\n const original = g().fetch;\n if (typeof original !== 'function') return;\n if (isMarked(original, PERF_FETCH)) return;\n\n const now = clock();\n\n const wrapped = function sauronPerfFetch(\n this: unknown,\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n let url = '';\n let method = 'GET';\n let record = false;\n try {\n url = resolveUrl(input);\n method = resolveMethod(input, init);\n record = !isInternal() && !isDsnRequest(url);\n } catch {\n record = false;\n }\n\n const start = record ? now() : 0;\n // Return the ORIGINAL promise so the caller sees the untouched result and\n // any rejection propagates unchanged.\n const promise = original.call(this, input as RequestInfo, init);\n\n if (record) {\n promise.then(\n (res) => emitHttp(method, url, start, now(), res?.status ?? null, res?.ok ?? false),\n () => emitHttp(method, url, start, now(), null, false),\n );\n }\n return promise;\n };\n\n mark(wrapped, PERF_FETCH);\n g().fetch = wrapped as typeof fetch;\n registerPatch('perf.fetch', () => {\n g().fetch = original;\n });\n}\n\n/* ------------------------------------------------------------ history timing */\n\nfunction installHistoryTiming(): void {\n const hist = g().history;\n if (!hist) return;\n const now = clock();\n\n const emit = (): void => {\n try {\n const path = pathOf(g().location?.pathname);\n const start = now();\n const finish = (): void => {\n try {\n trackTransaction({ name: path, op: 'navigation', durationMs: Math.max(0, now() - start) });\n } catch {\n /* swallow */\n }\n };\n // Approximate the client-side render span with a single animation frame.\n const raf = g().requestAnimationFrame;\n if (typeof raf === 'function') raf(finish);\n else finish();\n } catch {\n /* swallow */\n }\n };\n\n const wrap = (name: 'pushState' | 'replaceState'): void => {\n const original = hist[name];\n if (typeof original !== 'function') return;\n if (isMarked(original, PERF_HISTORY)) return;\n\n const patched = function sauronPerfHistory(this: History, ...args: unknown[]) {\n const result = (original as (...a: unknown[]) => unknown).apply(this, args);\n if (!isInternal()) emit();\n return result;\n };\n mark(patched, PERF_HISTORY);\n hist[name] = patched as History[typeof name];\n registerPatch(`perf.history.${name}`, () => {\n hist[name] = original;\n });\n };\n\n wrap('pushState');\n wrap('replaceState');\n\n if (typeof g().addEventListener === 'function') {\n const onPopState = (): void => {\n if (!isInternal()) emit();\n };\n g().addEventListener?.('popstate', onPopState);\n registerPatch('perf.popstate', () => g().removeEventListener?.('popstate', onPopState));\n }\n}\n\n/* --------------------------------------------------------------------- entry */\n\n/** Install performance auto-capture. No-op outside a browser-like environment. */\nexport function installPerformance(): void {\n if (typeof g().document === 'undefined') return;\n installNavigationTiming();\n installFetchTiming();\n installHistoryTiming();\n}\n","import { addBreadcrumb } from '../api/breadcrumbs.js';\nimport { nowIso } from '../utils.js';\nimport { isDsnRequest, isInternal, isWrapped, markWrapped, registerPatch, withInternal } from './instrument.js';\n\ninterface XhrMeta {\n method: string;\n url: string;\n startedAt: string;\n}\n\ntype PatchedXhr = XMLHttpRequest & { __sauron_xhr__?: XhrMeta };\n\nfunction addXhrBreadcrumb(meta: XhrMeta, status: number): void {\n withInternal(() => {\n addBreadcrumb({\n type: 'default',\n category: 'xhr',\n level: status >= 400 ? 'warning' : 'info',\n message: `${meta.method} ${meta.url}`,\n timestamp: meta.startedAt,\n data: { method: meta.method, url: meta.url, status_code: status || null },\n });\n });\n}\n\n/** Wrap `XMLHttpRequest.open`/`send` to leave a breadcrumb per request. */\nexport function installXhr(): void {\n const XHR = (globalThis as { XMLHttpRequest?: typeof XMLHttpRequest }).XMLHttpRequest;\n if (typeof XHR !== 'function' || !XHR.prototype) return;\n\n const proto = XHR.prototype;\n const originalOpen = proto.open;\n const originalSend = proto.send;\n if (isWrapped(originalOpen) || isWrapped(originalSend)) return;\n\n proto.open = markWrapped(function sauronXhrOpen(\n this: PatchedXhr,\n method: string,\n url: string | URL,\n ...rest: unknown[]\n ) {\n this.__sauron_xhr__ = {\n method: String(method ?? 'GET').toUpperCase(),\n url: String(url),\n startedAt: nowIso(),\n };\n return (originalOpen as (...a: unknown[]) => unknown).apply(this, [method, url, ...rest]);\n }) as typeof proto.open;\n\n proto.send = markWrapped(function sauronXhrSend(this: PatchedXhr, ...args: unknown[]) {\n const meta = this.__sauron_xhr__;\n if (meta && !isInternal() && !isDsnRequest(meta.url)) {\n const onLoadEnd = (): void => {\n try {\n addXhrBreadcrumb(meta, this.status);\n } catch {\n /* ignore */\n } finally {\n try {\n this.removeEventListener('loadend', onLoadEnd);\n } catch {\n /* ignore */\n }\n }\n };\n try {\n this.addEventListener('loadend', onLoadEnd);\n } catch {\n /* ignore */\n }\n }\n return (originalSend as (...a: unknown[]) => unknown).apply(this, args);\n }) as typeof proto.send;\n\n registerPatch('xhr', () => {\n proto.open = originalOpen;\n proto.send = originalSend;\n });\n}\n","import type { Transport } from './transport.js';\n\n/**\n * Wire up the page-unload flush path. When the page is hidden or unloaded there\n * is no time for an async `fetch` round-trip, so we hand the pending batch to\n * `navigator.sendBeacon` (see {@link Transport.flushToBeacon}).\n *\n * Returns a cleanup function that removes the listeners.\n */\nexport function installBeacon(transport: Transport): () => void {\n const win = globalThis as {\n addEventListener?: (t: string, h: () => void) => void;\n removeEventListener?: (t: string, h: () => void) => void;\n };\n const doc = (globalThis as { document?: Document }).document;\n\n const flush = (): void => {\n try {\n transport.flushToBeacon();\n } catch {\n /* never throw from an unload handler */\n }\n };\n\n const onVisibility = (): void => {\n if (doc && doc.visibilityState === 'hidden') flush();\n };\n\n if (doc && typeof doc.addEventListener === 'function') {\n doc.addEventListener('visibilitychange', onVisibility);\n }\n if (typeof win.addEventListener === 'function') {\n win.addEventListener('pagehide', flush);\n }\n\n return () => {\n if (doc && typeof doc.removeEventListener === 'function') {\n doc.removeEventListener('visibilitychange', onVisibility);\n }\n if (typeof win.removeEventListener === 'function') {\n win.removeEventListener('pagehide', flush);\n }\n };\n}\n","/**\n * Payload compression.\n *\n * Prefers the native `CompressionStream('gzip')`; lazily imports `fflate` only\n * as a fallback. Payloads under {@link MIN_COMPRESS_BYTES} are left as plain\n * strings so the caller omits the `Content-Encoding` header entirely.\n */\n\n/** Below this size, compression overhead isn't worth it. */\nexport const MIN_COMPRESS_BYTES = 1024;\n\nexport interface CompressResult {\n body: Uint8Array | string;\n /** `'gzip'` only when the body was actually compressed. */\n encoding: 'gzip' | null;\n}\n\ninterface CompressionStreamCtor {\n new (format: string): {\n readable: ReadableStream<Uint8Array>;\n writable: WritableStream<Uint8Array>;\n };\n}\n\nfunction getCompressionStream(): CompressionStreamCtor | undefined {\n const g = globalThis as { CompressionStream?: CompressionStreamCtor };\n return typeof g.CompressionStream === 'function' ? g.CompressionStream : undefined;\n}\n\nasync function gzipViaStream(bytes: Uint8Array, CS: CompressionStreamCtor): Promise<Uint8Array> {\n const cs = new CS('gzip');\n const writer = cs.writable.getWriter();\n void writer.write(bytes);\n void writer.close();\n\n const reader = cs.readable.getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) {\n chunks.push(value);\n total += value.length;\n }\n }\n const out = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n out.set(chunk, offset);\n offset += chunk.length;\n }\n return out;\n}\n\n/** Compress a JSON string to gzip when large enough; otherwise pass it through. */\nexport async function maybeCompress(json: string): Promise<CompressResult> {\n const raw = new TextEncoder().encode(json);\n if (raw.length < MIN_COMPRESS_BYTES) {\n return { body: json, encoding: null };\n }\n\n const CS = getCompressionStream();\n if (CS) {\n try {\n const gz = await gzipViaStream(raw, CS);\n return { body: gz, encoding: 'gzip' };\n } catch {\n /* fall through to fflate */\n }\n }\n\n try {\n const { gzipSync } = await import('fflate');\n return { body: gzipSync(raw), encoding: 'gzip' };\n } catch {\n // No compression available — send uncompressed rather than drop the event.\n return { body: json, encoding: null };\n }\n}\n","import { byteLength } from '../utils.js';\n\n/** The minimal storage surface we need (a subset of `Storage`). */\nexport interface StorageLike {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\nconst QUEUE_KEY = 'sauron:queue:v1';\n\n/** Return `localStorage` if it is present and writable, else `null`. */\nexport function defaultStorage(): StorageLike | null {\n try {\n const ls = (globalThis as { localStorage?: StorageLike }).localStorage;\n if (!ls) return null;\n const probe = '__sauron_probe__';\n ls.setItem(probe, '1');\n ls.removeItem(probe);\n return ls;\n } catch {\n // Storage disabled (private mode, blocked cookies, SSR, ...).\n return null;\n }\n}\n\n/**\n * A FIFO offline queue backed by a single `localStorage` key. Each entry is a\n * serialized envelope JSON string. The queue is byte-capped: when enqueuing\n * would exceed `maxBytes`, the OLDEST entries are evicted first.\n */\nexport class OfflineQueue {\n private readonly maxBytes: number;\n private readonly storage: StorageLike | null;\n private readonly key: string;\n\n constructor(maxBytes: number, storage: StorageLike | null, key: string = QUEUE_KEY) {\n this.maxBytes = Math.max(0, maxBytes);\n this.storage = storage;\n this.key = key;\n }\n\n /** True when a real backing store is available. */\n get available(): boolean {\n return this.storage !== null;\n }\n\n private read(): string[] {\n if (!this.storage) return [];\n try {\n const raw = this.storage.getItem(this.key);\n if (!raw) return [];\n const parsed: unknown = JSON.parse(raw);\n if (!Array.isArray(parsed)) return [];\n return parsed.filter((x): x is string => typeof x === 'string');\n } catch {\n return [];\n }\n }\n\n private write(entries: string[]): void {\n if (!this.storage) return;\n try {\n if (entries.length === 0) {\n this.storage.removeItem(this.key);\n } else {\n this.storage.setItem(this.key, JSON.stringify(entries));\n }\n } catch {\n // Quota exceeded or storage vanished — drop silently.\n }\n }\n\n /** Drop oldest entries until the total fits under `maxBytes`. Keeps >= 1. */\n private evict(entries: string[]): void {\n let total = 0;\n for (const e of entries) total += byteLength(e);\n while (entries.length > 1 && total > this.maxBytes) {\n const removed = entries.shift();\n if (removed === undefined) break;\n total -= byteLength(removed);\n }\n }\n\n /** Append a payload to the tail (newest), evicting from the head if needed. */\n enqueue(payload: string): void {\n if (!this.storage) return;\n const entries = this.read();\n entries.push(payload);\n this.evict(entries);\n this.write(entries);\n }\n\n /** Remove and return every entry, oldest first. */\n drain(): string[] {\n const entries = this.read();\n if (entries.length) this.write([]);\n return entries;\n }\n\n /** Non-destructive read of the current entries, oldest first. */\n peek(): string[] {\n return this.read();\n }\n\n /** Number of queued entries. */\n size(): number {\n return this.read().length;\n }\n\n /** Total UTF-8 byte size of the queue. */\n byteSize(): number {\n let total = 0;\n for (const e of this.read()) total += byteLength(e);\n return total;\n }\n\n clear(): void {\n this.write([]);\n }\n}\n","import type { Dsn } from '../dsn.js';\nimport { beginInternal, endInternal } from '../integrations/instrument.js';\nimport type { Envelope, EnvelopeItem } from '../types.js';\nimport { byteLength, computeBackoff, safeStringify } from '../utils.js';\nimport { maybeCompress } from './compress.js';\nimport { defaultStorage, OfflineQueue } from './queue.js';\n\n/** `sendBeacon` / `keepalive` payloads are capped near 64 KiB by browsers. */\nexport const BEACON_MAX_BYTES = 64 * 1024;\n\n/**\n * Hard ceiling on items in one envelope, matching the server's own limit.\n * Exceeding it is a non-retryable 400, so the batch would simply be lost.\n */\nexport const MAX_ITEMS_PER_ENVELOPE = 1000;\n\n/** Max delivery attempts before a batch is parked in the offline queue. */\nconst MAX_RETRIES = 5;\n\n/** Retry-After is honored but clamped so `flush()`/`close()` can't hang forever. */\nconst RETRY_AFTER_CAP_MS = 30_000;\n\ntype SendAction = 'drop' | 'disable' | 'split' | 'retry_after' | 'retry_backoff';\n\ninterface SendOutcome {\n action: SendAction;\n retryAfterMs?: number;\n}\n\ninterface HttpResult {\n status: number;\n retryAfter: string | null;\n}\n\ninterface Logger {\n log: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n}\n\nexport interface TransportConfig {\n dsn: Dsn;\n options: { flushIntervalMs: number; maxBatch: number; maxQueueBytes: number };\n makeEnvelope: (items: EnvelopeItem[]) => Envelope;\n fetchImpl?: typeof fetch;\n logger: Logger;\n onDisable: () => void;\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));\n}\n\nfunction parseRetryAfter(header: string | null): number {\n if (!header) return 1000;\n const seconds = Number(header);\n if (!Number.isNaN(seconds)) {\n return Math.min(RETRY_AFTER_CAP_MS, Math.max(0, seconds * 1000));\n }\n const date = Date.parse(header);\n if (!Number.isNaN(date)) {\n return Math.min(RETRY_AFTER_CAP_MS, Math.max(0, date - Date.now()));\n }\n return 1000;\n}\n\n/** Map an HTTP status onto the locked response-handling table. */\nfunction classifyStatus(status: number, retryAfter: string | null): SendOutcome {\n if (status === 200 || status === 202) return { action: 'drop' };\n if (status === 400) return { action: 'drop' };\n if (status === 401 || status === 403) return { action: 'disable' };\n if (status === 408) return { action: 'retry_backoff' };\n if (status === 413) return { action: 'split' };\n if (status === 429) return { action: 'retry_after', retryAfterMs: parseRetryAfter(retryAfter) };\n if (status >= 500) return { action: 'retry_backoff' };\n if (status >= 400) return { action: 'drop' }; // other 4xx: client error, no retry\n return { action: 'drop' };\n}\n\n/**\n * Batching transport with retry/backoff, an offline queue and a beacon path.\n *\n * All outbound requests go through `fetchImpl` (the NATIVE fetch captured before\n * integrations wrapped it) or an XHR fallback, so the transport never triggers\n * its own instrumentation.\n */\nexport class Transport {\n private readonly dsn: Dsn;\n private readonly makeEnvelope: (items: EnvelopeItem[]) => Envelope;\n private readonly fetchImpl?: typeof fetch;\n private readonly logger: Logger;\n private readonly onDisable: () => void;\n private readonly flushIntervalMs: number;\n private readonly maxBatch: number;\n private readonly offline: OfflineQueue;\n\n private pending: EnvelopeItem[] = [];\n private timer: ReturnType<typeof setInterval> | null = null;\n private onlineHandler: (() => void) | null = null;\n private disabled = false;\n\n constructor(config: TransportConfig) {\n this.dsn = config.dsn;\n this.makeEnvelope = config.makeEnvelope;\n this.fetchImpl = config.fetchImpl;\n this.logger = config.logger;\n this.onDisable = config.onDisable;\n this.flushIntervalMs = config.options.flushIntervalMs;\n // Clamped to the server's per-envelope limit: a configured `maxBatch`\n // above it would produce envelopes that are rejected outright.\n this.maxBatch = Math.min(\n MAX_ITEMS_PER_ENVELOPE,\n Math.max(1, config.options.maxBatch),\n );\n this.offline = new OfflineQueue(config.options.maxQueueBytes, defaultStorage());\n }\n\n /** Begin periodic flushing and listen for connectivity restoration. */\n start(): void {\n if (this.timer === null && this.flushIntervalMs > 0) {\n this.timer = setInterval(() => {\n void this.flush();\n }, this.flushIntervalMs);\n // Don't hold the Node event loop open (harmless/no-op in browsers).\n (this.timer as { unref?: () => void }).unref?.();\n }\n const g = globalThis as { addEventListener?: (t: string, h: () => void) => void };\n if (typeof g.addEventListener === 'function' && !this.onlineHandler) {\n this.onlineHandler = () => {\n void this.drainOfflineQueue();\n };\n g.addEventListener('online', this.onlineHandler);\n }\n }\n\n /** Stop timers and listeners (does not flush). */\n stop(): void {\n if (this.timer !== null) {\n clearInterval(this.timer);\n this.timer = null;\n }\n const g = globalThis as { removeEventListener?: (t: string, h: () => void) => void };\n if (this.onlineHandler && typeof g.removeEventListener === 'function') {\n g.removeEventListener('online', this.onlineHandler);\n this.onlineHandler = null;\n }\n }\n\n /** Permanently disable the transport (401/403). Drops pending work. */\n disable(): void {\n this.disabled = true;\n this.pending = [];\n this.stop();\n }\n\n /** Queue an item for the next batch; flush eagerly once the batch is full. */\n send(item: EnvelopeItem): void {\n if (this.disabled) return;\n this.pending.push(item);\n if (this.pending.length >= this.maxBatch) {\n void this.flush();\n }\n }\n\n /**\n * Flush all pending items (plus a drain of the offline queue). Resolves to\n * `true` on completion, or `false` if `timeoutMs` elapsed first.\n */\n async flush(timeoutMs?: number): Promise<boolean> {\n if (this.disabled) return true;\n const items = this.pending.splice(0, this.pending.length);\n\n const work = (async (): Promise<boolean> => {\n await this.drainOfflineQueue();\n for (let i = 0; i < items.length; i += this.maxBatch) {\n await this.deliver(items.slice(i, i + this.maxBatch));\n }\n return true;\n })();\n\n if (typeof timeoutMs === 'number' && timeoutMs >= 0) {\n return Promise.race([work, delay(timeoutMs).then(() => false)]);\n }\n return work;\n }\n\n /** Send an already-serialized batch, applying the retry/backoff policy. */\n private async deliver(items: EnvelopeItem[], attempt = 0): Promise<void> {\n if (this.disabled || items.length === 0) return;\n\n const json = safeStringify(this.makeEnvelope(items));\n let outcome: SendOutcome;\n try {\n outcome = await this.post(json);\n } catch {\n outcome = { action: 'retry_backoff' }; // network error\n }\n\n switch (outcome.action) {\n case 'drop':\n return;\n case 'disable':\n this.logger.warn('server rejected credentials; disabling client');\n this.onDisable();\n return;\n case 'split': {\n if (items.length <= 1) {\n this.logger.warn('single item too large (413); parking offline');\n this.offline.enqueue(json);\n return;\n }\n const mid = Math.ceil(items.length / 2);\n await this.deliver(items.slice(0, mid), attempt);\n await this.deliver(items.slice(mid), attempt);\n return;\n }\n case 'retry_after':\n case 'retry_backoff': {\n if (attempt >= MAX_RETRIES) {\n this.offline.enqueue(json);\n return;\n }\n const wait =\n outcome.action === 'retry_after'\n ? (outcome.retryAfterMs ?? 1000)\n : computeBackoff(attempt);\n await delay(wait);\n return this.deliver(items, attempt + 1);\n }\n }\n }\n\n /** Re-attempt any envelopes that were parked while offline. */\n async drainOfflineQueue(): Promise<void> {\n if (this.disabled || !this.offline.available) return;\n const payloads = this.offline.drain();\n for (const json of payloads) {\n let outcome: SendOutcome;\n try {\n outcome = await this.post(json);\n } catch {\n outcome = { action: 'retry_backoff' };\n }\n if (outcome.action === 'disable') {\n this.onDisable();\n this.offline.enqueue(json);\n return;\n }\n if (outcome.action === 'retry_after' || outcome.action === 'retry_backoff') {\n // Still failing — re-park and stop draining to avoid a tight loop.\n this.offline.enqueue(json);\n return;\n }\n // drop / split: treat as handled.\n }\n }\n\n /** Best-effort synchronous-ish flush for page unload via `sendBeacon`. */\n flushToBeacon(): void {\n if (this.disabled) return;\n const all = this.pending.splice(0, this.pending.length);\n if (all.length === 0) return;\n\n // Chunk like the normal path already does. This one sent everything\n // buffered as a single envelope, so unloading after a busy session could\n // exceed the server's per-envelope item limit — a non-retryable 400, and\n // there is no page left to retry from.\n for (let i = 0; i < all.length; i += MAX_ITEMS_PER_ENVELOPE) {\n this.beaconChunk(all.slice(i, i + MAX_ITEMS_PER_ENVELOPE));\n }\n }\n\n private beaconChunk(items: EnvelopeItem[]): void {\n const json = safeStringify(this.makeEnvelope(items));\n const nav = (globalThis as { navigator?: Navigator }).navigator;\n const size = byteLength(json);\n\n if (nav && typeof nav.sendBeacon === 'function' && size <= BEACON_MAX_BYTES) {\n try {\n const blob = new Blob([json], { type: 'application/json' });\n if (nav.sendBeacon(this.dsn.beaconUrl, blob)) return;\n } catch {\n /* fall through to offline queue */\n }\n }\n // Beacon unavailable or oversized: persist for the next page load.\n this.offline.enqueue(json);\n }\n\n /** Compress (when large) and POST one serialized envelope. */\n private async post(json: string): Promise<SendOutcome> {\n const { body, encoding } = await maybeCompress(json);\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Sauron-Key': this.dsn.publicKey,\n };\n if (encoding) headers['Content-Encoding'] = encoding;\n\n const size = typeof body === 'string' ? byteLength(body) : body.byteLength;\n const result = await this.doRequest(headers, body, size <= BEACON_MAX_BYTES);\n return classifyStatus(result.status, result.retryAfter);\n }\n\n private async doRequest(\n headers: Record<string, string>,\n body: Uint8Array | string,\n keepalive: boolean,\n ): Promise<HttpResult> {\n if (this.fetchImpl) {\n beginInternal();\n let promise: Promise<Response>;\n try {\n promise = this.fetchImpl(this.dsn.envelopeUrl, {\n method: 'POST',\n headers,\n body: body as BodyInit,\n keepalive,\n });\n } finally {\n endInternal();\n }\n const res = await promise;\n return { status: res.status, retryAfter: res.headers?.get?.('Retry-After') ?? null };\n }\n return this.xhrRequest(headers, body);\n }\n\n private xhrRequest(\n headers: Record<string, string>,\n body: Uint8Array | string,\n ): Promise<HttpResult> {\n return new Promise<HttpResult>((resolve, reject) => {\n const XHR = (globalThis as { XMLHttpRequest?: typeof XMLHttpRequest }).XMLHttpRequest;\n if (typeof XHR !== 'function') {\n reject(new Error('no transport available'));\n return;\n }\n beginInternal();\n try {\n const xhr = new XHR();\n xhr.open('POST', this.dsn.envelopeUrl, true);\n for (const key of Object.keys(headers)) {\n try {\n xhr.setRequestHeader(key, headers[key]);\n } catch {\n /* forbidden header — skip */\n }\n }\n xhr.onload = () =>\n resolve({ status: xhr.status, retryAfter: safeHeader(xhr, 'Retry-After') });\n xhr.onerror = () => reject(new Error('xhr network error'));\n xhr.ontimeout = () => reject(new Error('xhr timeout'));\n xhr.send(body as XMLHttpRequestBodyInit);\n } catch (err) {\n reject(err instanceof Error ? err : new Error(String(err)));\n } finally {\n endInternal();\n }\n });\n }\n\n /** Offline queue accessor (used by tests / diagnostics). */\n get offlineQueue(): OfflineQueue {\n return this.offline;\n }\n}\n\nfunction safeHeader(xhr: XMLHttpRequest, name: string): string | null {\n try {\n return xhr.getResponseHeader(name);\n } catch {\n return null;\n }\n}\n","import { buildContext } from './context.js';\nimport { parseDsn, type Dsn } from './dsn.js';\nimport { buildEnvelope } from './envelope.js';\nimport { getDeviceId, getSessionId } from './identity.js';\nimport { installConsole } from './integrations/console.js';\nimport { installDom } from './integrations/dom.js';\nimport { installFetch } from './integrations/fetch.js';\nimport { installGlobalHandlers } from './integrations/globalHandlers.js';\nimport { installHistory, onNavigation } from './integrations/history.js';\nimport * as instrument from './integrations/instrument.js';\nimport { installPerformance } from './integrations/performance.js';\nimport { installXhr } from './integrations/xhr.js';\nimport { setScreen } from './api/product.js';\nimport { Scope, mergeMeta } from './scope.js';\nimport { resetScreen, setScreenState } from './screen.js';\nimport { installBeacon } from './transport/beacon.js';\nimport { Transport } from './transport/transport.js';\nimport type {\n Breadcrumb,\n Envelope,\n EnvelopeItem,\n ErrorItem,\n Hint,\n InitOptions,\n ResolvedOptions,\n} from './types.js';\nimport { clamp, makeLogger, nowIso, SDK_NAME, SDK_VERSION, uuidv4 } from './utils.js';\n\ntype Logger = ReturnType<typeof makeLogger>;\n\n/**\n * The Sauron client singleton. Owns the resolved options, the scope\n * (user + breadcrumbs), the transport, and the installed integrations.\n */\nexport class SauronClient {\n readonly options: ResolvedOptions;\n readonly dsn: Dsn;\n\n private readonly scope: Scope;\n private readonly transport: Transport;\n private readonly logger: Logger;\n private readonly nativeFetch?: typeof fetch;\n\n private enabled = true;\n private installed = false;\n private anonymousId: string | null = null;\n private beaconCleanup: (() => void) | null = null;\n\n constructor(options: ResolvedOptions) {\n this.options = options;\n this.dsn = parseDsn(options.dsn);\n this.logger = makeLogger(options.debug);\n this.scope = new Scope(options.maxBreadcrumbs);\n // Seed init-default metadata into the global scope so every later signal\n // inherits it; runtime setters still last-write-win over these.\n this.scope.setTags(options.tags);\n for (const [name, block] of Object.entries(options.contexts)) {\n this.scope.setContext(name, block);\n }\n for (const [key, value] of Object.entries(options.extra)) {\n this.scope.setExtra(key, value);\n }\n\n // Capture the NATIVE fetch before any integration wraps it, so the\n // transport's own requests never hit our instrumentation.\n const g = globalThis as { fetch?: typeof fetch };\n this.nativeFetch = typeof g.fetch === 'function' ? g.fetch.bind(globalThis) : undefined;\n\n instrument.setDsnHost(this.dsn.host);\n\n this.transport = new Transport({\n dsn: this.dsn,\n options: options.transport,\n makeEnvelope: (items) => this.makeEnvelope(items),\n fetchImpl: this.nativeFetch,\n logger: this.logger,\n onDisable: () => this.disable(),\n });\n }\n\n /** Install global handlers + auto-instrumentation and start the transport. */\n install(): void {\n if (this.installed) return;\n this.installed = true;\n\n // Establish the durable device id and the current session id at init.\n getDeviceId();\n getSessionId();\n\n installGlobalHandlers();\n installConsole();\n installDom();\n installHistory();\n installFetch();\n installXhr();\n if (this.options.performance) installPerformance();\n\n // Screen tracking: seed the initial screen, then follow SPA navigations.\n if (this.options.screen) setScreenState(this.options.screen);\n if (this.options.screenTracking) {\n onNavigation((path) => setScreen(path));\n }\n\n this.beaconCleanup = installBeacon(this.transport);\n\n this.transport.start();\n void this.transport.drainOfflineQueue();\n this.logger.log('initialized', { dsn: this.dsn.host, project: this.dsn.projectId });\n }\n\n getScope(): Scope {\n return this.scope;\n }\n\n isEnabled(): boolean {\n return this.enabled;\n }\n\n /** The current distinct id: the user id when identified, else an anon id. */\n getDistinctId(): string | null {\n const user = this.scope.getUser();\n if (user.id) return user.id;\n return this.ensureAnonymousId();\n }\n\n /** The anonymous id, or null if one was never needed. */\n getAnonymousId(): string | null {\n return this.anonymousId;\n }\n\n private ensureAnonymousId(): string {\n if (!this.anonymousId) this.anonymousId = `anon_${uuidv4()}`;\n return this.anonymousId;\n }\n\n /** Stamp a fresh envelope (new `sent_at`, current context) around `items`. */\n makeEnvelope(items: EnvelopeItem[]): Envelope {\n const header = {\n dsn: this.dsn.raw,\n sdk: { name: SDK_NAME, version: SDK_VERSION },\n sent_at: nowIso(),\n environment: this.options.environment,\n release: this.options.release,\n };\n const context = buildContext(this.options.release, this.scope.getUser());\n return buildEnvelope(header, context, items);\n }\n\n /** Add a breadcrumb, running it through `beforeBreadcrumb` first. */\n addBreadcrumb(breadcrumb: Breadcrumb, hint?: Hint): void {\n if (!this.enabled) return;\n let processed: Breadcrumb | null = breadcrumb;\n if (this.options.beforeBreadcrumb) {\n try {\n processed = this.options.beforeBreadcrumb(breadcrumb, hint);\n } catch (err) {\n this.logger.warn('beforeBreadcrumb threw', err);\n processed = breadcrumb;\n }\n }\n if (!processed) return;\n this.scope.addBreadcrumb(processed);\n }\n\n /**\n * Reconcile an error item to the shared wire shape by filling the optional\n * `event_id`/`message`/`tags`/`user` fields from the current scope and hint.\n * Each field is left untouched when the item already sets it, and omitted\n * entirely when there is nothing to attach (the backend defaults it) — only\n * `event_id` is always minted so callers can correlate the report.\n */\n private enrichErrorItem(item: ErrorItem, hint?: Hint): void {\n if (item.event_id === undefined) {\n const hinted = hint?.event_id;\n item.event_id = typeof hinted === 'string' ? hinted : uuidv4();\n }\n if (item.message === undefined && typeof hint?.message === 'string') {\n item.message = hint.message;\n }\n const tags = mergeMeta(this.scope.tags, item.tags);\n if (Object.keys(tags).length > 0) item.tags = tags;\n const contexts = mergeMeta(this.scope.contexts, item.contexts);\n if (Object.keys(contexts).length > 0) item.contexts = contexts;\n const extra = mergeMeta(this.scope.extra, item.extra);\n if (Object.keys(extra).length > 0) item.extra = extra;\n if (item.user === undefined && this.scope.hasUser()) {\n item.user = this.scope.getUser();\n }\n }\n\n /**\n * Run an item through sampling (errors only) and `beforeSend`, then hand it to\n * the transport. Returns silently when dropped.\n */\n captureItem(item: EnvelopeItem, hint?: Hint): void {\n if (!this.enabled) return;\n\n if (item.type === 'error') {\n if (Math.random() >= this.options.sampleRate) {\n this.logger.log('dropped error by sampleRate');\n return;\n }\n this.enrichErrorItem(item, hint);\n }\n\n let processed: EnvelopeItem | null = item;\n if (this.options.beforeSend) {\n try {\n processed = this.options.beforeSend(item, hint);\n } catch (err) {\n this.logger.warn('beforeSend threw', err);\n processed = item;\n }\n }\n if (!processed) {\n this.logger.log('dropped by beforeSend');\n return;\n }\n\n this.transport.send(processed);\n }\n\n /** Flush pending events. Resolves false if `timeoutMs` elapses first. */\n flush(timeoutMs?: number): Promise<boolean> {\n return this.transport.flush(timeoutMs);\n }\n\n /** Disable the client (called on 401/403). Stops accepting/sending events. */\n disable(): void {\n if (!this.enabled) return;\n this.enabled = false;\n this.transport.disable();\n this.logger.warn('client disabled');\n }\n\n /** Restore all patched globals and stop timers/listeners. */\n teardown(): void {\n this.enabled = false;\n this.transport.stop();\n if (this.beaconCleanup) {\n this.beaconCleanup();\n this.beaconCleanup = null;\n }\n onNavigation(null);\n resetScreen();\n instrument.unpatchAll();\n instrument.setDsnHost(null);\n this.installed = false;\n }\n\n /** Flush then tear down. Resolves to the flush result. */\n async close(timeoutMs?: number): Promise<boolean> {\n const flushed = await this.transport.flush(timeoutMs);\n this.teardown();\n return flushed;\n }\n}\n\n/* ---------------------------------------------------------------- singleton */\n\nlet currentClient: SauronClient | null = null;\n\n/** The active client, or null before `init`. */\nexport function getClient(): SauronClient | null {\n return currentClient;\n}\n\nfunction resolveOptions(options: InitOptions): ResolvedOptions {\n if (!options || typeof options.dsn !== 'string' || options.dsn.length === 0) {\n throw new Error('[sauron] init() requires a `dsn`');\n }\n const t = options.transport ?? {};\n return {\n dsn: options.dsn,\n environment: options.environment ?? 'production',\n release: options.release ?? null,\n sampleRate: clamp(options.sampleRate ?? 1, 0, 1),\n maxBreadcrumbs: options.maxBreadcrumbs ?? 50,\n tags: options.tags ?? {},\n contexts: options.contexts ?? {},\n extra: options.extra ?? {},\n beforeSend: options.beforeSend,\n beforeBreadcrumb: options.beforeBreadcrumb,\n transport: {\n flushIntervalMs: t.flushIntervalMs ?? 5000,\n maxBatch: t.maxBatch ?? 30,\n maxQueueBytes: t.maxQueueBytes ?? 1048576,\n },\n performance: options.performance ?? false,\n screen: options.screen,\n screenTracking: options.screenTracking ?? false,\n debug: options.debug ?? false,\n };\n}\n\n/**\n * Initialize the SDK. Idempotent: a second call tears down the previous client\n * (restoring patched globals) before installing a fresh one.\n */\nexport function init(options: InitOptions): SauronClient {\n if (currentClient) {\n try {\n currentClient.teardown();\n } catch {\n /* ignore teardown failures */\n }\n }\n const resolved = resolveOptions(options);\n const client = new SauronClient(resolved);\n currentClient = client;\n client.install();\n return client;\n}\n","import { getClient } from '../client.js';\nimport type { Breadcrumb, Hint, Level } from '../types.js';\nimport { nowIso } from '../utils.js';\n\n/** Partial breadcrumb — missing fields are filled with sensible defaults. */\nexport interface BreadcrumbInput {\n type?: string;\n category?: string;\n message?: string | null;\n level?: Level;\n timestamp?: string;\n data?: Record<string, unknown> | null;\n}\n\n/** Normalize a partial breadcrumb into the full wire shape. */\nexport function normalizeBreadcrumb(input: BreadcrumbInput): Breadcrumb {\n return {\n type: input.type ?? 'default',\n category: input.category ?? 'default',\n message: input.message ?? null,\n level: input.level ?? 'info',\n timestamp: input.timestamp ?? nowIso(),\n data: input.data ?? null,\n };\n}\n\n/**\n * Record a breadcrumb. Runs through `beforeBreadcrumb` (the PII escape hatch)\n * and is stored in the ring buffer — nothing is sent until an error is captured.\n */\nexport function addBreadcrumb(input: BreadcrumbInput, hint?: Hint): void {\n const client = getClient();\n if (!client) return;\n client.addBreadcrumb(normalizeBreadcrumb(input), hint);\n}\n\n/** Convenience helper for navigation breadcrumbs. */\nexport function addNavigationBreadcrumb(from: string | null, to: string | null): void {\n addBreadcrumb({\n type: 'navigation',\n category: 'history',\n level: 'info',\n message: null,\n data: { from, to },\n });\n}\n","/**\n * `@edraj/sauron-browser` — public API surface.\n *\n * Error reporting + product analytics for the browser. Import the named\n * functions, or the `Sauron` facade / default export.\n *\n * ```ts\n * import { Sauron } from '@edraj/sauron-browser';\n * Sauron.init({ dsn: 'https://pk_test@localhost:8081/1', release: 'web@1.4.2' });\n * Sauron.track('checkout_completed', { cart_value: 42.5 });\n * ```\n */\n\nimport { addBreadcrumb as addBreadcrumbApi, type BreadcrumbInput } from './api/breadcrumbs.js';\nimport { captureException as captureExceptionApi, captureMessage as captureMessageApi } from './api/capture.js';\nimport {\n identify as identifyApi,\n setScreen as setScreenApi,\n track as trackApi,\n trackTransaction as trackTransactionApi,\n type TransactionInput,\n} from './api/product.js';\nimport { getClient, init as initClient, SauronClient } from './client.js';\nimport { getScreen as getScreenApi } from './screen.js';\nimport type { Hint, InitOptions, Level, TrackOptions, UserInput } from './types.js';\n\n/** Initialize the SDK. See {@link InitOptions}. */\nexport function init(options: InitOptions): SauronClient {\n return initClient(options);\n}\n\n/** Capture an exception (or any thrown value). */\nexport function captureException(err: unknown, hint?: Hint): void {\n captureExceptionApi(err, hint);\n}\n\n/** Capture a plain message at the given `level` (default `info`). */\nexport function captureMessage(message: string, level: Level = 'info', hint?: Hint): void {\n captureMessageApi(message, level, hint);\n}\n\n/** Record a product-analytics event, optionally with per-call tags/contexts/extra. */\nexport function track(\n name: string,\n properties?: Record<string, unknown>,\n options?: TrackOptions,\n): void {\n trackApi(name, properties, options);\n}\n\n/** Associate the session with a known user. */\nexport function identify(id: string, traits?: Record<string, unknown>): void {\n identifyApi(id, traits);\n}\n\n/** Record a performance transaction (navigation, http, screen load, ...). */\nexport function trackTransaction(input: TransactionInput): void {\n trackTransactionApi(input);\n}\n\n/** Set the current screen (emits a `$screen` view on change). */\nexport function setScreen(name: string): void {\n setScreenApi(name);\n}\n\n/** The current screen name, or null. */\nexport function getScreen(): string | null {\n return getScreenApi();\n}\n\n/** Record a breadcrumb. */\nexport function addBreadcrumb(breadcrumb: BreadcrumbInput, hint?: Hint): void {\n addBreadcrumbApi(breadcrumb, hint);\n}\n\n/** Set (or clear, with `null`) the current user. */\nexport function setUser(user: UserInput): void {\n getClient()?.getScope().setUser(user);\n}\n\n/** Set a single scope tag (lifted onto later errors/events). */\nexport function setTag(key: string, value: string): void {\n getClient()?.getScope().setTag(key, value);\n}\n\n/** Merge a batch of scope tags (last-write-wins per key). */\nexport function setTags(tags: Record<string, string>): void {\n getClient()?.getScope().setTags(tags);\n}\n\n/** Set (replace) a named scope context block. */\nexport function setContext(name: string, block: Record<string, unknown>): void {\n getClient()?.getScope().setContext(name, block);\n}\n\n/** Set a single freeform scope extra value. */\nexport function setExtra(key: string, value: unknown): void {\n getClient()?.getScope().setExtra(key, value);\n}\n\n/** Flush pending events. Resolves `false` if `timeoutMs` elapses first. */\nexport function flush(timeoutMs?: number): Promise<boolean> {\n const client = getClient();\n return client ? client.flush(timeoutMs) : Promise.resolve(false);\n}\n\n/** Flush and tear down the SDK, restoring all patched globals. */\nexport function close(timeoutMs?: number): Promise<boolean> {\n const client = getClient();\n return client ? client.close(timeoutMs) : Promise.resolve(false);\n}\n\n/** The active client instance, or `null` before `init`. */\nexport { getClient, SauronClient };\n\n/** Grouped facade + default export. */\nexport const Sauron = {\n init,\n captureException,\n captureMessage,\n track,\n trackTransaction,\n identify,\n addBreadcrumb,\n setUser,\n setTag,\n setTags,\n setContext,\n setExtra,\n setScreen,\n getScreen,\n flush,\n close,\n getClient,\n};\n\nexport default Sauron;\n\n/* ------------------------------------------------------------- re-exports */\n\nexport { parseDsn, DsnError } from './dsn.js';\nexport type { Dsn } from './dsn.js';\nexport { buildEnvelope } from './envelope.js';\nexport { parseStackString, parseError, isInAppFrame } from './stacktrace/parse.js';\nexport { SDK_NAME, SDK_VERSION } from './utils.js';\nexport type { BreadcrumbInput } from './api/breadcrumbs.js';\nexport type { TransactionInput } from './api/product.js';\n\nexport type {\n Level,\n ItemType,\n TransactionOp,\n Frame,\n Mechanism,\n ExceptionValue,\n Breadcrumb,\n ErrorItem,\n EventItem,\n IdentifyItem,\n BreadcrumbBatchItem,\n TransactionItem,\n EnvelopeItem,\n DeviceContext,\n OsContext,\n AppContext,\n RuntimeContext,\n UserContext,\n Context,\n SdkInfo,\n EnvelopeHeader,\n Envelope,\n Hint,\n UserInput,\n BeforeSend,\n BeforeBreadcrumb,\n TransportOptions,\n InitOptions,\n CaptureOptions,\n TrackOptions,\n ResolvedOptions,\n} from './types.js';\n"]}
|