teleproto 203.0.0 → 203.0.2
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/CryptoFile.js +22 -8
- package/Helpers.d.ts +7 -8
- package/Helpers.js +32 -32
- package/Password.d.ts +1 -2
- package/Password.js +2 -3
- package/README.md +2 -18
- package/Utils.d.ts +1 -2
- package/Utils.js +31 -32
- package/Version.d.ts +1 -1
- package/Version.js +1 -1
- package/client/2fa.js +1 -2
- package/client/TelegramClient.d.ts +9 -8
- package/client/TelegramClient.js +23 -9
- package/client/auth.d.ts +0 -1
- package/client/auth.js +30 -17
- package/client/bots.js +1 -2
- package/client/buttons.js +1 -2
- package/client/chats.d.ts +0 -1
- package/client/chats.js +11 -11
- package/client/dialogs.js +3 -3
- package/client/downloads.d.ts +3 -4
- package/client/downloads.js +39 -23
- package/client/fs.js +5 -1
- package/client/index.js +22 -8
- package/client/messageParse.d.ts +1 -1
- package/client/messageParse.js +4 -4
- package/client/messages.js +25 -21
- package/client/os.js +22 -8
- package/client/telegramBaseClient.d.ts +2 -3
- package/client/telegramBaseClient.js +3 -3
- package/client/updates.d.ts +3 -1
- package/client/updates.js +10 -10
- package/client/uploads.d.ts +0 -1
- package/client/uploads.js +5 -5
- package/client/users.js +12 -13
- package/crypto/AuthKey.d.ts +1 -2
- package/crypto/CTR.d.ts +1 -2
- package/crypto/CTR.js +2 -21
- package/crypto/IGE.d.ts +0 -1
- package/crypto/RSA.d.ts +1 -2
- package/crypto/RSA.js +2 -2
- package/crypto/converters.js +5 -5
- package/crypto/crypto.d.ts +12 -20
- package/crypto/crypto.js +27 -86
- package/crypto/words.d.ts +2 -2
- package/crypto/words.js +3 -4
- package/errors/Common.d.ts +0 -1
- package/errors/index.js +6 -3
- package/events/CallbackQuery.d.ts +1 -2
- package/events/DeletedMessage.d.ts +1 -1
- package/events/DeletedMessage.js +1 -1
- package/events/common.js +2 -2
- package/extensions/BinaryReader.d.ts +3 -4
- package/extensions/BinaryWriter.d.ts +0 -1
- package/extensions/Logger.d.ts +3 -5
- package/extensions/Logger.js +45 -24
- package/extensions/MessagePacker.d.ts +1 -2
- package/extensions/PromisedNetSockets.d.ts +3 -4
- package/extensions/PromisedNetSockets.js +22 -8
- package/extensions/PromisedWebSockets.d.ts +3 -4
- package/extensions/net.js +5 -1
- package/extensions/socks.js +5 -1
- package/index.js +22 -8
- package/network/Authenticator.js +3 -4
- package/network/MTProtoSender.d.ts +1 -2
- package/network/MTProtoSender.js +20 -1
- package/network/MTProtoState.d.ts +3 -4
- package/network/RequestState.d.ts +0 -1
- package/network/connection/Connection.d.ts +1 -3
- package/network/connection/Connection.js +5 -0
- package/network/connection/TCPAbridged.d.ts +3 -4
- package/network/connection/TCPFull.d.ts +1 -2
- package/network/connection/TCPMTProxy.d.ts +4 -5
- package/network/connection/TCPObfuscated.d.ts +1 -2
- package/package.json +6 -27
- package/requestIter.js +6 -4
- package/sessions/StringSession.d.ts +1 -2
- package/sessions/index.js +0 -2
- package/tl/MTProtoRequest.d.ts +0 -1
- package/tl/api.js +1 -1
- package/tl/core/GZIPPacked.d.ts +5 -6
- package/tl/core/RPCResult.d.ts +0 -1
- package/tl/custom/button.d.ts +1 -2
- package/tl/custom/button.js +3 -3
- package/tl/custom/chatGetter.d.ts +0 -1
- package/tl/custom/chatGetter.js +7 -5
- package/tl/custom/dialog.d.ts +0 -1
- package/tl/custom/dialog.js +3 -3
- package/tl/custom/draft.d.ts +0 -1
- package/tl/custom/draft.js +3 -3
- package/tl/custom/file.d.ts +0 -1
- package/tl/custom/file.js +3 -3
- package/tl/custom/forward.d.ts +0 -1
- package/tl/custom/forward.js +3 -3
- package/tl/custom/inlineResult.d.ts +0 -1
- package/tl/custom/inlineResult.js +3 -3
- package/tl/custom/inlineResults.d.ts +0 -1
- package/tl/custom/inlineResults.js +3 -3
- package/tl/custom/message.d.ts +1 -2
- package/tl/custom/message.js +26 -12
- package/tl/custom/messageButton.d.ts +1 -2
- package/tl/custom/messageButton.js +3 -3
- package/tl/custom/senderGetter.d.ts +0 -1
- package/tl/generationHelpers.d.ts +2 -3
- package/tl/generationHelpers.js +18 -18
- package/tl/patched/index.js +1 -2
- package/sessions/CacheApiSession.d.ts +0 -18
- package/sessions/CacheApiSession.js +0 -99
package/CryptoFile.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -11,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
11
15
|
}) : function(o, v) {
|
|
12
16
|
o["default"] = v;
|
|
13
17
|
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
21
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
36
|
const crypto = __importStar(require("crypto"));
|
|
23
37
|
exports.default = crypto;
|
package/Helpers.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import bigInt from "big-integer";
|
|
3
2
|
import type { EntityLike } from "./define";
|
|
4
3
|
import type { Api } from "./tl";
|
|
@@ -25,7 +24,7 @@ export declare function betterConsoleLog(object: {
|
|
|
25
24
|
/**
|
|
26
25
|
* Helper to find if a given object is an array (or similar)
|
|
27
26
|
*/
|
|
28
|
-
export declare const isArrayLike: <T>(x: any) => x is T
|
|
27
|
+
export declare const isArrayLike: <T>(x: any) => x is Array<T>;
|
|
29
28
|
/**
|
|
30
29
|
* Special case signed little ints
|
|
31
30
|
* @param big
|
|
@@ -66,7 +65,7 @@ export declare function bigIntMod(n: bigInt.BigInteger, m: bigInt.BigInteger): b
|
|
|
66
65
|
* @param count
|
|
67
66
|
* @returns {Buffer}
|
|
68
67
|
*/
|
|
69
|
-
export declare function generateRandomBytes(count: number): Buffer
|
|
68
|
+
export declare function generateRandomBytes(count: number): Buffer<ArrayBuffer>;
|
|
70
69
|
/**
|
|
71
70
|
* Calculate the key based on Telegram guidelines, specifying whether it's the client or not
|
|
72
71
|
* @param sharedKey
|
|
@@ -82,10 +81,10 @@ export declare function stripText(text: string, entities: Api.TypeMessageEntity[
|
|
|
82
81
|
* @returns {{key: Buffer, iv: Buffer}}
|
|
83
82
|
*/
|
|
84
83
|
export declare function generateKeyDataFromNonce(serverNonceBigInt: bigInt.BigInteger, newNonceBigInt: bigInt.BigInteger): Promise<{
|
|
85
|
-
key: Buffer
|
|
86
|
-
iv: Buffer
|
|
84
|
+
key: Buffer<ArrayBuffer>;
|
|
85
|
+
iv: Buffer<ArrayBuffer>;
|
|
87
86
|
}>;
|
|
88
|
-
export declare function convertToLittle(buf: Buffer): Buffer
|
|
87
|
+
export declare function convertToLittle(buf: Buffer): Buffer<ArrayBuffer>;
|
|
89
88
|
/**
|
|
90
89
|
* Calculates the SHA1 digest for the given data
|
|
91
90
|
* @param data
|
|
@@ -112,7 +111,7 @@ export declare function modExp(a: bigInt.BigInteger, b: bigInt.BigInteger, n: bi
|
|
|
112
111
|
* @param signed {boolean}
|
|
113
112
|
* @returns {Buffer}
|
|
114
113
|
*/
|
|
115
|
-
export declare function getByteArray(integer: bigInt.BigInteger | number, signed?: boolean): Buffer
|
|
114
|
+
export declare function getByteArray(integer: bigInt.BigInteger | number, signed?: boolean): Buffer<ArrayBufferLike>;
|
|
116
115
|
export declare function returnBigInt(num: bigInt.BigInteger | string | number | bigint): bigInt.BigInteger;
|
|
117
116
|
/**
|
|
118
117
|
* Helper function to return the smaller big int in an array
|
|
@@ -137,7 +136,7 @@ export declare const sleep: (ms: number, isUnref?: boolean) => Promise<unknown>;
|
|
|
137
136
|
* Helper to export two buffers of same length
|
|
138
137
|
* @returns {Buffer}
|
|
139
138
|
*/
|
|
140
|
-
export declare function bufferXor(a: Buffer, b: Buffer): Buffer
|
|
139
|
+
export declare function bufferXor(a: Buffer, b: Buffer): Buffer<ArrayBuffer>;
|
|
141
140
|
export declare function crc32(buf: Buffer | string): number;
|
|
142
141
|
export declare class TotalList<T> extends Array<T> {
|
|
143
142
|
total?: number;
|
package/Helpers.js
CHANGED
|
@@ -3,7 +3,31 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports._EntityType = exports.TotalList = exports.sleep = exports.isArrayLike = void 0;
|
|
7
|
+
exports.readBigIntFromBuffer = readBigIntFromBuffer;
|
|
8
|
+
exports.generateRandomBigInt = generateRandomBigInt;
|
|
9
|
+
exports.escapeRegex = escapeRegex;
|
|
10
|
+
exports.groupBy = groupBy;
|
|
11
|
+
exports.betterConsoleLog = betterConsoleLog;
|
|
12
|
+
exports.toSignedLittleBuffer = toSignedLittleBuffer;
|
|
13
|
+
exports.readBufferFromBigInt = readBufferFromBigInt;
|
|
14
|
+
exports.generateRandomLong = generateRandomLong;
|
|
15
|
+
exports.mod = mod;
|
|
16
|
+
exports.bigIntMod = bigIntMod;
|
|
17
|
+
exports.generateRandomBytes = generateRandomBytes;
|
|
18
|
+
exports.stripText = stripText;
|
|
19
|
+
exports.generateKeyDataFromNonce = generateKeyDataFromNonce;
|
|
20
|
+
exports.convertToLittle = convertToLittle;
|
|
21
|
+
exports.sha1 = sha1;
|
|
22
|
+
exports.sha256 = sha256;
|
|
23
|
+
exports.modExp = modExp;
|
|
24
|
+
exports.getByteArray = getByteArray;
|
|
25
|
+
exports.returnBigInt = returnBigInt;
|
|
26
|
+
exports.getMinBigInt = getMinBigInt;
|
|
27
|
+
exports.getRandomInt = getRandomInt;
|
|
28
|
+
exports.bufferXor = bufferXor;
|
|
29
|
+
exports.crc32 = crc32;
|
|
30
|
+
exports._entityType = _entityType;
|
|
7
31
|
const big_integer_1 = __importDefault(require("big-integer"));
|
|
8
32
|
const CryptoFile_1 = __importDefault(require("./CryptoFile"));
|
|
9
33
|
/**
|
|
@@ -25,15 +49,12 @@ function readBigIntFromBuffer(buffer, little = true, signed = false) {
|
|
|
25
49
|
}
|
|
26
50
|
return bigIntVar;
|
|
27
51
|
}
|
|
28
|
-
exports.readBigIntFromBuffer = readBigIntFromBuffer;
|
|
29
52
|
function generateRandomBigInt() {
|
|
30
53
|
return readBigIntFromBuffer(generateRandomBytes(8), false);
|
|
31
54
|
}
|
|
32
|
-
exports.generateRandomBigInt = generateRandomBigInt;
|
|
33
55
|
function escapeRegex(string) {
|
|
34
56
|
return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
35
57
|
}
|
|
36
|
-
exports.escapeRegex = escapeRegex;
|
|
37
58
|
function groupBy(list, keyGetter) {
|
|
38
59
|
const map = new Map();
|
|
39
60
|
list.forEach((item) => {
|
|
@@ -48,7 +69,6 @@ function groupBy(list, keyGetter) {
|
|
|
48
69
|
});
|
|
49
70
|
return map;
|
|
50
71
|
}
|
|
51
|
-
exports.groupBy = groupBy;
|
|
52
72
|
/**
|
|
53
73
|
* Outputs the object in a better way by hiding all the private methods/attributes.
|
|
54
74
|
* @param object - the class to use
|
|
@@ -64,7 +84,6 @@ function betterConsoleLog(object) {
|
|
|
64
84
|
}
|
|
65
85
|
return toPrint;
|
|
66
86
|
}
|
|
67
|
-
exports.betterConsoleLog = betterConsoleLog;
|
|
68
87
|
/**
|
|
69
88
|
* Helper to find if a given object is an array (or similar)
|
|
70
89
|
*/
|
|
@@ -105,7 +124,6 @@ function toSignedLittleBuffer(big, number = 8) {
|
|
|
105
124
|
// smh hacks
|
|
106
125
|
return Buffer.from(byteArray);
|
|
107
126
|
}
|
|
108
|
-
exports.toSignedLittleBuffer = toSignedLittleBuffer;
|
|
109
127
|
/**
|
|
110
128
|
* converts a big int to a buffer
|
|
111
129
|
* @param bigIntVar {BigInteger}
|
|
@@ -136,7 +154,6 @@ function readBufferFromBigInt(bigIntVar, bytesNumber, little = true, signed = fa
|
|
|
136
154
|
}
|
|
137
155
|
return buffer;
|
|
138
156
|
}
|
|
139
|
-
exports.readBufferFromBigInt = readBufferFromBigInt;
|
|
140
157
|
/**
|
|
141
158
|
* Generates a random long integer (8 bytes), which is optionally signed
|
|
142
159
|
* @returns {BigInteger}
|
|
@@ -144,7 +161,6 @@ exports.readBufferFromBigInt = readBufferFromBigInt;
|
|
|
144
161
|
function generateRandomLong(signed = true) {
|
|
145
162
|
return readBigIntFromBuffer(generateRandomBytes(8), true, signed);
|
|
146
163
|
}
|
|
147
|
-
exports.generateRandomLong = generateRandomLong;
|
|
148
164
|
/**
|
|
149
165
|
* .... really javascript
|
|
150
166
|
* @param n {number}
|
|
@@ -154,7 +170,6 @@ exports.generateRandomLong = generateRandomLong;
|
|
|
154
170
|
function mod(n, m) {
|
|
155
171
|
return ((n % m) + m) % m;
|
|
156
172
|
}
|
|
157
|
-
exports.mod = mod;
|
|
158
173
|
/**
|
|
159
174
|
* returns a positive bigInt
|
|
160
175
|
* @param n {bigInt.BigInteger}
|
|
@@ -164,7 +179,6 @@ exports.mod = mod;
|
|
|
164
179
|
function bigIntMod(n, m) {
|
|
165
180
|
return n.remainder(m).add(m).remainder(m);
|
|
166
181
|
}
|
|
167
|
-
exports.bigIntMod = bigIntMod;
|
|
168
182
|
/**
|
|
169
183
|
* Generates a random bytes array
|
|
170
184
|
* @param count
|
|
@@ -173,7 +187,6 @@ exports.bigIntMod = bigIntMod;
|
|
|
173
187
|
function generateRandomBytes(count) {
|
|
174
188
|
return Buffer.from(CryptoFile_1.default.randomBytes(count));
|
|
175
189
|
}
|
|
176
|
-
exports.generateRandomBytes = generateRandomBytes;
|
|
177
190
|
/**
|
|
178
191
|
* Calculate the key based on Telegram guidelines, specifying whether it's the client or not
|
|
179
192
|
* @param sharedKey
|
|
@@ -240,7 +253,6 @@ function stripText(text, entities) {
|
|
|
240
253
|
}
|
|
241
254
|
return text;
|
|
242
255
|
}
|
|
243
|
-
exports.stripText = stripText;
|
|
244
256
|
/**
|
|
245
257
|
* Generates the key data corresponding to the given nonces
|
|
246
258
|
* @param serverNonceBigInt
|
|
@@ -266,7 +278,6 @@ async function generateKeyDataFromNonce(serverNonceBigInt, newNonceBigInt) {
|
|
|
266
278
|
iv: ivBuffer,
|
|
267
279
|
};
|
|
268
280
|
}
|
|
269
|
-
exports.generateKeyDataFromNonce = generateKeyDataFromNonce;
|
|
270
281
|
function convertToLittle(buf) {
|
|
271
282
|
const correct = Buffer.alloc(buf.length * 4);
|
|
272
283
|
for (let i = 0; i < buf.length; i++) {
|
|
@@ -274,7 +285,6 @@ function convertToLittle(buf) {
|
|
|
274
285
|
}
|
|
275
286
|
return correct;
|
|
276
287
|
}
|
|
277
|
-
exports.convertToLittle = convertToLittle;
|
|
278
288
|
/**
|
|
279
289
|
* Calculates the SHA1 digest for the given data
|
|
280
290
|
* @param data
|
|
@@ -286,7 +296,6 @@ function sha1(data) {
|
|
|
286
296
|
// @ts-ignore
|
|
287
297
|
return shaSum.digest();
|
|
288
298
|
}
|
|
289
|
-
exports.sha1 = sha1;
|
|
290
299
|
/**
|
|
291
300
|
* Calculates the SHA256 digest for the given data
|
|
292
301
|
* @param data
|
|
@@ -298,7 +307,6 @@ function sha256(data) {
|
|
|
298
307
|
// @ts-ignore
|
|
299
308
|
return shaSum.digest();
|
|
300
309
|
}
|
|
301
|
-
exports.sha256 = sha256;
|
|
302
310
|
/**
|
|
303
311
|
* Fast mod pow for RSA calculation. a^b % n
|
|
304
312
|
* @param a
|
|
@@ -322,7 +330,6 @@ function modExp(a, b, n) {
|
|
|
322
330
|
}
|
|
323
331
|
return result;
|
|
324
332
|
}
|
|
325
|
-
exports.modExp = modExp;
|
|
326
333
|
/**
|
|
327
334
|
* Gets the arbitrary-length byte array corresponding to the given integer
|
|
328
335
|
* @param integer {number,BigInteger}
|
|
@@ -334,7 +341,6 @@ function getByteArray(integer, signed = false) {
|
|
|
334
341
|
const byteLength = Math.floor((bits + 8 - 1) / 8);
|
|
335
342
|
return readBufferFromBigInt(typeof integer == "number" ? (0, big_integer_1.default)(integer) : integer, byteLength, false, signed);
|
|
336
343
|
}
|
|
337
|
-
exports.getByteArray = getByteArray;
|
|
338
344
|
function returnBigInt(num) {
|
|
339
345
|
if (big_integer_1.default.isInstance(num)) {
|
|
340
346
|
return num;
|
|
@@ -347,7 +353,6 @@ function returnBigInt(num) {
|
|
|
347
353
|
}
|
|
348
354
|
return (0, big_integer_1.default)(num);
|
|
349
355
|
}
|
|
350
|
-
exports.returnBigInt = returnBigInt;
|
|
351
356
|
/**
|
|
352
357
|
* Helper function to return the smaller big int in an array
|
|
353
358
|
* @param arrayOfBigInts
|
|
@@ -367,7 +372,6 @@ function getMinBigInt(arrayOfBigInts) {
|
|
|
367
372
|
}
|
|
368
373
|
return smallest;
|
|
369
374
|
}
|
|
370
|
-
exports.getMinBigInt = getMinBigInt;
|
|
371
375
|
/**
|
|
372
376
|
* returns a random int from min (inclusive) and max (inclusive)
|
|
373
377
|
* @param min
|
|
@@ -379,7 +383,6 @@ function getRandomInt(min, max) {
|
|
|
379
383
|
max = Math.floor(max);
|
|
380
384
|
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
381
385
|
}
|
|
382
|
-
exports.getRandomInt = getRandomInt;
|
|
383
386
|
/**
|
|
384
387
|
* Sleeps a specified amount of time
|
|
385
388
|
* @param ms time in milliseconds
|
|
@@ -399,7 +402,6 @@ function bufferXor(a, b) {
|
|
|
399
402
|
}
|
|
400
403
|
return Buffer.from(res);
|
|
401
404
|
}
|
|
402
|
-
exports.bufferXor = bufferXor;
|
|
403
405
|
// Taken from https://stackoverflow.com/questions/18638900/javascript-crc32/18639999#18639999
|
|
404
406
|
function makeCRCTable() {
|
|
405
407
|
let c;
|
|
@@ -428,7 +430,6 @@ function crc32(buf) {
|
|
|
428
430
|
}
|
|
429
431
|
return (crc ^ -1) >>> 0;
|
|
430
432
|
}
|
|
431
|
-
exports.crc32 = crc32;
|
|
432
433
|
class TotalList extends Array {
|
|
433
434
|
constructor() {
|
|
434
435
|
super();
|
|
@@ -447,13 +448,13 @@ function _entityType(entity) {
|
|
|
447
448
|
throw new Error(`${entity} is not a TLObject, cannot determine entity type`);
|
|
448
449
|
}
|
|
449
450
|
if (![
|
|
450
|
-
0x2d45687,
|
|
451
|
-
0xc91c90b6,
|
|
452
|
-
0xe669bf46,
|
|
453
|
-
0x40f202fd,
|
|
454
|
-
0x2da17977,
|
|
455
|
-
0xc5af5d94,
|
|
456
|
-
0x1f4661b9,
|
|
451
|
+
0x2d45687, // crc32('Peer')
|
|
452
|
+
0xc91c90b6, // crc32('InputPeer')
|
|
453
|
+
0xe669bf46, // crc32('InputUser')
|
|
454
|
+
0x40f202fd, // crc32('InputChannel')
|
|
455
|
+
0x2da17977, // crc32('User')
|
|
456
|
+
0xc5af5d94, // crc32('Chat')
|
|
457
|
+
0x1f4661b9, // crc32('UserFull')
|
|
457
458
|
0xd49a2697, // crc32('ChatFull')
|
|
458
459
|
].includes(entity.SUBCLASS_OF_ID)) {
|
|
459
460
|
throw new Error(`${entity} does not have any entity type`);
|
|
@@ -474,4 +475,3 @@ function _entityType(entity) {
|
|
|
474
475
|
// 'Empty' in name or not found, we don't care, not a valid entity.
|
|
475
476
|
throw new Error(`${entity} does not have any entity type`);
|
|
476
477
|
}
|
|
477
|
-
exports._entityType = _entityType;
|
package/Password.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { Api } from "./tl";
|
|
3
2
|
/**
|
|
4
3
|
*
|
|
5
4
|
* @param algo {constructors.PasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow}
|
|
6
5
|
* @param password
|
|
7
6
|
*/
|
|
8
|
-
declare function computeDigest(algo: Api.PasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow, password: string): Promise<Buffer
|
|
7
|
+
declare function computeDigest(algo: Api.PasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow, password: string): Promise<Buffer<ArrayBufferLike>>;
|
|
9
8
|
/**
|
|
10
9
|
*
|
|
11
10
|
* @param request {constructors.account.Password}
|
package/Password.js
CHANGED
|
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.computeCheck = computeCheck;
|
|
7
|
+
exports.computeDigest = computeDigest;
|
|
7
8
|
const tl_1 = require("./tl");
|
|
8
9
|
const Helpers_1 = require("./Helpers");
|
|
9
10
|
const big_integer_1 = __importDefault(require("big-integer"));
|
|
@@ -182,7 +183,6 @@ async function computeDigest(algo, password) {
|
|
|
182
183
|
const value = (0, Helpers_1.modExp)((0, big_integer_1.default)(algo.g), (0, Helpers_1.readBigIntFromBuffer)(await computeHash(algo, password), false), (0, Helpers_1.readBigIntFromBuffer)(algo.p, false));
|
|
183
184
|
return bigNumForHash(value);
|
|
184
185
|
}
|
|
185
|
-
exports.computeDigest = computeDigest;
|
|
186
186
|
/**
|
|
187
187
|
*
|
|
188
188
|
* @param request {constructors.account.Password}
|
|
@@ -268,4 +268,3 @@ async function computeCheck(request, password) {
|
|
|
268
268
|
M1: M1,
|
|
269
269
|
});
|
|
270
270
|
}
|
|
271
|
-
exports.computeCheck = computeCheck;
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# teleproto
|
|
2
2
|
|
|
3
|
-
A modern Telegram client library written in TypeScript for Node.js
|
|
3
|
+
A modern Telegram client library written in TypeScript for Node.js, forked from [GramJS](https://github.com/gram-js/gramjs) with performance and size improvements.
|
|
4
4
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
@@ -72,14 +72,6 @@ const storeSession = new StoreSession("session_folder");
|
|
|
72
72
|
const client = new TelegramClient(storeSession, apiId, apiHash, {});
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
## Browser Support
|
|
76
|
-
|
|
77
|
-
teleproto works in browsers with frontend frameworks like React and Vue. To generate a browser bundle:
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
node generate_webpack.js
|
|
81
|
-
```
|
|
82
|
-
|
|
83
75
|
## API Usage
|
|
84
76
|
|
|
85
77
|
### Calling Raw API Methods
|
|
@@ -100,12 +92,4 @@ client.addEventHandler(async (event) => {
|
|
|
100
92
|
await event.message.reply("Hi there!");
|
|
101
93
|
}
|
|
102
94
|
}, new NewMessage({}));
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
## Documentation
|
|
106
|
-
|
|
107
|
-
For detailed documentation, visit our [documentation site](https://teleproto.dev).
|
|
108
|
-
|
|
109
|
-
## Need Help?
|
|
110
|
-
|
|
111
|
-
If you have questions about teleproto, feel free to open an issue or join our community.
|
|
95
|
+
```
|
package/Utils.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import bigInt from "big-integer";
|
|
3
2
|
import type { ParseInterface } from "./client/messageParse";
|
|
4
3
|
import { CustomFile } from "./client/uploads";
|
|
@@ -81,7 +80,7 @@ export declare function getInputChatPhoto(photo: any): Api.TypeInputChatPhoto;
|
|
|
81
80
|
* @param stripped{Buffer}
|
|
82
81
|
* @returns {Buffer}
|
|
83
82
|
*/
|
|
84
|
-
export declare function strippedPhotoToJpg(stripped: Buffer): Buffer
|
|
83
|
+
export declare function strippedPhotoToJpg(stripped: Buffer): Buffer<ArrayBufferLike>;
|
|
85
84
|
/**
|
|
86
85
|
* Similar to :meth:`get_input_peer`, but for photos
|
|
87
86
|
*/
|
package/Utils.js
CHANGED
|
@@ -3,7 +3,37 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.getFileInfo = getFileInfo;
|
|
7
|
+
exports.chunks = chunks;
|
|
8
|
+
exports.getInputPeer = getInputPeer;
|
|
9
|
+
exports._photoSizeByteCount = _photoSizeByteCount;
|
|
10
|
+
exports._getEntityPair = _getEntityPair;
|
|
11
|
+
exports.getInnerText = getInnerText;
|
|
12
|
+
exports.getInputChannel = getInputChannel;
|
|
13
|
+
exports.getInputUser = getInputUser;
|
|
14
|
+
exports.getInputMessage = getInputMessage;
|
|
15
|
+
exports.getInputChatPhoto = getInputChatPhoto;
|
|
16
|
+
exports.strippedPhotoToJpg = strippedPhotoToJpg;
|
|
17
|
+
exports.getInputPhoto = getInputPhoto;
|
|
18
|
+
exports.getInputDocument = getInputDocument;
|
|
19
|
+
exports.isAudio = isAudio;
|
|
20
|
+
exports.isImage = isImage;
|
|
21
|
+
exports.getExtension = getExtension;
|
|
22
|
+
exports.getAttributes = getAttributes;
|
|
23
|
+
exports.getInputGeo = getInputGeo;
|
|
24
|
+
exports.getInputMedia = getInputMedia;
|
|
25
|
+
exports.getAppropriatedPartSize = getAppropriatedPartSize;
|
|
26
|
+
exports.getPeer = getPeer;
|
|
27
|
+
exports.sanitizeParseMode = sanitizeParseMode;
|
|
28
|
+
exports.getPeerId = getPeerId;
|
|
29
|
+
exports.resolveId = resolveId;
|
|
30
|
+
exports.getMessageId = getMessageId;
|
|
31
|
+
exports.parsePhone = parsePhone;
|
|
32
|
+
exports.parseID = parseID;
|
|
33
|
+
exports.resolveInviteLink = resolveInviteLink;
|
|
34
|
+
exports.parseUsername = parseUsername;
|
|
35
|
+
exports.rtrim = rtrim;
|
|
36
|
+
exports.getDisplayName = getDisplayName;
|
|
7
37
|
const big_integer_1 = __importDefault(require("big-integer"));
|
|
8
38
|
const mime_1 = __importDefault(require("mime"));
|
|
9
39
|
const html_1 = require("./extensions/html");
|
|
@@ -58,7 +88,6 @@ function getFileInfo(fileLocation) {
|
|
|
58
88
|
}
|
|
59
89
|
_raiseCastFail(fileLocation, "InputFileLocation");
|
|
60
90
|
}
|
|
61
|
-
exports.getFileInfo = getFileInfo;
|
|
62
91
|
/**
|
|
63
92
|
* Turns the given iterable into chunks of the specified size,
|
|
64
93
|
* which is 100 by default since that's what Telegram uses the most.
|
|
@@ -68,7 +97,6 @@ function* chunks(arr, size = 100) {
|
|
|
68
97
|
yield arr.slice(i, i + size);
|
|
69
98
|
}
|
|
70
99
|
}
|
|
71
|
-
exports.chunks = chunks;
|
|
72
100
|
const USERNAME_RE = new RegExp("@|(?:https?:\\/\\/)?(?:www\\.)?" +
|
|
73
101
|
"(?:telegram\\.(?:me|dog)|t\\.me)\\/(@|joinchat\\/)?", "i");
|
|
74
102
|
const JPEG_HEADER = Buffer.from("ffd8ffe000104a46494600010100000100010000ffdb004300281c1e231e19282321232d2b28303c64413c37373c7b585d4964918099968f808c8aa0b4e6c3a0aadaad8a8cc8ffcbdaeef5ffffff9bc1fffffffaffe6fdfff8ffdb0043012b2d2d3c353c76414176f8a58ca5f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8ffc00011080000000003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00", "hex");
|
|
@@ -184,7 +212,6 @@ function getInputPeer(entity, allowSelf = true, checkHash = true) {
|
|
|
184
212
|
}
|
|
185
213
|
_raiseCastFail(entity, "InputPeer");
|
|
186
214
|
}
|
|
187
|
-
exports.getInputPeer = getInputPeer;
|
|
188
215
|
function _photoSizeByteCount(size) {
|
|
189
216
|
if (size instanceof tl_1.Api.PhotoSize) {
|
|
190
217
|
return size.size;
|
|
@@ -208,7 +235,6 @@ function _photoSizeByteCount(size) {
|
|
|
208
235
|
return undefined;
|
|
209
236
|
}
|
|
210
237
|
}
|
|
211
|
-
exports._photoSizeByteCount = _photoSizeByteCount;
|
|
212
238
|
function _getEntityPair(entityId, entities, cache, getInputPeerFunction = getInputPeer) {
|
|
213
239
|
const entity = entities.get(entityId);
|
|
214
240
|
let inputEntity;
|
|
@@ -223,7 +249,6 @@ function _getEntityPair(entityId, entities, cache, getInputPeerFunction = getInp
|
|
|
223
249
|
}
|
|
224
250
|
return [entity, inputEntity];
|
|
225
251
|
}
|
|
226
|
-
exports._getEntityPair = _getEntityPair;
|
|
227
252
|
function getInnerText(text, entities) {
|
|
228
253
|
const result = [];
|
|
229
254
|
entities.forEach(function (value, key) {
|
|
@@ -233,7 +258,6 @@ function getInnerText(text, entities) {
|
|
|
233
258
|
});
|
|
234
259
|
return result;
|
|
235
260
|
}
|
|
236
|
-
exports.getInnerText = getInnerText;
|
|
237
261
|
/**
|
|
238
262
|
Similar to :meth:`get_input_peer`, but for :tl:`InputChannel`'s alone.
|
|
239
263
|
|
|
@@ -275,7 +299,6 @@ function getInputChannel(entity) {
|
|
|
275
299
|
}
|
|
276
300
|
_raiseCastFail(entity, "InputChannel");
|
|
277
301
|
}
|
|
278
|
-
exports.getInputChannel = getInputChannel;
|
|
279
302
|
/**
|
|
280
303
|
Similar to :meth:`getInputPeer`, but for :tl:`InputUser`'s alone.
|
|
281
304
|
|
|
@@ -337,7 +360,6 @@ function getInputUser(entity) {
|
|
|
337
360
|
}
|
|
338
361
|
_raiseCastFail(entity, "InputUser");
|
|
339
362
|
}
|
|
340
|
-
exports.getInputUser = getInputUser;
|
|
341
363
|
/**
|
|
342
364
|
Similar to :meth:`get_input_peer`, but for dialogs
|
|
343
365
|
* @param dialog
|
|
@@ -384,7 +406,6 @@ function getInputMessage(message) {
|
|
|
384
406
|
}
|
|
385
407
|
_raiseCastFail(message, "InputMessage");
|
|
386
408
|
}
|
|
387
|
-
exports.getInputMessage = getInputMessage;
|
|
388
409
|
/**
|
|
389
410
|
* Similar to :meth:`get_input_peer`, but for input messages.
|
|
390
411
|
*/
|
|
@@ -413,7 +434,6 @@ function getInputChatPhoto(photo) {
|
|
|
413
434
|
}
|
|
414
435
|
_raiseCastFail(photo, "InputChatPhoto");
|
|
415
436
|
}
|
|
416
|
-
exports.getInputChatPhoto = getInputChatPhoto;
|
|
417
437
|
/**
|
|
418
438
|
* Adds the JPG header and footer to a stripped image.
|
|
419
439
|
* Ported from https://github.com/telegramdesktop/tdesktop/blob/bec39d89e19670eb436dc794a8f20b657cb87c71/Telegram/SourceFiles/ui/image/image.cpp#L225
|
|
@@ -431,7 +451,6 @@ function strippedPhotoToJpg(stripped) {
|
|
|
431
451
|
header[166] = stripped[2];
|
|
432
452
|
return Buffer.concat([header, stripped.slice(3), JPEG_FOOTER]);
|
|
433
453
|
}
|
|
434
|
-
exports.strippedPhotoToJpg = strippedPhotoToJpg;
|
|
435
454
|
/*CONTEST
|
|
436
455
|
function getInputLocation(location) {
|
|
437
456
|
try {
|
|
@@ -538,7 +557,6 @@ function getInputPhoto(photo) {
|
|
|
538
557
|
}
|
|
539
558
|
_raiseCastFail(photo, "InputPhoto");
|
|
540
559
|
}
|
|
541
|
-
exports.getInputPhoto = getInputPhoto;
|
|
542
560
|
/**
|
|
543
561
|
* Similar to :meth:`get_input_peer`, but for documents
|
|
544
562
|
*/
|
|
@@ -567,7 +585,6 @@ function getInputDocument(document) {
|
|
|
567
585
|
}
|
|
568
586
|
_raiseCastFail(document, "InputDocument");
|
|
569
587
|
}
|
|
570
|
-
exports.getInputDocument = getInputDocument;
|
|
571
588
|
/**
|
|
572
589
|
* Returns `True` if the file has an audio mime type.
|
|
573
590
|
*/
|
|
@@ -582,7 +599,6 @@ function isAudio(file) {
|
|
|
582
599
|
return (mime_1.default.getType(file) || "").startsWith("audio/");
|
|
583
600
|
}
|
|
584
601
|
}
|
|
585
|
-
exports.isAudio = isAudio;
|
|
586
602
|
/**
|
|
587
603
|
* Returns `True` if the file has an image mime type.
|
|
588
604
|
*/
|
|
@@ -590,7 +606,6 @@ function isImage(file) {
|
|
|
590
606
|
const ext = _getExtension(file).toLowerCase();
|
|
591
607
|
return (ext.endsWith(".png") || ext.endsWith(".jpg") || ext.endsWith(".jpeg"));
|
|
592
608
|
}
|
|
593
|
-
exports.isImage = isImage;
|
|
594
609
|
function getExtension(media) {
|
|
595
610
|
// Photos are always compressed as .jpg by Telegram
|
|
596
611
|
try {
|
|
@@ -618,7 +633,6 @@ function getExtension(media) {
|
|
|
618
633
|
}
|
|
619
634
|
return "";
|
|
620
635
|
}
|
|
621
|
-
exports.getExtension = getExtension;
|
|
622
636
|
/**
|
|
623
637
|
* Gets the extension for the given file, which can be either a
|
|
624
638
|
* str or an ``open()``'ed file (which has a ``.name`` attribute).
|
|
@@ -733,7 +747,6 @@ function getAttributes(file, { attributes = null, mimeType = undefined, forceDoc
|
|
|
733
747
|
mimeType: mimeType,
|
|
734
748
|
};
|
|
735
749
|
}
|
|
736
|
-
exports.getAttributes = getAttributes;
|
|
737
750
|
/**
|
|
738
751
|
* Similar to :meth:`get_input_peer`, but for geo points
|
|
739
752
|
*/
|
|
@@ -759,7 +772,6 @@ function getInputGeo(geo) {
|
|
|
759
772
|
}
|
|
760
773
|
_raiseCastFail(geo, "InputGeoPoint");
|
|
761
774
|
}
|
|
762
|
-
exports.getInputGeo = getInputGeo;
|
|
763
775
|
/**
|
|
764
776
|
*
|
|
765
777
|
Similar to :meth:`get_input_peer`, but for media.
|
|
@@ -910,7 +922,6 @@ function getInputMedia(media, { isPhoto = false, attributes = undefined, forceDo
|
|
|
910
922
|
}
|
|
911
923
|
_raiseCastFail(media, "InputMedia");
|
|
912
924
|
}
|
|
913
|
-
exports.getInputMedia = getInputMedia;
|
|
914
925
|
/**
|
|
915
926
|
* Gets the appropriated part size when uploading or downloading files,
|
|
916
927
|
* given an initial file size.
|
|
@@ -928,7 +939,6 @@ function getAppropriatedPartSize(fileSize) {
|
|
|
928
939
|
}
|
|
929
940
|
return 512;
|
|
930
941
|
}
|
|
931
|
-
exports.getAppropriatedPartSize = getAppropriatedPartSize;
|
|
932
942
|
function getPeer(peer) {
|
|
933
943
|
if (!peer) {
|
|
934
944
|
_raiseCastFail(peer, "undefined");
|
|
@@ -990,7 +1000,6 @@ function getPeer(peer) {
|
|
|
990
1000
|
catch (e) { }
|
|
991
1001
|
_raiseCastFail(peer, "peer");
|
|
992
1002
|
}
|
|
993
|
-
exports.getPeer = getPeer;
|
|
994
1003
|
function sanitizeParseMode(mode) {
|
|
995
1004
|
if (mode === "md" || mode === "markdown") {
|
|
996
1005
|
return markdown_1.MarkdownParser;
|
|
@@ -1008,7 +1017,6 @@ function sanitizeParseMode(mode) {
|
|
|
1008
1017
|
}
|
|
1009
1018
|
throw new Error(`Invalid parse mode type ${mode}`);
|
|
1010
1019
|
}
|
|
1011
|
-
exports.sanitizeParseMode = sanitizeParseMode;
|
|
1012
1020
|
/**
|
|
1013
1021
|
Convert the given peer into its marked ID by default.
|
|
1014
1022
|
|
|
@@ -1066,7 +1074,6 @@ function getPeerId(peer, addMark = true) {
|
|
|
1066
1074
|
}
|
|
1067
1075
|
_raiseCastFail(peer, "int");
|
|
1068
1076
|
}
|
|
1069
|
-
exports.getPeerId = getPeerId;
|
|
1070
1077
|
/**
|
|
1071
1078
|
* Given a marked ID, returns the original ID and its :tl:`Peer` type.
|
|
1072
1079
|
* @param markedId
|
|
@@ -1085,7 +1092,6 @@ function resolveId(markedId) {
|
|
|
1085
1092
|
}
|
|
1086
1093
|
return [markedId.negate(), tl_1.Api.PeerChat];
|
|
1087
1094
|
}
|
|
1088
|
-
exports.resolveId = resolveId;
|
|
1089
1095
|
/**
|
|
1090
1096
|
* returns an entity pair
|
|
1091
1097
|
* @param entityId
|
|
@@ -1128,7 +1134,6 @@ function getMessageId(message) {
|
|
|
1128
1134
|
throw new Error(`Invalid message type: ${message.constructor.name}`);
|
|
1129
1135
|
}
|
|
1130
1136
|
}
|
|
1131
|
-
exports.getMessageId = getMessageId;
|
|
1132
1137
|
/**
|
|
1133
1138
|
* Parses the given phone, or returns `undefined` if it's invalid.
|
|
1134
1139
|
* @param phone
|
|
@@ -1139,7 +1144,6 @@ function parsePhone(phone) {
|
|
|
1139
1144
|
return !isNaN(Number(phone)) ? phone.replace("+", "") : undefined;
|
|
1140
1145
|
}
|
|
1141
1146
|
}
|
|
1142
|
-
exports.parsePhone = parsePhone;
|
|
1143
1147
|
/**
|
|
1144
1148
|
* Parses a string ID into a big int
|
|
1145
1149
|
* @param id
|
|
@@ -1148,11 +1152,9 @@ function parseID(id) {
|
|
|
1148
1152
|
const isValid = /^(-?[0-9][0-9]*)$/.test(id);
|
|
1149
1153
|
return isValid ? (0, big_integer_1.default)(id) : undefined;
|
|
1150
1154
|
}
|
|
1151
|
-
exports.parseID = parseID;
|
|
1152
1155
|
function resolveInviteLink(link) {
|
|
1153
1156
|
throw new Error("not implemented");
|
|
1154
1157
|
}
|
|
1155
|
-
exports.resolveInviteLink = resolveInviteLink;
|
|
1156
1158
|
/**
|
|
1157
1159
|
Parses the given username or channel access hash, given
|
|
1158
1160
|
a string, username or URL. Returns a tuple consisting of
|
|
@@ -1191,14 +1193,12 @@ function parseUsername(username) {
|
|
|
1191
1193
|
};
|
|
1192
1194
|
}
|
|
1193
1195
|
}
|
|
1194
|
-
exports.parseUsername = parseUsername;
|
|
1195
1196
|
function rtrim(s, mask) {
|
|
1196
1197
|
while (~mask.indexOf(s[s.length - 1])) {
|
|
1197
1198
|
s = s.slice(0, -1);
|
|
1198
1199
|
}
|
|
1199
1200
|
return s;
|
|
1200
1201
|
}
|
|
1201
|
-
exports.rtrim = rtrim;
|
|
1202
1202
|
/**
|
|
1203
1203
|
* Gets the display name for the given :tl:`User`,
|
|
1204
1204
|
:tl:`Chat` or :tl:`Channel`. Returns an empty string otherwise
|
|
@@ -1224,7 +1224,6 @@ function getDisplayName(entity) {
|
|
|
1224
1224
|
}
|
|
1225
1225
|
return "";
|
|
1226
1226
|
}
|
|
1227
|
-
exports.getDisplayName = getDisplayName;
|
|
1228
1227
|
/**
|
|
1229
1228
|
* check if a given item is an array like or not
|
|
1230
1229
|
* @param item
|
package/Version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "203.0.
|
|
1
|
+
export declare const version = "203.0.2";
|