@mtkruto/node 0.1.109 → 0.1.111

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.
@@ -2,3 +2,4 @@ export * from "./transport/0_transport.js";
2
2
  export * from "./transport/1_transport_abridged.js";
3
3
  export * from "./transport/1_transport_intermediate.js";
4
4
  export * from "./transport/2_transport_provider.js";
5
+ export * from "./transport/3_transport_provider_web_socket.js";
@@ -2,3 +2,4 @@ export * from "./transport/0_transport.js";
2
2
  export * from "./transport/1_transport_abridged.js";
3
3
  export * from "./transport/1_transport_intermediate.js";
4
4
  export * from "./transport/2_transport_provider.js";
5
+ export * from "./transport/3_transport_provider_web_socket.js";
@@ -5,7 +5,7 @@ export declare const PUBLIC_KEYS: PublicKeys;
5
5
  export declare const VECTOR_CONSTRUCTOR = 481674261;
6
6
  export declare const INITIAL_DC: DC;
7
7
  export declare const LAYER = 166;
8
- export declare const APP_VERSION = "MTKruto 0.1.109";
8
+ export declare const APP_VERSION = "MTKruto 0.1.111";
9
9
  export declare const DEVICE_MODEL: string;
10
10
  export declare const LANG_CODE: string;
11
11
  export declare const LANG_PACK = "";
