teleproto 1.214.0

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.
Files changed (222) hide show
  1. package/CryptoFile.d.ts +2 -0
  2. package/CryptoFile.js +37 -0
  3. package/Helpers.d.ts +150 -0
  4. package/Helpers.js +477 -0
  5. package/LICENSE +23 -0
  6. package/Password.d.ts +14 -0
  7. package/Password.js +270 -0
  8. package/README.md +98 -0
  9. package/Utils.d.ts +227 -0
  10. package/Utils.js +1247 -0
  11. package/Version.d.ts +1 -0
  12. package/Version.js +4 -0
  13. package/client/2fa.d.ts +48 -0
  14. package/client/2fa.js +108 -0
  15. package/client/TelegramClient.d.ts +1043 -0
  16. package/client/TelegramClient.js +1181 -0
  17. package/client/account.d.ts +0 -0
  18. package/client/account.js +1 -0
  19. package/client/auth.d.ts +92 -0
  20. package/client/auth.js +388 -0
  21. package/client/bots.d.ts +6 -0
  22. package/client/bots.js +23 -0
  23. package/client/buttons.d.ts +4 -0
  24. package/client/buttons.js +86 -0
  25. package/client/chats.d.ts +45 -0
  26. package/client/chats.js +350 -0
  27. package/client/dialogs.d.ts +52 -0
  28. package/client/dialogs.js +174 -0
  29. package/client/downloads.d.ts +156 -0
  30. package/client/downloads.js +614 -0
  31. package/client/fs.d.ts +1 -0
  32. package/client/fs.js +17 -0
  33. package/client/index.d.ts +15 -0
  34. package/client/index.js +64 -0
  35. package/client/messageParse.d.ts +17 -0
  36. package/client/messageParse.js +191 -0
  37. package/client/messages.d.ts +263 -0
  38. package/client/messages.js +813 -0
  39. package/client/os.d.ts +2 -0
  40. package/client/os.js +37 -0
  41. package/client/path.d.ts +2 -0
  42. package/client/path.js +7 -0
  43. package/client/telegramBaseClient.d.ts +237 -0
  44. package/client/telegramBaseClient.js +368 -0
  45. package/client/updates.d.ts +33 -0
  46. package/client/updates.js +260 -0
  47. package/client/uploads.d.ts +136 -0
  48. package/client/uploads.js +514 -0
  49. package/client/users.d.ts +29 -0
  50. package/client/users.js +490 -0
  51. package/crypto/AuthKey.d.ts +19 -0
  52. package/crypto/AuthKey.js +76 -0
  53. package/crypto/CTR.d.ts +5 -0
  54. package/crypto/CTR.js +16 -0
  55. package/crypto/Factorizator.d.ts +19 -0
  56. package/crypto/Factorizator.js +74 -0
  57. package/crypto/IGE.d.ts +11 -0
  58. package/crypto/IGE.js +115 -0
  59. package/crypto/RSA.d.ts +14 -0
  60. package/crypto/RSA.js +70 -0
  61. package/crypto/converters.d.ts +19 -0
  62. package/crypto/converters.js +52 -0
  63. package/crypto/crypto.d.ts +19 -0
  64. package/crypto/crypto.js +58 -0
  65. package/crypto/words.d.ts +6 -0
  66. package/crypto/words.js +47 -0
  67. package/define.d.ts +77 -0
  68. package/entityCache.d.ts +7 -0
  69. package/entityCache.js +79 -0
  70. package/errors/Common.d.ts +71 -0
  71. package/errors/Common.js +122 -0
  72. package/errors/RPCBaseErrors.d.ts +84 -0
  73. package/errors/RPCBaseErrors.js +134 -0
  74. package/errors/RPCErrorList.d.ts +37 -0
  75. package/errors/RPCErrorList.js +117 -0
  76. package/errors/index.d.ts +11 -0
  77. package/errors/index.js +32 -0
  78. package/events/Album.d.ts +36 -0
  79. package/events/Album.js +104 -0
  80. package/events/CallbackQuery.d.ts +73 -0
  81. package/events/CallbackQuery.js +193 -0
  82. package/events/DeletedMessage.d.ts +45 -0
  83. package/events/DeletedMessage.js +63 -0
  84. package/events/EditedMessage.d.ts +30 -0
  85. package/events/EditedMessage.js +41 -0
  86. package/events/NewMessage.d.ts +89 -0
  87. package/events/NewMessage.js +182 -0
  88. package/events/Raw.d.ts +29 -0
  89. package/events/Raw.js +43 -0
  90. package/events/common.d.ts +66 -0
  91. package/events/common.js +141 -0
  92. package/events/index.d.ts +2 -0
  93. package/events/index.js +8 -0
  94. package/extensions/AsyncQueue.d.ts +10 -0
  95. package/extensions/AsyncQueue.js +32 -0
  96. package/extensions/BinaryReader.d.ts +99 -0
  97. package/extensions/BinaryReader.js +242 -0
  98. package/extensions/BinaryWriter.d.ts +6 -0
  99. package/extensions/BinaryWriter.js +15 -0
  100. package/extensions/Deferred.d.ts +8 -0
  101. package/extensions/Deferred.js +16 -0
  102. package/extensions/Logger.d.ts +54 -0
  103. package/extensions/Logger.js +128 -0
  104. package/extensions/MessagePacker.d.ts +21 -0
  105. package/extensions/MessagePacker.js +154 -0
  106. package/extensions/PendingState.d.ts +12 -0
  107. package/extensions/PendingState.js +29 -0
  108. package/extensions/PromisedNetSockets.d.ts +24 -0
  109. package/extensions/PromisedNetSockets.js +192 -0
  110. package/extensions/PromisedWebSockets.d.ts +18 -0
  111. package/extensions/PromisedWebSockets.js +124 -0
  112. package/extensions/html.d.ts +5 -0
  113. package/extensions/html.js +228 -0
  114. package/extensions/index.d.ts +7 -0
  115. package/extensions/index.js +17 -0
  116. package/extensions/markdown.d.ts +5 -0
  117. package/extensions/markdown.js +76 -0
  118. package/extensions/markdownv2.d.ts +5 -0
  119. package/extensions/markdownv2.js +51 -0
  120. package/extensions/net.d.ts +1 -0
  121. package/extensions/net.js +17 -0
  122. package/extensions/socks.d.ts +1 -0
  123. package/extensions/socks.js +17 -0
  124. package/index.d.ts +14 -0
  125. package/index.js +62 -0
  126. package/inspect.d.ts +1 -0
  127. package/inspect.js +5 -0
  128. package/network/Authenticator.d.ts +12 -0
  129. package/network/Authenticator.js +192 -0
  130. package/network/MTProtoPlainSender.d.ts +19 -0
  131. package/network/MTProtoPlainSender.js +74 -0
  132. package/network/MTProtoSender.d.ts +290 -0
  133. package/network/MTProtoSender.js +873 -0
  134. package/network/MTProtoState.d.ts +102 -0
  135. package/network/MTProtoState.js +267 -0
  136. package/network/RequestState.d.ts +18 -0
  137. package/network/RequestState.js +35 -0
  138. package/network/connection/Connection.d.ts +69 -0
  139. package/network/connection/Connection.js +162 -0
  140. package/network/connection/TCPAbridged.d.ts +19 -0
  141. package/network/connection/TCPAbridged.js +58 -0
  142. package/network/connection/TCPFull.d.ts +16 -0
  143. package/network/connection/TCPFull.js +61 -0
  144. package/network/connection/TCPMTProxy.d.ts +49 -0
  145. package/network/connection/TCPMTProxy.js +121 -0
  146. package/network/connection/TCPObfuscated.d.ts +18 -0
  147. package/network/connection/TCPObfuscated.js +78 -0
  148. package/network/connection/index.d.ts +4 -0
  149. package/network/connection/index.js +11 -0
  150. package/network/index.d.ts +11 -0
  151. package/network/index.js +23 -0
  152. package/package.json +50 -0
  153. package/requestIter.d.ts +24 -0
  154. package/requestIter.js +109 -0
  155. package/sessions/Abstract.d.ts +103 -0
  156. package/sessions/Abstract.js +6 -0
  157. package/sessions/Memory.d.ts +38 -0
  158. package/sessions/Memory.js +272 -0
  159. package/sessions/StoreSession.d.ts +14 -0
  160. package/sessions/StoreSession.js +77 -0
  161. package/sessions/StringSession.d.ts +32 -0
  162. package/sessions/StringSession.js +116 -0
  163. package/sessions/index.d.ts +4 -0
  164. package/sessions/index.js +11 -0
  165. package/sessions/localStorage.d.ts +1 -0
  166. package/sessions/localStorage.js +4 -0
  167. package/tl/AllTLObjects.d.ts +3 -0
  168. package/tl/AllTLObjects.js +17 -0
  169. package/tl/MTProtoRequest.d.ts +18 -0
  170. package/tl/MTProtoRequest.js +38 -0
  171. package/tl/api.d.ts +32488 -0
  172. package/tl/api.js +507 -0
  173. package/tl/apiTl.d.ts +2 -0
  174. package/tl/apiTl.js +2209 -0
  175. package/tl/core/GZIPPacked.d.ts +15 -0
  176. package/tl/core/GZIPPacked.js +51 -0
  177. package/tl/core/MessageContainer.d.ts +12 -0
  178. package/tl/core/MessageContainer.js +42 -0
  179. package/tl/core/RPCResult.d.ts +14 -0
  180. package/tl/core/RPCResult.js +32 -0
  181. package/tl/core/TLMessage.d.ts +10 -0
  182. package/tl/core/TLMessage.js +14 -0
  183. package/tl/core/index.d.ts +6 -0
  184. package/tl/core/index.js +16 -0
  185. package/tl/custom/button.d.ts +24 -0
  186. package/tl/custom/button.js +78 -0
  187. package/tl/custom/chatGetter.d.ts +29 -0
  188. package/tl/custom/chatGetter.js +116 -0
  189. package/tl/custom/dialog.d.ts +30 -0
  190. package/tl/custom/dialog.js +40 -0
  191. package/tl/custom/draft.d.ts +21 -0
  192. package/tl/custom/draft.js +48 -0
  193. package/tl/custom/file.d.ts +21 -0
  194. package/tl/custom/file.js +68 -0
  195. package/tl/custom/forward.d.ts +15 -0
  196. package/tl/custom/forward.js +47 -0
  197. package/tl/custom/index.d.ts +1 -0
  198. package/tl/custom/index.js +5 -0
  199. package/tl/custom/inlineResult.d.ts +32 -0
  200. package/tl/custom/inlineResult.js +87 -0
  201. package/tl/custom/inlineResults.d.ts +20 -0
  202. package/tl/custom/inlineResults.js +26 -0
  203. package/tl/custom/message.d.ts +427 -0
  204. package/tl/custom/message.js +716 -0
  205. package/tl/custom/messageButton.d.ts +54 -0
  206. package/tl/custom/messageButton.js +152 -0
  207. package/tl/custom/senderGetter.d.ts +28 -0
  208. package/tl/custom/senderGetter.js +55 -0
  209. package/tl/generateModule.d.ts +1 -0
  210. package/tl/generateModule.js +17 -0
  211. package/tl/generationHelpers.d.ts +11 -0
  212. package/tl/generationHelpers.js +289 -0
  213. package/tl/index.d.ts +3 -0
  214. package/tl/index.js +10 -0
  215. package/tl/patched/index.d.ts +2 -0
  216. package/tl/patched/index.js +76 -0
  217. package/tl/schemaTl.d.ts +2 -0
  218. package/tl/schemaTl.js +64 -0
  219. package/tl/types-generator/generate.d.ts +1 -0
  220. package/tl/types-generator/generate.js +84 -0
  221. package/tl/types-generator/template.d.ts +6 -0
  222. package/tl/types-generator/template.js +257 -0
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BinaryReader = void 0;
4
+ const errors_1 = require("../errors");
5
+ const core_1 = require("../tl/core");
6
+ const AllTLObjects_1 = require("../tl/AllTLObjects");
7
+ const Helpers_1 = require("../Helpers");
8
+ class BinaryReader {
9
+ /**
10
+ * Small utility class to read binary data.
11
+ * @param data {Buffer}
12
+ */
13
+ constructor(data) {
14
+ this.stream = data;
15
+ this._last = undefined;
16
+ this.offset = 0;
17
+ }
18
+ // region Reading
19
+ // "All numbers are written as little endian."
20
+ // https://core.telegram.org/mtproto
21
+ /**
22
+ * Reads a single byte value.
23
+ */
24
+ readByte() {
25
+ return this.read(1)[0];
26
+ }
27
+ /**
28
+ * Reads an integer (4 bytes or 32 bits) value.
29
+ * @param signed {Boolean}
30
+ */
31
+ readInt(signed = true) {
32
+ let res;
33
+ if (signed) {
34
+ res = this.stream.readInt32LE(this.offset);
35
+ }
36
+ else {
37
+ res = this.stream.readUInt32LE(this.offset);
38
+ }
39
+ this.offset += 4;
40
+ return res;
41
+ }
42
+ /**
43
+ * Reads a long integer (8 bytes or 64 bits) value.
44
+ * @param signed
45
+ * @returns {BigInteger}
46
+ */
47
+ readLong(signed = true) {
48
+ return this.readLargeInt(64, signed);
49
+ }
50
+ /**
51
+ * Reads a real floating point (4 bytes) value.
52
+ * @returns {number}
53
+ */
54
+ readFloat() {
55
+ return this.read(4).readFloatLE(0);
56
+ }
57
+ /**
58
+ * Reads a real floating point (8 bytes) value.
59
+ * @returns {BigInteger}
60
+ */
61
+ readDouble() {
62
+ // was this a bug ? it should have been <d
63
+ return this.read(8).readDoubleLE(0);
64
+ }
65
+ /**
66
+ * Reads a n-bits long integer value.
67
+ * @param bits
68
+ * @param signed {Boolean}
69
+ */
70
+ readLargeInt(bits, signed = true) {
71
+ const buffer = this.read(Math.floor(bits / 8));
72
+ return (0, Helpers_1.readBigIntFromBuffer)(buffer, true, signed);
73
+ }
74
+ /**
75
+ * Read the given amount of bytes, or -1 to read all remaining.
76
+ * @param length {number}
77
+ * @param checkLength {boolean} whether to check if the length overflows or not.
78
+ */
79
+ read(length = -1, checkLength = true) {
80
+ if (length === -1) {
81
+ length = this.stream.length - this.offset;
82
+ }
83
+ const result = this.stream.slice(this.offset, this.offset + length);
84
+ this.offset += length;
85
+ if (checkLength && result.length !== length) {
86
+ throw Error(`No more data left to read (need ${length}, got ${result.length}: ${result}); last read ${this._last}`);
87
+ }
88
+ this._last = result;
89
+ return result;
90
+ }
91
+ /**
92
+ * Gets the byte array representing the current buffer as a whole.
93
+ * @returns {Buffer}
94
+ */
95
+ getBuffer() {
96
+ return this.stream;
97
+ }
98
+ // endregion
99
+ // region Telegram custom reading
100
+ /**
101
+ * Reads a Telegram-encoded byte array, without the need of
102
+ * specifying its length.
103
+ * @returns {Buffer}
104
+ */
105
+ tgReadBytes() {
106
+ const firstByte = this.readByte();
107
+ let padding;
108
+ let length;
109
+ if (firstByte === 254) {
110
+ length =
111
+ this.readByte() |
112
+ (this.readByte() << 8) |
113
+ (this.readByte() << 16);
114
+ padding = length % 4;
115
+ }
116
+ else {
117
+ length = firstByte;
118
+ padding = (length + 1) % 4;
119
+ }
120
+ const data = this.read(length);
121
+ if (padding > 0) {
122
+ padding = 4 - padding;
123
+ this.read(padding);
124
+ }
125
+ return data;
126
+ }
127
+ /**
128
+ * Reads a Telegram-encoded string.
129
+ * @returns {string}
130
+ */
131
+ tgReadString() {
132
+ return this.tgReadBytes().toString("utf-8");
133
+ }
134
+ /**
135
+ * Reads a Telegram boolean value.
136
+ * @returns {boolean}
137
+ */
138
+ tgReadBool() {
139
+ const value = this.readInt(false);
140
+ if (value === 0x997275b5) {
141
+ // boolTrue
142
+ return true;
143
+ }
144
+ else if (value === 0xbc799737) {
145
+ // boolFalse
146
+ return false;
147
+ }
148
+ else {
149
+ throw new Error(`Invalid boolean code ${value.toString(16)}`);
150
+ }
151
+ }
152
+ /**
153
+ * Reads and converts Unix time (used by Telegram)
154
+ * into a Javascript {Date} object.
155
+ * @returns {Date}
156
+ */
157
+ tgReadDate() {
158
+ const value = this.readInt();
159
+ return new Date(value * 1000);
160
+ }
161
+ /**
162
+ * Reads a Telegram object.
163
+ */
164
+ tgReadObject() {
165
+ const constructorId = this.readInt(false);
166
+ let clazz = AllTLObjects_1.tlobjects[constructorId];
167
+ if (clazz === undefined) {
168
+ /**
169
+ * The class was undefined, but there's still a
170
+ * chance of it being a manually parsed value like bool!
171
+ */
172
+ const value = constructorId;
173
+ if (value === 0x997275b5) {
174
+ // boolTrue
175
+ return true;
176
+ }
177
+ else if (value === 0xbc799737) {
178
+ // boolFalse
179
+ return false;
180
+ }
181
+ else if (value === 0x1cb5c415) {
182
+ // Vector
183
+ const temp = [];
184
+ const length = this.readInt();
185
+ for (let i = 0; i < length; i++) {
186
+ temp.push(this.tgReadObject());
187
+ }
188
+ return temp;
189
+ }
190
+ clazz = core_1.coreObjects.get(constructorId);
191
+ if (clazz === undefined) {
192
+ // If there was still no luck, give up
193
+ this.seek(-4); // Go back
194
+ const pos = this.tellPosition();
195
+ const error = new errors_1.TypeNotFoundError(constructorId, this.read());
196
+ this.setPosition(pos);
197
+ throw error;
198
+ }
199
+ }
200
+ return clazz.fromReader(this);
201
+ }
202
+ /**
203
+ * Reads a vector (a list) of Telegram objects.
204
+ * @returns {[Buffer]}
205
+ */
206
+ tgReadVector() {
207
+ if (this.readInt(false) !== 0x1cb5c415) {
208
+ throw new Error("Invalid constructor code, vector was expected");
209
+ }
210
+ const count = this.readInt();
211
+ const temp = [];
212
+ for (let i = 0; i < count; i++) {
213
+ temp.push(this.tgReadObject());
214
+ }
215
+ return temp;
216
+ }
217
+ // endregion
218
+ // region Position related
219
+ /**
220
+ * Tells the current position on the stream.
221
+ * @returns {number}
222
+ */
223
+ tellPosition() {
224
+ return this.offset;
225
+ }
226
+ /**
227
+ * Sets the current position on the stream.
228
+ * @param position
229
+ */
230
+ setPosition(position) {
231
+ this.offset = position;
232
+ }
233
+ /**
234
+ * Seeks the stream position given an offset from the current position.
235
+ * The offset may be negative.
236
+ * @param offset
237
+ */
238
+ seek(offset) {
239
+ this.offset += offset;
240
+ }
241
+ }
242
+ exports.BinaryReader = BinaryReader;
@@ -0,0 +1,6 @@
1
+ export declare class BinaryWriter {
2
+ private readonly _buffers;
3
+ constructor(stream: Buffer);
4
+ write(buffer: Buffer): void;
5
+ getValue(): Buffer;
6
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BinaryWriter = void 0;
4
+ class BinaryWriter {
5
+ constructor(stream) {
6
+ this._buffers = [stream];
7
+ }
8
+ write(buffer) {
9
+ this._buffers.push(buffer);
10
+ }
11
+ getValue() {
12
+ return Buffer.concat(this._buffers);
13
+ }
14
+ }
15
+ exports.BinaryWriter = BinaryWriter;
@@ -0,0 +1,8 @@
1
+ export default class Deferred<T = void> {
2
+ promise: Promise<T>;
3
+ reject: (reason?: any) => void;
4
+ resolve: (value: T | PromiseLike<T>) => void;
5
+ constructor();
6
+ static resolved(): Deferred<void>;
7
+ static resolved<T>(value: T): Deferred<T>;
8
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class Deferred {
4
+ constructor() {
5
+ this.promise = new Promise((resolve, reject) => {
6
+ this.reject = reject;
7
+ this.resolve = resolve;
8
+ });
9
+ }
10
+ static resolved(value) {
11
+ const deferred = new Deferred();
12
+ deferred.resolve(value);
13
+ return deferred;
14
+ }
15
+ }
16
+ exports.default = Deferred;
@@ -0,0 +1,54 @@
1
+ export declare enum LogLevel {
2
+ NONE = "none",
3
+ ERROR = "error",
4
+ WARN = "warn",
5
+ INFO = "info",
6
+ DEBUG = "debug"
7
+ }
8
+ export declare class Logger {
9
+ private levels;
10
+ private nodeColors;
11
+ messageFormat: string;
12
+ private _logLevel;
13
+ tzOffset: number;
14
+ constructor(level?: LogLevel);
15
+ /**
16
+ *
17
+ * @param level {string}
18
+ * @returns {boolean}
19
+ */
20
+ canSend(level: LogLevel): boolean;
21
+ /**
22
+ * @param message {string}
23
+ */
24
+ warn(message: string): void;
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;
37
+ format(message: string, level: string): string;
38
+ get logLevel(): LogLevel;
39
+ setLevel(level: LogLevel): void;
40
+ static setLevel(level: string): void;
41
+ /**
42
+ * @param level {string}
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;
54
+ }
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ // let _level: string | undefined = undefined;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Logger = exports.LogLevel = void 0;
5
+ var LogLevel;
6
+ (function (LogLevel) {
7
+ LogLevel["NONE"] = "none";
8
+ LogLevel["ERROR"] = "error";
9
+ LogLevel["WARN"] = "warn";
10
+ LogLevel["INFO"] = "info";
11
+ LogLevel["DEBUG"] = "debug";
12
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
13
+ const NodeColors = {
14
+ reset: "\x1b[0m",
15
+ red: "\x1b[31m",
16
+ green: "\x1b[32m",
17
+ yellow: "\x1b[33m",
18
+ blue: "\x1b[34m",
19
+ magenta: "\x1b[35m",
20
+ cyan: "\x1b[36m",
21
+ white: "\x1b[37m",
22
+ bold: "\x1b[1m",
23
+ dim: "\x1b[2m",
24
+ underline: "\x1b[4m",
25
+ };
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
+ };
37
+ this.messageFormat = "[%t] [%l] - [%m]";
38
+ this.tzOffset = new Date().getTimezoneOffset() * 60000;
39
+ }
40
+ /**
41
+ *
42
+ * @param level {string}
43
+ * @returns {boolean}
44
+ */
45
+ canSend(level) {
46
+ return this._logLevel
47
+ ? this.levels.indexOf(this._logLevel) >= this.levels.indexOf(level)
48
+ : false;
49
+ }
50
+ /**
51
+ * @param message {string}
52
+ */
53
+ warn(message) {
54
+ this._log(LogLevel.WARN, message);
55
+ }
56
+ /**
57
+ * @param message {string}
58
+ */
59
+ info(message) {
60
+ this._log(LogLevel.INFO, message);
61
+ }
62
+ /**
63
+ * @param message {string}
64
+ */
65
+ debug(message) {
66
+ this._log(LogLevel.DEBUG, message);
67
+ }
68
+ /**
69
+ * @param message {string}
70
+ */
71
+ error(message) {
72
+ this._log(LogLevel.ERROR, message);
73
+ }
74
+ format(message, level) {
75
+ return this.messageFormat
76
+ .replace("%t", this.getDateTime())
77
+ .replace("%l", level.toUpperCase())
78
+ .replace("%m", message);
79
+ }
80
+ get logLevel() {
81
+ return this._logLevel;
82
+ }
83
+ setLevel(level) {
84
+ this._logLevel = level;
85
+ }
86
+ static setLevel(level) {
87
+ console.log("Logger.setLevel is deprecated, it will has no effect. Please, use client.setLogLevel instead.");
88
+ }
89
+ /**
90
+ * @param level {string}
91
+ * @param message {string}
92
+ */
93
+ _log(level, message) {
94
+ if (this.canSend(level)) {
95
+ this.log(level, message);
96
+ }
97
+ }
98
+ /**
99
+ * Override this function for custom Logger. <br />
100
+ *
101
+ * @param level {string}
102
+ * @param message {string}
103
+ */
104
+ log(level, message) {
105
+ let nodeColor;
106
+ switch (level) {
107
+ case LogLevel.ERROR:
108
+ nodeColor = this.nodeColors.error;
109
+ break;
110
+ case LogLevel.WARN:
111
+ nodeColor = this.nodeColors.warn;
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 = "";
121
+ }
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
+ }
127
+ }
128
+ exports.Logger = Logger;
@@ -0,0 +1,21 @@
1
+ import type { MTProtoState } from "../network/MTProtoState";
2
+ import type { RequestState } from "../network/RequestState";
3
+ export declare class MessagePacker {
4
+ private _state;
5
+ _pendingStates: RequestState[];
6
+ private _queue;
7
+ private _ready;
8
+ private setReady;
9
+ private _log;
10
+ constructor(state: MTProtoState, logger: any);
11
+ values(): any[];
12
+ append(state?: RequestState, setReady?: boolean, atStart?: boolean): void;
13
+ prepend(states: RequestState[]): void;
14
+ extend(states: RequestState[]): void;
15
+ clear(): void;
16
+ wait(): Promise<void>;
17
+ get(): Promise<{
18
+ batch: any[];
19
+ data: Buffer<ArrayBufferLike>;
20
+ } | null | undefined>;
21
+ }
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessagePacker = void 0;
4
+ const core_1 = require("../tl/core");
5
+ const core_2 = require("../tl/core");
6
+ const BinaryWriter_1 = require("./BinaryWriter");
7
+ const USE_INVOKE_AFTER_WITH = new Set([
8
+ "messages.SendMessage",
9
+ "messages.SendMedia",
10
+ "messages.SendMultiMedia",
11
+ "messages.ForwardMessages",
12
+ "messages.SendInlineBotResult",
13
+ ]);
14
+ class MessagePacker {
15
+ constructor(state, logger) {
16
+ this._state = state;
17
+ this._queue = [];
18
+ this._pendingStates = [];
19
+ this._ready = new Promise((resolve) => {
20
+ this.setReady = resolve;
21
+ });
22
+ this._log = logger;
23
+ }
24
+ values() {
25
+ return this._queue;
26
+ }
27
+ append(state, setReady = true, atStart = false) {
28
+ var _a, _b;
29
+ // We need to check if there is already a `USE_INVOKE_AFTER_WITH` request
30
+ if (state && USE_INVOKE_AFTER_WITH.has(state.request.className)) {
31
+ if (atStart) {
32
+ // Assign `after` for the previously first `USE_INVOKE_AFTER_WITH` request
33
+ for (let i = 0; i < this._queue.length; i++) {
34
+ if (USE_INVOKE_AFTER_WITH.has((_a = this._queue[i]) === null || _a === void 0 ? void 0 : _a.request.className)) {
35
+ this._queue[i].after = state;
36
+ break;
37
+ }
38
+ }
39
+ }
40
+ else {
41
+ // Assign after for the previous `USE_INVOKE_AFTER_WITH` request
42
+ for (let i = this._queue.length - 1; i >= 0; i--) {
43
+ if (USE_INVOKE_AFTER_WITH.has((_b = this._queue[i]) === null || _b === void 0 ? void 0 : _b.request.className)) {
44
+ state.after = this._queue[i];
45
+ break;
46
+ }
47
+ }
48
+ }
49
+ }
50
+ if (atStart) {
51
+ this._queue.unshift(state);
52
+ }
53
+ else {
54
+ this._queue.push(state);
55
+ }
56
+ if (setReady && this.setReady) {
57
+ this.setReady(true);
58
+ }
59
+ // 1658238041=MsgsAck, we don't care about MsgsAck here because they never resolve anyway.
60
+ if (state && state.request.CONSTRUCTOR_ID !== 1658238041) {
61
+ this._pendingStates.push(state);
62
+ state
63
+ .promise // Using finally causes triggering `unhandledrejection` event
64
+ .catch((err) => { })
65
+ .finally(() => {
66
+ this._pendingStates = this._pendingStates.filter((s) => s !== state);
67
+ });
68
+ }
69
+ }
70
+ prepend(states) {
71
+ states.reverse().forEach((state) => {
72
+ this.append(state, false, true);
73
+ });
74
+ if (this.setReady) {
75
+ this.setReady(true);
76
+ }
77
+ }
78
+ extend(states) {
79
+ states.forEach((state) => {
80
+ this.append(state, false);
81
+ });
82
+ if (this.setReady) {
83
+ this.setReady(true);
84
+ }
85
+ }
86
+ clear() {
87
+ this._queue = [];
88
+ this.append(undefined);
89
+ }
90
+ async wait() {
91
+ if (!this._queue.length) {
92
+ this._ready = new Promise((resolve) => {
93
+ this.setReady = resolve;
94
+ });
95
+ await this._ready;
96
+ }
97
+ }
98
+ async get() {
99
+ if (!this._queue[this._queue.length - 1]) {
100
+ this._queue = this._queue.filter(Boolean);
101
+ return undefined;
102
+ }
103
+ let data;
104
+ let buffer = new BinaryWriter_1.BinaryWriter(Buffer.alloc(0));
105
+ const batch = [];
106
+ let size = 0;
107
+ while (this._queue.length &&
108
+ batch.length <= core_1.MessageContainer.MAXIMUM_LENGTH) {
109
+ const state = this._queue.shift();
110
+ if (!state) {
111
+ continue;
112
+ }
113
+ size += state.data.length + core_2.TLMessage.SIZE_OVERHEAD;
114
+ if (size <= core_1.MessageContainer.MAXIMUM_SIZE) {
115
+ let afterId;
116
+ if (state.after) {
117
+ afterId = state.after.msgId;
118
+ }
119
+ if (state.after) {
120
+ afterId = state.after.msgId;
121
+ }
122
+ state.msgId = await this._state.writeDataAsMessage(buffer, state.data, state.request.classType === "request", afterId);
123
+ this._log.debug(`Assigned msgId = ${state.msgId} to ${state.request.className ||
124
+ state.request.constructor.name}`);
125
+ batch.push(state);
126
+ continue;
127
+ }
128
+ if (batch.length) {
129
+ this._queue.unshift(state);
130
+ break;
131
+ }
132
+ this._log.warn(`Message payload for ${state.request.className || state.request.constructor.name} is too long ${state.data.length} and cannot be sent`);
133
+ state.promise.reject("Request Payload is too big");
134
+ size = 0;
135
+ }
136
+ if (!batch.length) {
137
+ return null;
138
+ }
139
+ if (batch.length > 1) {
140
+ const b = Buffer.alloc(8);
141
+ b.writeUInt32LE(core_1.MessageContainer.CONSTRUCTOR_ID, 0);
142
+ b.writeInt32LE(batch.length, 4);
143
+ data = Buffer.concat([b, buffer.getValue()]);
144
+ buffer = new BinaryWriter_1.BinaryWriter(Buffer.alloc(0));
145
+ const containerId = await this._state.writeDataAsMessage(buffer, data, false);
146
+ for (const s of batch) {
147
+ s.containerId = containerId;
148
+ }
149
+ }
150
+ data = buffer.getValue();
151
+ return { batch, data };
152
+ }
153
+ }
154
+ exports.MessagePacker = MessagePacker;
@@ -0,0 +1,12 @@
1
+ import { RequestState } from "../network/RequestState";
2
+ import bigInt from "big-integer";
3
+ export declare class PendingState {
4
+ _pending: Map<string, RequestState>;
5
+ constructor();
6
+ set(msgId: bigInt.BigInteger, state: RequestState): void;
7
+ get(msgId: bigInt.BigInteger): RequestState | undefined;
8
+ getAndDelete(msgId: bigInt.BigInteger): RequestState | undefined;
9
+ values(): RequestState[];
10
+ delete(msgId: bigInt.BigInteger): void;
11
+ clear(): void;
12
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PendingState = void 0;
4
+ class PendingState {
5
+ constructor() {
6
+ this._pending = new Map();
7
+ }
8
+ set(msgId, state) {
9
+ this._pending.set(msgId.toString(), state);
10
+ }
11
+ get(msgId) {
12
+ return this._pending.get(msgId.toString());
13
+ }
14
+ getAndDelete(msgId) {
15
+ const state = this.get(msgId);
16
+ this.delete(msgId);
17
+ return state;
18
+ }
19
+ values() {
20
+ return Array.from(this._pending.values());
21
+ }
22
+ delete(msgId) {
23
+ this._pending.delete(msgId.toString());
24
+ }
25
+ clear() {
26
+ this._pending.clear();
27
+ }
28
+ }
29
+ exports.PendingState = PendingState;