sroosh 1.0.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 (250) hide show
  1. package/CryptoFile-BROWSER.d.ts +2 -0
  2. package/CryptoFile-BROWSER.js +23 -0
  3. package/CryptoFile.d.ts +2 -0
  4. package/CryptoFile.js +23 -0
  5. package/Helpers.d.ts +151 -0
  6. package/Helpers.js +480 -0
  7. package/Password.d.ts +15 -0
  8. package/Password.js +271 -0
  9. package/README.md +105 -0
  10. package/Utils.d.ts +228 -0
  11. package/Utils.js +1248 -0
  12. package/Version.d.ts +1 -0
  13. package/Version.js +4 -0
  14. package/client/2fa.d.ts +48 -0
  15. package/client/2fa.js +109 -0
  16. package/client/TelegramClient.d.ts +1042 -0
  17. package/client/TelegramClient.js +1244 -0
  18. package/client/account.d.ts +0 -0
  19. package/client/account.js +1 -0
  20. package/client/auth.d.ts +93 -0
  21. package/client/auth.js +363 -0
  22. package/client/bots.d.ts +6 -0
  23. package/client/bots.js +24 -0
  24. package/client/buttons.d.ts +4 -0
  25. package/client/buttons.js +87 -0
  26. package/client/chats.d.ts +46 -0
  27. package/client/chats.js +350 -0
  28. package/client/dialogs.d.ts +52 -0
  29. package/client/dialogs.js +174 -0
  30. package/client/downloads.d.ts +157 -0
  31. package/client/downloads.js +598 -0
  32. package/client/fs-BROWSER.d.ts +10 -0
  33. package/client/fs-BROWSER.js +13 -0
  34. package/client/fs.d.ts +1 -0
  35. package/client/fs.js +13 -0
  36. package/client/index.d.ts +15 -0
  37. package/client/index.js +50 -0
  38. package/client/messageParse.d.ts +17 -0
  39. package/client/messageParse.js +191 -0
  40. package/client/messages.d.ts +259 -0
  41. package/client/messages.js +804 -0
  42. package/client/os-BROWSER.d.ts +5 -0
  43. package/client/os-BROWSER.js +10 -0
  44. package/client/os.d.ts +2 -0
  45. package/client/os.js +23 -0
  46. package/client/path-BROWSER.d.ts +7 -0
  47. package/client/path-BROWSER.js +8 -0
  48. package/client/path.d.ts +2 -0
  49. package/client/path.js +7 -0
  50. package/client/telegramBaseClient.d.ts +239 -0
  51. package/client/telegramBaseClient.js +369 -0
  52. package/client/updates.d.ts +31 -0
  53. package/client/updates.js +254 -0
  54. package/client/uploads.d.ts +137 -0
  55. package/client/uploads.js +514 -0
  56. package/client/users.d.ts +29 -0
  57. package/client/users.js +491 -0
  58. package/crypto/AuthKey.d.ts +20 -0
  59. package/crypto/AuthKey.js +76 -0
  60. package/crypto/CTR.d.ts +6 -0
  61. package/crypto/CTR.js +35 -0
  62. package/crypto/Factorizator.d.ts +19 -0
  63. package/crypto/Factorizator.js +74 -0
  64. package/crypto/IGE.d.ts +18 -0
  65. package/crypto/IGE.js +34 -0
  66. package/crypto/RSA.d.ts +15 -0
  67. package/crypto/RSA.js +150 -0
  68. package/crypto/converters.d.ts +19 -0
  69. package/crypto/converters.js +52 -0
  70. package/crypto/crypto.d.ts +27 -0
  71. package/crypto/crypto.js +117 -0
  72. package/crypto/words.d.ts +6 -0
  73. package/crypto/words.js +48 -0
  74. package/entityCache.d.ts +7 -0
  75. package/entityCache.js +79 -0
  76. package/errors/Common.d.ts +72 -0
  77. package/errors/Common.js +122 -0
  78. package/errors/RPCBaseErrors.d.ts +84 -0
  79. package/errors/RPCBaseErrors.js +134 -0
  80. package/errors/RPCErrorList.d.ts +37 -0
  81. package/errors/RPCErrorList.js +117 -0
  82. package/errors/index.d.ts +11 -0
  83. package/errors/index.js +29 -0
  84. package/events/Album.d.ts +36 -0
  85. package/events/Album.js +104 -0
  86. package/events/CallbackQuery.d.ts +74 -0
  87. package/events/CallbackQuery.js +193 -0
  88. package/events/DeletedMessage.d.ts +45 -0
  89. package/events/DeletedMessage.js +63 -0
  90. package/events/EditedMessage.d.ts +30 -0
  91. package/events/EditedMessage.js +41 -0
  92. package/events/NewMessage.d.ts +89 -0
  93. package/events/NewMessage.js +182 -0
  94. package/events/Raw.d.ts +29 -0
  95. package/events/Raw.js +43 -0
  96. package/events/common.d.ts +66 -0
  97. package/events/common.js +141 -0
  98. package/events/index.d.ts +2 -0
  99. package/events/index.js +8 -0
  100. package/extensions/AsyncQueue.d.ts +10 -0
  101. package/extensions/AsyncQueue.js +32 -0
  102. package/extensions/BinaryReader.d.ts +100 -0
  103. package/extensions/BinaryReader.js +242 -0
  104. package/extensions/BinaryWriter.d.ts +7 -0
  105. package/extensions/BinaryWriter.js +15 -0
  106. package/extensions/Deferred.d.ts +8 -0
  107. package/extensions/Deferred.js +16 -0
  108. package/extensions/Logger.d.ts +58 -0
  109. package/extensions/Logger.js +127 -0
  110. package/extensions/MessagePacker.d.ts +22 -0
  111. package/extensions/MessagePacker.js +154 -0
  112. package/extensions/PendingState.d.ts +12 -0
  113. package/extensions/PendingState.js +29 -0
  114. package/extensions/PromisedNetSockets-BROWSER.d.ts +8 -0
  115. package/extensions/PromisedNetSockets-BROWSER.js +12 -0
  116. package/extensions/PromisedNetSockets.d.ts +25 -0
  117. package/extensions/PromisedNetSockets.js +178 -0
  118. package/extensions/PromisedWebSockets.d.ts +19 -0
  119. package/extensions/PromisedWebSockets.js +134 -0
  120. package/extensions/html.d.ts +5 -0
  121. package/extensions/html.js +213 -0
  122. package/extensions/index.d.ts +7 -0
  123. package/extensions/index.js +17 -0
  124. package/extensions/markdown.d.ts +5 -0
  125. package/extensions/markdown.js +76 -0
  126. package/extensions/markdownv2.d.ts +5 -0
  127. package/extensions/markdownv2.js +51 -0
  128. package/extensions/net-BROWSER.d.ts +8 -0
  129. package/extensions/net-BROWSER.js +11 -0
  130. package/extensions/net.d.ts +1 -0
  131. package/extensions/net.js +13 -0
  132. package/extensions/socks-BROWSER.d.ts +3 -0
  133. package/extensions/socks-BROWSER.js +6 -0
  134. package/extensions/socks.d.ts +1 -0
  135. package/extensions/socks.js +13 -0
  136. package/index.d.ts +14 -0
  137. package/index.js +48 -0
  138. package/inspect-BROWSER.d.ts +3 -0
  139. package/inspect-BROWSER.js +6 -0
  140. package/inspect.d.ts +1 -0
  141. package/inspect.js +5 -0
  142. package/network/Authenticator.d.ts +12 -0
  143. package/network/Authenticator.js +193 -0
  144. package/network/MTProtoPlainSender.d.ts +19 -0
  145. package/network/MTProtoPlainSender.js +74 -0
  146. package/network/MTProtoSender.d.ts +291 -0
  147. package/network/MTProtoSender.js +854 -0
  148. package/network/MTProtoState.d.ts +103 -0
  149. package/network/MTProtoState.js +267 -0
  150. package/network/RequestState.d.ts +19 -0
  151. package/network/RequestState.js +35 -0
  152. package/network/connection/Connection.d.ts +71 -0
  153. package/network/connection/Connection.js +157 -0
  154. package/network/connection/ConnectionWebSocket.d.ts +19 -0
  155. package/network/connection/ConnectionWebSocket.js +77 -0
  156. package/network/connection/CustomIntermediatePacketCodec.d.ts +8 -0
  157. package/network/connection/CustomIntermediatePacketCodec.js +25 -0
  158. package/network/connection/CustomPromisedWebSockets.d.ts +22 -0
  159. package/network/connection/CustomPromisedWebSockets.js +170 -0
  160. package/network/connection/ObfuscatedIO.d.ts +12 -0
  161. package/network/connection/ObfuscatedIO.js +64 -0
  162. package/network/connection/TCPAbridged.d.ts +20 -0
  163. package/network/connection/TCPAbridged.js +58 -0
  164. package/network/connection/TCPFull.d.ts +17 -0
  165. package/network/connection/TCPFull.js +61 -0
  166. package/network/connection/TCPMTProxy.d.ts +50 -0
  167. package/network/connection/TCPMTProxy.js +121 -0
  168. package/network/connection/TCPObfuscated.d.ts +18 -0
  169. package/network/connection/TCPObfuscated.js +79 -0
  170. package/network/connection/index.d.ts +5 -0
  171. package/network/connection/index.js +13 -0
  172. package/network/index.d.ts +11 -0
  173. package/network/index.js +24 -0
  174. package/package.json +73 -0
  175. package/platform.d.ts +3 -0
  176. package/platform.js +6 -0
  177. package/requestIter.d.ts +24 -0
  178. package/requestIter.js +107 -0
  179. package/sessions/Abstract.d.ts +103 -0
  180. package/sessions/Abstract.js +6 -0
  181. package/sessions/CacheApiSession.d.ts +18 -0
  182. package/sessions/CacheApiSession.js +99 -0
  183. package/sessions/Memory.d.ts +38 -0
  184. package/sessions/Memory.js +272 -0
  185. package/sessions/StoreSession.d.ts +14 -0
  186. package/sessions/StoreSession.js +77 -0
  187. package/sessions/StringSession.d.ts +33 -0
  188. package/sessions/StringSession.js +116 -0
  189. package/sessions/index.d.ts +4 -0
  190. package/sessions/index.js +13 -0
  191. package/sessions/localStorage-BROWSER.d.ts +3 -0
  192. package/sessions/localStorage-BROWSER.js +9 -0
  193. package/sessions/localStorage.d.ts +1 -0
  194. package/sessions/localStorage.js +4 -0
  195. package/tl/AllTLObjects.d.ts +3 -0
  196. package/tl/AllTLObjects.js +17 -0
  197. package/tl/MTProtoRequest.d.ts +19 -0
  198. package/tl/MTProtoRequest.js +38 -0
  199. package/tl/api.d.ts +2 -0
  200. package/tl/api.js +507 -0
  201. package/tl/apiTl.d.ts +2 -0
  202. package/tl/apiTl.js +1638 -0
  203. package/tl/core/GZIPPacked.d.ts +16 -0
  204. package/tl/core/GZIPPacked.js +51 -0
  205. package/tl/core/MessageContainer.d.ts +12 -0
  206. package/tl/core/MessageContainer.js +42 -0
  207. package/tl/core/RPCResult.d.ts +15 -0
  208. package/tl/core/RPCResult.js +32 -0
  209. package/tl/core/TLMessage.d.ts +10 -0
  210. package/tl/core/TLMessage.js +14 -0
  211. package/tl/core/index.d.ts +6 -0
  212. package/tl/core/index.js +16 -0
  213. package/tl/custom/button.d.ts +25 -0
  214. package/tl/custom/button.js +78 -0
  215. package/tl/custom/chatGetter.d.ts +30 -0
  216. package/tl/custom/chatGetter.js +114 -0
  217. package/tl/custom/dialog.d.ts +31 -0
  218. package/tl/custom/dialog.js +40 -0
  219. package/tl/custom/draft.d.ts +22 -0
  220. package/tl/custom/draft.js +48 -0
  221. package/tl/custom/file.d.ts +22 -0
  222. package/tl/custom/file.js +68 -0
  223. package/tl/custom/forward.d.ts +16 -0
  224. package/tl/custom/forward.js +47 -0
  225. package/tl/custom/index.d.ts +1 -0
  226. package/tl/custom/index.js +5 -0
  227. package/tl/custom/inlineResult.d.ts +33 -0
  228. package/tl/custom/inlineResult.js +87 -0
  229. package/tl/custom/inlineResults.d.ts +21 -0
  230. package/tl/custom/inlineResults.js +26 -0
  231. package/tl/custom/message.d.ts +428 -0
  232. package/tl/custom/message.js +702 -0
  233. package/tl/custom/messageButton.d.ts +55 -0
  234. package/tl/custom/messageButton.js +152 -0
  235. package/tl/custom/senderGetter.d.ts +29 -0
  236. package/tl/custom/senderGetter.js +55 -0
  237. package/tl/generateModule.d.ts +1 -0
  238. package/tl/generateModule.js +17 -0
  239. package/tl/generationHelpers.d.ts +12 -0
  240. package/tl/generationHelpers.js +289 -0
  241. package/tl/index.d.ts +3 -0
  242. package/tl/index.js +10 -0
  243. package/tl/patched/index.d.ts +2 -0
  244. package/tl/patched/index.js +77 -0
  245. package/tl/schemaTl.d.ts +2 -0
  246. package/tl/schemaTl.js +64 -0
  247. package/tl/types-generator/generate.d.ts +1 -0
  248. package/tl/types-generator/generate.js +84 -0
  249. package/tl/types-generator/template.d.ts +6 -0
  250. package/tl/types-generator/template.js +257 -0
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Factorizator = void 0;
7
+ const big_integer_1 = __importDefault(require("big-integer"));
8
+ const Helpers_1 = require("../Helpers");
9
+ class Factorizator {
10
+ /**
11
+ * Calculates the greatest common divisor
12
+ * @param a {BigInteger}
13
+ * @param b {BigInteger}
14
+ * @returns {BigInteger}
15
+ */
16
+ static gcd(a, b) {
17
+ while (b.neq(big_integer_1.default.zero)) {
18
+ const temp = b;
19
+ b = a.remainder(b);
20
+ a = temp;
21
+ }
22
+ return a;
23
+ }
24
+ /**
25
+ * Factorizes the given number and returns both the divisor and the number divided by the divisor
26
+ * @param pq {BigInteger}
27
+ * @returns {{p: *, q: *}}
28
+ */
29
+ static factorize(pq) {
30
+ if (pq.remainder(2).equals(big_integer_1.default.zero)) {
31
+ return { p: (0, big_integer_1.default)(2), q: pq.divide((0, big_integer_1.default)(2)) };
32
+ }
33
+ let y = big_integer_1.default.randBetween((0, big_integer_1.default)(1), pq.minus(1));
34
+ const c = big_integer_1.default.randBetween((0, big_integer_1.default)(1), pq.minus(1));
35
+ const m = big_integer_1.default.randBetween((0, big_integer_1.default)(1), pq.minus(1));
36
+ let g = big_integer_1.default.one;
37
+ let r = big_integer_1.default.one;
38
+ let q = big_integer_1.default.one;
39
+ let x = big_integer_1.default.zero;
40
+ let ys = big_integer_1.default.zero;
41
+ let k;
42
+ while (g.eq(big_integer_1.default.one)) {
43
+ x = y;
44
+ for (let i = 0; (0, big_integer_1.default)(i).lesser(r); i++) {
45
+ y = (0, Helpers_1.modExp)(y, (0, big_integer_1.default)(2), pq).add(c).remainder(pq);
46
+ }
47
+ k = big_integer_1.default.zero;
48
+ while (k.lesser(r) && g.eq(big_integer_1.default.one)) {
49
+ ys = y;
50
+ const condition = big_integer_1.default.min(m, r.minus(k));
51
+ for (let i = 0; (0, big_integer_1.default)(i).lesser(condition); i++) {
52
+ y = (0, Helpers_1.modExp)(y, (0, big_integer_1.default)(2), pq).add(c).remainder(pq);
53
+ q = q.multiply(x.minus(y).abs()).remainder(pq);
54
+ }
55
+ g = Factorizator.gcd(q, pq);
56
+ k = k.add(m);
57
+ }
58
+ r = r.multiply(2);
59
+ }
60
+ if (g.eq(pq)) {
61
+ while (true) {
62
+ ys = (0, Helpers_1.modExp)(ys, (0, big_integer_1.default)(2), pq).add(c).remainder(pq);
63
+ g = Factorizator.gcd(x.minus(ys).abs(), pq);
64
+ if (g.greater(1)) {
65
+ break;
66
+ }
67
+ }
68
+ }
69
+ const p = g;
70
+ q = pq.divide(g);
71
+ return p < q ? { p: p, q: q } : { p: q, q: p };
72
+ }
73
+ }
74
+ exports.Factorizator = Factorizator;
@@ -0,0 +1,18 @@
1
+ /// <reference types="node" />
2
+ declare class IGENEW {
3
+ private ige;
4
+ constructor(key: Buffer, iv: Buffer);
5
+ /**
6
+ * Decrypts the given text in 16-bytes blocks by using the given key and 32-bytes initialization vector
7
+ * @param cipherText {Buffer}
8
+ * @returns {Buffer}
9
+ */
10
+ decryptIge(cipherText: Buffer): Buffer;
11
+ /**
12
+ * Encrypts the given text in 16-bytes blocks by using the given key and 32-bytes initialization vector
13
+ * @param plainText {Buffer}
14
+ * @returns {Buffer}
15
+ */
16
+ encryptIge(plainText: Buffer): Buffer;
17
+ }
18
+ export { IGENEW as IGE };
package/crypto/IGE.js ADDED
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IGE = void 0;
4
+ const Helpers = require("../Helpers");
5
+ const { IGE: aes_ige } = require("@cryptography/aes");
6
+ class IGENEW {
7
+ constructor(key, iv) {
8
+ this.ige = new aes_ige(key, iv);
9
+ }
10
+ /**
11
+ * Decrypts the given text in 16-bytes blocks by using the given key and 32-bytes initialization vector
12
+ * @param cipherText {Buffer}
13
+ * @returns {Buffer}
14
+ */
15
+ decryptIge(cipherText) {
16
+ return Helpers.convertToLittle(this.ige.decrypt(cipherText));
17
+ }
18
+ /**
19
+ * Encrypts the given text in 16-bytes blocks by using the given key and 32-bytes initialization vector
20
+ * @param plainText {Buffer}
21
+ * @returns {Buffer}
22
+ */
23
+ encryptIge(plainText) {
24
+ const padding = plainText.length % 16;
25
+ if (padding) {
26
+ plainText = Buffer.concat([
27
+ plainText,
28
+ Helpers.generateRandomBytes(16 - padding),
29
+ ]);
30
+ }
31
+ return Helpers.convertToLittle(this.ige.encrypt(plainText));
32
+ }
33
+ }
34
+ exports.IGE = IGENEW;
@@ -0,0 +1,15 @@
1
+ /// <reference types="node" />
2
+ import bigInt from "big-integer";
3
+ export declare const _serverKeys: Map<string, {
4
+ n: bigInt.BigInteger;
5
+ e: number;
6
+ }>;
7
+ /**
8
+ * Encrypts the given data known the fingerprint to be used
9
+ * in the way Telegram requires us to do so (sha1(data) + data + padding)
10
+
11
+ * @param fingerprint the fingerprint of the RSA key.
12
+ * @param data the data to be encrypted.
13
+ * @returns {Buffer|*|undefined} the cipher text, or undefined if no key matching this fingerprint is found.
14
+ */
15
+ export declare function encrypt(fingerprint: bigInt.BigInteger, data: Buffer): Promise<Buffer | undefined>;
package/crypto/RSA.js ADDED
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.encrypt = exports._serverKeys = void 0;
18
+ const big_integer_1 = __importDefault(require("big-integer"));
19
+ const Helpers_1 = require("../Helpers");
20
+ const PUBLIC_KEYS = [
21
+ {
22
+ fingerprint: (0, big_integer_1.default)("1756106365847508527"),
23
+ n: (0, big_integer_1.default)("24238017039406324398818211100017460853877925248782649032256867755810335814127124174152552731142554114852422558645777814390854384939307234864895464642798398028371542228969164000877103469497598660814243455942166911962275149243241136966793567305207921915048350204489516378689905194216789741874810118898414872745651826381529051462943943060849600549855155618459538046759513047741178572508028156727115094924075836133814760736535296653732158626606889032969597095552163452422289022952141357954550600757285098604619618920582009763141301625135222696080861958446437367103385485660067248268161547714346218480166799291098838822637"),
24
+ e: 65537,
25
+ },
26
+ {
27
+ fingerprint: (0, big_integer_1.default)("4512654018935143700"),
28
+ n: (0, big_integer_1.default)("24235260037890616169120794235062262674316024975077366890198797443331519080732755901363433156102098672541115756594495998709831497291855317743857599933614215433431882467805644923653595607403240513727541136547826962095235110116337427731828103883948424780929997236931407307169894268539301307119160296066712383693459066029441762074173759747793039174943183613832584177865789542225605910018410709652462430479960297418110622242830949114847276874797307530921524192744012016471098946454164482843546804965228364603315089956692139144290446684470924997647106858968233924279740471552020606031234618000396222660365264833969144099689"),
29
+ e: 65537,
30
+ },
31
+ {
32
+ fingerprint: (0, big_integer_1.default)("3954552239731554950"),
33
+ n: (0, big_integer_1.default)("24232829137928731863019490002272733547385109287748297178609100006065549257095568082915937431578124587337794419409505050329102232313883718364639325401969651389116552838463132089986552293089568181366809408321934732862413729055496124940315094723812534661640494201559990530556774916900223297896209016669206232920888207341821205210891303083904139661142906408868611981611963687788770378695879011402303937435839797563703645760891960964101470680979117200293634538267916988134218179357404908420594084400131979794539094631619249407376814557856095132297201658918486640887798052272377986351953478094540165680281771116997441734993"),
34
+ e: 65537,
35
+ },
36
+ {
37
+ fingerprint: (0, big_integer_1.default)("3840879616129353640"),
38
+ n: (0, big_integer_1.default)("24226740003845387526122420383215813313160481817646534954349406594626036763275434691654700873685207371364562560617513084485551764162313690591806956872846659907830643797349274445997728236041847050770194661202868608462800289923910952988537320887544165103060997775840429356973390565265381070029205138105237970981099188549518140588436045472449701138095349921239316849430956077286762827767297232718282160587331191873355577824832392331680272547948467113172934998437902856416395533425838596802424433387992920842347995664806751296809332290342152475668988401357419279530258635231544972387436349151853117346156473906307508757549"),
39
+ e: 65537,
40
+ },
41
+ {
42
+ fingerprint: (0, big_integer_1.default)("9721673155303707927"),
43
+ n: (0, big_integer_1.default)("24235887198671065183055559947724015202901578705257391127883023207130325404209944274441623365774400996125245803826674984630558065530801346509332483039911631199004349799404280051072462526587571180814264659704919975908481860485392697091312975059521505252243307029981562770551539328732454274175686423286372017171706172687007694344562256482111767528076194851300510416590635106402450593729914970198599025438375131735218828188369140906636454128309358530468585125463089729781282854480794582223826120006365903044441770824989674440663577903688826372961995342818099867691669681672230707247497372041028959094232101600968274415909"),
44
+ e: 65537,
45
+ },
46
+ {
47
+ fingerprint: (0, big_integer_1.default)("7327245710266107682"),
48
+ n: (0, big_integer_1.default)("24233564129976052525074557234863243932690922138106909359656144523154213183753506814850645168001577563855229772321433282956411845640925035870968972803136480518327839574672220874857257522033398020724503795612522966253226642346178003829500572676012295974220897791590693412410598927265125769563882185124360261103470929664258060261189680335028461109077433213486615371932159709849345808113812001115072270346716870722377262463616658269378937324271848255503453424157667443329122247165267772229992577323167042062228644298199963610119085504374702555387623787457423479408655064120078431039033708876830736678360594495005894285717"),
49
+ e: 65537,
50
+ },
51
+ {
52
+ fingerprint: (0, big_integer_1.default)("7311641324696334512"),
53
+ n: (0, big_integer_1.default)("24238904092765623654541951735864997636805739769868168409716631959515469207569320832435968810337769651850580018414508646205665007373580374454395606146597849315923870670127753544137087350549900254610551324524604571915228715018530629778298064618268998531793173214036172363025839131060339130881375219446465668205779446789649992083429162676455112627392603665592101688014918149206881529578523272334726996711735101572984859875549951905127125799205155064098291930887529833481849200040487496164143132362127196384113142372423142258452585061291011491812576430380789840081128126636524048534242489396825475946269701146582317743657"),
54
+ e: 65537,
55
+ },
56
+ {
57
+ fingerprint: (0, big_integer_1.default)("5524002727329132702"),
58
+ n: (0, big_integer_1.default)("24240840390944090341507953931793624151763744285563544030910416784236727462750689550882282684085969155875993563675744852648552717349026668910077199849073601728876305909329013402215915886356001505563731538867739529640235766477773878514285912876193140368688382252273204355188089098846601780006831681303843231908846120924758803643829705110820216506673657502707864484421619874710577778393813357430704906944216680999917516195329215472962777640129203129770439225116577891002812853189041960585299399249968153372691725885820340316511845659627253451466115694977127425555862186933193218394320394258694625575382100116288975340549"),
59
+ e: 65537,
60
+ },
61
+ {
62
+ fingerprint: (0, big_integer_1.default)("2155561823286592012"),
63
+ n: (0, big_integer_1.default)("24243204744019316140571390393410731044654264209980898428670746497205291386024859137646251159342861816150128941773691765890192527564620428158169785622636505535629877349480617450560211048944399739063850448630948066199276397698436674230327767005624782137249362550473395158990527076392726209697596675639019343431160273964306938051977616487039715401404799862526727477302181083747478624994178928979351838016002623078026537816937662621346331619607922153654990755682564560671138040298018060956367906310050176108465773963874560935962712092372009916305687613610568043052253976511360748800839532555791190958981455525068313616897"),
64
+ e: 65537,
65
+ },
66
+ {
67
+ fingerprint: (0, big_integer_1.default)("17531275267172558227"),
68
+ n: (0, big_integer_1.default)("24255139658927753013873254536141189189753237402252128733006540963901927076142349649954801019467156677718322370092675980874397265945177264702598929380544295193481322378721816476070729371813229094364350010101862393838172088864447803332092418041246949084178401713364385838881375015827144945794095153786964846571030388355787508753531991993961555254969042717605460196000799545102877923469722288616794557923288888983011269037240565601793493311068493308734157084807580786404284886544532698648917545300042554928459645078414300497757390122490443598743777136771649253346883604382743910194553040289048690026107067641101240869757"),
69
+ e: 65537,
70
+ },
71
+ {
72
+ fingerprint: (0, big_integer_1.default)("4575657650171602427"),
73
+ n: (0, big_integer_1.default)("24241748716979944158438708449394223653204961060765827143973368617884492447942261505523443187257601236103340265615559639527180630229197439866502776378686835096407353804066949909701285818617975495760522238490671487712029011986651201719536090542896321467265696201328659954098773412180034421153101058632557542704289472001536987018842653632943335838465498174097963939308591427024890952308345708116210029583441063643004077552629178414709522805324640781966790694937052743127193386201247420273918072292131700727741792837690434676101793120971404158497279036295245865400265894452436582085456827818149587723815498705423505525321"),
74
+ e: 65537,
75
+ },
76
+ {
77
+ fingerprint: (0, big_integer_1.default)("3567622298816760148"),
78
+ n: (0, big_integer_1.default)("24241973069830180936382486136851951013243348105350204138487124818017867602625899293258552187838336184674670049713933766933757351489570820842327703265958170901615264973187032752096701011614110157776312764845302570082529385495470140920146051878730342948396344845297689539640313824769114338228755143118971304481173971615303964077469979652053857783729373752576433365489059477702349286208930722931204796741218051283105702556757466403365671339510414300696164894372274177945557949148910985421194213163965384331982024228279179527914200131998654289345727195757973563789660861631701724424526652398311923904246625005126377592521"),
79
+ e: 65537,
80
+ },
81
+ {
82
+ fingerprint: (0, big_integer_1.default)("17553063345690371958"),
83
+ n: (0, big_integer_1.default)("24241351281279299145481747591583493078714093870975713145334774261321717014781399628806087038848831852485223813136532926712665125270156627916952445277417726147982780684777659771520097728759904421321965854937862064740047454279621386406085143534690226076281213842173610596031643343879891078193115303418753930218318027953591820866890833986120632305938339616731461135194085454784667673649470129245909222026882631141387315757782391400515676373846987208768872585135598971809900399024770733365259205359339785306556181974113602739399615870858743653524190023863576735524226166101143210526674060026402436659365308688510078690497"),
84
+ e: 65537,
85
+ },
86
+ {
87
+ fingerprint: (0, big_integer_1.default)("9277528552786967144"),
88
+ n: (0, big_integer_1.default)("24238883792812457903440955355642945950073022904970495801657093251869089713665121911149481234050853934233122064092523442293485485973465562612462219587481815730600402639326960136165554757892118468323726552797797164131902401769109455064629623949487693529716691024261405998062219772670890185173102183412411788189060292277688538193979326171472099753319325396308639069346901555802056221461406051787468350371495259148993101781275112408866779921537695676863740570738579953904002087945727029190297738095608918499336688211985497328456484829874330588018880380000963974882409830117909102404397518375709893711959298913212944063661"),
89
+ e: 65537,
90
+ },
91
+ {
92
+ fingerprint: (0, big_integer_1.default)("6568519800617090630"),
93
+ n: (0, big_integer_1.default)("24239588619862180508360098040512418478680581611170711472883928025686825099356249917712225099148223711077059432200028063463093865372091311205580643550051338386984879877676235105123154065518600959875711395451795757738760134829594597167255271693432072928388818915612111091816614607170457231661478416252209722562831276455953742376708783408890398220602426478965073031487055861137035030458199714371038052587482387852918218274226889973351746476739523268586850465610743992484692267611070713846948961575290727414876842104679461061769756369084968039212031985243195756288727866220885995292271051896140306080831566727722276074957"),
94
+ e: 65537,
95
+ },
96
+ {
97
+ fingerprint: (0, big_integer_1.default)("15281512440970464298"),
98
+ n: (0, big_integer_1.default)("24239599512582931255427359431270572618952258131975769988260722303793575773752906274343700600720098035285579177975758854783208633709515855105374263407538462905252408613429494890312418721520791650769366216794922936974747169144475850347680874367281918740311749178059811810094869294916305229616949847003803916684366149987503343184025245931779539066699101382363380634723870546611475521905446162854714187876049892459528476639455612521723735146705760038501370073301822766125048910027686879641453113850638808677316725452385146298771974291225307327761780054966757171689178074696096619801471350533150098368772709207148837901569"),
99
+ e: 65537,
100
+ },
101
+ {
102
+ fingerprint: (0, big_integer_1.default)("5249484155803885630"),
103
+ n: (0, big_integer_1.default)("24241265362203342369326328988460290759229617577623644619423503233932740075020161659571459870131599238665537387406219165949998870768595835314138560518720219669643365406220763480511872529480745144790239904422851448607682345196590211016662588012961680376371675762676332978139225933779099960536287742756092033539932302005664752819588590041459954217936610254734136991222417370010309428640594262604322713225993786279478042930507895472883113560516617327048112388283614781108894590930969640925430277232319453256199767091017235183579120241841848123248729513184343705728200298718504847249596611130093167582769393799885361028241"),
104
+ e: 65537,
105
+ },
106
+ {
107
+ fingerprint: (0, big_integer_1.default)("13541485698777891424"),
108
+ n: (0, big_integer_1.default)("24250582346038918253489590685273447797501021440754250552376556841251766168493300467201436977700810867213865077002754295254311264997981306507395212023425442763995925057937373861855081818382878597813104903647701486401235514293882661190390724306994977405565333072540104439523086038432800600883214234200236263214845445582364913787344216841610255185049453059347714444482989937073942074055145452916055812809467822364750111177789684519275729574001771486570693691791685231682148674414389652792950646465738793767111954048363986885331827825877145559966247324980948121305820656101676302232547121578841113489085078177977779644273"),
109
+ e: 65537,
110
+ },
111
+ {
112
+ fingerprint: (0, big_integer_1.default)("16862300725120269413"),
113
+ n: (0, big_integer_1.default)("24254000742908910780642772836620313045262355961163729937569619383555249902029716060200419148391019170804222412071963596191785861586891063699072641162488871066133046961090009396955121728733384027955976513502449787476821410788951310882648123274289437430318341855536075267235356097809280385965583038417386084366145339901748119758697655135929934549969707460599883140539174983072516221417031945054555985803873960199525313057600306925514544833040037018227697686306101849187175034825584965708811367071337597817211252921279005367930151150461576976714469449048972877200165293128214220683948771740718174833101709208764642734009"),
114
+ e: 65537,
115
+ },
116
+ {
117
+ fingerprint: (0, big_integer_1.default)("146161090623767708"),
118
+ n: (0, big_integer_1.default)("24253495355592939862541792106837927970578028684159052648663928248811410107333457728279277109502147340136333426729884744926183857264572402670419957082851015100418465126428222680133281570470371040523800642216862572710828580502430077960118583163279583538688255309017584970719200470208489986071618868024733969564549249389837986957516912955145904703360486166231033108413849041302009270425608550404235410771038637642469917472911594357670299410706994996555343504517052658790568611125226416060186111837634873507795341827902708071697966649511858963499400578689407839770254246385600914558793037831000053896621164798032464177741"),
119
+ e: 65537,
120
+ },
121
+ ];
122
+ exports._serverKeys = new Map();
123
+ PUBLIC_KEYS.forEach((_a) => {
124
+ var { fingerprint } = _a, keyInfo = __rest(_a, ["fingerprint"]);
125
+ exports._serverKeys.set(fingerprint.toString(), keyInfo);
126
+ });
127
+ /**
128
+ * Encrypts the given data known the fingerprint to be used
129
+ * in the way Telegram requires us to do so (sha1(data) + data + padding)
130
+
131
+ * @param fingerprint the fingerprint of the RSA key.
132
+ * @param data the data to be encrypted.
133
+ * @returns {Buffer|*|undefined} the cipher text, or undefined if no key matching this fingerprint is found.
134
+ */
135
+ async function encrypt(fingerprint, data) {
136
+ const key = exports._serverKeys.get(fingerprint.toString());
137
+ if (!key) {
138
+ return undefined;
139
+ }
140
+ // len(sha1.digest) is always 20, so we're left with 255 - 20 - x padding
141
+ const rand = (0, Helpers_1.generateRandomBytes)(235 - data.length);
142
+ const toEncrypt = Buffer.concat([await (0, Helpers_1.sha1)(data), data, rand]);
143
+ // rsa module rsa.encrypt adds 11 bits for padding which we don't want
144
+ // rsa module uses rsa.transform.bytes2int(to_encrypt), easier way:
145
+ const payload = (0, Helpers_1.readBigIntFromBuffer)(toEncrypt, false);
146
+ const encrypted = (0, Helpers_1.modExp)(payload, (0, big_integer_1.default)(key.e), key.n);
147
+ // rsa module uses transform.int2bytes(encrypted, keylength), easier:
148
+ return (0, Helpers_1.readBufferFromBigInt)(encrypted, 256, false);
149
+ }
150
+ exports.encrypt = encrypt;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Uint32Array -> ArrayBuffer (low-endian os)
3
+ */
4
+ export declare function i2abLow(buf: Uint32Array): ArrayBuffer;
5
+ /**
6
+ * Uint32Array -> ArrayBuffer (big-endian os)
7
+ */
8
+ export declare function i2abBig(buf: Uint32Array): ArrayBuffer;
9
+ /**
10
+ * ArrayBuffer -> Uint32Array (low-endian os)
11
+ */
12
+ export declare function ab2iLow(ab: ArrayBuffer | SharedArrayBuffer | Uint8Array): Uint32Array;
13
+ /**
14
+ * ArrayBuffer -> Uint32Array (big-endian os)
15
+ */
16
+ export declare function ab2iBig(ab: ArrayBuffer | SharedArrayBuffer | Uint8Array): Uint32Array;
17
+ export declare const isBigEndian: boolean;
18
+ export declare const i2ab: typeof i2abBig;
19
+ export declare const ab2i: typeof ab2iBig;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ab2i = exports.i2ab = exports.isBigEndian = exports.ab2iBig = exports.ab2iLow = exports.i2abBig = exports.i2abLow = void 0;
4
+ /**
5
+ * Uint32Array -> ArrayBuffer (low-endian os)
6
+ */
7
+ function i2abLow(buf) {
8
+ const uint8 = new Uint8Array(buf.length * 4);
9
+ let i = 0;
10
+ for (let j = 0; j < buf.length; j++) {
11
+ const int = buf[j];
12
+ uint8[i++] = int >>> 24;
13
+ uint8[i++] = (int >> 16) & 0xff;
14
+ uint8[i++] = (int >> 8) & 0xff;
15
+ uint8[i++] = int & 0xff;
16
+ }
17
+ return uint8.buffer;
18
+ }
19
+ exports.i2abLow = i2abLow;
20
+ /**
21
+ * Uint32Array -> ArrayBuffer (big-endian os)
22
+ */
23
+ function i2abBig(buf) {
24
+ return buf.buffer;
25
+ }
26
+ exports.i2abBig = i2abBig;
27
+ /**
28
+ * ArrayBuffer -> Uint32Array (low-endian os)
29
+ */
30
+ function ab2iLow(ab) {
31
+ const uint8 = new Uint8Array(ab);
32
+ const buf = new Uint32Array(uint8.length / 4);
33
+ for (let i = 0; i < uint8.length; i += 4) {
34
+ buf[i / 4] =
35
+ (uint8[i] << 24) ^
36
+ (uint8[i + 1] << 16) ^
37
+ (uint8[i + 2] << 8) ^
38
+ uint8[i + 3];
39
+ }
40
+ return buf;
41
+ }
42
+ exports.ab2iLow = ab2iLow;
43
+ /**
44
+ * ArrayBuffer -> Uint32Array (big-endian os)
45
+ */
46
+ function ab2iBig(ab) {
47
+ return new Uint32Array(ab);
48
+ }
49
+ exports.ab2iBig = ab2iBig;
50
+ exports.isBigEndian = new Uint8Array(new Uint32Array([0x01020304]))[0] === 0x01;
51
+ exports.i2ab = exports.isBigEndian ? i2abBig : i2abLow;
52
+ exports.ab2i = exports.isBigEndian ? ab2iBig : ab2iLow;
@@ -0,0 +1,27 @@
1
+ /// <reference types="node" />
2
+ export declare class Counter {
3
+ _counter: Buffer;
4
+ constructor(initialValue: any);
5
+ increment(): void;
6
+ }
7
+ export declare class CTR {
8
+ private _counter;
9
+ private _remainingCounter?;
10
+ private _remainingCounterIndex;
11
+ private _aes;
12
+ constructor(key: Buffer, counter: any);
13
+ update(plainText: any): Buffer;
14
+ encrypt(plainText: any): Buffer;
15
+ }
16
+ export declare function createDecipheriv(algorithm: string, key: Buffer, iv: Buffer): CTR;
17
+ export declare function createCipheriv(algorithm: string, key: Buffer, iv: Buffer): CTR;
18
+ export declare function randomBytes(count: number): Uint8Array;
19
+ export declare class Hash {
20
+ private readonly algorithm;
21
+ private data?;
22
+ constructor(algorithm: string);
23
+ update(data: Buffer): void;
24
+ digest(): Promise<Buffer>;
25
+ }
26
+ export declare function pbkdf2Sync(password: any, salt: any, iterations: any, ...args: any): Promise<Buffer>;
27
+ export declare function createHash(algorithm: string): Hash;
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createHash = exports.pbkdf2Sync = exports.Hash = exports.randomBytes = exports.createCipheriv = exports.createDecipheriv = exports.CTR = exports.Counter = void 0;
7
+ const aes_1 = __importDefault(require("@cryptography/aes"));
8
+ const converters_1 = require("./converters");
9
+ const words_1 = require("./words");
10
+ class Counter {
11
+ constructor(initialValue) {
12
+ this._counter = Buffer.from(initialValue);
13
+ }
14
+ increment() {
15
+ for (let i = 15; i >= 0; i--) {
16
+ if (this._counter[i] === 255) {
17
+ this._counter[i] = 0;
18
+ }
19
+ else {
20
+ this._counter[i]++;
21
+ break;
22
+ }
23
+ }
24
+ }
25
+ }
26
+ exports.Counter = Counter;
27
+ class CTR {
28
+ constructor(key, counter) {
29
+ if (!(counter instanceof Counter)) {
30
+ counter = new Counter(counter);
31
+ }
32
+ this._counter = counter;
33
+ this._remainingCounter = undefined;
34
+ this._remainingCounterIndex = 16;
35
+ this._aes = new aes_1.default((0, words_1.getWords)(key));
36
+ }
37
+ update(plainText) {
38
+ return this.encrypt(plainText);
39
+ }
40
+ encrypt(plainText) {
41
+ const encrypted = Buffer.from(plainText);
42
+ for (let i = 0; i < encrypted.length; i++) {
43
+ if (this._remainingCounterIndex === 16) {
44
+ this._remainingCounter = Buffer.from((0, converters_1.i2ab)(this._aes.encrypt((0, converters_1.ab2i)(this._counter._counter))));
45
+ this._remainingCounterIndex = 0;
46
+ this._counter.increment();
47
+ }
48
+ if (this._remainingCounter) {
49
+ encrypted[i] ^=
50
+ this._remainingCounter[this._remainingCounterIndex++];
51
+ }
52
+ }
53
+ return encrypted;
54
+ }
55
+ }
56
+ exports.CTR = CTR;
57
+ // endregion
58
+ function createDecipheriv(algorithm, key, iv) {
59
+ if (algorithm.includes("ECB")) {
60
+ throw new Error("Not supported");
61
+ }
62
+ else {
63
+ return new CTR(key, iv);
64
+ }
65
+ }
66
+ exports.createDecipheriv = createDecipheriv;
67
+ function createCipheriv(algorithm, key, iv) {
68
+ if (algorithm.includes("ECB")) {
69
+ throw new Error("Not supported");
70
+ }
71
+ else {
72
+ return new CTR(key, iv);
73
+ }
74
+ }
75
+ exports.createCipheriv = createCipheriv;
76
+ function randomBytes(count) {
77
+ const bytes = new Uint8Array(count);
78
+ crypto.getRandomValues(bytes);
79
+ return bytes;
80
+ }
81
+ exports.randomBytes = randomBytes;
82
+ class Hash {
83
+ constructor(algorithm) {
84
+ this.algorithm = algorithm;
85
+ }
86
+ update(data) {
87
+ //We shouldn't be needing new Uint8Array but it doesn't
88
+ //work without it
89
+ this.data = new Uint8Array(data);
90
+ }
91
+ async digest() {
92
+ if (this.data) {
93
+ if (this.algorithm === "sha1") {
94
+ return Buffer.from(await self.crypto.subtle.digest("SHA-1", this.data));
95
+ }
96
+ else if (this.algorithm === "sha256") {
97
+ return Buffer.from(await self.crypto.subtle.digest("SHA-256", this.data));
98
+ }
99
+ }
100
+ return Buffer.alloc(0);
101
+ }
102
+ }
103
+ exports.Hash = Hash;
104
+ async function pbkdf2Sync(password, salt, iterations, ...args) {
105
+ const passwordKey = await crypto.subtle.importKey("raw", password, { name: "PBKDF2" }, false, ["deriveBits"]);
106
+ return Buffer.from(await crypto.subtle.deriveBits({
107
+ name: "PBKDF2",
108
+ hash: "SHA-512",
109
+ salt,
110
+ iterations,
111
+ }, passwordKey, 512));
112
+ }
113
+ exports.pbkdf2Sync = pbkdf2Sync;
114
+ function createHash(algorithm) {
115
+ return new Hash(algorithm);
116
+ }
117
+ exports.createHash = createHash;
@@ -0,0 +1,6 @@
1
+ export declare function s2i(str: string, pos: number): number;
2
+ /**
3
+ * Helper function for transforming string key to Uint32Array
4
+ */
5
+ export declare function getWords(key: string | Uint8Array | Uint32Array): Uint32Array;
6
+ export declare function xor(left: Uint32Array, right: Uint32Array, to?: Uint32Array): void;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /*
3
+ * Imported from https://github.com/spalt08/cryptography/blob/master/packages/aes/src/utils/words.ts
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.xor = exports.getWords = exports.s2i = void 0;
7
+ function s2i(str, pos) {
8
+ return ((str.charCodeAt(pos) << 24) ^
9
+ (str.charCodeAt(pos + 1) << 16) ^
10
+ (str.charCodeAt(pos + 2) << 8) ^
11
+ str.charCodeAt(pos + 3));
12
+ }
13
+ exports.s2i = s2i;
14
+ /**
15
+ * Helper function for transforming string key to Uint32Array
16
+ */
17
+ function getWords(key) {
18
+ if (key instanceof Uint32Array) {
19
+ return key;
20
+ }
21
+ if (typeof key === "string") {
22
+ if (key.length % 4 !== 0)
23
+ for (let i = key.length % 4; i <= 4; i++)
24
+ key += "\0x00";
25
+ const buf = new Uint32Array(key.length / 4);
26
+ for (let i = 0; i < key.length; i += 4)
27
+ buf[i / 4] = s2i(key, i);
28
+ return buf;
29
+ }
30
+ if (key instanceof Uint8Array) {
31
+ const buf = new Uint32Array(key.length / 4);
32
+ for (let i = 0; i < key.length; i += 4) {
33
+ buf[i / 4] =
34
+ (key[i] << 24) ^
35
+ (key[i + 1] << 16) ^
36
+ (key[i + 2] << 8) ^
37
+ key[i + 3];
38
+ }
39
+ return buf;
40
+ }
41
+ throw new Error("Unable to create 32-bit words");
42
+ }
43
+ exports.getWords = getWords;
44
+ function xor(left, right, to = left) {
45
+ for (let i = 0; i < left.length; i++)
46
+ to[i] = left[i] ^ right[i];
47
+ }
48
+ exports.xor = xor;
@@ -0,0 +1,7 @@
1
+ import bigInt from "big-integer";
2
+ export declare class EntityCache {
3
+ private cacheMap;
4
+ constructor();
5
+ add(entities: any): void;
6
+ get(item: bigInt.BigInteger | string | undefined): any;
7
+ }
package/entityCache.js ADDED
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ // Which updates have the following fields?
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.EntityCache = void 0;
8
+ const Utils_1 = require("./Utils");
9
+ const Helpers_1 = require("./Helpers");
10
+ const tl_1 = require("./tl");
11
+ const big_integer_1 = __importDefault(require("big-integer"));
12
+ class EntityCache {
13
+ constructor() {
14
+ this.cacheMap = new Map();
15
+ }
16
+ add(entities) {
17
+ const temp = [];
18
+ if (!(0, Helpers_1.isArrayLike)(entities)) {
19
+ if (entities != undefined) {
20
+ if (typeof entities == "object") {
21
+ if ("chats" in entities) {
22
+ temp.push(...entities.chats);
23
+ }
24
+ if ("users" in entities) {
25
+ temp.push(...entities.users);
26
+ }
27
+ if ("user" in entities) {
28
+ temp.push(entities.user);
29
+ }
30
+ }
31
+ }
32
+ if (temp.length) {
33
+ entities = temp;
34
+ }
35
+ else {
36
+ return;
37
+ }
38
+ }
39
+ for (const entity of entities) {
40
+ try {
41
+ const pid = (0, Utils_1.getPeerId)(entity);
42
+ if (!this.cacheMap.has(pid.toString())) {
43
+ this.cacheMap.set(pid.toString(), (0, Utils_1.getInputPeer)(entity));
44
+ }
45
+ }
46
+ catch (e) { }
47
+ }
48
+ }
49
+ get(item) {
50
+ if (item == undefined) {
51
+ throw new Error("No cached entity for the given key");
52
+ }
53
+ item = (0, Helpers_1.returnBigInt)(item);
54
+ if (item.lesser(big_integer_1.default.zero)) {
55
+ let res;
56
+ try {
57
+ res = this.cacheMap.get((0, Utils_1.getPeerId)(item).toString());
58
+ if (res) {
59
+ return res;
60
+ }
61
+ }
62
+ catch (e) {
63
+ throw new Error("Invalid key will not have entity");
64
+ }
65
+ }
66
+ for (const cls of [tl_1.Api.PeerUser, tl_1.Api.PeerChat, tl_1.Api.PeerChannel]) {
67
+ const result = this.cacheMap.get((0, Utils_1.getPeerId)(new cls({
68
+ userId: item,
69
+ chatId: item,
70
+ channelId: item,
71
+ })).toString());
72
+ if (result) {
73
+ return result;
74
+ }
75
+ }
76
+ throw new Error("No cached entity for the given key");
77
+ }
78
+ }
79
+ exports.EntityCache = EntityCache;