2022-04-01 21:38:47 +00:00
|
|
|
import { EventEmitter } from 'events';
|
|
|
|
import { frejaLoginStatus } from './routes';
|
2022-04-06 06:41:11 +00:00
|
|
|
import { Fetcher, FrejaLoginStatusChecker, RequestInit } from '@skolplattformen/api';
|
2022-04-01 21:38:47 +00:00
|
|
|
export class FrejaChecker extends EventEmitter implements FrejaLoginStatusChecker {
|
|
|
|
public token: string;
|
|
|
|
|
2022-04-06 06:41:11 +00:00
|
|
|
private fetcher: Fetcher
|
|
|
|
private url: string
|
2022-04-01 21:38:47 +00:00
|
|
|
|
|
|
|
private cancelled = false;
|
|
|
|
|
2022-04-22 12:38:13 +00:00
|
|
|
constructor(fetcher: Fetcher, token: string) {
|
2022-04-01 21:38:47 +00:00
|
|
|
super();
|
|
|
|
this.fetcher = fetcher
|
2022-04-22 12:38:13 +00:00
|
|
|
|
2022-04-01 21:38:47 +00:00
|
|
|
this.token = token
|
|
|
|
this.url = frejaLoginStatus;
|
|
|
|
this.check();
|
|
|
|
}
|
|
|
|
|
|
|
|
async check(): Promise<void> {
|
2022-04-22 12:38:13 +00:00
|
|
|
const response = await this.fetcher('freja-login-status', this.url);
|
2022-04-01 21:38:47 +00:00
|
|
|
const status = await response.text();
|
2022-04-22 12:38:13 +00:00
|
|
|
console.log(status)
|
2022-04-01 21:38:47 +00:00
|
|
|
this.emit(status);
|
|
|
|
if (!this.cancelled &&
|
|
|
|
status !== 'APPROVED' &&
|
2022-04-11 20:20:22 +00:00
|
|
|
status !== 'ERROR' &&
|
2022-04-01 21:38:47 +00:00
|
|
|
status !== 'CANCELLED'
|
|
|
|
){
|
|
|
|
setTimeout(() => this.check(), 1000);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async cancel(): Promise<void> {
|
|
|
|
this.cancelled = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export const checkStatus = (
|
|
|
|
fetch: Fetcher,
|
|
|
|
token: string,
|
2022-04-06 06:41:11 +00:00
|
|
|
session: RequestInit
|
2022-04-22 12:38:13 +00:00
|
|
|
): FrejaLoginStatusChecker => new FrejaChecker(fetch, token)
|
2022-04-01 21:38:47 +00:00
|
|
|
|