@mtcute/core 0.13.3 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/cjs/highlevel/base.d.ts +5 -2
  2. package/cjs/highlevel/base.js +9 -0
  3. package/cjs/highlevel/base.js.map +1 -1
  4. package/cjs/highlevel/client.d.ts +54 -6
  5. package/cjs/highlevel/client.js +16 -0
  6. package/cjs/highlevel/client.js.map +1 -1
  7. package/cjs/highlevel/client.types.d.ts +5 -1
  8. package/cjs/highlevel/client.types.js.map +1 -1
  9. package/cjs/highlevel/methods/_imports.js.map +1 -1
  10. package/cjs/highlevel/methods/_init.js +6 -0
  11. package/cjs/highlevel/methods/_init.js.map +1 -1
  12. package/cjs/highlevel/methods/auth/resend-code.d.ts +2 -0
  13. package/cjs/highlevel/methods/auth/resend-code.js +2 -2
  14. package/cjs/highlevel/methods/auth/resend-code.js.map +1 -1
  15. package/cjs/highlevel/methods/auth/send-code.d.ts +2 -0
  16. package/cjs/highlevel/methods/auth/send-code.js +1 -1
  17. package/cjs/highlevel/methods/auth/send-code.js.map +1 -1
  18. package/cjs/highlevel/methods/auth/sign-in-qr.d.ts +28 -0
  19. package/cjs/highlevel/methods/auth/sign-in-qr.js +125 -0
  20. package/cjs/highlevel/methods/auth/sign-in-qr.js.map +1 -0
  21. package/cjs/highlevel/methods/auth/sign-in.d.ts +2 -0
  22. package/cjs/highlevel/methods/auth/sign-in.js +2 -2
  23. package/cjs/highlevel/methods/auth/sign-in.js.map +1 -1
  24. package/cjs/highlevel/methods/auth/start.d.ts +10 -0
  25. package/cjs/highlevel/methods/auth/start.js +25 -3
  26. package/cjs/highlevel/methods/auth/start.js.map +1 -1
  27. package/cjs/highlevel/methods/chats/delete-history.d.ts +2 -4
  28. package/cjs/highlevel/methods/chats/delete-history.js.map +1 -1
  29. package/cjs/highlevel/methods/chats/kick-chat-member.js +1 -1
  30. package/cjs/highlevel/methods/chats/kick-chat-member.js.map +1 -1
  31. package/cjs/highlevel/methods/files/normalize-input-media.js +14 -0
  32. package/cjs/highlevel/methods/files/normalize-input-media.js.map +1 -1
  33. package/cjs/highlevel/methods/files/upload-media.js +1 -0
  34. package/cjs/highlevel/methods/files/upload-media.js.map +1 -1
  35. package/cjs/highlevel/methods/messages/find-in-update.js +4 -2
  36. package/cjs/highlevel/methods/messages/find-in-update.js.map +1 -1
  37. package/cjs/highlevel/methods/messages/send-media.js +5 -2
  38. package/cjs/highlevel/methods/messages/send-media.js.map +1 -1
  39. package/cjs/highlevel/methods.d.ts +1 -0
  40. package/cjs/highlevel/methods.js +8 -6
  41. package/cjs/highlevel/methods.js.map +1 -1
  42. package/cjs/highlevel/types/media/extended-media.d.ts +20 -0
  43. package/cjs/highlevel/types/media/extended-media.js +41 -0
  44. package/cjs/highlevel/types/media/extended-media.js.map +1 -0
  45. package/cjs/highlevel/types/media/index.d.ts +2 -0
  46. package/cjs/highlevel/types/media/index.js +2 -0
  47. package/cjs/highlevel/types/media/index.js.map +1 -1
  48. package/cjs/highlevel/types/media/input-media/factories.d.ts +2 -1
  49. package/cjs/highlevel/types/media/input-media/factories.js +7 -1
  50. package/cjs/highlevel/types/media/input-media/factories.js.map +1 -1
  51. package/cjs/highlevel/types/media/input-media/types.d.ts +12 -1
  52. package/cjs/highlevel/types/media/input-media/types.js.map +1 -1
  53. package/cjs/highlevel/types/media/invoice.d.ts +2 -20
  54. package/cjs/highlevel/types/media/invoice.js +3 -37
  55. package/cjs/highlevel/types/media/invoice.js.map +1 -1
  56. package/cjs/highlevel/types/media/paid-media.d.ts +33 -0
  57. package/cjs/highlevel/types/media/paid-media.js +66 -0
  58. package/cjs/highlevel/types/media/paid-media.js.map +1 -0
  59. package/cjs/highlevel/types/messages/message-media.d.ts +2 -1
  60. package/cjs/highlevel/types/messages/message-media.js +10 -0
  61. package/cjs/highlevel/types/messages/message-media.js.map +1 -1
  62. package/cjs/highlevel/types/stories/interactive/index.d.ts +3 -2
  63. package/cjs/highlevel/types/stories/interactive/index.js +5 -1
  64. package/cjs/highlevel/types/stories/interactive/index.js.map +1 -1
  65. package/cjs/highlevel/types/stories/interactive/input.d.ts +1 -0
  66. package/cjs/highlevel/types/stories/interactive/input.js +7 -0
  67. package/cjs/highlevel/types/stories/interactive/input.js.map +1 -1
  68. package/cjs/highlevel/types/stories/interactive/url.d.ts +11 -0
  69. package/cjs/highlevel/types/stories/interactive/url.js +20 -0
  70. package/cjs/highlevel/types/stories/interactive/url.js.map +1 -0
  71. package/cjs/highlevel/types/updates/callback-query.d.ts +16 -2
  72. package/cjs/highlevel/types/updates/callback-query.js +31 -1
  73. package/cjs/highlevel/types/updates/callback-query.js.map +1 -1
  74. package/cjs/highlevel/types/updates/index.d.ts +5 -2
  75. package/cjs/highlevel/types/updates/index.js +2 -1
  76. package/cjs/highlevel/types/updates/index.js.map +1 -1
  77. package/cjs/highlevel/types/updates/parse-update.js +2 -0
  78. package/cjs/highlevel/types/updates/parse-update.js.map +1 -1
  79. package/cjs/highlevel/updates/manager.d.ts +1 -0
  80. package/cjs/highlevel/updates/manager.js +3 -0
  81. package/cjs/highlevel/updates/manager.js.map +1 -1
  82. package/cjs/highlevel/worker/port.d.ts +11 -8
  83. package/cjs/highlevel/worker/port.js +10 -0
  84. package/cjs/highlevel/worker/port.js.map +1 -1
  85. package/cjs/highlevel/worker/protocol.d.ts +2 -0
  86. package/cjs/highlevel/worker/protocol.js.map +1 -1
  87. package/cjs/highlevel/worker/worker.js +1 -0
  88. package/cjs/highlevel/worker/worker.js.map +1 -1
  89. package/cjs/network/client.d.ts +2 -0
  90. package/cjs/network/client.js +8 -0
  91. package/cjs/network/client.js.map +1 -1
  92. package/cjs/network/mtproto-session.js +2 -0
  93. package/cjs/network/mtproto-session.js.map +1 -1
  94. package/cjs/network/network-manager.d.ts +9 -2
  95. package/cjs/network/network-manager.js +34 -15
  96. package/cjs/network/network-manager.js.map +1 -1
  97. package/cjs/network/session-connection.js +12 -3
  98. package/cjs/network/session-connection.js.map +1 -1
  99. package/cjs/storage/sqlite/repository/peers.d.ts +2 -0
  100. package/cjs/storage/sqlite/repository/peers.js +14 -0
  101. package/cjs/storage/sqlite/repository/peers.js.map +1 -1
  102. package/cjs/utils/bigint-utils.js +1 -1
  103. package/cjs/utils/bigint-utils.js.map +1 -1
  104. package/cjs/utils/misc-utils.d.ts +1 -0
  105. package/cjs/utils/misc-utils.js +17 -1
  106. package/cjs/utils/misc-utils.js.map +1 -1
  107. package/esm/highlevel/base.d.ts +5 -2
  108. package/esm/highlevel/base.js +9 -0
  109. package/esm/highlevel/base.js.map +1 -1
  110. package/esm/highlevel/client.d.ts +54 -6
  111. package/esm/highlevel/client.js +16 -0
  112. package/esm/highlevel/client.js.map +1 -1
  113. package/esm/highlevel/client.types.d.ts +5 -1
  114. package/esm/highlevel/client.types.js.map +1 -1
  115. package/esm/highlevel/methods/_imports.js.map +1 -1
  116. package/esm/highlevel/methods/_init.js +6 -0
  117. package/esm/highlevel/methods/_init.js.map +1 -1
  118. package/esm/highlevel/methods/auth/resend-code.d.ts +2 -0
  119. package/esm/highlevel/methods/auth/resend-code.js +2 -2
  120. package/esm/highlevel/methods/auth/resend-code.js.map +1 -1
  121. package/esm/highlevel/methods/auth/send-code.d.ts +2 -0
  122. package/esm/highlevel/methods/auth/send-code.js +1 -1
  123. package/esm/highlevel/methods/auth/send-code.js.map +1 -1
  124. package/esm/highlevel/methods/auth/sign-in-qr.d.ts +28 -0
  125. package/esm/highlevel/methods/auth/sign-in-qr.js +121 -0
  126. package/esm/highlevel/methods/auth/sign-in-qr.js.map +1 -0
  127. package/esm/highlevel/methods/auth/sign-in.d.ts +2 -0
  128. package/esm/highlevel/methods/auth/sign-in.js +2 -2
  129. package/esm/highlevel/methods/auth/sign-in.js.map +1 -1
  130. package/esm/highlevel/methods/auth/start.d.ts +10 -0
  131. package/esm/highlevel/methods/auth/start.js +25 -3
  132. package/esm/highlevel/methods/auth/start.js.map +1 -1
  133. package/esm/highlevel/methods/chats/delete-history.d.ts +2 -4
  134. package/esm/highlevel/methods/chats/delete-history.js.map +1 -1
  135. package/esm/highlevel/methods/chats/kick-chat-member.js +2 -2
  136. package/esm/highlevel/methods/chats/kick-chat-member.js.map +1 -1
  137. package/esm/highlevel/methods/files/normalize-input-media.js +14 -0
  138. package/esm/highlevel/methods/files/normalize-input-media.js.map +1 -1
  139. package/esm/highlevel/methods/files/upload-media.js +1 -0
  140. package/esm/highlevel/methods/files/upload-media.js.map +1 -1
  141. package/esm/highlevel/methods/messages/find-in-update.js +4 -2
  142. package/esm/highlevel/methods/messages/find-in-update.js.map +1 -1
  143. package/esm/highlevel/methods/messages/send-media.js +5 -2
  144. package/esm/highlevel/methods/messages/send-media.js.map +1 -1
  145. package/esm/highlevel/methods.d.ts +1 -0
  146. package/esm/highlevel/methods.js +1 -0
  147. package/esm/highlevel/methods.js.map +1 -1
  148. package/esm/highlevel/types/media/extended-media.d.ts +20 -0
  149. package/esm/highlevel/types/media/extended-media.js +38 -0
  150. package/esm/highlevel/types/media/extended-media.js.map +1 -0
  151. package/esm/highlevel/types/media/index.d.ts +2 -0
  152. package/esm/highlevel/types/media/index.js +2 -0
  153. package/esm/highlevel/types/media/index.js.map +1 -1
  154. package/esm/highlevel/types/media/input-media/factories.d.ts +2 -1
  155. package/esm/highlevel/types/media/input-media/factories.js +5 -0
  156. package/esm/highlevel/types/media/input-media/factories.js.map +1 -1
  157. package/esm/highlevel/types/media/input-media/types.d.ts +12 -1
  158. package/esm/highlevel/types/media/input-media/types.js.map +1 -1
  159. package/esm/highlevel/types/media/invoice.d.ts +2 -20
  160. package/esm/highlevel/types/media/invoice.js +2 -36
  161. package/esm/highlevel/types/media/invoice.js.map +1 -1
  162. package/esm/highlevel/types/media/paid-media.d.ts +33 -0
  163. package/esm/highlevel/types/media/paid-media.js +63 -0
  164. package/esm/highlevel/types/media/paid-media.js.map +1 -0
  165. package/esm/highlevel/types/messages/message-media.d.ts +2 -1
  166. package/esm/highlevel/types/messages/message-media.js +10 -0
  167. package/esm/highlevel/types/messages/message-media.js.map +1 -1
  168. package/esm/highlevel/types/stories/interactive/index.d.ts +3 -2
  169. package/esm/highlevel/types/stories/interactive/index.js +4 -1
  170. package/esm/highlevel/types/stories/interactive/index.js.map +1 -1
  171. package/esm/highlevel/types/stories/interactive/input.d.ts +1 -0
  172. package/esm/highlevel/types/stories/interactive/input.js +7 -0
  173. package/esm/highlevel/types/stories/interactive/input.js.map +1 -1
  174. package/esm/highlevel/types/stories/interactive/url.d.ts +11 -0
  175. package/esm/highlevel/types/stories/interactive/url.js +16 -0
  176. package/esm/highlevel/types/stories/interactive/url.js.map +1 -0
  177. package/esm/highlevel/types/updates/callback-query.d.ts +16 -2
  178. package/esm/highlevel/types/updates/callback-query.js +30 -0
  179. package/esm/highlevel/types/updates/callback-query.js.map +1 -1
  180. package/esm/highlevel/types/updates/index.d.ts +5 -2
  181. package/esm/highlevel/types/updates/index.js +2 -2
  182. package/esm/highlevel/types/updates/index.js.map +1 -1
  183. package/esm/highlevel/types/updates/parse-update.js +3 -1
  184. package/esm/highlevel/types/updates/parse-update.js.map +1 -1
  185. package/esm/highlevel/updates/manager.d.ts +1 -0
  186. package/esm/highlevel/updates/manager.js +3 -0
  187. package/esm/highlevel/updates/manager.js.map +1 -1
  188. package/esm/highlevel/worker/port.d.ts +11 -8
  189. package/esm/highlevel/worker/port.js +10 -0
  190. package/esm/highlevel/worker/port.js.map +1 -1
  191. package/esm/highlevel/worker/protocol.d.ts +2 -0
  192. package/esm/highlevel/worker/protocol.js.map +1 -1
  193. package/esm/highlevel/worker/worker.js +1 -0
  194. package/esm/highlevel/worker/worker.js.map +1 -1
  195. package/esm/network/client.d.ts +2 -0
  196. package/esm/network/client.js +8 -0
  197. package/esm/network/client.js.map +1 -1
  198. package/esm/network/mtproto-session.js +2 -0
  199. package/esm/network/mtproto-session.js.map +1 -1
  200. package/esm/network/network-manager.d.ts +9 -2
  201. package/esm/network/network-manager.js +35 -16
  202. package/esm/network/network-manager.js.map +1 -1
  203. package/esm/network/session-connection.js +12 -3
  204. package/esm/network/session-connection.js.map +1 -1
  205. package/esm/storage/sqlite/repository/peers.d.ts +2 -0
  206. package/esm/storage/sqlite/repository/peers.js +14 -0
  207. package/esm/storage/sqlite/repository/peers.js.map +1 -1
  208. package/esm/utils/bigint-utils.js +1 -1
  209. package/esm/utils/bigint-utils.js.map +1 -1
  210. package/esm/utils/misc-utils.d.ts +1 -0
  211. package/esm/utils/misc-utils.js +15 -0
  212. package/esm/utils/misc-utils.js.map +1 -1
  213. package/package.json +10 -5
