teleproto 1.227.0 → 1.227.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Utils.d.ts +0 -2
- package/Utils.js +0 -21
- package/Version.d.ts +1 -1
- package/Version.js +1 -1
- package/client/TelegramClient.d.ts +7 -0
- package/client/TelegramClient.js +25 -7
- package/client/dialogs.js +1 -6
- package/client/messageParse.d.ts +0 -4
- package/client/messageParse.js +1 -9
- package/client/telegramBaseClient.js +8 -9
- package/client/uploads.js +2 -3
- package/client/users.js +1 -4
- package/events/Album.js +1 -5
- package/events/NewMessage.js +1 -5
- package/extensions/Logger.d.ts +16 -37
- package/extensions/Logger.js +43 -84
- package/extensions/html.d.ts +16 -1
- package/extensions/html.js +670 -195
- package/extensions/markdown.d.ts +4 -0
- package/extensions/markdown.js +13 -6
- package/network/MTProtoSender.js +6 -25
- package/package.json +1 -1
- package/tl/custom/message.js +3 -7
- package/tl/runtime/createApi.js +0 -105
package/Utils.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import bigInt from "big-integer";
|
|
2
|
-
import type { ParseInterface } from "./client/messageParse";
|
|
3
2
|
import { CustomFile } from "./client/uploads";
|
|
4
3
|
import type { Entity, EntityLike, MessageIDLike } from "./define";
|
|
5
4
|
import { EntityCache } from "./entityCache";
|
|
@@ -151,7 +150,6 @@ export declare function getInputMedia(media: any, { isPhoto, attributes, forceDo
|
|
|
151
150
|
*/
|
|
152
151
|
export declare function getAppropriatedPartSize(fileSize: bigInt.BigInteger): 256 | 512 | 128;
|
|
153
152
|
export declare function getPeer(peer: EntityLike | any): any;
|
|
154
|
-
export declare function sanitizeParseMode(mode: string | ParseInterface): ParseInterface;
|
|
155
153
|
/**
|
|
156
154
|
Convert the given peer into its marked ID by default.
|
|
157
155
|
|
package/Utils.js
CHANGED
|
@@ -24,7 +24,6 @@ exports.getInputGeo = getInputGeo;
|
|
|
24
24
|
exports.getInputMedia = getInputMedia;
|
|
25
25
|
exports.getAppropriatedPartSize = getAppropriatedPartSize;
|
|
26
26
|
exports.getPeer = getPeer;
|
|
27
|
-
exports.sanitizeParseMode = sanitizeParseMode;
|
|
28
27
|
exports.getPeerId = getPeerId;
|
|
29
28
|
exports.resolveId = resolveId;
|
|
30
29
|
exports.getMessageId = getMessageId;
|
|
@@ -43,9 +42,6 @@ exports.resolveBotFileId = resolveBotFileId;
|
|
|
43
42
|
exports.packBotFileId = packBotFileId;
|
|
44
43
|
const big_integer_1 = __importDefault(require("big-integer"));
|
|
45
44
|
const mime_1 = __importDefault(require("mime"));
|
|
46
|
-
const html_1 = require("./extensions/html");
|
|
47
|
-
const markdown_1 = require("./extensions/markdown");
|
|
48
|
-
const markdownv2_1 = require("./extensions/markdownv2");
|
|
49
45
|
const Helpers_1 = require("./Helpers");
|
|
50
46
|
const tl_1 = require("./tl");
|
|
51
47
|
function getFileInfo(fileLocation) {
|
|
@@ -1042,23 +1038,6 @@ function getPeer(peer) {
|
|
|
1042
1038
|
catch (e) { }
|
|
1043
1039
|
_raiseCastFail(peer, "peer");
|
|
1044
1040
|
}
|
|
1045
|
-
function sanitizeParseMode(mode) {
|
|
1046
|
-
if (mode === "md" || mode === "markdown") {
|
|
1047
|
-
return markdown_1.MarkdownParser;
|
|
1048
|
-
}
|
|
1049
|
-
if (mode === "md2" || mode === "markdownv2") {
|
|
1050
|
-
return markdownv2_1.MarkdownV2Parser;
|
|
1051
|
-
}
|
|
1052
|
-
if (mode == "html") {
|
|
1053
|
-
return html_1.HTMLParser;
|
|
1054
|
-
}
|
|
1055
|
-
if (typeof mode == "object") {
|
|
1056
|
-
if ("parse" in mode && "unparse" in mode) {
|
|
1057
|
-
return mode;
|
|
1058
|
-
}
|
|
1059
|
-
}
|
|
1060
|
-
throw new Error(`Invalid parse mode type ${mode}`);
|
|
1061
|
-
}
|
|
1062
1041
|
/**
|
|
1063
1042
|
Convert the given peer into its marked ID by default.
|
|
1064
1043
|
|
package/Version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "1.227.
|
|
1
|
+
export declare const version = "1.227.1";
|
package/Version.js
CHANGED
|
@@ -448,6 +448,8 @@ export declare class TelegramClient extends TelegramBaseClient {
|
|
|
448
448
|
* await client.sendMessage("me",{message:"<u> this will be sent as it is</u> ** with no formatting **});
|
|
449
449
|
*/
|
|
450
450
|
setParseMode(mode: "md" | "md2" | "markdown" | "markdownv2" | "html" | parseMethods.ParseInterface | undefined): void;
|
|
451
|
+
/** @hidden */
|
|
452
|
+
_sanitizeParseMode(mode: string | parseMethods.ParseInterface): parseMethods.ParseInterface;
|
|
451
453
|
/**
|
|
452
454
|
* Iterates over the messages for a given chat.
|
|
453
455
|
* <br/>
|
|
@@ -519,6 +521,11 @@ export declare class TelegramClient extends TelegramBaseClient {
|
|
|
519
521
|
* ```
|
|
520
522
|
*/
|
|
521
523
|
getMessages(entity: EntityLike | undefined, getMessagesParams?: Partial<messageMethods.IterMessagesParams>): Promise<import("../Helpers").TotalList<Api.Message>>;
|
|
524
|
+
/** @hidden */
|
|
525
|
+
getCommentData(entity: EntityLike, message: number | Api.Message): Promise<{
|
|
526
|
+
entity: Api.TypeInputPeer;
|
|
527
|
+
replyTo: number;
|
|
528
|
+
}>;
|
|
522
529
|
/**
|
|
523
530
|
* Sends a message to the specified user, chat or channel.<br/>
|
|
524
531
|
* The default parse mode is the same as the official applications (a custom flavour of markdown). **bold**, `code` or __italic__ are available.<br/>
|
package/client/TelegramClient.js
CHANGED
|
@@ -48,11 +48,12 @@ const chatMethods = __importStar(require("./chats"));
|
|
|
48
48
|
const dialogMethods = __importStar(require("./dialogs"));
|
|
49
49
|
const twoFA = __importStar(require("./2fa"));
|
|
50
50
|
const tl_1 = require("../tl");
|
|
51
|
-
const
|
|
51
|
+
const html_1 = require("../extensions/html");
|
|
52
|
+
const markdown_1 = require("../extensions/markdown");
|
|
53
|
+
const markdownv2_1 = require("../extensions/markdownv2");
|
|
52
54
|
const network_1 = require("../network");
|
|
53
55
|
const registry_1 = require("../tl/runtime/registry");
|
|
54
56
|
const updates_1 = require("./updates");
|
|
55
|
-
const Logger_1 = require("../extensions/Logger");
|
|
56
57
|
/**
|
|
57
58
|
* The TelegramClient uses several methods in different files to provide all the common functionality in a nice interface.</br>
|
|
58
59
|
* **In short, to create a client you must do:**
|
|
@@ -542,12 +543,28 @@ class TelegramClient extends telegramBaseClient_1.TelegramBaseClient {
|
|
|
542
543
|
*/
|
|
543
544
|
setParseMode(mode) {
|
|
544
545
|
if (mode) {
|
|
545
|
-
this._parseMode =
|
|
546
|
+
this._parseMode = this._sanitizeParseMode(mode);
|
|
546
547
|
}
|
|
547
548
|
else {
|
|
548
549
|
this._parseMode = undefined;
|
|
549
550
|
}
|
|
550
551
|
}
|
|
552
|
+
/** @hidden */
|
|
553
|
+
_sanitizeParseMode(mode) {
|
|
554
|
+
if (mode === "md" || mode === "markdown") {
|
|
555
|
+
return markdown_1.MarkdownParser;
|
|
556
|
+
}
|
|
557
|
+
if (mode === "md2" || mode === "markdownv2") {
|
|
558
|
+
return markdownv2_1.MarkdownV2Parser;
|
|
559
|
+
}
|
|
560
|
+
if (mode == "html") {
|
|
561
|
+
return html_1.HTMLParser;
|
|
562
|
+
}
|
|
563
|
+
if (typeof mode == "object" && "parse" in mode && "unparse" in mode) {
|
|
564
|
+
return mode;
|
|
565
|
+
}
|
|
566
|
+
throw new Error(`Invalid parse mode type ${mode}`);
|
|
567
|
+
}
|
|
551
568
|
//endregion
|
|
552
569
|
// region messages
|
|
553
570
|
/**
|
|
@@ -625,6 +642,10 @@ class TelegramClient extends telegramBaseClient_1.TelegramBaseClient {
|
|
|
625
642
|
getMessages(entity, getMessagesParams = {}) {
|
|
626
643
|
return messageMethods.getMessages(this, entity, getMessagesParams);
|
|
627
644
|
}
|
|
645
|
+
/** @hidden */
|
|
646
|
+
getCommentData(entity, message) {
|
|
647
|
+
return messageMethods.getCommentData(this, entity, message);
|
|
648
|
+
}
|
|
628
649
|
/**
|
|
629
650
|
* Sends a message to the specified user, chat or channel.<br/>
|
|
630
651
|
* The default parse mode is the same as the official applications (a custom flavour of markdown). **bold**, `code` or __italic__ are available.<br/>
|
|
@@ -1155,13 +1176,10 @@ class TelegramClient extends telegramBaseClient_1.TelegramBaseClient {
|
|
|
1155
1176
|
const res = await this.getMe();
|
|
1156
1177
|
}
|
|
1157
1178
|
catch (e) {
|
|
1158
|
-
this._log.error(`Error while trying to reconnect
|
|
1179
|
+
this._log.error(`Error while trying to reconnect`, e);
|
|
1159
1180
|
if (this._errorHandler) {
|
|
1160
1181
|
await this._errorHandler(e);
|
|
1161
1182
|
}
|
|
1162
|
-
if (this._log.canSend(Logger_1.LogLevel.ERROR)) {
|
|
1163
|
-
console.error(e);
|
|
1164
|
-
}
|
|
1165
1183
|
}
|
|
1166
1184
|
// Restart update loop if it was stopped during reconnect
|
|
1167
1185
|
if (!this._loopStarted && !this._destroyed) {
|
package/client/dialogs.js
CHANGED
|
@@ -44,7 +44,6 @@ const requestIter_1 = require("../requestIter");
|
|
|
44
44
|
const utils = __importStar(require("../Utils"));
|
|
45
45
|
const dialog_1 = require("../tl/custom/dialog");
|
|
46
46
|
const big_integer_1 = __importDefault(require("big-integer"));
|
|
47
|
-
const Logger_1 = require("../extensions/Logger");
|
|
48
47
|
const _MAX_CHUNK_SIZE = 100;
|
|
49
48
|
/**
|
|
50
49
|
Get the key to get messages from a dialog.
|
|
@@ -134,12 +133,8 @@ class _DialogsIter extends requestIter_1.RequestIter {
|
|
|
134
133
|
}
|
|
135
134
|
}
|
|
136
135
|
catch (e) {
|
|
137
|
-
console.log("msg", message);
|
|
138
136
|
this.client._log.error("Got error while trying to finish init message with id " +
|
|
139
|
-
m.id);
|
|
140
|
-
if (this.client._log.canSend(Logger_1.LogLevel.ERROR)) {
|
|
141
|
-
console.error(e);
|
|
142
|
-
}
|
|
137
|
+
m.id, e);
|
|
143
138
|
if (this.client._errorHandler) {
|
|
144
139
|
await this.client._errorHandler(e);
|
|
145
140
|
}
|
package/client/messageParse.d.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { Api } from "../tl";
|
|
2
2
|
import type { EntityLike } from "../define";
|
|
3
3
|
import type { TelegramClient } from "./TelegramClient";
|
|
4
|
-
export type messageEntities = typeof Api.MessageEntityBold | typeof Api.MessageEntityItalic | typeof Api.MessageEntityStrike | typeof Api.MessageEntityCode | typeof Api.MessageEntityPre;
|
|
5
|
-
export declare const DEFAULT_DELIMITERS: {
|
|
6
|
-
[key: string]: messageEntities;
|
|
7
|
-
};
|
|
8
4
|
export interface ParseInterface {
|
|
9
5
|
parse: (message: string) => [string, Api.TypeMessageEntity[]];
|
|
10
6
|
unparse: (text: string, entities: Api.TypeMessageEntity[]) => string;
|
package/client/messageParse.js
CHANGED
|
@@ -36,7 +36,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.DEFAULT_DELIMITERS = void 0;
|
|
40
39
|
exports._replaceWithMention = _replaceWithMention;
|
|
41
40
|
exports._parseMessageText = _parseMessageText;
|
|
42
41
|
exports._getResponseMessage = _getResponseMessage;
|
|
@@ -45,13 +44,6 @@ const tl_1 = require("../tl");
|
|
|
45
44
|
const utils = __importStar(require("../Utils"));
|
|
46
45
|
const Helpers_1 = require("../Helpers");
|
|
47
46
|
const big_integer_1 = __importDefault(require("big-integer"));
|
|
48
|
-
exports.DEFAULT_DELIMITERS = {
|
|
49
|
-
"**": tl_1.Api.MessageEntityBold,
|
|
50
|
-
__: tl_1.Api.MessageEntityItalic,
|
|
51
|
-
"~~": tl_1.Api.MessageEntityStrike,
|
|
52
|
-
"`": tl_1.Api.MessageEntityCode,
|
|
53
|
-
"```": tl_1.Api.MessageEntityPre,
|
|
54
|
-
};
|
|
55
47
|
/** @hidden */
|
|
56
48
|
async function _replaceWithMention(client, entities, i, user) {
|
|
57
49
|
try {
|
|
@@ -78,7 +70,7 @@ async function _parseMessageText(client, message, parseMode) {
|
|
|
78
70
|
parseMode = client.parseMode;
|
|
79
71
|
}
|
|
80
72
|
else if (typeof parseMode === "string") {
|
|
81
|
-
parseMode =
|
|
73
|
+
parseMode = client._sanitizeParseMode(parseMode);
|
|
82
74
|
}
|
|
83
75
|
const [rawMessage, msgEntities] = parseMode.parse(message);
|
|
84
76
|
for (let i = msgEntities.length - 1; i >= 0; i--) {
|
|
@@ -19,7 +19,6 @@ const FilePool_1 = require("../network/FilePool");
|
|
|
19
19
|
const registry_1 = require("../tl/runtime/registry");
|
|
20
20
|
const TCPMTProxy_1 = require("../network/connection/TCPMTProxy");
|
|
21
21
|
const async_mutex_1 = require("async-mutex");
|
|
22
|
-
const Logger_1 = require("../extensions/Logger");
|
|
23
22
|
const Deferred_1 = __importDefault(require("../extensions/Deferred"));
|
|
24
23
|
const UpdateManager_1 = require("./UpdateManager");
|
|
25
24
|
const API_SENDER_IDLE_TIMEOUT_MS = 30000;
|
|
@@ -216,8 +215,8 @@ class TelegramBaseClient {
|
|
|
216
215
|
}
|
|
217
216
|
async disconnect() {
|
|
218
217
|
await this._disconnect();
|
|
219
|
-
await this._filePool.
|
|
220
|
-
await this._apiSenderPool.
|
|
218
|
+
await this._filePool.purge();
|
|
219
|
+
await this._apiSenderPool.purge();
|
|
221
220
|
this._teardownUpdateState();
|
|
222
221
|
}
|
|
223
222
|
/** @hidden */
|
|
@@ -246,6 +245,8 @@ class TelegramBaseClient {
|
|
|
246
245
|
async destroy() {
|
|
247
246
|
this._destroyed = true;
|
|
248
247
|
await this.disconnect();
|
|
248
|
+
await this._filePool.close({ waitMs: FILE_POOL_CLOSE_GRACE_MS });
|
|
249
|
+
await this._apiSenderPool.close();
|
|
249
250
|
this._eventBuilders = [];
|
|
250
251
|
}
|
|
251
252
|
/** @hidden */
|
|
@@ -316,8 +317,8 @@ class TelegramBaseClient {
|
|
|
316
317
|
if (this._errorHandler) {
|
|
317
318
|
await this._errorHandler(err);
|
|
318
319
|
}
|
|
319
|
-
else
|
|
320
|
-
|
|
320
|
+
else {
|
|
321
|
+
this._log.error("Error while connecting sender", err);
|
|
321
322
|
}
|
|
322
323
|
await (0, Helpers_1.sleep)(1000);
|
|
323
324
|
await sender.disconnect();
|
|
@@ -375,10 +376,8 @@ class TelegramBaseClient {
|
|
|
375
376
|
await handler(error);
|
|
376
377
|
}
|
|
377
378
|
catch (e) {
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
console.error(e);
|
|
381
|
-
}
|
|
379
|
+
e.message = `Error ${e.message} thrown while handling top-level error: ${error.message}`;
|
|
380
|
+
this._log.error(e.message, e);
|
|
382
381
|
}
|
|
383
382
|
};
|
|
384
383
|
}
|
package/client/uploads.js
CHANGED
|
@@ -49,7 +49,6 @@ const fs_1 = require("fs");
|
|
|
49
49
|
const errors = __importStar(require("../errors"));
|
|
50
50
|
const utils = __importStar(require("../Utils"));
|
|
51
51
|
const messageParse_1 = require("./messageParse");
|
|
52
|
-
const messages_1 = require("./messages");
|
|
53
52
|
const big_integer_1 = __importDefault(require("big-integer"));
|
|
54
53
|
/**
|
|
55
54
|
* A custom file class compatible with File-like upload shape.<br/>
|
|
@@ -377,7 +376,7 @@ async function _sendAlbum(client, entity, { file, caption, formattingEntities, f
|
|
|
377
376
|
}
|
|
378
377
|
}
|
|
379
378
|
if (commentTo != undefined) {
|
|
380
|
-
const discussionData = await
|
|
379
|
+
const discussionData = await client.getCommentData(entity, commentTo);
|
|
381
380
|
entity = discussionData.entity;
|
|
382
381
|
replyTo = discussionData.replyTo;
|
|
383
382
|
}
|
|
@@ -473,7 +472,7 @@ async function sendFile(client, entity, { file, caption, forceDocument = false,
|
|
|
473
472
|
}
|
|
474
473
|
entity = await client.getInputEntity(entity);
|
|
475
474
|
if (commentTo != undefined) {
|
|
476
|
-
const discussionData = await
|
|
475
|
+
const discussionData = await client.getCommentData(entity, commentTo);
|
|
477
476
|
entity = discussionData.entity;
|
|
478
477
|
replyTo = discussionData.replyTo;
|
|
479
478
|
}
|
package/client/users.js
CHANGED
|
@@ -54,7 +54,6 @@ const Helpers_1 = require("../Helpers");
|
|
|
54
54
|
const errors = __importStar(require("../errors"));
|
|
55
55
|
const utils = __importStar(require("../Utils"));
|
|
56
56
|
const big_integer_1 = __importDefault(require("big-integer"));
|
|
57
|
-
const Logger_1 = require("../extensions/Logger");
|
|
58
57
|
const RequestState_1 = require("../network/RequestState");
|
|
59
58
|
// UserMethods {
|
|
60
59
|
// region Invoking Telegram request
|
|
@@ -425,12 +424,10 @@ async function getInputEntity(client, peer) {
|
|
|
425
424
|
return utils.getInputPeer(channels.chats[0]);
|
|
426
425
|
}
|
|
427
426
|
catch (e) {
|
|
427
|
+
client._log.error("Error while resolving channel entity", e);
|
|
428
428
|
if (client._errorHandler) {
|
|
429
429
|
await client._errorHandler(e);
|
|
430
430
|
}
|
|
431
|
-
if (client._log.canSend(Logger_1.LogLevel.ERROR)) {
|
|
432
|
-
console.error(e);
|
|
433
|
-
}
|
|
434
431
|
}
|
|
435
432
|
}
|
|
436
433
|
throw new Error(`Could not find the input entity for ${JSON.stringify(peer)}.
|
package/events/Album.js
CHANGED
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.AlbumEvent = exports.Album = void 0;
|
|
4
4
|
const common_1 = require("./common");
|
|
5
5
|
const tl_1 = require("../tl");
|
|
6
|
-
const Logger_1 = require("../extensions/Logger");
|
|
7
6
|
const _ALBUM_DELAY = 500; // 0.5 sec
|
|
8
7
|
/**
|
|
9
8
|
* Occurs whenever an album (multiple grouped messages with media) arrive.
|
|
@@ -90,13 +89,10 @@ class AlbumEvent extends common_1.EventCommon {
|
|
|
90
89
|
}
|
|
91
90
|
catch (e) {
|
|
92
91
|
client._log.error("Got error while trying to finish init message with id " +
|
|
93
|
-
this.messages[i].id);
|
|
92
|
+
this.messages[i].id, e);
|
|
94
93
|
if (client._errorHandler) {
|
|
95
94
|
client._errorHandler(e);
|
|
96
95
|
}
|
|
97
|
-
if (client._log.canSend(Logger_1.LogLevel.ERROR)) {
|
|
98
|
-
console.error(e);
|
|
99
|
-
}
|
|
100
96
|
}
|
|
101
97
|
}
|
|
102
98
|
}
|
package/events/NewMessage.js
CHANGED
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.NewMessageEvent = exports.NewMessage = void 0;
|
|
4
4
|
const common_1 = require("./common");
|
|
5
5
|
const tl_1 = require("../tl");
|
|
6
|
-
const Logger_1 = require("../extensions/Logger");
|
|
7
6
|
/**
|
|
8
7
|
* Occurs whenever a new text message or a message with media arrives.
|
|
9
8
|
* @example
|
|
@@ -168,13 +167,10 @@ class NewMessageEvent extends common_1.EventCommon {
|
|
|
168
167
|
m._finishInit(client, this.originalUpdate._entities || new Map(), undefined);
|
|
169
168
|
}
|
|
170
169
|
catch (e) {
|
|
171
|
-
client._log.error("Got error while trying to finish init message with id " + m.id);
|
|
170
|
+
client._log.error("Got error while trying to finish init message with id " + m.id, e);
|
|
172
171
|
if (client._errorHandler) {
|
|
173
172
|
client._errorHandler(e);
|
|
174
173
|
}
|
|
175
|
-
if (client._log.canSend(Logger_1.LogLevel.ERROR)) {
|
|
176
|
-
console.error(e);
|
|
177
|
-
}
|
|
178
174
|
}
|
|
179
175
|
}
|
|
180
176
|
/**
|
package/extensions/Logger.d.ts
CHANGED
|
@@ -5,50 +5,29 @@ export declare enum LogLevel {
|
|
|
5
5
|
INFO = "info",
|
|
6
6
|
DEBUG = "debug"
|
|
7
7
|
}
|
|
8
|
+
export interface LogRecord {
|
|
9
|
+
readonly level: LogLevel;
|
|
10
|
+
readonly message: string;
|
|
11
|
+
readonly error?: unknown;
|
|
12
|
+
readonly date: Date;
|
|
13
|
+
}
|
|
14
|
+
export type LogHandler = (record: LogRecord) => void;
|
|
8
15
|
export declare class Logger {
|
|
9
|
-
|
|
10
|
-
private nodeColors;
|
|
16
|
+
handler?: LogHandler;
|
|
11
17
|
messageFormat: string;
|
|
12
|
-
private _logLevel;
|
|
13
18
|
tzOffset: number;
|
|
19
|
+
private _logLevel;
|
|
14
20
|
constructor(level?: LogLevel);
|
|
15
|
-
/**
|
|
16
|
-
*
|
|
17
|
-
* @param level {string}
|
|
18
|
-
* @returns {boolean}
|
|
19
|
-
*/
|
|
20
21
|
canSend(level: LogLevel): boolean;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* @param message {string}
|
|
27
|
-
*/
|
|
28
|
-
info(message: string): void;
|
|
29
|
-
/**
|
|
30
|
-
* @param message {string}
|
|
31
|
-
*/
|
|
32
|
-
debug(message: string): void;
|
|
33
|
-
/**
|
|
34
|
-
* @param message {string}
|
|
35
|
-
*/
|
|
36
|
-
error(message: string): void;
|
|
22
|
+
error(message: string, error?: unknown): void;
|
|
23
|
+
warn(message: string, error?: unknown): void;
|
|
24
|
+
info(message: string, error?: unknown): void;
|
|
25
|
+
debug(message: string, error?: unknown): void;
|
|
37
26
|
format(message: string, level: string): string;
|
|
27
|
+
getDateTime(): string;
|
|
38
28
|
get logLevel(): LogLevel;
|
|
39
29
|
setLevel(level: LogLevel): void;
|
|
40
30
|
static setLevel(level: string): void;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
* @param message {string}
|
|
44
|
-
*/
|
|
45
|
-
_log(level: LogLevel, message: string): void;
|
|
46
|
-
/**
|
|
47
|
-
* Override this function for custom Logger. <br />
|
|
48
|
-
*
|
|
49
|
-
* @param level {string}
|
|
50
|
-
* @param message {string}
|
|
51
|
-
*/
|
|
52
|
-
log(level: LogLevel, message: string): void;
|
|
53
|
-
getDateTime(): string;
|
|
31
|
+
_log(level: LogLevel, message: string, error?: unknown): void;
|
|
32
|
+
log(level: LogLevel, message: string, error?: unknown): void;
|
|
54
33
|
}
|
package/extensions/Logger.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// let _level: string | undefined = undefined;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.Logger = exports.LogLevel = void 0;
|
|
5
4
|
var LogLevel;
|
|
@@ -10,66 +9,40 @@ var LogLevel;
|
|
|
10
9
|
LogLevel["INFO"] = "info";
|
|
11
10
|
LogLevel["DEBUG"] = "debug";
|
|
12
11
|
})(LogLevel || (exports.LogLevel = LogLevel = {}));
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
magenta: "\x1b[35m",
|
|
20
|
-
cyan: "\x1b[36m",
|
|
21
|
-
white: "\x1b[37m",
|
|
22
|
-
bold: "\x1b[1m",
|
|
23
|
-
dim: "\x1b[2m",
|
|
24
|
-
underline: "\x1b[4m",
|
|
12
|
+
const SEVERITY = {
|
|
13
|
+
none: 0,
|
|
14
|
+
error: 1,
|
|
15
|
+
warn: 2,
|
|
16
|
+
info: 3,
|
|
17
|
+
debug: 4,
|
|
25
18
|
};
|
|
19
|
+
const COLOR = {
|
|
20
|
+
error: "\x1b[31m",
|
|
21
|
+
warn: "\x1b[35m",
|
|
22
|
+
info: "\x1b[33m",
|
|
23
|
+
debug: "\x1b[36m",
|
|
24
|
+
};
|
|
25
|
+
const RESET = "\x1b[0m";
|
|
26
26
|
class Logger {
|
|
27
|
-
constructor(level) {
|
|
28
|
-
this.levels = ["error", "warn", "info", "debug"];
|
|
29
|
-
this._logLevel = level || LogLevel.INFO;
|
|
30
|
-
this.nodeColors = {
|
|
31
|
-
warn: NodeColors.magenta,
|
|
32
|
-
info: NodeColors.yellow,
|
|
33
|
-
debug: NodeColors.cyan,
|
|
34
|
-
error: NodeColors.red,
|
|
35
|
-
reset: NodeColors.reset
|
|
36
|
-
};
|
|
27
|
+
constructor(level = LogLevel.INFO) {
|
|
37
28
|
this.messageFormat = "[%t] [%l] - [%m]";
|
|
38
29
|
this.tzOffset = new Date().getTimezoneOffset() * 60000;
|
|
30
|
+
this._logLevel = level;
|
|
39
31
|
}
|
|
40
|
-
/**
|
|
41
|
-
*
|
|
42
|
-
* @param level {string}
|
|
43
|
-
* @returns {boolean}
|
|
44
|
-
*/
|
|
45
32
|
canSend(level) {
|
|
46
|
-
return this._logLevel
|
|
47
|
-
? this.levels.indexOf(this._logLevel) >= this.levels.indexOf(level)
|
|
48
|
-
: false;
|
|
33
|
+
return SEVERITY[this._logLevel] >= SEVERITY[level];
|
|
49
34
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
*/
|
|
53
|
-
warn(message) {
|
|
54
|
-
this._log(LogLevel.WARN, message);
|
|
35
|
+
error(message, error) {
|
|
36
|
+
this._log(LogLevel.ERROR, message, error);
|
|
55
37
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
*/
|
|
59
|
-
info(message) {
|
|
60
|
-
this._log(LogLevel.INFO, message);
|
|
38
|
+
warn(message, error) {
|
|
39
|
+
this._log(LogLevel.WARN, message, error);
|
|
61
40
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
*/
|
|
65
|
-
debug(message) {
|
|
66
|
-
this._log(LogLevel.DEBUG, message);
|
|
41
|
+
info(message, error) {
|
|
42
|
+
this._log(LogLevel.INFO, message, error);
|
|
67
43
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
*/
|
|
71
|
-
error(message) {
|
|
72
|
-
this._log(LogLevel.ERROR, message);
|
|
44
|
+
debug(message, error) {
|
|
45
|
+
this._log(LogLevel.DEBUG, message, error);
|
|
73
46
|
}
|
|
74
47
|
format(message, level) {
|
|
75
48
|
return this.messageFormat
|
|
@@ -77,6 +50,9 @@ class Logger {
|
|
|
77
50
|
.replace("%l", level.toUpperCase())
|
|
78
51
|
.replace("%m", message);
|
|
79
52
|
}
|
|
53
|
+
getDateTime() {
|
|
54
|
+
return new Date(Date.now() - this.tzOffset).toISOString().slice(0, -1);
|
|
55
|
+
}
|
|
80
56
|
get logLevel() {
|
|
81
57
|
return this._logLevel;
|
|
82
58
|
}
|
|
@@ -86,43 +62,26 @@ class Logger {
|
|
|
86
62
|
static setLevel(level) {
|
|
87
63
|
console.log("Logger.setLevel is deprecated, it will has no effect. Please, use client.setLogLevel instead.");
|
|
88
64
|
}
|
|
89
|
-
|
|
90
|
-
* @param level {string}
|
|
91
|
-
* @param message {string}
|
|
92
|
-
*/
|
|
93
|
-
_log(level, message) {
|
|
65
|
+
_log(level, message, error) {
|
|
94
66
|
if (this.canSend(level)) {
|
|
95
|
-
this.log(level, message);
|
|
67
|
+
this.log(level, message, error);
|
|
96
68
|
}
|
|
97
69
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
break;
|
|
113
|
-
case LogLevel.INFO:
|
|
114
|
-
nodeColor = this.nodeColors.info;
|
|
115
|
-
break;
|
|
116
|
-
case LogLevel.DEBUG:
|
|
117
|
-
nodeColor = this.nodeColors.debug;
|
|
118
|
-
break;
|
|
119
|
-
default:
|
|
120
|
-
nodeColor = "";
|
|
70
|
+
log(level, message, error) {
|
|
71
|
+
var _a;
|
|
72
|
+
if (this.handler) {
|
|
73
|
+
this.handler({
|
|
74
|
+
level,
|
|
75
|
+
message,
|
|
76
|
+
error,
|
|
77
|
+
date: new Date(Date.now() - this.tzOffset),
|
|
78
|
+
});
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
console.log(((_a = COLOR[level]) !== null && _a !== void 0 ? _a : "") + this.format(message, level) + RESET);
|
|
82
|
+
if (error !== undefined) {
|
|
83
|
+
console.error(error);
|
|
121
84
|
}
|
|
122
|
-
console.log(nodeColor + this.format(message, level) + this.nodeColors.reset);
|
|
123
|
-
}
|
|
124
|
-
getDateTime() {
|
|
125
|
-
return new Date(Date.now() - this.tzOffset).toISOString().slice(0, -1);
|
|
126
85
|
}
|
|
127
86
|
}
|
|
128
87
|
exports.Logger = Logger;
|
package/extensions/html.d.ts
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import { Api } from "../tl";
|
|
2
|
+
interface OpenTag {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly start: number;
|
|
5
|
+
readonly entity?: Api.TypeMessageEntity;
|
|
6
|
+
}
|
|
2
7
|
export declare class HTMLParser {
|
|
8
|
+
static readonly _tag: RegExp;
|
|
9
|
+
static readonly _ref: RegExp;
|
|
10
|
+
static readonly _attr: RegExp;
|
|
11
|
+
static readonly _esc: Record<string, string>;
|
|
3
12
|
static parse(html: string): [string, Api.TypeMessageEntity[]];
|
|
4
|
-
static unparse(text: string, entities
|
|
13
|
+
static unparse(text: string, entities?: Api.TypeMessageEntity[], _offset?: number, _length?: number): string;
|
|
14
|
+
static _decode(text: string): string;
|
|
15
|
+
static _escapeHtml(text: string): string;
|
|
16
|
+
static _readAttributes(source: string): Record<string, string>;
|
|
17
|
+
static _entityFor(name: string, attrs: Record<string, string>, offset: number, stack: OpenTag[]): Api.TypeMessageEntity | undefined;
|
|
18
|
+
static _markupFor(entity: Api.TypeMessageEntity, text: string): readonly [string, string] | null;
|
|
5
19
|
}
|
|
20
|
+
export {};
|