/** * Long Polling Manager for Telegram Bot API * Manages multiple worker threads for polling different bot tokens * * @module agents/LongPollingManager */ import { EventEmitter } from 'events'; import type { LongPollingManagerOptions, WorkerState } from './types/polling-manager.types.js'; import type { ILogger, ILoggerAware } from '../types/logger.types.js'; /** * Long Polling Manager * * Manages worker threads for long polling multiple Telegram bot tokens. * Each token gets its own worker thread with independent offset tracking. * * Features: * - Multi-token support with separate workers * - Automatic restart on worker crash * - Offset persistence per token * - Webhook management (disable/restore) * - Event-driven architecture * - LoggerTree integration support * * @example * ```typescript * const manager = new LongPollingManager({ * tokensManager, * tokens: [ * { tokenId: 'bot1', timeout: 30, limit: 100 }, * { tokenId: 'bot2', timeout: 30, limit: 50 } * ], * onUpdate: async (update, routeId) => { * await client.processUpdate(update, { routeId }); * } * }); * * await manager.start(); * ``` */ export declare class LongPollingManager extends EventEmitter implements ILoggerAware { private readonly tokensManager; private readonly baseUrl; private readonly restoreWebhook; private readonly dropPendingUpdates; private readonly httpOptions?; /** Logger instance - mutable to support LoggerBinder.bind() */ logger?: ILogger; private readonly onUpdate?; private readonly onError?; private readonly onWorkerStarted?; private readonly onWorkerStopped?; private readonly workers; private readonly webhookStates; private running; private readonly workerPath; constructor(options: LongPollingManagerOptions); /** * Get all tokens as configs if not explicitly provided */ private getAllTokenConfigs; /** * Create a worker for specific token */ private createWorker; /** * Handle message from worker */ private handleWorkerMessage; /** * Handle worker error (uncaught exception) */ private handleWorkerError; /** * Handle worker exit */ private handleWorkerExit; /** * Restart worker with exponential backoff */ private restartWorker; /** * Start polling for all tokens */ start(): Promise; /** * Stop polling for all tokens */ stop(): Promise; /** * Disable webhooks for all tokens */ private disableWebhooks; /** * Restore webhooks for all tokens */ private restoreWebhooks; /** * Get current offset for token */ getOffset(tokenId: string): number; /** * Set offset for token */ setOffset(tokenId: string, offset: number): void; /** * Get all token IDs being polled */ getTokenIds(): string[]; /** * Get worker state for token */ getWorkerState(tokenId: string): Readonly | undefined; /** * Check if manager is running */ isRunning(): boolean; /** * Check if specific worker is running */ isWorkerRunning(tokenId: string): boolean; /** * Get statistics */ getStats(): { totalWorkers: number; runningWorkers: number; stoppedWorkers: number; failedWorkers: number; }; }