{"version":3,"file":"sentry-adapter.cjs","names":[],"sources":["../../src/telemetry/sentry-adapter.ts"],"sourcesContent":["import type { TelemetryAdapter, TelemetryEvent, TelemetryUser } from \"./types\";\n\n/**\n * Minimal subset of `@sentry/browser` used by the adapter. Lets you pass\n * either the real SDK module (`import * as Sentry from \"@sentry/browser\"`)\n * or a stubbed object in tests.\n */\nexport interface SentryLike {\n    init?: (options: Record<string, unknown>) => void;\n    setUser: (user: Record<string, unknown> | null) => void;\n    addBreadcrumb: (breadcrumb: {\n        category?: string;\n        message?: string;\n        level?: string;\n        data?: Record<string, unknown>;\n    }) => void;\n    captureException: (\n        error: unknown,\n        hint?: { extra?: Record<string, unknown>; contexts?: Record<string, unknown> },\n    ) => void;\n    flush?: (timeout?: number) => Promise<boolean>;\n}\n\nexport interface CreateSentryTelemetryAdapterOptions {\n    /** The Sentry browser SDK namespace. Required. */\n    sentry: SentryLike;\n    /** Optional init payload — passed verbatim to `Sentry.init` when the provider mounts. */\n    initOptions?: Record<string, unknown>;\n    /** Flush timeout in ms (default `2000`). */\n    flushTimeout?: number;\n    /** Breadcrumb category for `track` events (default `\"app\"`). */\n    breadcrumbCategory?: string;\n}\n\nfunction userToSentry(user: TelemetryUser | null): Record<string, unknown> | null {\n    if (user === null) return null;\n    const { id, email, name, traits } = user;\n    return {\n        ...(id !== undefined ? { id } : null),\n        ...(email !== undefined ? { email } : null),\n        ...(name !== undefined ? { username: name } : null),\n        ...(traits ?? null),\n    };\n}\n\n/**\n * Build a [[TelemetryAdapter]] backed by `@sentry/browser`. The Sentry SDK\n * is supplied by the caller (not bundled) so apps that already initialise\n * Sentry at startup can share that instance — and apps that don't use\n * Sentry never pay for it.\n *\n * Mapping:\n * - `identify(user)` → `Sentry.setUser`\n * - `track(event)` → `Sentry.addBreadcrumb({ category, message: event.name, data })`\n * - `captureException(err, ctx)` → `Sentry.captureException(err, { extra: ctx })`\n * - `flush()` → `Sentry.flush(flushTimeout)`\n *\n * @example\n * import * as Sentry from \"@sentry/browser\";\n * import { createSentryTelemetryAdapter, TelemetryProvider } from \"tempest-react-sdk\";\n *\n * const adapter = createSentryTelemetryAdapter({\n *     sentry: Sentry,\n *     initOptions: { dsn: import.meta.env.VITE_SENTRY_DSN, tracesSampleRate: 0.1 },\n * });\n *\n * <TelemetryProvider adapter={adapter}><App /></TelemetryProvider>;\n */\nexport function createSentryTelemetryAdapter(\n    options: CreateSentryTelemetryAdapterOptions,\n): TelemetryAdapter {\n    const { sentry, initOptions, flushTimeout = 2000, breadcrumbCategory = \"app\" } = options;\n\n    return {\n        init() {\n            if (initOptions && sentry.init) {\n                sentry.init(initOptions);\n            }\n        },\n        identify(user: TelemetryUser | null) {\n            sentry.setUser(userToSentry(user));\n        },\n        track(event: TelemetryEvent) {\n            sentry.addBreadcrumb({\n                category: breadcrumbCategory,\n                message: event.name,\n                level: \"info\",\n                ...(event.properties ? { data: event.properties } : null),\n            });\n        },\n        captureException(error: unknown, context?: Record<string, unknown>) {\n            sentry.captureException(error, context ? { extra: context } : undefined);\n        },\n        async flush() {\n            if (sentry.flush) {\n                await sentry.flush(flushTimeout);\n            }\n        },\n    };\n}\n"],"mappings":"AAkCA,SAAS,EAAa,EAA4D,CAC9E,GAAI,IAAS,KAAM,OAAO,KAC1B,GAAM,CAAE,KAAI,QAAO,OAAM,UAAW,EACpC,MAAO,CACH,GAAI,IAAO,IAAA,GAAqB,KAAT,CAAE,IAAG,EAC5B,GAAI,IAAU,IAAA,GAAwB,KAAZ,CAAE,OAAM,EAClC,GAAI,IAAS,IAAA,GAAiC,KAArB,CAAE,SAAU,CAAK,EAC1C,GAAI,GAAU,IAClB,CACJ,CAyBA,SAAgB,EACZ,EACgB,CAChB,GAAM,CAAE,SAAQ,cAAa,eAAe,IAAM,qBAAqB,OAAU,EAEjF,MAAO,CACH,MAAO,CACC,GAAe,EAAO,MACtB,EAAO,KAAK,CAAW,CAE/B,EACA,SAAS,EAA4B,CACjC,EAAO,QAAQ,EAAa,CAAI,CAAC,CACrC,EACA,MAAM,EAAuB,CACzB,EAAO,cAAc,CACjB,SAAU,EACV,QAAS,EAAM,KACf,MAAO,OACP,GAAI,EAAM,WAAa,CAAE,KAAM,EAAM,UAAW,EAAI,IACxD,CAAC,CACL,EACA,iBAAiB,EAAgB,EAAmC,CAChE,EAAO,iBAAiB,EAAO,EAAU,CAAE,MAAO,CAAQ,EAAI,IAAA,EAAS,CAC3E,EACA,MAAM,OAAQ,CACN,EAAO,OACP,MAAM,EAAO,MAAM,CAAY,CAEvC,CACJ,CACJ"}