@mtkruto/node 0.0.6 → 0.0.7

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 (41) hide show
  1. package/esm/client/client.js +50 -15
  2. package/esm/client/client_abstract.js +2 -2
  3. package/esm/deps/deno.land/x/{tgcrypto@0.1.1 → tgcrypto@0.1.3}/tgcrypto.js +7 -56
  4. package/esm/deps.js +1 -1
  5. package/esm/mod.js +13 -2
  6. package/esm/session/session.js +16 -0
  7. package/esm/session/session_local_storage.js +26 -0
  8. package/esm/session/session_memory.js +5 -0
  9. package/esm/transport/transport_abridged.js +69 -0
  10. package/esm/transport/transport_provider.js +5 -5
  11. package/esm/utilities/0_bigint.js +3 -0
  12. package/esm/utilities/1_password.js +140 -0
  13. package/package.json +1 -1
  14. package/script/client/client.js +73 -15
  15. package/script/client/client_abstract.js +1 -1
  16. package/script/deps/deno.land/x/{tgcrypto@0.1.1 → tgcrypto@0.1.3}/tgcrypto.js +7 -79
  17. package/script/deps.js +1 -1
  18. package/script/mod.js +17 -5
  19. package/script/session/session.js +20 -0
  20. package/script/session/session_local_storage.js +30 -0
  21. package/script/session/session_memory.js +9 -0
  22. package/script/transport/transport_abridged.js +73 -0
  23. package/script/transport/transport_provider.js +5 -5
  24. package/script/utilities/0_bigint.js +5 -1
  25. package/script/utilities/1_password.js +174 -0
  26. package/types/client/client.d.ts +17 -6
  27. package/types/client/client_abstract.d.ts +4 -12
  28. package/types/deps/deno.land/x/tgcrypto@0.1.3/tgcrypto.d.ts +2 -0
  29. package/types/deps.d.ts +1 -1
  30. package/types/mod.d.ts +16 -2
  31. package/types/session/session.d.ts +8 -0
  32. package/types/session/session_local_storage.d.ts +7 -0
  33. package/types/session/session_memory.d.ts +5 -0
  34. package/types/transport/transport_abridged.d.ts +11 -0
  35. package/types/transport/transport_provider.d.ts +3 -2
  36. package/types/utilities/0_bigint.d.ts +1 -0
  37. package/types/utilities/1_password.d.ts +11 -0
  38. package/types/deps/deno.land/x/tgcrypto@0.1.1/tgcrypto.d.ts +0 -2
  39. /package/esm/deps/deno.land/x/{tgcrypto@0.1.1 → tgcrypto@0.1.3}/mod.js +0 -0
  40. /package/script/deps/deno.land/x/{tgcrypto@0.1.1 → tgcrypto@0.1.3}/mod.js +0 -0
  41. /package/types/deps/deno.land/x/{tgcrypto@0.1.1 → tgcrypto@0.1.3}/mod.d.ts +0 -0
@@ -0,0 +1,69 @@
1
+ import { bufferFromBigInt, concat } from "../utilities/0_buffer.js";
2
+ import { getObfuscationParameters } from "../utilities/1_obfuscation.js";
3
+ import { Transport } from "./transport.js";
4
+ export class TransportAbridged extends Transport {
5
+ constructor(connection, obfuscated = false) {
6
+ super();
7
+ Object.defineProperty(this, "connection", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: connection
12
+ });
13
+ Object.defineProperty(this, "obfuscated", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: obfuscated
18
+ });
19
+ }
20
+ async initialize() {
21
+ if (!this.initialized) {
22
+ if (this.obfuscated) {
23
+ this.obfuscationParameters = await getObfuscationParameters(0xEFEFEFEF, this.connection);
24
+ }
25
+ else {
26
+ await this.connection.write(new Uint8Array([0xEF]));
27
+ }
28
+ this.initialized = true;
29
+ }
30
+ else {
31
+ throw new Error("Transport already initialized");
32
+ }
33
+ }
34
+ async receive() {
35
+ let length;
36
+ {
37
+ let buffer = new Uint8Array(1);
38
+ await this.connection.read(buffer);
39
+ buffer = this.decrypt(buffer);
40
+ if (buffer[0] < 0x7F) {
41
+ length = buffer[0];
42
+ }
43
+ else {
44
+ let buffer = new Uint8Array(3);
45
+ await this.connection.read(buffer);
46
+ buffer = this.decrypt(buffer);
47
+ const dataView = new DataView(buffer.buffer);
48
+ length = dataView.getUint16(0, true);
49
+ }
50
+ }
51
+ length *= 4;
52
+ let buffer = new Uint8Array(length);
53
+ await this.connection.read(buffer);
54
+ buffer = this.decrypt(buffer);
55
+ return buffer;
56
+ }
57
+ async send(buffer) {
58
+ if (!this.initialized) {
59
+ throw new Error("Transport not initialized");
60
+ }
61
+ const bufferLength = buffer.length / 4;
62
+ const header = new Uint8Array([bufferLength >= 0x7F ? 0x7F : bufferLength]);
63
+ const length = bufferLength >= 0x7F ? bufferFromBigInt(bufferLength, 3) : new Uint8Array();
64
+ await this.connection.write(this.encrypt(concat(header, length, buffer)));
65
+ }
66
+ deinitialize() {
67
+ this.initialized = false;
68
+ }
69
+ }
@@ -11,13 +11,13 @@ const dcToNameMap = {
11
11
  "4": "vesta",
12
12
  "5": "flora",
13
13
  };