@@ -54,7 +54,7 @@ export const PUBLIC_KEYS = Object.freeze([
54
54
  export const VECTOR_CONSTRUCTOR = 0x1CB5C415;
55
55
  export const INITIAL_DC = "2";
56
56
  export const LAYER = 166;
57
- export const APP_VERSION = "MTKruto 0.1.109";
57
+ export const APP_VERSION = "MTKruto 0.1.111";
58
58
  // @ts-ignore: lib
59
59
  export const DEVICE_MODEL = typeof dntShim.Deno === "undefined" ? typeof navigator === "undefined" ? typeof process === "undefined" ? "Unknown" : process.platform + "-" + process.arch : navigator.userAgent.split(" ")[0] : dntShim.Deno.build.os + "-" + dntShim.Deno.build.arch;
60
60
  export const LANG_CODE = typeof navigator === "undefined" ? "en" : navigator.language.split("-")[0];
@@ -11,7 +11,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
11
11
  };
12
12
  var _ClientAbstract_dc;
13
13
  import { initTgCrypto } from "../0_deps.js";
14
- import { webSocketTransportProvider } from "../3_transport.js";
14
+ import { transportProviderWebSocket } from "../3_transport.js";
15
15
  import { INITIAL_DC } from "../4_constants.js";
16
16
  export class ClientAbstract {
17
17
  constructor(params) {
@@ -47,7 +47,7 @@ export class ClientAbstract {
47
47
  value: void 0
48
48
  });
49
49
  this.initialDc = params?.initialDc ?? INITIAL_DC;
50
- this.transportProvider = params?.transportProvider ?? webSocketTransportProvider();
50
+ this.transportProvider = params?.transportProvider ?? transportProviderWebSocket();
51
51
  this.cdn = params?.cdn ?? false;
52
52
  }
53
53
  get dcId() {
@@ -237,7 +237,9 @@ export class Client extends ClientAbstract {
237
237
  }
238
238
  }
239
239
  async [(_Client_auth = new WeakMap(), _Client_sessionId = new WeakMap(), _Client_state = new WeakMap(), _Client_promises = new WeakMap(), _Client_toAcknowledge = new WeakMap(), _Client_updateState = new WeakMap(), _Client_errorHandler = new WeakMap(), _Client_publicKeys = new WeakMap(), _Client_autoStart = new WeakMap(), _Client_lastPropagatedConnectionState = new WeakMap(), _Client_storageInited = new WeakMap(), _Client_authKeyWasCreated = new WeakMap(), _Client_connectMutex = new WeakMap(), _Client_connectionInited = new WeakMap(), _Client_lastPropagatedAuthorizationState = new WeakMap(), _Client_selfId = new WeakMap(), _Client_lastOutgoing = new WeakMap(), _Client_pingLoopStarted = new WeakMap(), _Client_autoStarted = new WeakMap(), _Client_lastMsgId = new WeakMap(), _Client_handleUpdateQueue = new WeakMap(), _Client_processUpdatesQueue = new WeakMap(), _Client_usernameResolver = new WeakMap(), _Client_handle = new WeakMap(), _Client_instances = new WeakSet(), _Client_propagateConnectionState = function _Client_propagateConnectionState(connectionState) {
240
- return __classPrivateFieldGet(this, _Client_handle, "f").call(this, { connectionState }, resolve);
240
+ __classPrivateFieldGet(this, _Client_handleUpdateQueue, "f").add(async () => {
241
+ await __classPrivateFieldGet(this, _Client_handle, "f").call(this, { connectionState }, resolve);
242
+ });
241
243
  }, _Client_setAuth = async function _Client_setAuth(key) {
242
244
  const hash = await sha1(key);
243
245
  const id = bigIntFromBuffer(hash.slice(-8), true, false);
@@ -9,12 +9,13 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
10
10
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
11
11
  };
12
- var _ConnectionWebSocket_instances, _ConnectionWebSocket_webSocket, _ConnectionWebSocket_rMutex, _ConnectionWebSocket_wMutex, _ConnectionWebSocket_buffer, _ConnectionWebSocket_nextResolve, _ConnectionWebSocket_initWs, _ConnectionWebSocket_wasConnected, _ConnectionWebSocket_isConnecting, _ConnectionWebSocket_connectionError;
12
+ var _ConnectionWebSocket_instances, _ConnectionWebSocket_webSocket, _ConnectionWebSocket_rMutex, _ConnectionWebSocket_wMutex, _ConnectionWebSocket_buffer, _ConnectionWebSocket_nextResolve, _ConnectionWebSocket_initWs, _ConnectionWebSocket_wasConnected, _ConnectionWebSocket_isConnecting, _ConnectionWebSocket_connectionError, _ConnectionWebSocket_assertConnected, _ConnectionWebSocket_rejectRead;
13
13
  import * as dntShim from "../_dnt.shims.js";
14
14
  import { debug, Mutex } from "../0_deps.js";
15
15
  import { UNREACHABLE } from "../1_utilities.js";
16
16
  import { ConnectionUnframed } from "./0_connection.js";
17
17
  const d = debug("ConnectionWebSocket");
18
+ const errConnectionNotOpen = new Error("Connection not open");
18
19
  export class ConnectionWebSocket extends ConnectionUnframed {
19
20
  constructor(url) {
20
21
  super();
@@ -68,11 +69,10 @@ export class ConnectionWebSocket extends ConnectionUnframed {
68
69
  }
69
70
  }
70
71
  async read(p) {
71
- if (__classPrivateFieldGet(this, _ConnectionWebSocket_webSocket, "f").readyState != dntShim.WebSocket.OPEN) {
72
- throw new Error("Connection not open");
73
- }
72
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_assertConnected).call(this);
74
73
  const release = await __classPrivateFieldGet(this, _ConnectionWebSocket_rMutex, "f").acquire();
75
74
  try {
75
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_assertConnected).call(this);
76
76
  if (__classPrivateFieldGet(this, _ConnectionWebSocket_buffer, "f").length < p.length) {
77
77
  await new Promise((resolve, reject) => __classPrivateFieldSet(this, _ConnectionWebSocket_nextResolve, [p.length, { resolve, reject }], "f"));
78
78
  }
@@ -83,11 +83,10 @@ export class ConnectionWebSocket extends ConnectionUnframed {
83
83
  }
84
84
  }
85
85
  async write(p) {
86
- if (__classPrivateFieldGet(this, _ConnectionWebSocket_webSocket, "f").readyState == dntShim.WebSocket.CLOSED) {
87
- throw new Error("Connection not open");
88
- }
86
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_assertConnected).call(this);
89
87
  const release = await __classPrivateFieldGet(this, _ConnectionWebSocket_wMutex, "f").acquire();
90
88
  try {
89
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_assertConnected).call(this);
91
90
  __classPrivateFieldGet(this, _ConnectionWebSocket_webSocket, "f").send(p);
92
91
  }
93
92
  finally {
@@ -95,19 +94,16 @@ export class ConnectionWebSocket extends ConnectionUnframed {
95
94
  }
96
95
  }
97
96
  close() {
98
- if (__classPrivateFieldGet(this, _ConnectionWebSocket_webSocket, "f").readyState == dntShim.WebSocket.CLOSED) {
99
- throw new Error("Connection not open");
100
- }
97
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_assertConnected).call(this);
101
98
  __classPrivateFieldGet(this, _ConnectionWebSocket_webSocket, "f").close(1000, "method");
102
- if (__classPrivateFieldGet(this, _ConnectionWebSocket_nextResolve, "f") != null) {
103
- __classPrivateFieldGet(this, _ConnectionWebSocket_nextResolve, "f")[1].reject(new Error("Connection not open"));
104
- }
99
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_rejectRead).call(this);
105
100
  }
106
101
  }
107
102
  _ConnectionWebSocket_webSocket = new WeakMap(), _ConnectionWebSocket_rMutex = new WeakMap(), _ConnectionWebSocket_wMutex = new WeakMap(), _ConnectionWebSocket_buffer = new WeakMap(), _ConnectionWebSocket_nextResolve = new WeakMap(), _ConnectionWebSocket_wasConnected = new WeakMap(), _ConnectionWebSocket_isConnecting = new WeakMap(), _ConnectionWebSocket_connectionError = new WeakMap(), _ConnectionWebSocket_instances = new WeakSet(), _ConnectionWebSocket_initWs = function _ConnectionWebSocket_initWs() {
108
103
  const webSocket = new dntShim.WebSocket(this.url, "binary");
109
104
  const mutex = new Mutex();
110
105
  webSocket.addEventListener("close", () => {
106
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_rejectRead).call(this);
111
107
  this.stateChangeHandler?.(false);
112
108
  });
