UNPKG

@keycloakify/keycloak-account-ui

Version:

<p align="center"> <img src="https://github.com/user-attachments/assets/e31c4910-7205-441c-9a35-e134b806b3a8"> </p> <p align="center"> <i>Repackaged Keycloak Account UI</i> <br> <br> <a href="https://github.com/keycloakify/keycloak-a

75 lines (66 loc) 1.8 kB
import { KeycloakContext, type BaseEnvironment, } from "@keycloakify/keycloak-account-ui/ui-shared"; import Keycloak from "keycloak-js"; import { joinPath } from "@keycloakify/keycloak-account-ui/utils/joinPath"; import { CONTENT_TYPE_HEADER, CONTENT_TYPE_JSON } from "@keycloakify/keycloak-account-ui/api/constants"; export type RequestOptions = { signal?: AbortSignal; getAccessToken?: () => Promise<string | undefined>; method?: "POST" | "PUT" | "DELETE"; searchParams?: Record<string, string>; body?: unknown; }; async function _request( url: URL, { signal, getAccessToken, method, searchParams, body }: RequestOptions = {}, ): Promise<Response> { if (searchParams) { Object.entries(searchParams).forEach(([key, value]) => url.searchParams.set(key, value), ); } return fetch(url, { signal, method, body: body ? JSON.stringify(body) : undefined, headers: { [CONTENT_TYPE_HEADER]: CONTENT_TYPE_JSON, authorization: `Bearer ${await getAccessToken?.()}`, }, }); } export async function request( path: string, { environment, keycloak }: KeycloakContext<BaseEnvironment>, opts: RequestOptions = {}, fullUrl?: URL, ) { if (typeof fullUrl === "undefined") { fullUrl = url(environment, path); } return _request(fullUrl, { ...opts, getAccessToken: token(keycloak), }); } export const url = (environment: BaseEnvironment, path: string) => new URL( joinPath( environment.serverBaseUrl, "realms", environment.realm, "account", path, ), ); export const token = (keycloak: Keycloak) => async function getAccessToken() { try { await keycloak.updateToken(5); } catch (error) { await keycloak.login(); } return keycloak.token; };