@voice-kit/core 0.1.2 → 0.1.3

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.
Files changed (53) hide show
  1. package/dist/index.cjs +2137 -0
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +1466 -4
  4. package/dist/index.d.ts +1466 -4
  5. package/dist/index.js +2102 -1
  6. package/dist/index.js.map +1 -1
  7. package/package.json +1 -31
  8. package/dist/audio.cjs +0 -533
  9. package/dist/audio.cjs.map +0 -1
  10. package/dist/audio.d.cts +0 -260
  11. package/dist/audio.d.ts +0 -260
  12. package/dist/audio.js +0 -514
  13. package/dist/audio.js.map +0 -1
  14. package/dist/compliance.cjs +0 -343
  15. package/dist/compliance.cjs.map +0 -1
  16. package/dist/compliance.d.cts +0 -163
  17. package/dist/compliance.d.ts +0 -163
  18. package/dist/compliance.js +0 -335
  19. package/dist/compliance.js.map +0 -1
  20. package/dist/errors.cjs +0 -284
  21. package/dist/errors.cjs.map +0 -1
  22. package/dist/errors.d.cts +0 -100
  23. package/dist/errors.d.ts +0 -100
  24. package/dist/errors.js +0 -262
  25. package/dist/errors.js.map +0 -1
  26. package/dist/index-D3KfRXMP.d.cts +0 -319
  27. package/dist/index-D3KfRXMP.d.ts +0 -319
  28. package/dist/memory.cjs +0 -121
  29. package/dist/memory.cjs.map +0 -1
  30. package/dist/memory.d.cts +0 -29
  31. package/dist/memory.d.ts +0 -29
  32. package/dist/memory.js +0 -115
  33. package/dist/memory.js.map +0 -1
  34. package/dist/observability.cjs +0 -229
  35. package/dist/observability.cjs.map +0 -1
  36. package/dist/observability.d.cts +0 -122
  37. package/dist/observability.d.ts +0 -122
  38. package/dist/observability.js +0 -222
  39. package/dist/observability.js.map +0 -1
  40. package/dist/stt.cjs +0 -828
  41. package/dist/stt.cjs.map +0 -1
  42. package/dist/stt.d.cts +0 -308
  43. package/dist/stt.d.ts +0 -308
  44. package/dist/stt.js +0 -815
  45. package/dist/stt.js.map +0 -1
  46. package/dist/telephony.errors-BQYr6-vl.d.cts +0 -80
  47. package/dist/telephony.errors-C0-nScrF.d.ts +0 -80
  48. package/dist/tts.cjs +0 -429
  49. package/dist/tts.cjs.map +0 -1
  50. package/dist/tts.d.cts +0 -151
  51. package/dist/tts.d.ts +0 -151
  52. package/dist/tts.js +0 -418
  53. package/dist/tts.js.map +0 -1