113
109
  webSocket.addEventListener("open", () => {
@@ -138,4 +134,13 @@ _ConnectionWebSocket_webSocket = new WeakMap(), _ConnectionWebSocket_rMutex = ne
138
134
  }
139
135
  });
140
136
  return webSocket;
137
+ }, _ConnectionWebSocket_assertConnected = function _ConnectionWebSocket_assertConnected() {
138
+ if (!this.connected) {
139
+ throw errConnectionNotOpen;
140
+ }
141
+ }, _ConnectionWebSocket_rejectRead = function _ConnectionWebSocket_rejectRead() {
142
+ if (__classPrivateFieldGet(this, _ConnectionWebSocket_nextResolve, "f") != null) {
143
+ __classPrivateFieldGet(this, _ConnectionWebSocket_nextResolve, "f")[1].reject(errConnectionNotOpen);
144
+ __classPrivateFieldSet(this, _ConnectionWebSocket_nextResolve, null, "f");
145
+ }
141
146
  };
package/esm/mod.d.ts CHANGED
@@ -1,9 +1,5 @@
1
- import { getRandomId } from "./1_utilities.js";
2
- import { checkPassword } from "./client/0_password.js";
3
- export declare const utils: {
4
- checkPassword: typeof checkPassword;
5
- getRandomId: typeof getRandomId;
6
- };
1
+ export { getRandomId } from "./1_utilities.js";
2
+ export { checkPassword } from "./client/0_password.js";
7
3
  export * from "./2_connection.js";
8
4
  export * from "./3_storage.js";
9
5
  export * from "./3_transport.js";
package/esm/mod.js CHANGED
@@ -1,6 +1,5 @@
1
- import { getRandomId } from "./1_utilities.js";
2
- import { checkPassword } from "./client/0_password.js";
3
- export const utils = { checkPassword, getRandomId };
1
+ export { getRandomId } from "./1_utilities.js";
2
+ export { checkPassword } from "./client/0_password.js";
4
3
  export * from "./2_connection.js";
5
4
  export * from "./3_storage.js";
6
5
  export * from "./3_transport.js";
@@ -88,7 +88,7 @@ export function fromString(string) {
88
88
  }
89
89
  }
90
90
  export function fixKey(key) {
91
- return key.map((v) => typeof v === "bigint" ? String(v) : v);
91
+ return key.map((v) => typeof v === "bigint" ? String(ValueType.BigInt) + String(v) : typeof v === "string" ? String(ValueType.String) + v : v);
92
92
  }
93
93
  // Source: https://gist.github.com/inexorabletash/5462871
94
94
  // deno-lint-ignore no-explicit-any
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,7 @@
1
1
  import { Connection } from "../2_connection.js";
2
2
  import { Transport } from "./0_transport.js";
3
3
  export type DC = "1" | "2" | "3" | "4" | "5" | "1-test" | "2-test" | "3-test";
