44 lines
949 B
TypeScript
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;
|
|
}
|