/** * HTTP client types and interfaces for Telegram Bot API * * @module types/http-client */ /** * Content types supported by Telegram Bot API */ export type HttpContentType = 'json' | 'form' | 'multipart'; /** * HTTP request options */ export interface HttpRequestOptions { /** Request timeout in milliseconds */ timeout?: number; /** Number of retry attempts */ retries?: number; /** Delay between retries in milliseconds */ retryDelay?: number; /** Content type for the request */ contentType?: HttpContentType; /** Custom headers to include in the request */ headers?: Record; } /** * HTTP client configuration options */ export interface HttpClientOptions { /** Base URL for Telegram Bot API (default: https://api.telegram.org) */ baseUrl?: string; /** Default request timeout in milliseconds (default: 30000) */ timeout?: number; /** Default number of retry attempts (default: 3) */ retries?: number; /** Default delay between retries in milliseconds (default: 1000) */ retryDelay?: number; /** Whether to use exponential backoff for retries (default: true) */ exponentialBackoff?: boolean; /** Custom User-Agent header */ userAgent?: string; } /** * Telegram API error response */ export interface TelegramApiError { ok: false; error_code: number; description: string; parameters?: { retry_after?: number; migrate_to_chat_id?: number; }; } /** * Telegram API success response */ export interface TelegramApiResponse { ok: true; result: T; } /** * Combined Telegram API response type */ export type TelegramResponse = TelegramApiResponse | TelegramApiError; /** * HTTP client interface for making requests to Telegram Bot API */ export interface IHttpClient { /** * Execute an HTTP request to Telegram Bot API * @param token - Bot token * @param method - API method name (e.g., 'sendMessage') * @param params - Request parameters * @param options - Request-specific options * @returns Promise with full Telegram API response (including ok and result fields) */ request(token: string, method: string, params?: object, options?: HttpRequestOptions): Promise>; }