keycloak-d4science-spi-parent/keycloak-d4science-theme/src/main/resources/theme/d4science/account/resources/assets/Page-Q00E4OWK.js.map

1 line
14 KiB
Plaintext

{"version":3,"file":"Page-Q00E4OWK.js","sources":["../../src/utils/isRecord.ts","../../src/api/constants.ts","../../src/api/parse-response.ts","../../src/api/request.ts","../../src/api/methods.ts","../../src/components/page/Page.tsx"],"sourcesContent":["export const isRecord = (value: unknown): value is Record<string, unknown> =>\r\n typeof value === \"object\" && value !== null;\r\n","export const CONTENT_TYPE_HEADER = \"content-type\";\r\nexport const CONTENT_TYPE_JSON = \"application/json\";\r\n","import { isRecord } from \"../utils/isRecord\";\r\nimport { CONTENT_TYPE_HEADER, CONTENT_TYPE_JSON } from \"./constants\";\r\n\r\nexport class ApiError extends Error {}\r\n\r\nexport async function parseResponse<T>(response: Response): Promise<T> {\r\n const contentType = response.headers.get(CONTENT_TYPE_HEADER);\r\n const isJSON = contentType ? contentType.includes(CONTENT_TYPE_JSON) : false;\r\n\r\n if (!isJSON) {\r\n throw new Error(\r\n `Expected response to have a JSON content type, got '${contentType}' instead.`,\r\n );\r\n }\r\n\r\n const data = await parseJSON(response);\r\n\r\n if (!response.ok) {\r\n throw new ApiError(getErrorMessage(data));\r\n }\r\n\r\n return data as T;\r\n}\r\n\r\nasync function parseJSON(response: Response): Promise<unknown> {\r\n try {\r\n return await response.json();\r\n } catch (error) {\r\n throw new Error(\"Unable to parse response as valid JSON.\", {\r\n cause: error,\r\n });\r\n }\r\n}\r\n\r\nfunction getErrorMessage(data: unknown): string {\r\n if (!isRecord(data)) {\r\n throw new Error(\"Unable to retrieve error message from response.\");\r\n }\r\n\r\n const errorKeys = [\"error_description\", \"errorMessage\", \"error\"];\r\n\r\n for (const key of errorKeys) {\r\n const value = data[key];\r\n\r\n if (typeof value === \"string\") {\r\n return value;\r\n }\r\n }\r\n\r\n throw new Error(\r\n \"Unable to retrieve error message from response, no matching key found.\",\r\n );\r\n}\r\n","import { Environment } from \"../environment\";\r\nimport Keycloak from \"keycloak-js\";\r\nimport { CONTENT_TYPE_HEADER, CONTENT_TYPE_JSON } from \"./constants\";\r\nimport { joinPath } from \"../utils/joinPath\";\r\nimport { KeycloakContext } from \"../root/KeycloakContext\";\r\n\r\nexport type RequestOptions = {\r\n signal?: AbortSignal;\r\n getAccessToken?: () => Promise<string | undefined>;\r\n method?: \"POST\" | \"PUT\" | \"DELETE\";\r\n searchParams?: Record<string, string>;\r\n body?: unknown;\r\n};\r\n\r\nasync function _request(\r\n url: URL,\r\n { signal, getAccessToken, method, searchParams, body }: RequestOptions = {},\r\n): Promise<Response> {\r\n if (searchParams) {\r\n Object.entries(searchParams).forEach(([key, value]) =>\r\n url.searchParams.set(key, value),\r\n );\r\n }\r\n\r\n return fetch(url, {\r\n signal,\r\n method,\r\n body: body ? JSON.stringify(body) : undefined,\r\n headers: {\r\n [CONTENT_TYPE_HEADER]: CONTENT_TYPE_JSON,\r\n authorization: `Bearer ${await getAccessToken?.()}`,\r\n },\r\n });\r\n}\r\n\r\nexport async function request(\r\n path: string,\r\n { environment, keycloak }: KeycloakContext,\r\n opts: RequestOptions = {},\r\n) {\r\n return _request(url(environment, path), {\r\n ...opts,\r\n getAccessToken: token(keycloak),\r\n });\r\n}\r\n\r\nexport const url = (environment: Environment, path: string) =>\r\n new URL(\r\n joinPath(environment.authUrl, \"realms\", environment.realm, \"account\", path),\r\n );\r\n\r\nexport const token = (keycloak: Keycloak) =>\r\n async function getAccessToken() {\r\n try {\r\n await keycloak.updateToken(5);\r\n } catch (error) {\r\n await keycloak.login();\r\n }\r\n\r\n return keycloak.token;\r\n };\r\n","import { KeycloakContext } from \"../root/KeycloakContext\";\r\nimport { joinPath } from \"../utils/joinPath\";\r\nimport { parseResponse } from \"./parse-response\";\r\nimport {\r\n ClientRepresentation,\r\n CredentialContainer,\r\n CredentialRepresentation,\r\n DeviceRepresentation,\r\n Group,\r\n LinkedAccountRepresentation,\r\n Permission,\r\n UserRepresentation,\r\n} from \"./representations\";\r\nimport { request } from \"./request\";\r\n\r\nexport type CallOptions = {\r\n context: KeycloakContext;\r\n signal?: AbortSignal;\r\n};\r\n\r\nexport type PaginationParams = {\r\n first: number;\r\n max: number;\r\n};\r\n\r\nexport async function getPersonalInfo({\r\n signal,\r\n context,\r\n}: CallOptions): Promise<UserRepresentation> {\r\n const response = await request(\"/?userProfileMetadata=true\", context, {\r\n signal,\r\n });\r\n return parseResponse<UserRepresentation>(response);\r\n}\r\n\r\nexport async function getSupportedLocales({\r\n signal,\r\n context,\r\n}: CallOptions): Promise<string[]> {\r\n const response = await request(\"/supportedLocales\", context, { signal });\r\n return parseResponse<string[]>(response);\r\n}\r\n\r\nexport async function savePersonalInfo(\r\n context: KeycloakContext,\r\n info: UserRepresentation,\r\n): Promise<void> {\r\n const response = await request(\"/\", context, { body: info, method: \"POST\" });\r\n if (!response.ok) {\r\n const { errors } = await response.json();\r\n throw errors;\r\n }\r\n return undefined;\r\n}\r\n\r\nexport async function getPermissionRequests(\r\n resourceId: string,\r\n { signal, context }: CallOptions,\r\n): Promise<Permission[]> {\r\n const response = await request(\r\n `/resources/${resourceId}/permissions/requests`,\r\n context,\r\n { signal },\r\n );\r\n\r\n return parseResponse<Permission[]>(response);\r\n}\r\n\r\nexport async function getDevices({\r\n signal,\r\n context,\r\n}: CallOptions): Promise<DeviceRepresentation[]> {\r\n const response = await request(\"/sessions/devices\", context, { signal });\r\n return parseResponse<DeviceRepresentation[]>(response);\r\n}\r\n\r\nexport async function getApplications({\r\n signal,\r\n context,\r\n}: CallOptions): Promise<ClientRepresentation[]> {\r\n const response = await request(\"/applications\", context, { signal });\r\n return parseResponse<ClientRepresentation[]>(response);\r\n}\r\n\r\nexport async function deleteConsent(context: KeycloakContext, id: string) {\r\n return request(`/applications/${id}/consent`, context, { method: \"DELETE\" });\r\n}\r\n\r\nexport async function deleteSession(context: KeycloakContext, id?: string) {\r\n return request(`/sessions${id ? `/${id}` : \"\"}`, context, {\r\n method: \"DELETE\",\r\n });\r\n}\r\n\r\nexport async function getCredentials({ signal, context }: CallOptions) {\r\n const response = await request(\"/credentials\", context, {\r\n signal,\r\n });\r\n return parseResponse<CredentialContainer[]>(response);\r\n}\r\n\r\nexport async function deleteCredentials(\r\n context: KeycloakContext,\r\n credential: CredentialRepresentation,\r\n) {\r\n return request(\"/credentials/\" + credential.id, context, {\r\n method: \"DELETE\",\r\n });\r\n}\r\n\r\nexport async function getLinkedAccounts({ signal, context }: CallOptions) {\r\n const response = await request(\"/linked-accounts\", context, { signal });\r\n return parseResponse<LinkedAccountRepresentation[]>(response);\r\n}\r\n\r\nexport async function unLinkAccount(\r\n context: KeycloakContext,\r\n account: LinkedAccountRepresentation,\r\n) {\r\n const response = await request(\r\n \"/linked-accounts/\" + account.providerName,\r\n context,\r\n {\r\n method: \"DELETE\",\r\n },\r\n );\r\n if (response.ok) return;\r\n return parseResponse(response);\r\n}\r\n\r\nexport async function linkAccount(\r\n context: KeycloakContext,\r\n account: LinkedAccountRepresentation,\r\n) {\r\n const redirectUri = encodeURIComponent(\r\n joinPath(\r\n context.environment.authUrl,\r\n \"realms\",\r\n context.environment.realm,\r\n \"account\",\r\n ),\r\n );\r\n const response = await request(\r\n \"/linked-accounts/\" + account.providerName,\r\n context,\r\n {\r\n searchParams: { providerId: account.providerName, redirectUri },\r\n },\r\n );\r\n return parseResponse<{ accountLinkUri: string }>(response);\r\n}\r\n\r\nexport async function getGroups({ signal, context }: CallOptions) {\r\n const response = await request(\"/groups\", context, {\r\n signal,\r\n });\r\n return parseResponse<Group[]>(response);\r\n}\r\n","import { PageSection, Text, TextContent, Title } from \"@patternfly/react-core\";\r\nimport { PropsWithChildren } from \"react\";\r\n\r\ntype PageProps = {\r\n title: string;\r\n description: string;\r\n};\r\n\r\nexport const Page = ({\r\n title,\r\n description,\r\n children,\r\n}: PropsWithChildren<PageProps>) => {\r\n return (\r\n <>\r\n <PageSection variant=\"light\">\r\n <TextContent>\r\n <Title headingLevel=\"h1\" data-testid=\"page-heading\">\r\n {title}\r\n </Title>\r\n <Text component=\"p\">{description}</Text>\r\n </TextContent>\r\n </PageSection>\r\n <PageSection variant=\"light\">{children}</PageSection>\r\n </>\r\n );\r\n};\r\n"],"names":["isRecord","value","CONTENT_TYPE_HEADER","CONTENT_TYPE_JSON","ApiError","parseResponse","response","contentType","data","parseJSON","getErrorMessage","error","errorKeys","key","_request","url","signal","getAccessToken","method","searchParams","body","request","path","environment","keycloak","opts","token","joinPath","getPersonalInfo","context","getSupportedLocales","savePersonalInfo","info","errors","getPermissionRequests","resourceId","getDevices","getApplications","deleteConsent","id","deleteSession","getCredentials","deleteCredentials","credential","getLinkedAccounts","unLinkAccount","account","linkAccount","redirectUri","getGroups","Page","title","description","children","jsxs","Fragment","jsx","PageSection","TextContent","Title","Text"],"mappings":"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"}