4
+ export declare function getDcIps(dc: DC, version: "ipv4" | "ipv6"): [string, ...string[]];
4
5
  export interface TransportProviderParams {
5
6
  dc: DC;
6
7
  cdn: boolean;
@@ -10,6 +11,4 @@ export type TransportProvider = (params: TransportProviderParams) => {
10
11
  transport: Transport;
11
12
  dcId: number;
12
13
  };
13
- export declare const webSocketTransportProvider: (params?: {
14
- wss?: boolean;
15
- }) => TransportProvider;
14
+ export declare function getDcId(dc: DC, cdn: boolean): number;
@@ -1,26 +1,54 @@
1
- import { ConnectionWebSocket } from "../2_connection.js";
2
- import { TransportIntermediate } from "./1_transport_intermediate.js";
3
- const dcToNameMap = {
4
- "1": "pluto",
5
- "1-test": "pluto",
6
- "2": "venus",
7
- "2-test": "venus",
8
- "3": "aurora",
9
- "3-test": "aurora",
10
- "4": "vesta",
11
- "5": "flora",
12
- };
13
- function getDcId(dc, cdn) {
1
+ import { UNREACHABLE } from "../1_utilities.js";
2
+ export function getDcIps(dc, version) {
3
+ switch (version) {
4
+ case "ipv4":
5
+ switch (dc) {
6
+ case "1":
7
+ return ["149.154.175.50"];
8
+ case "2":
9
+ return ["149.154.167.51", "95.161.76.100"];
10
+ case "3":
11
+ return ["149.154.175.100"];
12
+ case "4":
13
+ return ["149.154.167.91"];
14
+ case "5":
15
+ return ["149.154.171.5"];
16
+ case "1-test":
17
+ return ["149.154.175.10"];
18
+ case "2-test":
19
+ return ["149.154.167.40"];
20
+ case "3-test":
21
+ return ["149.154.175.117"];
22
+ default:
23
+ UNREACHABLE();
24
+ }
25
+ break;
26
+ case "ipv6":
27
+ switch (dc) {
28
+ case "1":
29
+ return ["2001:b28:f23d:f001::a"];
30
+ case "2":
31
+ return ["2001:67c:4e8:f002::a"];
32
+ case "3":
33
+ return ["2001:b28:f23d:f003::a"];
34
+ case "4":
35
+ return ["2001:67c:4e8:f004::a"];
36
+ case "5":
37
+ return ["2001:b28:f23f:f005::a"];
38
+ case "1-test":
39
+ return ["2001:b28:f23d:f001::e"];
40
+ case "2-test":
41
+ return ["2001:67c:4e8:f002::e"];
42
+ case "3-test":
43
+ return ["2001:b28:f23d:f003::e"];
44
+ default:
45
+ UNREACHABLE();
46
+ }
47
+ break;
48
+ default:
49
+ UNREACHABLE();
50
+ }
51
+ }
52
+ export function getDcId(dc, cdn) {
14
53
  return Number(dc[0]) + (dc.endsWith("-test") ? 10000 : 0) * (cdn ? -1 : 1);
15
54
  }
16
- export const webSocketTransportProvider = (params) => {
17
- return ({ dc, cdn }) => {
18
- params ??= {};
19
- params.wss ??= typeof location !== "undefined" && location.protocol == "http:" && location.hostname != "localhost" ? false : true;
20
- const url = `${params.wss ? "wss" : "ws"}://${dcToNameMap[dc]}${cdn ? "-1" : ""}.web.telegram.org/${dc.endsWith("-test") ? "apiws_test" : "apiws"}`;
21
- const connection = new ConnectionWebSocket(url);
22
- const transport = new TransportIntermediate(connection, true);
23
- const dcId = getDcId(dc, cdn);
24
- return { connection, transport, dcId };
25
- };
26
- };
@@ -0,0 +1,4 @@
1
+ import { TransportProvider } from "./2_transport_provider.js";
2
+ export declare const transportProviderWebSocket: (params?: {
3
+ wss?: boolean;
4
+ }) => TransportProvider;
@@ -0,0 +1,24 @@
1
+ import { ConnectionWebSocket } from "../2_connection.js";
2
+ import { TransportIntermediate } from "./1_transport_intermediate.js";
3
+ import { getDcId } from "./2_transport_provider.js";
4
+ const dcToNameMap = {
5
+ "1": "pluto",
6
+ "1-test": "pluto",
7
+ "2": "venus",
8
+ "2-test": "venus",
9
+ "3": "aurora",
10
+ "3-test": "aurora",
11
+ "4": "vesta",
12
+ "5": "flora",
13
+ };
14
+ export const transportProviderWebSocket = (params) => {
15
+ return ({ dc, cdn }) => {
16
+ params ??= {};
17
+ params.wss ??= typeof location !== "undefined" && location.protocol == "http:" && location.hostname != "localhost" ? false : true;
18
+ const url = `${params.wss ? "wss" : "ws"}://${dcToNameMap[dc]}${cdn ? "-1" : ""}.web.telegram.org/${dc.endsWith("-test") ? "apiws_test" : "apiws"}`;
19
+ const connection = new ConnectionWebSocket(url);
20
+ const transport = new TransportIntermediate(connection, true);
21
+ const dcId = getDcId(dc, cdn);
22
+ return { connection, transport, dcId };
23
+ };
24
+ };
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "module": "./esm/mod.js",
3
3
  "main": "./script/mod.js",
4
4
  "name": "@mtkruto/node",
5
- "version": "0.1.109",
5
+ "version": "0.1.111",
6
6
  "description": "MTKruto for Node.js",
7
7
  "author": "Roj <rojvv@icloud.com>",
8
8
  "license": "LGPL-3.0-or-later",
@@ -2,3 +2,4 @@ export * from "./transport/0_transport.js";
2
2
  export * from "./transport/1_transport_abridged.js";
3
3
  export * from "./transport/1_transport_intermediate.js";
4
4
  export * from "./transport/2_transport_provider.js";
5
+ export * from "./transport/3_transport_provider_web_socket.js";
@@ -18,3 +18,4 @@ __exportStar(require("./transport/0_transport.js"), exports);
18
18
  __exportStar(require("./transport/1_transport_abridged.js"), exports);
19
19
  __exportStar(require("./transport/1_transport_intermediate.js"), exports);
20
20
  __exportStar(require("./transport/2_transport_provider.js"), exports);
21
+ __exportStar(require("./transport/3_transport_provider_web_socket.js"), exports);
@@ -5,7 +5,7 @@ export declare const PUBLIC_KEYS: PublicKeys;
5
5
  export declare const VECTOR_CONSTRUCTOR = 481674261;
6
6
  export declare const INITIAL_DC: DC;
7
7
  export declare const LAYER = 166;
8
- export declare const APP_VERSION = "MTKruto 0.1.109";
8
+ export declare const APP_VERSION = "MTKruto 0.1.111";
9
9
  export declare const DEVICE_MODEL: string;
10
10
  export declare const LANG_CODE: string;
11
11
  export declare const LANG_PACK = "";
@@ -80,7 +80,7 @@ exports.PUBLIC_KEYS = Object.freeze([
80
80
  exports.VECTOR_CONSTRUCTOR = 0x1CB5C415;
81
81
  exports.INITIAL_DC = "2";
82
82
  exports.LAYER = 166;
83
- exports.APP_VERSION = "MTKruto 0.1.109";
83
+ exports.APP_VERSION = "MTKruto 0.1.111";
84
84
  // @ts-ignore: lib
85
85
  exports.DEVICE_MODEL = typeof dntShim.Deno === "undefined" ? typeof navigator === "undefined" ? typeof process === "undefined" ? "Unknown" : process.platform + "-" + process.arch : navigator.userAgent.split(" ")[0] : dntShim.Deno.build.os + "-" + dntShim.Deno.build.arch;
86
86
  exports.LANG_CODE = typeof navigator === "undefined" ? "en" : navigator.language.split("-")[0];
@@ -50,7 +50,7 @@ class ClientAbstract {
50
50
  value: void 0
51
51
  });
52
52
  this.initialDc = params?.initialDc ?? _4_constants_js_1.INITIAL_DC;
53
- this.transportProvider = params?.transportProvider ?? (0, _3_transport_js_1.webSocketTransportProvider)();
53
+ this.transportProvider = params?.transportProvider ?? (0, _3_transport_js_1.transportProviderWebSocket)();
54
54
  this.cdn = params?.cdn ?? false;
55
55
  }
56
56
  get dcId() {
@@ -241,7 +241,9 @@ class Client extends _1_client_abstract_js_1.ClientAbstract {
241
241
  }
242
242
  }
243
243
  async [(_Client_auth = new WeakMap(), _Client_sessionId = new WeakMap(), _Client_state = new WeakMap(), _Client_promises = new WeakMap(), _Client_toAcknowledge = new WeakMap(), _Client_updateState = new WeakMap(), _Client_errorHandler = new WeakMap(), _Client_publicKeys = new WeakMap(), _Client_autoStart = new WeakMap(), _Client_lastPropagatedConnectionState = new WeakMap(), _Client_storageInited = new WeakMap(), _Client_authKeyWasCreated = new WeakMap(), _Client_connectMutex = new WeakMap(), _Client_connectionInited = new WeakMap(), _Client_lastPropagatedAuthorizationState = new WeakMap(), _Client_selfId = new WeakMap(), _Client_lastOutgoing = new WeakMap(), _Client_pingLoopStarted = new WeakMap(), _Client_autoStarted = new WeakMap(), _Client_lastMsgId = new WeakMap(), _Client_handleUpdateQueue = new WeakMap(), _Client_processUpdatesQueue = new WeakMap(), _Client_usernameResolver = new WeakMap(), _Client_handle = new WeakMap(), _Client_instances = new WeakSet(), _Client_propagateConnectionState = function _Client_propagateConnectionState(connectionState) {
244
- return __classPrivateFieldGet(this, _Client_handle, "f").call(this, { connectionState }, _0_utilities_js_1.resolve);
244
+ __classPrivateFieldGet(this, _Client_handleUpdateQueue, "f").add(async () => {
245
+ await __classPrivateFieldGet(this, _Client_handle, "f").call(this, { connectionState }, _0_utilities_js_1.resolve);
246
+ });
245
247
  }, _Client_setAuth = async function _Client_setAuth(key) {
246
248
  const hash = await (0, _1_utilities_js_1.sha1)(key);
247
249
  const id = (0, _1_utilities_js_1.bigIntFromBuffer)(hash.slice(-8), true, false);
@@ -33,7 +33,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
33
33
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
34
34
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
35
35
  };
36
- var _ConnectionWebSocket_instances, _ConnectionWebSocket_webSocket, _ConnectionWebSocket_rMutex, _ConnectionWebSocket_wMutex, _ConnectionWebSocket_buffer, _ConnectionWebSocket_nextResolve, _ConnectionWebSocket_initWs, _ConnectionWebSocket_wasConnected, _ConnectionWebSocket_isConnecting, _ConnectionWebSocket_connectionError;
36
+ var _ConnectionWebSocket_instances, _ConnectionWebSocket_webSocket, _ConnectionWebSocket_rMutex, _ConnectionWebSocket_wMutex, _ConnectionWebSocket_buffer, _ConnectionWebSocket_nextResolve, _ConnectionWebSocket_initWs, _ConnectionWebSocket_wasConnected, _ConnectionWebSocket_isConnecting, _ConnectionWebSocket_connectionError, _ConnectionWebSocket_assertConnected, _ConnectionWebSocket_rejectRead;
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
38
  exports.ConnectionWebSocket = void 0;
39
39
  const dntShim = __importStar(require("../_dnt.shims.js"));
@@ -41,6 +41,7 @@ const _0_deps_js_1 = require("../0_deps.js");
41
41
  const _1_utilities_js_1 = require("../1_utilities.js");
42
42
  const _0_connection_js_1 = require("./0_connection.js");
43
43
  const d = (0, _0_deps_js_1.debug)("ConnectionWebSocket");
44
+ const errConnectionNotOpen = new Error("Connection not open");
44
45
  class ConnectionWebSocket extends _0_connection_js_1.ConnectionUnframed {
45
46
  constructor(url) {
46
47
  super();
@@ -94,11 +95,10 @@ class ConnectionWebSocket extends _0_connection_js_1.ConnectionUnframed {
94
95
  }
95
96
  }
96
97
  async read(p) {
97
- if (__classPrivateFieldGet(this, _ConnectionWebSocket_webSocket, "f").readyState != dntShim.WebSocket.OPEN) {
98
- throw new Error("Connection not open");
99
- }
98
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_assertConnected).call(this);
100
99
  const release = await __classPrivateFieldGet(this, _ConnectionWebSocket_rMutex, "f").acquire();
101
100
  try {
101
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_assertConnected).call(this);
102
102
  if (__classPrivateFieldGet(this, _ConnectionWebSocket_buffer, "f").length < p.length) {
103
103
  await new Promise((resolve, reject) => __classPrivateFieldSet(this, _ConnectionWebSocket_nextResolve, [p.length, { resolve, reject }], "f"));
104
104
  }
@@ -109,11 +109,10 @@ class ConnectionWebSocket extends _0_connection_js_1.ConnectionUnframed {
109
109
  }
110
110
  }
111
111
  async write(p) {
112
- if (__classPrivateFieldGet(this, _ConnectionWebSocket_webSocket, "f").readyState == dntShim.WebSocket.CLOSED) {
113
- throw new Error("Connection not open");
114
- }
112
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_assertConnected).call(this);
115
113
  const release = await __classPrivateFieldGet(this, _ConnectionWebSocket_wMutex, "f").acquire();
116
114
  try {
115
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_assertConnected).call(this);
117
116
  __classPrivateFieldGet(this, _ConnectionWebSocket_webSocket, "f").send(p);
118
117
  }
119
118
  finally {
@@ -121,13 +120,9 @@ class ConnectionWebSocket extends _0_connection_js_1.ConnectionUnframed {
121
120
  }
122
121
  }
123
122
  close() {
124
- if (__classPrivateFieldGet(this, _ConnectionWebSocket_webSocket, "f").readyState == dntShim.WebSocket.CLOSED) {
125
- throw new Error("Connection not open");
126
- }
123
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_assertConnected).call(this);
127
124
  __classPrivateFieldGet(this, _ConnectionWebSocket_webSocket, "f").close(1000, "method");
128
- if (__classPrivateFieldGet(this, _ConnectionWebSocket_nextResolve, "f") != null) {
129
- __classPrivateFieldGet(this, _ConnectionWebSocket_nextResolve, "f")[1].reject(new Error("Connection not open"));
130
- }
125
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_rejectRead).call(this);
131
126
  }
132
127
  }
