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

1 line
14 KiB
Plaintext
Raw Normal View History

{"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 DeviceRepresent