expo-edge-speech
Version:
Text-to-speech library for Expo using Microsoft Edge TTS service
440 lines • 12.7 kB
TypeScript
/**
* 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