133
128
  exports.ConnectionWebSocket = ConnectionWebSocket;
@@ -135,6 +130,7 @@ _ConnectionWebSocket_webSocket = new WeakMap(), _ConnectionWebSocket_rMutex = ne
135
130
  const webSocket = new dntShim.WebSocket(this.url, "binary");
136
131
  const mutex = new _0_deps_js_1.Mutex();
137
132
  webSocket.addEventListener("close", () => {
133
+ __classPrivateFieldGet(this, _ConnectionWebSocket_instances, "m", _ConnectionWebSocket_rejectRead).call(this);
138
134
  this.stateChangeHandler?.(false);
139
135
  });
140
136
  webSocket.addEventListener("open", () => {
@@ -165,4 +161,13 @@ _ConnectionWebSocket_webSocket = new WeakMap(), _ConnectionWebSocket_rMutex = ne
165
161
  }
166
162
  });
167
163
  return webSocket;
164
+ }, _ConnectionWebSocket_assertConnected = function _ConnectionWebSocket_assertConnected() {
165
+ if (!this.connected) {
166
+ throw errConnectionNotOpen;
167
+ }
168
+ }, _ConnectionWebSocket_rejectRead = function _ConnectionWebSocket_rejectRead() {
169
+ if (__classPrivateFieldGet(this, _ConnectionWebSocket_nextResolve, "f") != null) {
170
+ __classPrivateFieldGet(this, _ConnectionWebSocket_nextResolve, "f")[1].reject(errConnectionNotOpen);
171
+ __classPrivateFieldSet(this, _ConnectionWebSocket_nextResolve, null, "f");
172
+ }
168
173
  };
