/**
 * @fileoverview ElevenLabs text-to-speech provider implementation.
 * Wraps the ElevenLabs v1 REST API to provide TTS synthesis and voice listing.
 * STT is not supported by ElevenLabs and will throw `MethodNotFound`.
 * @module src/services/speech/providers/elevenlabs.provider
 */
import type { ISpeechProvider } from '../core/ISpeechProvider.js';
import type { SpeechProviderConfig, SpeechToTextOptions, SpeechToTextResult, TextToSpeechOptions, TextToSpeechResult, Voice } from '../types.js';
/**
 * ElevenLabs TTS provider.
 * Implements {@link ISpeechProvider} for text-to-speech only (`supportsTTS = true`,
 * `supportsSTT = false`). Calls the ElevenLabs v1 REST API using `fetchWithTimeout`.
 *
 * Default voice: `EXAVITQu4vr4xnSDxMaL` (Bella)
 * Default model: `eleven_monolingual_v1`
 * Default timeout: 30 000 ms
 */
export declare class ElevenLabsProvider implements ISpeechProvider {
    readonly name = "elevenlabs";
    readonly supportsTTS = true;
    readonly supportsSTT = false;
    private readonly apiKey;
    private readonly baseUrl;
    private readonly defaultVoiceId;
    private readonly defaultModelId;
    private readonly timeout;
    /**
     * Construct an ElevenLabsProvider.
     *
     * @param config - Provider configuration. `config.apiKey` is required; all other
     *   fields fall back to ElevenLabs defaults.
     * @throws {McpError} With `InvalidParams` if `config.apiKey` is absent.
     */
    constructor(config: SpeechProviderConfig);
    /**
     * Synthesize speech from text using the ElevenLabs text-to-speech API.
     * Posts to `POST /text-to-speech/{voiceId}` and returns the raw MP3 audio as a Uint8Array.
     * Voice settings (stability, similarity_boost, style) are merged from `options.voice`
     * with provider defaults. Text is validated for non-empty and ≤ 5 000 characters.
     *
     * @param options - TTS options. `options.text` is required. `options.voice.voiceId`
     *   overrides the provider default voice; `options.modelId` overrides the default model.
     * @returns Resolved {@link TextToSpeechResult} with `audio` as a `Uint8Array`, `format` of
     *   `'mp3'`, `characterCount` equal to `options.text.length`, and `metadata` containing
     *   `voiceId`, `modelId`, and `provider`.
     * @throws {McpError} With `InvalidParams` for empty text or text > 5 000 chars.
     * @throws {McpError} With `InternalError` if the ElevenLabs API call fails.
     */
    textToSpeech(options: TextToSpeechOptions): Promise<TextToSpeechResult>;
    /**
     * Not supported — ElevenLabs is a TTS-only provider.
     *
     * @param _options - Unused.
     * @throws {McpError} Always, with `MethodNotFound`.
     */
    speechToText(_options: SpeechToTextOptions): Promise<SpeechToTextResult>;
    /**
     * Fetch all voices available in the authenticated ElevenLabs account.
     * Calls `GET /voices` and maps the API response to the canonical {@link Voice} shape,
     * extracting gender from the `labels.gender` field when present.
     *
     * @returns Resolved array of {@link Voice} objects. The array may be empty if the
     *   account has no voices configured.
     * @throws {McpError} With `InternalError` if the ElevenLabs API call fails.
     */
    getVoices(): Promise<Voice[]>;
    /**
     * Verify ElevenLabs API connectivity by attempting to fetch the voice list.
     * A successful `getVoices()` call indicates the API key is valid and the service
     * is reachable.
     *
     * @returns `true` if `getVoices()` resolves without error, `false` otherwise.
     *   Never rejects.
     */
    healthCheck(): Promise<boolean>;
}
//# sourceMappingURL=elevenlabs.provider.d.ts.map