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 | null = null; let refreshPromise: Promise | null = null; export async function initKeycloak(): Promise { if (!initPromise) { initPromise = keycloak.init({ onLoad: 'login-required', pkceMethod: 'S256', checkLoginIframe: false, }); } return initPromise; } export async function getAccessToken(): Promise { 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; }