package/script/mod.d.ts CHANGED
@@ -1,9 +1,5 @@
1
- import { getRandomId } from "./1_utilities.js";
2
- import { checkPassword } from "./client/0_password.js";
3
- export declare const utils: {
4
- checkPassword: typeof checkPassword;
5
- getRandomId: typeof getRandomId;
6
- };
1
+ export { getRandomId } from "./1_utilities.js";
2
+ export { checkPassword } from "./client/0_password.js";
7
3
  export * from "./2_connection.js";
8
4
  export * from "./3_storage.js";
9
5
  export * from "./3_transport.js";
package/script/mod.js CHANGED
@@ -26,10 +26,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
26
26
  return result;
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.errors = exports.SYSTEM_VERSION = exports.SYSTEM_LANG_CODE = exports.LAYER = exports.LANG_PACK = exports.LANG_CODE = exports.INITIAL_DC = exports.DEVICE_MODEL = exports.APP_VERSION = exports.utils = void 0;
30
- const _1_utilities_js_1 = require("./1_utilities.js");
31
- const _0_password_js_1 = require("./client/0_password.js");
32
- exports.utils = { checkPassword: _0_password_js_1.checkPassword, getRandomId: _1_utilities_js_1.getRandomId };
29
+ exports.errors = exports.SYSTEM_VERSION = exports.SYSTEM_LANG_CODE = exports.LAYER = exports.LANG_PACK = exports.LANG_CODE = exports.INITIAL_DC = exports.DEVICE_MODEL = exports.APP_VERSION = exports.checkPassword = exports.getRandomId = void 0;
30
+ var _1_utilities_js_1 = require("./1_utilities.js");
31
+ Object.defineProperty(exports, "getRandomId", { enumerable: true, get: function () { return _1_utilities_js_1.getRandomId; } });
32
+ var _0_password_js_1 = require("./client/0_password.js");
33
+ Object.defineProperty(exports, "checkPassword", { enumerable: true, get: function () { return _0_password_js_1.checkPassword; } });
33
34
  __exportStar(require("./2_connection.js"), exports);
