44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
import { AlaiRepository } from "#infrastructure/AlaiRepository.js";
|
|
import { JWTToken } from "sim-shared/domain/JWT.js";
|
|
import { JWTProvider } from "sim-shared/infrastructure/HTTPClient.js";
|
|
import { httpsAgent } from "#config/httpsAgent.js";
|
|
|
|
export class AlaiTokenManager implements JWTProvider<{}> {
|
|
|
|
isRefreshing: boolean = false;
|
|
authToken: JWTToken<{}> | undefined;
|
|
|
|
private async getNewAuthToken() {
|
|
// TODO: Si no funcionase hay que reprogramar los mensajes para ser
|
|
// consumidos mas tarde.
|
|
const res = await AlaiRepository.login(httpsAgent);
|
|
|
|
if (res.error != undefined) {
|
|
console.error("Error obteniendo el token de ALAI", res.error)
|
|
} else {
|
|
console.log("Obtenido token de ALAI: ", res)
|
|
this.authToken = new JWTToken(res.data.accessToken)
|
|
}
|
|
}
|
|
|
|
public tryRefreshToken(): Promise<JWTToken<{}>> {
|
|
// En Alai no existe el concepto de refresh, se solicita otro token nuevo
|
|
return this.getAccessToken()
|
|
};
|
|
|
|
public async getAccessToken(): Promise<JWTToken<{}>> {
|
|
// Caso 1: El token actual es valido
|
|
if (this.authToken != undefined && !this.authToken.isExpired()) {
|
|
return this.authToken
|
|
} else {
|
|
// Caso 2: El token actual no existe o ha expirado
|
|
await this.getNewAuthToken()
|
|
}
|
|
|
|
// Si después de todo no se ha generado el token es un error catastrofico
|
|
if (this.authToken == undefined) throw new Error("Error obteniendo tokens de auth")
|
|
|
|
return this.authToken
|
|
};
|
|
}
|