@@ -4,7 +4,7 @@ import { ConnectionKind, RpcCallOptions } from '../network/network-manager.js';
4
4
  import { StorageManagerExtraOptions } from '../storage/storage.js';
5
5
  import { MustEqual } from '../types/utils.js';
6
6
  import { StringSessionData } from '../utils/index.js';
7
- import { ConnectionState, ITelegramClient } from './client.types.js';
7
+ import { ConnectionState, ITelegramClient, ServerUpdateHandler } from './client.types.js';
8
8
  import { AppConfigManager } from './managers/app-config-manager.js';
9
9
  import { ITelegramStorageProvider } from './storage/provider.js';
10
10
  import { TelegramStorageManager, TelegramStorageManagerExtraOptions } from './storage/storage.js';
@@ -99,7 +99,8 @@ export declare class BaseTelegramClient implements ITelegramClient {
99
99
  onError(handler: (err: unknown) => void): void;
100
100
  emitError(err: unknown): void;
101
101
  handleClientUpdate(updates: tl.TypeUpdates, noDispatch?: boolean): void;
102
- onServerUpdate(handler: (update: tl.TypeUpdates) => void): void;
102
+ onServerUpdate(handler: ServerUpdateHandler): void;
103
+ getServerUpdateHandler(): ServerUpdateHandler;
103
104
  onUpdate(handler: RawUpdateHandler): void;
104
105
  onConnectionState(handler: (state: ConnectionState) => void): void;
105
106
  getApiCrenetials(): Promise<{
@@ -110,4 +111,6 @@ export declare class BaseTelegramClient implements ITelegramClient {
110
111
  getPrimaryDcId(): Promise<number>;
111
112
  computeSrpParams(request: tl.account.RawPassword, password: string): Promise<tl.RawInputCheckPasswordSRP>;
112
113
  computeNewPasswordHash(algo: tl.TypePasswordKdfAlgo, password: string): Promise<Uint8Array>;
114
+ get stopSignal(): AbortSignal;
115
+ changePrimaryDc(dcId: number): Promise<void>;
113
116
  }
@@ -214,6 +214,9 @@ class BaseTelegramClient {
214
214
  onServerUpdate(handler) {
215
215
  this._serverUpdatesHandler = handler;
216
216
  }
217
+ getServerUpdateHandler() {
218
+ return this._serverUpdatesHandler;
219
+ }
217
220
  onUpdate(handler) {
218
221
  if (!this.updates) {
219
222
  throw new errors_js_1.MtArgumentError('Updates manager is disabled');
@@ -247,6 +250,12 @@ class BaseTelegramClient {
247
250
  computeNewPasswordHash(algo, password) {
248
251
  return (0, index_js_1.computeNewPasswordHash)(this.crypto, algo, password);
249
252
  }
253
+ get stopSignal() {
254
+ return this.mt.stopSignal;
255
+ }
256
+ changePrimaryDc(dcId) {
257
+ return this.mt.network.changePrimaryDc(dcId);
258
+ }
250
259
  }
251
260
  exports.BaseTelegramClient = BaseTelegramClient;
252
261
  //# sourceMappingURL=base.js.map
@@ -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 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"]}
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, ServerUpdateHandler } 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: ServerUpdateHandler = () => {}\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: ServerUpdateHandler): void {\n this._serverUpdatesHandler = handler\n }\n\n getServerUpdateHandler(): ServerUpdateHandler {\n return this._serverUpdatesHandler\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 get stopSignal(): AbortSignal {\n return this.mt.stopSignal\n }\n\n changePrimaryDc(dcId: number): Promise<void> {\n return this.mt.network.changePrimaryDc(dcId)\n }\n}\n"]}
@@ -36,7 +36,7 @@ import { getProfileStories } from './methods/stories/get-profile-stories.js';
36
36
  import { getStoryViewers } from './methods/stories/get-story-viewers.js';
37
37
  import { getProfilePhotos } from './methods/users/get-profile-photos.js';
38
38
  import { ITelegramStorageProvider } from './storage/provider.js';
39
- import { AllStories, ArrayPaginated, ArrayWithTotal, Boost, BoostSlot, BoostStats, BotChatJoinRequestUpdate, BotCommands, BotReactionCountUpdate, BotReactionUpdate, BotStoppedUpdate, BusinessChatLink, BusinessConnection, BusinessMessage, BusinessWorkHoursDay, CallbackQuery, Chat, ChatEvent, ChatInviteLink, ChatInviteLinkMember, ChatJoinRequestUpdate, ChatlistPreview, ChatMember, ChatMemberUpdate, ChatPreview, ChosenInlineResult, CollectibleInfo, DeleteBusinessMessageUpdate, DeleteMessageUpdate, DeleteStoryUpdate, Dialog, FactCheck, FileDownloadLocation, FileDownloadParameters, ForumTopic, FullChat, GameHighScore, HistoryReadUpdate, InlineCallbackQuery, InlineQuery, InputChatEventFilters, InputDialogFolder, InputFileLike, InputInlineResult, InputMediaLike, InputMediaSticker, InputMessageId, InputPeerLike, InputPrivacyRule, InputReaction, InputStickerSet, InputStickerSetItem, InputText, MaybeDynamic, Message, MessageEffect, MessageMedia, MessageReactions, ParametersSkip2, ParsedUpdate, PeerReaction, PeersIndex, PeerStories, Photo, Poll, PollUpdate, PollVoteUpdate, PreCheckoutQuery, RawDocument, ReplyMarkup, SentCode, Sticker, StickerSet, StickerSourceType, StickerType, StoriesStealthMode, Story, StoryInteractions, StoryUpdate, StoryViewer, StoryViewersList, TakeoutSession, TextWithEntities, TypingStatus, UploadedFile, UploadFileLike, User, UserStatusUpdate, UserTypingUpdate } from './types/index.js';
39
+ import { AllStories, ArrayPaginated, ArrayWithTotal, Boost, BoostSlot, BoostStats, BotChatJoinRequestUpdate, BotCommands, BotReactionCountUpdate, BotReactionUpdate, BotStoppedUpdate, BusinessCallbackQuery, BusinessChatLink, BusinessConnection, BusinessMessage, BusinessWorkHoursDay, CallbackQuery, Chat, ChatEvent, ChatInviteLink, ChatInviteLinkMember, ChatJoinRequestUpdate, ChatlistPreview, ChatMember, ChatMemberUpdate, ChatPreview, ChosenInlineResult, CollectibleInfo, DeleteBusinessMessageUpdate, DeleteMessageUpdate, DeleteStoryUpdate, Dialog, FactCheck, FileDownloadLocation, FileDownloadParameters, ForumTopic, FullChat, GameHighScore, HistoryReadUpdate, InlineCallbackQuery, InlineQuery, InputChatEventFilters, InputDialogFolder, InputFileLike, InputInlineResult, InputMediaLike, InputMediaSticker, InputMessageId, InputPeerLike, InputPrivacyRule, InputReaction, InputStickerSet, InputStickerSetItem, InputText, MaybeDynamic, Message, MessageEffect, MessageMedia, MessageReactions, ParametersSkip2, ParsedUpdate, PeerReaction, PeersIndex, PeerStories, Photo, Poll, PollUpdate, PollVoteUpdate, PreCheckoutQuery, RawDocument, ReplyMarkup, SentCode, Sticker, StickerSet, StickerSourceType, StickerType, StoriesStealthMode, Story, StoryInteractions, StoryUpdate, StoryViewer, StoryViewersList, TakeoutSession, TextWithEntities, TypingStatus, UploadedFile, UploadFileLike, User, UserStatusUpdate, UserTypingUpdate } from './types/index.js';
40
40
  import { ParsedUpdateHandlerParams } from './updates/parsed.js';
41
41
  import { StringSessionData } from './utils/string-session.js';
42
42
  type TelegramClientOptions = ((PartialOnly<Omit<BaseTelegramClientOptions, 'storage'>, 'transport' | 'crypto'> & {
@@ -147,6 +147,13 @@ export interface TelegramClient extends ITelegramClient {
147
147
  * @param handler Inline callback query handler
148
148
  */
149
149
  on(name: 'inline_callback_query', handler: (upd: InlineCallbackQuery) => void): this;
150
+ /**
151
+ * Register a business callback query handler
152
+ *
153
+ * @param name Event name
154
+ * @param handler Business callback query handler
155
+ */
156
+ on(name: 'business_callback_query', handler: (upd: BusinessCallbackQuery) => void): this;
150
157
  /**
151
158
  * Register a poll update handler
152
159
  *
@@ -335,6 +342,8 @@ export interface TelegramClient extends ITelegramClient {
335
342
  phone: string;
336
343
  /** Confirmation code identifier from {@link SentCode} */
337
344
  phoneCodeHash: string;
345
+ /** Abort signal */
346
+ abortSignal?: AbortSignal;
338
347
  }): Promise<SentCode>;
339
348
  /**
340
349
  * Simple wrapper that calls {@link start} and then
@@ -364,6 +373,8 @@ export interface TelegramClient extends ITelegramClient {
364
373
  futureAuthTokens?: Uint8Array[];
365
374
  /** Additional code settings to pass to the server */
366
375
  codeSettings?: Omit<tl.RawCodeSettings, '_' | 'logoutTokens'>;
376
+ /** Abort signal */
377
+ abortSignal?: AbortSignal;
367
378
  }): Promise<SentCode>;
368
379
  /**
369
380
  * Send a code to email needed to recover your password
@@ -383,6 +394,33 @@ export interface TelegramClient extends ITelegramClient {
383
394
  * @throws BadRequestError In case the bot token is invalid
384
395
  */
385
396
  signInBot(token: string): Promise<User>;
397
+ /**
398
+ * Execute the [QR login flow](https://core.telegram.org/api/qr-login).
399
+ *
400
+ * This method will resolve once the authorization is complete,
401
+ * returning the authorized user.
402
+ * **Available**: 👤 users only
403
+ *
404
+ */
405
+ signInQr(params: {
406
+ /**
407
+ * Function that will be called whenever the login URL is changed.
408
+ *
409
+ * The app is expected to display `url` as a QR code to the user
410
+ */
411
+ onUrlUpdated: (url: string, expires: Date) => void;
412
+ /** Password for 2FA */
413
+ password?: MaybeDynamic<string>;
414
+ /**
415
+ * Function that will be called after the server has rejected the password.
416
+ *
417
+ * Note that in case {@link password} is not a function,
418
+ * this callback will never be called, and an error will be thrown instead.
419
+ */
420
+ invalidPasswordCallback?: () => MaybePromise<void>;
421
+ /** Abort signal */
422
+ abortSignal?: AbortSignal;
423
+ }): Promise<User>;
386
424
  /**
387
425
  * Authorize a user in Telegram with a valid confirmation code.
388
426
  *
@@ -399,6 +437,8 @@ export interface TelegramClient extends ITelegramClient {
399
437
  phoneCodeHash: string;
400
438
  /** The confirmation code that was received */
401
439
  phoneCode: string;
440
+ /** Abort signal */
441
+ abortSignal?: AbortSignal;
402
442
  }): Promise<User>;
403
443
  /**
404
444
  * Utility function to quickly authorize on test DC
@@ -459,6 +499,14 @@ export interface TelegramClient extends ITelegramClient {
459
499
  * Whether to overwrite existing session.
460
500
  */
461
501
  sessionForce?: boolean;
502
+ /**
503
+ * When passed, [QR login flow](https://core.telegram.org/api/qr-login)
504
+ * will be used instead of the regular login flow.
505
+ *
506
+ * This function will be called whenever the login URL is changed,
507
+ * and the app is expected to display it as a QR code to the user.
508
+ */
509
+ qrCodeHandler?: (url: string, expires: Date) => void;
462
510
  /**
463
511
  * Phone number of the account.
464
512
  * If account does not exist, it will be created
@@ -503,6 +551,8 @@ export interface TelegramClient extends ITelegramClient {
503
551
  futureAuthTokens?: Uint8Array[];
504
552
  /** Additional code settings to pass to the server */
505
553
  codeSettings?: Omit<tl.RawCodeSettings, '_' | 'logoutTokens'>;
554
+ /** Abort signal */
555
+ abortSignal?: AbortSignal;
506
556
  }): Promise<User>;
