import { danger } from "../globals.js"; import { formatErrorMessage } from "../infra/errors.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import type { RuntimeEnv } from "../runtime.js"; export type TelegramApiLogger = (message: string) => void; type TelegramApiLoggingParams = { operation: string; fn: () => Promise; runtime?: RuntimeEnv; logger?: TelegramApiLogger; shouldLog?: (err: unknown) => boolean; }; const fallbackLogger = createSubsystemLogger("telegram/api"); function resolveTelegramApiLogger(runtime?: RuntimeEnv, logger?: TelegramApiLogger) { if (logger) return logger; if (runtime?.error) return runtime.error; return (message: string) => fallbackLogger.error(message); } export async function withTelegramApiErrorLogging({ operation, fn, runtime, logger, shouldLog, }: TelegramApiLoggingParams): Promise { try { return await fn(); } catch (err) { if (!shouldLog || shouldLog(err)) { const errText = formatErrorMessage(err); const log = resolveTelegramApiLogger(runtime, logger); log(danger(`telegram ${operation} failed: ${errText}`)); } throw err; } }