UNPKG

expo-edge-speech

Version:

Text-to-speech library for Expo using Microsoft Edge TTS service

440 lines 12.7 kB
/** * Parameter validation ranges for user-facing API options. * These define the numeric input ranges for rate, pitch, and volume. * Conversion to SSML percentage strings is handled elsewhere (e.g., ssmlUtils.ts). */ export declare const PARAMETER_RANGES: Readonly<{ rate: Readonly<{ min: 0; max: 2; default: 1; }>; pitch: Readonly<{ min: 0; max: 2; default: 1; }>; volume: Readonly<{ min: 0; max: 2; default: 1; }>; }>; /** * Default voice to use if not specified by the user. * Using multilingual Emma as the default voice. */ export declare const DEFAULT_VOICE = "en-US-EmmaMultilingualNeural"; /** * Default timeout for speech operations (5000ms) */ export declare const DEFAULT_TIMEOUT = 5000; /** * Maximum text length for speech input (1000 characters). * This is a client-side limit for the input string to the speak method. * The Edge TTS service itself handles further chunking based on byte length * and SSML overhead. */ export declare const MAX_TEXT_LENGTH = 1000; /** * Edge TTS Trusted Client Token */ export declare const EDGE_TTS_TRUSTED_CLIENT_TOKEN = "6A5AA1D4EAFF4E9FB37E23D68491D6F4"; /** * Edge TTS WebSocket URL template with required query parameters * Includes all required authentication and connection parameters */ export declare const EDGE_TTS_WEBSOCKET_URL_TEMPLATE = "wss://speech.platform.bing.com/consumer/speech/synthesize/readaloud/edge/v1?TrustedClientToken=6A5AA1D4EAFF4E9FB37E23D68491D6F4&Sec-MS-GEC={secMsGec}&Sec-MS-GEC-Version={secMsGecVersion}&ConnectionId={connectionId}"; /** * Base URL for Edge TTS services */ export declare const EDGE_TTS_BASE_URL = "speech.platform.bing.com/consumer/speech/synthesize/readaloud"; /** * Chromium version for Sec-MS-GEC-Version header */ export declare const CHROMIUM_VERSION = "130.0.2849.68"; /** * SEC-MS-GEC version format template */ export declare const SEC_MS_GEC_VERSION = "1-130.0.2849.68"; /** * Edge TTS Voice List API endpoint */ export declare const EDGE_TTS_VOICE_LIST_URL = "https://speech.platform.bing.com/consumer/speech/synthesize/readaloud/voices/list?trustedclienttoken=6A5AA1D4EAFF4E9FB37E23D68491D6F4"; /** * Required WebSocket message headers */ export declare const WEBSOCKET_HEADERS: Readonly<{ REQUEST_ID: "X-RequestId"; TIMESTAMP: "X-Timestamp"; CONTENT_TYPE: "Content-Type"; PATH: "Path"; }>; /** * Connection ID generation format * Note: this can be any random 32-character string. We choose to use UUIDv4 without dashes here. * Format: UUID v4 without dashes (32-character hexadecimal string) * Example: a1b2c3d4e5f67890abcdef1234567890 */ export declare const CONNECTION_ID_FORMAT: Readonly<{ TYPE: "UUID_V4_NO_DASHES"; LENGTH: 32; FORMAT: "hex"; DESCRIPTION: "Random UUID v4 without dashes used for connection tracking"; }>; /** * WebSocket message paths */ export declare const MESSAGE_PATHS: Readonly<{ SPEECH_CONFIG: "speech.config"; SSML: "ssml"; RESPONSE: "response"; TURN_START: "turn.start"; TURN_END: "turn.end"; AUDIO_METADATA: "audio.metadata"; }>; /** * Content types for WebSocket messages */ export declare const CONTENT_TYPES: Readonly<{ JSON: "application/json; charset=utf-8"; SSML: "application/ssml+xml"; }>; /** * Default audio format for Edge TTS * This is the only format supported by Edge TTS for this endpoint. */ export declare const DEFAULT_AUDIO_FORMAT = "audio-24khz-48kbitrate-mono-mp3"; /** * Supported audio formats for Edge TTS * Edge TTS only supports MP3 at 24kHz 48kbps mono */ export declare const AUDIO_FORMATS: Readonly<{ MP3_24KHZ_48KBPS: "audio-24khz-48kbitrate-mono-mp3"; }>; /** * Edge TTS connection configuration */ export declare const EDGE_TTS_CONFIG: Readonly<{ connectionTimeout: 10000; audioTimeout: 5000; maxRetries: 3; retryDelay: 1000; connectionPoolSize: 1; maxConcurrentConnections: 1; keepAliveInterval: 30000; }>; /** * Voice caching configuration */ export declare const VOICE_CACHING: Readonly<{ VOICE_LIST_TTL: number; VOICE_LIST_REFRESH_INTERVAL: number; MAX_CACHE_SIZE: 1000; ENABLE_FALLBACK_CACHE: true; }>; /** * Timestamp format constants for Edge TTS WebSocket messages */ export declare const TIMESTAMP_FORMAT: Readonly<{ REQUIRED_SUFFIX: "Z"; MICROSECOND_PRECISION: true; MULTIPLIER: 1000000; EXAMPLE: "1234567890123456Z"; }>; /** * Enhanced authentication constants from corrected protocol */ export declare const AUTHENTICATION: Readonly<{ TRUSTED_CLIENT_TOKEN: "6A5AA1D4EAFF4E9FB37E23D68491D6F4"; SEC_MS_GEC_VERSION_TEMPLATE: "1-{version}"; CHROME_VERSION_CURRENT: "130.0.2849.68"; CHROME_VERSION_EDGE_TESTED: "91.0.864.41"; ORIGIN_EXTENSION: "chrome-extension://jdiccldimpdaibmpdkjnbmckianbfold"; }>; /** * WebSocket message configuration */ export declare const WEBSOCKET_CONFIG: Readonly<{ binaryType: BinaryType; protocols: never[]; closeTimeout: 5000; }>; /** * Audio processing configuration */ export declare const AUDIO_CONFIG: Readonly<{ defaultFormat: "audio-24khz-48kbitrate-mono-mp3"; enableWordBoundary: true; enableSentenceBoundary: false; bufferSize: 4096; maxBufferSize: 65536; minBufferSize: 1024; streamingChunkSize: 8192; sampleRate: 24000; bitRate: 48000; channels: 1; }>; /** * Enhanced audio streaming and buffer management constants */ export declare const AUDIO_STREAMING: Readonly<{ CHUNK_PROCESSING: { MIN_CHUNK_SIZE: number; MAX_CHUNK_SIZE: number; PREFERRED_CHUNK_SIZE: number; BUFFER_THRESHOLD: number; }; PLAYBACK_BUFFER: { PRELOAD_SIZE: number; UNDERRUN_THRESHOLD: number; OVERRUN_PROTECTION: number; }; STREAMING_TIMEOUT: { CHUNK_TIMEOUT: number; TOTAL_TIMEOUT: number; SILENCE_TIMEOUT: number; }; }>; /** * Message formatting requirements */ export declare const MESSAGE_FORMAT: Readonly<{ LINE_ENDING: "\r\n"; HEADER_SEPARATOR: "\r\n\r\n"; HEADER_VALUE_SEPARATOR: ":"; }>; /** * Binary message structure constants */ export declare const BINARY_MESSAGE: Readonly<{ HEADER_LENGTH_BYTES: 2; HEADER_LENGTH_TYPE: "Int16"; AUDIO_FORMAT: "MP3"; }>; /** * Enhanced binary message parsing constants with specific endianness details */ export declare const BINARY_MESSAGE_PARSING: Readonly<{ HEADER: { LENGTH_BYTES: number; LENGTH_TYPE: string; ENDIANNESS: string; ENCODING: string; }; AUDIO: { FORMAT: string; ENCODING: string; EXPECTED_MAGIC: number[]; }; VALIDATION: { MIN_HEADER_LENGTH: number; MAX_HEADER_LENGTH: number; MIN_AUDIO_LENGTH: number; }; }>; /** * Message path validation constants */ export declare const MESSAGE_PATH_VALIDATION: Readonly<{ VALID_PATHS: string[]; REQUIRED_PATHS: string[]; RESPONSE_PATHS: string[]; PATH_SEPARATOR: "."; }>; /** * Content type validation constants */ export declare const CONTENT_TYPE_VALIDATION: Readonly<{ VALID_TYPES: string[]; CHARSET_REQUIRED: string[]; DEFAULT_CHARSET: "utf-8"; }>; /** * SSML namespace requirement */ export declare const SSML_NAMESPACE = "http://www.w3.org/2001/10/synthesis"; /** * Voice name format pattern for Microsoft Edge TTS * Format: "Microsoft Server Speech Text to Speech Voice (lang-region, NameNeural)" */ export declare const VOICE_NAME_FORMAT: Readonly<{ PREFIX: "Microsoft Server Speech Text to Speech Voice"; PATTERN: "Microsoft Server Speech Text to Speech Voice ({lang}-{region}, {name})"; EXAMPLE: "Microsoft Server Speech Text to Speech Voice (en-US, AriaNeural)"; }>; /** * Required WebSocket connection headers */ export declare const WSS_HEADERS: Readonly<{ USER_AGENT: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"; ORIGIN: "chrome-extension://jdiccldimpdaibmpdkjnbmckianbfold"; PRAGMA: "no-cache"; CACHE_CONTROL: "no-cache"; ACCEPT_ENCODING: "gzip, deflate, br"; ACCEPT_LANGUAGE: "en-US,en;q=0.9"; }>; /** * Enhanced connection lifecycle constants */ export declare const CONNECTION_LIFECYCLE: Readonly<{ TIMEOUTS: { CONNECTION_ESTABLISHMENT: number; MESSAGE_RESPONSE: number; TOTAL_SYNTHESIS: number; TURN_END_WAIT: number; GRACEFUL_CLOSE: number; }; RETRY_LIMITS: { CONNECTION_ATTEMPTS: number; AUTH_FAILURES: number; MESSAGE_RESENDS: number; CLOCK_SKEW_ADJUSTMENTS: number; }; POOL_MANAGEMENT: { MAX_POOL_SIZE: number; CONNECTION_REUSE: boolean; IDLE_TIMEOUT: number; CLEANUP_INTERVAL: number; }; }>; /** * Enhanced SSML validation and processing constants */ export declare const SSML_VALIDATION: Readonly<{ REQUIRED_ATTRIBUTES: { SPEAK: string[]; VOICE: string[]; }; NAMESPACE_VALIDATION: { REQUIRED_NAMESPACE: string; NAMESPACE_PREFIX: string; VALIDATION_REQUIRED: boolean; }; PROSODY_RANGES: { RATE: { MIN_RELATIVE: number; MAX_RELATIVE: number; UNIT: string; RELATIVE_PATTERN: RegExp; }; PITCH: { MIN_RELATIVE: number; MAX_RELATIVE: number; UNIT: string; RELATIVE_PATTERN: RegExp; HZ_PATTERN: RegExp; }; VOLUME: { MIN_RELATIVE: number; MAX_RELATIVE: number; UNIT: string; RELATIVE_PATTERN: RegExp; }; }; TEXT_LIMITS: { MAX_SSML_LENGTH: number; MAX_VOICE_ELEMENTS: number; MAX_PROSODY_NESTING: number; }; }>; /** * Sec-MS-GEC token generation constants */ export declare const SEC_MS_GEC_GENERATION: Readonly<{ WIN_EPOCH: 11644473600; S_TO_NS: 1000000000; CLOCK_SKEW_MINUTES: 5; CLOCK_SKEW_SECONDS: 300; CLOCK_SKEW_TICKS: 3000000000; HASH_INPUT_FORMAT: "{ticks}MSEdgeSpeechTTS"; HASH_ALGORITHM: "SHA-256"; RESULT_FORMAT: "uppercase"; }>; /** * Word boundary offset padding compensation * Used to compensate for Edge TTS service padding in word boundary events */ export declare const WORD_BOUNDARY_OFFSET_COMPENSATION = 8750000; /** * Timing conversion constants for Edge TTS */ export declare const TIMING_CONVERSION: Readonly<{ TICKS_PER_MILLISECOND: 10000; TICKS_PER_SECOND: 10000000; MS_TO_TICKS_MULTIPLIER: 10000; TICKS_TO_MS_DIVISOR: 10000; }>; /** * Edge TTS Exception types */ export declare const EDGE_TTS_EXCEPTIONS: Readonly<{ NO_AUDIO_RECEIVED: "NoAudioReceived"; UNEXPECTED_RESPONSE: "UnexpectedResponse"; UNKNOWN_RESPONSE: "UnknownResponse"; WEBSOCKET_ERROR: "WebSocketError"; SKEW_ADJUSTMENT_ERROR: "SkewAdjustmentError"; }>; /** * Enhanced error handling and diagnostic constants */ export declare const ERROR_HANDLING: Readonly<{ EXCEPTION_CATEGORIES: { AUTHENTICATION: string[]; NETWORK: string[]; PROTOCOL: string[]; AUDIO: string[]; }; RETRY_STRATEGIES: { AUTHENTICATION_ERRORS: { MAX_RETRIES: number; BACKOFF_MS: number[]; RESET_TOKEN: boolean; }; NETWORK_ERRORS: { MAX_RETRIES: number; BACKOFF_MS: number[]; RESET_CONNECTION: boolean; }; PROTOCOL_ERRORS: { MAX_RETRIES: number; BACKOFF_MS: number[]; RESET_CONNECTION: boolean; }; }; DIAGNOSTIC_INFO: { INCLUDE_HEADERS: boolean; INCLUDE_TIMESTAMP: boolean; INCLUDE_CONNECTION_ID: boolean; TRUNCATE_LARGE_PAYLOADS: number; }; }>; /** * Protocol compliance validation constants */ export declare const PROTOCOL_COMPLIANCE: Readonly<{ WEBSOCKET_SUBPROTOCOLS: never[]; REQUIRED_MESSAGE_HEADERS: string[]; OPTIONAL_MESSAGE_HEADERS: string[]; HEADER_VALIDATION: { REQUEST_ID_FORMAT: RegExp; TIMESTAMP_FORMAT: RegExp; CONTENT_TYPE_STRICT: boolean; PATH_CASE_SENSITIVE: boolean; }; MESSAGE_ORDER: { REQUIRED_SEQUENCE: string[]; EXPECTED_RESPONSES: string[]; VALIDATE_ORDER: boolean; }; }>; /** * Binary message parsing format constants */ export declare const BINARY_PARSING: Readonly<{ HEADER_LENGTH_BYTES: 2; HEADER_ENCODING: "big"; CONTENT_TYPE_AUDIO: "audio/mpeg"; PATH_AUDIO: "audio"; }>; //# sourceMappingURL=constants.d.ts.map