507
557
  /**
508
558
  * Check if the given peer/input peer is referring to the current user
@@ -1049,11 +1099,9 @@ export interface TelegramClient extends ITelegramClient {
1049
1099
  deleteHistory(chat: InputPeerLike, params?: {
1050
1100
  /**
1051
1101
  * Deletion mode. Can be:
1052
- * - `delete`: delete messages (only for yourself)
1053
- * - `clear`: delete messages (only for yourself)
1102
+ * - `delete`: delete messages (only for yourself) AND the dialog itself
1103
+ * - `clear`: delete messages (only for yourself), but keep the dialog in the list
1054
1104
  * - `revoke`: delete messages for all users
1055
- * - I'm not sure what's the difference between `delete` and `clear`,
1056
- * but they are in fact different flags in TL object.
1057
1105
  *
1058
1106
  * @default 'delete'
1059
1107
  */
@@ -1782,7 +1830,7 @@ export interface TelegramClient extends ITelegramClient {
1782
1830
  /**
1783
1831
  * Get a preview of a chatlist by its invite link
1784
1832
  *
1785
- * **Available**: both users and bots
1833
+ * **Available**: 👤 users only
1786
1834
  *
1787
1835
  * @param link Invite link
1788
1836
  */
@@ -40,6 +40,7 @@ const send_code_js_1 = require("./methods/auth/send-code.js");
40
40
  const send_recovery_code_js_1 = require("./methods/auth/send-recovery-code.js");
41
41
  const sign_in_js_1 = require("./methods/auth/sign-in.js");
42
42
  const sign_in_bot_js_1 = require("./methods/auth/sign-in-bot.js");
43
+ const sign_in_qr_js_1 = require("./methods/auth/sign-in-qr.js");
43
44
  const start_js_1 = require("./methods/auth/start.js");
44
45
  const start_test_js_1 = require("./methods/auth/start-test.js");
45
46
  const utils_js_1 = require("./methods/auth/utils.js");
@@ -286,6 +287,12 @@ class TelegramClient extends events_1.default {
286
287
  this.log = this._client.log;
287
288
  // @ts-expect-error codegen
288
289
  this.storage = this._client.storage;
290
+ Object.defineProperty(this, 'stopSignal', {
291
+ get: () => this._client.stopSignal,
292
+ });
293
+ Object.defineProperty(this, 'appConfig', {
294
+ get: () => this._client.appConfig,
295
+ });
289
296
  if (!opts.disableUpdates) {
290
297
  const skipConversationUpdates = opts.skipConversationUpdates ?? true;
291
298
  const { messageGroupingInterval } = opts.updates ?? {};
@@ -335,6 +342,9 @@ TelegramClient.prototype.sendRecoveryCode = function (...args) {
335
342
  TelegramClient.prototype.signInBot = function (...args) {
336
343
  return (0, sign_in_bot_js_1.signInBot)(this._client, ...args);
337
344
  };
345
+ TelegramClient.prototype.signInQr = function (...args) {
346
+ return (0, sign_in_qr_js_1.signInQr)(this._client, ...args);
347
+ };
338
348
  TelegramClient.prototype.signIn = function (...args) {
339
349
  return (0, sign_in_js_1.signIn)(this._client, ...args);
340
350
  };
@@ -1150,6 +1160,12 @@ TelegramClient.prototype.computeNewPasswordHash = function (...args) {
1150
1160
  TelegramClient.prototype.onConnectionState = function (...args) {
1151
1161
  return this._client.onConnectionState(...args);
1152
1162
  };
1163
+ TelegramClient.prototype.getServerUpdateHandler = function (...args) {
1164
+ return this._client.getServerUpdateHandler(...args);
1165
+ };
1166
+ TelegramClient.prototype.changePrimaryDc = function (...args) {
1167
+ return this._client.changePrimaryDc(...args);
1168
+ };
1153
1169
  TelegramClient.prototype.onServerUpdate = function () {
1154
1170
  throw new Error('onServerUpdate is not available for TelegramClient, use .on() methods instead');
1155
1171
  };