export type TranscriptionMetricsProvider = "sofya_compliance" | "oracle" | "sofya_as_service" | "sofya_whisper_flow" | "stt_wvad" | "apiKey" | null; export type TelemetryIntegrationProvider = "dynatrace"; export interface DynatraceTelemetryIntegrationOptions { globalKey?: string; actionName?: string; } export interface TelemetryIntegrationOptions { enabled?: boolean; provider?: TelemetryIntegrationProvider | null; dynatrace?: DynatraceTelemetryIntegrationOptions; } export interface TelemetryIntegrationWarning { provider: TelemetryIntegrationProvider | "none"; code: "provider_not_configured" | "provider_not_supported" | "runtime_missing" | "dispatch_failed"; message: string; timestamp: number; detail?: Record | null; } export type TelemetryMetricType = "counter" | "gauge" | "histogram" | "event"; export type TelemetryTagValue = string | number | boolean; export type TelemetryTags = Record; export interface TelemetryCapabilities { transcriptUi: boolean; session: boolean; connection: boolean; recovery: boolean; buffering: boolean; browserNetwork: boolean; audioCapture: boolean; } export interface TelemetryRow { ts: number; sessionId: string; metric: string; value: number; unit?: string; type: TelemetryMetricType; tags?: TelemetryTags; } export interface TelemetryHistogramSummary { count: number; min: number | null; max: number | null; sum: number; avg: number | null; p50: number | null; p95: number | null; p99: number | null; } export interface TelemetrySessionWindow { sessionId: string; startedAt: number | null; endedAt: number | null; durationMs: number | null; } export interface TelemetryStatus { connectionState: "connecting" | "connected" | "reconnecting" | "disconnected" | "stopped" | null; websocketState: "connecting" | "open" | "closing" | "closed" | "unavailable" | null; browserOnline: boolean | null; isRecovering: boolean | null; isBufferingAudio: boolean | null; isDrainingAudio: boolean | null; transportBufferedAmountBytes: number | null; pendingBufferedAudioBytes: number | null; persistedBufferedAudioBytes: number | null; persistedBufferedAudioSegments: number | null; totalBufferedAudioBytes: number | null; lastDrainProgressAt: number | null; drainCycles: number | null; drainExitReason: "completed" | "socket_unavailable" | "send_failed" | "stalled" | "stopped" | null; reconnectAttempt: number | null; nextReconnectDelayMs: number | null; remainingReconnectAttempts: number | null; finishDeliveryState: "sent" | "skipped_socket_closed" | "timed_out" | null; lastDisconnectCode: number | null; lastDisconnectReason: string | null; networkEffectiveType: string | null; } export interface TelemetrySnapshot { schemaVersion: 2; updatedAt: number; provider: TranscriptionMetricsProvider; capabilities: TelemetryCapabilities; window: TelemetrySessionWindow; status: TelemetryStatus; counters: Record; gauges: Record; histograms: Record; derived: Record; } export interface TelemetryApi { startSession(meta?: Record): string; endSession(): void; increment(name: string, value?: number, tags?: TelemetryTags): void; gauge(name: string, value: number, tags?: TelemetryTags): void; observe(name: string, value: number, tags?: TelemetryTags): void; event(name: string, data?: Record): void; getTelemetrySnapshot(): TelemetrySnapshot; getTelemetryRows(): TelemetryRow[]; clearTelemetryRows(): void; resetTelemetry(): void; subscribe(cb: (row: TelemetryRow) => void): () => void; } export interface BrowserConnectionInfo { effectiveType: string | null; downlinkMbps: number | null; rttMs: number | null; } export type MetricsDrainExitReason = "completed" | "socket_unavailable" | "send_failed" | "stalled" | "stopped" | null; export type MetricsFinishDeliveryState = "sent" | "skipped_socket_closed" | "timed_out" | null; export interface TranscriptUiMetrics { supported: boolean; currentPartialText: string | null; lastFinalText: string | null; partialCount: number | null; finalCount: number | null; diarizationCount: number | null; utteranceCount: number | null; lastFirstPartialLatencyMs: number | null; avgFirstPartialLatencyMs: number | null; p95FirstPartialLatencyMs: number | null; lastFinalLatencyMs: number | null; avgFinalLatencyMs: number | null; p95FinalLatencyMs: number | null; lastStabilizationLatencyMs: number | null; avgStabilizationLatencyMs: number | null; p95StabilizationLatencyMs: number | null; } export interface SessionMetrics { supported: boolean; sessionStartedAt: number | null; sessionStoppedAt: number | null; sessionDurationMs: number | null; initializationLatencyMs: number | null; pauseCount: number | null; resumeCount: number | null; pausedDurationMs: number | null; errorCount: number | null; fatalErrorCount: number | null; } export interface ConnectionMetrics { supported: boolean; connectionState: "connecting" | "connected" | "reconnecting" | "disconnected" | "stopped" | null; websocketState: "connecting" | "open" | "closing" | "closed" | "unavailable" | null; browserOnline: boolean | null; connectionOpenCount: number | null; connectionCloseCount: number | null; connectedDurationMs: number | null; reconnectingDurationMs: number | null; disconnectedDurationMs: number | null; transportBufferedAmountBytes: number | null; lastDisconnectCode: number | null; lastDisconnectReason: string | null; } export interface RecoveryMetrics { supported: boolean; reconnectCount: number | null; recoverySuccessCount: number | null; terminalDisconnectCount: number | null; currentReconnectAttempt: number | null; nextReconnectDelayMs: number | null; remainingReconnectAttempts: number | null; lastRecoveryDurationMs: number | null; avgRecoveryDurationMs: number | null; p95RecoveryDurationMs: number | null; } export interface BufferingMetrics { supported: boolean; isBufferingAudio: boolean | null; isDrainingAudio: boolean | null; pendingBufferedAudioBytes: number | null; persistedBufferedAudioBytes: number | null; persistedBufferedAudioSegments: number | null; totalBufferedAudioBytes: number | null; peakBufferedAudioBytes: number | null; bufferingDurationMs: number | null; drainingDurationMs: number | null; lastDrainProgressAt: number | null; drainCycles: number | null; drainExitReason: "completed" | "socket_unavailable" | "send_failed" | "stalled" | "stopped" | null; finishDeliveryState: "sent" | "skipped_socket_closed" | "timed_out" | null; avgBufferGrowthRateBytesPerSecond: number | null; avgBufferDrainRateBytesPerSecond: number | null; bufferStallCount: number | null; } export interface BrowserNetworkMetrics { supported: boolean; onlineTransitionCount: number | null; offlineTransitionCount: number | null; offlineDurationMs: number | null; flapCount: number | null; effectiveType: string | null; downlinkMbps: number | null; rttMs: number | null; } export interface AudioCaptureMetrics { supported: boolean; inputSampleRate: number | null; targetSampleRate: number | null; channelCount: number | null; currentRms: number | null; peakRms: number | null; currentPeakAmplitude: number | null; clippingEventCount: number | null; silenceRatio: number | null; speechActivityRatio: number | null; audioCallbackGapCount: number | null; longestAudioCallbackGapMs: number | null; } export interface TranscriptionMetricsSnapshot { schemaVersion: 1; updatedAt: number; provider: TranscriptionMetricsProvider; transcriptUi: TranscriptUiMetrics; session: SessionMetrics; connection: ConnectionMetrics; recovery: RecoveryMetrics; buffering: BufferingMetrics; browserNetwork: BrowserNetworkMetrics; audioCapture: AudioCaptureMetrics; } //# sourceMappingURL=types.d.ts.map