@bitrix24/b24jssdk
Version:
Bitrix24 REST API JavaScript SDK
1 lines • 10.3 kB
Source Map (JSON)
{"version":3,"file":"telegram-handler.mjs","sources":["../../../../src/logger/handler/telegram-handler.ts"],"sourcesContent":["import type { Handler, HandlerOptions, LogRecord } from '../../types/logger'\nimport { LogLevel } from '../../types/logger'\nimport { AbstractHandler } from './abstract-handler'\nimport { TelegramFormatter } from '../formatter'\nimport { Environment, getEnvironment } from '../../tools/environment'\n\nexport interface TelegramHandlerOptions extends HandlerOptions {\n botToken: string\n chatId: string | number\n parseMode?: 'HTML' | 'Markdown' | 'MarkdownV2'\n disableNotification?: boolean\n disableWebPagePreview?: boolean\n useStyles?: boolean\n warnInBrowser?: boolean\n}\n\n/**\n * Telegram Handler\n *\n * Sends logs to Telegram chat.\n * The browser displays a warning in the console.\n * In Node.js, sends a message via the Telegram Bot API.\n */\nexport class TelegramHandler extends AbstractHandler implements Handler {\n protected botToken: string\n protected chatId: string | number\n protected parseMode: 'HTML' | 'Markdown' | 'MarkdownV2'\n protected disableNotification: boolean\n protected disableWebPagePreview: boolean\n protected readonly environment: Environment\n protected warnInBrowser: boolean\n\n constructor(\n level: LogLevel = LogLevel.ERROR,\n options: TelegramHandlerOptions\n ) {\n super(level, options.bubble)\n\n if (!options.botToken) {\n throw new Error('botToken is required for TelegramHandler')\n }\n\n if (!options.chatId) {\n throw new Error('chatId is required for TelegramHandler')\n }\n\n this.botToken = options.botToken\n this.chatId = options.chatId\n this.parseMode = options.parseMode || 'HTML'\n this.disableNotification = options.disableNotification || false\n this.disableWebPagePreview = options.disableWebPagePreview || true\n this.environment = getEnvironment()\n this.warnInBrowser = options.warnInBrowser !== false // By default, we warn you in the browser\n\n // Set the default formatter\n this.setFormatter(new TelegramFormatter(this.parseMode === 'HTML'))\n }\n\n /**\n * @inheritDoc\n */\n public override async handle(record: LogRecord): Promise<boolean> {\n const formatter = this.getFormatter()\n if (!formatter) {\n console.error('TelegramHandler: No formatter set')\n return false\n }\n\n const message = formatter.format(record)\n\n // Depending on the environment, we process it differently.\n if (this.environment === Environment.BROWSE) {\n return this._handleInBrowser(message, record)\n } else if (this.environment === Environment.NODE) {\n return this._handleInNode(message, record)\n }\n\n console.warn('TelegramHandler: Unknown environment, using fallback')\n return this._handleFallback(message)\n }\n\n /**\n * Processing in the browser\n */\n protected async _handleInBrowser(_message: string, record: LogRecord): Promise<boolean> {\n if (this.warnInBrowser) {\n const warningMessage\n = `⚠️ TelegramHandler: Cannot send logs to Telegram from browser environment.\\n`\n + `This would expose your bot token. Consider disabling this handler in browser.\\n`\n + `Log message: ${record.message}\\n`\n + `If you need to send logs from browser, use a proxy server.`\n\n console.warn(warningMessage)\n\n // We also display a styled message for the developer\n const style = 'color: #FF9800; background: #FFF3E0; padding: 8px; border: 1px solid #FFB74D; border-radius: 4px;'\n console.log('%cTelegram Handler Warning', style, warningMessage)\n }\n\n // In the browser, we always return false, since the message was not sent.\n return false\n }\n\n /**\n * Processing in Node.js\n */\n protected async _handleInNode(message: string, _record: LogRecord): Promise<boolean> {\n try {\n const url = `https://api.telegram.org/bot${this.botToken}/sendMessage`\n const config = JSON.stringify({\n chat_id: this.chatId,\n text: message,\n parse_mode: this.parseMode,\n disable_notification: this.disableNotification,\n disable_web_page_preview: this.disableWebPagePreview\n })\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: config\n })\n\n const result = await response.json()\n\n if (!result.ok) {\n console.error('TelegramHandler: Failed to send message', result)\n return false\n }\n\n return true\n } catch (error) {\n console.error('TelegramHandler: Error sending message', error)\n return false\n }\n }\n\n /**\n * Fallback processing for unknown environments\n */\n protected async _handleFallback(message: string): Promise<boolean> {\n console.log('TelegramHandler (fallback):', message)\n return false\n }\n\n public updateSettings(options: Partial<TelegramHandlerOptions>): this {\n if (options.botToken) this.botToken = options.botToken\n if (options.chatId) this.chatId = options.chatId\n if (options.parseMode) this.parseMode = options.parseMode\n if (options.disableNotification !== undefined) {\n this.disableNotification = options.disableNotification\n }\n if (options.disableWebPagePreview !== undefined) {\n this.disableWebPagePreview = options.disableWebPagePreview\n }\n if (options.warnInBrowser !== undefined) {\n this.warnInBrowser = options.warnInBrowser\n }\n return this\n }\n\n /**\n * Get current environment\n */\n public getEnvironment(): Environment {\n return this.environment\n }\n\n /**\n * Check if the Telegram API is available\n */\n public async testConnection(): Promise<boolean> {\n if (this.environment === 'browser') {\n console.warn('TelegramHandler: Cannot test connection in browser environment')\n return false\n }\n\n try {\n const url = `https://api.telegram.org/bot${this.botToken}/getMe`\n const response = await fetch(url)\n const result = await response.json()\n return result.ok === true\n } catch (error) {\n console.error('TelegramHandler: Test connection failed', error)\n return false\n }\n }\n}\n"],"names":[],"mappings":"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"}