@bitrix24/b24jssdk
Version:
Bitrix24 REST API JavaScript SDK
104 lines (100 loc) • 3.22 kB
JavaScript
/**
* @package @bitrix24/b24jssdk
* @version 1.1.0
* @copyright (c) 2026 Bitrix24
* @license MIT
* @see https://github.com/bitrix24/b24jssdk
* @see https://bitrix24.github.io/b24jssdk/
*/
import { AbstractFormatter } from './abstract-formatter.mjs';
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
class TelegramFormatter extends AbstractFormatter {
static {
__name(this, "TelegramFormatter");
}
useHtml;
maxMessageLength;
constructor(useHtml = true, dateFormat = "YYYY-MM-DD HH:mm:ss", maxMessageLength = 4096) {
super(dateFormat);
this.useHtml = useHtml;
this.maxMessageLength = maxMessageLength;
}
format(record) {
let message = this._formatBaseMessage(record);
const additionalInfo = this._formatAdditionalInfo(record);
if (additionalInfo) {
message += `
${additionalInfo}`;
}
if (message.length > this.maxMessageLength) {
message = message.substring(0, this.maxMessageLength - 3) + "...";
}
return message;
}
_formatBaseMessage(record) {
const date = this._formatDate(record.timestamp);
const level = record.levelName;
if (this.useHtml) {
return `<b>${level}</b> | <code>${record.channel}</code>
<i>Time:</i> ${date}
<i>Message:</i>
${record.message}`;
} else {
return `*${level}* \`${record.channel}\`
_Time:_ \`${date}\`
_Message:_
${record.message}`;
}
}
_formatAdditionalInfo(record) {
const parts = [];
if (record.context && Object.keys(record.context).length > 0) {
const contextStr = JSON.stringify(record.context, null, 2);
if (this.useHtml) {
parts.push(`<i>Context:</i>
<pre><code class="language-json">${this._escapeHtml(contextStr)}</code></pre>`);
} else {
parts.push(`_Context:_
\`\`\`json
${contextStr}
\`\`\``);
}
}
if (record.extra && Object.keys(record.extra).length > 0) {
const extraStr = JSON.stringify(record.extra, null, 2);
if (this.useHtml) {
parts.push(`<i>Extra:</i>
<pre><code class="language-json">${this._escapeHtml(extraStr)}</code></pre>`);
} else {
parts.push(`_Extra:_
\`\`\`json
${extraStr}
\`\`\``);
}
}
return parts.join("\n\n");
}
_escapeHtml(text) {
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
}
_escapeMarkdownV2(text) {
return text.replace(/_/g, "\\_").replace(/\*/g, "\\*").replace(/\[/g, "\\[").replace(/\]/g, "\\]").replace(/\(/g, "\\(").replace(/\)/g, "\\)").replace(/~/g, "\\~").replace(/`/g, "\\`").replace(/>/g, "\\>").replace(/#/g, "\\#").replace(/\+/g, "\\+").replace(/-/g, "\\-").replace(/=/g, "\\=").replace(/\|/g, "\\|").replace(/\{/g, "\\{").replace(/\}/g, "\\}").replace(/\./g, "\\.").replace(/!/g, "\\!");
}
/**
* Set the use of HTML markup
*/
setUseHtml(useHtml) {
this.useHtml = useHtml;
return this;
}
/**
* // Set the maximum message length
*/
setMaxMessageLength(maxLength) {
this.maxMessageLength = maxLength;
return this;
}
}
export { TelegramFormatter };
//# sourceMappingURL=telegram-formatter.mjs.map