@armatofik/tgsnake-core 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 (171) hide show
  1. package/COPYING +674 -0
  2. package/COPYING.lesser +165 -0
  3. package/README.md +88 -0
  4. package/lib/package.json +46 -0
  5. package/lib/src/Logger.d.ts +3 -0
  6. package/lib/src/Logger.js +9 -0
  7. package/lib/src/Queue.d.ts +19 -0
  8. package/lib/src/Queue.js +52 -0
  9. package/lib/src/Timeout.d.ts +9 -0
  10. package/lib/src/Timeout.js +44 -0
  11. package/lib/src/Version.node.d.ts +4 -0
  12. package/lib/src/Version.node.js +26 -0
  13. package/lib/src/client/Auth.d.ts +40 -0
  14. package/lib/src/client/Auth.js +317 -0
  15. package/lib/src/client/Client.d.ts +83 -0
  16. package/lib/src/client/Client.js +461 -0
  17. package/lib/src/client/Session.d.ts +9 -0
  18. package/lib/src/client/Session.js +132 -0
  19. package/lib/src/client/index.d.ts +3 -0
  20. package/lib/src/client/index.js +39 -0
  21. package/lib/src/connection/TCP/TCPAbridged.d.ts +9 -0
  22. package/lib/src/connection/TCP/TCPAbridged.js +47 -0
  23. package/lib/src/connection/TCP/TCPAbridgedO.d.ts +12 -0
  24. package/lib/src/connection/TCP/TCPAbridgedO.js +140 -0
  25. package/lib/src/connection/TCP/TCPFull.d.ts +10 -0
  26. package/lib/src/connection/TCP/TCPFull.js +43 -0
  27. package/lib/src/connection/TCP/TCPIntermediate.d.ts +9 -0
  28. package/lib/src/connection/TCP/TCPIntermediate.js +31 -0
  29. package/lib/src/connection/TCP/TCPIntermediateO.d.ts +12 -0
  30. package/lib/src/connection/TCP/TCPIntermediateO.js +123 -0
  31. package/lib/src/connection/TCP/TCPPaddedIntermediate.d.ts +9 -0
  32. package/lib/src/connection/TCP/TCPPaddedIntermediate.js +38 -0
  33. package/lib/src/connection/TCP/index.d.ts +7 -0
  34. package/lib/src/connection/TCP/index.js +17 -0
  35. package/lib/src/connection/TCP/tcp.d.ts +17 -0
  36. package/lib/src/connection/TCP/tcp.js +98 -0
  37. package/lib/src/connection/WebSocket.d.ts +21 -0
  38. package/lib/src/connection/WebSocket.js +279 -0
  39. package/lib/src/connection/connection.d.ts +53 -0
  40. package/lib/src/connection/connection.js +189 -0
  41. package/lib/src/connection/index.d.ts +4 -0
  42. package/lib/src/connection/index.js +41 -0
  43. package/lib/src/crypto/Aes.d.ts +10 -0
  44. package/lib/src/crypto/Aes.js +135 -0
  45. package/lib/src/crypto/Mtproto.d.ts +5 -0
  46. package/lib/src/crypto/Mtproto.js +123 -0
  47. package/lib/src/crypto/Password.d.ts +5 -0
  48. package/lib/src/crypto/Password.js +92 -0
  49. package/lib/src/crypto/Prime.d.ts +4 -0
  50. package/lib/src/crypto/Prime.js +64 -0
  51. package/lib/src/crypto/RSA.d.ts +7 -0
  52. package/lib/src/crypto/RSA.js +99 -0
  53. package/lib/src/crypto/SecretChat.d.ts +5 -0
  54. package/lib/src/crypto/SecretChat.js +136 -0
  55. package/lib/src/crypto/index.d.ts +6 -0
  56. package/lib/src/crypto/index.js +42 -0
  57. package/lib/src/errors/Base.d.ts +9 -0
  58. package/lib/src/errors/Base.js +50 -0
  59. package/lib/src/errors/Client.d.ts +21 -0
  60. package/lib/src/errors/Client.js +29 -0
  61. package/lib/src/errors/File.d.ts +13 -0
  62. package/lib/src/errors/File.js +30 -0
  63. package/lib/src/errors/RpcError.d.ts +22 -0
  64. package/lib/src/errors/RpcError.js +120 -0
  65. package/lib/src/errors/SecretChat.d.ts +13 -0
  66. package/lib/src/errors/SecretChat.js +30 -0
  67. package/lib/src/errors/WebSocket.d.ts +13 -0
  68. package/lib/src/errors/WebSocket.js +30 -0
  69. package/lib/src/errors/exceptions/All.d.ts +774 -0
  70. package/lib/src/errors/exceptions/All.js +778 -0
  71. package/lib/src/errors/exceptions/BadRequest400.d.ts +2345 -0
  72. package/lib/src/errors/exceptions/BadRequest400.js +2945 -0
  73. package/lib/src/errors/exceptions/Flood420.d.ts +37 -0
  74. package/lib/src/errors/exceptions/Flood420.js +49 -0
  75. package/lib/src/errors/exceptions/Forbidden403.d.ts +205 -0
  76. package/lib/src/errors/exceptions/Forbidden403.js +260 -0
  77. package/lib/src/errors/exceptions/InternalServerError500.d.ts +221 -0
  78. package/lib/src/errors/exceptions/InternalServerError500.js +280 -0
  79. package/lib/src/errors/exceptions/NotAcceptable406.d.ts +117 -0
  80. package/lib/src/errors/exceptions/NotAcceptable406.js +149 -0
  81. package/lib/src/errors/exceptions/NotFound404.d.ts +9 -0
  82. package/lib/src/errors/exceptions/NotFound404.js +14 -0
  83. package/lib/src/errors/exceptions/SeeOther303.d.ts +25 -0
  84. package/lib/src/errors/exceptions/SeeOther303.js +34 -0
  85. package/lib/src/errors/exceptions/ServiceUnavailable503.d.ts +17 -0
  86. package/lib/src/errors/exceptions/ServiceUnavailable503.js +24 -0
  87. package/lib/src/errors/exceptions/Unauthorized401.d.ts +41 -0
  88. package/lib/src/errors/exceptions/Unauthorized401.js +54 -0
  89. package/lib/src/errors/exceptions/index.d.ts +10 -0
  90. package/lib/src/errors/exceptions/index.js +48 -0
  91. package/lib/src/errors/index.d.ts +31 -0
  92. package/lib/src/errors/index.js +111 -0
  93. package/lib/src/file/Download.d.ts +11 -0
  94. package/lib/src/file/Download.js +118 -0
  95. package/lib/src/file/File.d.ts +20 -0
  96. package/lib/src/file/File.js +82 -0
  97. package/lib/src/file/Upload.d.ts +19 -0
  98. package/lib/src/file/Upload.js +250 -0
  99. package/lib/src/file/index.d.ts +3 -0
  100. package/lib/src/file/index.js +11 -0
  101. package/lib/src/helpers.d.ts +34 -0
  102. package/lib/src/helpers.js +358 -0
  103. package/lib/src/index.d.ts +16 -0
  104. package/lib/src/index.js +56 -0
  105. package/lib/src/platform.node.d.ts +36 -0
  106. package/lib/src/platform.node.js +109 -0
  107. package/lib/src/raw/All.d.ts +2400 -0
  108. package/lib/src/raw/All.js +2403 -0
  109. package/lib/src/raw/Raw.d.ts +29195 -0
  110. package/lib/src/raw/Raw.js +97277 -0
  111. package/lib/src/raw/core/BytesIO.d.ts +33 -0
  112. package/lib/src/raw/core/BytesIO.js +145 -0
  113. package/lib/src/raw/core/GzipPacked.d.ts +10 -0
  114. package/lib/src/raw/core/GzipPacked.js +60 -0
  115. package/lib/src/raw/core/Message.d.ts +13 -0
  116. package/lib/src/raw/core/Message.js +81 -0
  117. package/lib/src/raw/core/MsgContainer.d.ts +11 -0
  118. package/lib/src/raw/core/MsgContainer.js +69 -0
  119. package/lib/src/raw/core/TLObject.d.ts +19 -0
  120. package/lib/src/raw/core/TLObject.js +108 -0
  121. package/lib/src/raw/core/UpdateSecretChat.d.ts +40 -0
  122. package/lib/src/raw/core/UpdateSecretChat.js +88 -0
  123. package/lib/src/raw/core/index.d.ts +8 -0
  124. package/lib/src/raw/core/index.js +52 -0
  125. package/lib/src/raw/core/primitive/Bool.d.ts +20 -0
  126. package/lib/src/raw/core/primitive/Bool.js +41 -0
  127. package/lib/src/raw/core/primitive/Bytes.d.ts +7 -0
  128. package/lib/src/raw/core/primitive/Bytes.js +41 -0
  129. package/lib/src/raw/core/primitive/Double.d.ts +7 -0
  130. package/lib/src/raw/core/primitive/Double.js +24 -0
  131. package/lib/src/raw/core/primitive/Float.d.ts +7 -0
  132. package/lib/src/raw/core/primitive/Float.js +24 -0
  133. package/lib/src/raw/core/primitive/Int.d.ts +23 -0
  134. package/lib/src/raw/core/primitive/Int.js +122 -0
  135. package/lib/src/raw/core/primitive/String.d.ts +7 -0
  136. package/lib/src/raw/core/primitive/String.js +15 -0
  137. package/lib/src/raw/core/primitive/Vector.d.ts +9 -0
  138. package/lib/src/raw/core/primitive/Vector.js +50 -0
  139. package/lib/src/raw/core/primitive/index.d.ts +7 -0
  140. package/lib/src/raw/core/primitive/index.js +22 -0
  141. package/lib/src/raw/index.d.ts +3 -0
  142. package/lib/src/raw/index.js +17 -0
  143. package/lib/src/session/Auth.d.ts +15 -0
  144. package/lib/src/session/Auth.js +254 -0
  145. package/lib/src/session/Session.d.ts +58 -0
  146. package/lib/src/session/Session.js +571 -0
  147. package/lib/src/session/index.d.ts +7 -0
  148. package/lib/src/session/index.js +49 -0
  149. package/lib/src/session/internals/DataCenter.d.ts +42 -0
  150. package/lib/src/session/internals/DataCenter.js +80 -0
  151. package/lib/src/session/internals/MsgFactory.d.ts +3 -0
  152. package/lib/src/session/internals/MsgFactory.js +23 -0
  153. package/lib/src/session/internals/MsgId.d.ts +9 -0
  154. package/lib/src/session/internals/MsgId.js +24 -0
  155. package/lib/src/session/internals/SeqNo.d.ts +6 -0
  156. package/lib/src/session/internals/SeqNo.js +18 -0
  157. package/lib/src/session/secretChats/SecretChat.d.ts +29 -0
  158. package/lib/src/session/secretChats/SecretChat.js +527 -0
  159. package/lib/src/session/secretChats/index.d.ts +1 -0
  160. package/lib/src/session/secretChats/index.js +5 -0
  161. package/lib/src/storage/Abstract.d.ts +68 -0
  162. package/lib/src/storage/Abstract.js +6 -0
  163. package/lib/src/storage/SecretChat.d.ts +42 -0
  164. package/lib/src/storage/SecretChat.js +99 -0
  165. package/lib/src/storage/Session.d.ts +63 -0
  166. package/lib/src/storage/Session.js +245 -0
  167. package/lib/src/storage/StringSession.d.ts +4 -0
  168. package/lib/src/storage/StringSession.js +77 -0
  169. package/lib/src/storage/index.d.ts +4 -0
  170. package/lib/src/storage/index.js +12 -0
  171. package/package.json +46 -0
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
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);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
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
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Auth = void 0;
37
+ const connection_js_1 = require("../connection/connection.js");
38
+ const AES = __importStar(require("../crypto/Aes.js"));
39
+ const Prime = __importStar(require("../crypto/Prime.js"));
40
+ const RSA = __importStar(require("../crypto/RSA.js"));
41
+ const platform_node_js_1 = require("../platform.node.js");
42
+ const index_js_1 = require("../errors/index.js");
43
+ const index_js_2 = require("../raw/index.js");
44
+ const MsgId_js_1 = require("./internals/MsgId.js");
45
+ const helpers_js_1 = require("../helpers.js");
46
+ const Logger_js_1 = require("../Logger.js");
47
+ class Auth {
48
+ MAX_RETRIES = 5;
49
+ dcId;
50
+ testMode;
51
+ ipv6;
52
+ connection;
53
+ constructor(dcId, testMode, ipv6) {
54
+ this.dcId = dcId;
55
+ this.testMode = testMode;
56
+ this.ipv6 = ipv6;
57
+ }
58
+ static pack(data) {
59
+ return platform_node_js_1.Buffer.concat([
60
+ platform_node_js_1.Buffer.alloc(8),
61
+ index_js_2.Primitive.Long.write(BigInt(new MsgId_js_1.MsgId().getMsgId())),
62
+ index_js_2.Primitive.Int.write(platform_node_js_1.Buffer.byteLength(data.write())),
63
+ data.write(),
64
+ ]);
65
+ }
66
+ static async unpack(b) {
67
+ b.seek(20, 1);
68
+ return await index_js_2.TLObject.read(b);
69
+ }
70
+ async invoke(data) {
71
+ const content = Auth.pack(data);
72
+ await this.connection.send(content);
73
+ const response = new index_js_2.BytesIO(await this.connection.recv());
74
+ return await Auth.unpack(response);
75
+ }
76
+ async create() {
77
+ let retries = this.MAX_RETRIES;
78
+ while (true) {
79
+ this.connection = new connection_js_1.Connection(this.dcId, this.testMode, this.ipv6);
80
+ try {
81
+ Logger_js_1.Logger.debug(`[11] Start creating a new auth key on DC${this.dcId}`);
82
+ await this.connection.connect();
83
+ const nonce = (0, helpers_js_1.bufferToBigint)(platform_node_js_1.Buffer.from(platform_node_js_1.crypto.randomBytes(16)), false, true);
84
+ Logger_js_1.Logger.debug(`[12] Send ResPq: ${nonce}`);
85
+ const resPq = await this.invoke(new index_js_2.Raw.ReqPqMulti({ nonce }));
86
+ Logger_js_1.Logger.debug(`[13] Got ResPq: ${resPq.serverNonce}`);
87
+ Logger_js_1.Logger.debug(`[14] Server public key fingerprints: ${resPq.serverPublicKeyFingerprints}`);
88
+ let fingerprints;
89
+ if (!resPq.serverPublicKeyFingerprints || !resPq.serverPublicKeyFingerprints.length)
90
+ throw new Error('Public key not found');
91
+ for (const i of resPq.serverPublicKeyFingerprints) {
92
+ if (RSA.PublicKey.get(BigInt(i))) {
93
+ Logger_js_1.Logger.debug(`[15] Using fingerprint: ${i}`);
94
+ fingerprints = BigInt(i);
95
+ break;
96
+ }
97
+ else {
98
+ Logger_js_1.Logger.debug(`[16] Fingerprint unknown: ${i}`);
99
+ }
100
+ }
101
+ const pq = (0, helpers_js_1.bufferToBigint)(resPq.pq, false);
102
+ Logger_js_1.Logger.debug(`[17] Start PQ factorization: ${pq}`);
103
+ const start = Math.floor(Date.now() / 1000);
104
+ const g = Prime.decompose(pq);
105
+ const [p, q] = [BigInt(g), BigInt(pq / g)].sort((a, b) => {
106
+ if (a > b)
107
+ return 1;
108
+ if (a < b)
109
+ return -1;
110
+ return 0;
111
+ });
112
+ Logger_js_1.Logger.debug(`[18] Done PQ factorization (${Math.round(Math.floor(Date.now() / 1000) - start)}s): ${p} ${q}`);
113
+ const newNonce = (0, helpers_js_1.bufferToBigint)(platform_node_js_1.Buffer.from(platform_node_js_1.crypto.randomBytes(32)), true, true);
114
+ const pBytes = (0, helpers_js_1.bigintToBuffer)(BigInt(p), 4, false);
115
+ const qBytes = (0, helpers_js_1.bigintToBuffer)(BigInt(q), 4, false);
116
+ let data = new index_js_2.Raw.PQInnerData({
117
+ pq: resPq.pq,
118
+ p: pBytes,
119
+ q: qBytes,
120
+ nonce: nonce,
121
+ newNonce: newNonce,
122
+ serverNonce: resPq.serverNonce,
123
+ }).write();
124
+ let sha = platform_node_js_1.crypto.createHash('sha1').update(data).digest();
125
+ let padding = platform_node_js_1.Buffer.from(platform_node_js_1.crypto.randomBytes((0, helpers_js_1.mod)(-(platform_node_js_1.Buffer.byteLength(data) + platform_node_js_1.Buffer.byteLength(sha)), 255)));
126
+ let hash = platform_node_js_1.Buffer.concat([
127
+ sha,
128
+ data,
129
+ padding,
130
+ ]);
131
+ let encryptedData = RSA.encrypt(hash, fingerprints);
132
+ Logger_js_1.Logger.debug(`[19] Length of encrypted data: ${platform_node_js_1.Buffer.byteLength(encryptedData)}`);
133
+ Logger_js_1.Logger.debug(`[20] Done encrypt data with RSA`);
134
+ Logger_js_1.Logger.debug(`[21] Send ReqDhParams`);
135
+ const serverDh = await this.invoke(new index_js_2.Raw.ReqDhParams({
136
+ nonce: nonce,
137
+ serverNonce: resPq.serverNonce,
138
+ encryptedData: encryptedData,
139
+ p: pBytes,
140
+ q: qBytes,
141
+ publicKeyFingerprint: fingerprints,
142
+ }));
143
+ const tempAesKey = platform_node_js_1.Buffer.concat([
144
+ platform_node_js_1.crypto
145
+ .createHash('sha1')
146
+ .update(platform_node_js_1.Buffer.concat([
147
+ index_js_2.Primitive.Int256.write(newNonce),
148
+ index_js_2.Primitive.Int128.write(resPq.serverNonce),
149
+ ]))
150
+ .digest(),
151
+ platform_node_js_1.crypto
152
+ .createHash('sha1')
153
+ .update(platform_node_js_1.Buffer.concat([
154
+ index_js_2.Primitive.Int128.write(resPq.serverNonce),
155
+ index_js_2.Primitive.Int256.write(newNonce),
156
+ ]))
157
+ .digest()
158
+ .subarray(0, 12),
159
+ ]);
160
+ const tempAesIv = platform_node_js_1.Buffer.concat([
161
+ platform_node_js_1.crypto
162
+ .createHash('sha1')
163
+ .update(platform_node_js_1.Buffer.concat([
164
+ index_js_2.Primitive.Int128.write(resPq.serverNonce),
165
+ index_js_2.Primitive.Int256.write(newNonce),
166
+ ]))
167
+ .digest()
168
+ .subarray(12),
169
+ platform_node_js_1.crypto
170
+ .createHash('sha1')
171
+ .update(platform_node_js_1.Buffer.concat([
172
+ index_js_2.Primitive.Int256.write(newNonce),
173
+ index_js_2.Primitive.Int256.write(newNonce),
174
+ ]))
175
+ .digest(),
176
+ index_js_2.Primitive.Int256.write(newNonce).subarray(0, 4),
177
+ ]);
178
+ const answerWithHash = AES.ige256Decrypt(serverDh.encryptedAnswer, tempAesKey, tempAesIv);
179
+ const answer = new index_js_2.BytesIO(answerWithHash);
180
+ answer.seek(20, 1);
181
+ const serverDhInnerData = await index_js_2.TLObject.read(answer);
182
+ Logger_js_1.Logger.debug('[22] Done decrypting answer');
183
+ const dhPrime = (0, helpers_js_1.bufferToBigint)(serverDhInnerData.dhPrime, false);
184
+ const deltaTime = serverDhInnerData.serverTime - Math.floor(Date.now() / 1000);
185
+ Logger_js_1.Logger.debug(`[23] Delta time: ${deltaTime}`);
186
+ const b = (0, helpers_js_1.bufferToBigint)(platform_node_js_1.Buffer.from(platform_node_js_1.crypto.randomBytes(256)), false);
187
+ const gB = (0, helpers_js_1.bigIntPow)(BigInt(serverDhInnerData.g), b, dhPrime);
188
+ data = new index_js_2.Raw.ClientDhInnerData({
189
+ nonce: resPq.nonce,
190
+ serverNonce: resPq.serverNonce,
191
+ retryId: BigInt(0),
192
+ gB: (0, helpers_js_1.bigintToBuffer)(gB, 256, false),
193
+ }).write();
194
+ sha = platform_node_js_1.crypto.createHash('sha1').update(data).digest();
195
+ padding = platform_node_js_1.Buffer.from(platform_node_js_1.crypto.randomBytes((0, helpers_js_1.mod)(-(platform_node_js_1.Buffer.byteLength(data) + platform_node_js_1.Buffer.byteLength(sha)), 16)));
196
+ hash = platform_node_js_1.Buffer.concat([
197
+ sha,
198
+ data,
199
+ padding,
200
+ ]);
201
+ encryptedData = AES.ige256Encrypt(hash, tempAesKey, tempAesIv);
202
+ Logger_js_1.Logger.debug(`[24] Length of encrypted data: ${platform_node_js_1.Buffer.byteLength(encryptedData)}`);
203
+ Logger_js_1.Logger.debug(`[25] Send SetClientDhParams`);
204
+ const setClientDhParamsAnswer = await this.invoke(new index_js_2.Raw.SetClientDhParams({
205
+ nonce: resPq.nonce,
206
+ serverNonce: resPq.serverNonce,
207
+ encryptedData: encryptedData,
208
+ }));
209
+ const gA = (0, helpers_js_1.bufferToBigint)(serverDhInnerData.gA, false);
210
+ const authKey = (0, helpers_js_1.bigintToBuffer)((0, helpers_js_1.bigIntPow)(gA, b, dhPrime), 256, false);
211
+ index_js_1.SecurityCheckMismatch.check(dhPrime === Prime.CURRENT_DH_PRIME);
212
+ Logger_js_1.Logger.debug('[26] DH parameters check: OK');
213
+ index_js_1.SecurityCheckMismatch.check(BigInt(1) < g && g < dhPrime - BigInt(1));
214
+ index_js_1.SecurityCheckMismatch.check(BigInt(1) < gA && gA < dhPrime - BigInt(1));
215
+ index_js_1.SecurityCheckMismatch.check(BigInt(1) < gB && gB < dhPrime - BigInt(1));
216
+ index_js_1.SecurityCheckMismatch.check(BigInt(2) ** BigInt(2048 - 64) < gA && gA < dhPrime - BigInt(2) ** BigInt(2048 - 64));
217
+ index_js_1.SecurityCheckMismatch.check(BigInt(2) ** BigInt(2048 - 64) < gB && gB < dhPrime - BigInt(2) ** BigInt(2048 - 64));
218
+ Logger_js_1.Logger.debug('[27] gA and gB validation: OK');
219
+ index_js_1.SecurityCheckMismatch.check(answerWithHash
220
+ .subarray(0, 20)
221
+ .equals(platform_node_js_1.crypto
222
+ .createHash('sha1')
223
+ .update(serverDhInnerData.write())
224
+ .digest()));
225
+ Logger_js_1.Logger.debug('[28] SHA1 hash values check: OK');
226
+ index_js_1.SecurityCheckMismatch.check(nonce === resPq.nonce);
227
+ index_js_1.SecurityCheckMismatch.check(resPq.nonce === serverDh.nonce);
228
+ index_js_1.SecurityCheckMismatch.check(resPq.serverNonce === serverDh.serverNonce);
229
+ index_js_1.SecurityCheckMismatch.check(resPq.nonce === setClientDhParamsAnswer.nonce);
230
+ index_js_1.SecurityCheckMismatch.check(resPq.serverNonce === setClientDhParamsAnswer.serverNonce);
231
+ Logger_js_1.Logger.debug('[29] Nonce fields check: OK');
232
+ const serverSalt = AES.xor((0, helpers_js_1.bigintToBuffer)(newNonce, 32, true, true).subarray(0, 8), (0, helpers_js_1.bigintToBuffer)(resPq.serverNonce, 16, true, true).subarray(0, 8));
233
+ Logger_js_1.Logger.debug(`[30] Server salt: ${(0, helpers_js_1.bufferToBigint)(serverSalt, true)}`);
234
+ Logger_js_1.Logger.debug(`[31] Done auth key exchange: ${setClientDhParamsAnswer.className}`);
235
+ return authKey;
236
+ }
237
+ catch (error) {
238
+ Logger_js_1.Logger.error('[32] Error when trying to make auth key: ', error);
239
+ if (retries > 0) {
240
+ retries--;
241
+ }
242
+ else {
243
+ throw error;
244
+ }
245
+ await (0, helpers_js_1.sleep)(1000);
246
+ continue;
247
+ }
248
+ finally {
249
+ this.connection.close();
250
+ }
251
+ }
252
+ }
253
+ }
254
+ exports.Auth = Auth;
@@ -0,0 +1,58 @@
1
+ import { Buffer } from '../platform.node.js';
2
+ import { ProxyInterface } from '../connection/connection.js';
3
+ import { TLObject } from '../raw/index.js';
4
+ import type { Client } from '../client/Client.js';
5
+ export declare class Results {
6
+ value: Promise<unknown>;
7
+ reject: {
8
+ (reason: any): any;
9
+ };
10
+ resolve: {
11
+ (value: any): any;
12
+ };
13
+ constructor();
14
+ }
15
+ export declare class Session {
16
+ START_TIMEOUT: number;
17
+ WAIT_TIMEOUT: number;
18
+ SLEEP_THRESHOLD: number;
19
+ MAX_RETRIES: number;
20
+ ACKS_THRESHOLD: number;
21
+ PING_INTERVAL: number;
22
+ private _dcId;
23
+ private _authKey;
24
+ private _testMode;
25
+ private _proxy?;
26
+ private _isMedia;
27
+ private _isCdn;
28
+ private _authKeyId;
29
+ private _connection;
30
+ private _pingTask;
31
+ private _client;
32
+ private _sessionId;
33
+ private _msgFactory;
34
+ private _msgId;
35
+ private _salt;
36
+ private _storedMsgId;
37
+ private _results;
38
+ private _isConnected;
39
+ private _pendingAcks;
40
+ private _task;
41
+ private _networkTask;
42
+ private _mutex;
43
+ constructor(client: Client, dcId: number, authKey: Buffer, testMode: boolean, proxy?: ProxyInterface, isMedia?: boolean, isCdn?: boolean);
44
+ private _handlePacket;
45
+ private _send;
46
+ private _pingWorker;
47
+ private _networkWorker;
48
+ retriesReconnect(retries?: number): Promise<any>;
49
+ stop(): Promise<void>;
50
+ restart(): void;
51
+ invoke(data: TLObject, retries?: number, timeout?: number, sleepThreshold?: number): Promise<TLObject>;
52
+ start(): Promise<void>;
53
+ initConnection(): Promise<TLObject | undefined>;
54
+ toJSON(): {
55
+ [key: string]: any;
56
+ };
57
+ toString(): string;
58
+ }