import { Core } from '@strapi/strapi'; import { VoicesListCacheVoice } from './voices-list-cache'; declare const DAY_MS = 86400000; export type NarrationPluginConfig = { apiKey?: string; modelId?: string; maxChars?: number; /** * If true, `textToSpeechMp3` returns a placeholder MP3 and never calls ElevenLabs (no TTS spend). * Dev-oriented: not shown on the plugin admin Connection card; use env / this config only. */ ttsDryRun?: boolean; /** If non-empty, skip ElevenLabs GET /v1/voices and use this list for admin pickers. */ voiceCatalog?: VoicesListCacheVoice[]; /** TTL for in-memory cache of GET /v1/voices (0 = always refetch). Default 24h. */ voicesListCacheTtlMs?: number; /** * Optional allowlist of provider ids (`elevenlabs`, `openai`, …) for tabs on the plugin * admin home page. Omit or leave empty to show every known provider (default). */ adminProviderTabs?: string[]; /** * Hard timeout (ms) for a single ElevenLabs TTS request — see `server/src/config/index.ts`. * Bounds the in-memory generate-lock hold time so a stuck network call cannot * wedge the entry+field+voice tuple permanently. */ ttsRequestTimeoutMs?: number; }; /** * Static voice list: plugin config `voiceCatalog` wins; else `ELEVENLABS_VOICE_CATALOG_JSON`. * When returned list is non-empty, the server never calls ElevenLabs for listing. */ export declare function resolveStaticVoiceCatalog(strapi: Core.Strapi): VoicesListCacheVoice[] | null; export declare const DEFAULT_TTS_REQUEST_TIMEOUT_MS: number; export declare function getTtsRequestTimeoutMs(strapi: Core.Strapi): number; export declare function getVoicesListCacheTtlMs(strapi: Core.Strapi): number; export { DAY_MS as DEFAULT_VOICES_LIST_CACHE_TTL_MS };