fix(core): fixed signInQr method
This commit is contained in:
parent
70b5a423c6
commit
a591df92e0
1 changed files with 11 additions and 9 deletions
|
@ -2,7 +2,6 @@ import type { MaybePromise } from '../../../types/utils.js'
|
||||||
import type { ITelegramClient } from '../../client.types.js'
|
import type { ITelegramClient } from '../../client.types.js'
|
||||||
|
|
||||||
import type { MaybeDynamic } from '../../types/index.js'
|
import type { MaybeDynamic } from '../../types/index.js'
|
||||||
import type { RawUpdateInfo } from '../../updates/types.js'
|
|
||||||
import { base64, Deferred } from '@fuman/utils'
|
import { base64, Deferred } from '@fuman/utils'
|
||||||
import { tl } from '@mtcute/tl'
|
import { tl } from '@mtcute/tl'
|
||||||
import { sleepWithAbort } from '../../../utils/misc-utils.js'
|
import { sleepWithAbort } from '../../../utils/misc-utils.js'
|
||||||
|
@ -54,19 +53,19 @@ export async function signInQr(
|
||||||
|
|
||||||
let waiter: Deferred<void> | undefined
|
let waiter: Deferred<void> | undefined
|
||||||
|
|
||||||
// todo: we should probably make this into an await-able function
|
// NB: at this point update manager is not active yet, so we can't use onRawUpdate
|
||||||
const onUpdate = ({ update }: RawUpdateInfo) => {
|
const onUpdate = (update: tl.TypeUpdates) => {
|
||||||
if (update._ === 'updateLoginToken') {
|
if (update._ === 'updateShort' && update.update._ === 'updateLoginToken') {
|
||||||
onQrScanned?.()
|
onQrScanned?.()
|
||||||
waiter?.resolve()
|
waiter?.resolve()
|
||||||
client.onRawUpdate.remove(onUpdate)
|
client.onServerUpdate.remove(onUpdate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
client.onRawUpdate.add(onUpdate)
|
client.onServerUpdate.add(onUpdate)
|
||||||
|
|
||||||
abortSignal?.addEventListener('abort', () => {
|
abortSignal?.addEventListener('abort', () => {
|
||||||
client.onRawUpdate.remove(onUpdate)
|
client.onServerUpdate.remove(onUpdate)
|
||||||
waiter?.reject(abortSignal.reason)
|
waiter?.reject(abortSignal.reason)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -130,7 +129,10 @@ export async function signInQr(
|
||||||
)
|
)
|
||||||
|
|
||||||
waiter = new Deferred()
|
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
|
break
|
||||||
case 'auth.loginTokenMigrateTo': {
|
case 'auth.loginTokenMigrateTo': {
|
||||||
await client.changePrimaryDc(res.dcId)
|
await client.changePrimaryDc(res.dcId)
|
||||||
|
@ -174,6 +176,6 @@ export async function signInQr(
|
||||||
|
|
||||||
return new User(self)
|
return new User(self)
|
||||||
} finally {
|
} finally {
|
||||||
client.onRawUpdate.remove(onUpdate)
|
client.onServerUpdate.remove(onUpdate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue