newmax-utils
Version:
Utils & Libs for Newmax Tech
64 lines (63 loc) • 2.6 kB
JavaScript
;
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;