@mtcute/core 0.13.1 → 0.13.3
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/cjs/highlevel/base.js +1 -1
- package/cjs/highlevel/base.js.map +1 -1
- package/cjs/highlevel/client.d.ts +15 -1
- package/cjs/highlevel/client.js.map +1 -1
- package/cjs/highlevel/methods/auth/log-out.d.ts +8 -1
- package/cjs/highlevel/methods/auth/log-out.js +4 -2
- package/cjs/highlevel/methods/auth/log-out.js.map +1 -1
- package/cjs/highlevel/methods/auth/send-code.d.ts +5 -0
- package/cjs/highlevel/methods/auth/send-code.js +5 -1
- package/cjs/highlevel/methods/auth/send-code.js.map +1 -1
- package/cjs/highlevel/methods/auth/start.d.ts +5 -0
- package/cjs/highlevel/methods/auth/start.js +81 -53
- package/cjs/highlevel/methods/auth/start.js.map +1 -1
- package/cjs/highlevel/methods/chats/open-chat.d.ts +5 -0
- package/cjs/highlevel/methods/chats/open-chat.js +5 -0
- package/cjs/highlevel/methods/chats/open-chat.js.map +1 -1
- package/cjs/highlevel/methods/users/set-offline.js +1 -3
- package/cjs/highlevel/methods/users/set-offline.js.map +1 -1
- package/cjs/highlevel/methods.d.ts +1 -0
- package/cjs/highlevel/methods.js.map +1 -1
- package/cjs/highlevel/types/bots/keyboards/index.d.ts +1 -0
- package/cjs/highlevel/types/bots/keyboards/index.js +1 -0
- package/cjs/highlevel/types/bots/keyboards/index.js.map +1 -1
- package/cjs/highlevel/updates/manager.d.ts +1 -0
- package/cjs/highlevel/updates/manager.js +38 -10
- package/cjs/highlevel/updates/manager.js.map +1 -1
- package/cjs/highlevel/updates/types.d.ts +36 -1
- package/cjs/highlevel/updates/types.js.map +1 -1
- package/cjs/network/client.js +1 -1
- package/cjs/network/client.js.map +1 -1
- package/cjs/network/network-manager.js +3 -2
- package/cjs/network/network-manager.js.map +1 -1
- package/esm/highlevel/base.js +1 -1
- package/esm/highlevel/base.js.map +1 -1
- package/esm/highlevel/client.d.ts +15 -1
- package/esm/highlevel/client.js.map +1 -1
- package/esm/highlevel/methods/auth/log-out.d.ts +8 -1
- package/esm/highlevel/methods/auth/log-out.js +4 -2
- package/esm/highlevel/methods/auth/log-out.js.map +1 -1
- package/esm/highlevel/methods/auth/send-code.d.ts +5 -0
- package/esm/highlevel/methods/auth/send-code.js +5 -1
- package/esm/highlevel/methods/auth/send-code.js.map +1 -1
- package/esm/highlevel/methods/auth/start.d.ts +5 -0
- package/esm/highlevel/methods/auth/start.js +82 -54
- package/esm/highlevel/methods/auth/start.js.map +1 -1
- package/esm/highlevel/methods/chats/open-chat.d.ts +5 -0
- package/esm/highlevel/methods/chats/open-chat.js +5 -0
- package/esm/highlevel/methods/chats/open-chat.js.map +1 -1
- package/esm/highlevel/methods/users/set-offline.js +1 -3
- package/esm/highlevel/methods/users/set-offline.js.map +1 -1
- package/esm/highlevel/methods.d.ts +1 -0
- package/esm/highlevel/methods.js.map +1 -1
- package/esm/highlevel/types/bots/keyboards/index.d.ts +1 -0
- package/esm/highlevel/types/bots/keyboards/index.js +1 -0
- package/esm/highlevel/types/bots/keyboards/index.js.map +1 -1
- package/esm/highlevel/updates/manager.d.ts +1 -0
- package/esm/highlevel/updates/manager.js +38 -10
- package/esm/highlevel/updates/manager.js.map +1 -1
- package/esm/highlevel/updates/types.d.ts +36 -1
- package/esm/highlevel/updates/types.js.map +1 -1
- package/esm/network/client.js +1 -1
- package/esm/network/client.js.map +1 -1
- package/esm/network/network-manager.js +3 -2
- package/esm/network/network-manager.js.map +1 -1
- package/package.json +1 -1
package/cjs/highlevel/base.js
CHANGED
|
@@ -91,11 +91,11 @@ class BaseTelegramClient {
|
|
|
91
91
|
return this._connected;
|
|
92
92
|
}
|
|
93
93
|
async close() {
|
|
94
|
+
this._connected = false;
|
|
94
95
|
await this.mt.close();
|
|
95
96
|
this.updates?.stopLoop();
|
|
96
97
|
this._prepare.reset();
|
|
97
98
|
this._connect.reset();
|
|
98
|
-
this._connected = false;
|
|
99
99
|
}
|
|
100
100
|
async notifyLoggedIn(auth) {
|
|
101
101
|
const user = this.mt.network.notifyLoggedIn(auth);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/highlevel/base.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/require-await */\nimport { tl } from '@mtcute/tl'\n\nimport { MtClient, MtClientOptions } from '../network/client.js'\nimport { ConnectionKind, RpcCallOptions } from '../network/network-manager.js'\nimport { StorageManagerExtraOptions } from '../storage/storage.js'\nimport { MtArgumentError } from '../types/errors.js'\nimport { MustEqual } from '../types/utils.js'\nimport {\n asyncResettable,\n computeNewPasswordHash,\n computeSrpParams,\n readStringSession,\n StringSessionData,\n writeStringSession,\n} from '../utils/index.js'\nimport { LogManager } from '../utils/logger.js'\nimport { ConnectionState, ITelegramClient } from './client.types.js'\nimport { AppConfigManager } from './managers/app-config-manager.js'\nimport { ITelegramStorageProvider } from './storage/provider.js'\nimport { TelegramStorageManager, TelegramStorageManagerExtraOptions } from './storage/storage.js'\nimport { UpdatesManager } from './updates/manager.js'\nimport { RawUpdateHandler, UpdatesManagerParams } from './updates/types.js'\n\nexport interface BaseTelegramClientOptions extends MtClientOptions {\n storage: ITelegramStorageProvider\n storageOptions?: StorageManagerExtraOptions & TelegramStorageManagerExtraOptions\n updates?: UpdatesManagerParams | false\n}\n\nexport class BaseTelegramClient implements ITelegramClient {\n readonly updates?: UpdatesManager\n private _serverUpdatesHandler: (updates: tl.TypeUpdates) => void = () => {}\n private _connectionStateHandler: (state: ConnectionState) => void = () => {}\n\n readonly log\n readonly mt\n readonly crypto\n readonly storage\n\n constructor(readonly params: BaseTelegramClientOptions) {\n this.log = this.params.logger ?? new LogManager('client')\n this.mt = new MtClient({\n ...this.params,\n logger: this.log.create('mtproto'),\n })\n\n if (!params.disableUpdates && params.updates !== false) {\n this.updates = new UpdatesManager(this, params.updates)\n this._serverUpdatesHandler = this.updates.handleUpdate.bind(this.updates)\n this.updates.onCatchingUp((catchingUp) => {\n this._connectionStateHandler(catchingUp ? 'updating' : 'connected')\n })\n }\n\n this.mt.on('update', (update: tl.TypeUpdates) => {\n this._serverUpdatesHandler(update)\n })\n this.mt.on('usable', () => {\n this._connectionStateHandler('connected')\n })\n this.mt.on('wait', () => {\n this._connectionStateHandler('connecting')\n })\n this.mt.on('networkChanged', (connected: boolean) => {\n if (!connected) {\n this._connectionStateHandler('offline')\n }\n })\n\n this.crypto = this.mt.crypto\n this.storage = new TelegramStorageManager(this.mt.storage, {\n provider: this.params.storage,\n ...this.params.storageOptions,\n })\n }\n readonly appConfig = new AppConfigManager(this)\n\n private _prepare = asyncResettable(async () => {\n await this.mt.prepare()\n\n const self = await this.storage.self.fetch()\n this.log.prefix = `[USER ${self?.userId ?? 'n/a'}] `\n this.mt.network.setIsPremium(self?.isPremium ?? false)\n\n await this.updates?.prepare()\n })\n\n /**\n * **ADVANCED**\n *\n * Do all the preparations, but don't connect just yet.\n * Useful when you want to do some preparations before\n * connecting, like setting up session.\n *\n * Call {@link connect} to actually connect.\n */\n prepare() {\n return this._prepare.run()\n }\n\n // used in a hot path, avoid extra function calls\n private _connected = false\n private _connect = asyncResettable(async () => {\n await this._prepare.run()\n await this.mt.connect()\n this._connected = true\n })\n\n /**\n * Initialize the connection to the primary DC.\n *\n * You shouldn't usually call this method directly as it is called\n * implicitly the first time you call {@link call}.\n */\n async connect(): Promise<void> {\n return this._connect.run()\n }\n\n get isConnected(): boolean {\n return this._connected\n }\n\n async close(): Promise<void> {\n await this.mt.close()\n this.updates?.stopLoop()\n this._prepare.reset()\n this._connect.reset()\n this._connected = false\n }\n\n async notifyLoggedIn(auth: tl.auth.TypeAuthorization | tl.RawUser): Promise<tl.RawUser> {\n const user = this.mt.network.notifyLoggedIn(auth)\n\n this.log.prefix = `[USER ${user.id}] `\n const self = await this.storage.self.storeFrom(user)\n\n this.updates?.notifyLoggedIn(self)\n\n return user\n }\n\n async notifyLoggedOut(): Promise<void> {\n this.mt.network.notifyLoggedOut()\n\n this.log.prefix = '[USER n/a] '\n await this.storage.self.store(null)\n }\n\n async notifyChannelOpened(channelId: number, pts?: number): Promise<boolean> {\n return this.updates?.notifyChannelOpened(channelId, pts) ?? false\n }\n\n async notifyChannelClosed(channelId: number): Promise<boolean> {\n return this.updates?.notifyChannelClosed(channelId) ?? false\n }\n\n async startUpdatesLoop(): Promise<void> {\n await this.updates?.startLoop()\n }\n\n async stopUpdatesLoop(): Promise<void> {\n this.updates?.stopLoop()\n }\n\n /**\n * Make an RPC call\n *\n * This method is still quite low-level and you shouldn't use this\n * when using high-level API provided by `@mtcute/client`.\n *\n * @param message RPC method to call\n * @param params Additional call parameters\n */\n async call<T extends tl.RpcMethod>(\n message: MustEqual<T, tl.RpcMethod>,\n params?: RpcCallOptions,\n ): Promise<tl.RpcCallReturn[T['_']]> {\n if (!this._connected) {\n await this._connect.run()\n }\n\n const res = await this.mt.call(message, params)\n\n await this.storage.peers.updatePeersFrom(res)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return res\n }\n\n /**\n * Import the session from the given session string.\n *\n * Note that the session will only be imported in case\n * the storage is missing authorization (i.e. does not contain\n * auth key for the primary DC), otherwise it will be ignored (unless `force`).\n *\n * @param session Session string to import\n * @param force Whether to overwrite existing session\n */\n async importSession(session: string | StringSessionData, force = false): Promise<void> {\n await this.prepare()\n\n const defaultDcAuthKey = await this.mt.storage.provider.authKeys.get(this.mt._defaultDcs.main.id)\n\n if (defaultDcAuthKey && !force) return\n\n const data = typeof session === 'string' ? readStringSession(session) : session\n\n if (data.testMode && !this.params.testMode) {\n throw new Error(\n 'This session string is not for the current backend. ' +\n `Session is ${data.testMode ? 'test' : 'prod'}, ` +\n `but the client is ${this.params.testMode ? 'test' : 'prod'}`,\n )\n }\n\n this.mt._defaultDcs = data.primaryDcs\n await this.mt.storage.dcs.store(data.primaryDcs)\n\n if (data.self) {\n await this.storage.self.store(data.self)\n }\n\n await this.mt.storage.provider.authKeys.set(data.primaryDcs.main.id, data.authKey)\n\n await this.mt.storage.save()\n }\n\n /**\n * Export current session to a single *LONG* string, containing\n * all the needed information.\n *\n * > **Warning!** Anyone with this string will be able\n * > to authorize as you and do anything. Treat this\n * > as your password, and never give it away!\n * >\n * > In case you have accidentally leaked this string,\n * > make sure to revoke this session in account settings:\n * > \"Privacy & Security\" > \"Active sessions\" >\n * > find the one containing `mtcute` > Revoke,\n * > or, in case this is a bot, revoke bot token\n * > with [@BotFather](//t.me/botfather)\n */\n async exportSession(): Promise<string> {\n await this._prepare.run()\n\n const primaryDcs = (await this.mt.storage.dcs.fetch()) ?? this.mt._defaultDcs\n\n const authKey = await this.mt.storage.provider.authKeys.get(primaryDcs.main.id)\n if (!authKey) throw new Error('Auth key is not ready yet')\n\n return writeStringSession({\n version: 3,\n self: await this.storage.self.fetch(),\n testMode: Boolean(this.params.testMode),\n primaryDcs,\n authKey,\n })\n }\n\n /**\n * Register an error handler for the client\n *\n * @param handler Error handler.\n */\n onError(handler: (err: unknown) => void): void {\n this.mt.onError(handler)\n }\n\n emitError(err: unknown): void {\n this.mt.emitError(err)\n }\n\n handleClientUpdate(updates: tl.TypeUpdates, noDispatch?: boolean): void {\n this.updates?.handleClientUpdate(updates, noDispatch)\n }\n\n onServerUpdate(handler: (update: tl.TypeUpdates) => void): void {\n this._serverUpdatesHandler = handler\n }\n\n onUpdate(handler: RawUpdateHandler): void {\n if (!this.updates) {\n throw new MtArgumentError('Updates manager is disabled')\n }\n\n this.updates.setHandler(handler)\n }\n\n onConnectionState(handler: (state: ConnectionState) => void): void {\n this._connectionStateHandler = handler\n }\n\n async getApiCrenetials() {\n return {\n id: this.params.apiId,\n hash: this.params.apiHash,\n }\n }\n\n async getPoolSize(kind: ConnectionKind, dcId?: number): Promise<number> {\n if (!this._connected) {\n await this._connect.run()\n }\n\n return this.mt.network.getPoolSize(kind, dcId)\n }\n\n async getPrimaryDcId(): Promise<number> {\n if (!this._connected) {\n await this._connect.run()\n }\n\n return this.mt.network.getPrimaryDcId()\n }\n\n computeSrpParams(request: tl.account.RawPassword, password: string): Promise<tl.RawInputCheckPasswordSRP> {\n return computeSrpParams(this.crypto, request, password)\n }\n computeNewPasswordHash(algo: tl.TypePasswordKdfAlgo, password: string): Promise<Uint8Array> {\n return computeNewPasswordHash(this.crypto, algo, password)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/highlevel/base.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/require-await */\nimport { tl } from '@mtcute/tl'\n\nimport { MtClient, MtClientOptions } from '../network/client.js'\nimport { ConnectionKind, RpcCallOptions } from '../network/network-manager.js'\nimport { StorageManagerExtraOptions } from '../storage/storage.js'\nimport { MtArgumentError } from '../types/errors.js'\nimport { MustEqual } from '../types/utils.js'\nimport {\n asyncResettable,\n computeNewPasswordHash,\n computeSrpParams,\n readStringSession,\n StringSessionData,\n writeStringSession,\n} from '../utils/index.js'\nimport { LogManager } from '../utils/logger.js'\nimport { ConnectionState, ITelegramClient } from './client.types.js'\nimport { AppConfigManager } from './managers/app-config-manager.js'\nimport { ITelegramStorageProvider } from './storage/provider.js'\nimport { TelegramStorageManager, TelegramStorageManagerExtraOptions } from './storage/storage.js'\nimport { UpdatesManager } from './updates/manager.js'\nimport { RawUpdateHandler, UpdatesManagerParams } from './updates/types.js'\n\nexport interface BaseTelegramClientOptions extends MtClientOptions {\n storage: ITelegramStorageProvider\n storageOptions?: StorageManagerExtraOptions & TelegramStorageManagerExtraOptions\n updates?: UpdatesManagerParams | false\n}\n\nexport class BaseTelegramClient implements ITelegramClient {\n readonly updates?: UpdatesManager\n private _serverUpdatesHandler: (updates: tl.TypeUpdates) => void = () => {}\n private _connectionStateHandler: (state: ConnectionState) => void = () => {}\n\n readonly log\n readonly mt\n readonly crypto\n readonly storage\n\n constructor(readonly params: BaseTelegramClientOptions) {\n this.log = this.params.logger ?? new LogManager('client')\n this.mt = new MtClient({\n ...this.params,\n logger: this.log.create('mtproto'),\n })\n\n if (!params.disableUpdates && params.updates !== false) {\n this.updates = new UpdatesManager(this, params.updates)\n this._serverUpdatesHandler = this.updates.handleUpdate.bind(this.updates)\n this.updates.onCatchingUp((catchingUp) => {\n this._connectionStateHandler(catchingUp ? 'updating' : 'connected')\n })\n }\n\n this.mt.on('update', (update: tl.TypeUpdates) => {\n this._serverUpdatesHandler(update)\n })\n this.mt.on('usable', () => {\n this._connectionStateHandler('connected')\n })\n this.mt.on('wait', () => {\n this._connectionStateHandler('connecting')\n })\n this.mt.on('networkChanged', (connected: boolean) => {\n if (!connected) {\n this._connectionStateHandler('offline')\n }\n })\n\n this.crypto = this.mt.crypto\n this.storage = new TelegramStorageManager(this.mt.storage, {\n provider: this.params.storage,\n ...this.params.storageOptions,\n })\n }\n readonly appConfig = new AppConfigManager(this)\n\n private _prepare = asyncResettable(async () => {\n await this.mt.prepare()\n\n const self = await this.storage.self.fetch()\n this.log.prefix = `[USER ${self?.userId ?? 'n/a'}] `\n this.mt.network.setIsPremium(self?.isPremium ?? false)\n\n await this.updates?.prepare()\n })\n\n /**\n * **ADVANCED**\n *\n * Do all the preparations, but don't connect just yet.\n * Useful when you want to do some preparations before\n * connecting, like setting up session.\n *\n * Call {@link connect} to actually connect.\n */\n prepare() {\n return this._prepare.run()\n }\n\n // used in a hot path, avoid extra function calls\n private _connected = false\n private _connect = asyncResettable(async () => {\n await this._prepare.run()\n await this.mt.connect()\n this._connected = true\n })\n\n /**\n * Initialize the connection to the primary DC.\n *\n * You shouldn't usually call this method directly as it is called\n * implicitly the first time you call {@link call}.\n */\n async connect(): Promise<void> {\n return this._connect.run()\n }\n\n get isConnected(): boolean {\n return this._connected\n }\n\n async close(): Promise<void> {\n this._connected = false\n await this.mt.close()\n this.updates?.stopLoop()\n this._prepare.reset()\n this._connect.reset()\n }\n\n async notifyLoggedIn(auth: tl.auth.TypeAuthorization | tl.RawUser): Promise<tl.RawUser> {\n const user = this.mt.network.notifyLoggedIn(auth)\n\n this.log.prefix = `[USER ${user.id}] `\n const self = await this.storage.self.storeFrom(user)\n\n this.updates?.notifyLoggedIn(self)\n\n return user\n }\n\n async notifyLoggedOut(): Promise<void> {\n this.mt.network.notifyLoggedOut()\n\n this.log.prefix = '[USER n/a] '\n await this.storage.self.store(null)\n }\n\n async notifyChannelOpened(channelId: number, pts?: number): Promise<boolean> {\n return this.updates?.notifyChannelOpened(channelId, pts) ?? false\n }\n\n async notifyChannelClosed(channelId: number): Promise<boolean> {\n return this.updates?.notifyChannelClosed(channelId) ?? false\n }\n\n async startUpdatesLoop(): Promise<void> {\n await this.updates?.startLoop()\n }\n\n async stopUpdatesLoop(): Promise<void> {\n this.updates?.stopLoop()\n }\n\n /**\n * Make an RPC call\n *\n * This method is still quite low-level and you shouldn't use this\n * when using high-level API provided by `@mtcute/client`.\n *\n * @param message RPC method to call\n * @param params Additional call parameters\n */\n async call<T extends tl.RpcMethod>(\n message: MustEqual<T, tl.RpcMethod>,\n params?: RpcCallOptions,\n ): Promise<tl.RpcCallReturn[T['_']]> {\n if (!this._connected) {\n await this._connect.run()\n }\n\n const res = await this.mt.call(message, params)\n\n await this.storage.peers.updatePeersFrom(res)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return res\n }\n\n /**\n * Import the session from the given session string.\n *\n * Note that the session will only be imported in case\n * the storage is missing authorization (i.e. does not contain\n * auth key for the primary DC), otherwise it will be ignored (unless `force`).\n *\n * @param session Session string to import\n * @param force Whether to overwrite existing session\n */\n async importSession(session: string | StringSessionData, force = false): Promise<void> {\n await this.prepare()\n\n const defaultDcAuthKey = await this.mt.storage.provider.authKeys.get(this.mt._defaultDcs.main.id)\n\n if (defaultDcAuthKey && !force) return\n\n const data = typeof session === 'string' ? readStringSession(session) : session\n\n if (data.testMode && !this.params.testMode) {\n throw new Error(\n 'This session string is not for the current backend. ' +\n `Session is ${data.testMode ? 'test' : 'prod'}, ` +\n `but the client is ${this.params.testMode ? 'test' : 'prod'}`,\n )\n }\n\n this.mt._defaultDcs = data.primaryDcs\n await this.mt.storage.dcs.store(data.primaryDcs)\n\n if (data.self) {\n await this.storage.self.store(data.self)\n }\n\n await this.mt.storage.provider.authKeys.set(data.primaryDcs.main.id, data.authKey)\n\n await this.mt.storage.save()\n }\n\n /**\n * Export current session to a single *LONG* string, containing\n * all the needed information.\n *\n * > **Warning!** Anyone with this string will be able\n * > to authorize as you and do anything. Treat this\n * > as your password, and never give it away!\n * >\n * > In case you have accidentally leaked this string,\n * > make sure to revoke this session in account settings:\n * > \"Privacy & Security\" > \"Active sessions\" >\n * > find the one containing `mtcute` > Revoke,\n * > or, in case this is a bot, revoke bot token\n * > with [@BotFather](//t.me/botfather)\n */\n async exportSession(): Promise<string> {\n await this._prepare.run()\n\n const primaryDcs = (await this.mt.storage.dcs.fetch()) ?? this.mt._defaultDcs\n\n const authKey = await this.mt.storage.provider.authKeys.get(primaryDcs.main.id)\n if (!authKey) throw new Error('Auth key is not ready yet')\n\n return writeStringSession({\n version: 3,\n self: await this.storage.self.fetch(),\n testMode: Boolean(this.params.testMode),\n primaryDcs,\n authKey,\n })\n }\n\n /**\n * Register an error handler for the client\n *\n * @param handler Error handler.\n */\n onError(handler: (err: unknown) => void): void {\n this.mt.onError(handler)\n }\n\n emitError(err: unknown): void {\n this.mt.emitError(err)\n }\n\n handleClientUpdate(updates: tl.TypeUpdates, noDispatch?: boolean): void {\n this.updates?.handleClientUpdate(updates, noDispatch)\n }\n\n onServerUpdate(handler: (update: tl.TypeUpdates) => void): void {\n this._serverUpdatesHandler = handler\n }\n\n onUpdate(handler: RawUpdateHandler): void {\n if (!this.updates) {\n throw new MtArgumentError('Updates manager is disabled')\n }\n\n this.updates.setHandler(handler)\n }\n\n onConnectionState(handler: (state: ConnectionState) => void): void {\n this._connectionStateHandler = handler\n }\n\n async getApiCrenetials() {\n return {\n id: this.params.apiId,\n hash: this.params.apiHash,\n }\n }\n\n async getPoolSize(kind: ConnectionKind, dcId?: number): Promise<number> {\n if (!this._connected) {\n await this._connect.run()\n }\n\n return this.mt.network.getPoolSize(kind, dcId)\n }\n\n async getPrimaryDcId(): Promise<number> {\n if (!this._connected) {\n await this._connect.run()\n }\n\n return this.mt.network.getPrimaryDcId()\n }\n\n computeSrpParams(request: tl.account.RawPassword, password: string): Promise<tl.RawInputCheckPasswordSRP> {\n return computeSrpParams(this.crypto, request, password)\n }\n computeNewPasswordHash(algo: tl.TypePasswordKdfAlgo, password: string): Promise<Uint8Array> {\n return computeNewPasswordHash(this.crypto, algo, password)\n }\n}\n"]}
|
|
@@ -6,6 +6,7 @@ import { RpcCallOptions } from '../network/index.js';
|
|
|
6
6
|
import { MaybeArray, MaybePromise, PartialExcept, PartialOnly } from '../types/index.js';
|
|
7
7
|
import { BaseTelegramClientOptions } from './base.js';
|
|
8
8
|
import { ITelegramClient } from './client.types.js';
|
|
9
|
+
import { LogOutResult } from './methods/auth/log-out.js';
|
|
9
10
|
import { start } from './methods/auth/start.js';
|
|
10
11
|
import { CreateGroupResult } from './methods/chats/create-group.js';
|
|
11
12
|
import { getChatEventLog } from './methods/chats/get-chat-event-log.js';
|
|
@@ -308,7 +309,7 @@ export interface TelegramClient extends ITelegramClient {
|
|
|
308
309
|
*
|
|
309
310
|
* @returns On success, `true` is returned
|
|
310
311
|
*/
|
|
311
|
-
logOut(): Promise<
|
|
312
|
+
logOut(): Promise<LogOutResult>;
|
|
312
313
|
/**
|
|
313
314
|
* Recover your password with a recovery code and log in.
|
|
314
315
|
*
|
|
@@ -359,6 +360,10 @@ export interface TelegramClient extends ITelegramClient {
|
|
|
359
360
|
sendCode(params: {
|
|
360
361
|
/** Phone number in international format */
|
|
361
362
|
phone: string;
|
|
363
|
+
/** Saved future auth tokens, if any */
|
|
364
|
+
futureAuthTokens?: Uint8Array[];
|
|
365
|
+
/** Additional code settings to pass to the server */
|
|
366
|
+
codeSettings?: Omit<tl.RawCodeSettings, '_' | 'logoutTokens'>;
|
|
362
367
|
}): Promise<SentCode>;
|
|
363
368
|
/**
|
|
364
369
|
* Send a code to email needed to recover your password
|
|
@@ -494,6 +499,10 @@ export interface TelegramClient extends ITelegramClient {
|
|
|
494
499
|
* @default `console.log`.
|
|
495
500
|
*/
|
|
496
501
|
codeSentCallback?: (code: SentCode) => MaybePromise<void>;
|
|
502
|
+
/** Saved future auth tokens, if any */
|
|
503
|
+
futureAuthTokens?: Uint8Array[];
|
|
504
|
+
/** Additional code settings to pass to the server */
|
|
505
|
+
codeSettings?: Omit<tl.RawCodeSettings, '_' | 'logoutTokens'>;
|
|
497
506
|
}): Promise<User>;
|
|
498
507
|
/**
|
|
499
508
|
* Check if the given peer/input peer is referring to the current user
|
|
@@ -1364,6 +1373,11 @@ export interface TelegramClient extends ITelegramClient {
|
|
|
1364
1373
|
* Some library logic depends on this, for example, the library will
|
|
1365
1374
|
* periodically ping the server to keep the updates flowing.
|
|
1366
1375
|
*
|
|
1376
|
+
* > **Warning**: Opening a chat with `openChat` method will make the library make additional requests
|
|
1377
|
+
* > every so often. Which means that you should **avoid opening more than 5-10 chats at once**,
|
|
1378
|
+
* > as it will probably trigger server-side limits and you might start getting transport errors
|
|
1379
|
+
* > or even get banned.
|
|
1380
|
+
*
|
|
1367
1381
|
* **Available**: ✅ both users and bots
|
|
1368
1382
|
*
|
|
1369
1383
|
* @param chat Chat to open
|