38f185dff1
Signed-off-by: Jon Koops <jonkoops@gmail.com>
42 lines
1 KiB
TypeScript
42 lines
1 KiB
TypeScript
import KeycloakAdminClient from "@keycloak/keycloak-admin-client";
|
|
import {
|
|
createNamedContext,
|
|
useRequiredContext,
|
|
} from "@keycloak/keycloak-ui-shared";
|
|
import type Keycloak from "keycloak-js";
|
|
|
|
import type { Environment } from "./environment";
|
|
|
|
export type AdminClientProps = {
|
|
keycloak: Keycloak;
|
|
adminClient: KeycloakAdminClient;
|
|
};
|
|
|
|
export const AdminClientContext = createNamedContext<
|
|
AdminClientProps | undefined
|
|
>("AdminClientContext", undefined);
|
|
|
|
export const useAdminClient = () => useRequiredContext(AdminClientContext);
|
|
|
|
export async function initAdminClient(
|
|
keycloak: Keycloak,
|
|
environment: Environment,
|
|
) {
|
|
const adminClient = new KeycloakAdminClient();
|
|
|
|
adminClient.setConfig({ realmName: environment.realm });
|
|
adminClient.baseUrl = environment.adminBaseUrl;
|
|
adminClient.registerTokenProvider({
|
|
async getAccessToken() {
|
|
try {
|
|
await keycloak.updateToken(5);
|
|
} catch {
|
|
keycloak.login();
|
|
}
|
|
|
|
return keycloak.token;
|
|
},
|
|
});
|
|
|
|
return adminClient;
|
|
}
|