/** * A minimal Telegram Bot API client (fetch-based, zero dependencies). * * Just the surface a shuttle needs: identity, long-poll, send, edit, typing. * Keeping it dependency-free (no grammY) matches Loom's ethos and makes the * whole channel unit-testable with an injected fetch — no live network. */ export interface TelegramApiOptions { readonly token: string; readonly fetch?: typeof fetch; /** Override for tests / self-hosted Bot API servers. Default api.telegram.org. */ readonly baseUrl?: string; } export interface TgUser { readonly id: number; readonly is_bot: boolean; readonly username?: string; readonly first_name?: string; } export interface TgChat { readonly id: number; readonly type: 'private' | 'group' | 'supergroup' | 'channel'; readonly title?: string; readonly username?: string; } export interface TgMessageEntity { readonly type: string; readonly offset: number; readonly length: number; readonly user?: TgUser; } export interface TgMessage { readonly message_id: number; readonly from?: TgUser; readonly chat: TgChat; readonly text?: string; readonly caption?: string; readonly entities?: TgMessageEntity[]; readonly message_thread_id?: number; readonly reply_to_message?: TgMessage; } export interface TgUpdate { readonly update_id: number; readonly message?: TgMessage; readonly edited_message?: TgMessage; } export declare class TelegramApi { private readonly base; private readonly doFetch; constructor(opts: TelegramApiOptions); private call; getMe(): Promise; getUpdates(offset: number, timeout?: number): Promise; sendMessage(chatId: number | string, text: string, opts?: { messageThreadId?: number; }): Promise; editMessageText(chatId: number | string, messageId: number, text: string): Promise; sendChatAction(chatId: number | string, action?: string): Promise; } //# sourceMappingURL=api.d.ts.map