{"version":3,"sources":["../src/index.ts"],"names":["MastraVoice"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Readable } from 'stream';\nimport { MastraVoice } from '@mastra/core/voice';\n\ninterface GladiaConfig {\n  apiKey: string;\n}\n\ninterface GladiaListenOptions {\n  diarization?: boolean;\n  diarization_config?: {\n    number_of_speakers?: number;\n    min_speakers?: number;\n    max_speakers?: number;\n  };\n  translation?: boolean;\n  translation_config?: {\n    model?: 'base' | 'enhanced';\n    target_languages?: string[];\n  };\n  detect_language?: boolean;\n  enable_code_switching?: boolean;\n}\n\ninterface GladiaListenCallParams {\n  mimeType: string;\n  fileName: string;\n  options?: GladiaListenOptions;\n}\n\nexport class GladiaVoice extends MastraVoice {\n  private apiKey: string;\n  private baseUrl = 'https://api.gladia.io/v2';\n\n  constructor({ listeningModel }: { listeningModel?: GladiaConfig } = {}) {\n    const defaultApiKey = process.env.GLADIA_API_KEY;\n    super({\n      listeningModel: {\n        name: 'gladia',\n        apiKey: listeningModel?.apiKey ?? defaultApiKey,\n      },\n    });\n\n    this.apiKey = this.listeningModel?.apiKey as string;\n    if (!this.apiKey) throw new Error('GLADIA_API_KEY is not set.');\n  }\n\n  async speak(_input: string, _options?: Record<string, unknown>): Promise<any> {\n    throw new Error('Gladia does not support text-to-speech.');\n  }\n\n  async listen(input: Readable, { mimeType, fileName, options }: GladiaListenCallParams): Promise<string> {\n    return this.traced(async () => {\n      if (!fileName) {\n        throw new Error('fileName is required for audio processing');\n      }\n      if (!mimeType) {\n        throw new Error('mimeType is required for audio processing');\n      }\n      const chunks: Buffer[] = [];\n      for await (const chunk of input) {\n        chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);\n      }\n\n      const audioBuffer = Buffer.concat(chunks);\n      const form = new FormData();\n      form.append('audio', new Blob([audioBuffer], { type: mimeType }), fileName);\n\n      const uploadRes: any = await fetch(`${this.baseUrl}/upload/`, {\n        method: 'POST',\n        headers: { 'x-gladia-key': this.apiKey },\n        body: form,\n      });\n      if (!uploadRes.ok) {\n        throw new Error(`Upload failed: ${uploadRes.status} ${await uploadRes.text()}`);\n      }\n      const { audio_url } = await uploadRes.json();\n      const opts: GladiaListenOptions = {\n        diarization: true, // <-- default\n        ...options,\n      };\n\n      const transcribeRes: any = await fetch(`${this.baseUrl}/pre-recorded/`, {\n        method: 'POST',\n        headers: {\n          'x-gladia-key': this.apiKey,\n          'Content-Type': 'application/json',\n        },\n\n        body: JSON.stringify({ audio_url, ...opts }),\n      });\n\n      const { id } = await transcribeRes.json();\n\n      while (true) {\n        const pollRes: any = await fetch(`${this.baseUrl}/pre-recorded/${id}`, {\n          method: 'GET',\n          headers: {\n            'x-gladia-key': this.apiKey,\n            'Content-Type': 'application/json',\n          },\n        });\n\n        if (!pollRes.ok) {\n          throw new Error(`Polling failed: ${pollRes.status} ${await pollRes.text()}`);\n        }\n\n        const pollJson = await pollRes.json();\n        if (pollJson.status === 'done') {\n          const transcript = pollJson.result?.transcription?.full_transcript;\n          if (!transcript) throw new Error('No transcript found');\n          return transcript;\n        }\n\n        if (pollJson.status === 'error') {\n          throw new Error(`Gladia error: ${pollJson.error || 'Unknown'}`);\n        }\n\n        await new Promise(res => setTimeout(res, 1000));\n      }\n    }, 'voice.gladia.listen')();\n  }\n}\n\nexport type { GladiaConfig, GladiaListenOptions };\nexport type { GladiaListenCallParams };\n"]}