/** * Speech provider extension SDK. * * Re-exports the SpeechProviderPlugin contract + registration helpers + the * media-shared HTTP client so extension authors have a stable, single-import * surface. * * DECISION: This module mirrors the channel SDK pattern at * `src/extensions/sdk/channel.ts` — extensions import `@xopcai/xopc/extension-sdk/speech` * (resolved via the package.json `exports` map) and never reach into deep paths. * * What lives here: * - SpeechProviderPlugin contract types * - registerSpeechProvider / getSpeechProvider / listSpeechProviders * - createOpenAiCompatibleSpeechProvider factory (most providers reuse it) * - HTTP helpers (postJsonRequest, fetchWithTimeoutGuarded, ProviderHttpError, ...) * - SSRF guard (assertSafeUrl, SsrfBlockedError) * - API key rotation (executeWithApiKeyRotation) * * What does NOT live here (deliberately): config schema types, agent service, * channel internals — those are channel-SDK / core-SDK responsibilities. */ export type { SpeechDirectiveTokenParseContext, SpeechDirectiveTokenParseResult, SpeechListVoicesRequest, SpeechModelOverridePolicy, SpeechProviderConfig, SpeechProviderConfiguredContext, SpeechProviderId, SpeechProviderOverrides, SpeechProviderPlugin, SpeechProviderResolveConfigContext, SpeechSynthesisRequest, SpeechSynthesisResult, SpeechSynthesisStreamRequest, SpeechSynthesisStreamResult, SpeechSynthesisTarget, SpeechVoiceOption, } from '../../voice/tts/speech-provider-types.js'; export { canonicalizeSpeechProviderId, getSpeechProvider, listSpeechProviders, registerSpeechProvider, } from '../../voice/tts/speech-registry.js'; export { createOpenAiCompatibleSpeechProvider, type OpenAiCompatibleSpeechProviderOptions, } from '../../voice/tts/openai-compatible-speech.js'; export { collectProviderApiKeysForExecution, executeWithApiKeyRotation, isRotatableAuthFailure, ProviderHttpError, assertOkOrThrowHttpError, assertOkOrThrowProviderError, createProviderHttpError, extractProviderErrorDetail, extractProviderRequestId, createProviderOperationDeadline, fetchWithTimeoutGuarded, getJsonRequest, normalizeBaseUrl, postJsonRequest, postMultipartRequest, waitProviderOperationPollInterval, SsrfBlockedError, assertSafeUrl, isPrivateIpAddress, } from '../../media-shared/http/index.js'; export type { ApiKeyRetryParams, ExecuteWithApiKeyRotationOptions, FetchWithGuardOptions, GetJsonRequestOptions, PostJsonRequestOptions, PostMultipartRequestOptions, ProviderHttpErrorParts, ProviderHttpRequestConfig, ProviderOperationDeadline, ResolvedSsrfTarget, SsrfGuardOptions, } from '../../media-shared/http/index.js';