package/dist/stt.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/errors/base.ts","../src/errors/stt.errors.ts","../src/stt/assembly/index.ts","../src/stt/deepgram/index.ts","../src/stt/sarvam/index.ts","../src/stt/language-detect.ts","../src/stt/whisper/index.ts","../src/stt/STT-factory.ts"],"names":["logger","pino","SUPPORTED_LANGUAGES"],"mappings":"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","file":"stt.js","sourcesContent":["/**\r\n * @voice-kit/core — Typed error hierarchy\r\n *\r\n * All VoiceKit errors extend VoiceKitError. Never throw raw Error.\r\n * Every error carries: code, message, provider, callId, retryable, severity.\r\n */\r\n\r\nimport type { ErrorSeverity } from '../types'\r\n\r\n// ─── Base Error ───────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Base class for all VoiceKit errors. Provides structured context for\r\n * logging, alerting, and programmatic error handling.\r\n *\r\n * @example\r\n * ```ts\r\n * try {\r\n * await stt.transcribeBatch(audio)\r\n * } catch (err) {\r\n * if (err instanceof STTError) {\r\n * console.error(err.code, err.provider, err.retryable)\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport class VoiceKitError extends Error {\r\n readonly code: string\r\n readonly callId?: string\r\n readonly provider?: string\r\n readonly retryable: boolean\r\n readonly severity: ErrorSeverity\r\n override readonly cause?: unknown\r\n\r\n constructor(params: {\r\n code: string\r\n message: string\r\n callId?: string\r\n provider?: string\r\n retryable?: boolean\r\n severity?: ErrorSeverity\r\n cause?: unknown\r\n }) {\r\n super(params.message)\r\n this.name = this.constructor.name\r\n this.code = params.code\r\n this.callId = params.callId\r\n this.provider = params.provider\r\n this.retryable = params.retryable ?? false\r\n this.severity = params.severity ?? 'medium'\r\n this.cause = params.cause\r\n\r\n // Maintains proper prototype chain for `instanceof` in transpiled code\r\n Object.setPrototypeOf(this, new.target.prototype)\r\n }\r\n\r\n toJSON() {\r\n return {\r\n name: this.name,\r\n code: this.code,\r\n message: this.message,\r\n callId: this.callId,\r\n provider: this.provider,\r\n retryable: this.retryable,\r\n severity: this.severity,\r\n }\r\n }\r\n}","\r\n// ─── STT Errors ───────────────────────────────────────────────────────────────\r\n\r\nimport type { ErrorSeverity } from \"../types\"\r\nimport { VoiceKitError } from \"./base\"\r\n\r\n/**\r\n * Errors from speech-to-text providers.\r\n */\r\nexport class STTError extends VoiceKitError {\r\n readonly languageCode?: string\r\n\r\n constructor(params: {\r\n code: string\r\n message: string\r\n callId?: string\r\n provider?: string\r\n retryable?: boolean\r\n severity?: ErrorSeverity\r\n cause?: unknown\r\n languageCode?: string\r\n }) {\r\n super(params)\r\n this.languageCode = params.languageCode\r\n }\r\n}\r\n\r\nexport class STTConnectionError extends STTError {\r\n constructor(provider: string, cause?: unknown, callId?: string) {\r\n super({\r\n code: 'STT_CONNECTION_FAILED',\r\n message: `Failed to connect to ${provider} STT service`,\r\n provider,\r\n callId,\r\n retryable: true,\r\n severity: 'high',\r\n cause,\r\n })\r\n }\r\n}\r\n\r\nexport class STTStreamError extends STTError {\r\n constructor(provider: string, cause?: unknown, callId?: string) {\r\n super({\r\n code: 'STT_STREAM_ERROR',\r\n message: `STT stream error from ${provider}`,\r\n provider,\r\n callId,\r\n retryable: true,\r\n severity: 'medium',\r\n cause,\r\n })\r\n }\r\n}\r\n\r\nexport class STTLanguageNotSupportedError extends STTError {\r\n constructor(provider: string, language: string) {\r\n super({\r\n code: 'STT_LANGUAGE_NOT_SUPPORTED',\r\n message: `Language '${language}' is not supported by ${provider}`,\r\n provider,\r\n retryable: false,\r\n severity: 'low',\r\n languageCode: language,\r\n })\r\n }\r\n}\r\n","/**\r\n * @voice-kit/core — AssemblyAI STT Provider\r\n *\r\n * Async long-form transcription using AssemblyAI SDK.\r\n * Best for post-call recordings, meeting notes, long interviews.\r\n * Does not support realtime streaming — use Deepgram for live calls.\r\n */\r\n\r\nimport { AssemblyAI } from 'assemblyai'\r\nimport { STTConnectionError, STTStreamError } from '../../errors'\r\nimport type { STTProvider, STTResult, STTConfig } from '../../types'\r\nimport pino from 'pino'\r\n\r\nconst logger = pino({ name: '@voice-kit/core:stt:assemblyai' })\r\n\r\nconst SUPPORTED_LANGUAGES = [\r\n 'en', 'en_au', 'en_uk', 'en_us',\r\n 'hi', 'fr', 'de', 'es', 'it', 'pt', 'nl', 'ja', 'zh',\r\n]\r\n\r\n/**\r\n * AssemblyAI async transcription provider.\r\n * @internal — obtained via createSTT('assemblyai', config)\r\n */\r\nexport class AssemblyAISTTProvider implements STTProvider {\r\n readonly name = 'assemblyai'\r\n readonly supportsStreaming = false\r\n readonly supportedLanguages = SUPPORTED_LANGUAGES\r\n\r\n private readonly client: AssemblyAI\r\n private readonly config: Required<STTConfig>\r\n\r\n constructor(config: STTConfig) {\r\n const apiKey = config.apiKey ?? process.env['ASSEMBLYAI_API_KEY']\r\n if (!apiKey) throw new STTConnectionError('assemblyai', new Error('ASSEMBLYAI_API_KEY not set'))\r\n\r\n this.client = new AssemblyAI({ apiKey })\r\n this.config = {\r\n language: config.language ?? 'en',\r\n alternateLanguages: config.alternateLanguages ?? [],\r\n apiKey,\r\n model: config.model ?? 'best',\r\n wordTimestamps: config.wordTimestamps ?? true,\r\n interimResults: false,\r\n smartFormat: config.smartFormat ?? true,\r\n region: '',\r\n }\r\n }\r\n\r\n /**\r\n * Batch-transcribes collected audio. AssemblyAI has no realtime streaming.\r\n * Collects all audio from the iterable, uploads, then polls for result.\r\n *\r\n * @param audio Async iterable of PCM buffers\r\n */\r\n async *transcribeStream(audio: AsyncIterable<Buffer>): AsyncIterable<STTResult> {\r\n const chunks: Buffer[] = []\r\n for await (const chunk of audio) chunks.push(chunk)\r\n const result = await this.transcribeBatch(Buffer.concat(chunks))\r\n yield result\r\n }\r\n\r\n /**\r\n * Upload audio to AssemblyAI and wait for async transcription.\r\n * Suitable for call recordings. Average latency: 15–45s per minute of audio.\r\n *\r\n * @param audio Raw WAV/PCM/MP3 buffer\r\n *\r\n * @example\r\n * ```ts\r\n * const stt = createSTT('assemblyai', { wordTimestamps: true })\r\n * const result = await stt.transcribeBatch(recordingBuffer)\r\n * console.log(result.words) // Word-level timestamps\r\n * ```\r\n */\r\n async transcribeBatch(audio: Buffer): Promise<STTResult> {\r\n const startMs = Date.now()\r\n\r\n try {\r\n logger.debug({ bytes: audio.length, language: this.config.language }, 'AssemblyAI transcription started')\r\n\r\n const transcript = await this.client.transcripts.transcribe({\r\n audio: audio,\r\n language_code: this.config.language,\r\n speech_model: this.config.model as 'best' | 'nano',\r\n punctuate: this.config.smartFormat,\r\n format_text: this.config.smartFormat,\r\n word_boost: [],\r\n ...(this.config.wordTimestamps && { timestamps: true }),\r\n })\r\n\r\n if (transcript.status === 'error') {\r\n throw new STTStreamError('assemblyai', new Error(transcript.error ?? 'Transcription failed'))\r\n }\r\n\r\n logger.info(\r\n { id: transcript.id, duration: transcript.audio_duration, latencyMs: Date.now() - startMs },\r\n 'AssemblyAI transcription complete'\r\n )\r\n\r\n return {\r\n transcript: transcript.text ?? '',\r\n isFinal: true,\r\n confidence: transcript.confidence ?? 0.9,\r\n language: this.config.language,\r\n languageSwitchDetected: false,\r\n words: this.config.wordTimestamps && transcript.words\r\n ? transcript.words.map((w) => ({\r\n word: w.text,\r\n startMs: w.start,\r\n endMs: w.end,\r\n confidence: w.confidence,\r\n }))\r\n : undefined,\r\n latencyMs: Date.now() - startMs,\r\n }\r\n } catch (err) {\r\n if (err instanceof STTStreamError) throw err\r\n throw new STTStreamError('assemblyai', err)\r\n }\r\n }\r\n}","/**\r\n * @voice-kit/core — Deepgram Nova-3 STT Provider\r\n *\r\n * Streaming STT using Deepgram Nova-3. Handles WebSocket reconnect with\r\n * exponential backoff, interim + final results, language detection.\r\n * Never instantiate directly — use createSTT('deepgram', config).\r\n *\r\n * SDK: @deepgram/sdk v5 (beta) — https://github.com/deepgram/deepgram-js-sdk\r\n */\r\n\r\nimport { DeepgramClient, type ListenV1Response } from '@deepgram/sdk'\r\nimport { STTConnectionError, STTStreamError } from '../../errors'\r\nimport type { STTProvider, STTResult, STTConfig } from '../../types'\r\nimport pino from 'pino'\r\n\r\nconst logger = pino({ name: '@voice-kit/core:stt:deepgram' })\r\n\r\n/** Supported Deepgram languages with India-first ordering. */\r\nconst SUPPORTED_LANGUAGES = [\r\n 'en-IN', 'hi-IN', 'ta-IN', 'te-IN', 'kn-IN', 'mr-IN',\r\n 'en-US', 'en-GB', 'en-AU',\r\n]\r\n\r\n/** Exponential backoff config. */\r\nconst BACKOFF = {\r\n baseMs: 100,\r\n maxMs: 5_000,\r\n jitterPct: 0.2,\r\n maxAttempts: 3,\r\n}\r\n\r\nfunction backoffDelay(attempt: number): number {\r\n const base = Math.min(BACKOFF.baseMs * Math.pow(2, attempt), BACKOFF.maxMs)\r\n const jitter = base * BACKOFF.jitterPct * (Math.random() * 2 - 1)\r\n return Math.round(base + jitter)\r\n}\r\n\r\n/**\r\n * Deepgram Nova-3 streaming STT provider.\r\n * @internal — obtained via createSTT('deepgram', config)\r\n */\r\nexport class DeepgramSTTProvider implements STTProvider {\r\n readonly name = 'deepgram'\r\n readonly supportsStreaming = true\r\n readonly supportedLanguages = SUPPORTED_LANGUAGES\r\n\r\n private readonly client: DeepgramClient\r\n private readonly config: Required<STTConfig>\r\n\r\n constructor(config: STTConfig) {\r\n const apiKey = config.apiKey ?? process.env['DEEPGRAM_API_KEY']\r\n if (!apiKey) throw new STTConnectionError('deepgram', new Error('DEEPGRAM_API_KEY not set'))\r\n\r\n // v5: new DeepgramClient({ apiKey }) — replaces createClient(apiKey) from v4\r\n this.client = new DeepgramClient({ apiKey })\r\n\r\n this.config = {\r\n language: config.language ?? 'en-IN',\r\n alternateLanguages: config.alternateLanguages ?? [],\r\n apiKey,\r\n // nova-3 is now Deepgram's latest recommended model\r\n model: config.model ?? 'nova-3',\r\n wordTimestamps: config.wordTimestamps ?? false,\r\n interimResults: config.interimResults ?? true,\r\n smartFormat: config.smartFormat ?? true,\r\n region: config.region ?? '',\r\n }\r\n }\r\n\r\n /**\r\n * Stream audio to Deepgram and receive interim + final transcription results.\r\n * Handles reconnection transparently with exponential backoff.\r\n *\r\n * @param audio Async iterable of 16kHz PCM buffers from AudioPipeline\r\n *\r\n * @example\r\n * ```ts\r\n * const stt = createSTT('deepgram', { language: 'hi-IN' })\r\n * for await (const result of stt.transcribeStream(audioIterable)) {\r\n * if (result.isFinal) console.log('User said:', result.transcript)\r\n * }\r\n * ```\r\n */\r\n async *transcribeStream(audio: AsyncIterable<Buffer>): AsyncIterable<STTResult> {\r\n let attempt = 0\r\n const startMs = Date.now()\r\n\r\n while (attempt <= BACKOFF.maxAttempts) {\r\n const connection = await this.connectWithRetry(attempt)\r\n const results: STTResult[] = []\r\n let done = false\r\n let error: Error | null = null\r\n\r\n // v5: unified \"message\" event replaces LiveTranscriptionEvents.Transcript.\r\n // Check data.type === \"Results\" to identify transcript frames.\r\n connection.on('message', (data: any) => {\r\n if (data.type !== 'Results') return\r\n\r\n const alt = data.channel?.alternatives?.[0]\r\n // Skip empty interim frames (common during silence)\r\n if (!alt?.transcript) return\r\n\r\n const isFinal = data.is_final === true\r\n const result: STTResult = {\r\n transcript: alt.transcript,\r\n isFinal,\r\n // speech_final=true means Deepgram detected end-of-utterance (endpointing).\r\n // A frame can be speech_final without is_final — callers should act on both.\r\n confidence: alt.confidence ?? 0,\r\n // alt.languages populated when detect_language is enabled\r\n language: alt.languages?.[0] ?? this.config.language,\r\n languageSwitchDetected: false,\r\n words: this.config.wordTimestamps\r\n ? alt.words?.map((w: any) => ({\r\n word: w.word ?? '',\r\n startMs: (w.start ?? 0) * 1000,\r\n endMs: (w.end ?? 0) * 1000,\r\n confidence: w.confidence ?? 0,\r\n punctuatedWord: w.punctuated_word,\r\n }))\r\n : undefined,\r\n latencyMs: Date.now() - startMs,\r\n }\r\n results.push(result)\r\n\r\n if (isFinal) {\r\n logger.debug(\r\n { transcript: result.transcript, confidence: result.confidence, language: result.language },\r\n 'Deepgram final transcript'\r\n )\r\n }\r\n })\r\n\r\n // v5: lowercase \"close\" event\r\n connection.on('close', () => {\r\n done = true\r\n })\r\n\r\n connection.on('error', (err: Error) => {\r\n error = err\r\n logger.warn({ err, attempt }, 'Deepgram stream error')\r\n })\r\n\r\n // Send audio frames.\r\n // v5 listen.v1: raw binary frames go via connection.socket.send()\r\n const sendAudio = async () => {\r\n try {\r\n for await (const chunk of audio) {\r\n connection.socket.send(chunk)\r\n }\r\n // Finalize signals Deepgram to flush remaining audio and close cleanly\r\n connection.socket.send(JSON.stringify({ type: 'Finalize' }))\r\n } catch (err) {\r\n error = err instanceof Error ? err : new Error(String(err))\r\n }\r\n }\r\n\r\n const sendPromise = sendAudio()\r\n let resultIndex = 0\r\n\r\n while (!done || resultIndex < results.length) {\r\n if (resultIndex < results.length) {\r\n yield results[resultIndex++]!\r\n } else {\r\n await new Promise((r) => setTimeout(r, 10))\r\n }\r\n\r\n if (error && attempt < BACKOFF.maxAttempts) {\r\n // Close current connection and fall through to reconnect\r\n try { connection.socket.close() } catch { /* ignore */ }\r\n break\r\n }\r\n\r\n if (error && attempt >= BACKOFF.maxAttempts) {\r\n await sendPromise.catch(() => { })\r\n throw new STTStreamError('deepgram', error)\r\n }\r\n }\r\n\r\n await sendPromise.catch(() => { })\r\n\r\n if (!error) return // Clean exit\r\n\r\n attempt++\r\n await new Promise((r) => setTimeout(r, backoffDelay(attempt)))\r\n logger.info({ attempt }, 'Deepgram reconnecting...')\r\n }\r\n\r\n throw new STTStreamError('deepgram', new Error('Max reconnect attempts exceeded'))\r\n }\r\n\r\n /**\r\n * Transcribe a complete audio buffer (non-streaming).\r\n * Uses Deepgram pre-recorded API.\r\n *\r\n * @param audio Raw PCM or WAV buffer\r\n */\r\n async transcribeBatch(audio: Buffer): Promise<STTResult> {\r\n const startMs = Date.now()\r\n\r\n // v5: listen.v1.media.transcribeFile() — throws on error (no { result, error } wrapper)\r\n try {\r\n const response: ListenV1Response = await this.client.listen.v1.media.transcribeFile(\r\n audio,\r\n {\r\n model: this.config.model,\r\n language: this.config.language,\r\n // v5: boolean-like options must be strings\r\n smart_format: true,\r\n diarize: false,\r\n }\r\n ) as ListenV1Response\r\n\r\n const alt = response?.results?.channels?.[0]?.alternatives?.[0]\r\n return {\r\n transcript: alt?.transcript ?? '',\r\n isFinal: true,\r\n confidence: alt?.confidence ?? 0,\r\n language: this.config.language,\r\n languageSwitchDetected: false,\r\n latencyMs: Date.now() - startMs,\r\n }\r\n } catch (err) {\r\n if (err instanceof STTStreamError) throw err\r\n throw new STTStreamError('deepgram', err instanceof Error ? err : new Error(String(err)))\r\n }\r\n }\r\n\r\n /**\r\n * Create and open a live WebSocket connection to Deepgram.\r\n *\r\n * v5 connection lifecycle (3 explicit steps):\r\n * 1. await listen.v1.connect(options) — constructs the connection object\r\n * 2. connection.connect() — initiates the WebSocket handshake\r\n * 3. await connection.waitForOpen() — resolves once the socket is ready\r\n *\r\n * @internal\r\n */\r\n private async connectWithRetry(attempt: number): Promise<any> {\r\n const delay = attempt > 0 ? backoffDelay(attempt) : 0\r\n if (delay > 0) await new Promise((r) => setTimeout(r, delay))\r\n\r\n try {\r\n logger.debug({ attempt, language: this.config.language }, 'Connecting to Deepgram')\r\n\r\n // v5: listen.v1.connect() is async; options accepted directly\r\n const connection = await this.client.listen.v1.connect({\r\n model: this.config.model,\r\n language: this.config.language,\r\n // v5: boolean-like options must be strings\r\n smart_format: \"true\",\r\n interim_results: String(this.config.interimResults),\r\n encoding: 'linear16',\r\n sample_rate: 16000,\r\n channels: 1,\r\n utterance_end_ms: '1000',\r\n ...(this.config.alternateLanguages.length > 0 && {\r\n detect_language: 'true',\r\n // language must be omitted when detect_language is enabled\r\n language: undefined,\r\n }),\r\n Authorization: `Token ${this.config.apiKey}`,\r\n })\r\n\r\n // v5: must explicitly call .connect() then await .waitForOpen()\r\n connection.connect()\r\n\r\n await Promise.race([\r\n connection.waitForOpen(),\r\n new Promise<never>((_, reject) =>\r\n setTimeout(\r\n () => reject(new STTConnectionError('deepgram', new Error('Connection timeout'))),\r\n 10_000\r\n )\r\n ),\r\n ])\r\n\r\n logger.info({ attempt, language: this.config.language }, 'Deepgram connected')\r\n return connection\r\n } catch (err) {\r\n if (err instanceof STTConnectionError) throw err\r\n throw new STTConnectionError('deepgram', err instanceof Error ? err : new Error(String(err)))\r\n }\r\n }\r\n}","/**\r\n * @voice-kit/core — Sarvam AI Indic STT Provider\r\n *\r\n * Sarvam AI provides state-of-the-art STT for Indian languages:\r\n * hi-IN, kn-IN, ta-IN, te-IN, mr-IN, bn-IN, gu-IN, pa-IN, or-IN\r\n *\r\n * Uses axios for HTTP calls. No official JS SDK — we use the REST API directly.\r\n */\r\n\r\nimport axios, { type AxiosInstance } from 'axios'\r\nimport { STTConnectionError, STTStreamError, STTLanguageNotSupportedError } from '../../errors'\r\nimport type { STTProvider, STTResult, STTConfig } from '../../types'\r\nimport pino from 'pino'\r\n\r\nconst logger = pino({ name: '@voice-kit/core:stt:sarvam' })\r\n\r\nconst SARVAM_API_BASE = 'https://api.sarvam.ai'\r\n\r\n/** All Indic languages supported by Sarvam AI. */\r\nconst SUPPORTED_LANGUAGES = [\r\n 'hi-IN', 'kn-IN', 'ta-IN', 'te-IN', 'mr-IN',\r\n 'bn-IN', 'gu-IN', 'pa-IN', 'or-IN', 'ml-IN',\r\n]\r\n\r\n/** Language code → Sarvam model mapping. */\r\nconst SARVAM_MODELS: Record<string, string> = {\r\n 'hi-IN': 'saarika:v1',\r\n 'kn-IN': 'saarika:v1',\r\n 'ta-IN': 'saarika:v1',\r\n 'te-IN': 'saarika:v1',\r\n 'mr-IN': 'saarika:v1',\r\n 'bn-IN': 'saarika:v1',\r\n 'gu-IN': 'saarika:v1',\r\n 'pa-IN': 'saarika:v1',\r\n 'or-IN': 'saarika:v1',\r\n 'ml-IN': 'saarika:v1',\r\n}\r\n\r\n/** Sarvam API response shape. */\r\ninterface SarvamTranscribeResponse {\r\n transcript: string\r\n language_code: string\r\n confidence: number\r\n}\r\n\r\n/**\r\n * Sarvam AI Indic STT provider.\r\n * @internal — obtained via createSTT('sarvam', config)\r\n */\r\nexport class SarvamSTTProvider implements STTProvider {\r\n readonly name = 'sarvam'\r\n readonly supportsStreaming = false // Sarvam REST API is batch-only\r\n readonly supportedLanguages = SUPPORTED_LANGUAGES\r\n\r\n private readonly http: AxiosInstance\r\n private readonly config: Required<STTConfig>\r\n\r\n constructor(config: STTConfig) {\r\n const apiKey = config.apiKey ?? process.env['SARVAM_API_KEY']\r\n if (!apiKey) throw new STTConnectionError('sarvam', new Error('SARVAM_API_KEY not set'))\r\n\r\n const language = config.language ?? 'hi-IN'\r\n if (!SUPPORTED_LANGUAGES.includes(language)) {\r\n throw new STTLanguageNotSupportedError('sarvam', language)\r\n }\r\n\r\n this.http = axios.create({\r\n baseURL: SARVAM_API_BASE,\r\n headers: {\r\n 'API-Subscription-Key': apiKey,\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n timeout: 30_000,\r\n })\r\n\r\n this.config = {\r\n language,\r\n alternateLanguages: config.alternateLanguages ?? [],\r\n apiKey,\r\n model: config.model ?? SARVAM_MODELS[language] ?? 'saarika:v1',\r\n wordTimestamps: false, // Sarvam doesn't support word timestamps yet\r\n interimResults: false,\r\n smartFormat: config.smartFormat ?? true,\r\n region: config.region ?? '',\r\n }\r\n }\r\n\r\n /**\r\n * Collects audio and transcribes via Sarvam batch API.\r\n * Sarvam doesn't support realtime streaming.\r\n *\r\n * @param audio Async iterable of 16kHz PCM buffers\r\n */\r\n async *transcribeStream(audio: AsyncIterable<Buffer>): AsyncIterable<STTResult> {\r\n const chunks: Buffer[] = []\r\n for await (const chunk of audio) chunks.push(chunk)\r\n const result = await this.transcribeBatch(Buffer.concat(chunks))\r\n yield result\r\n }\r\n\r\n /**\r\n * Transcribe a WAV/PCM audio buffer in an Indic language.\r\n *\r\n * @param audio 16kHz PCM or WAV buffer\r\n *\r\n * @example\r\n * ```ts\r\n * const stt = createSTT('sarvam', { language: 'ta-IN' })\r\n * const result = await stt.transcribeBatch(tamilAudioBuffer)\r\n * console.log(result.transcript) // Tamil text\r\n * ```\r\n */\r\n async transcribeBatch(audio: Buffer): Promise<STTResult> {\r\n const startMs = Date.now()\r\n\r\n try {\r\n logger.debug(\r\n { language: this.config.language, bytes: audio.length },\r\n 'Sarvam transcription request'\r\n )\r\n\r\n const form = new FormData()\r\n form.append('file', new Blob([audio], { type: 'audio/wav' }), 'audio.wav')\r\n form.append('language_code', this.config.language)\r\n form.append('model', this.config.model)\r\n if (this.config.smartFormat) {\r\n form.append('with_disfluencies', 'false')\r\n }\r\n\r\n const response = await this.http.post<SarvamTranscribeResponse>(\r\n '/speech-to-text',\r\n form\r\n )\r\n\r\n const data = response.data\r\n\r\n logger.info(\r\n { language: data.language_code, confidence: data.confidence, latencyMs: Date.now() - startMs },\r\n 'Sarvam transcription complete'\r\n )\r\n\r\n return {\r\n transcript: data.transcript,\r\n isFinal: true,\r\n confidence: data.confidence ?? 0.9,\r\n language: data.language_code ?? this.config.language,\r\n languageSwitchDetected: false,\r\n latencyMs: Date.now() - startMs,\r\n }\r\n } catch (err) {\r\n if (axios.isAxiosError(err)) {\r\n throw new STTStreamError(\r\n 'sarvam',\r\n new Error(`Sarvam API error: ${err.response?.status} ${JSON.stringify(err.response?.data)}`)\r\n )\r\n }\r\n throw new STTStreamError('sarvam', err)\r\n }\r\n }\r\n}","/**\r\n * @voice-kit/core — Hinglish language switch detector\r\n *\r\n * Detects mid-sentence Hindi↔English (Hinglish) code-switching in realtime STT output.\r\n * Pure algorithmic detection — no external API calls, no latency overhead.\r\n *\r\n * Detection signals:\r\n * 1. Devanagari Unicode range (U+0900–U+097F) for Hindi\r\n * 2. Latin character runs for English\r\n * 3. Common Hinglish transition patterns (e.g. \"main think karta hun\")\r\n * 4. Script boundary crossing mid-sentence\r\n */\r\n\r\nimport { EventEmitter } from 'node:events'\r\nimport pino from 'pino'\r\n\r\nconst logger = pino({ name: '@voice-kit/core:stt:language-detect' })\r\n\r\n/** Devanagari Unicode block: U+0900–U+097F */\r\nconst DEVANAGARI_RANGE = /[\\u0900-\\u097F]/\r\nconst DEVANAGARI_WORD = /[\\u0900-\\u097F]+/g\r\n\r\n/** Latin word (English) pattern */\r\nconst LATIN_WORD = /[a-zA-Z]+/g\r\n\r\n/** Minimum word run length to classify a language segment. */\r\nconst MIN_WORDS_FOR_CLASSIFICATION = 2\r\n\r\n/** Minimum confidence to emit a language switch event. */\r\nconst SWITCH_CONFIDENCE_THRESHOLD = 0.6\r\n\r\n/** Common Hinglish filler words that appear in both languages — ignored for classification. */\r\nconst NEUTRAL_TOKENS = new Set([\r\n 'ok', 'okay', 'haan', 'nahin', 'nahi', 'kya', 'hai', 'ho', 'na', 'toh',\r\n 'aur', 'ya', 'matlab', 'yani', 'i', 'a', 'the', 'is', 'are', 'and', 'or',\r\n])\r\n\r\nexport type LanguageCode = 'hi-IN' | 'en-IN' | 'unknown'\r\n\r\nexport interface LanguageSwitchEvent {\r\n /** Language switched from. */\r\n from: LanguageCode\r\n /** Language switched to. */\r\n to: LanguageCode\r\n /** Position in transcript where switch occurred (word index). */\r\n position: number\r\n /** Confidence of the detection 0–1. */\r\n confidence: number\r\n /** Full transcript at time of detection. */\r\n transcript: string\r\n /** Timestamp of detection. */\r\n detectedAt: Date\r\n}\r\n\r\ntype LanguageDetectorEventMap = {\r\n 'language.switched': [LanguageSwitchEvent]\r\n}\r\n\r\n/**\r\n * Hinglish language switch detector.\r\n *\r\n * Analyzes STT transcripts word-by-word in realtime.\r\n * Emits 'language.switched' events when a significant script change is detected.\r\n *\r\n * @example\r\n * ```ts\r\n * const detector = new LanguageSwitchDetector('en-IN')\r\n * detector.on('language.switched', ({ from, to, transcript }) => {\r\n * console.log(`Language switched: ${from} → ${to} in: \"${transcript}\"`)\r\n * })\r\n *\r\n * // Call on every STT final result\r\n * detector.analyze('main yeh kaam kal karonga I promise')\r\n * ```\r\n */\r\nexport class LanguageSwitchDetector extends EventEmitter<LanguageDetectorEventMap> {\r\n private currentLanguage: LanguageCode\r\n private readonly primaryLanguage: LanguageCode\r\n\r\n /** Rolling window of recent language classifications for smoothing. */\r\n private recentClassifications: LanguageCode[] = []\r\n private readonly windowSize = 5\r\n\r\n constructor(primaryLanguage: LanguageCode = 'en-IN') {\r\n super()\r\n this.primaryLanguage = primaryLanguage\r\n this.currentLanguage = primaryLanguage\r\n }\r\n\r\n /**\r\n * Analyze a transcript for language switches.\r\n * Should be called on every STT final result.\r\n *\r\n * @param transcript The transcribed text to analyze\r\n * @returns Detected language of the transcript\r\n */\r\n analyze(transcript: string): LanguageCode {\r\n const words = this.tokenize(transcript)\r\n if (words.length === 0) return this.currentLanguage\r\n\r\n const classification = this.classifySegment(words)\r\n const confidence = this.computeConfidence(words, classification)\r\n\r\n // Update rolling window\r\n this.recentClassifications.push(classification)\r\n if (this.recentClassifications.length > this.windowSize) {\r\n this.recentClassifications.shift()\r\n }\r\n\r\n // Smooth classification over rolling window\r\n const smoothed = this.smoothedLanguage()\r\n\r\n if (\r\n smoothed !== this.currentLanguage &&\r\n confidence >= SWITCH_CONFIDENCE_THRESHOLD &&\r\n smoothed !== 'unknown'\r\n ) {\r\n const event: LanguageSwitchEvent = {\r\n from: this.currentLanguage,\r\n to: smoothed,\r\n position: 0, // position in full conversation\r\n confidence,\r\n transcript,\r\n detectedAt: new Date(),\r\n }\r\n\r\n const prev = this.currentLanguage\r\n this.currentLanguage = smoothed\r\n\r\n logger.info(\r\n { from: prev, to: smoothed, confidence, transcript: transcript.slice(0, 50) },\r\n 'Language switch detected'\r\n )\r\n\r\n this.emit('language.switched', event)\r\n }\r\n\r\n return this.currentLanguage\r\n }\r\n\r\n /**\r\n * Analyze a transcript and return per-word language classification.\r\n * Useful for word-level Hinglish mixing visualization.\r\n *\r\n * @param transcript Text to analyze\r\n * @returns Array of { word, language } pairs\r\n */\r\n analyzeWords(transcript: string): Array<{ word: string; language: LanguageCode }> {\r\n const words = this.tokenize(transcript)\r\n return words.map((word) => ({\r\n word,\r\n language: this.classifyWord(word),\r\n }))\r\n }\r\n\r\n /** Reset to primary language (e.g., on new call). */\r\n reset(): void {\r\n this.currentLanguage = this.primaryLanguage\r\n this.recentClassifications = []\r\n }\r\n\r\n /** Current detected language. */\r\n get language(): LanguageCode {\r\n return this.currentLanguage\r\n }\r\n\r\n // ─── Private helpers ────────────────────────────────────────────────────────\r\n\r\n private tokenize(text: string): string[] {\r\n return text\r\n .toLowerCase()\r\n .split(/\\s+/)\r\n .filter((w) => w.length > 0 && !NEUTRAL_TOKENS.has(w))\r\n }\r\n\r\n private classifyWord(word: string): LanguageCode {\r\n if (DEVANAGARI_RANGE.test(word)) return 'hi-IN'\r\n if (/^[a-z]+$/.test(word)) return 'en-IN'\r\n return 'unknown'\r\n }\r\n\r\n private classifySegment(words: string[]): LanguageCode {\r\n let hindiCount = 0\r\n let englishCount = 0\r\n\r\n for (const word of words) {\r\n const lang = this.classifyWord(word)\r\n if (lang === 'hi-IN') hindiCount++\r\n else if (lang === 'en-IN') englishCount++\r\n }\r\n\r\n if (hindiCount === 0 && englishCount === 0) return 'unknown'\r\n if (hindiCount > englishCount) return 'hi-IN'\r\n if (englishCount > hindiCount) return 'en-IN'\r\n\r\n // Tie: defer to primary language\r\n return this.primaryLanguage\r\n }\r\n\r\n private computeConfidence(words: string[], classification: LanguageCode): number {\r\n const relevant = words.filter((w) => this.classifyWord(w) !== 'unknown')\r\n if (relevant.length < MIN_WORDS_FOR_CLASSIFICATION) return 0\r\n\r\n const matching = relevant.filter((w) => this.classifyWord(w) === classification)\r\n return matching.length / relevant.length\r\n }\r\n\r\n private smoothedLanguage(): LanguageCode {\r\n if (this.recentClassifications.length === 0) return this.primaryLanguage\r\n\r\n const counts: Record<LanguageCode, number> = { 'hi-IN': 0, 'en-IN': 0, 'unknown': 0 }\r\n for (const lang of this.recentClassifications) {\r\n counts[lang]++\r\n }\r\n\r\n // Find majority (excluding 'unknown')\r\n if (counts['hi-IN'] > counts['en-IN']) return 'hi-IN'\r\n if (counts['en-IN'] > counts['hi-IN']) return 'en-IN'\r\n return this.currentLanguage // no change on tie\r\n }\r\n}\r\n\r\n/**\r\n * Detect whether a transcript contains mixed Hindi+English (Hinglish).\r\n * Stateless convenience function for one-shot analysis.\r\n *\r\n * @param transcript Text to analyze\r\n * @returns True if both Devanagari and Latin characters are present\r\n *\r\n * @example\r\n * ```ts\r\n * isHinglish('main kal office jaaunga') // true\r\n * isHinglish('I will go to the office') // false\r\n * isHinglish('मैं कल ऑफिस जाऊंगा') // false (pure Hindi)\r\n * ```\r\n */\r\nexport function isInglish(transcript: string): boolean {\r\n const hasDevanagari = DEVANAGARI_RANGE.test(transcript)\r\n const hasLatin = /[a-zA-Z]/.test(transcript)\r\n return hasDevanagari && hasLatin\r\n}","/**\r\n * @voice-kit/core — OpenAI Whisper STT Provider (batch fallback)\r\n *\r\n * Uses @ai-sdk/openai for batch transcription. Does not support streaming.\r\n * Use as fallback for long-form audio or when Deepgram is unavailable.\r\n */\r\n\r\nimport { createOpenAI } from '@ai-sdk/openai'\r\nimport { STTStreamError, STTLanguageNotSupportedError } from '../../errors'\r\nimport type { STTProvider, STTResult, STTConfig } from '../../types'\r\nimport pino from 'pino'\r\n\r\nconst logger = pino({ name: '@voice-kit/core:stt:whisper' })\r\n\r\nconst WHISPER_LANGUAGES = [\r\n 'en', 'hi', 'ta', 'te', 'kn', 'mr', 'bn', 'gu', 'pa', 'ur',\r\n 'fr', 'de', 'es', 'pt', 'it', 'nl', 'pl', 'ru', 'ja', 'zh',\r\n]\r\n\r\n/**\r\n * OpenAI Whisper STT provider. Batch-only — does not support streaming.\r\n * @internal — obtained via createSTT('whisper', config)\r\n */\r\nexport class WhisperSTTProvider implements STTProvider {\r\n readonly name = 'whisper'\r\n readonly supportsStreaming = false\r\n readonly supportedLanguages = WHISPER_LANGUAGES\r\n\r\n private readonly config: Required<STTConfig>\r\n\r\n constructor(config: STTConfig) {\r\n const apiKey = config.apiKey ?? process.env['OPENAI_API_KEY']\r\n if (!apiKey) throw new STTStreamError('whisper', new Error('OPENAI_API_KEY not set'))\r\n\r\n const language = config.language ?? 'en-IN'\r\n // Whisper uses ISO 639-1 (2-char), strip region suffix\r\n const whisperLang = language.split('-')[0] ?? 'en'\r\n if (!WHISPER_LANGUAGES.includes(whisperLang)) {\r\n throw new STTLanguageNotSupportedError('whisper', language)\r\n }\r\n\r\n this.config = {\r\n language,\r\n alternateLanguages: config.alternateLanguages ?? [],\r\n apiKey,\r\n model: config.model ?? 'whisper-1',\r\n wordTimestamps: config.wordTimestamps ?? false,\r\n interimResults: false,\r\n smartFormat: false,\r\n region: '',\r\n }\r\n }\r\n\r\n /**\r\n * Streaming not supported by Whisper. Collects all audio then transcribes.\r\n * For realtime use, use createSTT('deepgram') instead.\r\n */\r\n async *transcribeStream(audio: AsyncIterable<Buffer>): AsyncIterable<STTResult> {\r\n const chunks: Buffer[] = []\r\n for await (const chunk of audio) chunks.push(chunk)\r\n const result = await this.transcribeBatch(Buffer.concat(chunks))\r\n yield result\r\n }\r\n\r\n /**\r\n * Transcribe a complete audio buffer via Whisper.\r\n *\r\n * @param audio WAV or PCM buffer\r\n */\r\n async transcribeBatch(audio: Buffer): Promise<STTResult> {\r\n const startMs = Date.now()\r\n const language = (this.config.language.split('-')[0] ?? 'en')\r\n\r\n try {\r\n logger.debug({ language, bytes: audio.length }, 'Whisper batch transcription')\r\n\r\n const openai = createOpenAI({ apiKey: this.config.apiKey })\r\n\r\n // Whisper API expects a File-like object\r\n const file = new File([audio], 'audio.wav', { type: 'audio/wav' })\r\n\r\n // Use raw OpenAI SDK for audio (Vercel AI SDK doesn't expose Whisper directly)\r\n const formData = new FormData()\r\n formData.append('file', file)\r\n formData.append('model', this.config.model)\r\n formData.append('language', language)\r\n if (this.config.wordTimestamps) {\r\n formData.append('timestamp_granularities[]', 'word')\r\n formData.append('response_format', 'verbose_json')\r\n }\r\n\r\n const response = await fetch('https://api.openai.com/v1/audio/transcriptions', {\r\n method: 'POST',\r\n headers: { Authorization: `Bearer ${this.config.apiKey}` },\r\n body: formData,\r\n })\r\n\r\n if (!response.ok) {\r\n throw new Error(`Whisper API error: ${response.status} ${response.statusText}`)\r\n }\r\n\r\n const data = await response.json() as { text: string; words?: Array<{ word: string; start: number; end: number }> }\r\n\r\n return {\r\n transcript: data.text,\r\n isFinal: true,\r\n confidence: 0.95, // Whisper doesn't return confidence\r\n language: this.config.language,\r\n languageSwitchDetected: false,\r\n words: this.config.wordTimestamps && data.words\r\n ? data.words.map((w) => ({\r\n word: w.word,\r\n startMs: w.start * 1000,\r\n endMs: w.end * 1000,\r\n confidence: 0.95,\r\n }))\r\n : undefined,\r\n latencyMs: Date.now() - startMs,\r\n }\r\n } catch (err) {\r\n if (err instanceof STTStreamError) throw err\r\n throw new STTStreamError('whisper', err)\r\n }\r\n }\r\n}","/**\r\n * @voice-kit/core — STT factory\r\n *\r\n * createSTT() is the ONLY public API for speech-to-text.\r\n * Never instantiate provider classes directly.\r\n */\r\n\r\nimport type { STTProvider, STTConfig } from '../types'\r\nimport { DeepgramSTTProvider } from './deepgram'\r\nimport { WhisperSTTProvider } from './whisper'\r\nimport { AssemblyAISTTProvider } from './assembly'\r\nimport { SarvamSTTProvider } from './sarvam'\r\n\r\n/**\r\n * Create an STT provider instance. This is the ONLY public API for STT.\r\n *\r\n * Provider selection guide:\r\n * - 'deepgram' → Default. Realtime streaming, best latency, supports en-IN + Indic\r\n * - 'sarvam' → Best accuracy for pure Indic languages (hi-IN, ta-IN, kn-IN, te-IN, mr-IN)\r\n * - 'assemblyai' → Best for long-form recordings (post-call analysis)\r\n * - 'whisper' → Fallback batch transcription, broad language support\r\n *\r\n * @example\r\n * ```ts\r\n * // Realtime English (India) — default\r\n * const stt = createSTT('deepgram', { language: 'en-IN' })\r\n *\r\n * // Realtime Hindi\r\n * const stt = createSTT('deepgram', { language: 'hi-IN' })\r\n *\r\n * // Best Indic accuracy\r\n * const stt = createSTT('sarvam', { language: 'ta-IN' })\r\n *\r\n * // Post-call recording\r\n * const stt = createSTT('assemblyai', { wordTimestamps: true })\r\n * ```\r\n */\r\nexport function createSTT(\r\n provider: 'deepgram' | 'whisper' | 'assemblyai' | 'sarvam',\r\n config?: STTConfig\r\n): STTProvider {\r\n const cfg = config ?? {}\r\n\r\n switch (provider) {\r\n case 'deepgram':\r\n return new DeepgramSTTProvider(cfg)\r\n case 'whisper':\r\n return new WhisperSTTProvider(cfg)\r\n case 'assemblyai':\r\n return new AssemblyAISTTProvider(cfg)\r\n case 'sarvam':\r\n return new SarvamSTTProvider(cfg)\r\n default: {\r\n const _exhaustive: never = provider\r\n throw new Error(`Unknown STT provider: ${String(_exhaustive)}`)\r\n }\r\n }\r\n}"]}
@@ -1,80 +0,0 @@
1
- import { E as ErrorSeverity } from './index-D3KfRXMP.cjs';
2
-
3
- /**
4
- * @voice-kit/core — Typed error hierarchy
5
- *
6
- * All VoiceKit errors extend VoiceKitError. Never throw raw Error.
7
- * Every error carries: code, message, provider, callId, retryable, severity.
8
- */
9
-
10
- /**
11
- * Base class for all VoiceKit errors. Provides structured context for
12
- * logging, alerting, and programmatic error handling.
13
- *
14
- * @example
15
- * ```ts
16
- * try {
17
- * await stt.transcribeBatch(audio)
18
- * } catch (err) {
19
- * if (err instanceof STTError) {
20
- * console.error(err.code, err.provider, err.retryable)
21
- * }
22
- * }
23
- * ```
24
- */
25
- declare class VoiceKitError extends Error {
26
- readonly code: string;
27
- readonly callId?: string;
28
- readonly provider?: string;
29
- readonly retryable: boolean;
30
- readonly severity: ErrorSeverity;
31
- readonly cause?: unknown;
32
- constructor(params: {
33
- code: string;
34
- message: string;
35
- callId?: string;
36
- provider?: string;
37
- retryable?: boolean;
38
- severity?: ErrorSeverity;
39
- cause?: unknown;
40
- });
41
- toJSON(): {
42
- name: string;
43
- code: string;
44
- message: string;
45
- callId: string | undefined;
46
- provider: string | undefined;
47
- retryable: boolean;
48
- severity: ErrorSeverity;
49
- };
50
- }
51
-
52
- /**
53
- * Errors from telephony providers.
54
- */
55
- declare class TelephonyError extends VoiceKitError {
56
- readonly to?: string;
57
- readonly from?: string;
58
- constructor(params: {
59
- code: string;
60
- message: string;
61
- callId?: string;
62
- provider?: string;
63
- retryable?: boolean;
64
- severity?: ErrorSeverity;
65
- cause?: unknown;
66
- to?: string;
67
- from?: string;
68
- });
69
- }
70
- declare class CallConnectionError extends TelephonyError {
71
- constructor(provider: string, to: string, cause?: unknown);
72
- }
73
- declare class CallNotFoundError extends TelephonyError {
74
- constructor(callId: string, provider: string);
75
- }
76
- declare class AudioTransportError extends TelephonyError {
77
- constructor(provider: string, cause?: unknown, callId?: string);
78
- }
79
-
80
- export { AudioTransportError as A, CallConnectionError as C, TelephonyError as T, VoiceKitError as V, CallNotFoundError as a };
@@ -1,80 +0,0 @@
1
- import { E as ErrorSeverity } from './index-D3KfRXMP.js';
2
-
3
- /**
4
- * @voice-kit/core — Typed error hierarchy
5
- *
6
- * All VoiceKit errors extend VoiceKitError. Never throw raw Error.
7
- * Every error carries: code, message, provider, callId, retryable, severity.
8
- */
9
-
10
- /**
11
- * Base class for all VoiceKit errors. Provides structured context for
12
- * logging, alerting, and programmatic error handling.
13
- *
14
- * @example
15
- * ```ts
16
- * try {
17
- * await stt.transcribeBatch(audio)
18
- * } catch (err) {
19
- * if (err instanceof STTError) {
20
- * console.error(err.code, err.provider, err.retryable)
21
- * }
22
- * }
23
- * ```
24
- */
25
- declare class VoiceKitError extends Error {
26
- readonly code: string;
27
- readonly callId?: string;
28
- readonly provider?: string;
29
- readonly retryable: boolean;
30
- readonly severity: ErrorSeverity;
31
- readonly cause?: unknown;
32
- constructor(params: {
33
- code: string;
34
- message: string;
35
- callId?: string;
36
- provider?: string;
37
- retryable?: boolean;
38
- severity?: ErrorSeverity;
39
- cause?: unknown;
40
- });
41
- toJSON(): {
42
- name: string;
43
- code: string;
44
- message: string;
45
- callId: string | undefined;
46
- provider: string | undefined;
47
- retryable: boolean;
48
- severity: ErrorSeverity;
49
- };
50
- }
51
-
52
- /**
53
- * Errors from telephony providers.
54
- */
55
- declare class TelephonyError extends VoiceKitError {
56
- readonly to?: string;
57
- readonly from?: string;
58
- constructor(params: {
59
- code: string;
60
- message: string;
61
- callId?: string;
62
- provider?: string;
63
- retryable?: boolean;
64
- severity?: ErrorSeverity;
65
- cause?: unknown;
66
- to?: string;
67
- from?: string;
68
- });
69
- }
70
- declare class CallConnectionError extends TelephonyError {
71
- constructor(provider: string, to: string, cause?: unknown);
72
- }
73
- declare class CallNotFoundError extends TelephonyError {
74
- constructor(callId: string, provider: string);
75
- }
76
- declare class AudioTransportError extends TelephonyError {
77
- constructor(provider: string, cause?: unknown, callId?: string);
78
- }
79
-
80
- export { AudioTransportError as A, CallConnectionError as C, TelephonyError as T, VoiceKitError as V, CallNotFoundError as a };