Add ensureAuth/authTimeout

This commit is contained in:
Jon Staab
2024-08-19 10:20:33 -07:00
parent bacc86823f
commit b89ec16997
2 changed files with 37 additions and 10 deletions
+19 -2
View File
@@ -1,7 +1,7 @@
import {Emitter, Worker} from '@welshman/lib'
import {Emitter, Worker, sleep} from '@welshman/lib'
import {AuthStatus, ConnectionMeta} from './ConnectionMeta'
import {Socket, isMessage, asMessage} from './Socket'
import type {SocketMessage} from './Socket'
import type {SocketMessage, Message} from './Socket'
export class Connection extends Emitter {
url: string
@@ -109,6 +109,23 @@ export class Connection extends Emitter {
}
}
ensureAuth = async ({timeout = 3000}) => {
await this.ensureConnected({shouldReconnect: true})
if (this.meta.authStatus === AuthStatus.Pending) {
await Promise.race([
sleep(timeout),
new Promise<void>(resolve => {
this.on('receive', (cxn: Connection, message: Message) => {
if (message[0] === 'OK' && message[2]) {
resolve()
}
})
})
])
}
}
disconnect() {
this.socket.disconnect()
this.sender.clear()