From a591df92e0ad7f3a1bd21e7a9e1874d16a268003 Mon Sep 17 00:00:00 2001 From: alina sireneva Date: Wed, 1 Jan 2025 06:30:46 +0300 Subject: [PATCH] fix(core): fixed signInQr method --- .../src/highlevel/methods/auth/sign-in-qr.ts | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/core/src/highlevel/methods/auth/sign-in-qr.ts b/packages/core/src/highlevel/methods/auth/sign-in-qr.ts index 139a4c2d..2cf565a9 100644 --- a/packages/core/src/highlevel/methods/auth/sign-in-qr.ts +++ b/packages/core/src/highlevel/methods/auth/sign-in-qr.ts @@ -2,7 +2,6 @@ import type { MaybePromise } from '../../../types/utils.js' import type { ITelegramClient } from '../../client.types.js' import type { MaybeDynamic } from '../../types/index.js' -import type { RawUpdateInfo } from '../../updates/types.js' import { base64, Deferred } from '@fuman/utils' import { tl } from '@mtcute/tl' import { sleepWithAbort } from '../../../utils/misc-utils.js' @@ -54,19 +53,19 @@ export async function signInQr( let waiter: Deferred | undefined - // todo: we should probably make this into an await-able function - const onUpdate = ({ update }: RawUpdateInfo) => { - if (update._ === 'updateLoginToken') { + // NB: at this point update manager is not active yet, so we can't use onRawUpdate + const onUpdate = (update: tl.TypeUpdates) => { + if (update._ === 'updateShort' && update.update._ === 'updateLoginToken') { onQrScanned?.() waiter?.resolve() - client.onRawUpdate.remove(onUpdate) + client.onServerUpdate.remove(onUpdate) } } - client.onRawUpdate.add(onUpdate) + client.onServerUpdate.add(onUpdate) abortSignal?.addEventListener('abort', () => { - client.onRawUpdate.remove(onUpdate) + client.onServerUpdate.remove(onUpdate) waiter?.reject(abortSignal.reason) }) @@ -130,7 +129,10 @@ export async function signInQr( ) waiter = new Deferred() - await Promise.race([waiter, sleepWithAbort(res.expires * 1000 - Date.now(), client.stopSignal)]) + await Promise.race([ + waiter.promise, + sleepWithAbort(res.expires * 1000 - Date.now(), client.stopSignal), + ]) break case 'auth.loginTokenMigrateTo': { await client.changePrimaryDc(res.dcId) @@ -174,6 +176,6 @@ export async function signInQr( return new User(self) } finally { - client.onRawUpdate.remove(onUpdate) + client.onServerUpdate.remove(onUpdate) } }