teleproto 203.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.
- package/CryptoFile.d.ts +2 -0
- package/CryptoFile.js +23 -0
- package/Helpers.d.ts +151 -0
- package/Helpers.js +477 -0
- package/LICENSE +23 -0
- package/Password.d.ts +15 -0
- package/Password.js +271 -0
- package/README.md +111 -0
- package/Utils.d.ts +228 -0
- package/Utils.js +1248 -0
- package/Version.d.ts +1 -0
- package/Version.js +4 -0
- package/client/2fa.d.ts +48 -0
- package/client/2fa.js +109 -0
- package/client/TelegramClient.d.ts +1042 -0
- package/client/TelegramClient.js +1167 -0
- package/client/account.d.ts +0 -0
- package/client/account.js +1 -0
- package/client/auth.d.ts +93 -0
- package/client/auth.js +375 -0
- package/client/bots.d.ts +6 -0
- package/client/bots.js +24 -0
- package/client/buttons.d.ts +4 -0
- package/client/buttons.js +87 -0
- package/client/chats.d.ts +46 -0
- package/client/chats.js +350 -0
- package/client/dialogs.d.ts +52 -0
- package/client/dialogs.js +174 -0
- package/client/downloads.d.ts +157 -0
- package/client/downloads.js +598 -0
- package/client/fs.d.ts +1 -0
- package/client/fs.js +13 -0
- package/client/index.d.ts +15 -0
- package/client/index.js +50 -0
- package/client/messageParse.d.ts +17 -0
- package/client/messageParse.js +191 -0
- package/client/messages.d.ts +259 -0
- package/client/messages.js +804 -0
- package/client/os.d.ts +2 -0
- package/client/os.js +23 -0
- package/client/path.d.ts +2 -0
- package/client/path.js +7 -0
- package/client/telegramBaseClient.d.ts +238 -0
- package/client/telegramBaseClient.js +368 -0
- package/client/updates.d.ts +31 -0
- package/client/updates.js +254 -0
- package/client/uploads.d.ts +137 -0
- package/client/uploads.js +514 -0
- package/client/users.d.ts +29 -0
- package/client/users.js +491 -0
- package/crypto/AuthKey.d.ts +20 -0
- package/crypto/AuthKey.js +76 -0
- package/crypto/CTR.d.ts +6 -0
- package/crypto/CTR.js +35 -0
- package/crypto/Factorizator.d.ts +19 -0
- package/crypto/Factorizator.js +74 -0
- package/crypto/IGE.d.ts +18 -0
- package/crypto/IGE.js +34 -0
- package/crypto/RSA.d.ts +15 -0
- package/crypto/RSA.js +70 -0
- package/crypto/converters.d.ts +19 -0
- package/crypto/converters.js +52 -0
- package/crypto/crypto.d.ts +27 -0
- package/crypto/crypto.js +117 -0
- package/crypto/words.d.ts +6 -0
- package/crypto/words.js +48 -0
- package/define.d.ts +77 -0
- package/entityCache.d.ts +7 -0
- package/entityCache.js +79 -0
- package/errors/Common.d.ts +72 -0
- package/errors/Common.js +122 -0
- package/errors/RPCBaseErrors.d.ts +84 -0
- package/errors/RPCBaseErrors.js +134 -0
- package/errors/RPCErrorList.d.ts +37 -0
- package/errors/RPCErrorList.js +117 -0
- package/errors/index.d.ts +11 -0
- package/errors/index.js +29 -0
- package/events/Album.d.ts +36 -0
- package/events/Album.js +104 -0
- package/events/CallbackQuery.d.ts +74 -0
- package/events/CallbackQuery.js +193 -0
- package/events/DeletedMessage.d.ts +45 -0
- package/events/DeletedMessage.js +63 -0
- package/events/EditedMessage.d.ts +30 -0
- package/events/EditedMessage.js +41 -0
- package/events/NewMessage.d.ts +89 -0
- package/events/NewMessage.js +182 -0
- package/events/Raw.d.ts +29 -0
- package/events/Raw.js +43 -0
- package/events/common.d.ts +66 -0
- package/events/common.js +141 -0
- package/events/index.d.ts +2 -0
- package/events/index.js +8 -0
- package/extensions/AsyncQueue.d.ts +10 -0
- package/extensions/AsyncQueue.js +32 -0
- package/extensions/BinaryReader.d.ts +100 -0
- package/extensions/BinaryReader.js +242 -0
- package/extensions/BinaryWriter.d.ts +7 -0
- package/extensions/BinaryWriter.js +15 -0
- package/extensions/Deferred.d.ts +8 -0
- package/extensions/Deferred.js +16 -0
- package/extensions/Logger.d.ts +56 -0
- package/extensions/Logger.js +107 -0
- package/extensions/MessagePacker.d.ts +22 -0
- package/extensions/MessagePacker.js +154 -0
- package/extensions/PendingState.d.ts +12 -0
- package/extensions/PendingState.js +29 -0
- package/extensions/PromisedNetSockets.d.ts +25 -0
- package/extensions/PromisedNetSockets.js +178 -0
- package/extensions/PromisedWebSockets.d.ts +19 -0
- package/extensions/PromisedWebSockets.js +124 -0
- package/extensions/html.d.ts +5 -0
- package/extensions/html.js +213 -0
- package/extensions/index.d.ts +7 -0
- package/extensions/index.js +17 -0
- package/extensions/markdown.d.ts +5 -0
- package/extensions/markdown.js +76 -0
- package/extensions/markdownv2.d.ts +5 -0
- package/extensions/markdownv2.js +51 -0
- package/extensions/net.d.ts +1 -0
- package/extensions/net.js +13 -0
- package/extensions/socks.d.ts +1 -0
- package/extensions/socks.js +13 -0
- package/index.d.ts +14 -0
- package/index.js +48 -0
- package/inspect.d.ts +1 -0
- package/inspect.js +5 -0
- package/network/Authenticator.d.ts +12 -0
- package/network/Authenticator.js +193 -0
- package/network/MTProtoPlainSender.d.ts +19 -0
- package/network/MTProtoPlainSender.js +74 -0
- package/network/MTProtoSender.d.ts +291 -0
- package/network/MTProtoSender.js +854 -0
- package/network/MTProtoState.d.ts +103 -0
- package/network/MTProtoState.js +267 -0
- package/network/RequestState.d.ts +19 -0
- package/network/RequestState.js +35 -0
- package/network/connection/Connection.d.ts +71 -0
- package/network/connection/Connection.js +157 -0
- package/network/connection/TCPAbridged.d.ts +20 -0
- package/network/connection/TCPAbridged.js +58 -0
- package/network/connection/TCPFull.d.ts +17 -0
- package/network/connection/TCPFull.js +61 -0
- package/network/connection/TCPMTProxy.d.ts +50 -0
- package/network/connection/TCPMTProxy.js +121 -0
- package/network/connection/TCPObfuscated.d.ts +19 -0
- package/network/connection/TCPObfuscated.js +78 -0
- package/network/connection/index.d.ts +4 -0
- package/network/connection/index.js +11 -0
- package/network/index.d.ts +11 -0
- package/network/index.js +23 -0
- package/package.json +69 -0
- package/requestIter.d.ts +24 -0
- package/requestIter.js +107 -0
- package/sessions/Abstract.d.ts +103 -0
- package/sessions/Abstract.js +6 -0
- package/sessions/CacheApiSession.d.ts +18 -0
- package/sessions/CacheApiSession.js +99 -0
- package/sessions/Memory.d.ts +38 -0
- package/sessions/Memory.js +272 -0
- package/sessions/StoreSession.d.ts +14 -0
- package/sessions/StoreSession.js +77 -0
- package/sessions/StringSession.d.ts +33 -0
- package/sessions/StringSession.js +116 -0
- package/sessions/index.d.ts +4 -0
- package/sessions/index.js +13 -0
- package/sessions/localStorage.d.ts +1 -0
- package/sessions/localStorage.js +4 -0
- package/tl/AllTLObjects.d.ts +3 -0
- package/tl/AllTLObjects.js +17 -0
- package/tl/MTProtoRequest.d.ts +19 -0
- package/tl/MTProtoRequest.js +38 -0
- package/tl/api.d.ts +31425 -0
- package/tl/api.js +507 -0
- package/tl/apiTl.d.ts +2 -0
- package/tl/apiTl.js +2142 -0
- package/tl/core/GZIPPacked.d.ts +16 -0
- package/tl/core/GZIPPacked.js +51 -0
- package/tl/core/MessageContainer.d.ts +12 -0
- package/tl/core/MessageContainer.js +42 -0
- package/tl/core/RPCResult.d.ts +15 -0
- package/tl/core/RPCResult.js +32 -0
- package/tl/core/TLMessage.d.ts +10 -0
- package/tl/core/TLMessage.js +14 -0
- package/tl/core/index.d.ts +6 -0
- package/tl/core/index.js +16 -0
- package/tl/custom/button.d.ts +25 -0
- package/tl/custom/button.js +78 -0
- package/tl/custom/chatGetter.d.ts +30 -0
- package/tl/custom/chatGetter.js +114 -0
- package/tl/custom/dialog.d.ts +31 -0
- package/tl/custom/dialog.js +40 -0
- package/tl/custom/draft.d.ts +22 -0
- package/tl/custom/draft.js +48 -0
- package/tl/custom/file.d.ts +22 -0
- package/tl/custom/file.js +68 -0
- package/tl/custom/forward.d.ts +16 -0
- package/tl/custom/forward.js +47 -0
- package/tl/custom/index.d.ts +1 -0
- package/tl/custom/index.js +5 -0
- package/tl/custom/inlineResult.d.ts +33 -0
- package/tl/custom/inlineResult.js +87 -0
- package/tl/custom/inlineResults.d.ts +21 -0
- package/tl/custom/inlineResults.js +26 -0
- package/tl/custom/message.d.ts +428 -0
- package/tl/custom/message.js +702 -0
- package/tl/custom/messageButton.d.ts +55 -0
- package/tl/custom/messageButton.js +152 -0
- package/tl/custom/senderGetter.d.ts +29 -0
- package/tl/custom/senderGetter.js +55 -0
- package/tl/generateModule.d.ts +1 -0
- package/tl/generateModule.js +17 -0
- package/tl/generationHelpers.d.ts +12 -0
- package/tl/generationHelpers.js +289 -0
- package/tl/index.d.ts +3 -0
- package/tl/index.js +10 -0
- package/tl/patched/index.d.ts +2 -0
- package/tl/patched/index.js +77 -0
- package/tl/schemaTl.d.ts +2 -0
- package/tl/schemaTl.js +64 -0
- package/tl/types-generator/generate.d.ts +1 -0
- package/tl/types-generator/generate.js +84 -0
- package/tl/types-generator/template.d.ts +6 -0
- package/tl/types-generator/template.js +257 -0
package/client/os.d.ts
ADDED
package/client/os.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
const os = __importStar(require("os"));
|
|
23
|
+
exports.default = os;
|
package/client/path.d.ts
ADDED
package/client/path.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
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
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
exports.default = path_1.default;
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Connection } from "..";
|
|
3
|
+
import { Session } from "../sessions";
|
|
4
|
+
import { Logger, PromisedNetSockets, PromisedWebSockets } from "../extensions";
|
|
5
|
+
import { Api } from "../tl";
|
|
6
|
+
import type { AuthKey } from "../crypto/AuthKey";
|
|
7
|
+
import { EntityCache } from "../entityCache";
|
|
8
|
+
import type { ParseInterface } from "./messageParse";
|
|
9
|
+
import type { EventBuilder } from "../events/common";
|
|
10
|
+
import { MTProtoSender } from "../network";
|
|
11
|
+
import { ProxyInterface } from "../network/connection/TCPMTProxy";
|
|
12
|
+
import { Semaphore } from "async-mutex";
|
|
13
|
+
import { LogLevel } from "../extensions/Logger";
|
|
14
|
+
import Deferred from "../extensions/Deferred";
|
|
15
|
+
/**
|
|
16
|
+
* Interface for creating a new client.
|
|
17
|
+
* All of these have a default value and you should only change those if you know what you are doing.
|
|
18
|
+
*/
|
|
19
|
+
export interface TelegramClientParams {
|
|
20
|
+
/** The connection instance to be used when creating a new connection to the servers. It must be a type.<br/>
|
|
21
|
+
* Defaults to {@link ConnectionTCPFull} on Node and {@link ConnectionTCPObfuscated} on browsers.
|
|
22
|
+
*/
|
|
23
|
+
connection?: typeof Connection;
|
|
24
|
+
/**
|
|
25
|
+
* Whether to connect to the servers through IPv6 or not. By default this is false.
|
|
26
|
+
*/
|
|
27
|
+
useIPV6?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* The timeout in seconds to be used when connecting. This does nothing for now.
|
|
30
|
+
*/
|
|
31
|
+
timeout?: number;
|
|
32
|
+
/**
|
|
33
|
+
* How many times a request should be retried.<br/>
|
|
34
|
+
* Request are retried when Telegram is having internal issues (due to INTERNAL error or RPC_CALL_FAIL error),<br/>
|
|
35
|
+
* when there is a errors.FloodWaitError less than floodSleepThreshold, or when there's a migrate error.<br/>
|
|
36
|
+
* defaults to 5.
|
|
37
|
+
*/
|
|
38
|
+
requestRetries?: number;
|
|
39
|
+
/**
|
|
40
|
+
* How many times the connection should retry, either on the initial connection or when Telegram disconnects us.<br/>
|
|
41
|
+
* May be set to a negative or undefined value for infinite retries, but this is not recommended, since the program can get stuck in an infinite loop.<br/>
|
|
42
|
+
* defaults to 5
|
|
43
|
+
*/
|
|
44
|
+
connectionRetries?: number;
|
|
45
|
+
/**
|
|
46
|
+
* How many times to reconnect before giving up. This happens after the initial connection is finished<br/>
|
|
47
|
+
* defaults to infinity
|
|
48
|
+
*/
|
|
49
|
+
reconnectRetries?: number;
|
|
50
|
+
/**
|
|
51
|
+
* Experimental proxy to be used for the connection. (only supports MTProxies)
|
|
52
|
+
*/
|
|
53
|
+
proxy?: ProxyInterface;
|
|
54
|
+
/**
|
|
55
|
+
* How many times we should retry borrowing a sender from another DC when it fails. defaults to 5
|
|
56
|
+
*/
|
|
57
|
+
downloadRetries?: number;
|
|
58
|
+
/** The delay in milliseconds to sleep between automatic reconnections. defaults to 1000*/
|
|
59
|
+
retryDelay?: number;
|
|
60
|
+
/**Whether reconnection should be retried connection_retries times automatically if Telegram disconnects us or not. defaults to true */
|
|
61
|
+
autoReconnect?: boolean;
|
|
62
|
+
/** does nothing for now */
|
|
63
|
+
sequentialUpdates?: boolean;
|
|
64
|
+
/** The threshold below which the library should automatically sleep on flood wait and slow mode wait errors (inclusive).<br/>
|
|
65
|
+
* For instance, if a FloodWaitError for 17s occurs and floodSleepThreshold is 20s, the library will sleep automatically.<br/>
|
|
66
|
+
* If the error was for 21s, it would raise FloodWaitError instead. defaults to 60 sec.*/
|
|
67
|
+
floodSleepThreshold?: number;
|
|
68
|
+
/**
|
|
69
|
+
* Device model to be sent when creating the initial connection. Defaults to os.type().toString().
|
|
70
|
+
*/
|
|
71
|
+
deviceModel?: string;
|
|
72
|
+
/**
|
|
73
|
+
* System version to be sent when creating the initial connection. defaults to os.release().toString() -.
|
|
74
|
+
*/
|
|
75
|
+
systemVersion?: string;
|
|
76
|
+
/**
|
|
77
|
+
* App version to be sent when creating the initial connection. Defaults to 1.0.
|
|
78
|
+
*/
|
|
79
|
+
appVersion?: string;
|
|
80
|
+
/**
|
|
81
|
+
* Language code to be sent when creating the initial connection. Defaults to 'en'.
|
|
82
|
+
*/
|
|
83
|
+
langCode?: string;
|
|
84
|
+
/**
|
|
85
|
+
* System lang code to be sent when creating the initial connection. Defaults to 'en'.
|
|
86
|
+
*/
|
|
87
|
+
systemLangCode?: string;
|
|
88
|
+
/**
|
|
89
|
+
* Instance of Logger to use. <br />
|
|
90
|
+
* If a `Logger` is given, it'll be used directly. If nothing is given, the default logger will be used. <br />
|
|
91
|
+
* To create your own Logger make sure you extends GramJS logger {@link Logger} and override `log` method.
|
|
92
|
+
*/
|
|
93
|
+
baseLogger?: Logger;
|
|
94
|
+
/**
|
|
95
|
+
* Whether to try to connect over Wss (or 443 port) or not.
|
|
96
|
+
*/
|
|
97
|
+
useWSS?: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Limits how many downloads happen at the same time.
|
|
100
|
+
*/
|
|
101
|
+
maxConcurrentDownloads?: number;
|
|
102
|
+
/**
|
|
103
|
+
* Whether to check for tampering in messages or not.
|
|
104
|
+
*/
|
|
105
|
+
securityChecks?: boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Only for web DCs. Whether to use test servers or not.
|
|
108
|
+
*/
|
|
109
|
+
testServers?: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* What type of network connection to use (Normal Socket (for node) or Websockets (for browsers usually) )
|
|
112
|
+
*/
|
|
113
|
+
networkSocket?: typeof PromisedNetSockets | typeof PromisedWebSockets;
|
|
114
|
+
}
|
|
115
|
+
export declare abstract class TelegramBaseClient {
|
|
116
|
+
/** The current gramJS version. */
|
|
117
|
+
__version__: string;
|
|
118
|
+
/** @hidden */
|
|
119
|
+
_config?: Api.Config;
|
|
120
|
+
/** @hidden */
|
|
121
|
+
_log: Logger;
|
|
122
|
+
/** @hidden */
|
|
123
|
+
_floodSleepThreshold: number;
|
|
124
|
+
session: Session;
|
|
125
|
+
apiHash: string;
|
|
126
|
+
apiId: number;
|
|
127
|
+
/** @hidden */
|
|
128
|
+
_requestRetries: number;
|
|
129
|
+
/** @hidden */
|
|
130
|
+
_downloadRetries: number;
|
|
131
|
+
/** @hidden */
|
|
132
|
+
_connectionRetries: number;
|
|
133
|
+
/** @hidden */
|
|
134
|
+
_reconnectRetries: number;
|
|
135
|
+
/** @hidden */
|
|
136
|
+
_retryDelay: number;
|
|
137
|
+
/** @hidden */
|
|
138
|
+
_timeout: number;
|
|
139
|
+
/** @hidden */
|
|
140
|
+
_autoReconnect: boolean;
|
|
141
|
+
/** @hidden */
|
|
142
|
+
_connection: typeof Connection;
|
|
143
|
+
/** @hidden */
|
|
144
|
+
_initRequest: Api.InitConnection;
|
|
145
|
+
/** @hidden */
|
|
146
|
+
_sender?: MTProtoSender;
|
|
147
|
+
/** @hidden */
|
|
148
|
+
_floodWaitedRequests: any;
|
|
149
|
+
/** @hidden */
|
|
150
|
+
_borrowedSenderPromises: any;
|
|
151
|
+
/** @hidden */
|
|
152
|
+
_bot?: boolean;
|
|
153
|
+
/** @hidden */
|
|
154
|
+
_useIPV6: boolean;
|
|
155
|
+
/** @hidden */
|
|
156
|
+
_selfInputPeer?: Api.InputPeerUser;
|
|
157
|
+
/** @hidden */
|
|
158
|
+
useWSS: boolean;
|
|
159
|
+
/** @hidden */
|
|
160
|
+
_errorHandler?: (error: Error) => Promise<void>;
|
|
161
|
+
/** @hidden */
|
|
162
|
+
_eventBuilders: [EventBuilder, CallableFunction][];
|
|
163
|
+
/** @hidden */
|
|
164
|
+
_entityCache: EntityCache;
|
|
165
|
+
/** @hidden */
|
|
166
|
+
_lastRequest?: number;
|
|
167
|
+
/** @hidden */
|
|
168
|
+
_parseMode?: ParseInterface;
|
|
169
|
+
/** @hidden */
|
|
170
|
+
_ALBUMS: Map<string, [NodeJS.Timeout, Api.TypeUpdate[]]>;
|
|
171
|
+
/** @hidden */
|
|
172
|
+
_exportedSenderPromises: Map<number, Promise<MTProtoSender>>;
|
|
173
|
+
/** @hidden */
|
|
174
|
+
private _exportedSenderReleaseTimeouts;
|
|
175
|
+
/** @hidden */
|
|
176
|
+
protected _loopStarted: boolean;
|
|
177
|
+
/** @hidden */
|
|
178
|
+
_reconnecting: boolean;
|
|
179
|
+
/** @hidden */
|
|
180
|
+
_destroyed: boolean;
|
|
181
|
+
/** @hidden */
|
|
182
|
+
_isSwitchingDc: boolean;
|
|
183
|
+
/** @hidden */
|
|
184
|
+
protected _proxy?: ProxyInterface;
|
|
185
|
+
/** @hidden */
|
|
186
|
+
_semaphore: Semaphore;
|
|
187
|
+
/** @hidden */
|
|
188
|
+
_securityChecks: boolean;
|
|
189
|
+
/** @hidden */
|
|
190
|
+
testServers: boolean;
|
|
191
|
+
/** @hidden */
|
|
192
|
+
networkSocket: typeof PromisedNetSockets | typeof PromisedWebSockets;
|
|
193
|
+
_connectedDeferred: Deferred<void>;
|
|
194
|
+
constructor(session: string | Session, apiId: number, apiHash: string, clientParams: TelegramClientParams);
|
|
195
|
+
get floodSleepThreshold(): number;
|
|
196
|
+
set floodSleepThreshold(value: number);
|
|
197
|
+
set maxConcurrentDownloads(value: number);
|
|
198
|
+
_initSession(): Promise<void>;
|
|
199
|
+
get connected(): boolean | undefined;
|
|
200
|
+
disconnect(): Promise<void>;
|
|
201
|
+
get disconnected(): boolean;
|
|
202
|
+
_disconnect(): Promise<void>;
|
|
203
|
+
/**
|
|
204
|
+
* Disconnects all senders and removes all handlers
|
|
205
|
+
* Disconnect is safer as it will not remove your event handlers
|
|
206
|
+
*/
|
|
207
|
+
destroy(): Promise<void>;
|
|
208
|
+
/** @hidden */
|
|
209
|
+
_authKeyCallback(authKey: AuthKey, dcId: number): Promise<void>;
|
|
210
|
+
/** @hidden */
|
|
211
|
+
_cleanupExportedSender(dcId: number): Promise<void>;
|
|
212
|
+
/** @hidden */
|
|
213
|
+
_connectSender(sender: MTProtoSender, dcId: number): Promise<MTProtoSender>;
|
|
214
|
+
/** @hidden */
|
|
215
|
+
_borrowExportedSender(dcId: number, shouldReconnect?: boolean, existingSender?: MTProtoSender): Promise<MTProtoSender>;
|
|
216
|
+
/** @hidden */
|
|
217
|
+
_createExportedSender(dcId: number): MTProtoSender;
|
|
218
|
+
/** @hidden */
|
|
219
|
+
getSender(dcId: number): Promise<MTProtoSender>;
|
|
220
|
+
getDC(dcId: number, download: boolean): Promise<{
|
|
221
|
+
id: number;
|
|
222
|
+
ipAddress: string;
|
|
223
|
+
port: number;
|
|
224
|
+
}>;
|
|
225
|
+
invoke<R extends Api.AnyRequest>(request: R): Promise<R["__response"]>;
|
|
226
|
+
setLogLevel(level: LogLevel): void;
|
|
227
|
+
get logger(): Logger;
|
|
228
|
+
/**
|
|
229
|
+
* Custom error handler for the client
|
|
230
|
+
* @example
|
|
231
|
+
* ```ts
|
|
232
|
+
* client.onError = async (error)=>{
|
|
233
|
+
* console.log("error is",error)
|
|
234
|
+
* }
|
|
235
|
+
* ```
|
|
236
|
+
*/
|
|
237
|
+
set onError(handler: (error: Error) => Promise<void>);
|
|
238
|
+
}
|
|
@@ -0,0 +1,368 @@
|
|
|
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.TelegramBaseClient = void 0;
|
|
7
|
+
const __1 = require("..");
|
|
8
|
+
const Helpers_1 = require("../Helpers");
|
|
9
|
+
const connection_1 = require("../network/connection");
|
|
10
|
+
const sessions_1 = require("../sessions");
|
|
11
|
+
const extensions_1 = require("../extensions");
|
|
12
|
+
const tl_1 = require("../tl");
|
|
13
|
+
const os_1 = __importDefault(require("./os"));
|
|
14
|
+
const entityCache_1 = require("../entityCache");
|
|
15
|
+
const markdown_1 = require("../extensions/markdown");
|
|
16
|
+
const network_1 = require("../network");
|
|
17
|
+
const AllTLObjects_1 = require("../tl/AllTLObjects");
|
|
18
|
+
const TCPMTProxy_1 = require("../network/connection/TCPMTProxy");
|
|
19
|
+
const async_mutex_1 = require("async-mutex");
|
|
20
|
+
const Logger_1 = require("../extensions/Logger");
|
|
21
|
+
const Deferred_1 = __importDefault(require("../extensions/Deferred"));
|
|
22
|
+
const EXPORTED_SENDER_RECONNECT_TIMEOUT = 1000; // 1 sec
|
|
23
|
+
const EXPORTED_SENDER_RELEASE_TIMEOUT = 30000; // 30 sec
|
|
24
|
+
const DEFAULT_DC_ID = 4;
|
|
25
|
+
const DEFAULT_IPV4_IP = "149.154.167.91";
|
|
26
|
+
const DEFAULT_IPV6_IP = "2001:067c:04e8:f004:0000:0000:0000:000a";
|
|
27
|
+
const clientParamsDefault = {
|
|
28
|
+
connection: connection_1.ConnectionTCPFull,
|
|
29
|
+
networkSocket: extensions_1.PromisedNetSockets,
|
|
30
|
+
useIPV6: false,
|
|
31
|
+
timeout: 10,
|
|
32
|
+
requestRetries: 5,
|
|
33
|
+
connectionRetries: Infinity,
|
|
34
|
+
retryDelay: 1000,
|
|
35
|
+
downloadRetries: 5,
|
|
36
|
+
autoReconnect: true,
|
|
37
|
+
sequentialUpdates: false,
|
|
38
|
+
floodSleepThreshold: 60,
|
|
39
|
+
deviceModel: "",
|
|
40
|
+
systemVersion: "",
|
|
41
|
+
appVersion: "",
|
|
42
|
+
langCode: "en",
|
|
43
|
+
systemLangCode: "en",
|
|
44
|
+
_securityChecks: true,
|
|
45
|
+
useWSS: false,
|
|
46
|
+
testServers: false,
|
|
47
|
+
};
|
|
48
|
+
class TelegramBaseClient {
|
|
49
|
+
constructor(session, apiId, apiHash, clientParams) {
|
|
50
|
+
/** The current gramJS version. */
|
|
51
|
+
this.__version__ = __1.version;
|
|
52
|
+
/** @hidden */
|
|
53
|
+
this._ALBUMS = new Map();
|
|
54
|
+
/** @hidden */
|
|
55
|
+
this._exportedSenderPromises = new Map();
|
|
56
|
+
/** @hidden */
|
|
57
|
+
this._exportedSenderReleaseTimeouts = new Map();
|
|
58
|
+
clientParams = Object.assign(Object.assign({}, clientParamsDefault), clientParams);
|
|
59
|
+
if (!apiId || !apiHash) {
|
|
60
|
+
throw new Error("Your API ID or Hash cannot be empty or undefined");
|
|
61
|
+
}
|
|
62
|
+
if (clientParams.baseLogger) {
|
|
63
|
+
this._log = clientParams.baseLogger;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
this._log = new extensions_1.Logger();
|
|
67
|
+
}
|
|
68
|
+
this._log.info("Running gramJS version " + __1.version);
|
|
69
|
+
if (session && typeof session == "string") {
|
|
70
|
+
session = new sessions_1.StoreSession(session);
|
|
71
|
+
}
|
|
72
|
+
if (!(session instanceof sessions_1.Session)) {
|
|
73
|
+
throw new Error("Only StringSession and StoreSessions are supported currently :( ");
|
|
74
|
+
}
|
|
75
|
+
this._floodSleepThreshold = clientParams.floodSleepThreshold;
|
|
76
|
+
this.session = session;
|
|
77
|
+
this.apiId = apiId;
|
|
78
|
+
this.apiHash = apiHash;
|
|
79
|
+
this._useIPV6 = clientParams.useIPV6;
|
|
80
|
+
this._requestRetries = clientParams.requestRetries;
|
|
81
|
+
this._downloadRetries = clientParams.downloadRetries;
|
|
82
|
+
this._connectionRetries = clientParams.connectionRetries;
|
|
83
|
+
this._reconnectRetries = clientParams.reconnectRetries;
|
|
84
|
+
this._retryDelay = clientParams.retryDelay || 0;
|
|
85
|
+
this._timeout = clientParams.timeout;
|
|
86
|
+
this._autoReconnect = clientParams.autoReconnect;
|
|
87
|
+
this._proxy = clientParams.proxy;
|
|
88
|
+
this._semaphore = new async_mutex_1.Semaphore(clientParams.maxConcurrentDownloads || 1);
|
|
89
|
+
this.testServers = clientParams.testServers || false;
|
|
90
|
+
this.networkSocket = clientParams.networkSocket || extensions_1.PromisedNetSockets;
|
|
91
|
+
if (!(clientParams.connection instanceof Function)) {
|
|
92
|
+
throw new Error("Connection should be a class not an instance");
|
|
93
|
+
}
|
|
94
|
+
this._connection = clientParams.connection;
|
|
95
|
+
let initProxy;
|
|
96
|
+
if (this._proxy && "MTProxy" in this._proxy) {
|
|
97
|
+
this._connection = TCPMTProxy_1.ConnectionTCPMTProxyAbridged;
|
|
98
|
+
initProxy = new tl_1.Api.InputClientProxy({
|
|
99
|
+
address: this._proxy.ip,
|
|
100
|
+
port: this._proxy.port,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
this._initRequest = new tl_1.Api.InitConnection({
|
|
104
|
+
apiId: this.apiId,
|
|
105
|
+
deviceModel: clientParams.deviceModel || os_1.default.type().toString() || "Unknown",
|
|
106
|
+
systemVersion: clientParams.systemVersion || os_1.default.release().toString() || "1.0",
|
|
107
|
+
appVersion: clientParams.appVersion || "1.0",
|
|
108
|
+
langCode: clientParams.langCode,
|
|
109
|
+
langPack: "",
|
|
110
|
+
systemLangCode: clientParams.systemLangCode,
|
|
111
|
+
proxy: initProxy,
|
|
112
|
+
});
|
|
113
|
+
this._eventBuilders = [];
|
|
114
|
+
this._floodWaitedRequests = {};
|
|
115
|
+
this._borrowedSenderPromises = {};
|
|
116
|
+
this._bot = undefined;
|
|
117
|
+
this._selfInputPeer = undefined;
|
|
118
|
+
this.useWSS = clientParams.useWSS;
|
|
119
|
+
this._securityChecks = !!clientParams.securityChecks;
|
|
120
|
+
if (this.useWSS && this._proxy) {
|
|
121
|
+
throw new Error("Cannot use SSL with proxies. You need to disable the useWSS client param in TelegramClient");
|
|
122
|
+
}
|
|
123
|
+
this._entityCache = new entityCache_1.EntityCache();
|
|
124
|
+
// These will be set later
|
|
125
|
+
this._config = undefined;
|
|
126
|
+
this._loopStarted = false;
|
|
127
|
+
this._reconnecting = false;
|
|
128
|
+
this._destroyed = false;
|
|
129
|
+
this._isSwitchingDc = false;
|
|
130
|
+
this._connectedDeferred = new Deferred_1.default();
|
|
131
|
+
// parse mode
|
|
132
|
+
this._parseMode = markdown_1.MarkdownParser;
|
|
133
|
+
}
|
|
134
|
+
get floodSleepThreshold() {
|
|
135
|
+
return this._floodSleepThreshold;
|
|
136
|
+
}
|
|
137
|
+
set floodSleepThreshold(value) {
|
|
138
|
+
this._floodSleepThreshold = Math.min(value || 0, 24 * 60 * 60);
|
|
139
|
+
}
|
|
140
|
+
set maxConcurrentDownloads(value) {
|
|
141
|
+
// @ts-ignore
|
|
142
|
+
this._semaphore._value = value;
|
|
143
|
+
}
|
|
144
|
+
// region connecting
|
|
145
|
+
async _initSession() {
|
|
146
|
+
await this.session.load();
|
|
147
|
+
if (!this.session.serverAddress) {
|
|
148
|
+
this.session.setDC(DEFAULT_DC_ID, this._useIPV6 ? DEFAULT_IPV6_IP : DEFAULT_IPV4_IP, this.useWSS ? 443 : 80);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
this._useIPV6 = this.session.serverAddress.includes(":");
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
get connected() {
|
|
155
|
+
return this._sender && this._sender.isConnected();
|
|
156
|
+
}
|
|
157
|
+
async disconnect() {
|
|
158
|
+
await this._disconnect();
|
|
159
|
+
await Promise.all(Object.values(this._exportedSenderPromises)
|
|
160
|
+
.map((promises) => {
|
|
161
|
+
return Object.values(promises).map((promise) => {
|
|
162
|
+
return (promise &&
|
|
163
|
+
promise.then((sender) => {
|
|
164
|
+
if (sender) {
|
|
165
|
+
return sender.disconnect();
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
}));
|
|
169
|
+
});
|
|
170
|
+
})
|
|
171
|
+
.flat());
|
|
172
|
+
Object.values(this._exportedSenderReleaseTimeouts).forEach((timeouts) => {
|
|
173
|
+
Object.values(timeouts).forEach((releaseTimeout) => {
|
|
174
|
+
clearTimeout(releaseTimeout);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
this._exportedSenderPromises.clear();
|
|
178
|
+
}
|
|
179
|
+
get disconnected() {
|
|
180
|
+
return !this._sender || this._sender._disconnected;
|
|
181
|
+
}
|
|
182
|
+
async _disconnect() {
|
|
183
|
+
var _a;
|
|
184
|
+
await ((_a = this._sender) === null || _a === void 0 ? void 0 : _a.disconnect());
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Disconnects all senders and removes all handlers
|
|
188
|
+
* Disconnect is safer as it will not remove your event handlers
|
|
189
|
+
*/
|
|
190
|
+
async destroy() {
|
|
191
|
+
this._destroyed = true;
|
|
192
|
+
await Promise.all([
|
|
193
|
+
this.disconnect(),
|
|
194
|
+
...Object.values(this._borrowedSenderPromises).map((promise) => {
|
|
195
|
+
return promise.then((sender) => sender.disconnect());
|
|
196
|
+
}),
|
|
197
|
+
]);
|
|
198
|
+
this._eventBuilders = [];
|
|
199
|
+
}
|
|
200
|
+
/** @hidden */
|
|
201
|
+
async _authKeyCallback(authKey, dcId) {
|
|
202
|
+
this.session.setAuthKey(authKey, dcId);
|
|
203
|
+
await this.session.save();
|
|
204
|
+
}
|
|
205
|
+
/** @hidden */
|
|
206
|
+
async _cleanupExportedSender(dcId) {
|
|
207
|
+
if (this.session.dcId !== dcId) {
|
|
208
|
+
this.session.setAuthKey(undefined, dcId);
|
|
209
|
+
}
|
|
210
|
+
let sender = await this._exportedSenderPromises.get(dcId);
|
|
211
|
+
this._exportedSenderPromises.delete(dcId);
|
|
212
|
+
await (sender === null || sender === void 0 ? void 0 : sender.disconnect());
|
|
213
|
+
}
|
|
214
|
+
/** @hidden */
|
|
215
|
+
async _connectSender(sender, dcId) {
|
|
216
|
+
// if we don't already have an auth key we want to use normal DCs not -1
|
|
217
|
+
const dc = await this.getDC(dcId, !!sender.authKey.getKey());
|
|
218
|
+
while (true) {
|
|
219
|
+
try {
|
|
220
|
+
await sender.connect(new this._connection({
|
|
221
|
+
ip: dc.ipAddress,
|
|
222
|
+
port: dc.port,
|
|
223
|
+
dcId: dcId,
|
|
224
|
+
loggers: this._log,
|
|
225
|
+
proxy: this._proxy,
|
|
226
|
+
testServers: this.testServers,
|
|
227
|
+
socket: this.networkSocket,
|
|
228
|
+
}), false);
|
|
229
|
+
if (this.session.dcId !== dcId && !sender._authenticated) {
|
|
230
|
+
this._log.info(`Exporting authorization for data center ${dc.ipAddress} with layer ${AllTLObjects_1.LAYER}`);
|
|
231
|
+
const auth = await this.invoke(new tl_1.Api.auth.ExportAuthorization({ dcId: dcId }));
|
|
232
|
+
this._initRequest.query = new tl_1.Api.auth.ImportAuthorization({
|
|
233
|
+
id: auth.id,
|
|
234
|
+
bytes: auth.bytes,
|
|
235
|
+
});
|
|
236
|
+
const req = new tl_1.Api.InvokeWithLayer({
|
|
237
|
+
layer: AllTLObjects_1.LAYER,
|
|
238
|
+
query: this._initRequest,
|
|
239
|
+
});
|
|
240
|
+
await sender.send(req);
|
|
241
|
+
sender._authenticated = true;
|
|
242
|
+
}
|
|
243
|
+
sender.dcId = dcId;
|
|
244
|
+
sender.userDisconnected = false;
|
|
245
|
+
return sender;
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
if (err.errorMessage === "DC_ID_INVALID") {
|
|
249
|
+
sender._authenticated = true;
|
|
250
|
+
sender.userDisconnected = false;
|
|
251
|
+
return sender;
|
|
252
|
+
}
|
|
253
|
+
if (this._errorHandler) {
|
|
254
|
+
await this._errorHandler(err);
|
|
255
|
+
}
|
|
256
|
+
else if (this._log.canSend(Logger_1.LogLevel.ERROR)) {
|
|
257
|
+
console.error(err);
|
|
258
|
+
}
|
|
259
|
+
await (0, Helpers_1.sleep)(1000);
|
|
260
|
+
await sender.disconnect();
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/** @hidden */
|
|
265
|
+
async _borrowExportedSender(dcId, shouldReconnect, existingSender) {
|
|
266
|
+
if (!this._exportedSenderPromises.get(dcId) || shouldReconnect) {
|
|
267
|
+
this._exportedSenderPromises.set(dcId, this._connectSender(existingSender || this._createExportedSender(dcId), dcId));
|
|
268
|
+
}
|
|
269
|
+
let sender;
|
|
270
|
+
try {
|
|
271
|
+
sender = await this._exportedSenderPromises.get(dcId);
|
|
272
|
+
if (!sender.isConnected()) {
|
|
273
|
+
if (sender.isConnecting) {
|
|
274
|
+
await (0, Helpers_1.sleep)(EXPORTED_SENDER_RECONNECT_TIMEOUT);
|
|
275
|
+
return this._borrowExportedSender(dcId, false, sender);
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
return this._borrowExportedSender(dcId, true, sender);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
catch (err) {
|
|
283
|
+
if (this._errorHandler) {
|
|
284
|
+
await this._errorHandler(err);
|
|
285
|
+
}
|
|
286
|
+
if (this._log.canSend(Logger_1.LogLevel.ERROR)) {
|
|
287
|
+
console.error(err);
|
|
288
|
+
}
|
|
289
|
+
return this._borrowExportedSender(dcId, true);
|
|
290
|
+
}
|
|
291
|
+
if (this._exportedSenderReleaseTimeouts.get(dcId)) {
|
|
292
|
+
clearTimeout(this._exportedSenderReleaseTimeouts.get(dcId));
|
|
293
|
+
this._exportedSenderReleaseTimeouts.delete(dcId);
|
|
294
|
+
}
|
|
295
|
+
this._exportedSenderReleaseTimeouts.set(dcId, setTimeout(() => {
|
|
296
|
+
this._exportedSenderReleaseTimeouts.delete(dcId);
|
|
297
|
+
if (sender._pendingState.values().length) {
|
|
298
|
+
console.log("sender already has some hanging states. reconnecting");
|
|
299
|
+
sender._reconnect();
|
|
300
|
+
this._borrowExportedSender(dcId, false, sender);
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
sender.disconnect();
|
|
304
|
+
}
|
|
305
|
+
}, EXPORTED_SENDER_RELEASE_TIMEOUT));
|
|
306
|
+
return sender;
|
|
307
|
+
}
|
|
308
|
+
/** @hidden */
|
|
309
|
+
_createExportedSender(dcId) {
|
|
310
|
+
return new network_1.MTProtoSender(this.session.getAuthKey(dcId), {
|
|
311
|
+
logger: this._log,
|
|
312
|
+
dcId,
|
|
313
|
+
retries: this._connectionRetries,
|
|
314
|
+
delay: this._retryDelay,
|
|
315
|
+
autoReconnect: this._autoReconnect,
|
|
316
|
+
connectTimeout: this._timeout,
|
|
317
|
+
authKeyCallback: this._authKeyCallback.bind(this),
|
|
318
|
+
isMainSender: dcId === this.session.dcId,
|
|
319
|
+
onConnectionBreak: this._cleanupExportedSender.bind(this),
|
|
320
|
+
client: this,
|
|
321
|
+
securityChecks: this._securityChecks,
|
|
322
|
+
_exportedSenderPromises: this._exportedSenderPromises,
|
|
323
|
+
reconnectRetries: this._reconnectRetries,
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
/** @hidden */
|
|
327
|
+
getSender(dcId) {
|
|
328
|
+
return dcId
|
|
329
|
+
? this._borrowExportedSender(dcId)
|
|
330
|
+
: Promise.resolve(this._sender);
|
|
331
|
+
}
|
|
332
|
+
// endregion
|
|
333
|
+
async getDC(dcId, download) {
|
|
334
|
+
throw new Error("Cannot be called from here!");
|
|
335
|
+
}
|
|
336
|
+
invoke(request) {
|
|
337
|
+
throw new Error("Cannot be called from here!");
|
|
338
|
+
}
|
|
339
|
+
setLogLevel(level) {
|
|
340
|
+
this._log.setLevel(level);
|
|
341
|
+
}
|
|
342
|
+
get logger() {
|
|
343
|
+
return this._log;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Custom error handler for the client
|
|
347
|
+
* @example
|
|
348
|
+
* ```ts
|
|
349
|
+
* client.onError = async (error)=>{
|
|
350
|
+
* console.log("error is",error)
|
|
351
|
+
* }
|
|
352
|
+
* ```
|
|
353
|
+
*/
|
|
354
|
+
set onError(handler) {
|
|
355
|
+
this._errorHandler = async (error) => {
|
|
356
|
+
try {
|
|
357
|
+
await handler(error);
|
|
358
|
+
}
|
|
359
|
+
catch (e) {
|
|
360
|
+
if (this._log.canSend(Logger_1.LogLevel.ERROR)) {
|
|
361
|
+
e.message = `Error ${e.message} thrown while handling top-level error: ${error.message}`;
|
|
362
|
+
console.error(e);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
exports.TelegramBaseClient = TelegramBaseClient;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { EventBuilder } from "../events/common";
|
|
2
|
+
import { Api } from "../tl";
|
|
3
|
+
import type { TelegramClient } from "..";
|
|
4
|
+
import { UpdateConnectionState } from "../network";
|
|
5
|
+
/**
|
|
6
|
+
If this exception is raised in any of the handlers for a given event,
|
|
7
|
+
it will stop the execution of all other registered event handlers.
|
|
8
|
+
It can be seen as the ``StopIteration`` in a for loop but for events.
|
|
9
|
+
*/
|
|
10
|
+
export declare class StopPropagation extends Error {
|
|
11
|
+
}
|
|
12
|
+
/** @hidden */
|
|
13
|
+
export declare function on(client: TelegramClient, event?: EventBuilder): (f: (event: any) => void) => (event: any) => void;
|
|
14
|
+
/** @hidden */
|
|
15
|
+
export declare function addEventHandler(client: TelegramClient, callback: CallableFunction, event?: EventBuilder): void;
|
|
16
|
+
/** @hidden */
|
|
17
|
+
export declare function removeEventHandler(client: TelegramClient, callback: CallableFunction, event: EventBuilder): void;
|
|
18
|
+
/** @hidden */
|
|
19
|
+
export declare function listEventHandlers(client: TelegramClient): [EventBuilder, CallableFunction][];
|
|
20
|
+
/** @hidden */
|
|
21
|
+
export declare function catchUp(): void;
|
|
22
|
+
/** @hidden */
|
|
23
|
+
export declare function _handleUpdate(client: TelegramClient, update: Api.TypeUpdate | number): void;
|
|
24
|
+
/** @hidden */
|
|
25
|
+
export declare function _processUpdate(client: TelegramClient, update: any, others: any, entities?: any): void;
|
|
26
|
+
/** @hidden */
|
|
27
|
+
export declare function _dispatchUpdate(client: TelegramClient, args: {
|
|
28
|
+
update: UpdateConnectionState | any;
|
|
29
|
+
}): Promise<void>;
|
|
30
|
+
/** @hidden */
|
|
31
|
+
export declare function _updateLoop(client: TelegramClient): Promise<void>;
|