/** * Polling Loop - Core logic for long polling * Extracted from worker for better testability * * @module agents/workers/PollingLoop */ import type { TelegramBotClient } from '../../client/TelegramBotClient.js'; import type { ITransport } from '../../types/transport.types.js'; import type { WorkerMessage } from '../types/polling-manager.types.js'; import type { Update } from '../../api/types/Update.generated.js'; /** * Polling loop configuration */ export interface PollingLoopConfig { /** Telegram bot client instance */ client: TelegramBotClient; /** Transport instance for cleanup */ transport: ITransport; /** Route ID for this worker */ routeId: string; /** Long polling timeout in seconds */ timeout: number; /** Maximum number of updates to fetch */ limit: number; /** Allowed update types */ allowedUpdates?: string[]; /** Initial offset */ initialOffset?: number; /** Message sender callback */ sendMessage: (msg: WorkerMessage) => void; } /** * Polling loop state */ export interface PollingLoopState { /** Current offset */ offset: number; /** Is polling running */ running: boolean; /** Is polling paused */ paused: boolean; } /** * Polling Loop class * Encapsulates the core long polling logic for testing */ export declare class PollingLoop { private readonly client; private readonly transport; private readonly routeId; private readonly timeout; private readonly limit; private readonly allowedUpdates?; private readonly sendMessage; private offset; private running; private paused; private loopPromise; private currentTimer; private currentTimerResolve; constructor(config: PollingLoopConfig); /** * Get current state */ getState(): PollingLoopState; /** * Start polling loop */ start(): void; /** * Wait for polling loop to complete (for testing) */ waitForCompletion(): Promise; /** * Stop polling loop */ stop(): void; /** * Pause polling loop */ pause(): void; /** * Resume polling loop */ resume(): void; /** * Set offset manually */ setOffset(offset: number): void; /** * Get current offset */ getOffset(): number; /** * Build getUpdates parameters (public for testing) */ buildGetUpdatesParams(): { offset: number; timeout: number; limit: number; allowed_updates?: string[]; }; /** * Process single batch of updates */ private processBatch; /** * Process array of updates (public for testing) */ processUpdates(updates: Update[]): Promise; /** * Main polling loop */ private runPollingLoop; /** * Cleanup resources */ private cleanup; /** * Sleep helper with cancellation support */ private sleep; }