14
- export const defaultTransportProvider = (params) => {
15
- return (cdn) => {
16
- const { dc, wss = typeof location !== "undefined" && location.protocol == "http:" ? false : true } = params ?? { dc: defaultDc };
17
- const url = `${wss ? "wss" : "ws"}://${dcToNameMap[dc]}${cdn ? "-1" : ""}.telegram.org/apiws${dc.endsWith("-test") ? "apiws_test" : "apiws"}`;
14
+ export function defaultTransportProvider(wss) {
15
+ return ({ dc, cdn }) => {
16
+ wss ??= typeof location !== "undefined" && location.protocol == "http:" ? false : true;
17
+ const url = `${wss ? "wss" : "ws"}://${dcToNameMap[dc]}${cdn ? "-1" : ""}.web.telegram.org/${dc.endsWith("-test") ? "apiws_test" : "apiws"}`;
18
18
  const connection = new ConnectionWebSocket(url);
19
19
  const transport = new TransportIntermediate(connection, true);
20
20
  const dcId = Number(dc[0]) + (dc.endsWith("-test") ? 10000 : 0) * (cdn ? -1 : 1);
21
21
  return { connection, transport, dcId };
22
22
  };
23
- };
23
+ }
@@ -35,3 +35,6 @@ export function getRandomBigInt(byteLength, little, signed) {
35
35
  dntShim.crypto.getRandomValues(randomBytes);
36
36
  return bigIntFromBuffer(randomBytes, little, signed);
37
37
  }
38
+ export function getRandomId() {
39
+ return getRandomBigInt(8, true, true);
40
+ }
@@ -0,0 +1,140 @@
1
+ import * as dntShim from "../_dnt.shims.js";
2
+ import * as types from "../tl/2_types.js";
3
+ import { bufferFromBigInt, concat } from "./0_buffer.js";
4
+ import { sha256 } from "./0_hash.js";
5
+ import { bigIntFromBuffer, getRandomBigInt, mod, modExp } from "./0_bigint.js";
6
+ export function isSafePrime(primeBytes, g) {
7
+ // deno-fmt-ignore
8
+ const goodPrime = new Uint8Array([
9
+ 0xC7, 0x1C, 0xAE, 0xB9, 0xC6, 0xB1, 0xC9, 0x04, 0x8E, 0x6C, 0x52, 0x2F,
10
+ 0x70, 0xF1, 0x3F, 0x73, 0x98, 0x0D, 0x40, 0x23, 0x8E, 0x3E, 0x21, 0xC1,
11
+ 0x49, 0x34, 0xD0, 0x37, 0x56, 0x3D, 0x93, 0x0F, 0x48, 0x19, 0x8A, 0x0A,
12
+ 0xA7, 0xC1, 0x40, 0x58, 0x22, 0x94, 0x93, 0xD2, 0x25, 0x30, 0xF4, 0xDB,
13
+ 0xFA, 0x33, 0x6F, 0x6E, 0x0A, 0xC9, 0x25, 0x13, 0x95, 0x43, 0xAE, 0xD4,
14
+ 0x4C, 0xCE, 0x7C, 0x37, 0x20, 0xFD, 0x51, 0xF6, 0x94, 0x58, 0x70, 0x5A,
15
+ 0xC6, 0x8C, 0xD4, 0xFE, 0x6B, 0x6B, 0x13, 0xAB, 0xDC, 0x97, 0x46, 0x51,
16
+ 0x29, 0x69, 0x32, 0x84, 0x54, 0xF1, 0x8F, 0xAF, 0x8C, 0x59, 0x5F, 0x64,
17
+ 0x24, 0x77, 0xFE, 0x96, 0xBB, 0x2A, 0x94, 0x1D, 0x5B, 0xCD, 0x1D, 0x4A,
18
+ 0xC8, 0xCC, 0x49, 0x88, 0x07, 0x08, 0xFA, 0x9B, 0x37, 0x8E, 0x3C, 0x4F,
19
+ 0x3A, 0x90, 0x60, 0xBE, 0xE6, 0x7C, 0xF9, 0xA4, 0xA4, 0xA6, 0x95, 0x81,
20
+ 0x10, 0x51, 0x90, 0x7E, 0x16, 0x27, 0x53, 0xB5, 0x6B, 0x0F, 0x6B, 0x41,
21
+ 0x0D, 0xBA, 0x74, 0xD8, 0xA8, 0x4B, 0x2A, 0x14, 0xB3, 0x14, 0x4E, 0x0E,
22
+ 0xF1, 0x28, 0x47, 0x54, 0xFD, 0x17, 0xED, 0x95, 0x0D, 0x59, 0x65, 0xB4,
23
+ 0xB9, 0xDD, 0x46, 0x58, 0x2D, 0xB1, 0x17, 0x8D, 0x16, 0x9C, 0x6B, 0xC4,
24
+ 0x65, 0xB0, 0xD6, 0xFF, 0x9C, 0xA3, 0x92, 0x8F, 0xEF, 0x5B, 0x9A, 0xE4,
25
+ 0xE4, 0x18, 0xFC, 0x15, 0xE8, 0x3E, 0xBE, 0xA0, 0xF8, 0x7F, 0xA9, 0xFF,
26
+ 0x5E, 0xED, 0x70, 0x05, 0x0D, 0xED, 0x28, 0x49, 0xF4, 0x7B, 0xF9, 0x59,
27
+ 0xD9, 0x56, 0x85, 0x0C, 0xE9, 0x29, 0x85, 0x1F, 0x0D, 0x81, 0x15, 0xF6,
28
+ 0x35, 0xB1, 0x05, 0xEE, 0x2E, 0x4E, 0x15, 0xD0, 0x4B, 0x24, 0x54, 0xBF,
29
+ 0x6F, 0x4F, 0xAD, 0xF0, 0x34, 0xB1, 0x04, 0x03, 0x11, 0x9C, 0xD8, 0xE3,
30
+ 0xB9, 0x2F, 0xCC, 0x5B,
31
+ ]);
32
+ if (goodPrime.every((v, i) => v == primeBytes[i])) {
33
+ if ([3, 4, 5, 7].includes(g)) { // It's good
34
+ return true;
35
+ }
36
+ }
37
+ return false;
38
+ }
39
+ // H(data) := sha256(data)
40
+ export const h = sha256;
41
+ // SH(data, salt) := H(salt | data | salt)
42
+ export const sh = (data, salt) => h(concat(salt, data, salt));
43
+ // PH1(password, salt1, salt2) := SH(SH(password, salt1), salt2)
44
+ export const ph1 = async (password, salt1, salt2) => await sh(await sh(password, salt1), salt2);
45
+ export async function pbkdf2(password, salt, iterations) {
46
+ const key = await dntShim.dntGlobalThis.crypto.subtle.importKey("raw", password, "PBKDF2", false, ["deriveBits"]);
47
+ const buffer = await dntShim.dntGlobalThis.crypto.subtle.deriveBits({ name: "PBKDF2", salt, iterations, hash: "SHA-512" }, key, 512);
48
+ return new Uint8Array(buffer);
49
+ }
50
+ // PH2(password, salt1, salt2) := SH(pbkdf2(sha512, PH1(password, salt1, salt2), salt1, 100000), salt2)
51
+ export const ph2 = async (password, salt1, salt2) => await sh(await pbkdf2(await ph1(password, salt1, salt2), salt1, 100000), salt2);
52
+ export function isGoodModExpFirst(modexp, prime) {
53
+ const diff = prime - modexp;
54
+ const minDiffBitsCount = 2048 - 64;
55
+ const maxModExpSize = 256;
56
+ return !(diff < 0n ||
57
+ diff.toString(2).length < minDiffBitsCount ||
58
+ modexp.toString(2).length < minDiffBitsCount ||
59
+ Math.floor((modexp.toString(2).length + 7) / 8) > maxModExpSize);
60
+ }
61
+ export function pad(bigint) {
62
+ if (typeof bigint === "number") {
63
+ bigint = BigInt(bigint);
64
+ }
65
+ if (typeof bigint === "bigint") {
66
+ return bufferFromBigInt(bigint, 256, false);
67
+ }
68
+ else {
69
+ return concat(new Uint8Array(256 - bigint.length), bigint);
70
+ }
71
+ }
72
+ export async function checkPassword(password, ap) {
73
+ const algo = ap.currentAlgo;
74
+ if (!(algo instanceof
75
+ types.PasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow)) {
76
+ throw new Error("Unexpected algorithm");
77
+ }
78
+ // g := algo.g
79
+ const g = algo.g;
80
+ // p := algo.p
81
+ const p = bigIntFromBuffer(algo.p, false);
82
+ if (!isSafePrime(algo.p, g)) {
83
+ throw new Error("Got unsafe prime");
84
+ }
85
+ const srpB = ap.srpB;
86
+ const srpId = ap.srpId;
87
+ {
88
+ if (!srpB) {
89
+ throw new Error("srbB is not set");
90
+ }
91
+ if (!srpId) {
92
+ throw new Error("srpId is not set");
93
+ }
94
+ }
95
+ // salt1 := algo.salt1
96
+ const salt1 = algo.salt1;
97
+ // salt2 := algo.salt2
98
+ const salt2 = algo.salt2;
99
+ // g_b := srp_B
100
+ const gB = bigIntFromBuffer(srpB, false);
101
+ // k := H(p | g)
102
+ const k = bigIntFromBuffer(await h(concat(pad(p), pad(g))), false);
103
+ let u = 0n;
104
+ let a = 0n;
105
+ let gA = 0n;
106
+ for (let i = 0; i < 1000; i++) {
107
+ a = getRandomBigInt(256, false);
108
+ // g_a := pow(g, a) mod p
109
+ gA = modExp(BigInt(g), a, p);
110
+ if (isGoodModExpFirst(gA, p)) {
111
+ u = bigIntFromBuffer(await sha256(concat(pad(gA), pad(gB))), false);
112
+ if (u > 0n) {
113
+ break;
114
+ }
115
+ }
116
+ }
117
+ if (!a || !u || !gA) {
118
+ throw new Error();
119
+ }
120
+ // x := PH2(password, salt1, salt2)
121
+ const x = bigIntFromBuffer(await ph2(password, salt1, salt2), false);
122
+ // v := pow(g, x) mod p
123
+ const v = modExp(BigInt(g), x, p);
124
+ // k_v := (k * v) mod p
125
+ const kV = mod(k * v, p);
126
+ // t := (g_b - k_v) mod p
127
+ const t = mod(gB - kV, p);
128
+ // s_a := pow(t, a + u * x) mod p
129
+ const sA = modExp(t, a + u * x, p);
130
+ // k_a := H(s_a)
131
+ const kA = await h(pad(sA));
132
+ // M1 := H(H(p) xor H(g) | H(salt1) | H(salt2) | g_a | g_b | k_a)
133
+ const hG = await h(pad(g));
134
+ const m1 = await h(concat((await h(pad(p))).map((v, i) => v ^ hG[i]), await h(salt1), await h(salt2), pad(gA), pad(gB), kA));
135
+ return new types.InputCheckPasswordSRP({
136
+ srpId: srpId,
137
+ A: pad(gA),
138
+ M1: m1,
139
+ });
140
+ }
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "main": "./script/mod.js",
4
4
  "types": "./types/mod.d.ts",
5
5
  "name": "@mtkruto/node",
6
- "version": "0.0.6",
6
+ "version": "0.0.7",
7
7
  "description": "MTKruto for Node.js",
8
8
  "author": "Roj <rojvv@icloud.com>",
9
9
  "license": "LGPL-3.0-or-later",
@@ -1,21 +1,52 @@
1
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.Client = void 0;
4
27
  const deps_js_1 = require("../deps.js");
5
28
  const constants_js_1 = require("../constants.js");
6
29
  const _0_bigint_js_1 = require("../utilities/0_bigint.js");
7
30
  const _1_message_js_1 = require("../utilities/1_message.js");
8
- const _2_types_js_1 = require("../tl/2_types.js");
9
- const _3_functions_js_1 = require("../tl/3_functions.js");
31
+ const types = __importStar(require("../tl/2_types.js"));
32
+ const functions = __importStar(require("../tl/3_functions.js"));
10
33
  const _3_tl_reader_js_1 = require("../tl/3_tl_reader.js");
11
34
  const _4_rpc_result_js_1 = require("../tl/4_rpc_result.js");
12
35
  const _5_message_js_1 = require("../tl/5_message.js");
13
36
  const _6_message_container_js_1 = require("../tl/6_message_container.js");
14
37
  const client_abstract_js_1 = require("./client_abstract.js");
15
38
  const client_plain_js_1 = require("./client_plain.js");
39
+ const _1_password_js_1 = require("../utilities/1_password.js");
40
+ const session_memory_js_1 = require("../session/session_memory.js");
16
41
  class Client extends client_abstract_js_1.ClientAbstract {
17
- constructor() {
18
- super(...arguments);
42
+ constructor(session = new session_memory_js_1.SessionMemory(), params) {
43
+ super(params?.transportProvider);
44
+ Object.defineProperty(this, "session", {
45
+ enumerable: true,
46
+ configurable: true,
47
+ writable: true,
48
+ value: session
49
+ });
19
50
  Object.defineProperty(this, "sessionId", {
20
51
  enumerable: true,
21
52
  configurable: true,
@@ -60,18 +91,45 @@ class Client extends client_abstract_js_1.ClientAbstract {
60
91
  await plain.disconnect();
61
92
  this.auth = { key, id };
62
93
  this.state.salt = salt;
94
+ await this.session.load();
95
+ if (this.session.dc != null) {
96
+ const { connection, transport, dcId } = this.transportProvider({ dc: this.session.dc, cdn: false });
97
+ this.connection = connection;
98
+ this.transport = transport;
99
+ this.dcId = dcId;
100
+ }
63
101
  await super.connect();
64
102
  // logger().debug("Client connected");
65
103
  this.receiveLoop();
66
104
  this.pingLoop();
67
105
  }
106
+ async authorizeUser(apiId, apiHash, resolvers) {
107
+ const phoneNumber = typeof resolvers.phoneNumber === "string" ? resolvers.phoneNumber : await resolvers.phoneNumber();
108
+ const { phoneCodeHash } = await this.invoke(new functions.AuthSendCode({ phoneNumber, apiId, apiHash, settings: new types.CodeSettings({}) }));
109
+ const phoneCode = typeof resolvers.code === "string" ? resolvers.code : await resolvers.code();
110
+ try {
111
+ await this.invoke(new functions.AuthSignIn({ phoneNumber, phoneCodeHash, phoneCode }));
112
+ }
113
+ catch (err) {
114
+ if (err instanceof types.RPCError && err.errorMessage == "SESSION_PASSWORD_NEEDED") {
115
+ const password = await this.invoke(new functions.AccountGetPassword());
116
+ if (password.currentAlgo instanceof types.PasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow) {
117
+ const password_ = typeof resolvers.password === "string" ? resolvers.password : await resolvers.password(password.hint ?? null);
118
+ await this.invoke(new functions.AuthCheckPassword({ password: await (0, _1_password_js_1.checkPassword)(new TextEncoder().encode(password_), password) }));
119
+ }
120
+ }
121
+ else {
122
+ throw err;
123
+ }
124
+ }
125
+ }
68
126
  async receiveLoop() {
69
127
  if (!this.auth) {
70
128
  throw new Error("Not connected");
71
129
  }
72
130
  while (this.connected) {
73
131
  if (this.toAcknowledge.size >= constants_js_1.ackThreshold) {
74
- await this.send(new _2_types_js_1.MsgsAck({ msgIds: [...this.toAcknowledge] }));
132
+ await this.send(new types.MsgsAck({ msgIds: [...this.toAcknowledge] }));
75
133
  this.toAcknowledge.clear();
76
134
  }
77
135
  const buffer = await this.transport.receive();
@@ -86,21 +144,21 @@ class Client extends client_abstract_js_1.ClientAbstract {
86
144
  const messages = decrypted instanceof _6_message_container_js_1.MessageContainer ? decrypted.messages : [decrypted];
87
145
  for (const message of messages) {
88
146
  let body = message.body;
89
- if (body instanceof _2_types_js_1.GZIPPacked) {
147
+ if (body instanceof types.GZIPPacked) {
90
148
  body = new _3_tl_reader_js_1.TLReader((0, deps_js_1.gunzip)(body.packedData)).readObject();
91
149
  }
92
150
  // logger().debug(`Received ${body.constructor.name}`);
93
- if (body instanceof _2_types_js_1.Updates) {
151
+ if (body instanceof types.Updates) {
94
152
  this.updatesHandler?.(this, body);
95
153
  }
96
154
  else if (message.body instanceof _4_rpc_result_js_1.RPCResult) {
97
155
  let result = message.body.result;
98
- if (result instanceof _2_types_js_1.GZIPPacked) {
156
+ if (result instanceof types.GZIPPacked) {
99
157
  result = new _3_tl_reader_js_1.TLReader((0, deps_js_1.gunzip)(result.packedData)).readObject();
100
158
  }
101
159
  const promise = this.promises.get(message.body.messageId);
102
160
  if (promise) {
103
- if (result instanceof _2_types_js_1.RPCError) {
161
+ if (result instanceof types.RPCError) {
104
162
  promise.reject(result);
105
163
  }
106
164
  else {
@@ -109,15 +167,15 @@ class Client extends client_abstract_js_1.ClientAbstract {
109
167
  this.promises.delete(message.body.messageId);
110
168
  }
111
169
  }
112
- else if (message.body instanceof _2_types_js_1.Pong) {
170
+ else if (message.body instanceof types.Pong) {
113
171
  const promise = this.promises.get(message.body.msgId);
114
172
  if (promise) {
115
173
  promise.resolve(message.body);
116
174
  this.promises.delete(message.body.msgId);
117
175
  }
118
176
  }
119
- else if (message.body instanceof _2_types_js_1.BadMsgNotification || message.body instanceof _2_types_js_1.BadServerSalt) {
120
- if (message.body instanceof _2_types_js_1.BadServerSalt) {
177
+ else if (message.body instanceof types.BadMsgNotification || message.body instanceof types.BadServerSalt) {
178
+ if (message.body instanceof types.BadServerSalt) {
121
179
  this.state.salt = message.body.newServerSalt;
122
180
  }
123
181
  const promise = this.promises.get(message.body.badMsgId);
@@ -133,7 +191,7 @@ class Client extends client_abstract_js_1.ClientAbstract {
133
191
  async pingLoop() {
134
192
  while (this.connected) {
135
193
  try {
136
- await this.invoke(new _3_functions_js_1.Ping({ pingId: (0, _0_bigint_js_1.getRandomBigInt)(8, true, false) }));
194
+ await this.invoke(new functions.Ping({ pingId: (0, _0_bigint_js_1.getRandomBigInt)(8, true, false) }));
137
195
  }
138
196
  catch (_err) {
139
197
  // logger().error(`Failed to invoke ping: ${err}`);
@@ -146,7 +204,7 @@ class Client extends client_abstract_js_1.ClientAbstract {
146
204
  throw new Error("Not connected");
147
205
  }
148
206
  let seqNo = this.state.seqNo * 2;
149
- if (!(function_ instanceof _3_functions_js_1.Ping) && !(function_ instanceof _2_types_js_1.MsgsAck)) {
207
+ if (!(function_ instanceof functions.Ping) && !(function_ instanceof types.MsgsAck)) {
150
208
  seqNo++;
151
209
  this.state.seqNo++;
152
210
  }
@@ -159,7 +217,7 @@ class Client extends client_abstract_js_1.ClientAbstract {
159
217
  const result = await new Promise((resolve, reject) => {
160
218
  this.promises.set(message.id, { resolve, reject });
161
219
  });
162
- if (result instanceof _2_types_js_1.BadServerSalt) {
220
+ if (result instanceof types.BadServerSalt) {
163
221
  return await this.invoke(function_);
164
222
  }
165
223
  else {
@@ -35,7 +35,7 @@ class ClientAbstract {
35
35
  writable: true,
36
36
  value: false
37
37
  });
38
- const { connection, transport, dcId } = transportProvider(false);
38
+ const { connection, transport, dcId } = transportProvider({ dc: transport_provider_js_1.defaultDc, cdn: false });
39
39
  this.connection = connection;
40
40
  this.transport = transport;
41
41
  this.dcId = dcId;