import { EventEmitter } from 'events' import { loginStatus } from './routes' import { AuthTicket, Fetcher, LoginStatusChecker } from '@skolplattformen/api' export class Checker extends EventEmitter implements LoginStatusChecker { public token: string private fetcher: Fetcher private url: string private cancelled = false constructor(fetcher: Fetcher, ticket: AuthTicket) { super() this.fetcher = fetcher this.url = loginStatus(ticket.order) this.token = ticket.token this.check() } async check(): Promise { const response = await this.fetcher('login-status', this.url) const status = await response.text() this.emit(status) if ( !this.cancelled && status !== 'OK' && status !== 'ERROR!' && status !== 'CANCELLED' ) { setTimeout(() => this.check(), 1000) } } async cancel(): Promise { this.cancelled = true } } export const checkStatus = ( fetch: Fetcher, ticket: AuthTicket ): LoginStatusChecker => new Checker(fetch, ticket) export class DummyStatusChecker extends EventEmitter implements LoginStatusChecker { token = '' async cancel(): Promise { // do nothing } }