/** * Types for Long Polling Manager * * @module agents/types/polling-manager */ import type { Worker } from 'worker_threads'; import type { LoggerOptions } from '../../types/logger.types.js'; import type { TokensManager } from '../../transport/TokensManager.js'; import type { Update } from '../../api/types/Update.generated.js'; /** * Worker configuration for long polling */ export interface WorkerConfig { /** Bot token */ token: string; /** Route ID / Token ID for identifying this bot */ routeId: string; /** Telegram API base URL */ baseUrl: string; /** Current offset for getUpdates */ offset: number; /** Long polling timeout in seconds */ timeout: number; /** Maximum updates to fetch per request */ limit: number; /** Allowed update types */ allowedUpdates?: string[]; /** HTTP client options */ httpOptions?: { /** Request timeout in milliseconds */ timeout?: number; /** Number of retries */ retries?: number; /** Delay between retries in milliseconds */ retryDelay?: number; }; } /** * Internal worker state */ export interface WorkerState { /** Worker thread instance */ worker: Worker; /** Token ID this worker handles */ tokenId: string; /** Current offset */ offset: number; /** Number of restart attempts */ restartAttempts: number; /** Maximum restart attempts (null = unlimited) */ maxRestartAttempts: number | null; /** Worker is running */ running: boolean; /** Worker configuration */ config: WorkerConfig; /** Last error encountered by worker */ lastError?: Error; } /** * Token polling configuration */ export interface TokenPollingConfig { /** Token ID (also used as routeId) */ tokenId: string; /** Long polling timeout in seconds */ timeout?: number; /** Maximum updates per request */ limit?: number; /** Allowed update types */ allowedUpdates?: string[]; /** Maximum restart attempts for this worker */ maxRestartAttempts?: number | null; /** Initial offset */ initialOffset?: number; } /** * Long Polling Manager options */ export interface LongPollingManagerOptions extends LoggerOptions { /** Tokens manager instance */ tokensManager: TokensManager; /** Telegram API base URL */ baseUrl?: string; /** Token configurations (if not provided, polls all tokens) */ tokens?: TokenPollingConfig[]; /** Default timeout for all tokens */ defaultTimeout?: number; /** Default limit for all tokens */ defaultLimit?: number; /** Default allowed updates */ defaultAllowedUpdates?: string[]; /** Default max restart attempts */ defaultMaxRestartAttempts?: number | null; /** Restore webhooks on stop */ restoreWebhook?: boolean; /** Drop pending updates on start */ dropPendingUpdates?: boolean; /** HTTP client options */ httpOptions?: { timeout?: number; retries?: number; retryDelay?: number; }; /** Update handler callback */ onUpdate?: (update: Update, routeId: string) => Promise; /** Error handler callback */ onError?: (error: Error, routeId: string) => void; /** Worker started callback */ onWorkerStarted?: (routeId: string) => void; /** Worker stopped callback */ onWorkerStopped?: (routeId: string) => void; } /** * Worker message types */ export type WorkerMessageType = 'ready' | 'update' | 'offset-update' | 'error' | 'debug' | 'info' | 'warning'; /** * Message from worker to main thread */ export interface WorkerMessage { /** Message type */ type: WorkerMessageType; /** Update object (for 'update' type) */ update?: Update; /** Route ID */ routeId?: string; /** New offset (for 'offset-update' type) */ offset?: number; /** Error message (for 'error' type) */ message?: string; /** Error stack trace */ stack?: string; /** Update ID */ updateId?: number; } /** * Command from main thread to worker */ export interface WorkerCommand { /** Command type */ type: 'start' | 'stop' | 'pause' | 'resume'; } /** * Webhook state for restoration */ export interface WebhookState { /** Webhook info from getWebhookInfo */ info: unknown; /** Was webhook active before polling started */ wasActive: boolean; /** Timestamp when state was saved */ savedAt: number; }