Files
KIS-TOiR/client/src/auth/keycloak.ts

44 lines
949 B
TypeScript

import Keycloak from 'keycloak-js';
import { env } from '../config/env';
const keycloak = new Keycloak({
url: env.keycloakUrl,
realm: env.keycloakRealm,
clientId: env.keycloakClientId,
});
let initPromise: Promise<boolean> | null = null;
let refreshPromise: Promise<string | null> | null = null;
export async function initKeycloak(): Promise<boolean> {
if (!initPromise) {
initPromise = keycloak.init({
onLoad: 'login-required',
pkceMethod: 'S256',
checkLoginIframe: false,
});
}
return initPromise;
}
export async function getAccessToken(): Promise<string | null> {
await initKeycloak();
if (!keycloak.authenticated) return null;
if (!refreshPromise) {
refreshPromise = keycloak
.updateToken(30)
.then(() => keycloak.token ?? null)
.finally(() => {
refreshPromise = null;
});
}
return refreshPromise;
}
export function getKeycloak() {
return keycloak;
}