/** * @module transport/TelegramTransport * @description Universal transport implementation for Telegram Bot API * Supports both direct HTTP and queue-based communication modes */ import { TokensManager } from './TokensManager.js'; import type { HttpClientOptions } from '../types/http-client.types.js'; import type { TokensData, ITransport, TransportRequestOptions, MethodPriorities } from '../types/transport.types.js'; import type { IQueueProvider } from '../types/queue.types.js'; import type { ILogger, LoggerOptions, ILoggerAware } from '../types/logger.types.js'; /** * Transport configuration options */ export interface TelegramTransportOptions extends LoggerOptions { /** Bot tokens configuration (can be string for single token or TokensManager) */ tokens?: string | { default: string; } | TokensManager; /** HTTP client configuration */ httpClientOptions?: HttpClientOptions; /** Queue provider (optional, enables queue mode if provided) */ queueProvider?: IQueueProvider; /** Method priority configuration (optional) */ methodPriorities?: MethodPriorities; } /** * Universal transport implementation for Telegram Bot API * * Features: * - Direct HTTP mode (when queueProvider is not provided) * - Queue-based mode (when queueProvider is provided) * - Token management for multiple bots * - Method priority support for queue mode * - Implements ITransport interface * * @example * ```typescript * // Direct HTTP mode * const transport = new TelegramTransport({ * tokens: { default: 'BOT_TOKEN' } * }); * * // Queue-based mode * const transport = new TelegramTransport({ * tokens: { default: 'BOT_TOKEN' }, * queueProvider: await createRabbitMQProvider({...}) * }); * ``` */ export declare class TelegramTransport implements ITransport, ILoggerAware { private readonly httpClient; private readonly tokensManager; private readonly queueProvider?; private readonly methodPriorities; /** Logger instance - mutable to support LoggerBinder.bind() */ logger?: ILogger; /** * Create a new TelegramTransport instance * @param options - Transport configuration options */ constructor(options?: TelegramTransportOptions); /** * Get tokens manager instance */ get tokens(): TokensData; /** * Execute a transport request * Implements ITransport.request() method * * @param options - Request options * @returns Promise with API response */ request(options: TransportRequestOptions): Promise; /** * Enqueue request through queue provider * @param token - Bot token * @param methodName - API method name * @param params - Method parameters * @param contentType - Content type * @param routeId - Route ID for queue naming * @returns Promise with API response */ private enqueueRequest; /** * Get priority for API method * Uses custom priorities if configured, otherwise falls back to default categories * * Default priority levels: * - HIGH (8): answerCallbackQuery, answerInlineQuery - most time-sensitive * - MEDIUM (5): all other methods except getUpdates - normal operations * - LOW (2): getUpdates - background polling * * @param methodName - API method name * @returns Priority value (0-10, higher is more important) */ private getMethodPriority; /** * Resolve token by ID or get default token * @param tokenId - Token identifier (optional) * @returns Bot token or undefined */ private resolveToken; /** * Map ContentTypeSuffix to HttpContentType * @param contentType - Content type suffix from constants * @returns Mapped content type */ private mapContentType; /** * Add a bot token * @param tokenId - Unique identifier for the token * @param token - Bot token from BotFather * @returns True if token was added successfully */ addToken(tokenId: string, token: string): boolean; /** * Remove a bot token * @param tokenId - Token identifier to remove * @param defaultId - Optional new default token ID * @returns True if token was removed successfully */ removeToken(tokenId: string, defaultId?: string): boolean; /** * Set the default token * @param tokenId - Token identifier to set as default * @returns True if successfully set */ setDefaultToken(tokenId: string): boolean; /** * Get all registered token IDs * @returns Array of token IDs */ getTokenIds(): string[]; /** * Check if queue mode is enabled * @returns True if queue mode is enabled */ isQueueMode(): boolean; /** * Get queue statistics for a specific bot/route * @param routeId - Route ID (optional, uses 'default' if not provided) * @returns Queue statistics */ getQueueStats(routeId?: string): Promise; /** * Get queue provider instance (if available) * @returns Queue provider or undefined */ getQueueProvider(): IQueueProvider | undefined; /** * Close transport and cleanup resources * Implements ITransport.close() method */ close(): Promise; }