UNPKG

newmax-utils

Version:
64 lines (63 loc) 2.6 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const winston_transport_1 = __importDefault(require("winston-transport")); const env_1 = require("../configs/env"); const winston_config_1 = require("../configs/winston.config"); const tgtopics_1 = require("../enums/tgtopics"); class TelegramTransport extends winston_transport_1.default { _level; _levels; _env; _token; _thread_id; _require; constructor(options, require) { super(options); this._env = env_1.env.NODE_ENV || 'development'; this._token = env_1.env.TELEGRAM_BOT; if (!this._token) throw new Error('Telegram token is required. Setup env: TELEGRAM_BOT'); if (!options.thread_id) throw new Error('Telegram topic id is required: thread_id'); this._require = require; this._level = options.level || winston_config_1.winstonConfig.levelsEnums.error; this._levels = winston_config_1.winstonConfig.levels; this._thread_id = options.thread_id; } log(info, callback) { const { level, service, fn, message, stack } = info; const levelWeigth = this._levels[this._level] >= this._levels[level]; if (!this._require && (!levelWeigth || this._env !== 'production')) return callback(); const requestBody = JSON.stringify(info, null, 2); const emoji = winston_config_1.winstonConfig.emoji[level]; let resMessage = `${emoji} <code>${level}</code> <code>${service}</code> <code>${fn}</code>`; resMessage += `\n\n${message}`; stack && (resMessage += `\n\n<pre>${stack}</pre>`); resMessage += `\n\nRequest body\n<pre><code class="language-javascript">${requestBody}</code></pre>`; this._sendMessage(resMessage); callback(); } /** * Actual method that sends the given message to Telegram. */ _sendMessage(message) { const url = `https://api.telegram.org/bot${this._token}/sendMessage`; const body = JSON.stringify({ chat_id: tgtopics_1.tgChatId, message_thread_id: this._thread_id, text: message, parse_mode: 'HTML', }); const requestOptions = { method: 'POST', headers: { 'Content-Type': 'application/json; charset=utf-8' }, body, }; fetch(url, requestOptions); } } exports.default = TelegramTransport;