/** * Telegram draft stream for streaming message previews. * * Uses sendMessage + editMessageText, or sendMessageDraft when available (DM / supported clients), * with automatic fallback and optional materialize for draft transport. */ import type { Bot } from 'grammy'; export type TelegramDraftPreview = { text: string; parseMode?: 'HTML'; }; export interface TelegramDraftStreamOptions { api: Bot['api']; chatId: number | string; maxChars?: number; threadId?: number; replyToMessageId?: number; throttleMs?: number; /** Prefer draft API, real message edits, or auto (DM → draft when API exists). */ previewTransport?: 'auto' | 'message' | 'draft'; /** Minimum chars before first outbound preview (push notification quality). */ minInitialChars?: number; /** Optional preview renderer (e.g. markdown → HTML). */ renderText?: (text: string) => TelegramDraftPreview; /** Called when a late send resolves after forceNewMessage() rotated generations. */ onSupersededPreview?: (preview: { messageId: number; textSnapshot: string; parseMode?: 'HTML'; }) => void; warn?: (message: string) => void; /** When `renderText` is omitted, controls default text conversion (`HTML` = sanitize only). */ parseMode?: 'Markdown' | 'HTML' | undefined; } export interface TelegramDraftStream { update: (text: string) => void; flush: () => Promise; messageId: () => number | undefined; previewMode?: () => 'message' | 'draft'; previewRevision?: () => number; lastDeliveredText?: () => string; clear: () => Promise; stop: () => Promise; materialize?: () => Promise; forceNewMessage: () => void; sendMayHaveLanded?: () => boolean; } /** * Create a draft stream for streaming message previews. */ export declare function createTelegramDraftStream(options: TelegramDraftStreamOptions): TelegramDraftStream; export declare class DraftStreamManager { private streams; getOrCreate(key: string, options: TelegramDraftStreamOptions): TelegramDraftStream; get(key: string): TelegramDraftStream | undefined; stop(key: string): Promise; stopAll(): Promise; clear(key: string): Promise; } export declare const draftStreamManager: DraftStreamManager; export declare const __testing: { resetTelegramDraftStreamForTests(): void; };