2023-05-03 11:27:27 +00:00
|
|
|
import KeycloakAdminClient from "@keycloak/keycloak-admin-client";
|
2024-05-08 08:23:43 +00:00
|
|
|
import {
|
|
|
|
createNamedContext,
|
|
|
|
useRequiredContext,
|
|
|
|
} from "@keycloak/keycloak-ui-shared";
|
|
|
|
import type Keycloak from "keycloak-js";
|
2023-05-03 11:27:27 +00:00
|
|
|
|
2024-06-06 06:36:46 +00:00
|
|
|
import type { Environment } from "./environment";
|
|
|
|
|
2024-05-08 08:23:43 +00:00
|
|
|
export type AdminClientProps = {
|
|
|
|
keycloak: Keycloak;
|
|
|
|
adminClient: KeycloakAdminClient;
|
|
|
|
};
|
2023-05-03 11:27:27 +00:00
|
|
|
|
2024-05-08 08:23:43 +00:00
|
|
|
export const AdminClientContext = createNamedContext<
|
|
|
|
AdminClientProps | undefined
|
|
|
|
>("AdminClientContext", undefined);
|
2023-05-03 11:27:27 +00:00
|
|
|
|
2024-05-08 08:23:43 +00:00
|
|
|
export const useAdminClient = () => useRequiredContext(AdminClientContext);
|
2023-05-03 11:27:27 +00:00
|
|
|
|
2024-05-08 08:23:43 +00:00
|
|
|
export async function initAdminClient(
|
|
|
|
keycloak: Keycloak,
|
2024-06-06 06:36:46 +00:00
|
|
|
environment: Environment,
|
2024-05-08 08:23:43 +00:00
|
|
|
) {
|
|
|
|
const adminClient = new KeycloakAdminClient();
|
|
|
|
|
|
|
|
adminClient.setConfig({ realmName: environment.realm });
|
2024-06-19 13:21:53 +00:00
|
|
|
adminClient.baseUrl = environment.adminBaseUrl;
|
2024-05-08 08:23:43 +00:00
|
|
|
adminClient.registerTokenProvider({
|
|
|
|
async getAccessToken() {
|
|
|
|
try {
|
|
|
|
await keycloak.updateToken(5);
|
2024-08-06 12:02:18 +00:00
|
|
|
} catch {
|
2024-05-08 08:23:43 +00:00
|
|
|
keycloak.login();
|
|
|
|
}
|
|
|
|
|
|
|
|
return keycloak.token;
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
return adminClient;
|
|
|
|
}
|