34
35
  __exportStar(require("./3_storage.js"), exports);
35
36
  __exportStar(require("./3_transport.js"), exports);
@@ -93,7 +93,7 @@ function fromString(string) {
93
93
  }
94
94
  exports.fromString = fromString;
95
95
  function fixKey(key) {
96
- return key.map((v) => typeof v === "bigint" ? String(v) : v);
96
+ return key.map((v) => typeof v === "bigint" ? String(ValueType.BigInt) + String(v) : typeof v === "string" ? String(ValueType.String) + v : v);
97
97
  }
98
98
  exports.fixKey = fixKey;
99
99
  // Source: https://gist.github.com/inexorabletash/5462871
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,7 @@
1
1
  import { Connection } from "../2_connection.js";
2
2
  import { Transport } from "./0_transport.js";
3
3
  export type DC = "1" | "2" | "3" | "4" | "5" | "1-test" | "2-test" | "3-test";
4
+ export declare function getDcIps(dc: DC, version: "ipv4" | "ipv6"): [string, ...string[]];
4
5
  export interface TransportProviderParams {
5
6
  dc: DC;
6
7
  cdn: boolean;
@@ -10,6 +11,4 @@ export type TransportProvider = (params: TransportProviderParams) => {
10
11
  transport: Transport;
11
12
  dcId: number;
12
13
  };
13
- export declare const webSocketTransportProvider: (params?: {
14
- wss?: boolean;
15
- }) => TransportProvider;
14
+ export declare function getDcId(dc: DC, cdn: boolean): number;
@@ -1,30 +1,59 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.webSocketTransportProvider = void 0;
4
- const _2_connection_js_1 = require("../2_connection.js");
5
- const _1_transport_intermediate_js_1 = require("./1_transport_intermediate.js");
6
- const dcToNameMap = {
7
- "1": "pluto",
8
- "1-test": "pluto",
9
- "2": "venus",
10
- "2-test": "venus",
11
- "3": "aurora",
12
- "3-test": "aurora",
13
- "4": "vesta",
14
- "5": "flora",
15
- };
3
+ exports.getDcId = exports.getDcIps = void 0;
4
+ const _1_utilities_js_1 = require("../1_utilities.js");
5
+ function getDcIps(dc, version) {
6
+ switch (version) {
7
+ case "ipv4":
8
+ switch (dc) {
9
+ case "1":
10
+ return ["149.154.175.50"];
11
+ case "2":
12
+ return ["149.154.167.51", "95.161.76.100"];
13
+ case "3":
14
+ return ["149.154.175.100"];
15
+ case "4":
16
+ return ["149.154.167.91"];
17
+ case "5":
18
+ return ["149.154.171.5"];
19
+ case "1-test":
20
+ return ["149.154.175.10"];
21
+ case "2-test":
22
+ return ["149.154.167.40"];
23
+ case "3-test":
24
+ return ["149.154.175.117"];
25
+ default:
26
+ (0, _1_utilities_js_1.UNREACHABLE)();
27
+ }
28
+ break;
29
+ case "ipv6":
30
+ switch (dc) {
31
+ case "1":
32
+ return ["2001:b28:f23d:f001::a"];
33
+ case "2":
34
+ return ["2001:67c:4e8:f002::a"];
35
+ case "3":
36
+ return ["2001:b28:f23d:f003::a"];
37
+ case "4":
38
+ return ["2001:67c:4e8:f004::a"];
39
+ case "5":
40
+ return ["2001:b28:f23f:f005::a"];
41
+ case "1-test":
42
+ return ["2001:b28:f23d:f001::e"];
43
+ case "2-test":
44
+ return ["2001:67c:4e8:f002::e"];
45
+ case "3-test":
46
+ return ["2001:b28:f23d:f003::e"];
47
+ default:
48
+ (0, _1_utilities_js_1.UNREACHABLE)();
49
+ }
50
+ break;
51
+ default:
52
+ (0, _1_utilities_js_1.UNREACHABLE)();
53
+ }
54
+ }
55
+ exports.getDcIps = getDcIps;
16
56
  function getDcId(dc, cdn) {
17
57
  return Number(dc[0]) + (dc.endsWith("-test") ? 10000 : 0) * (cdn ? -1 : 1);
18
58
  }
19
- const webSocketTransportProvider = (params) => {
20
- return ({ dc, cdn }) => {
21
- params ??= {};
22
- params.wss ??= typeof location !== "undefined" && location.protocol == "http:" && location.hostname != "localhost" ? false : true;
23
- const url = `${params.wss ? "wss" : "ws"}://${dcToNameMap[dc]}${cdn ? "-1" : ""}.web.telegram.org/${dc.endsWith("-test") ? "apiws_test" : "apiws"}`;
24
- const connection = new _2_connection_js_1.ConnectionWebSocket(url);
25
- const transport = new _1_transport_intermediate_js_1.TransportIntermediate(connection, true);
26
- const dcId = getDcId(dc, cdn);
27
- return { connection, transport, dcId };
28
- };
29
- };
30
- exports.webSocketTransportProvider = webSocketTransportProvider;
59
+ exports.getDcId = getDcId;
@@ -0,0 +1,4 @@
1
+ import { TransportProvider } from "./2_transport_provider.js";
2
+ export declare const transportProviderWebSocket: (params?: {
3
+ wss?: boolean;
4
+ }) => TransportProvider;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transportProviderWebSocket = void 0;
4
+ const _2_connection_js_1 = require("../2_connection.js");
5
+ const _1_transport_intermediate_js_1 = require("./1_transport_intermediate.js");
6
+ const _2_transport_provider_js_1 = require("./2_transport_provider.js");
7
+ const dcToNameMap = {
8
+ "1": "pluto",
9
+ "1-test": "pluto",
10
+ "2": "venus",
11
+ "2-test": "venus",
12
+ "3": "aurora",
13
+ "3-test": "aurora",
14
+ "4": "vesta",
15
+ "5": "flora",
16
+ };
17
+ const transportProviderWebSocket = (params) => {
18
+ return ({ dc, cdn }) => {
19
+ params ??= {};
20
+ params.wss ??= typeof location !== "undefined" && location.protocol == "http:" && location.hostname != "localhost" ? false : true;
21
+ const url = `${params.wss ? "wss" : "ws"}://${dcToNameMap[dc]}${cdn ? "-1" : ""}.web.telegram.org/${dc.endsWith("-test") ? "apiws_test" : "apiws"}`;
22
+ const connection = new _2_connection_js_1.ConnectionWebSocket(url);
23
+ const transport = new _1_transport_intermediate_js_1.TransportIntermediate(connection, true);
24
+ const dcId = (0, _2_transport_provider_js_1.getDcId)(dc, cdn);
25
+ return { connection, transport, dcId };
26
+ };
27
+ };
28
+ exports.transportProviderWebSocket = transportProviderWebSocket;